Start: An item appears on the statement or in your ledger.
Is it on BOTH the supplier’s statement AND in your accounting system?
YES — it appears on both sides
Q: Does the invoice reference match?
YES — reference matches
Q: Does the amount match?
YES — amount matches
✅ clean_match — fully reconciled, tick and move on
NO — date differs
date_mismatch — same invoice, dates disagree. Check which is correct.
NO — amounts differ
Is it a partial payment (statement shows full, ledger shows less)?
part_paid — confirm the partial payment cleared
amount_variance — check tax, freight, FX, or short-pay
NO — reference differs or is missing
date_corroborated — amount + date agree within 7 days. Treated as matched.
fuzzy_ref — amounts match, refs formatted differently (e.g. INV-1001 vs 1001)
amount_variance — refs differ AND amounts differ. Check tax, freight, FX.
ONLY ON THE STATEMENT — not in your ledger
Q: Is the invoice anywhere in your accounting system?
statement_only — not anywhere in your system. Request the invoice PDF and enter the bill.
not_open_maybe_paid — not in your open-payables report. It may already be paid — check your paid list.
out_of_period — dated outside your report’s date range. Not a discrepancy.
duplicate_statement — same invoice appears twice on the statement. Query with supplier, pay once.
ONLY IN YOUR LEDGER — not on the statement
Q: Why isn’t it on the supplier’s statement?
ledger_only — not listed on the statement. Check timing, then query the supplier.
ledger_out_of_period — dated outside the report range or after the statement date. Not a discrepancy.
duplicate_ledger — same invoice entered twice in your system. Void the duplicate.
Your ledger says paid, but the statement still shows it open
How old is the invoice relative to the statement’s closing date?
status_conflict_timing — invoice dated within 7 days of the closing date. Payment is in transit. No action — it will resolve next cycle.
status_conflict — invoice is older than 7 days. Genuine dispute. Send proof of payment, do not pay again.
Consolidation and splitting
Does one side have a single line that equals the sum of several items on the other side?
many_to_one — one statement line = sum of 2–4 of your invoices. Resolved automatically.
one_to_many — one of your invoices = sum of 2–4 statement lines. Resolved automatically.
ambiguous_match — amount and date match more than one invoice, no reference to break the tie. Do not guess.
credit_on_account — a credit or payment in your system can’t be tied to a specific invoice. Allocate it.
bbf_anchor — the statement’s opening (brought-forward) balance is checked against your prior-period items. Only runs when the statement has a brought-forward line.
Course-only concepts — the software does NOT detect these
You must watch for these yourself. The software cannot know about your disputes, new vendor relationships, or data quality issues.
new_vendor_opening — first statement from a new vendor with a nonzero opening balance. Should be zero. Request a breakdown.
dispute_on_hold — you already know there’s a disagreement. Flag it in your system and exclude from payment.
vendor_data_issue — wrong entity, wrong currency, or implausible date. Stop and request the correct statement.