Session 42 — Payments Page Fixes + Remittance Pipeline Verification

What was built

  • Fixed _clean_date() in portal-payment-recon to handle M/D/YYYY date format from payment_tracking.db
    • Root cause: last_payment stored as “4/9/2026” (8 chars), but _clean_date required ≥10 chars (ISO format)
    • “Paid This Month” was always $0 because paid_date was null for every enriched invoice
  • Fixed UTC off-by-one date display on Entirely-v2 payments page
    • new Date("2026-04-02") parsed as UTC midnight → displayed as Apr 1 in Eastern time
    • Applied T00:00:00 suffix to force local-time parsing in formatDate, isWithinRange, paidThisMonth
  • Added paid date column to invoice ledger in Paid view
    • Column header switches “DATE” → “PAID” when Paid filter active
    • Date cell shows paid_date (from reconciliation) instead of invoice_date (date sent)
    • Paid view sorted by paid_date descending (most recent payments first)
    • Date range filters (30D/90D/YTD) apply to paid_date in Paid view

Remittance Pipeline Verification

  • EFT $15,300 from Groundworks (remittance 189) arrived 4:00 PM ET, processed at 4:01 PM ET
  • 8 of 10 lines matched (all Manassas, exact match, 100% confidence): $11,300
  • 7 of 8 auto-executed (invoice_status → Paid, project → Closed)
  • 1 blocked by write guard: MANA-INV-9039 (cert_status=‘Not Started’)
  • 2 unmatched: DRAFT (2,300, PINV0464314) — no corresponding projects in Supabase

Commits

  • 6718935 (mostly-api) — Fix _clean_date to handle M/D/YYYY payment dates
  • d32f739 (entirely-portal) — Fix payments page: paid date column, date off-by-one, paid date sorting

Key Insight

The remittance inbox cron worked correctly — the issue was purely UI. Payment data was processed and stored but the payments page couldn’t display it due to date format mismatch and missing paid date column.