Skip to content

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.occurredAtMillis exists and is always null in v1 — the pipeline falls back to postTimeMillis. The field is a hook for a future date-extraction feature.
  • Dedupe keys that include occurredAt are 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.