Paisa · What it does
Product · Accounts payable

Controls that are controls, not settings.

Approval limits and segregation of duties are enforced in the approve path. A bill above an approver's ceiling cannot be approved by them — there is no override checkbox.

Implemented in src/erp/bills.ts
Enforcedsegregation of duties lives in the approve path
Why it is built this way

3 decisions that carry the weight.

Segregation of duties

The person who created a bill cannot also approve it. Not discouraged in a policy document — refused by the code.

Duplicate invoices rejected

The same vendor invoice number cannot be recorded twice, which is the most common way a business pays for something twice.

Tax treated correctly

Where input credit cannot be claimed, the tax is capitalised into the expense rather than parked as a receivable you will never recover.

Capabilities

What it does, in full.

Approval workflow

Draft → pending approval → approved → partially paid → paid, with rejection and cancellation as terminal states before approval. Approval is what posts the liability.

Per-approver limits

Each approver carries a ceiling. A bill above it must escalate; the code will not let it through, and the attempt is refused with the reason.

Input tax credit

Eligibility is a property of the bill line, so a mixed bill splits correctly between claimable credit and capitalised cost.

Payables aging

Current, 1–30, 31–60 and 60+ buckets, plus what is overdue right now and what awaits approval.

Payment recording

Payments post against the payable and cannot exceed what is outstanding. The AI has no payment tool — it can tell you what is due and never move the money.

Accrual proposals

A vendor that bills every month and did not this month is usually an invoice in transit. The accrual agent proposes it; a person approves.

Related

Works with

See it against a real ledger.

The demo runs on a seeded company with a live close waiting — two real blockers and agents holding proposals.