Skip to content
Payvol

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.

It does not close the invoice Readiness is an input to your accounting system, not a replacement for it. The system of record stays the system of record.
It does not decide about a late payment Whether to accept money that arrived after the due date is a commercial decision. Reconcile states the fact and stops there.
It does not price or value anything No rates and no valuation. Amounts stay in the asset they arrived in, and a total across assets needs a conversion you accepted.
It does not declare a duplicate Two identical payments may both be real. Reconcile flags the possibility and leaves the call to somebody who knows the customer.

Payvol classifies and hands over. The ERP closes.

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.

npm i @payvol/core version 0.4.0 TypeScript
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