Actions and results

What each Billing button and automatic behaviour does, with worked numbers and what the system refuses.

On this page (13)

Overview

ActionWhenWhat you doWhat happens
Figures match the listsSome drafts, approvals, overdue invoices, a refund requestedOpen Billing > Overview; compare each figure with the list it opensSales orders to invoice, Draft invoices, Waiting for approval, Overdue receivables, Matching exceptions, Refunds pending all equal the list counts/amounts (company currency AED)
Period selectorDocuments this month and last monthSwitch This month / Last month / This quarter / This yearThe recent-activity list follows the period; the figures stay 'as of today'
Exceptions panelA draft bill repeating a posted supplier invoice number; a draft line with no tax codeOpen the Overview'Duplicate supplier reference' and 'Missing tax treatment' rows appear with owner and count
Receivables agingPosted invoices 10, 40 and 100 days past dueRead the aging panelEach invoice sits in its days-past-due bucket; buckets add to the overdue figure

To invoice

ActionWhenWhat you doWhat happens
Backlog shows what is left to billSales order 10 units, delivered 6, invoiced 0 (basis delivered)Open To invoiceLine shows Ordered 10, Delivered 6, Invoiced 0, To bill 6, Value = 6 x price
Create one invoice from one orderConfirmed SO: 1 line 1,000.00 AED, VAT 5%Tick its line > Create invoices > SubmitOne draft invoice: net 1,000.00, VAT 50.00, total 1,050.00; due date from the customer's payment terms; order untouched (own number), invoice line linked to the order line
Group orders of one customerTwo confirmed SOs, same customer and currency; no grouping policyTick both > Create invoicesPreview: 1 invoice with both orders; Submit makes one invoice with both orders' lines
Split by currency / customerSame customer: one SO in AED, one in USD; plus an SO for another customerTick all three > Create invoicesPreview: 3 invoices; the AED/USD pair shows 'split by currency'
Grouping policy keyActive default policy with key customer_po; two SOs same customer, different Customer POTick both > Create invoices2 invoices, 'split by customer_po'
Max orders per invoicePolicy max orders 2; three SOs same customerCreate invoices2 invoices (2 + 1), split reason 'max_orders'
Skipped ordersA draft SO and a fully invoiced SO in the selection (API or two tabs)Create invoicesPreview lists them under Skipped: '<state> - nothing to bill.' / 'Fully billed.'
Create twice = oncePress Submit twice quickly (same selection)Only one set of invoices (same idempotency key); the second answer is the first
Over-billing refusedSO 10 units delivered 6 (delivered basis)Via the order's Create invoice ask for 8Refused: '<line>: only 6 can be invoiced now - 6 of 10 delivered, 0 already invoiced.'
Order invoiced on itselfAn SO that posted itself (no warehouse)Try to invoice itRefused: '<SO number> was invoiced on the order itself, so there is nothing left to bill.'
Supplier sideConfirmed PO with receiptSide = Suppliers; tick; Create invoicesA draft vendor bill (kind bill) is created from the PO
Cash rounding carriedSO with cash rounding 0.25 and total 1,050.10Invoice itInvoice gets an untaxed CASHROUND line bringing the total to 1,050.00 (step 0.25); the order is unchanged
Down payment deductedSO 10,000 + VAT with a posted 2,000 down-payment invoiceInvoice the restThe final invoice deducts the 2,000 down payment (and its VAT) once

Billing record

ActionWhenWhat you doWhat happens
Open from any listOpen an invoice from Invoices, Approvals, Register, CorrectionsThe billing record opens; Back returns to the list
Open documentSmart button Open documentOpens the invoice in Sales > Invoices (bill in Purchase > Bills) with lines and totals
Set bill-to, payer and supply dateDraft invoiceEdit; set Bill to = another customer, Payer, Date of supply = yesterday; SaveSaved; History shows 'billing.header'; revision +1
Header locked after postingPosted invoiceTry Edit / PUT the billing headerNo Edit button; API refused 'Only an unposted document is changed. A posted invoice is corrected by a credit note.'
Issue check shown before postingActive issue profile AE requiring partner.tax_id; customer without TRNOpen the draftApproval and issue card: 'Issue profile <CODE> · missing: Customer tax registration number'
Needs approval chipActive approval policy threshold 10,000; draft invoice total 10,500Open the recordChip 'Needs approval'; Send for approval offered; Post refused until approved
Below threshold - no approvalSame policy; invoice total 9,999.99 (from an order)Open; PostNo approval needed ('No policy asks for it'); posts
Threshold in company currencyPolicy 10,000 AED; invoice USD 3,000 at rate 3.6725 (= 11,017.50 AED)Open the draftNeeds approval (total x rate compared)
Manual invoice always approvedPolicy with 'Always approve invoices with no order behind them' on, threshold 1,000,000Create a 100 AED invoice directly in Sales (no order); open its billing recordNeeds approval
Send for approvalDraft needing approvalSend for approval with a noteState pending ('Waiting for approval'); appears on Billing > Approvals with Asked by = you
Send when not neededDraft below thresholdCall request-approval (API)Refused: 'No approval policy asks for this document; it can be posted.'
Approve (another person)Pending invoice, user B with billing.approveB opens it > ApproveApproved; approved_by B; event billing.approval_decided.v1; Post now allowed
Refuse with reasonPending invoiceB > Refuse with 'Price not agreed'State rejected; note kept; A can edit and send again
Edit after approval voids itApproved invoiceChange a line price on the document (Open document), then PostRecord shows '(changed since)'; Post refused: 'The document changed after it was approved. Send it for approval again.'
Approving changed contentPending invoice; A edits a line before B approvesB > ApproveRefused: 'The invoice changed after it was sent for approval. Send it again.'
Nothing waitingInvoice not pendingCall approve (API)Refused: 'Nothing is waiting for approval.'
Post an invoice - journalApproved/no-approval draft: net 1,000.00, VAT 5% 50.00PostState posted, chip Issued. Journal: Dr Trade receivable 1,050.00 / Cr Revenue 1,000.00 / Cr Output VAT 50.00; open item 1,050.00 on the customer
Legal snapshot frozenPosted invoiceOpen tab Legal snapshot; then change the customer's name, TRN and address; reprint the invoiceSnapshot shows customer, TRN, address, our TRN, supply date, totals and SHA-256; the reprint still shows the old name/TRN/address
Supply date defaulted on postDraft with no date of supply (mode Optional)PostSnapshot and record show date of supply = invoice date
Issue profile blocks postingProfile requiring company.tax_registration; company TRN emptyPostRefused: 'The issue profile <CODE> needs: Our tax registration number.' - nothing posted
B2B-only profileProfile with 'Only for customers with a tax number'; customer without TRNPostProfile does not apply; invoice posts
Every line needs a tax codeProfile requiring document.lines_tax_code; one line without a tax codePostRefused naming 'A tax code on every line'
Post twice = oncePost with the same idempotency key twice (double click)One journal; second answer 'replayed'
Print shows a tax invoiceVAT-registered company, posted invoice, layout Arabic/bilingualPrintTitle 'Tax invoice / فاتورة ضريبية', seller TRN, buyer and item Arabic names, VAT by rate
Tax-inclusive price helperPOST price-from-gross {gross:105, rate:5}; then {gross:10, rate:5, quantity:3}First: price 100.00, net 100.00, tax 5.00, total 105.00, exact true. Second: reports exact true/false and the difference in fils
Header charge lineInvoice saved with a charge {label 'Freight', amount 50, tax_rate 5}Open the documentA CHARGE line 'Freight' 50.00 + VAT 2.50; totals include it
Instalments written on postingCustomer payment terms 50% now / 50% in 30 days; invoice total 1,050.00Post; open tab Instalments2 instalments: 525.00 due invoice date, 525.00 due +30 days; they add to 1,050.00
Last instalment takes the remainderTerms 3 equal parts; invoice total 1,000.00Post333.33, 333.33, 333.34 (sum exactly 1,000.00)
No terms = one instalmentCustomer with no payment termsPostOne instalment for the total on the due date
Paid fills in date orderInvoice with 2 x 525.00; record a 600.00 payment in AccountingOpen Instalments#1 paid 525 (Paid); #2 paid 75, open 450 (Part paid or Overdue if past due)
Credit note keeps the original ratePosted invoice 1,000 + 5% VAT dated last month; rate later changedCredit note (whole) > PostDraft credit note 1,000.00 + 50.00 = 1,050.00 at the ORIGINAL rate/code; posted: Dr Revenue 1,000 / Dr Output VAT 50 / Cr Receivable 1,050
Partial creditPosted invoice 10 units x 100 + VATAPI credit with lines [{line, quantity 2}]Credit note 200.00 + 10.00 VAT = 210.00
Credit more than invoicedEarlier credit of 8 of 10 unitsCredit 3 more unitsRefused: only 2 left to credit
Note against a draft invoiceDraft invoiceTry Credit note (API)Refused: 'A note is raised against a posted invoice or bill.'
Reason required once reasons existOne active correction reason; a credit note without a reasonPost the noteRefused: 'Choose the correction reason for this note.'
Reason needs the originalReason with 'Must name the original'; a standalone credit note (no original) with itPostRefused: 'The reason <CODE> needs the original invoice on the note.'
Reason cap %Reason max 20%; invoice 1,050.00; posted note 105.00 with itRaise and post a second note 126.00Refused: 'The reason <CODE> allows notes up to 20% of INV/...; this note would exceed it.' (cap 210.00, 105 + 126 = 231)
Reason needing approvalReason 'Needs approval'; default approval policy activeCredit note with that reason > PostRefused until sent for approval and approved by another person
Debit note from a billPosted vendor billCredit note action on the billCreates a debit note (kind debit_note) against the bill
Credit and rebillPosted invoice INV-ACredit and rebill with a reasonTwo drafts: a full credit note against INV-A and a new invoice dated today 'Replaces INV-A' with the same lines, parties and header; Rebill of = INV-A; nothing posts until a person posts both
Correction chainINV-A, its credit, rebill INV-B and a refundOpen tab Corrections on any of themSame chain: INV-A > credit note > refund; INV-B at the same level; counts on the smart button
Request a refundPosted credit note 1,050.00 not applied to any invoiceRefund 500.00 by bank with a reasonRefund RF-00001 Requested; 'Left to refund' 550.00
Refund more than leftCredit note 1,050.00 with 400.00 applied to an invoiceRefund 700.00Refused: 'Only 650.00 of CN/... is left to refund.'
Defer revenueActive recognition policy: product SUPPORT-12M, 12 months, from invoice date, deferred 2400, revenue 4000; posted invoice with 12,000 of itDefer revenueJournal: Dr Revenue 4000 12,000 / Cr Deferred revenue 2400 12,000; an Accounting deferral 12,000 over 12 months (releases 1,000/month once approved); record lists it
Defer twice = onceSame invoiceDefer revenue againNo second journal
Defer in foreign currencyPosted USD invoice 1,000 at 3.6725Defer revenueAmount deferred in AED: 3,672.50
Reversal recordedPosted invoiceReverse it in Finance/SalesBilling record chip 'Reversed'; event billing.invoice_reversed.v1

Instalments due

ActionWhenWhat you doWhat happens
Hand overdue to collectionsOne instalment past due, unpaidInstalments due > Hand overdue to collections; press againFirst time: 'To collections' date set, event billing.collections_handoff.v1; second press hands nothing again
Feature offApplications > Billing > Features: Instalment schedules Off (approved)Post a new invoiceNo instalments written; menu Instalments due hidden; existing schedules still shown
Report reconcilesPosted invoices with instalmentsOpen Instalments due'Each invoice's instalments add to its total' - Reconciles

Refunds

ActionWhenWhat you doWhat happens
Approve a refund (another person)Requested refund by AB (holds billing.refund.approve) > ApproveApproved; Decided by B; event billing.refund_approved.v1
Refuse a refundRequested refundB > Refuse with a reasonRejected; reason ends with ' | Refused: <why>'; amount is refundable again
Mark paidApproved refund; payment made in AccountingMark paid with reference BANK-TRF-0001Paid; Payment column shows the reference; paid_by recorded. NOTE: no journal is posted by Billing - the payment itself is recorded in Accounting
Wrong-state actionsApprove a paid refund; mark paid a requested one; cancel a paid one (API)'Only a requested refund is decided.' / 'Only an approved refund is paid.' / 'This refund has been decided or paid.'
Cancel a refundRequested refundPOST refunds/<id>/cancel (API - no button on the screen)Cancelled; amount refundable again

Recurring invoices

ActionWhenWhat you doWhat happens
Create and start a contractActive customer; product SUPPORT 1,000New; code, name, customer, Monthly, First period = 1st of this month, lines JSON; Save; StartRunning; Next invoice = first period
Run raises one invoice per periodRunning contract, first period two months agoRun (POST recurring/run or wait for the 05:00 Dubai job)One draft invoice per past period (3: two months ago, last month, this month), each with supply date = period and notes '<name> - <date>'; tab Invoices raised lists them; Next invoice moves on
Run again raises nothingSame contractRun againNo new invoice (one per contract per period)
Auto-postContract with Post each invoice straight away; no approval neededRunInvoices are posted (journal, instalments, snapshot)
Month-end startFirst period 31 Jan, monthlyRun through AprilPeriods 31 Jan, 28/29 Feb, 28/29 Mar... (day kept within each month)
End date ends the contractLast period = next monthRun after itContract Ended after the last period; no further invoices
Edit only when pausedRunning contractEditRefused: 'Pause the contract before changing it.'; Pause > Edit > Start works
Start without linesDraft with lines []StartRefused: 'Add the lines the contract invoices.'

Any billing master

ActionWhenWhat you doWhat happens
Create, then activate by another personUsers A and B with billing.configureA creates an approval policy (draft); A presses Activate; B presses ActivateA refused: 'Somebody other than the person who prepared this approval policy must decide it.'; B: Active, Activated by B
Active master is not editedActive grouping policyEdit (API PUT)Refused: 'An active grouping policy is not edited. Archive it and create a new one.'
Archive and back to draftActive policyArchive; then Back to draftArchived (no longer applies); Back to draft makes it editable again
Default switchActive default policy P1; draft P2 with Company default onActivate P2 (another person)P2 default; P1 no longer default
Valid datesApproval policy valid from next monthPost a 50,000 invoice dated todayPolicy does not apply yet: no approval needed

Invoice register

ActionWhenWhat you doWhat happens
Register totalsPeriod with invoice 1,050.00 and its credit note 210.00Open the register for the periodRows net + tax = total; Signed of the note is negative; totals 'documents less notes' net 800.00, tax 40.00, total 840.00; 'Reconciles'
Purchases sidePosted billsSide = PurchasesBills and debit notes only

Tax bridge

ActionWhenWhat you doWhat happens
Register vs ledgerPosted invoices only in the periodOpen Tax bridgeOutput side: register tax = movement of the output VAT account; difference 0.00; 'Reconciles'
Manual tax journal shows a differencePost a manual journal 100.00 to the output VAT accountReopenDifference 100.00; 'Does not reconcile'

Correction chain

ActionWhenWhat you doWhat happens
Over-credit flaggedNotes against an originalOpen the reportOriginal total, Credited so far, This note, Refunded correct; notes never exceed the original

Applications > Billing > Features

ActionWhenWhat you doWhat happens
Turn Approval policies off (two people)A pending invoice; admins A and BA: Approval policies Off > Preview (note '1 document(s) waiting for approval will no longer need it.') > Propose; B approvesApprovals and Approval policies menus disappear; the pending invoice posts without approval; approve/request routes refused as turned off
Refunds Off blockedA requested refundPropose Refunds OffBlocked: '1 refund(s) are requested or approved and not paid. Decide or pay them first.'
Recurring Off blocked, then allowedA running contractPropose Recurring Off; then pause the contract and propose againFirst blocked ('... recurring contract(s) are running ...'); second accepted; menu hidden; the daily run skips 'Recurring invoices are turned off for this company.'
Revenue recognition OffTurn Off (approved); press Defer revenue (API)Refused as turned off; menu Revenue recognition hidden; existing deferrals keep releasing

Applications > Billing > Fields

ActionWhenWhat you doWhat happens
Date of supply RequiredSet Required (approved); post a draft invoice with no supply dateRefused: 'Enter the date of supply: this company requires one on every invoice.'; the field shows *
Date of supply HiddenSet Hidden; open a draft; send supply_date (API)Box gone; API refused 'Date of supply is turned off for this company.'; posting uses the invoice date
Parties HiddenSet Sold-to, bill-to and payer Hidden; send bill_to (API)Pickers gone (existing values still shown); API refused 'Sold-to, bill-to and payer is turned off for this company.'

Event log (API)

ActionWhenWhat you doWhat happens
Outbox eventsAfter posting, approving, refundingGET billing/eventsEvents billing.invoice_issued.v1, approval_decided.v1, refund_approved.v1, collections_handoff.v1 with sequence numbers