From cf7c343ff087e1c07343eb886db81c4a931be0f6 Mon Sep 17 00:00:00 2001 From: Nora Date: Thu, 2 Jul 2026 20:23:56 -0600 Subject: [PATCH] feat(sp33): PayerConfig.co_medicaid() emits CO_TXIX --- backend/src/cyclone/parsers/payer.py | 4 +-- ...test_co_medicaid_payer_id_emits_CO_TXIX.py | 33 +++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 backend/tests/test_co_medicaid_payer_id_emits_CO_TXIX.py diff --git a/backend/src/cyclone/parsers/payer.py b/backend/src/cyclone/parsers/payer.py index 4851b22..1a3799d 100644 --- a/backend/src/cyclone/parsers/payer.py +++ b/backend/src/cyclone/parsers/payer.py @@ -66,8 +66,8 @@ class PayerConfig(BaseModel): # Lenient in v1 — see spec §9 R031. require_ref_g1_for_adjustments=False, allowed_bht06={"CH"}, - payer_id="SKCO0", - payer_name="COHCPF", + payer_id="CO_TXIX", + payer_name="CO_TXIX", no_patient_loop=True, encounter_claim_in_same_batch=False, allowed_facility_qualifiers={"B"}, diff --git a/backend/tests/test_co_medicaid_payer_id_emits_CO_TXIX.py b/backend/tests/test_co_medicaid_payer_id_emits_CO_TXIX.py new file mode 100644 index 0000000..bf88cfc --- /dev/null +++ b/backend/tests/test_co_medicaid_payer_id_emits_CO_TXIX.py @@ -0,0 +1,33 @@ +"""SP33 regression test: ``PayerConfig.co_medicaid()`` emits CO_TXIX. + +The HCPF 837P Companion Guide (June 2025 - Version 2.5) requires +``NM1*PR NM108=PI, NM109=CO_TXIX`` for the Payer Name loop (2010BB). +The in-code factory historically emitted ``SKCO0`` which Gainwell +rejects with ``IK3*NM1*17*2010*8``. This test pins the corrected value. +See ``docs/superpowers/specs/2026-07-02-cyclone-co-txix-payer-fix-design.md``. +""" +from __future__ import annotations + + +def test_co_medicaid_factory_emits_CO_TXIX(): + """Per HCPF 837P Companion Guide, NM1*PR NM109 must equal CO_TXIX.""" + from cyclone.parsers.payer import PayerConfig + cfg = PayerConfig.co_medicaid() + assert cfg.payer_id == "CO_TXIX", ( + f"co_medicaid().payer_id must be 'CO_TXIX' (HCPF guide), got {cfg.payer_id!r}" + ) + assert cfg.payer_name == "CO_TXIX", ( + f"co_medicaid().payer_name must be 'CO_TXIX' (matches docs/goodclaim.x12), got {cfg.payer_name!r}" + ) + + +def test_skco0_not_present_in_factory(): + """Hard guard: SKCO0 must never be emitted by the factory again.""" + from cyclone.parsers.payer import PayerConfig + cfg = PayerConfig.co_medicaid() + assert "SKCO0" not in cfg.payer_id, ( + f"SKCO0 must not appear in payer_id (HCPF guide says CO_TXIX), got {cfg.payer_id!r}" + ) + assert "SKCO0" not in cfg.payer_name, ( + f"SKCO0 must not appear in payer_name, got {cfg.payer_name!r}" + )