Sales

The complete sales cycle: quotation, sales order, delivery note, the ZATCA-compliant tax invoice, returns (credit notes) and debit notes — plus customer and salesman management.

ℹ️ Cycle sequence: Quotation → (approve) → Sales order → (approve) → Delivery note → (approve) → Sales invoice → (post) → Receipt voucher. Each document is raised from its approved predecessor with a convert button that carries the customer, warehouse and lines over — and you can start anywhere (e.g. a direct invoice). Only posting the sales invoice moves stock and creates accounting entries; quotations, orders and delivery notes are commercial documents with no stock or GL impact.

Customers

Route: Sales › Customers/commercial/customers

Customers
Customer list
New customer
Adding a customer

Purpose: the customer master card. Every sales document starts by picking a customer, and the card's defaults (payment method, salesman, price list, discount) are copied into each new document automatically.

Card fields

FieldDescription & validation
CodeGenerated automatically for a new customer (read-only, stored in UPPERCASE). Set once at creation; must be unique.
Name (Arabic)Required. The name shown throughout the system and on printed documents.
Name (English)Optional — when left empty the Arabic name is used.
VAT NumberThe customer's tax registration number (up to 20 characters). A valid KSA VAT number is 15 digits and starts and ends with 3 (e.g. 3XXXXXXXXXXXXX3); ZATCA rejects a B2B invoice whose buyer VAT is malformed. Leave empty for consumers (B2C).
Phone / Email / AddressContact data; phone and address are printed on the invoice.
Street, Building No., District, City, Postal CodeThe national address block. Building No. and Postal Code are numeric entry fields. Printed on the tax invoice and sent to ZATCA as the buyer address.
Credit limit≥ 0. When > 0 the system blocks posting any credit invoice that would push the running balance past this limit. 0 = unlimited.
Opening balanceThe customer's balance when going live; included in the running balance shown in the list.
Due days≥ 0 — the agreed payment terms in days.
Default discount0–100 % suggested on documents.
Price listOptional. When set, the customer's list prices override the item's default sale price on new documents (“Default prices” = no list).
Payment methodCash / Credit — copied into every new invoice for this customer.
SalesmanDefault salesman — auto-filled into new quotations, orders and invoices.
ActiveShown when editing. Inactive customers stay in history but should not be used on new documents.

Buttons and side panel

  • Save / Save & New / Back — the standard edit actions; Save & New clears the form and fetches the next code.
  • Account Statement (edit mode) — opens the report center with this customer preselected and runs the statement.
  • Record notes — the free-text notes panel beside the card keeps a per-customer note history.
ℹ️ Standard vs simplified invoice (B2B/B2C): a standard (B2B, CLEARED) e-invoice is produced only when the customer has a VAT number and a complete national address (street/address, building no., city, postal code). If anything is missing, the system automatically issues a simplified (B2C, REPORTED) invoice instead — this prevents ZATCA rejections for incomplete buyer data.
ℹ️ Running balance: the Balance column in the list = opening balance + posted invoices + posted debit notes − posted credit notes − posted receipts.
⚠️ Deleting: a customer that already has sales invoices cannot be deleted — the system refuses with “This customer has sales invoices and cannot be deleted.” Deactivate the customer instead.

FAQ

  • Why did my customer's invoice come out simplified even though I entered the VAT number? The national address is incomplete — fill street (or address), building no., city and postal code, then invoice again.
  • Where does the customer's account come from? Postings go to the receivable account configured in the commercial account settings; you don't create a GL account per customer manually.
  • Can I change the code later? No — the code is set once at creation and is read-only afterwards.
  • What does credit limit 0 mean? Unlimited credit — the credit-limit guard only fires when the limit is greater than zero.

Salesmen

Route: Sales › Salesmen/commercial/salesmen

Salesmen
Salesman list

Purpose: define the sales reps you assign to documents. A salesman box exists on quotations, orders, delivery notes, invoices, returns and debit notes, giving you per-salesman sales figures in reports.

FieldDescription
CodeAuto-generated, read-only.
Arabic nameRequired.
English nameOptional.
PhoneOptional (digits entry).
ActiveEdit mode only. Inactive salesmen disappear from all document pickers but remain on historical documents.
💡 Tip: set a default salesman on the customer card — every new document for that customer then pre-selects him automatically.

FAQ

  • A salesman left the company — should I delete him? No; untick Active. His history stays intact and he vanishes from the pickers.
  • Why doesn't a salesman appear in the invoice dropdown? He is marked inactive — only active salesmen are listed.

The document editor — shared mechanics

All sales documents share one editor layout: a toolbar, a header-fields block, an item line grid and a live totals strip. Learn it once — it behaves identically everywhere.

Toolbar and statuses

ElementBehaviour
Status pillDraft — fully editable; Approved / Posted — locked read-only.
NewClears the editor and starts a fresh document (the next number is assigned at save).
SaveStores the document as a draft — editable, deletable, no stock/GL effect yet.
Approve / PostSaves and then locks the document. “Approve” (quotation, order, delivery note) only locks it and enables conversion; “Post” (invoice, credit note, debit note) additionally moves stock and writes the journal entry.
Print / DownloadOn locked documents: opens the bilingual A4 print preview, or saves it as PDF. Both actions also appear as row icons in each list.
View journal entryOn posted financial documents: shows the generated Dr/Cr entry in a dialog with a balanced/unbalanced indicator.

Line grid

ColumnBehaviour
#Line number.
ItemSearchable dropdown. Choosing an item fills its base unit and its sale price (or the customer's price-list price on invoices).
UnitThe item's base unit plus its alternative units (e.g. carton = 12). Selecting a unit re-prices the line with that unit's own price; stock always moves in base units (qty × factor).
QuantityUp to 4 decimals; must be > 0 for the line to be saved.
AvailableRead-only hint: the on-hand quantity of the item in the selected warehouse (on invoices: on-hand minus quantities reserved by approved sales orders). Turns red when the entered quantity exceeds it. Shows “—” for service items.
Unit priceEditable; prefilled from the item / price list.
DiscountOne cell with a %/currency toggle button: enter a percentage or an amount — the two stay in sync, and the % stays sticky when the quantity or price changes.
VATA toggle showing the line's VAT amount and rate (default 15%). Click it to zero-rate the line (exempt); click again to restore the previous rate.
Line totalQty × price − line discount (+ VAT when prices are entered net).
Trace (invoice only)For items flagged with expiry/serials: opens the expiry & serial dialog. The tag icon is red while data is missing, green when complete.
🗑Removes the line (drafts only).
💡 Keyboard entry: press Enter to walk from cell to cell; Enter on the last cell of the last row adds a new row — you can capture a whole document without touching the mouse.

Totals strip

  • Extra discount — a header-level discount with the same %/currency toggle. It is distributed over the lines proportionally to their net values (the last line absorbs any rounding remainder), so screen totals always equal server totals.
  • Total discount — all line discounts + the extra discount.
  • Subtotal — the net taxable base after all discounts (ex-VAT).
  • VAT total and Grand total.
  • Prices include VAT — a checkbox in the header. When ticked, entered prices are treated as VAT-inclusive and the tax is extracted from them; when clear, VAT is added on top.
ℹ️ Example (VAT-inclusive): one line, 10 × 11.50 with “Prices include VAT” ticked → subtotal 100.00, VAT 15.00, total 115.00 — exactly the 115.00 you typed.

Sales quotations

Route: Sales › Sales Quotations/commercial/sales-quotations

Quotations
Quotation list

Purpose: a priced offer to the customer with an optional validity date — no effect on stock or accounts, ever. On acceptance, approve it and convert it to a sales order or directly to an invoice with one click.

Header fields

FieldNotes
DateDefaults to today.
Valid untilOptional expiry date, printed on the quotation sheet.
CustomerRequired. Picking a customer auto-fills his default salesman.
WarehouseRequired (defaults to your user default warehouse) — drives the “Available” column.
Salesman / Notes / Prices include VATAs in the shared editor.
  1. Pick the customer and (optionally) the validity date.
  2. Add items with quantities and prices — the item's sale price is suggested and editable; apply line discounts and/or an extra discount.
  3. Save keeps it a draft; Approve locks it (status becomes Approved).
  4. On the approved quotation: Print / Download the bilingual PDF, or press Convert to Sales Order / Convert to Invoice — the new document opens prefilled with the customer, warehouse and all lines.

Worked example: 2 lines — 10 × 50.00 and 4 × 75.00, 10% discount on the second line, VAT 15%, prices net: gross 500.00 + 300.00 = 800.00; discount 30.00; subtotal 770.00; VAT 115.50; total 885.50.

⚠️ Validations: customer, warehouse and at least one line (item + quantity > 0) are required. Only a draft quotation can be edited or deleted — “An approved quotation cannot be deleted.”

FAQ

  • Does a quotation reserve stock? No. The Available column is only an information hint.
  • The customer accepted by phone — must I go through an order? No; “Convert to Invoice” raises the invoice straight from the quotation.
  • Can I reuse an expired quotation? Yes — conversion is not blocked by the validity date; it is a commercial indication for the customer.

Sales orders

Route: Sales › Sales Orders/commercial/sales-orders

Sales orders
Sales order list

Purpose: lock in a confirmed customer order. Statuses are DraftApproved; approving makes the order convertible to a delivery note or an invoice, and — importantly — reserves its quantities: the invoice editor's “Available” column shows on-hand minus what approved orders have already promised to other customers.

The header and line grid are identical to the quotation (date, customer, warehouse, salesman, notes, VAT-inclusive flag; no validity date). An order raised from a quotation stores the source quotation for traceability.

Partial delivery

  1. Approve the order, then press Convert to Delivery Note — the note opens with all order lines prefilled.
  2. For a partial shipment, reduce the quantities (or delete lines) before approving the delivery note.
  3. For the next shipment, convert from the same order again and keep only the remaining quantities — each conversion prefills the full order lines, so adjust them to what actually ships.
  4. Invoice each delivery (or the whole order at once) with Convert to Invoice.

Worked example: order of 100 × 20.00 with 5% extra discount, VAT 15%: gross 2,000.00; extra discount 100.00; subtotal 1,900.00; VAT 285.00; total 2,185.00. First delivery note: 60 units; second: 40 units — each becomes its own invoice.

⚠️ Rules: only a draft order can be edited or deleted; an approved order is locked. Approval requires customer + warehouse + at least one valid line.

FAQ

  • Does an approved order move stock? No — it only reserves the quantities in the invoice availability hint. Stock physically moves when the invoice is posted.
  • Can I convert one order to several invoices? Yes — repeat “Convert to Invoice” and edit the quantities each time.
  • Where do I see that an order came from a quotation? The link is stored on the order at creation (traceability); the source appears in the document footer info.

Delivery notes

Route: Sales › Delivery Notes/commercial/delivery-notes

Delivery notes
Delivery note list

Purpose: the dispatch document that accompanies goods to the customer before invoicing — typically raised from an approved sales order (Convert to Delivery Note), or created directly. It documents what left, when, and for whom, and is the paper the driver and the customer sign.

⚠️ Accounting & stock: approving a delivery note does not move stock and does not create a journal entry. The stock issue and the revenue entry both happen when the sales invoice is posted. If you deliver daily and invoice monthly, remember the physical stock on the shelf is lower than the system's on-hand until the invoices are posted.

Editor layout, fields and grid are the same as the sales order. Statuses: Draft (editable/deletable) → Approved (locked). An approved note offers Print / Download and Convert to Invoice, which prefills the invoice with the note's customer, warehouse and lines.

  1. Raise the note from an approved order (quantities prefilled) or add lines manually.
  2. Adjust quantities to what actually ships and Approve.
  3. Print two copies — one signed copy returns with the driver.
  4. When it's time to bill, open the approved note and press Convert to Invoice.

Worked example: delivery of 60 × 20.00, VAT 15%: subtotal 1,200.00; VAT 180.00; total 1,380.00 — figures shown for reference on the note; nothing is posted until the invoice.

FAQ

  • Why didn't my stock drop after approving the note? By design — stock is issued at invoice posting, not at delivery approval.
  • Can one delivery note serve several invoices? Convert produces one invoice per run; for split billing adjust the invoice lines after conversion.
  • Can I delete an approved note? No — “An approved delivery note cannot be deleted.” Only drafts can be edited/deleted.

Sales invoices

Route: Sales › Sales Invoices/commercial/sales-invoices

Sales invoices
Invoice list with ZATCA statuses

Purpose: the module's central document — the tax invoice (standard B2B or simplified B2C) compliant with ZATCA requirements. Posting it is the moment stock leaves the warehouse and revenue is booked.

New sales invoice
New sales invoice

Header fields

FieldNotes
DateInvoice date; also determines which discount policies are in force.
BranchThe posting branch; locked automatically when your permissions scope you to a single branch.
CustomerRequired. Picking a customer copies his defaults: payment method, salesman, price-list prices and the discount policies active on the invoice date.
WarehouseRequired (defaults to your user default). Drives the “Available” column and is where the stock is issued from.
SalesmanOptional; prefilled from the customer or your user defaults.
Payment methodCash / Credit. Credit invoices are checked against the customer's credit limit at posting.
Currency & rateThe currency picker with the exchange rate — the journal entry is converted at this rate.
Notes / Prices include VATAs in the shared editor.

Creating and posting

  1. Pick the customer — or arrive prefilled from an approved quotation, order or delivery note (conversion), or from Copy of an existing invoice.
  2. Choose the warehouse and confirm the payment method.
  3. Add items. Watch the Available column (on-hand − reserved); it turns red if you sell more than is available.
  4. For items tracked by expiry/serials, open the Trace dialog on each line: pick the serial numbers from the in-stock registry (or type them — one per line; the count must equal qty × unit factor). The tag stays red until complete.
  5. Review the totals strip (line discounts, extra discount, VAT, net).
  6. Post. The system then, in order: checks the approval gate (large amounts may require a manager's approval), checks the credit limit (credit invoices), issues stock at weighted-average cost (blocked if insufficient), marks the serials Sold, writes the journal entry, and — if “Auto-send to ZATCA on posting” is enabled — signs and reports the invoice.
  7. Print the tax layout with the compliant QR code, or download as PDF.

Worked example — the full math

Invoice with 3 lines, prices net of VAT, 5% discount on line 1, extra discount 100.00, VAT 15%:

LineQty × PriceGrossLine disc.Share of extra disc.TaxableVAT 15%
Item A10 × 50.00500.005% = 25.0038.78436.2265.43
Item B3 × 200.00600.0048.98551.0282.65
Item C5 × 30.00150.0012.24137.7620.66
Totals1,250.0025.00100.001,125.00168.75

Totals strip: total discount 125.00, subtotal 1,125.00, VAT 168.75, grand total 1,293.75. The extra discount is spread over the lines in proportion to their nets; the last line absorbs the rounding remainder.

Generated journal entry (assume the goods cost 700.00 at weighted average):

AccountDebitCredit
Accounts receivable1,293.75
Sales revenue1,125.00
VAT output168.75
Cost of goods sold700.00
Inventory700.00

After posting — settlement and ZATCA

  • Paid / Remaining chips show the settlement state; the list has a Settlement column (Paid / Partial / Unpaid).
  • QuickPay (in the editor and as a list row action) collects a payment on the spot: amount (prefilled with the remainder), instrument (Cash / Bank transfer) and the cash box or bank account — it creates and posts a receipt in one step.
  • The ZATCA box shows the e-invoicing state: “Not sent” with a Sign & send to ZATCA button, or the returned status with the scannable QR once accepted.
  • View journal entry opens the generated Dr/Cr entry.

List row actions

ActionAvailable whenEffect
✏️ Edit / openAlwaysDraft opens editable; posted opens read-only.
🖨 Print / ⬇ DownloadPostedThe bilingual tax sheet with the QR.
↩ UnpostPostedReverses the journal entry and the stock movement and returns the invoice to draft — after a confirmation.
👛 QuickPayPosted & not fully paidCollect a payment against the invoice.
⧉ CopyAlwaysOpens a new draft prefilled with this invoice's header terms and lines (new number at save).
🗑 DeleteDraft onlyDeletes the draft; “A posted sales invoice cannot be deleted.”

Validation errors & common mistakes

Message / symptomCause & fix
Required-fields toast on SaveCustomer, warehouse or lines missing — a line counts only when it has an item and quantity > 0.
Posting blocked: insufficient stockYou are selling more than is on hand in that warehouse. Receive stock first, transfer it in, or reduce the quantity. Remember alternative units multiply (2 cartons × 12 = 24 base units).
“Credit limit exceeded for …: balance would reach X against a limit of Y”A credit invoice would push the running balance past the customer's limit. Collect a payment, sell cash, or raise the limit.
Serial-count error at postSerialized lines must carry exactly qty × factor serial numbers, each of them In-Stock in the invoice warehouse.
“Only a draft sales invoice can be edited.”Posted invoices are immutable — unpost first (if allowed) or correct with a credit/debit note.
Unpost refusedTwo blockers: the invoice was reported to ZATCA (immutable by law — use a credit note), or it has posted receipts (remove/unpost those first).
⚠️ Editing a posted invoice: an invoice accepted by ZATCA must never be altered — correct it with a linked return (credit note) or debit note. Unpost is only possible while the invoice is unreported and unpaid.

FAQ

  • Where does the price come from? Customer price list first, then the item's sale price; the promotion engine applies the best active discount policy (item scope beats category beats all-items) as the line discount.
  • Does a cash invoice collect the money automatically? No — “Cash” is the commercial term on the sheet. Use QuickPay right after posting to create-and-post the receipt in one click.
  • Why does Available differ from the stock screen? The invoice hint subtracts quantities reserved by approved sales orders.
  • Selling a service? Service items show “—” in Available and never move stock; only the revenue entry is posted.

Sales returns (credit note)

Route: Sales › Sales Returns/commercial/sales-returns

Sales returns
Sales return list

Purpose: full or partial return of sold goods. A return always references a posted sales invoice — it is the legal credit note (ZATCA type 381) linked to it.

Creating a return — import from the invoice

  1. Create a new return. The Original invoice box lists all posted invoices — pick one.
  2. The invoice's lines load in full and the customer, salesman and payment method are inherited.
  3. For a partial return: lower the quantities or delete the rows that are not coming back. For a full return: leave everything as loaded.
  4. Fill the Return reason (recommended — printed on the note), pick the branch and Post.
  5. On the posted note: Print / Download the credit-note sheet, view the journal entry, and Sign & send to ZATCA if auto-send is off.

Posting effect: the goods re-enter the warehouse at the item's current weighted-average cost, returned serial numbers flip back to In-Stock, and the reverse journal entry of the sale is written.

Worked example: return 2 × 200.00 from the invoice above (VAT 15%): subtotal 400.00, VAT 60.00, total 460.00; goods cost 220.00.

AccountDebitCredit
Sales revenue400.00
VAT output60.00
Accounts receivable460.00
Inventory220.00
Cost of goods sold220.00
⚠️ Rules: only a posted invoice can be returned; only a draft note can be edited or deleted; a posted note is locked and, once sent, is reported to ZATCA as a credit note referencing the original invoice.

FAQ

  • Can I return more than was invoiced? Enter only what actually comes back; the note is your legal proof against the original invoice — keep quantities within it.
  • The customer already paid — what happens to the money? The credit note reduces the receivable; settle the difference with a payment voucher or leave it as credit for the next invoice.
  • Serialized items? The returned serials are named on the line and re-enter the serial registry as In-Stock.
  • Which cost is used for the returned goods? The item's current weighted-average cost at return time, not the original invoice's cost.

Sales debit notes

Route: Sales › Sales Debit Notes/commercial/sales-debit-notes

Debit notes
Debit note list

Purpose: charge the customer more after an invoice was issued — price difference, freight, penalty… It references a posted invoice (ZATCA type 383) but, unlike a return, moves no stock.

  1. Create a new debit note and pick the original posted invoice — the customer and reference are inherited, but the line grid starts empty.
  2. Add the additional-charge lines manually (e.g. a “Freight” service item), with VAT as applicable.
  3. Fill the reason, then Post — and send to ZATCA like an invoice.

Worked example: freight charge 200.00 + VAT 15% = 230.00. Journal entry: Dr Accounts receivable 230.00 / Cr Sales revenue 200.00 / Cr VAT output 30.00 — the same direction as a sale, with no inventory lines.

⚠️ Rules: “Only a posted sales invoice can have a debit note.” Drafts are editable/deletable; a posted note is locked.

FAQ

  • Debit note or a new invoice? Use a debit note when the charge belongs to an existing invoice (price correction, freight on that shipment); use a new invoice for a new sale.
  • Why can't I add stock items that move quantity? Debit notes never move stock by design — they are a purely financial charge.
  • Does it affect the customer's balance? Yes — posted debit notes add to the running balance (and to the credit-limit calculation).

Send invoices to ZATCA

Route: Sales › Send Invoices to ZATCA/commercial/zatca-send

ZATCA send
Bulk ZATCA submission screen

Purpose: the e-invoicing control room. Filter posted invoices by send status (default: Not sent) and date range, multi-select and submit them in one batch — the batch is signed and sent sequentially so the PIH hash chain stays intact.

Screen elements

ElementBehaviour
Status filterAll / Sent / Not sent (default Not sent) + From/To date + Refresh.
Checkbox columnOnly unsent rows are selectable; the header checkbox selects all sendable rows. The toolbar shows the selected count.
Send to ZATCASigns and reports every selected invoice. Success toast when all pass; otherwise “Some invoices could not be sent (n/m)” with the first error.
Grid columnsWarehouse, invoice no. (click to open the invoice), date, customer, subtotal, VAT, total, status, sent by, sent date, response.
Status badgeGreen = accepted (shows the authority status), red/grey = not sent yet or last attempt failed.
Response buttonOpens the raw ZATCA response (JSON) — the exact validation messages from the authority.

ZATCA statuses

StatusMeaning
Not sentPosted locally, not yet reported. Send from here or from the invoice's ZATCA box.
CLEAREDStandard (B2B) invoice accepted and cleared by the authority.
REPORTEDSimplified (B2C) invoice reported successfully.
Error textThe attempt failed — the row keeps “Not sent”, the status/response holds the reason. Fix and resend.

Fixing a rejection

  1. Open the Response dialog and read the validation messages (BR-… codes name the failing rule).
  2. Typical causes: incomplete buyer national address on a B2B invoice (add city/postal code/building no. to the customer card), a malformed buyer VAT number (15 digits, starts/ends with 3), or the company not yet onboarded (“complete the e-invoicing steps”).
  3. Fix the master data — the invoice itself is regenerated from current data at send time — then select the row and press Send to ZATCA again.
  4. If the invoice's own figures are wrong, do not try to edit it: issue a credit note (and a new invoice if needed).
ℹ️ Guards: only posted documents can be sent; an already-sent document is refused (“sent to ZATCA before”); credit and debit notes are signed from their own screens with types 381/383 referencing the original invoice.
ℹ️ Onboarding: the certificates (compliance then production) are managed in the E-Invoicing screen under Administration. Enable “Auto-send to ZATCA on posting” there to skip this screen entirely for daily work — it then serves as the monitor and retry console.

FAQ

  • Why is the batch sent one by one? Each invoice's hash chains to the previous one (PIH); parallel sending would break the chain.
  • An invoice failed mid-batch — are the others lost? No; each result is individual. Fix the failed one and resend it alone.
  • Can I unsend an invoice? No. Once accepted by ZATCA it is immutable — corrections go through credit/debit notes.

Frequently asked questions

How do I create a sales invoice?

Open Sales › Sales Invoices › New, choose the customer, add item lines with quantity and price, set VAT and any discount, then Save and Post to record the revenue.

Can I edit or delete a sales invoice?

You can edit a draft invoice freely. Once posted, edits are locked; you reverse or issue a credit note instead of deleting, keeping accounting integrity.

How is VAT / ZATCA handled on invoices?

VAT is calculated per line from the item's tax rate, and posted invoices generate a ZATCA-compliant e-invoice automatically when ZATCA Phase 2 is enabled.

How do customer payments link to invoices?

Record a receipt voucher against the customer; you can allocate it to one or more open invoices to settle their outstanding balance.