Fiscalise From Excel or CSV — No Add-In to Install
Overview. Some fiscalisation providers make Excel users install Windows add-ins, template locators and API plugins across eleven steps. ThatFiscal's Excel route is deliberately the opposite: fill our template, send it, done. No installation, works on any computer — even a phone.
Before You Begin: nothing. If you can open a spreadsheet, you're qualified.
Get the Template
The template is excel_template.csv in your welcome pack, and support will email it to you on request. Its header row is:
invoice_no,receipt_type,currency,buyer_name,buyer_tin,item_name, hs_code,qty,price,line_total,tax_percent,tax_id,tax_inclusive,payment_method, credited_invoice_no
Column order does not matter — we read by name — and the five optional columns in the table below (notes, amount_paid, line_type, tax_code and credited_invoice_no) can be added or left out. credited_invoice_no ships in the template because a credit-note row cannot be read without it, and adding a column to a file you have already started is the one edit people get wrong. The template ships a worked credit-note row you can copy.
Fill In Your Invoices
One row per line item; every row sharing an invoice_no becomes one invoice. The invoice-level values (currency, buyer, receipt type, tax_inclusive, payment method) are read from the first row of each group, so it is enough to fill them once per invoice.
| Column | Required | What It Does |
|---|---|---|
invoice_no | Yes | Your invoice number. Rows sharing it are grouped into one invoice; a row with a blank invoice_no is skipped, so trailing blank rows are harmless. |
receipt_type | No | FiscalInvoice (default), CreditNote or DebitNote. Anything else — Proforma, Quote, Receipt — is rejected before submission with a message naming the value. |
currency | No | 3-letter code, upper-cased for you. Defaults to USD. |
buyer_name | No | Buyer's registered name. Leave blank for a walk-in sale. |
buyer_tin | No | Buyer's 10-digit TIN. ZIMRA requires name and TIN together, so a name with no TIN is moved into the receipt notes instead of blocking the sale (RCPT043). |
item_name | Yes | Line description. Defaults to "Item" if blank. |
hs_code | No | 4 or 8 digits. Leave blank and we auto-fill it. |
qty | No | Defaults to 1. Zero or negative is treated as 1. |
price | See note | Unit price. If line_total is blank we compute price × qty. |
line_total | See note | Line total. This wins over price × qty when the two disagree, and the unit price is re-derived from it so ZIMRA's RCPT024 check passes. Give at least one of price or line_total. |
tax_percent | Recommended | The VAT rate for that line — 15.5, 0, etc. |
tax_id | Recommended | The ZIMRA tax ID matching that rate on your device (from getConfig — the IDs are assigned by ZIMRA per device, e.g. standard-rate VAT 15.5%, zero-rated and exempt each have their own ID). We resolve it from the rate if you leave it blank. |
tax_inclusive | No | A blank cell means TRUE (tax-inclusive) — the Zimbabwean convention. Accepted true values: 1, true, yes, y, inclusive. Anything else (false, no, 0, exclusive) is tax-exclusive, and VAT is then added on top of your prices. |
payment_method | No | Defaults to Cash. Also Card, MobileMoney, BankTransfer, Coupon, Credit, Other. |
credited_invoice_no | For credit notes | The invoice number this credit note reverses. Required whenever receipt_type is CreditNote or DebitNote. |
notes | For credit notes | Free text printed on the receipt. ZIMRA requires a note on every credit and debit note (RCPT034). |
amount_paid | No | Overrides the computed payment total. Leave it blank and we compute it — line sum when tax-inclusive, line sum plus VAT when tax-exclusive. |
line_type | No | Sale (default) or Discount. A negative total is treated as a Discount line automatically. |
tax_code | No | ZIMRA tax code letter, if your device uses them. |
There is no date column — the receipt is stamped at the moment it is fiscalised, which is what keeps it inside your open fiscal day.
Send It In
Save from Excel as CSV UTF-8 (Comma delimited) — another encoding is refused with a message telling you exactly that. Then POST the file, or ask support to run the upload for you:
curl -H "X-Api-Key: tf_…" \
-F "file=@invoices.csv" \
https://api.thatfiscal.com/webhooks/excel Each invoice is signed, submitted to ZIMRA, and listed with its QR and verification code — print or email them to customers from the portal.
{"processed": 12, "rejected": 1, "results": […], "errors": [{"invoice_no": "INV-1007", "error": "…"}]}. Fix the offending rows and re-send just those — an invoice already fiscalised is not fiscalised twice.receipt_type to CreditNote and fill credited_invoice_no with the original invoice number. Do not use negative quantities — the sign is applied for you. The original invoice must already be fiscalised on the same device or the credit note is refused with RCPT015.