Cross-document mathematical consistency checks for commercial lending deals
Called after underwriting state is loaded, or on demand via POST /api/deals/[dealId]/reconcile.
Entry point: reconcileDeal() in src/lib/reconciliation/dealReconciliator.ts
Writes to: deal_reconciliation_results (overall_status, hard_failures, soft_flags)
Emits: deal.reconciliation_complete ledger event
The reconciliator reads from deal_financial_facts with these fallbacks:
A check is SKIPPED (not FAILED) when prerequisite facts are absent. checksSkipped > 0 is normal for deals with incomplete Schedule L extraction.