Skip to main content

Invoicing

The Invoicing module manages the full sales invoice lifecycle — from draft creation to payment — with TRA-compliant VAT treatment, withholding tax handling, and multi-currency support.

GL posting and approval are both automatic once configured

Sales invoices post to the General Ledger automatically on Draft → Sent and on → Paid — see GL posting below. If your tenant requires a second sign-off before an invoice is sent, see Invoice approval.


Status lifecycle​

Draft → Sent → Paid
↓
Overdue
StatusMeaning
DraftCreated but not yet sent. Fully editable.
SentIssued to the client. Still fully editable — only Paid locks edits.
PaidPayment received in full. Locked from further edits, and cannot be deleted, to preserve audit integrity.
OverduePast the due date with no payment recorded.

Status changes are manual — the system does not automatically flag a past-due invoice as Overdue; you set it yourself via the Document Lifecycle stepper on the invoice detail page. Allowed moves: Draft → Sent, Paid, or Overdue; Sent → Paid or Overdue; Overdue → Paid. There's no way back to an earlier status. There is no separate "Void" status — to cancel a Draft, Sent, or Overdue invoice, delete it (a soft-delete that archives the record rather than erasing it); Paid invoices cannot be deleted.

An invoice can't leave Draft until it has a customer — see The customer on an invoice. If your tenant has turned on Invoice Approval, leaving Draft isn't available to everyone — see that section below.


Creating an invoice​

Changes on an invoice save as you make them — there's no separate Save button.

From a job (most common)​

  1. Go to Jobs → open the relevant job (or a specific trip on it)
  2. Click 📄 Create Invoice
  3. The invoice opens as a Draft with the job's customer filled in, linked to that job/trip, and one placeholder line — there's no pre-fill from a separate income record; enter the line amounts directly on the invoice itself

The job must have a customer before it can be invoiced.

From a quotation or sales order​

  • Quotations — on an Accepted quotation, click 📄 Convert to Invoice. See Quotations →.
  • Sales Orders — click 🧾 Convert to Invoice (or Create Invoice) on the order. The order's lines, customer and currency are copied onto a new Draft invoice, and the order is marked Invoiced. If the order was delivered through trips on one job, the invoice is linked to that job (and to the trip, when there's only one), so it counts toward that job's revenue. See Trading →.

Standalone invoice​

  1. Go to Invoices and click + New Invoice — the invoice is created as a Draft
  2. In Bill To, pick the customer — type to search by name, TIN, phone or email. If they're new, click + New Customer at the bottom of the list to add them without leaving the invoice (needs permission to create customers)
  3. Add line items

The customer on an invoice (Bill To)​

Bill To at the top of the invoice form is the customer the invoice is for. Picking a customer copies their name, address, email, TIN and VRN onto the invoice; the TIN and VRN also fill the Buyer TIN/VRN in the TRA Compliance section. Invoices created from a job, quotation, sales order, hotel reservation or lease arrive with the customer already picked.

  • A customer is required before an invoice leaves Draft. Until one is picked, the Sent, Paid and Overdue buttons stay disabled, and Submit for Approval / Approve & Post are refused.
  • The customer can only be changed while the invoice is a Draft. After that it may already be fiscalized with TRA and posted to that customer's account, so Bill To shows the customer as plain text.
  • The invoice keeps the customer's details as they were when it was issued. Editing the customer record later (a new address, say) doesn't change invoices that were already sent.

An invoice records which customer it belongs to, so it stays on that customer's page, ledger and balance even if the customer is renamed. Invoices created before this link existed are still matched to a customer by name. If an older Draft shows a name in Bill To with a note to pick it, choose that customer to link the invoice to their account.

Linked documents​

When an invoice is linked to a job or a sales order, a 🔗 card at the top of the invoice page shows Linked Job and/or Sales Order — click either to open it. For an invoice linked to a job, a Trip (optional) picker there lets you tie the invoice to one specific trip, so it shows on that trip's ledger.


Line items​

Each line item contains:

  • Description — what the service or product is
  • Qty and Rate (labelled Excl. or Incl. VAT, depending on your VAT pricing setting)
  • Discount — an optional amount off that line (it can never take the line below zero)
  • Net Amount, VAT and Gross Total — calculated for you
  • TRA Cat. — the line's TRA tax category, which sets its VAT rate (see below)

Add lines with + Manual Item. There is no Unit field on an invoice line unless your invoice layout is Classic Tax Invoice (see PDF download), which adds a Unit and a Discount Label per line.

Click the 📦 button on any line to pick from the Items catalog instead of typing manually — type to search by name, code, or barcode. This pre-fills Description, Rate (the item's selling price), and the TRA category only. If the item doesn't exist yet and you hold the Manage Items permission, use + New Item at the bottom of the list to create it on the spot (it defaults to a Service) — it's added to the catalog and picked onto the line straight away.


VAT treatment​

ModeHow it works
VAT ExclusiveVAT is added on top of the net amount. Subtotal + VAT = Total.
VAT InclusiveVAT is extracted from the gross amount. Total already includes VAT.

This is a company-wide setting, not a choice per invoice — set it under Settings → Company → Regional & Tax Settings → VAT Pricing. It applies the same way to Invoices, Quotations, Expenses, and POS Checkout.

If your business is set to Not VAT Registered on the same screen, no VAT is charged on any line and the VAT and Buyer VRN fields are hidden.

Tanzania standard rate is 18%. International freight (export haulage) is typically zero-rated — pick category C on those lines.

TRA category per line​

Each line item has its own TRA category, and each category drives its own tax calculation rather than just being a printed label:

CategoryMeaningRate
AStandard-ratedYour tenant's Standard VAT % (Settings → Company → Regional & Tax Settings)
BSpecial Rate — only for businesses TRA has specifically authorized for it; don't use it otherwise0%
CZero-rated (e.g. export/transit freight, non-VAT items)0%
DSpecial Relief0%
EReduced rate — B2C paid via bank or an approved electronic payment system (Finance Act 2025)Your tenant's Reduced VAT % (Settings → Company → Regional & Tax Settings, default 16%)

Picking an item from the Items catalog on a line pre-fills its category from that item's own default — set per item in Item settings, so you don't have to remember which products are zero-rated every time.

caution

This is general guidance only. Confirm your specific VAT obligations with a qualified tax advisor — the Finance Act 2025's reduced-rate eligibility rules and documentation requirements were still being finalized by TRA's Commissioner General as of the public notice.


Withholding Tax (WHT)​

For services subject to withholding tax (e.g. transport services at 2%), tick Subject to Withholding Tax on the invoice and pick the rate (2% resident supplier, 5% non-resident transporter, 10% other services, 15% non-resident other). The WHT is calculated on the invoice total. The detail page then shows a WHT banner explaining the deduction to both you and your client:

Client deducts {amount} → remits to TRA → issues WHT Certificate to you.

The invoice total, the WHT amount deducted, and the net amount you'll actually receive are all shown separately, along with a WHT Certificate No. field to record the certificate once your client issues it.

If your business never deals with WHT, an administrator can switch it off in Accounting → Accounting Settings → Enable Withholding Tax (WHT); the WHT section then disappears from invoices.


Currency​

Pick the invoice's currency (TZS or USD) in the Currency field under Bill To. It can be changed while the invoice is a Draft; once it's Sent or Paid it's fixed.

  • + New Invoice starts in the Default Invoice Currency (Settings → Invoicing & Tax → TRA Compliance), or your base currency if that isn't set.
  • Picking a customer whose card has a Default Currency different from the invoice's asks whether to switch. Choose Cancel to keep the invoice's currency — the same customer can be billed in USD on one invoice and TZS on the next. Line prices are never converted, only relabelled.
  • Create Invoice from a job asks the same question for the job's customer.
  • Invoices converted from a Quotation or a Sales Order keep that document's currency.

When an invoice isn't in TZS, the TRA Compliance section of the invoice shows an Exchange Rate to TZS field and the total in TZS. It's filled in from your saved rate under Currency Management when there is one; you can overwrite it. Until a rate is set, the invoice is treated as 1:1 with TZS in reports, and a warning says so.


Sending an invoice​

On the invoice detail page, click 🖨 Print & Send. The panel that opens has:

  • 📧 Send — opens a pre-filled email (recipient from the invoice, subject and body with the invoice number, amounts, WHT note, and bank details) that you can edit. Choose ✉ Open in Mail App to send it from your own email program, or 📧 Send via System Email (shown when outbound email is set up in Settings → Integrations) to send it directly.
  • 🖨 Print / PDF — see PDF download below.
  • Share via WhatsApp — shown if your tenant has WhatsApp Sharing turned on (Settings → Integrations or Settings → Point of Sale — off by default). It generates the invoice PDF and opens WhatsApp with it attached (or a link to it, depending on your browser), ready to send.

Sending does not automatically change the invoice's status — use the Document Lifecycle stepper on the detail page to move it to Sent (or Paid, etc.) yourself.


PDF download​

Click 🖨 Print / PDF in the Print & Send panel to open the invoice as a print-ready page in a new window — print it, or use your browser's Save as PDF. It includes your company logo, TIN, stamp, and payment details.

To check the layout without printing, click Preview (or 👁️ View PDF) on the invoice page; you can switch between layouts there.

Three invoice layouts are available — Standard, Formal, and Classic Tax Invoice. Set the active one in Settings → System → Print Templates ("Invoice Layout" section), which also shows a table of which sections each layout prints. Choosing Classic Tax Invoice adds delivery/order reference fields (Delivery Note No., Buyer's Order No., Transport, Destination, and so on) to the invoice form, plus a Unit and Discount Label on each line.


Invoice approval​

Turn this on in Settings → Invoicing → Invoice Approval if you want a second person to sign off before an invoice actually goes out and posts to the books.

  • Off (default) — anyone who can open the invoice can move it straight from Draft to Sent.
  • On — the Document Lifecycle stepper can't move a Draft invoice anywhere; a banner at the top of the invoice is the only way out of Draft. Someone without invoice.approve (but with invoice.create or invoice.edit) sees Submit for Approval, which notifies whichever roles are configured in Settings → Notifications → Approval Queue Notifications (the same rule Expenses, Requisitions, and Purchase Invoices already use). Someone holding invoice.approve sees ✓ Approve & Post — this is the Draft → Sent transition: it posts to the GL and fiscalizes in the same action. An approver can also approve a draft directly without it being submitted first. On a submitted invoice, the approver can instead Reject it with a reason; the creator sees the reason, fixes the invoice, and submits it again.

An invoice must have at least one line with an amount before it can be submitted or approved. Pick who can approve in Settings → Users & Access → Approval Authority (the "Sales Invoice" column), or grant Approve Invoices in the Roles & Permission Matrix.

On the Invoices list, waiting invoices show as Pending Approval (with their own filter chip while approval is on) and sent-back ones as Rejected. A Pending or Rejected invoice stays a Draft everywhere else in the app (reports, job ledgers, the status lifecycle above) — it only shows up as pending income on its job/trip, never as counted revenue, until it's actually approved. Submitting, approving and rejecting are all recorded in the System Audit Trail.


GL posting​

Sales invoices post to the General Ledger automatically, the same way Purchase Invoices and POS sales do — as long as Accounting is enabled and the relevant Posting Setup accounts are configured (if they aren't, posting is silently skipped, not treated as an error):

TransitionPostsNeeds in Posting Setup
Leaving Draft (to Sent, Overdue or Paid — or Approve & Post, if Invoice Approval is on)Dr Accounts Receivable (total) · Cr Revenue (net) · Cr VAT Payable (VAT)Accounts Receivable and Default Revenue. Without a VAT Payable account, the VAT is credited to Revenue instead
→ PaidDr Bank · Cr Accounts ReceivableAccounts Receivable and Default Bank / Cash
→ Paid, on a WHT-applicable invoiceDr Bank (net received) · Dr WHT Tax Credit Receivable (WHT withheld) · Cr Accounts Receivable (full total)The above, plus WHT Tax Credit Receivable. If it isn't set, the payment isn't posted at all

A few things to know:

  • Jumping straight from Draft to Paid posts both journals, in order.
  • All invoice revenue posts to the Default Revenue account — invoice lines have no per-line revenue account.
  • A USD invoice is converted to your base currency before posting.
  • The raise journal is dated on the invoice date; the payment journal is dated the day you mark it Paid.
  • Deleting a Sent or Overdue invoice does not reverse the journal it already posted — if you delete one, post a reversing journal entry yourself.

The GL Entries → button on the invoice detail page opens the General Ledger filtered to that invoice's number. If nothing shows there, check the accounts in the table above.


TRA VFD/EFD Fiscalization​

Opt-in, enabled per tenant by eSecured

This is not yet self-activatable from the Platform Modules page (reachable from the profile menu) — contact your account manager to have it turned on. It's currently a beta capability, off by default for every tenant.

Once enabled, posting an invoice (the first time it leaves Draft, or Approve & Post) submits it to a TRA-licensed VFD aggregator and gets back a real fiscal receipt — not just the TRA-compliant schema (TIN/VRN fields, tax categories) this module already has by default, but an actual signed transaction TRA recognizes.

What happens on posting:

  • The invoice is submitted exactly once — a fiscalized invoice can never be resubmitted, whether by re-saving it or clicking anything twice
  • On success, the TRA Compliance section of the invoice shows a ✓ Fiscalized badge, the Fiscal Code (RVC), the receipt and Z-Report numbers, and a Verify on TRA → link that opens the real government verification page for that receipt
  • Before that, it shows Pending VFD Signature — and briefly ⏳ Fiscalizing… while the request is in flight

If a posted invoice isn't fiscalized — for example it was already Sent or Paid before VFD was turned on, or the request failed — the TRA Compliance section shows "Posted but not fiscalized with TRA yet" with:

  • ⚡ Fiscalize Now — submits it to TRA for the first time, on the spot. Works in every enabled mode, including Simulator.
  • ↻ Recover from VFD — sandbox and production only. Asks the VFD provider for an existing receipt by your invoice number instead of submitting a new one — use this first when the request may have reached the provider but the response didn't save, so a lost local record never becomes a duplicate fiscal filing.

On the invoice itself — the fiscal receipt (RVC, receipt/Z-Report numbers, a scannable QR code, and the verification link) appears on the in-app Preview and on the printed/PDF invoice, not just the detail page. Emailing a fiscalized invoice (via Send → system email) carries the same RVC/QR/link into the email itself, so a client who only ever receives the invoice by email can still scan or click through to the government verification page.

Modes — configured in Settings → Integrations:

ModeBehavior
OffDefault. No VFD call happens on posting.
SimulatorGenerates realistic-looking fiscal codes and verification links without calling any real system — safe for demos and testing the flow.
SandboxReal calls to the VFD provider's test environment.
ProductionReal calls that create genuine TRA fiscal receipts.

Z-Reports — the VFD provider's daily transaction summaries are browsable on their own full page, reachable from Settings → Integrations or from Financial Reports → VAT Report, with search and sortable columns.

Permissions​

PermissionWhat it allows
vfd.viewSee fiscalization status, fiscal codes, and verification links on invoices
vfd.manageConfigure the VFD mode and provider credentials, test the connection, and browse Z-Reports

Neither permission does anything until the tenant has this feature enabled — see the full reference in Permissions →.


FactBox​

The Invoices list can be searched by invoice number or client, sorted by date, amount, or client, and filtered with status chips: All, Draft, Pending Approval (only while Invoice Approval is on), Sent, Unpaid (Sent and Overdue together — everything posted but not yet paid), Paid, and Overdue.

Click any row to open the FactBox — a summary panel showing client, date, number of lines, net, VAT, total, and status. From the FactBox you can:

  • Open Invoice → — navigate to the full detail page
  • Delete — for non-Paid invoices, if you hold invoice.delete

Exporting the invoice list to Excel​

Click ⇩ Export to Excel on the Invoices list to download the currently filtered/searched invoices as a formatted workbook — one row per invoice, with invoice number, date, client name, buyer TIN, buyer VRN, status, currency, subtotal, VAT, and total, plus a totals row on Subtotal/VAT/Total (the VRN and VAT columns are left out if your business isn't VAT-registered). This is different from PDF download above, which generates a print-ready document for a single invoice.


AR Aging​

Go to Accounting → Financial Reports → AR Aging for a full aging breakdown of all outstanding customer invoices, aged from the invoice date (not the due date):

BucketAge from invoice date
0–30 daysRecent
31–60 daysFollow up
61–90 daysSignificantly overdue
90+ daysEscalate

Financial Overview​

For Logistics tenants, Finance → Overview gives a one-page summary of your invoicing and expense position:

  • 6 KPI tiles — Total Invoiced, Outstanding (Sent + unpaid), Overdue, Collected this year, Expenses this year, and Net (Collected minus Expenses) — Outstanding and Overdue turn amber/red when non-zero, Net turns red if negative
  • Revenue vs Expenses — a 6-month bar chart (Paid invoices by the month they were paid, non-rejected expenses by the month they were incurred)
  • Invoice Status Breakdown — a bar per status; click one to jump to the Invoices list pre-filtered to that status
  • Top 5 Customers by Revenue — click a customer to jump to their filtered invoices
  • Quick Links to Invoices, Expenses, Reports, and Vendors

This page is only available to tenants with the Logistics module — Accounting-only or Clearing-only tenants use Financial Reports instead.


Permissions​

PermissionWhat it allows
invoice.viewView the invoice list and details
invoice.createCreate new draft invoices (+ New Invoice, Create Invoice on a job, converting a quotation or sales order); also lets you Submit for Approval when approval is on
invoice.editLets you Submit for Approval when approval is on. It doesn't otherwise restrict editing — anyone who can open an invoice can edit it while it's Draft, Sent, or Overdue
invoice.approveOnly meaningful when Invoice Approval is turned on — approve or reject an invoice, which also posts it (GL + fiscalization) in the same action
invoice.deleteDelete (soft-delete) any non-Paid invoice — Draft, Sent, or Overdue

Sending an invoice and marking it paid are not gated by a separate permission — anyone who can open the invoice detail page can do both (once it's out of Draft, when approval is on).

Assign these in Settings → Users & Access → Roles & Permission Matrix.