Purchases & Vendor Bills

Record supplier invoices, track what you owe, and pay on due date

What this is

Purchases is the mirror image of Sales. Where Sales captures invoices you send to customers and receipts when they pay, Purchases captures the invoices your suppliers send you (called bills) and the payments you make against them. Everything that the customer flow does — PDFs, statements, aging reports, finance ledger — works the same way on the supplier side.

Bills vs. Expenses: Keep using the Expenses module for immediate cash outflows (fuel, rent, salaries). Use Bills for supplier-invoiced purchases — typically stock you bought on credit. If the same cost lands in both, its VAT double-counts on the Tax report, so pick one path per transaction.

Bill Lifecycle

DraftUnpaidPartialPaid |  Cancelled (reversed)
Draft

Line items editable. Nothing posted to the finance ledger yet.

Unpaid

Finalized. The finance ledger posts three entries: accounts payable (credit), purchases (debit), and VAT input (debit, if tax > 0). Line items are locked.

Partial

At least one payment recorded but balance still outstanding.

Paid

Balance is zero.

Cancelled

Only bills without recorded payments can be cancelled. Ledger entries are reversed automatically.

Creating a Bill

Three entry points at Purchases → Bills → New Bill:

From scratch

Pick a supplier, add line items, set bill date and due date. Products can be picked from a searchable dropdown or typed as free text (for services like delivery fees or professional charges).

From a GRN

On the Receive Stock form, click Receive & Bill Now instead of plain Receive. Stock posts as normal, then you land on a pre-filled bill with the supplier and line items ready.

From a PO

On any non-draft, non-cancelled purchase order, click Convert to Bill. Supplier and items carry over.

Supplier numbering: StockPulse generates its own internal number (BILL-00001) for every bill. There's a separate field for the Supplier's Invoice # — the number printed on the supplier's paperwork — so you can search either way later.
Inline supplier creation: The supplier dropdown has type-ahead search across name, phone, and email, plus a + Add Supplier button that opens a small dialog so you can add a new supplier without leaving the bill form.

Recording Supplier Payments

Open any Unpaid or Partial bill and click Record Payment. The dialog captures:

FieldNotes
AmountDefaults to the outstanding balance. Can be less for a partial payment.
Payment MethodCash, M-Pesa, Bank Transfer, or Cheque.
ReferenceM-Pesa code, cheque number, or bank reference — required for M-Pesa / Bank / Cheque when the tenant-level toggle is on.
Paid From (Money Source)Which cash reserve the money is leaving from. Cashbook and Cash Flow reports pick this up as an outflow.
NotesInternal only — supplier doesn't see these.

Each payment gets its own number (SPAY-00001) and generates a Supplier Payment Receipt PDF you can send to the supplier as proof of payment.

Documents (PDF)

Supplier Bill PDF

Internal confirmation copy with supplier details, line items, VAT input, totals. Download from the PDF button on the bill detail page.

Payment Receipt PDF

One per supplier payment. Mirrors the customer receipt — prominent amount block, method/reference, running balance. Download icon on each payment history row.

Supplier Statement PDF

Running account for a supplier: opening balance → bills (debit) → payments (credit) → closing balance. Generate on demand from the supplier detail page; range defaults to the current month.

Bill Attachments

On each bill you can upload a PDF or image of the supplier's original invoice (up to 10 MB). This is stored alongside the bill and opens in a new tab on click. Handy for audit trails, disputes, or quickly re-checking what the supplier actually sent.

Reports

AP Aging

Reports → AP Aging — mirrors AR Aging: 5 buckets (current, 1-30, 31-60, 61-90, 90+) grouped by supplier. CSV and Excel export. Schedulable from Settings → Report Schedules.

Tax (VAT) split

The Tax report now breaks VAT into three parts:

  • VAT Output — tax you charged on sales (from finalized invoices).
  • VAT Input from Bills — tax your suppliers charged you (exact, from finalized bills). Fully reclaimable.
  • VAT Input from Expenses — 16% back-calculated from VAT-inclusive expense amounts. Kept as a legacy estimate so tenants who never started using Bills still see something.

Net VAT Payable = Output − (Bills + Expenses). Once you start recording supplier purchases as Bills, this is KRA-return shaped.

Cash Flow

Reports → Cash Flow includes supplier payments as outflows alongside expenses — per payment method, per money source, and in the period-over-period comparison.

Dashboard

A new Owed to Suppliers stat card sits next to Outstanding (receivables) on the main dashboard so AR and AP show side by side.

Scheduled Reports

From Settings → Report Schedules you can auto-email AP Aging and per-supplier Statements on a daily, weekly, or monthly schedule. The Supplier Statement type needs a per-schedule supplier picker so recipients get the right account.

Permissions & Plan Gating

Required plan

Business and Enterprise (feature flag accounts_payable). Free and Starter do not include the Purchases module.

New permission keys

purchases.suppliers.view / manage, purchases.bills.view / create / edit / approve, purchases.payments.create.

Defaults by role

Admin and Finance Manager get the full set. Stock Manager sees suppliers and bills. Viewer is read-only.

Existing tenants: roles seeded before Purchases shipped don't have the new keys yet. Open Settings → Roles, click Reset to Defaults on Admin and Finance Manager, then save. The Purchases menu and actions will appear.