feat(canopy-enrollment): wire overpayment recovery pipeline (currently log-only)
Context
The appeal.overpayment_assessed event handler at services/canopy-enrollment/src/main.rs:154-156 only emits a tracing::info!:
// For now, log the event — full recovery pipeline is post-UAT.No claim row, no recovery hook, no offset against future issuances, no claims-database integration. The "post-UAT" promise is anchored only to this comment — not to any plan or roadmap row.
Acceptance criteria
- Claims-database table for overpayments + recovery state (forward-only migration per ADR-016)
- On
appeal.overpayment_assessed: persist a claim row with original determination, amount, fault classification (IPV / agency error / inadvertent household error) - Issuance pipeline checks active claims and offsets per FNS overpayment recovery rules (7 CFR 273.18 for SNAP)
- Recovery cap respects 10% / $10 minimum per program rules
- Integration test covering at least the SNAP IHE recovery path
- CHANGELOG entry under
Added
Surfaced by
Multi-agent plan-vs-code audit, 2026-05-05.