Document approval for finance teams
Invoices, purchase orders, contracts and expenses through one approval chain, with one audit trail. Configured by the controller who owns the process — not by a consultant, six weeks from now.
The daily loop
Nothing here is bespoke work. Each step is a setting in the product, editable by whoever owns the process.
Drop in a PDF or file it by hand. Vendor, amount, dates and line items are read out of the document, and duplicates are caught before anyone looks at them.
The chain you configured decides who sees it, in what order, and by when — on your working calendar, not on calendar days.
From the web, or straight from the email. Out of office redirects to a delegate; overdue escalates up a ladder you set.
Who, what, when, and what the document said at that moment — in a hash-chained log the database itself will not let anyone edit.
Why we exist
Approval software is usually sold with an implementation partner attached, because the routing lives in configuration only they understand. Then finance changes a threshold and waits three weeks.
Steps, who approves, whether everyone or any one of them, the SLA in working hours, and the condition that decides whether a step runs at all.
A published chain is frozen. Editing it drafts the next version; publishing that retires the last one. Anything already in flight keeps the plan it started under, so changing a rule never rewrites a document's history.
amountBase > 5000 && payload.poNumber == null — validated when you save, so a typo cannot silently switch a control off.
Applies to invoices · published
Manager sign-off
The submitter's manager
Finance review
Anyone with Finance
Over $10,000
A named person · CFO
Overdue → manager +8h → Finance +16h → hold for a human
Controls
Routing is table stakes. These are the reasons a controller signs off on a purchase.
The same invoice, filed twice, under a slightly different reference. Caught on vendor, amount and date rather than on an exact string match.
Flagged when a vendor's account details differ from the last invoice you paid — the single most expensive thing to miss.
Two invoices just under the limit that needs a second approver, from one vendor, in one week.
Ordered, received, invoiced — reconciled, with the mismatch named rather than a red cross.
Blocked, and recorded as blocked. Configurable per workspace, because sometimes the owner really is the only approver.
An invoice that lands at 5pm on Friday is not overdue on Sunday. Holidays are yours to define.
# the database refuses, not the app
UPDATE audit_events SET action = 'tampered';
ERROR: audit_events is append-only:
UPDATE on seq 1 was refused.
# and anyone can check the chain
GET /api/admin/audit/verify
{ ok: true, checked: 4182, problems: [] }
Evidence
Every event carries a sequence number, the hash of the one before it, and a hash of itself. A gap, a fork or an edited row is arithmetic, not opinion.
A trigger refuses UPDATE and DELETE for every role, including the database owner. There is no application path that can rewrite history because there is no database path either.
An approval is bound to the document's full contents at that moment. Change the amount afterwards and the signature no longer matches what was approved.
One endpoint walks the chain and reports the exact sequence number of any divergence. Give it to your auditor.
Fits how you already work
The person holding up your month-end close is busy. Meet them where they are.
Both buttons open a confirmation page — nothing is decided until it is confirmed and signed there. Works from a phone without an account.
Microsoft Entra and Google, or email and password with TOTP and recovery codes. A workspace can require SSO and mean it.
Signed, idempotent deliveries with retries and a replayable dead-letter queue. Tokens are issued and revoked by you, in the product.
Isolation is enforced by Postgres row-level security, not by a WHERE clause someone might forget.
Pricing
No implementation fee, because there is no implementation. Tell us your volume and we will give you a number in the first conversation.
A finance team getting off email and spreadsheets.
Talk to us
Monthly or annual, no setup fee
Multiple entities, or an auditor who asks specific questions.
Talk to us
Monthly or annual, no setup fee
Regulated, or answering to a group finance function.
Talk to us
Monthly or annual, no setup fee
Questions
Thirty minutes, screen shared, using your actual approval process. We will change that rule while you watch. If it takes longer than a minute, the pitch was wrong and you should not buy it.
Or write to us at sales@nextcoretechnology.com