Payvol Reconcile
Money met an invoice. Say precisely how well.
Reconcile weighs what arrived against what was asked and answers on five independent axes. It never collapses them into one word, and it never closes anything.
Weigh a payment Try it in the app
@payvol/core/draft02five axesappend only
What it does
Most reconciliation software answers a question nobody asked.
It reports matched or unmatched, and then a person opens the record anyway, because what they needed to know was whether the amount was right, whether it came late, whether it came in the asset they expected, and whether accepting it breaks a policy. Those are four different questions with four different answers.
A payment can be several things at once
Why one field fails
Exact and late. Complete but into the wrong account. Correct in every way except the policy that forbids partials. One status field has to pick a winner, and the answers it drops are the ones an operator wanted.
Late means late on the ledger
One timestamp decides
The only timestamp that decides lateness is the one the settlement carries. When a reader restarts, or a backlog clears at midnight, nothing becomes overdue that was not already overdue.
Two stablecoins are not one currency
No assumed rate
Payments in the same asset aggregate. Payments in different assets do not, because adding them would mean assuming a rate, an issuer risk and a redemption right. A total across assets needs a conversion you accepted, or it does not happen.
A record is added, never edited
Append only
When a second payment arrives and the picture changes, a new record supersedes the old one and the old one stays. Months later an auditor can see not just the conclusion but the order in which it was reached.
How it works
Gather, weigh, hand over.
01
Gather
- Settled records from Observe, as settlement observations
- The request they answer, and its digest
- Your policy: partial payments, accepted conversions, the window your history covers
02
Weigh
- Amount, against what the request asked for
- Timing, from the settlement's own effective time
- Instrument and receiver, against what was declared
- Policy, against the evidence you pass in
- Flags for duplicates, malformed metadata and missing evidence
03
Hand over
- A readiness state, not a decision
- A later record supersedes the earlier one rather than editing it
- Your accounting system decides what closing means
Scope
What Reconcile leaves to your accounts.
Payvol classifies and hands over. The ERP closes.
Who it is for
Finance and operations teams who match incoming payments to what asked for them, and the developers who feed their accounting systems.
Reconcile is part of these situations.
Get started
Weigh a payment against its request.
Install the package and pass the request, its digest, the settled observations and your policy. The same input always produces the same record.
import { reconcile } from '@payvol/core/draft02';
const record = reconcile(payload, requestDigest, observations, policy);
record.status.amount; // 'exact' | 'partial' | 'overpaid' | 'unknown'
record.status.timing; // 'on-time' | 'late' | 'unknown'
record.flags; // for example 'duplicate-candidate' or 'missing-evidence'
record.closureReadiness; // 'eligible-for-closure' | 'requires-review' | 'not-satisfied'
// a later payment produces a new record that supersedes this one
const next = reconcile(payload, requestDigest, [...observations, later], policy, record);
next.supersedes; // record.recordId Observe settlements and reconcile them Match payments in the app Where settled records come from