cf9af8e1d9
Replaces the in-memory store with SQLite via SQLAlchemy 2.0; adds automatic 837P ↔ 835 reconciliation on every 835 parse; ships a manual /reconciliation page; extends the claim lifecycle to a 7-state model with reversal handling. Key decisions (locked from brainstorming): - SQLite at ~/.local/share/cyclone/cyclone.db, overridable via CYCLONE_DB_URL (Postgres escape hatch) - SQLAlchemy 2.0 sync ORM; PRAGMA user_version migration runner - Strict auto-match on patient_control_number (CLM01 == CLP01) within +/-7 days of service_date - 7-state claim model with reversal that sets Claim.state=REVERSED and preserves prior state on Match.prior_claim_state - Reconciliation triggered inside store.add() after ERA persist; fail-soft (logged + activity event, never blocks parse) - 3 new API endpoints; new /reconciliation page; same palette and aesthetic voice as sub-project 1 Spec is approved-section-by-section and self-reviewed.