{ "format": 1, "function": "match_card_purchase", "cases": [ { "name": "no expenses", "input": { "purchase": { "amount_ore": 12900, "date": "2026-10-22", "direction": "debit" }, "expenses": [], "window_days": 3, "max": 3 }, "expected": { "ok": [] } }, { "name": "exact amount, same day", "input": { "purchase": { "amount_ore": 12900, "date": "2026-10-22", "direction": "debit" }, "expenses": [ { "id": "0192e000-0000-7000-8000-000000000001", "amount_ore": 12900, "date": "2026-10-22", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false } ], "window_days": 3, "max": 3 }, "expected": { "ok": [ "0192e000-0000-7000-8000-000000000001" ] } }, { "name": "three days before and after are included", "input": { "purchase": { "amount_ore": 12900, "date": "2026-10-22", "direction": "debit" }, "expenses": [ { "id": "0192e000-0000-7000-8000-000000000001", "amount_ore": 12900, "date": "2026-10-19", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false }, { "id": "0192e000-0000-7000-8000-000000000002", "amount_ore": 12900, "date": "2026-10-25", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false } ], "window_days": 3, "max": 3 }, "expected": { "ok": [ "0192e000-0000-7000-8000-000000000001", "0192e000-0000-7000-8000-000000000002" ] } }, { "name": "four days before or after are excluded", "input": { "purchase": { "amount_ore": 12900, "date": "2026-10-22", "direction": "debit" }, "expenses": [ { "id": "0192e000-0000-7000-8000-000000000001", "amount_ore": 12900, "date": "2026-10-18", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false }, { "id": "0192e000-0000-7000-8000-000000000002", "amount_ore": 12900, "date": "2026-10-26", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false } ], "window_days": 3, "max": 3 }, "expected": { "ok": [] } }, { "name": "an amount 1 öre off is excluded", "input": { "purchase": { "amount_ore": 12900, "date": "2026-10-22", "direction": "debit" }, "expenses": [ { "id": "0192e000-0000-7000-8000-000000000001", "amount_ore": 12899, "date": "2026-10-22", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false }, { "id": "0192e000-0000-7000-8000-000000000002", "amount_ore": 12901, "date": "2026-10-22", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false }, { "id": "0192e000-0000-7000-8000-000000000003", "amount_ore": 12900, "date": "2026-10-23", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false } ], "window_days": 3, "max": 3 }, "expected": { "ok": [ "0192e000-0000-7000-8000-000000000003" ] } }, { "name": "an expense linked from another purchase of the viewer is excluded", "input": { "purchase": { "amount_ore": 12900, "date": "2026-10-22", "direction": "debit" }, "expenses": [ { "id": "0192e000-0000-7000-8000-000000000001", "amount_ore": 12900, "date": "2026-10-22", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": true }, { "id": "0192e000-0000-7000-8000-000000000002", "amount_ore": 12900, "date": "2026-10-21", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false } ], "window_days": 3, "max": 3 }, "expected": { "ok": [ "0192e000-0000-7000-8000-000000000002" ] } }, { "name": "ordered by day difference", "input": { "purchase": { "amount_ore": 5000, "date": "2026-10-22", "direction": "debit" }, "expenses": [ { "id": "0192e000-0000-7000-8000-000000000001", "amount_ore": 5000, "date": "2026-10-25", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false }, { "id": "0192e000-0000-7000-8000-000000000002", "amount_ore": 5000, "date": "2026-10-21", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false }, { "id": "0192e000-0000-7000-8000-000000000003", "amount_ore": 5000, "date": "2026-10-22", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false } ], "window_days": 3, "max": 3 }, "expected": { "ok": [ "0192e000-0000-7000-8000-000000000003", "0192e000-0000-7000-8000-000000000002", "0192e000-0000-7000-8000-000000000001" ] } }, { "name": "equal day difference: newer created_at first", "input": { "purchase": { "amount_ore": 5000, "date": "2026-10-22", "direction": "debit" }, "expenses": [ { "id": "0192e000-0000-7000-8000-000000000001", "amount_ore": 5000, "date": "2026-10-20", "created_at": "2026-10-20T08:00:00.000Z", "linked_by_viewer": false }, { "id": "0192e000-0000-7000-8000-000000000002", "amount_ore": 5000, "date": "2026-10-24", "created_at": "2026-10-24T08:00:00.000Z", "linked_by_viewer": false } ], "window_days": 3, "max": 3 }, "expected": { "ok": [ "0192e000-0000-7000-8000-000000000002", "0192e000-0000-7000-8000-000000000001" ] } }, { "name": "equal day difference and created_at: lower id first", "input": { "purchase": { "amount_ore": 5000, "date": "2026-10-22", "direction": "debit" }, "expenses": [ { "id": "0192e000-0000-7000-8000-000000000007", "amount_ore": 5000, "date": "2026-10-23", "created_at": "2026-10-23T08:00:00.000Z", "linked_by_viewer": false }, { "id": "0192e000-0000-7000-8000-000000000004", "amount_ore": 5000, "date": "2026-10-21", "created_at": "2026-10-23T08:00:00.000Z", "linked_by_viewer": false } ], "window_days": 3, "max": 3 }, "expected": { "ok": [ "0192e000-0000-7000-8000-000000000004", "0192e000-0000-7000-8000-000000000007" ] } }, { "name": "more candidates than max are cut", "input": { "purchase": { "amount_ore": 5000, "date": "2026-10-22", "direction": "debit" }, "expenses": [ { "id": "0192e000-0000-7000-8000-000000000001", "amount_ore": 5000, "date": "2026-10-22", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false }, { "id": "0192e000-0000-7000-8000-000000000002", "amount_ore": 5000, "date": "2026-10-23", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false }, { "id": "0192e000-0000-7000-8000-000000000003", "amount_ore": 5000, "date": "2026-10-21", "created_at": "2026-10-21T08:00:00.000Z", "linked_by_viewer": false }, { "id": "0192e000-0000-7000-8000-000000000004", "amount_ore": 5000, "date": "2026-10-25", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false } ], "window_days": 3, "max": 3 }, "expected": { "ok": [ "0192e000-0000-7000-8000-000000000001", "0192e000-0000-7000-8000-000000000003", "0192e000-0000-7000-8000-000000000002" ] } }, { "name": "max 1", "input": { "purchase": { "amount_ore": 5000, "date": "2026-10-22", "direction": "debit" }, "expenses": [ { "id": "0192e000-0000-7000-8000-000000000001", "amount_ore": 5000, "date": "2026-10-22", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false }, { "id": "0192e000-0000-7000-8000-000000000002", "amount_ore": 5000, "date": "2026-10-23", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false } ], "window_days": 3, "max": 1 }, "expected": { "ok": [ "0192e000-0000-7000-8000-000000000001" ] } }, { "name": "a credit purchase has no matches", "input": { "purchase": { "amount_ore": 12900, "date": "2026-10-22", "direction": "credit" }, "expenses": [ { "id": "0192e000-0000-7000-8000-000000000001", "amount_ore": 12900, "date": "2026-10-22", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false } ], "window_days": 3, "max": 3 }, "expected": { "ok": [] } }, { "name": "a purchase without amount (foreign currency) has no matches", "input": { "purchase": { "amount_ore": null, "date": "2026-10-22", "direction": "debit" }, "expenses": [ { "id": "0192e000-0000-7000-8000-000000000001", "amount_ore": 12900, "date": "2026-10-22", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false } ], "window_days": 3, "max": 3 }, "expected": { "ok": [] } }, { "name": "the window crosses a month boundary", "input": { "purchase": { "amount_ore": 30000, "date": "2026-11-01", "direction": "debit" }, "expenses": [ { "id": "0192e000-0000-7000-8000-000000000001", "amount_ore": 30000, "date": "2026-10-29", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false }, { "id": "0192e000-0000-7000-8000-000000000002", "amount_ore": 30000, "date": "2026-10-28", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false }, { "id": "0192e000-0000-7000-8000-000000000003", "amount_ore": 30000, "date": "2026-11-04", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false } ], "window_days": 3, "max": 3 }, "expected": { "ok": [ "0192e000-0000-7000-8000-000000000001", "0192e000-0000-7000-8000-000000000003" ] } }, { "name": "the window crosses a year boundary", "input": { "purchase": { "amount_ore": 30000, "date": "2027-01-02", "direction": "debit" }, "expenses": [ { "id": "0192e000-0000-7000-8000-000000000001", "amount_ore": 30000, "date": "2026-12-30", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false }, { "id": "0192e000-0000-7000-8000-000000000002", "amount_ore": 30000, "date": "2026-12-29", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false }, { "id": "0192e000-0000-7000-8000-000000000003", "amount_ore": 30000, "date": "2027-01-05", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false } ], "window_days": 3, "max": 3 }, "expected": { "ok": [ "0192e000-0000-7000-8000-000000000001", "0192e000-0000-7000-8000-000000000003" ] } }, { "name": "a leap day inside the window", "input": { "purchase": { "amount_ore": 2500, "date": "2028-03-01", "direction": "debit" }, "expenses": [ { "id": "0192e000-0000-7000-8000-000000000001", "amount_ore": 2500, "date": "2028-02-27", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false }, { "id": "0192e000-0000-7000-8000-000000000002", "amount_ore": 2500, "date": "2028-02-26", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false } ], "window_days": 3, "max": 3 }, "expected": { "ok": [ "0192e000-0000-7000-8000-000000000001" ] } }, { "name": "a 14-day window (other callers)", "input": { "purchase": { "amount_ore": 2500, "date": "2026-10-22", "direction": "debit" }, "expenses": [ { "id": "0192e000-0000-7000-8000-000000000001", "amount_ore": 2500, "date": "2026-10-08", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false }, { "id": "0192e000-0000-7000-8000-000000000002", "amount_ore": 2500, "date": "2026-10-07", "created_at": "2026-10-20T10:00:00.000Z", "linked_by_viewer": false } ], "window_days": 14, "max": 3 }, "expected": { "ok": [ "0192e000-0000-7000-8000-000000000001" ] } } ] }