Matching rules
The deterministic engine: rule types, order of operations, tolerances, and how to read the match log.
Principles
Matching is code, not a model. The same inputs produce the same output. Every match records the rule that produced it, so a reviewer or auditor can re-run it.
Rule types
- Exact — same reference (normalised: case, whitespace, common prefixes), same amount, opposite sign, same counterparty pair.
- Tolerance — amount within the workspace tolerance (absolute or percentage, whichever is smaller). The difference is recorded as rounding and included in the explanation report; it is never silently absorbed.
- Many-to-one — up to 6 items on one side summing to one item on the other, within tolerance. Search is bounded so results stay explainable.
- Reference-less — amount match within tolerance and posting dates within N days (default 10), when no reference exists on one side. Proposed with a confidence score; requires acceptance.
Order of operations
Exact → tolerance → many-to-one → reference-less. Items matched by an earlier pass are removed before later passes.
Per-pair overrides
Rules can be set group-wide and overridden per entity pair — a higher tolerance for a pair that settles via a netting centre, a longer date window for a pair with slow AP.
FX
Items are compared in the invoice currency when both sides record it; otherwise in group currency at the policy rate. Differences attributable to rate are reported as FX translation with both rates shown.
Match log
Each row: item ids on both sides, rule, tolerance used, residual, timestamp. Exportable as CSV. The log is the audit trail for the matching step.
What matching does not do
It does not decide whether a difference is acceptable. That is the explanation step and, ultimately, a person.