ADR-0001: occurredAt is the notification post time
- Status: Accepted
- Date: 2026-08-11
- Deciders: maintainers
- Related: ADR-0002
Context
Bank notifications sometimes contain a transaction date ("paid on 3 Jul"), but often don't. The ingestion pipeline needs a stable timestamp to group transactions by month and to deduplicate.
Decision
The transaction's occurredAt is the notification post time
(StatusBarNotification.postTime). Date extraction from notification text is
not implemented.
Consequences
- Month grouping and reports use the time the alert arrived, not when the money moved. Alerts that arrive late (e.g. next morning) land in the wrong month.
TransactionCandidate.occurredAtMillisexists and is alwaysnullin v1 — the pipeline falls back topostTimeMillis. The field is a hook for a future date-extraction feature.- Dedupe keys that include
occurredAtare stable per post, which is what the system actually replays.
Alternatives considered
- Parsing a date out of text — rejected: formats vary by bank, low confidence, adds parse surface for marginal benefit.