# Connector Boundary Mousehold treats connectors as evidence producers. A connector submits `RawObservation` payloads; the backend turns them into reviewable `FinancialEvent` candidates and links the source evidence. ## Local-First Rule Bank and mailbox credentials should stay in the local agent where possible. The API stores: - connection type and display name - owner user and household - sync status and last error - a local secret reference, not the secret itself - normalized observations ## Current PoC Routes - Manual entry: `POST /observations/manual` - Generic normalized import: `POST /observations/import` - Local-agent batch sync: `POST /observations/sync` - Connector metadata: `POST /connections` - Local-agent registration: `POST /local-agent/register` - Browser IMAP folder listing: `POST /agent/imap/folders` - Browser IMAP scan: `POST /agent/imap/scan` - PayPal CSV statement parsing: `POST /agent/paypal/statement/parse` - Klarna CSV statement parsing: `POST /agent/klarna/statement/parse` ## Data Source Mapping - Bank CSV, FinTS, PSD2: confirmed cash movement observations. FinTS fetching is implemented in the local agent. - PayPal CSV: confirmed PayPal account observations. - PayPal email: announced or outstanding purchase/payment evidence. - Klarna email: usually outstanding obligation evidence. - Order confirmation email: announced purchase evidence. Bank debits that fund PayPal, Klarna, or cards should be linked as settlements or liability payments instead of duplicated as new expenses. ## Reconciliation The reconciliation service computes reviewable suggestions from imported events instead of linking automatically. Current suggestions cover: - PayPal/Klarna/order email evidence matched to PayPal or Klarna statement rows - PayPal/Klarna statement rows matched to FinTS, bank CSV, or PSD2 cash movement - exact amount/currency matches with date windows, party overlap, provider names, and shared references Accepting a suggestion creates an event relation, attaches the confirming observation to the primary event as evidence, and upgrades the primary event to `confirmed` when the confirming event is confirmed. The confirming event is kept for auditability; later UI cleanup can decide how aggressively to collapse or hide duplicate-looking rows. ## IMAP Flow The web app has a `Mail` panel for IMAP proof-of-concept imports. It sends IMAP credentials to the configured agent route for that request only, selects the requested folder read-only, scans recent messages, and returns previews plus normalized observations. The backend stores observations only after the user clicks import. The parser currently recognizes EUR amounts, simple due-date phrases, Klarna references, PayPal transaction IDs, order numbers, and invoice numbers. Email evidence is classified as `announced` unless it is a Klarna or due-date driven promised payment, which becomes `outstanding`. Confirmed cash movement should still come from FinTS, bank CSV, PSD2, or PayPal/Klarna statement CSV. ## PayPal Statement Flow The active PayPal path is statement and email based. The `Statements` panel supports PayPal Activity Download CSV exports. It recognizes fields such as `Date`, `Name`, `Type`, `Status`, `Currency`, `Gross`, `Fee`, `Net`, and `Transaction ID`, then imports confirmed `paypal_csv` observations. PayPal emails remain early evidence for announced or outstanding obligations. Later PayPal statements and bank debits should confirm or settle those events instead of creating duplicate household expenses. ## Klarna Statement Flow The `Statements` panel also supports Klarna CSV. It handles Klarna Merchant settlement reports with a summary section followed by a `type`/`amount` transaction table, and a simpler consumer-style CSV with date, description, amount, currency, reference, and type columns. Klarna CSV observations use `source_type=klarna_csv` and are treated as confirmed statement evidence, while Klarna emails remain the early outstanding/announced signal.