[pytest]
addopts = --headed --slowmo 100
markers =
    e2e_seed: data setup cases that create or refresh runtime/e2e_accounts.json
    e2e_ledger: tests that read or update runtime/e2e_accounts.json
    e2e_standalone: tests that can be run directly as entry points
    e2e_chain: chain progression tests that depend on prior ledger state
    e2e_saas_001: tenant registration and merchant certification
    e2e_saas_003: Wanyouji application opening and approval
    e2e_saas_004: Wanzhanggui application opening and approval
    e2e_auth_closed_loop: Wanyouji auth key generation and Wanzhanggui activation closed loop
    e2e_auth_new_enterprise: new enterprise registration, Wanyouji opening, and Wanzhanggui binding
    e2e_push_001: Wanzhanggui adds Wanyouji workshop authorization
    e2e_push_003: Wanzhanggui creates dispatch strategy
    e2e_order_001: Wanzhanggui manual order dispatch and Wanyouji order hall verification
    e2e_order_002: Wanzhanggui revoke dispatch and Wanyouji order hall invisibility verification
    e2e_auto_acceptance: Wanzhanggui/Wanyouji smart auto-acceptance flows
    data_config_001: Wanzhanggui data dictionary setup for work-order aftersale options
    data_config_002: Wanzhanggui data dictionary setup for work-order urgency options
    data_config_003: Wanzhanggui data dictionary setup for work-order follow-up options
    data_config_004: Wanzhanggui data dictionary setup for aftersale apply type options
    data_config_005: Wanzhanggui data dictionary setup for appeal type options
    data_config_006: Wanzhanggui data dictionary setup for penalty type options
    s_flow_001: order status flow S-FLOW-001 Wanzhanggui creates pending order without dispatch
    s_flow_002: order status flow S-FLOW-002 Wanzhanggui starts aftersale from pending no-dispatch order
    s_flow_003: order status flow S-FLOW-003 Wanzhanggui confirms any main-order aftersale from 售后中 to 已售后
    s_flow_004: order status flow S-FLOW-004 Wanzhanggui cancels pending aftersale
    s_flow_004: order status flow S-FLOW-004 Wanzhanggui cancels pending aftersale
    s_flow_005: order status flow S-FLOW-005 Wanzhanggui dispatches pending no-aftersale order
    s_flow_006: order status flow S-FLOW-006 Wanzhanggui dispatches after canceled aftersale
    s_flow_007: order status flow S-FLOW-007 Wanzhanggui creates pending order with dispatch
    s_flow_008: order status flow S-FLOW-008 Wanzhanggui starts aftersale from dispatched pending order
    s_flow_009: deprecated alias, main-order aftersale confirmation is covered by S-FLOW-003
    s_flow_010: order status flow S-FLOW-010 Wanzhanggui cancels aftersale from dispatched pending order
    s_flow_011: order status flow S-FLOW-011 Wanzhanggui revokes sub-order after canceling aftersale
    s_flow_012: order status flow S-FLOW-012 Wanzhanggui continues dispatch after sub-order cancellation
    s_flow_013: order status flow S-FLOW-013 Wanyouji rejects upstream order from order hall
    s_flow_014: order status flow S-FLOW-014 Wanyouji accepts upstream order from order hall
    s_flow_015: order status flow S-FLOW-015 Wanyouji applies to revoke accepted upstream order
    s_flow_016: order status flow S-FLOW-016 Wanzhanggui approves Wanyouji revoke request
    s_flow_017: order status flow S-FLOW-017 Wanzhanggui rejects Wanyouji revoke request
    s_flow_018: order status flow S-FLOW-018 Wanzhanggui starts main-order aftersale after Wanyouji accepted without player dispatch
    s_flow_020: order status flow S-FLOW-020 Wanzhanggui cancels main-order aftersale after Wanyouji accepted without player dispatch
    s_flow_021: order status flow S-FLOW-021 Wanyouji dispatches accepted upstream order to player
    s_flow_022: order status flow S-FLOW-022 Wanyouji workshop withdraws player dispatch
    s_flow_026: order status flow S-FLOW-026 player accepts dispatched order
    s_flow_027: order status flow S-FLOW-027 player applies revoke while in progress
    s_flow_028: order status flow S-FLOW-028 player cancels revoke and continues training
    s_flow_029: order status flow S-FLOW-029 Wanyouji rejects player revoke and continues training
    s_flow_030: order status flow S-FLOW-030 Wanyouji approves player revoke
    s_flow_031: order status flow S-FLOW-031 Wanyouji continues dispatch after player revoke approved
    s_flow_032: order status flow S-FLOW-032 Wanyouji continues dispatch after previous child order cancelled or revoked
    s_flow_033: order status flow S-FLOW-033 Wanyouji applies upstream revoke while player order is in progress
    s_flow_072: order status flow S-FLOW-072 Wanyouji opens penalty/recovery entry from completed or revoked-completed child order
    s_flow_073: order status flow S-FLOW-073 Wanyouji creates recovery order and player completes recovery
    s_flow_074: order status flow S-FLOW-074 Wanyouji creates direct penalty and player verifies penalty amount
    s_flow_075: order status flow S-FLOW-075 Wanyouji applies revoke after dispatching to player before player accepts
    s_flow_076: order status flow S-FLOW-076 Wanzhanggui approves Wanyouji revoke after player dispatch
    s_flow_077: order status flow S-FLOW-077 Wanzhanggui rejects Wanyouji revoke after player dispatch
    s_flow_078: order status flow S-FLOW-078 player sub-order revoke reaches terminal status
    s_flow_079: order status flow S-FLOW-079 Wanyouji dispatches accepted order to an assigned player
    s_flow_037: order status flow S-FLOW-037 player cancels assigned in-progress order
    s_flow_038_cancel_reject: order status flow S-FLOW-038 Wanyouji rejects player cancel request
    s_flow_039: order status flow S-FLOW-039 Wanyouji approves player cancel request
    s_flow_038: order status flow S-FLOW-038 Wanyouji accepts player sub-order
    s_flow_040: order status flow S-FLOW-040 player submits acceptance
    s_flow_041: order status flow S-FLOW-041 player cancels submitted acceptance and continues training
    s_flow_042: order status flow S-FLOW-042 Wanyouji rejects player sub-order acceptance
    s_flow_043: order status flow S-FLOW-043 Wanyouji accepts player sub-order
    s_flow_080: order status flow S-FLOW-080 player submits settlement bill after sub-order acceptance
    s_flow_081: order status flow S-FLOW-081 Wanyouji completes player settlement before continuing dispatch
    s_flow_044: order status flow S-FLOW-044 Wanyouji continues dispatch after completed child
    s_flow_045: order status flow S-FLOW-045 Wanyouji applies upstream acceptance
    s_flow_046: order status flow S-FLOW-046 Wanzhanggui starts main-order aftersale during pending acceptance
    s_flow_047: order status flow S-FLOW-047 Wanzhanggui confirms pending-acceptance main-order aftersale
    s_flow_048: order status flow S-FLOW-048 Wanzhanggui cancels pending-acceptance aftersale
    s_flow_082: order status flow S-FLOW-082 Wanyouji cancels upstream acceptance and both sides verify status
    s_flow_049: order status flow S-FLOW-049 Wanzhanggui completes upstream acceptance
    flow_044: order status flow FLOW-044 Wanyouji applies upstream acceptance then cancels it
    s_flow_050: order status flow S-FLOW-050 Wanzhanggui starts appeal from completed order
    s_flow_054: order status flow S-FLOW-054 Wanzhanggui starts penalty from accepted sub-order
    s_flow_055: order status flow S-FLOW-055 Wanyouji approves penalty from accepted sub-order
    s_flow_056: order status flow S-FLOW-056 Wanyouji rejects penalty from accepted sub-order
    flow_026: order status flow FLOW-026 completed order appeal approved chain
    flow_027: order status flow FLOW-027 completed order appeal rejected chain
    flow_028: order status flow FLOW-028 pending-acceptance aftersale completed then appeal approved chain
    flow_029: order status flow FLOW-029 pending-acceptance aftersale completed then appeal rejected chain
    flow_030: order status flow FLOW-030 pending-acceptance aftersale canceled then abnormal sub-order aftersale started
    flow_045: order status flow FLOW-045 accepted sub-order penalty approved
    flow_047: order status flow FLOW-047 accepted sub-order penalty rejected
    s_flow_034: order status flow S-FLOW-034 Wanzhanggui starts row-level aftersale for abnormal sub-order
    s_flow_083: order status flow S-FLOW-083 Wanzhanggui cancels abnormal sub-order aftersale
    s_flow_035: order status flow S-FLOW-035 Wanyouji approves abnormal sub-order aftersale
    s_flow_036: order status flow S-FLOW-036 Wanyouji rejects abnormal sub-order aftersale
    s_flow_057: order status flow S-FLOW-057 Wanzhanggui continues dispatch after rejected sub-order
    s_flow_058: order status flow S-FLOW-058 Wanzhanggui starts sub-order aftersale after Wanyouji accepted without player dispatch
    s_flow_059: order status flow S-FLOW-059 Wanyouji approves sub-order aftersale after accepted without player dispatch
    s_flow_060: order status flow S-FLOW-060 Wanzhanggui cancels sub-order aftersale after accepted without player dispatch
    s_flow_061: order status flow S-FLOW-061 Wanzhanggui continues dispatch after aftersale-ended sub-order
    s_flow_062: order status flow S-FLOW-062 Wanzhanggui starts penalty from aftersale-ended sub-order
    s_flow_063: order status flow S-FLOW-063 Wanyouji approves penalty from aftersale-ended sub-order
    s_flow_064: order status flow S-FLOW-064 Wanyouji rejects penalty from aftersale-ended sub-order
    s_flow_065: order status flow S-FLOW-065 Wanzhanggui starts main-order aftersale from abnormal order
    s_flow_066: order status flow S-FLOW-066 Wanzhanggui cancels main-order aftersale from abnormal order
    s_flow_067: deprecated alias, main-order aftersale confirmation is covered by S-FLOW-003
    s_flow_068: order status flow S-FLOW-068 Wanzhanggui continues dispatch after revoke-ended sub-order
    s_flow_069: order status flow S-FLOW-069 Wanzhanggui starts penalty from revoke-ended sub-order
    s_flow_070: order status flow S-FLOW-070 Wanyouji approves penalty from revoke-ended sub-order
    s_flow_071: order status flow S-FLOW-071 Wanyouji rejects penalty from revoke-ended sub-order
    flow_042: order status flow FLOW-042 approve penalty from revoke-ended sub-order
    flow_043: order status flow FLOW-043 reject penalty from revoke-ended sub-order
    flow_013: order status flow FLOW-013 upstream revoke approved then recovery order completed by player
    flow_014: order status flow FLOW-014 upstream revoke rejected then direct penalty visible to player
    flow_022: order status flow FLOW-022 assigned player cancel approved then continue dispatch
    s_flow_051: order status flow S-FLOW-051 Wanzhanggui starts appeal from aftersale completed order
    s_flow_052: order status flow S-FLOW-052 Wanzhanggui approves main order appeal
    s_flow_053: order status flow S-FLOW-053 Wanzhanggui rejects main order appeal
    e2e_task_001: Wanyouji accepts external order and dispatches it to player order hall
    e2e_delivery_001: player confirms login, uploads first image, and submits acceptance
    e2e_delivery_002: Wanyouji accepts player sub-order and verifies player income
    e2e_settle_paycenter_001: payment center transaction app, channel, and account config setup before settlement payout
    e2e_settle_wanyouji_pay_001: Wanyouji online payout config and player settlement bill payout
    e2e_settle_wyj_emp_bill_init_001: Wanyouji creates player settlement bill from employee settlement pending list
    e2e_settle_player_account_001: player payment account setup before settlement
    e2e_settle_player_apply_001: player creates settlement bill from My Income
    e2e_main_001: full closed loop across registration, authorization, dispatch, and delivery
    e2e_main_002: main order-to-player-settlement flow from Wanzhanggui order to player settlement bill
