Back to documentation

Duplicate and overlap detection

How Karchu decides that two rows are the same transaction, how overlapping statement periods are handled, and how to inspect what was skipped.

Last updated 2026-09-11

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

Questions

What happens if I upload January and then a February statement that starts on 25 January?
The overlapping days are detected from the statement periods. Rows in the overlap that match rows already stored are skipped, and the import summary reports how many were skipped so you can inspect them.
Are duplicates deleted?
No. Nothing is deleted. A duplicate candidate is not imported a second time, and the skipped rows stay visible so you can import one if the match was wrong.
Can two genuine identical charges on the same day be treated as duplicates?
They can be flagged as candidates, which is why the skipped list is inspectable. Two identical amounts to the same merchant on the same day with different references are kept apart by the reference and the source document.