Capture
- Android live capture through a Kotlin broadcast receiver.
- Permission-gated inbox backfill capped at 30 days.
- Background one-shot processing through the same Dart pipeline and encrypted store.
- Debug-only injection path and SMS Lab for SIM-free testing.
Safety order
- Consent and permission.
- Exact normal or trusted-test sender policy.
- Global IGN patterns for OTP, security, decline, pending, promotion, balance-only, and future-charge messages.
- Text normalization.
- Institution templates in priority order with an execution budget.
- Required-field, direction, date, value, and sanity validation.
- Stable event-identity deduplication.
- Local categorization and confidence.
- Review or unmatched-evidence persistence.
Template bundle
assets/parser/bank_templates.json is versioned and currently contains 32
development templates across eight institutions. Templates define:
- sender aliases;
- regex match;
- priority;
- fixed or dynamic direction;
- required fields; and
- optional date format.
Categorization
The parser extracts bank, amount, direction, masked account, date, merchant, balance, and reference when present. Categorization then applies personal rules, local overrides, bundled corpus tiers, and classifier evidence without uploading raw activity.Deduplication
Dedup is based on normalized event evidence rather than only value/time. Repeated delivery of one alert is suppressed, while distinct transactions with the same value remain separate.Unmatched evidence
Known-sender, non-sensitive messages with no supported transaction format may enter a capped encrypted queue of 50. The queue is outside the ledger and all metrics.Tests
Add a template
- Obtain an opt-in sample and redact personal evidence.
- Add a narrow, institution-scoped template.
- Add positive golden fixtures.
- Add nearby negatives, especially OTP/promo/decline/pending messages.
- Run the whole parser and pilot suite.
- Update the coverage record.
- Never broaden a sender or regex merely to make one fixture pass.
