Accounting
Sales & invoicing
In one line: from quote to invoice to collecting what's owed — a group of screens that runs the full sales cycle, issues compliant invoices, and keeps their trail in the books intact.
Plan: Part of the Accounting workspace — available from the Advanced plan and during the trial. See the Accounting overview.
Overview
The sales cycle runs in three steps:
- Quote — a promise of a price you send the customer. It doesn't touch the books or create tax, and stays editable as long as no invoice has been issued from it.
- Invoice — the record of an actual supply. The sale enters the books through it — not through the quote — and it takes a legal number and calculates VAT (value-added tax — the percentage added to the sale value and collected on the state's behalf). Once issued, it can't be edited.
- Collection — recording what the customer paid and allocating it to open invoices, so you can see who still owes and how much.
When an issued invoice needs correcting, the only route is a credit or debit note — never an edit. Rounding out the group are price lists, which set each customer's price; e-invoicing compliant with the Zakat, Tax and Customs Authority (ZATCA) — on the roadmap for now; and Import, which brings your items and open balances over from your previous system before you issue your first invoice.
Numbers are never reserved ahead of time: an invoice number is allocated the moment it's saved, inside the same transaction, so a rolled-back save releases it. That's why you'll never see a "provisional" number before issuing.
How do I bring my items and balances over from a previous system?
The Import screen is the door for anyone leaving another system: it reads one CSV file and creates either Items or Opening balances from it. Its header states its limits plainly: "Bring over what you have from your previous system. Customers and suppliers are imported from the Contacts screen; items and opening balances belong here." Under it, a "You currently have" line counts your registered items, customers and suppliers — two numbers you can measure the import against.
Preview first, always: the import button does not exist until a preview has been read, so nobody learns what an import did from its aftermath.
- From the "What are you importing" list choose Items or Opening balances.
- Press "Download the sample file" — a file carrying the same import columns with example rows. Export your data into it rather than betting on the system recognising your old system's column names.
- "Choose a CSV file."
- "Show me what will happen" — under "What will happen" you read what will go in, what will not, and why. The preview writes nothing.
- "Import" — the button carries the count of what is about to go in.
The two halves do not behave alike, and the screen says so before you choose a file:
- Items — an unreadable row is skipped on its own: "Columns: code, name, unit, price, category — or their Arabic equivalents. A row that cannot be read is skipped with its reason, and the rest are imported."
- Balances — one unreadable row refuses the whole file: "Columns: type (debit/credit/balance), party, account, number, date, amount. A single unreadable row refuses the entire file — half a trial balance does not balance."
In the items preview you see Ready to import and Skipped, then a table with Row and Reason columns: no item code, code duplicated in the file, price unreadable — each with the row's number in your own spreadsheet. The first twenty ready items are shown with Code, Name, Unit and Price; anything beyond that is counted, not listed. After the import you read Imported with its count, and — where relevant — a table of what could not be created, by code and reason: a code already in your catalogue is refused on its own while the rest go through.
The import also reads barcode and tax columns when present. An item with no price is accepted (its price shows as "—"), but a price written in something unreadable is a reason to skip. An empty name takes the code as its name, and an empty unit takes the default unit.
In the opening-balances preview three numbers are counted: Receivables, Payables and Account balances. Then:
- If the file carries names the party registry does not know, they are listed one by one under: "Names that match no registered customer or supplier. Import contacts first, then bring this file back." The import button does not appear at all until they are resolved. Matching is by the name exactly as written — no guessing, because a guessed name means a balance posted against the wrong customer.
- Type the balances date: the date the opening entries are posted, while each document keeps its own original date.
- Press Import. Above it sits the line that states the rule: "The import is all or nothing: if one row is refused, nothing at all is written." On success you read "Opening balances posted."
Caution: the button does nothing while the balances date is empty, and it does not tell you so — if you press it and nothing happens, the date is what's missing. The date must also fall inside an open financial period, or the import is refused: "The financial period for this date is closed," or "This date falls outside every open financial year. Open the financial year from the Chart of accounts and try again."
The rules for balance rows are few and explicit: the type is never guessed ("Unknown row type. Write debit, credit or balance — guessing means guessing which way the money goes."), the amount is greater than zero, a receivable/payable row names its party ("Every receivables balance must name its party — a balance with no owner is not a balance.") and carries a year-month-day date, and a balance row names its account code from the chart of accounts. The file accepts debit balance and credit balance where the side must be stated, while balance alone takes the account's natural side.
The "number" column is required for receivable and payable rows, and the preview does not reveal that it's missing. Every open document needs its original number as it was in your previous system, but the preview counts the rows and moves on; so a file with no number column is refused at import, not before: "Every open document needs its original number as it was in the previous system." Fill the column in before you press Import. (A balance row needs no number — it needs an account code.)
Note: documents brought over keep their original number as it was in your previous system, so a statement of account matches your customer's own records; that is also why a duplicate number is refused: "This number is already in use. Check the file: the row may be duplicated, or the document may have been imported before." — which is what stops the same file being imported twice. Migrated receivables enter your open-invoice list like any issued invoice: they appear in the ageing report, and a receipt voucher can be allocated against them.
If the system does not recognise your file's columns, a mapping panel appears: "We did not recognise this file's columns. Say which column matches each field, then show what will happen." It lists the import fields, each with a dropdown of your own file's columns plus "— none —" to leave a field unmapped. Map them, then "Show me what will happen" again. This panel appears only when neither of the two essential columns is recognised — code and name for items, type and amount for balances — so you are never asked six questions nobody needed answered.
Tip: save your file as UTF-8. The screen reads that encoding, and anything saved otherwise arrives with its Arabic names mangled; the sample file opens in Excel with correct Arabic, so it is the safest starting point. Arabic-Indic digits (1234) and thousands separators are read as they are.
What the import does not do:
- It does not import customers and suppliers — those come from the Contacts screen, which is why you import contacts first and the balances file second. See Contacts & companies.
- It changes nothing that already exists: it only creates new items, and an existing code is refused rather than updated.
- Migrated documents sit outside the e-invoicing chain and carry no tax: their tax was declared in the system that issued them, and declaring it again here would be an error in your return.
- It does not close the opening-balances account: whatever remains in it after the migration is the migration's error expressed as an amount — you read it and clear it with a manual entry. See The general ledger.
- It does not accept a file over the limit: "The file is larger than 2 MB. Split it into two files." Nor an empty one: "The file is empty."
Permissions: the preview and the sample download need only View the books; the import itself needs Post entries. The same rule holds across the whole sales group: every read on these screens — lists, reports, printing — needs View the books, and every write — a quote, invoice, voucher, note, price list or recurring schedule — needs Post entries.
Quotes
A quote is a promise of a price, not a supply — so it appears neither in the books nor in the tax return.
- Pick the customer, and set the date and valid until (the quote's last day).
- Add lines: each has a description, quantity, and price, and you choose its tax or "no tax." Every line starts as a free line; pick a catalogue item for it and its description, price and tax fill in.
- The total shows instantly: before tax, then tax, then total — by the same calculation the invoice uses, so the number the customer agrees to is the number their invoice carries.
- Save the quote, then print it to send.
A quote's status advances through Draft, Sent, Accepted, Rejected, Expired, or Invoiced. It stays editable until an invoice is issued from it — not until the customer agrees: press Open, revise the lines and valid until, then Save changes. The number does not change when you edit, because the customer already has it. The customer and the date, though, are locked once it's open; a quote for a different customer is a different quote.
When accepted, press "Issue invoice," and an invoice is created with the same lines. The invoice takes today's date, not the quote's, because the supply happens when it's billed, not when it was offered.
A quote past its "valid until" cannot be invoiced. Because the invoice takes today's date, once that date has passed the issue is refused: "This quote has expired. Extend the validity date if the price still stands." — billing at last month's price is a real loss that happens by oversight, so extending is a decision you make: open the quote, extend valid until, save, then issue. The same holds for a quote whose status is Rejected or Expired: "This quote is closed and cannot be invoiced. Change its status first if the customer has agreed."
Once you have at least one warehouse, a "Warehouse to supply from when invoicing" field appears in the screen header. That is where the goods leave from on issue, and a quote carrying a stocked item cannot be invoiced before it's chosen: "Choose the warehouse the goods leave from — the invoice contains a stocked item." Anyone selling services only never sees the field and never needs it.
Choosing a customer re-prices the items from their price list; and the price the pick fills stays editable — a rate you negotiated is never overwritten.
Sales invoices
The invoice is the first document in this group a tax authority reads, and it can't be edited once issued — the correction is a credit note.
- Pick the customer. If they aren't on file, press "New party" and enter their legal name, kind (organization/person), tax number, and role (customer/supplier) without leaving the screen.
- Set the date. Type payment terms (days) and the due date fills in front of you, or type the due date yourself — at which point the terms are cleared, because they no longer describe the date.
- Buyer name and tax number: picking a registered customer fills and locks them (the party registry owns the legal identity); if none is on file, they're left for you to type.
- Choose the invoice type: Standard (business-to-business) or Simplified (cash sale).
- If you have at least one warehouse, a Warehouse field appears; choose the one the goods leave from.
- Add lines (a catalogue item or a free line, with description, quantity, and price) and watch the total move as you type.
- Press "Issue invoice."
A standard invoice requires the buyer's tax number. If the sale is taxable and the buyer has no tax number, the issue is refused: "A standard tax invoice requires the buyer's tax number. For a cash sale, use a simplified invoice." A number cannot be added to an issued invoice — the correction is a credit note plus a new invoice, two numbers spent. Choose Simplified for a cash sale, or add the tax number to the party first.
An invoice carrying a stocked item really does move stock: it needs a warehouse ("Choose the warehouse the goods leave from — the invoice contains a stocked item.") and is refused if the balance is short ("The quantity requested exceeds the available balance."). The refusal happens before a number is allocated, so it leaves no gap in the sequence. See Stock.
VAT is calculated on each tax category's total, not line by line — the way the buyer expects it. And the stored figures are the ones the server computed, not the ones shown in the preview. Lines on this screen take the standard tax category; there is no per-line tax picker here as there is on a quote or a recurring schedule — so a sale carrying a different category is issued from a quote, where you choose the tax line by line, and then converted to an invoice.
The invoice date must also fall in an open financial period, or the issue is refused with the same two sentences the import uses: "The financial period for this date is closed," or "This date falls outside every open financial year."
The table below the form lists your last 200 invoices, newest first: number, date, buyer, and amounts, each with "Print" and "Activity" buttons (the log shows what happened to the invoice: began as a quote, issued, posted to the ledger, payment received, credit or debit note, e-invoicing).
You may see a notice about invoices "not yet posted to the ledger." The document is sound and the number is saved; press "Re-post" and the entry is safely redone.
Recurring invoices
For contracts and subscriptions: define the schedule once and the invoices issue themselves. The schedule itself doesn't touch the books or take a number — the invoices it produces do, each with its own number.
- Pick the customer, the cadence (weekly/monthly/quarterly/yearly), and "every how many cycles" (e.g. every two months).
- Set the first due date, an end date if the contract ends, and the payment terms in days.
- Add lines with their tax, and save the schedule.
The system issues due invoices automatically every night, at 02:00 Riyadh time — after midnight so the day has turned, and before the backup window so the night's invoice is inside it. The day a due date is measured against is the Riyadh day for every tenant, so the run may fall hours ahead of or behind your own calendar if you are far from the Gulf. To run it by hand, open the schedule and press "Run now" — it issues everything due up to today, and running it again never issues an invoice twice.
The table shows the cadence, the next due date, and the status (Active/Paused/Ended). Opening it shows "What was actually issued" — the log of invoices it really produced. Pause it with "Pause" and resume with "Resume."
If the last run failed — for instance because the fiscal period is closed — a "Last run failed" flag appears on the row. This is the only place you learn a cycle wasn't issued.
Receivables
Here you see who owes you, how much, and for how long, and record what arrived. Outstanding is computed from the documents — invoice total minus what's been allocated to it — not from a stored balance.
Aging report: choose "Report as of" and press "Show." Each customer's amounts are spread across age buckets: Current, 1–30 days, 31–60, 61–90, over 90 days, then the total. There's no default date — so you always know which day the report was run for. A fully settled invoice drops out of the report entirely rather than showing as zero, and an invoice with no due date is aged from its issue date — having no terms is not the same as having no debt.
Receipt voucher to record a payment:
- Fill in the customer box (see the caution below it), the date, the payment method (cash/bank transfer/card), and the amount.
- Allocate the amount across the open invoices shown (each with its outstanding and an "allocated" box). Whatever isn't allocated is recorded as a customer advance. The table lists open invoices for all customers, not just yours, so check the invoice number before you type an amount into its row.
- Press "Save voucher."
The customer box here expects the party's ID, not their name. It is a plain text field with no picker — unlike every other screen in this group — and a name typed into it is refused: "Customer not found. Pick them from the list instead of typing their ID." None of the sales screens displays that ID, so don't waste time hunting for a list that isn't there — this is a known rough edge. And don't record the collection with a manual journal entry instead of a voucher: an entry moves the accounts but creates no allocation, so the invoice stays open in the ageing report even though it has been paid.
Vouchers appear in the "Receipts" list with a "Print" button, to hand the customer a receipt showing the invoice numbers settled.
Two different refusals for over-allocation. If the total you allocated exceeds the voucher's amount: "Total allocations exceed the voucher amount." — check your figures. If what you allocated to one invoice exceeds its outstanding — which is what happens when another voucher settles it while you type: "The allocated amount exceeds the invoice's outstanding. Another voucher may have settled it; refresh the page and try again." Refresh first, because the outstanding on your screen is precisely the stale number.
Credit & debit notes
An issued invoice is never edited, so a note is the only correction tool. A credit note returns part of what was billed (reducing what the customer owes); a debit note adds to it (increasing it) — each with its own numbering.
- Choose the type: Credit note or Debit note.
- Pick the referenced invoice and the date, and enter the reason (returned goods · price difference · calculation error).
- Add the note's lines (description, quantity, price), and press "Issue note."
Notes appear in two lists — Credit and Debit — each with a "Print" button.
The ceiling rule: credit notes against an invoice may not exceed it, summed across all of them. A debit note has no ceiling — its amount bears no relation to the invoice's. The system checks this and tells you how much is left if it refuses.
A credit note is a tax document the buyer needs in order to reverse the VAT they've already reclaimed — so make sure to hand it over.
Price lists
A list sets the same item's price for a given customer. It doesn't touch the books; instead it's read the moment a line is filled on an invoice or quote, in this order: the customer's list price, then the default list, then the item's catalogue price.
- Create a list with its name in Arabic and English.
- Open it to edit: set "valid from" and "valid to" (both dates inclusive), and mark it the default list if needed.
- Add items with their prices; each shows the catalogue price beside it to compare. Press "Save list."
- Under "Who's on this list," add the customers it covers.
Saving replaces the whole table. An item you remove from the list reverts to its catalogue price — delete carefully.
A list is never deleted, it is archived with the Archive button: an archived list is no longer read when pricing, while its effect on documents issued while it was live remains. The pricing chain never stalls for a missing rung either — a customer on an archived list, or a list with no row for this item, simply falls through to the next rung and on to the catalogue price, so nothing ever stops you writing an invoice.
E-invoicing (ZATCA)
Direct integration with e-invoicing compliant with the Zakat, Tax and Customs Authority (ZATCA) is on the roadmap — we announce each integration once it's ready.
FAQ
Q: Why don't I see the invoice number before saving? A: Because it's allocated only at save, so no number that might belong to someone else is held. You see it the instant the invoice issues.
Q: I made a mistake on an issued invoice. How do I fix it? A: An issued invoice isn't editable. Issue a credit note to lower its value or a debit note to raise it.
Q: I allocated more than the invoice's outstanding. A: The system refuses over-allocation and shows the real outstanding. Any amount not allocated stays as a customer advance.
Q: Does a recurring invoice issue itself? A: Yes, automatically every night. And you can press "Run now" anytime with no risk of a duplicate.
Q: I edited a price list and an item I'd added vanished. A: Saving replaces the list's whole table; any item not present at save reverts to its catalogue price. Add it again, then save.
Q: The balances preview passed, but the import was refused. A: Your file has no number column, and the preview does not check for it. Every open receivable needs its original number from your previous system — it is how the customer reconciles their statement, and how the system stops the same file being imported twice. Add the column and bring the file back.
Q: I typed the customer's name into a receipt voucher and was told "Customer not found." A: The box is a plain text field and does not search by name — it expects the party's ID. No sales screen displays that ID, so this is a known rough edge rather than a mistake on your part. And don't fall back on a manual journal entry: an entry creates no allocation, so the invoice stays open in the ageing report.
Q: Can I re-send the same balances file after correcting it? A: Yes. The import is all or nothing, so a refused file wrote nothing at all. A file that already succeeded is a different matter — its document numbers are now in use and a second import is refused, which is exactly what prevents duplication.
Quick reference
| Screen | Path |
|---|---|
| Import (bring items and balances from a previous system) | Accounting → Sales → Import |
| Quotes | Accounting → Sales → Quotes |
| Sales invoices | Accounting → Sales → Sales invoices |
| Recurring invoices | Accounting → Sales → Recurring invoices |
| Receivables | Accounting → Sales → Receivables |
| Credit & debit notes | Accounting → Sales → Notes |
| Price lists | Accounting → Sales → Price lists |
| E-invoicing (ZATCA) | Coming soon — on the roadmap |
The Sales tab strip carries two further tabs that are not part of the sales cycle: Budgets and Employee custody — both are covered in The general ledger.
Related articles
- Accounting overview — the Accounting workspace and its seven groups
- The general ledger — opening balances entered by hand, and what's left in their account after a migration
- Stock — the items the import creates, and where their quantities are read
- Contacts & companies — importing customers and suppliers before the balances file
- Purchases & payables — the cycle's other face: what you owe suppliers
- Financial reports & tax — the tax return built from your invoices
- Banks & treasury — where what you collected comes to rest