fix(sp37): sync head-assertion + update batch_envelope_index docstrings

- test_acks.py:test_migration_latest_idempotent_on_fresh_db was still
  asserting user_version == 19; migration 0020 (Task 1) bumped it to 20.
  Without this fix, the full pytest suite fails the moment SP37 ships.
- claim_acks.py module docstring + store/__init__.py facade docstring
  still advertised the index as single-key {envelope.control_number:
  batch.id}. SP37 Task 3 made it dual-key (ISA13 + ST02); the docs now
  match the implementation.
This commit is contained in:
Nora
2026-07-07 10:34:46 -06:00
parent 7ad190c267
commit 298200fe71
3 changed files with 16 additions and 7 deletions
+7 -1
View File
@@ -325,7 +325,13 @@ class CycloneStore:
return _remove_claim_ack(link_id, event_bus=event_bus) return _remove_claim_ack(link_id, event_bus=event_bus)
def batch_envelope_index(self): def batch_envelope_index(self):
"""Return a {envelope.control_number: batch.id} map for D10 Pass 1.""" """Return a {key: batch.id} map populated from two columns (D10 Pass 1).
Each 837p batch contributes both ``Batch.raw_result_json.envelope.control_number``
(ISA13) and ``Batch.transaction_set_control_number`` (ST02); 835 batches
are excluded. Single ``.get(set_control_number)`` lookup resolves
either key — SP37 closes the 999 AK201 → source-batch gap.
"""
return _batch_envelope_index() return _batch_envelope_index()
# -- SP17: encrypted DB backups ------------------------------------- # -- SP17: encrypted DB backups -------------------------------------
+4 -2
View File
@@ -11,8 +11,10 @@ Five methods on top of the new ``ClaimAck`` ORM table:
ack-orphans lane). ack-orphans lane).
* ``remove_claim_ack`` — unlink. Publishes ``claim_ack_dropped``. * ``remove_claim_ack`` — unlink. Publishes ``claim_ack_dropped``.
* ``batch_envelope_index`` — D10 in-memory map of * ``batch_envelope_index`` — D10 in-memory map of
``Batch.envelope.control_number → batch.id`` (cheap to rebuild; ``{Batch.raw_result_json.envelope.control_number (ISA13) OR
re-built once per ingest). Batch.transaction_set_control_number (ST02)} → batch.id``
(SP37: populated from two columns; cheap to rebuild, re-built
once per ingest).
Each mutating method opens its own ``db.SessionLocal()()`` session Each mutating method opens its own ``db.SessionLocal()()`` session
so callers don't have to manage session lifecycles. Publishes are so callers don't have to manage session lifecycles. Publishes are
+5 -4
View File
@@ -51,7 +51,7 @@ def test_migration_0002_creates_acks_table():
def test_migration_latest_idempotent_on_fresh_db(): def test_migration_latest_idempotent_on_fresh_db():
"""Re-running the migration on the same DB must be a no-op (PRAGMA """Re-running the migration on the same DB must be a no-op (PRAGMA
user_version already at the latest version — currently 19 after user_version already at the latest version — currently 20 after
0004-0006 line_reconciliation, 0005 ta1_acks, SP9's 0007 0004-0006 line_reconciliation, 0005 ta1_acks, SP9's 0007
providers/payers/clearhouse, SP10's 0008 payer_rejected, providers/payers/clearhouse, SP10's 0008 payer_rejected,
SP11's 0009 audit_log, SP14's 0010 payer_rejected_acknowledged, SP11's 0009 audit_log, SP14's 0010 payer_rejected_acknowledged,
@@ -61,15 +61,16 @@ def test_migration_latest_idempotent_on_fresh_db():
claims.matched_remittance_id index, SP27-Task 17's 0017 claims.matched_remittance_id index, SP27-Task 17's 0017
claim.patient_control_number backfill UPDATE, SP28's 0018 claim.patient_control_number backfill UPDATE, SP28's 0018
claim_acks join table, SP32's 0019 claim_acks join table, SP32's 0019
rendering_provider_npi + service_provider_npi).""" rendering_provider_npi + service_provider_npi, and SP37's 0020
transaction_set_control_number)."""
with db.engine().begin() as c: with db.engine().begin() as c:
v1 = c.exec_driver_sql("PRAGMA user_version").scalar() or 0 v1 = c.exec_driver_sql("PRAGMA user_version").scalar() or 0
assert v1 == 19 assert v1 == 20
# A second run should not raise and should not bump the version. # A second run should not raise and should not bump the version.
db_migrate.run(db.engine()) db_migrate.run(db.engine())
with db.engine().begin() as c: with db.engine().begin() as c:
v2 = c.exec_driver_sql("PRAGMA user_version").scalar() or 0 v2 = c.exec_driver_sql("PRAGMA user_version").scalar() or 0
assert v2 == 19 assert v2 == 20
def test_add_ack_persists_row(): def test_add_ack_persists_row():