Purchase Invoices
The Purchase Invoices module lets you record vendor bills, track what your business owes suppliers, and automatically post the corresponding journal entries to the General Ledger.
Set up your Chart of Accounts and Posting Setup before approving bills — the system uses these mappings to generate double-entry journals automatically.
Status flow
Draft → Approved → Paid
↓
Void
| Status | Meaning |
|---|---|
| Draft | Bill recorded but not yet verified. Can be edited or deleted. |
| Approved | Bill verified and posted to GL (DR Expense / CR Payables), converted to your tenant's base currency first if the bill is in a foreign currency. Catalog products on the bill are received into stock (see Receiving stock). |
| Paid | Payment processed and posted to GL (DR Payables / CR Bank), also converted to base currency. |
| Void | Bill cancelled — only an Approved (not yet paid) bill can be voided. If a GL journal was posted for it, a reversing entry is posted automatically — you don't need to reverse it by hand. Voiding does not take back stock the bill received; correct that with a stock adjustment. |
Creating a vendor bill
- Go to Accounting → Purchasing. Without the Accounting module, the same page is under Point of Sale → Purchasing or Finance → Purchasing; in the business-unit menu layout it's Finance → Purchase Invoices
- Click + New Bill — the bill number (BILL-0001, BILL-0002, …) is assigned automatically
- Fill in the header:
- Vendor (required) — type to search your vendor list and pick one. If the vendor isn't there yet and you hold Manage Vendors, click + New Vendor at the bottom of the list to create it without leaving the bill (see Vendors →)
- Date — invoice date from the vendor
- Due Date — when payment is due
- Currency — a fixed choice of TZS or USD, the same as every other document type. Picking a vendor whose card has a different Default Currency asks whether to switch. Currency Management only supplies the exchange rate used to convert a foreign-currency bill to your base currency for reporting — it doesn't add more currency choices here
- Vendor Ref / Their Invoice # — the vendor's own invoice number (for matching)
- Description — what the bill is for
- Receiving Store — shown when you stock goods (Point of Sale, Diesel Yard, or Spare Parts) and have more than one store; pick where the goods arrive, or leave it on the default store
- Add line items with + Add Line: description, quantity, unit, unit price, and a per-line VAT toggle (+18% / No VAT) — or click the 📦 catalog picker to search the Items catalog and pull description, unit, cost price, VAT, expense category and expense account straight from an item. + New Item at the bottom of the picker creates a catalog item on the spot (needs Manage Items)
- Optionally tick Subject to WHT and pick the rate (see Marking as paid)
- Click Save Draft
A bill saved before vendors had to be picked from the list may show only a typed vendor name; pick the vendor from the list when you next edit it.
Creating a new bill immediately notifies whichever roles are configured in Settings → Notifications → Approval Queue Notifications by email and/or SMS that a Purchase Invoice needs approval — Draft is this module's "needs approval" state, since there's no separate Submitted step. There's also a manual "Notify via WhatsApp" quick-action available from the notification bell.
Approving a bill
Only users with the Approve Purchase Invoices permission can approve.
- Open the bill (from the list or FactBox)
- Click ✓ Approve
If the Accounting module is on and Posting Setup's Accounts Payable account is set, the system automatically creates a posted journal:
DR Expense Account [subtotal per line]
DR VAT Input Account [VAT amount, if VAT lines]
CR Accounts Payable [total]
Without a VAT Input account, each line's VAT is added to its expense line instead. Each line's expense account is, in order: the line's own account (set when you picked a catalog item with an Expense Account override), the account mapped to the line's expense category in Posting Setup, or — if neither exists — account 6000. Account 6000 isn't in the Tanzania Standard CoA, so make sure every line has one of the first two before approving.
The GL journal is shown on the bill after approval — click the green "GL journal posted" badge to jump to its GL entries.
Receiving stock
If your tenant stocks goods (Point of Sale, Diesel Yard, or Spare Parts), approving a bill also adds every Product line that was picked from the catalog to stock at the bill's Receiving Store (or the default store), at the line's unit price. Lines typed by hand and Service items don't affect stock. This is how a store, the Diesel Yard tank, or the spare parts store is restocked — see Diesel Yard →.
Marking as paid
- Open an Approved bill
- Click 💳 Mark Paid
This creates a second posted journal (when Accounts Payable and Default Bank / Cash are set in Posting Setup):
DR Accounts Payable [total]
CR Bank / Cash Account [net amount, after WHT]
CR WHT Payable [WHT amount, if the bill is subject to withholding tax]
If the vendor is subject to withholding tax, tick Subject to WHT and set the rate (2%/5%/10%/15%) when creating or editing the bill. WHT is calculated on the subtotal before VAT, and the bill shows the Net to Vendor. The payment confirmation only displays the already-calculated WHT breakdown and lets you record the WHT Certificate number once you have it. The WHT Payable line always posts to account 70120 (Withholding Tax (WHT) Payable in the Tanzania Standard CoA); it isn't configurable.
Converting a requisition
An approved Requisition can become a bill without retyping it. Once a requisition reaches MD Approved, its detail page shows 📄 Convert to Purchase Invoice to anyone holding the Convert Requisition to Purchase Invoice permission (Tenant Admin and Accountant by default). This creates a Draft bill with:
- the requisition's items, quantities, units and prices as lines (with VAT off — turn it on per line if it applies)
- the vendor matched by the requisition's "purchased from" name, if a vendor by that name exists — otherwise pick the vendor yourself
- the requisition's reference number as the Vendor Ref, and its currency
From then on the requisition shows "Converted to Purchase Invoice BILL-…" with a View Purchase Invoice → button. Review the draft, then approve it as usual. Converting doesn't send the approval notification that a manually created bill does.
Printing and sharing
On a bill's detail page, 🖨️ Print prints the bill. If your tenant has WhatsApp Sharing turned on, Share via WhatsApp sends it as a PDF.
FactBox
Click any row in the Purchase Invoices list to open the FactBox — a summary panel showing vendor, dates, total, and status. From the FactBox you can:
- Open Bill → — navigate to the full detail page
- ✓ Approve — approve directly from the list (Draft bills)
- 💳 Mark Paid — mark as paid directly from the list (Approved bills)
Exporting to Excel
Click ⇩ Export to Excel on the Purchase Invoices list to download the currently filtered/searched bills as a formatted workbook — Bill No, Date, Due Date, Vendor, Status, Currency, Subtotal, VAT, Total, Outstanding, Created By, and Approved By, with a totals row on the money columns.
Permissions
| Permission | What it allows |
|---|---|
purchase.view | View the purchase invoice list and details |
purchase.create | Create new draft vendor bills |
purchase.edit | Edit existing draft bills |
purchase.approve | Approve bills, mark as paid, void |
purchase.delete | Delete draft bills |
posting.manage | Configure Posting Setup (GL account mappings) |
Assign these in Settings → Users & Access → Roles & Permission Matrix.
AP Aging
There are two places to view payables aging:
List view summary cards (quick overview):
- Outstanding — total value of all Approved (unpaid) bills, converted to your tenant's base currency so bills in different currencies still sum to one meaningful figure
- Overdue — count of Approved bills where the due date has passed (shown in red)
Financial Reports → AP Aging tab (full analysis):
Go to Accounting → Financial Reports → AP Aging for a complete aging breakdown of all unpaid vendor bills, grouped by days past due date:
| Bucket | Days past due date |
|---|---|
| Current | Not yet overdue |
| 1–30 days | Slightly overdue |
| 31–60 days | Overdue — schedule payment |
| 61–90 days | Significantly overdue |
| 90+ days | Immediate action required |
The report shows vendor, bill number, dates, amount, and exact days overdue per row. Use this to prioritise which vendors to pay first and to avoid supplier disputes.
Vendor Ledger
Open any vendor's card (from Purchasing or from the Vendors list) and click the Purchase Ledger tab to see a full statement of all purchase invoices for that vendor.
The ledger shows:
- Summary cards — Total Billed, Paid, and Outstanding balance for the vendor
- Invoice table — chronological list of all purchase invoices (excluding Void), with bill number, description, due date, amount, and status
- Overdue highlighting — due dates shown in red when past due, with the number of days overdue shown inline
The Vendor Ledger is read-only — it reflects the current state of all purchase invoices linked to the vendor by Vendor ID or name.
Related
- Posting Setup → — configure GL account mappings for auto-posting
- Chart of Accounts → — manage the accounts used in postings
- GL Entries → — view all posted journal entries
- AP Aging → — full aging report in Financial Reports