--- id: S03 name: Statements purpose: Add statements (upload or Gmail) and make sure each one reconciles size: 1280x800 --- ## Content and actions - "Upload PDFs" / drop zone: pick the target profile, then files. "Fetch from Gmail" runs a sync (S04 if Gmail isn't connected yet). - Table: statement, profile, period, source (Upload / Gmail), status. Status is always icon + text: Validated, Needs review, Couldn't read. Filterable by profile and status. - "Show" on a Needs review row expands the reconciliation: Previous − Payments + Purchases + Fees + Interest vs the printed new balance, the difference, and a suggested fix (sign flip, duplicated FX line, subtotal read as a row). - "Apply fix and re-check" re-runs the tie-out. "Exclude statement" keeps it out of chat answers. - Couldn't read rows (low-quality scans) show the page and reason, with "Retry with OCR" and "Remove". ## States - Main: `screen.html`. - Empty: "No statements yet" with Upload PDFs and Fetch from Gmail. - Loading: row shows "Reading…" with a progress bar. Error: row-level, as in Couldn't read. ## Notes and open questions - Only Validated statements feed chat answers, so numbers are always to-the-cent. ## Change log - Initial design.