Duplicates arise in two ways: the same file uploaded twice, and two statements whose periods overlap. Karchu handles both before rows are saved, not afterwards.
Signals used
- Transaction date, with a tolerance of a few days for postings that shift
- Amount, compared exactly after currency normalisation
- Merchant, after the description is normalised
- Raw description text
- Account or card the row belongs to
- A transaction fingerprint built from date, amount, normalised description and account
- The source document and its statement period
- Occurrence index, so a genuine repeat on the same day is not collapsed into one row
Overlapping statement periods
Each document carries the period it covers. When a new document overlaps a period already imported, only the overlapping days are compared row by row. Days outside the overlap are imported normally, so a February file starting on 25 January still contributes every February transaction.
January statement Jan 1 -> Jan 31 (imported, 214 rows)
February statement Jan 25 -> Feb 28 (imported, 190 rows, 7 skipped)
7 rows in Jan 25 -> Jan 31 matched rows already stored.What you see
- The import summary states how many rows were skipped as duplicate or overlapping.
- The skipped rows are listed with the row they matched and the signals that matched.
- Nothing is silently discarded, and nothing already stored is modified.
Limits
- A statement with no readable period falls back to row level matching only
- Amounts that differ by a cent, for example after a currency conversion, are not treated as the same row
- A skipped row can be imported manually if the match was wrong