feat(backend): 837P parser orchestrator with HL walker

This commit is contained in:
Tyler
2026-06-19 15:52:58 -06:00
parent 1cab95ffc3
commit 1f7cb11fd5
2 changed files with 469 additions and 0 deletions
+70
View File
@@ -0,0 +1,70 @@
from datetime import date
from pathlib import Path
from cyclone.parsers.parse_837 import parse
from cyclone.parsers.payer import PayerConfig
FIXTURE = Path(__file__).parent / "fixtures" / "minimal_837p.txt"
def test_parse_minimal_fixture_returns_one_claim():
text = FIXTURE.read_text()
result = parse(text, PayerConfig.co_medicaid())
assert len(result.claims) == 1
claim = result.claims[0]
assert claim.claim_id == "CLM001"
assert claim.billing_provider.npi == "1234567890"
assert claim.subscriber.last_name == "Doe"
assert claim.subscriber.first_name == "John"
assert claim.subscriber.member_id == "ABC123"
assert claim.payer.id == "SKCO0"
assert claim.claim.frequency_code == "1"
assert claim.claim.place_of_service == "12"
assert claim.claim.prior_auth == "PA123"
assert claim.diagnoses[0].code == "Z00"
assert claim.diagnoses[0].qualifier == "ABK"
assert len(claim.service_lines) == 1
sl = claim.service_lines[0]
assert sl.procedure.code == "99213"
assert sl.procedure.qualifier == "HC"
assert sl.charge == 100.00
def test_parse_envelope_captured():
result = parse(FIXTURE.read_text(), PayerConfig.co_medicaid())
assert result.envelope is not None
assert result.envelope.control_number == "991102977"
assert result.envelope.transaction_date == date(2026, 6, 11)
assert result.envelope.sender_id == "11525703"
def test_parse_summary_counts():
result = parse(FIXTURE.read_text(), PayerConfig.co_medicaid())
assert result.summary.total_claims == 1
assert result.summary.passed == 1
assert result.summary.failed == 0
def test_parse_continues_on_malformed_subscriber():
"""A bad subscriber record must not abort the whole batch."""
text = FIXTURE.read_text().replace("MI*ABC123", "MI*") # truncate member id segment
result = parse(text, PayerConfig.co_medicaid())
# Should still find the claim, but with errors
assert len(result.claims) == 1
assert result.claims[0].validation.passed is False
assert result.summary.failed == 1
def test_parse_preserves_raw_segments():
result = parse(FIXTURE.read_text(), PayerConfig.co_medicaid())
claim = result.claims[0]
assert any(s[0] == "CLM" for s in claim.raw_segments)
assert any(s[0] == "SV1" for s in claim.raw_segments)
def test_parse_uses_generic_config_when_requested():
result = parse(FIXTURE.read_text(), PayerConfig.generic_837p())
assert len(result.claims) == 1
# No patient-loop rule on generic config
assert result.claims[0].validation.passed is True