Recipe catalog / reconciliation-match
Match a ledger record to a statement line
Do record and statementLine describe the same transaction, judging payee, purpose, and timing wording?
You need a yes/no judgment on whether a bookkeeping entry and a bank or card statement line refer to the same transaction, after exact amount and date checks in code have narrowed the candidates.
Explore this recipe interactively ยท Source and implementation guide
Use reconciliation-match in TypeScript
Install with npm install jev-recipes. Requires Node.js 22.9 or newer and ES modules. Set TYPESAFE_API_KEY in your server environment for live calls, which send input to TypeSafe and use API quota. See the installation guide.
import { reconciliationMatch } from 'jev-recipes/reconciliation-match';
const result = await reconciliationMatch({
"record": "2024-03-14 | Adobe Creative Cloud team subscription, monthly, design team | Vendor: Adobe Inc.",
"statementLine": "03/16 ADOBE *CREATIVE CLD 800-833-6687 CA PURCHASE",
"minConfidence": 0.8
});
console.log(result);
Input contract
| Field | Type | Needed |
|---|---|---|
| record | string | Required |
| statementLine | string | Required |
| minConfidence | number | Optional |
Full input and result schemas
{
"input": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"record": {
"type": "string"
},
"statementLine": {
"type": "string"
},
"minConfidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"record",
"statementLine"
]
},
"result": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"model": {
"type": "string"
},
"usage": {
"type": "object",
"properties": {
"input_tokens": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"output_tokens": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"input_tokens",
"output_tokens"
],
"additionalProperties": false
},
"status": {
"type": "string",
"enum": [
"ready",
"review"
]
},
"probability": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"verdict": {
"type": "string",
"enum": [
"same",
"different"
]
}
},
"required": [
"model",
"usage",
"status",
"probability",
"confidence",
"verdict"
],
"additionalProperties": false
}
}Saved example result
This hand-authored response demonstrates the contract. It is not a model accuracy measurement. Run it without an API key: npx jev-recipes demo reconciliation-match.
{
"model": "demo-fixture",
"usage": {
"input_tokens": 0,
"output_tokens": 0
},
"status": "ready",
"probability": 0.9,
"confidence": 0.9,
"verdict": "same"
}
Evaluation evidence
No verified live accuracy measurement is available. Evaluate representative cases before using this decision in your workflow.
Use the evaluation guide to measure this decision on your own labeled cases.
Limitations
- Judges payee, purpose, and timing as worded. Amounts and dates must be compared exactly in code; the recipe does not do arithmetic or calendar math.
- Statement descriptors are often abbreviated or use a processor name instead of the merchant, so a different verdict means the wording does not support a match, not that the transactions are proven distinct.
- Not a substitute for a completed reconciliation or an audit conclusion.
Related recipes
- entity-match: Use entity-match to decide whether two descriptions name the same organization or person, rather than whether two records describe the same transaction.
- ticket-match: Use ticket-match to decide whether two support tickets report the same issue, rather than whether a ledger entry matches a statement line.