from datetime import UTC, date, datetime from zbt.domains.enrollment.models import Policy from zbt.domains.surrender.rules import SurrenderRule def test_policy_in_cooling_off_period_is_explained_as_full_refund() -> None: policy = Policy( id="01KZ0000000000000000000101", policy_no="ZBT-P-20260727-0101", order_id="01KZ0000000000000000000102", user_id="01KZ0000000000000000000103", product_id="01KZ0000000000000000000104", product_version_id="01KZ0000000000000000000105", plan_id="01KZ0000000000000000000106", premium_cents=15_900, currency="CNY", coverage_start=date(2026, 7, 27), coverage_end=date(2027, 7, 26), status="ACTIVE", issued_at=datetime(2026, 7, 26, 8, 0, tzinfo=UTC), ) quote = SurrenderRule().quote(policy, date(2026, 7, 29)) assert quote.cooling_off is True assert quote.refund_amount_cents == 15_900 assert quote.deduction_cents == 0 assert quote.refund_basis == "COOLING_OFF_FULL_REFUND" assert quote.refund_explanation == "保单仍在10天犹豫期内,按已交保费全额退还。"