Actions and results

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

On this page (78)
Accounting dashboardJournal entry pageJournal itemsChart of accountsPosting accountsJournalsAccounting periodsPeriod lock dateOpening balancesTrial balance (classic)Exchange ratesExchange revaluationCurrency translationRecurring entriesAccrualsDeferralsYear-end closePosting profilesRegister payment dialogPayments and receiptsOpen itemsCustomer statementsSupplier statementsReceivables agingPayables agingPayment dueGoods received not invoiced (GRNI)Bank reconciliation (statements)Bank reconciliation workspaceReconciliation rules and import profilesWrite-offs (customer and supplier)DisputesCollections worklistPromises to payDunning runsCollection policy and dunning levelsPayment proposal recordPayment holdsCredit positionCredit overridesCredit reservationsCredit groupsProvision matricesExpected credit loss runsBudgets (list)Budget pageBudget against actualBudget control policiesBudget commitmentsBudget overridesTreasury registerInstrument pageTreasury maturitiesTreasury instrument typesBank accountsImport statementBank statementsBank exceptionsReconciliation rulesBank import profilesCash positionCash forecastTrial balance (report)Financial statementsReport runnerTax reportsManagement P&L by dimensionLedgers and booksAccounting settingsTaxesTax code recordFiscal positionsDimension valuesAccount structure rulesValid combinationsDistribution modelsFinance FeaturesFinance Fields

Accounting dashboard

ActionWhenWhat you doWhat happens
Figures tie to the booksPosted test invoices, bills and payments this monthOpen the dashboard on Month to date; compare Revenue, Expenses, Net profit with the Profit and loss report, Receivables/Payables with the aging reports, Cash & bank with the trial balanceEvery tile equals its report; year-end closing journals are left out of P&L; foreign invoices at their frozen rate
Blocks follow your rightsA user with dashboard.accounting but without collections.view / treasury.view / report.viewOpen the dashboardCollections, treasury and budget blocks are not shown; nothing the reader could not open

Journal entry page

ActionWhenWhat you doWhat happens
Save a balanced manual entry as draftGJ with Needs approval = No; user with journal.postNew; Journal General Journal; Posting date today; Memo; line 1 Dr Office Supplies 1,050; line 2 Cr Cash and bank 1,050; SaveSaved as Draft with a GJ number; Balanced badge; nothing in Journal items with State Posted yet; trial balance unchanged
Post the draftThe draft aboveOpen it; Post EntryState Posted; posted by/at recorded; Journal items show Dr Office Supplies 1,050 / Cr Cash and bank 1,050; trial balance moves by 1,050; History shows journal.post
Preview writes nothingA draft entry with one problem (e.g. a blocked account)Press PreviewDialog 'Preview journal entry' lists 'What stops it' and 'Effect on the ledger' (Account, Debit, Credit, Net); nothing posted; after fixing: 'Ready to post. Nothing below stops it.'
Unbalanced entry refusedDr 1,050 / Cr 1,000; PostBadge 'Not balanced' with the Difference 50; posting refused 'Debits and credits must balance exactly.'
Control account protectedGJ (Allow control accounts = Refuse)Line to the customer control account (Trade receivables); SaveRefused: '<code> <name> is maintained by the customer records. Use the operational document rather than a manual journal...'
Control account allowed on ARJAR Adjustment Journal (Allow control accounts = Allow)Journal type ARJ; Dr Trade receivables 100 with partner Test Customer / Cr Other Operating Expense 100; PostPosted; the customer's statement and aging include the 100
Foreign-currency entry converted by the serverApproved USD spot rate 3.6725 for todayCurrency USD; Dr Foreign Currency Bank 1,000 / Cr Other income 1,000; Preview; PostLines carry USD 1,000 and AED 3,672.50 each; rate shown is the server's; a rounding fils (if any) on the largest line of the short side with a note
Auto-reverse accrualNext month openEntry type Accrual; Dr Electricity Expense 2,000 / Cr Expense Accruals 2,000; Auto-reverse on = 1st of next month; PostTwo entries: the accrual, and a reversal dated the 1st (Dr Expense Accruals 2,000 / Cr Electricity Expense 2,000) linked by Reversal / Reverses smart buttons
Reverse a posted entryA posted manual entry; user with journal.reverseReverse; Reversal date today; Reason; Post the reversalNew entry 'Reversal of <number>: <reason>' with opposite lines and the same dimensions; original shows Reversed; second reverse returns the same reversal
Reset a posted entry to draftA posted manual entryReset to draft; Reason; Reverse and open a draftOriginal reversed; a new Draft copy opens with the same lines (split lines stay split); note 'Reset from <number>; reversed by <reversal>'
Reset refused on a document's journalThe journal of a posted sales invoiceOpen it; try Reset to draft / ReverseNot offered; via API 'This entry was raised by a document. Correct the document; its journal follows.' / 'Reverse this entry through its source document.'
Edit a draftA draft entryEdit; change an amount on both sides; SaveSaved; revision increases; edit in a second tab after that is refused 'Send the revision of the entry you opened, so an edit that was overtaken is refused.'
Edit a posted entry refusedA posted manual entryTry Edit (API PATCH)Refused: 'A posted entry is corrected by reversing it, not by editing it.'
Duplicate and Duplicate without amountsA posted entryMore > Duplicate; then Duplicate without amountsA new unsaved copy ('A copy, not yet saved.') with the same accounts; the second has empty amounts
Templates: save and useLines > Save lines as a template 'Monthly rent'; New entry; Templates > UseTemplate saved (1-200 lines); using it fills the lines; Archive hides it
Import lines from CSVA CSV with 4 valid rows and 1 unknown accountImport; choose the fileSummary Rows valid 4, Rows with errors 1, Unknown accounts 1; import blocked 'Fix the rows with errors first'; after fixing, lines fill the grid
Split a line by percentageDepartments Admin and Sales existOn a line choose Split by %: Admin 60, Sales 40; PostPosted as two ledger lines 60/40 that read back as one line with shares; reports by department show 60/40
Keyboard on the lines gridUse Alt+Del on a line; Add a line; Remove empty linesLine removed; new line added; empty lines removed
AttachmentsA draftDrag a PDF onto Attachments; Save; Remove itFile attached and listed; Remove asks 'Remove this file?' then removes it
Idempotent retryPost an entry; resend the same request with the same key (API)The same entry is returned, not a second one; same key with different details -> 409 'This request key was already used for different details.'
Approval workflow when the type needs approvalJournals: GJ Needs approval = YesPreparer: create entry and Submit for approval; Approver (different user): Approve; Poster: PostStates Draft -> Submitted -> Approved -> Posted; nothing in the ledger until Posted; History lists submit, approve, post with users
Reject, revise, cancelA submitted entryApprover: Reject with a note; Preparer: revise (back to Draft) or Cancel entryRejected -> Draft (revise) or Cancelled; cancelled entry can be reset to Draft; none of these touch the ledger
Posting into a soft-closed periodSeptember Soft closed; user A without period.adjust, user B with itA posts a September entry; B posts oneA refused: '<Period> is soft closed for the general ledger. An adjusting entry needs the right to post into a soft-closed period.'; B posted
A draft is re-checked at postingA draft using an account that is then BlockedBlock the account; Post the draftRefused with the blocked-account message; a draft cannot post anything a new entry could not

Journal items

ActionWhenWhat you doWhat happens
Filter and totalSeveral posted entriesFilter From/To this month, Account = Local Bank, State PostedOnly matching lines; Balance runs; 'Total of these lines' equals the sum shown; click a line opens its entry
PivotSwitch View to Pivot; rows by account, columns by monthPivot totals equal the list totals and the trial balance for the same dates

Chart of accounts

ActionWhenWhat you doWhat happens
Create an accountCompany adminNew account 610400 Cleaning Expense, class expense, posting, Under 600000; SaveSaved; appears under its parent; available on manual journals
Used account is frozenAn account with posted linesChange its class from expense to asset; SaveRefused: '<code> already has N posted line(s), so its class cannot change. Open a new account and move the balance with a journal instead.'
Block and deprecateAn unused test accountSet Status blocked; try to post; set active againPosting refused while blocked; works again when active
Install the GCC reference chartA test company on the 4-digit starter chart with no custom accountsUse the GCC reference chart; Renumber and installAccounts renumbered to the 6-digit chart (e.g. Local Bank 112100, Customer Control 120100); balances and history kept; second run refused

Posting accounts

ActionWhenWhat you doWhat happens
Map a role and see it usedRole 'Bank charges' emptyPost a bank charge from reconciliation -> refused; map Bank charges to Bank Charges account; repeatFirst refused 'No account is set for ... Set it under Finance, Configuration, Posting accounts before posting this.'; then posts to the mapped account

Journals

ActionWhenWhat you doWhat happens
Turn on Needs approvalOpen GJ; Needs approval before posting = Yes; Save; create a GJ entryThe entry is saved as Draft and offers Submit for approval instead of Post Entry
Archive a journal typeSet ADJ Archived; try a new ADJ entryRefused: 'The Adjustment Journal is inactive.'

Accounting periods

ActionWhenWhat you doWhat happens
Generate twelve monthsNo periods for 2027Fiscal year 2027; Generate twelve monthsTwelve monthly periods Open; existing ones skipped; a company with no periods is governed by the lock date alone
Soft close, close, lockAll September close steps signed off; books agreeSet September Soft closed; then Closed; then LockedEach move audited (period.soft_closed / closed / locked); Closed takes a close snapshot; Locked cannot change again
Hard close blocked by differencesAR subledger differs from the control accountTry to set ClosedRefused: '<Period> cannot be hard closed while these do not agree - ...'; with a full-sentence reason by a period.reopen holder it closes and the reason is stored
Close checklist sign-off (two people)Template: Bank reconciled required with evidence; owner AA adds evidence and Mark ready; A tries Sign off; B (period.lock) Signs offA refused: 'Somebody other than the owner, and the person who marked it ready, signs it off.'; B signs off; step shows ready by / signed by
Figures move after readyA step marked ready with difference 0Post an entry that changes that figure; try Sign offRefused: 'The figures moved after this step was marked ready ... Send it back and mark it ready again.'
Narrow one moduleSeptember OpenNarrow Sales ledger = Closed; post a sales invoice and a manual GJ in SeptemberInvoice refused for the sales ledger; GJ posts
Reopen request with approvalPolicy 'Reopening a closed period needs an approved reopen request' ON; August ClosedUser A (period.adjust): Request a reopen, scope Purchase ledger, window 25-31 Aug, reason and evidence; A tries Approve; B (period.reopen) Approves; post a bill dated 28 AugA refused 'Somebody other than the person who asked has to approve a reopen.'; after B approves the bill posts; a bill dated 10 Aug still refused; period shows it must be closed again

Period lock date

ActionWhenWhat you doWhat happens
Move the lock dateCompany adminClose period; Lock through 31/08/2026; post an entry dated 31/08Heading 'Locked through 2026-08-31'; posting refused 'This accounting period is locked.'; trying 31/07 later -> 'A lock date cannot be moved backwards through this action.'

Opening balances

ActionWhenWhat you doWhat happens
Load, dry run, approve, postFresh test company; cut-over 31/12/2025New batch; Load the template; adjust rows to balance; Run dry run; second user Approves; Post to ledgerDry run clean, Difference 0; one OB journal carrying every row; ar rows become posted invoices with their own numbers and dates, negative rows on-account receipts; Reconciliation 'All agree'
Unbalanced batch cannot be approvedUpload rows with debits 50,000 and credits 49,000; Run dry run; ApproveProblem 'Debits and credits differ by 1000. Nothing balances a batch for you: find the missing or wrong row.'; Approve refused 'Only a batch whose last dry run was clean can be approved.'
Roll backA posted batch with no allocationsRoll back with a reasonJournal reversed, invoices/bills/receipts removed from open items; state Rolled back. With an allocation made -> 'N allocation(s) have been made against these opening items, so the batch cannot be rolled back. Undo them first...'

Trial balance (classic)

ActionWhenWhat you doWhat happens
Trial balance balancesPosted entries this yearOpen Reporting > Trial balance (classic) for this yearPeriod debit = Period credit; Balance difference 0.00; Net result equals P&L net profit

Exchange rates

ActionWhenWhat you doWhat happens
Enter and approve a rateUser A fx.manage, user B fx.approveA: New rate USD -> AED closing 3.6725 on 30/09/2026; B: ApproveRow shows Awaiting approval, then Approved; postings on/after that date can use it
Unapproved rate is not usedA USD rate entered but not approvedPost a USD invoice dated that dayRefused: 'No approved spot rate for USD to AED on or before <date>...'
Approved rate is frozenAn approved rateEnter the same pair/type/date again with a different rateRefused: 'This rate is approved. Record a correction on a new date instead.'

Exchange revaluation

ActionWhenWhat you doWhat happens
Preview a receivables revaluationOpen USD invoice 1,000 booked at 3.6000 (AED 3,600); approved closing rate 3.6500As at 30/09; Side Customers; Show what it would doRow: Foreign balance 1,000, Booked at 3.6000, Closing rate 3.6500, Adjustment +50.00; Total adjustment 50.00; nothing posted
Post the revaluation (gain)The preview abovePost the revaluationFXJ entry: Dr Trade receivables 50 (with the customer) / Cr Unrealized exchange difference 50; listed under Revaluations made 'Standing', Reverses on 01/10
Automatic reversal the day afterPolicy reversal = The day afterWait for the scheduler or press Reverse them now on/after 01/10Reversal dated 01/10: Dr Unrealized exchange difference 50 / Cr Trade receivables 50; status Reversed; the invoice's foreign amount never changes
Loss on payablesOpen USD bill 2,000 booked at 3.6000; closing 3.6500Side Suppliers; postDr Unrealized exchange difference 100 (or Loss account) / Cr Trade payables 100
Cash and bank balancePolicy: Cash and bank on, balance account Foreign Currency Bank; USD 1,000 carried at 3,600; closing 3.65Side Cash and bank; postDr Foreign Currency Bank 50 / Cr gain 50; earlier revaluation lines are not counted in what the account carries
No second answer while one standsPolicy reversal = When the next revaluation runs; a standing September runRun OctoberSeptember run reversed first, then October computed; the ledger never holds two standing revaluations of one kind
Separate gain and loss accountsPolicy gain account 710xxx, loss account 730xxxRevalue a set with both gains and lossesGains totalled to the gain account, losses to the loss account, each on its own line

Currency translation

ActionWhenWhat you doWhat happens
Translate to USDApproved AED->USD closing and average ratesFrom 01/01 To 30/09; Reporting currency USD; TranslateBalance sheet accounts at closing, P&L at average, equity at historical; Translation adjustment shown; nothing posted

Recurring entries

ActionWhenWhat you doWhat happens
Create, approve and run a monthly rent journalUser A journal.prepare, user B journal.approveA: New instruction 'Office rent', Monthly, last day, Dr Rent Expense 10,000 / Cr Expense Accruals 10,000; Save draft; B: Approve; Run what is dueDraft -> Approved; on the due date one RCJ journal per occurrence (Dr Rent Expense 10,000 / Cr Expense Accruals 10,000), posted in the drafter's name; Runs lists it; Next date moves a month
Author cannot approveTemplate drafted by AA presses ApproveRefused: 'Somebody other than the person who wrote this instruction has to approve it.'
Edit sends it back to draftAn approved templateEdit the amount; SaveState back to Draft; nothing runs until approved again
Never twiceAn approved template due todayPress Run what is due twice (or two browsers at once)Exactly one journal for that date (keyed by template + date)
Failure is recorded, not skippedTemplate due in a closed periodRun what is dueRun recorded with the period error as Result; template waits on that date; nothing skipped silently
Allocation by fixed percentagesRent 12,000 on Rent Expense; departments ADM, SALAllocation: source Rent Expense, fixed 12,000, Fixed percentages ADM 60 / SAL 40; approve; runDr Rent Expense (ADM) 7,200 / Dr Rent Expense (SAL) 4,800 / Cr Rent Expense (source) 12,000; shares add back exactly (largest takes rounding)
Allocation by revenue driverRevenue booked to departments this monthDriver Revenue; runCost shared in proportion to each department's revenue; no revenue -> refused with 'no driver' message
Pause, resume, end, discardPause an approved template; Run what is due; Resume; End with a reason; Discard a never-run draftPaused does not run; End stops it for good; an ended template is not edited ('An ended template is not edited.'); only a never-run draft is discarded
Review modeTemplate with review onRunEach occurrence is written as a draft journal for somebody to post

Accruals

ActionWhenWhat you doWhat happens
Post an accrual with next-day reversalOpen periodNew accrual: Electricity Expense / Expense Accruals 2,000 dated 30/09, department ADM; Post the accrualACR-00001; journal Dr Electricity Expense 2,000 (ADM) / Cr Expense Accruals 2,000; reversal dated 01/10 Dr Expense Accruals / Cr Electricity Expense

Deferrals

ActionWhenWhat you doWhat happens
Prepaid insurance released monthlyUser A journal.prepare, B journal.approveA: New deferral Prepaid expense 12,000, 01/10/2026 - 30/09/2027, Prepaid Expenses / Insurance expense; Set up the schedule; B: Approve; Release what is due at 31/1012 monthly lines of 1,000; release posts Dr Insurance expense 1,000 / Cr Prepaid Expenses 1,000; Released 1,000, Still to release 11,000
Deferred revenueDeferred revenue 6,000 over 6 months, Deferred revenue (liability) / Service Revenue; approve; release month 1Dr Deferred revenue 1,000 / Cr Service Revenue 1,000
Set-up person cannot approve; cancel the restA approves own deferral; then B cancels the rest with a reasonA refused 'Somebody other than the person who set this schedule up has to approve it.'; cancel stops future releases, posted ones stay

Year-end close

ActionWhenWhat you doWhat happens
Prepare and execute by two peopleFY 2025 with income and expense; last period soft closed; no draft journals; users A and B with period.lockA: Prepare a close, 31/12/2025, Retained Earnings; B: Close the yearCLJ journal dated 31/12/2025 that zeroes every income and expense account per dimension combination; difference to Retained Earnings (profit 150,000: Dr income accounts / Cr expense accounts / Cr Retained Earnings 150,000); P&L report for 2025 still shows the year
Preparer cannot executeA prepared closeA presses Close the yearRefused: 'Somebody other than the person who prepared the year-end close has to execute it.'
Books changed after prepareA prepared closePost an adjusting entry in 2025 (period.adjust); B executesRefused: 'The books changed after this close was prepared (profit X then, Y now). Cancel it and prepare it again.'
Checks stop the closeA draft journal dated in 2025, or the last period still OpenExecuteRefused: 'The year cannot be closed yet: ...' naming the failed check
Reverse a closeExecuted 2025 close; 2026 not closed; user with period.reopenReverse with a reasonCLJ reversed; year free to close again; with 2026 closed -> 'The year ending 2026-12-31 is closed. Reverse that one first.'

Posting profiles

ActionWhenWhat you doWhat happens
Profile remaps revenue from a dateUsers A (account.manage) and B (journal.approve)A: New profile Customer invoice, from 01/10/2026, revenue -> Service Revenue; Save draft; B: Approve; post a customer invoice dated 02/10Invoice revenue line posts to Service Revenue; the journal records the profile and version; an invoice dated 30/09 still uses the role account
Versions do not overlapApproved v1 from 01/10New version v2 from 01/01/2027; approvev1 ends 31/12/2026 automatically; one approved version per date
Author cannot approve; empty profile refusedA approves own draft; approve a profile with no mapping and no rule'Somebody other than the person who drafted this profile has to approve it.' / 'A profile that maps nothing and sets no dimension rule changes nothing. Add something or discard it.'

Register payment dialog

ActionWhenWhat you doWhat happens
Full receipt against one invoicePosted customer invoice INV-A of AED 5,000.00, nothing paid; bank account 112100 existsOpen the invoice, Register receipt, leave Amount 5,000.00, method Bank, Deposit to 112100, RegisterReceipt posts: Dr 112100 Bank 5,000.00 / Cr Receivable 1210 5,000.00 (partner on the receivable line). An allocation of 5,000.00 settles the invoice; it shows Paid and outstanding 0.00; the payment appears under Payments and receipts as a Receipt.
Partial receiptInvoice of AED 5,000.00 openRegister receipt of 2,000.00 (or choose Per cent of balance 40)Dr Bank 2,000.00 / Cr Receivable 2,000.00. Invoice shows Partially paid, outstanding 3,000.00. 'Balance after this' in the dialog read 3,000.00 before saving.
Over-payment refusedInvoice outstanding 3,000.00Enter 3,500.00 and RegisterRefused: '3500.00 exceeds the 3000.00 outstanding.' Nothing is posted. (An advance is booked from Payments and receipts without a document.)
Clear the balance as a write-offInvoice of AED 1,000.00 openRegister receipt 999.50, tick Clear the balance, Write off to the rounding account, RegisterJournal 1: Dr Bank 999.50 / Cr Receivable 999.50. Journal 2: Dr Write-off (rounding) account 0.50 / Cr Receivable 0.50. One allocation carries 999.50 money + 0.50 write-off; invoice is Paid. The bank reconciliation sees only 999.50.
Cheque needs a referenceInvoice openMethod Cheque, leave Cheque number empty, Register; then enter CHQ-004512 and registerFirst attempt: 'Enter the cheque or transaction reference.' Second posts with the reference on the payment.
Double click does not book twiceDialog open on a 1,000.00 invoiceClick Register twice quicklyOne payment of 1,000.00 exists (same key is idempotent); invoice outstanding 0.00, not -1,000.00.
Foreign currency receipt and exchange differenceUSD invoice of USD 1,000.00 booked at 3.6700 (AED 3,670.00); approved USD/AED rate on payment date 3.6725Register receipt USD 1,000.00 on that dateDr Bank 3,672.50 / Cr Receivable 3,672.50 (payment valued at the payment date rate); the invoice carried 3,670.00 so an exchange gain of AED 2.50 is posted on settlement (Dr Receivable 2.50 / Cr Realised exchange gain 2.50); invoice Paid in USD.
Receipt cannot predate the invoiceInvoice dated 15/09/2026Set payment date 10/09/2026Refused: 'Payment date cannot precede invoice date.'

Payments and receipts

ActionWhenWhat you doWhat happens
Record an advance (no document)Customer existsRecord payment: Type Receipt, Partner Al Noor Trading, Amount 3,000.00, no documentDr Bank 3,000.00 / Cr Receivable 3,000.00 (partner). Shows Unapplied 3,000.00 and appears on the customer's open items as money on account.
Allocate an advance to invoicesUnapplied receipt of 3,000.00; invoices INV-1 1,200.00 and INV-2 2,500.00 for the same customerAllocate: payment, INV-1 1,200.00, INV-2 1,800.00Both lines allocate (no new journal; the ledger already holds the receipt). INV-1 Paid; INV-2 outstanding 700.00; receipt Unapplied 0.00. Trying 2,000 on INV-1 is refused: 'INV-1 has only 1200.00 outstanding.'
One payment settles many invoices (settle)Customer with INV-1 1,000.00 and INV-2 500.00 openRecord payment, select both invoices with 1,000.00 and 500.00One receipt of 1,500.00 posts: Dr Bank 1,500.00 / Cr Receivable 1,500.00; two allocation lines; both invoices Paid. Selecting invoices of two customers is refused.
Early-payment discountInvoice AED 10,000.00 with terms 2/10 net 30, paid on day 8Allocate the receipt of 9,800.00 and press Take on the invoiceDiscount of 200.00 is booked as the write-off on the allocation (Dr Discount allowed 200.00 / Cr Receivable 200.00) and the invoice closes. On day 15 the Take action refuses: 'No early-settlement discount is open on <date> for <number>.'
Reverse a paymentPosted receipt of 1,000.00 that settled INV-1; you hold payment.reverseOpen the payment, Reverse payment, date todayReversal journal: Dr Receivable 1,000.00 / Cr Bank 1,000.00. The allocation is undone so INV-1 is open again for 1,000.00 and the original payment shows Reversed Yes.
Reverse needs its own permissionUser with payment.record but not payment.reverseOpen a payment and press Reverse payment (or call the endpoint)Refused with a permission error; the payment is untouched.
Pay a supplier billPosted supplier bill BILL-1 AED 10,000.00Open bill, Register payment 10,000.00 from the bank accountDr Payable 2100 10,000.00 (supplier) / Cr Bank 10,000.00. Bill shows Paid. A receipt is not accepted on a supplier document (direction must match the document side).
Supplier payment blocked by a holdBILL-1 has an active payment holdRegister payment against BILL-1Refused with 'BILL-1 is on payment hold: <reason>.' Same for a payment through Record payment (settle) and for a whole-supplier hold.
Retention cannot be paid earlySupplier bill AED 10,000.00 with AED 1,000.00 retention heldPay 9,500.00Refused: 'BILL-1: 1000.00 of it is retention held until released; at most 9000.00 can be paid now.'

Open items

ActionWhenWhat you doWhat happens
Outstanding is computed liveInvoice 5,000.00 with receipts of 2,000.00 and 1,000.00 allocatedOpen Customer open itemsOriginal 5,000.00, Allocated 3,000.00, Outstanding 2,000.00, status Partially paid. Original never changes. Undoing one allocation moves Allocated and Outstanding accordingly.
As-at date viewReceipt allocated on 05/10/2026 to a September invoiceSet As at 30/09/2026The invoice is still shown outstanding in full as at 30/09/2026; with As at today it is settled.
Undo an allocationAllocation of 700.00 of a receipt to INV-2Undo allocation with today's dateAllocation is marked reversed on that date; INV-2 outstanding rises 700.00; receipt unapplied rises 700.00; no cash entry is reversed.
Credit note set against an invoicePosted credit note 400.00 and invoice 1,000.00Allocate the credit note to the invoice for 400.00Invoice outstanding 600.00. A draft note is refused: 'Post the note before setting it against anything.'

Customer statements

ActionWhenWhat you doWhat happens
Statement arithmeticCustomer opening balance 2,000.00; in September invoices 6,000.00, credit note 500.00, receipts 4,000.00Run Customer statement 01/09 to 30/09Opening 2,000.00 + debits 6,000.00 - credits 4,500.00 = closing 3,500.00; 'reconciled' shows the customer's share of the receivable control account; open invoices listed as at 30/09.

Supplier statements

ActionWhenWhat you doWhat happens
Supplier statement credit balanceSupplier with bills 8,000.00 and payments 3,000.00 in the period, opening 0Run Supplier statement for the periodClosing 5,000.00 shown as owed to the supplier (credit balance); start after end is refused: 'The statement starts after it ends.'

Receivables aging

ActionWhenWhat you doWhat happens
Aging total agrees with the control accountCustomers with invoices Current, 40 and 100 days oldRun Receivables aging at todayEach invoice lands in its bucket; grand total equals the receivable control account balance (the check line shows no difference). Unapplied receipts reduce, never hide, the total.

Payables aging

ActionWhenWhat you doWhat happens
Aging total agrees with the payable accountBills at several agesRun Payables agingBuckets by days past due; total equals the payable control account.

Payment due

ActionWhenWhat you doWhat happens
Bills due and what stops themBill due 20/09 on hold; bill due 25/09 with a dispute of 500 of 2,000; bill already in a proposalRun Payment due with end date 30/09/2026All three listed oldest first with Status and 'Why it cannot be paid yet' (payment hold, in dispute 500.00, in proposal PP-xxxxx). A later end date plans the next run.

Goods received not invoiced (GRNI)

ActionWhenWhat you doWhat happens
GRNI shows unbilled receiptsPO line 100 units received at AED 12.00, billed 60Run GRNIReceived 100, billed 60, not invoiced 40, value AED 480.00 with days waiting. Billing more than received appears too (the mismatch the other way).

Bank reconciliation (statements)

ActionWhenWhat you doWhat happens
Import a bank fileImport profile for the bank exists; file with 6 linesNew statement > Preview import > ImportPreview shows the lines read; import creates a Draft statement for the chosen account with opening/closing; wrong totals are refused: 'The lines add up to <n>, which takes <opening> to ...'
Auto-matchDraft statement; ledger holds a receipt entry of 2,000.00 on the same bank accountAuto-matchThe 2,000.00 line is matched to that entry; lines with no equal-amount entry stay unmatched; nothing is posted.
Manual match refused when wrongStatement line +2,000.00Match to an entry of 1,950.00; then to an entry on another bank account; then to an entry already usedThree refusals: 'That entry is 1950.00; the statement line is 2000.00.', 'That entry is not on this bank account.', 'That entry is already matched to another statement line.'
Match manyStatement line +1,500.00; three ledger receipts of 500.00Match many, choose the three entriesGroup matched. Choosing one entry is refused ('Choose between 2 and ... entries to group.'); entries totalling 1,400.00 are refused with the total shown.
Add a bank charge line as a journalUnexplained statement line -35.00 'Account fee'Add line / book it to the bank charges accountJournal posts: Dr Bank charges 35.00 / Cr Bank 35.00 and the line is matched to it; difference falls to 0.
Close a statementAll lines matched and ledger agrees with the closing balanceCloseStatement becomes Reconciled and can no longer be edited ('A reconciled statement cannot be edited.'). With an unmatched line or a difference the close is refused naming the count or the difference.

Bank reconciliation workspace

ActionWhenWhat you doWhat happens
AI assist proposalsDraft statement with 10 open lines; policy AI OnRun assistRules propose first; the model sees only the residue. Each proposal has a score band Strong or Possible and a reason. Nothing is matched until Accept. If the model fails the rules' proposals stand.
Accept and reject a proposalA proposal existsAccept one; Reject another; try to accept an already decided one; accept a 'nothing fits' proposalAccepted proposal matches the line; rejected stays open. Repeats refused: 'This proposal was already accepted.'; nothing-fits: 'This proposal says nothing fits, so there is nothing to accept. Find a match or book the line.'
Validate then submitStatement with an unexplained lineSubmit for approval; then Validate; fix; SubmitSubmit before validation: 'Validate the statement first, and clear anything that fails.' With unexplained lines: '<n> statement line(s) are still unexplained. Match them, book them, or record them as exceptions before submitting.' With a difference: 'The books reconcile to ... and the bank says ...'.
Approve with maker-checkerStatement submitted by user A; policy maker-checker OnUser A presses Approve; then user B (bankrec.approve) doesA: 'You submitted this reconciliation, so someone else has to approve it (maker-checker).' B: statement closes, certificate with a digest is produced, audit 'bankrec.approved'.
Return to the preparerSubmitted reconciliationReturn without a reason; then with one'Say why it is being returned.' then state goes back to open and the statement is editable again; while submitted it cannot be changed ('This reconciliation is submitted for approval. Return it to the preparer to change it.').
Auto-match only what is certain (worked)Statement lines: +5,000.00 on 5 Oct ref TRF778; ledger bank account has one receipt journal REC-0001 Dr 112100 5,000.00 dated 5 Oct memo containing TRF778; another receipt of 5,000.00 on 20 OctRun auto match.Score: same amount 60 + same day 20 + reference match 15 = 95 (certain is 80 or more); the 5 Oct receipt is matched. The 20 Oct receipt (amount 60 only, 15 days apart = 60) is a suggestion, never applied. A different amount scores 0 and is never offered.
Accept, unmatch and refuse wrong matchesA suggested matchAccept this match; Unmatch; try to match a ledger entry of 4,999.00 to a 5,000.00 line; match an entry already used.Accepted: line shows Matched. Unmatch clears it. Wrong amount: 'That entry is 4999.00; the statement line is 5000.00.' Used entry: 'That entry is already matched to another statement line.' Entry on another account: 'That entry is not on this bank account.'
Group one line to several entries and split a line (worked)Bank receipt 7,500.00; ledger receipts 4,000.00 and 3,500.00; second line 5,000.00 of which 50.00 is a chargeGroup candidates: select both; Split the second line into 4,950.00 (to the receipt) and 50.00 (explained as bank charge).Group sums 7,500.00 and matches. Group of 4,000 + 3,000 -> 'Those 2 entries come to 7000.00; the statement line is 7500.00.' Same entry twice: 'The same entry is in the group twice.' Split parts 4,900 + 50 -> 'The parts come to 4950.00; the line is 5000.00.'
Combine several statement lines into one ledger entry; many-to-manyTwo statement lines +2,000 and +3,000 and one ledger receipt 5,000Select both lines > combine and choose the entry.Matched when totals agree; 'Those 2 lines come to 4000.00; the entry is 5000.00.' otherwise. Many-to-many: 'The lines come to X and the entries to Y; they must be the same.' and 'Receipts and payments are matched separately: every line and entry runs the same way.'
Explain a line by booking the missing entry (worked journal)Statement line -50.00 'Bank charges 08/10'; account 720100 Bank charges existsCreate entry (Missing book entry) > account 720100 > confirm.Journal created: Dr 720100 Bank charges 50.00 / Cr 112100 Bank 50.00, posted on the line date, and matched to the line automatically. The statement line is not edited or deleted. Without an account: 'Choose the account this belongs in.'
Reconciliation arithmetic (worked)Ledger closing balance of 112100 at 31 Oct = 13,000.00. Statement closing 13,150.00. A cheque CHQ1002 -200.00 is in the books but not on the statement; a bank charge -50.00 is on the statement but not in the booksOpen the reconciliation summary (header Difference).reconciled_to = book closing - ledger-only items + statement-only items = 13,000.00 - (-200.00) + (-50.00) = 13,150.00. Difference = 13,150.00 - 13,150.00 = 0.00 (balanced). If the charge were typed as -60.00 the difference would be -10.00 and Close/Submit is refused with the 'difference' message.
Validate then submit for approvalbankrec.prepare; every line matchedValidate; then Submit for approval; then try to change a match.Validate lists checks (e.g. Opening + movements = closing). Submit refused if not validated: 'Validate the statement first, and clear anything that fails.'; with open lines: 'N statement line(s) are still unexplained. Match them, book them, or record them as exceptions before submitting.'; with a difference: 'The books reconcile to ... The difference of ... has to be explained first.' After submit, edits are refused: 'This reconciliation is submitted for approval. Return it to the preparer to change it.'
Approve (maker-checker), return and certificateA submitted reconciliation; second user with bankrec.approvePreparer approves own; second user returns without reason; returns with reason; resubmit; second user approves; open Certificate.'You submitted this reconciliation, so someone else has to approve it (maker-checker).'; 'Say why it is being returned.'; returned shows 'Returned: <reason>'; approve closes the statement (state reconciled) and creates a certificate with a digest; approve before submit: 'Submit the reconciliation for approval first.'

Reconciliation rules and import profiles

ActionWhenWhat you doWhat happens
Rule scope and ambiguityRule R1 priority 100 for account XCreate R2 with the same scope, priority and datesRefused as ambiguous; changing priority to 90 saves. Evidence without 'amount' is refused.

Write-offs (customer and supplier)

ActionWhenWhat you doWhat happens
Small write-off inside threshold posts at onceTolerance Small balance: cap 50.00, posts without approval up to 10.00; invoice 1,000.00 with 8.00 leftNew write-off, Small balance, 8.00, reason 'Rounding'Status Posted straight away (auto): Dr Write-off expense 8.00 / Cr Receivable 8.00; invoice cleared; no approver recorded.
Write-off above threshold needs a second personSame tolerance; invoice with 25.00 left; user A requestsA requests 25.00; A tries Approve; B (journal.approve) approvesRequest waits (Requested). A: 'Somebody other than the person who asked has to approve a write-off.' B approves: Dr Write-off expense 25.00 / Cr Receivable 25.00, status Posted, Decided by B.
Cap refuses outrightCap amount 50.00, cap 1% of bill; invoice total 1,200.00Request 60.00; then 15.0060.00: 'A small balance write-off is capped at 50.00.' 15.00: 'A small balance write-off is capped at 1% of the bill (12.00).'
Bad debt always needs approvalCustomer invoice 3,000.00 unpaid, tolerance threshold 100.00Request bad debt 200.00Waits for approval even though under the threshold. After approval: Dr Bad debt expense 200.00 / Cr Receivable 200.00.
No tolerance setCompany has no tolerance rowsRequest any write-off with no reason; then with a reason'Say why this is being written off.' then it waits for approval (with no tolerance everything needs approval and nothing is capped).
Kind versus sideSupplier billRequest Bad debt; request Vendor differenceBad debt: 'A bad debt write-off does not apply to a supplier bill.' Vendor difference accepted: on approval Dr Payable / Cr write-off (difference) account.
Refuse and cancelA requested write-offRefuse with no note; with a note; the requester cancels another; a stranger without journal.approve cancels'Say why it is refused.' then Rejected; requester can cancel own; others refused: 'Only the person who asked, or an approver, can cancel this.'
Reverse a posted write-offPosted write-off of 25.00; user with journal.reverseReverse with a reasonReversal journal Dr Receivable 25.00 / Cr Write-off expense 25.00; invoice open again for 25.00; original stays on record as Reversed. Without a reason 'Say why it is being reversed.'
Record a recoveryPosted bad-debt write-off 1,200.00Record recovery 400.00 into the bank; then 900.00400: Dr Bank 400.00 / Cr Recovery income 400.00; invoice stays cleared (the receivable is not reopened). 900: 'Only 800.00 of WO-00001 is still to recover.' A recovery can be reversed with a reason.
Two requests cannot exceed the balanceInvoice with 30.00 left; one request of 20.00 waitingRequest another 20.00Refused: '<number> has only 30.00 outstanding after the write-offs already waiting.'
Stale approvalRequest of 25.00 waiting, but the invoice was then paid down to 10.00ApproveRefused: '<number> now owes less than 25.00, so it cannot be written off.'

Disputes

ActionWhenWhat you doWhat happens
Open a disputeCustomer invoice outstanding 3,000.00New dispute: amount 1,200.00, reason, owner, expected dateDispute opens (Open). The 1,200.00 is excluded from dunning notices and from payment proposals; the other 1,800.00 is still chased. A second dispute on the invoice is refused.
Edit and resolveOpen dispute 1,200.00Edit amount to 4,000.00; then 800.00; Resolve with a note4,000: 'That is more than the item still owes.' 800 saves. Resolve needs 'Say how it was settled.'; status Resolved and the invoice is chaseable in full again.
Supplier dispute stops the proposalSupplier bill 2,000.00 wholly in disputeAdd the bill to a payment proposalRefused: '<number> is wholly in dispute, so there is nothing to pay.' A part dispute lowers the payable amount by the disputed part.

Collections worklist

ActionWhenWhat you doWhat happens
Worklist is live from open itemsCustomer A overdue 5,000.00 (60 days) with 1,000.00 in dispute; customer B not overdueOpen Collections; then tick Include customers that are not overdueA shows Outstanding, Overdue 5,000.00, In dispute 1,000.00, oldest 60 days, collector and risk; B appears only with the tick. Figures agree with the aged receivables.
Log a contactA customer on the worklistLog a contact: kind call, note, outcome, next action and dateAppears under Contacts and notices and as Last contact. An escalation without an owner is refused: 'Say who it is escalated to.'

Promises to pay

ActionWhenWhat you doWhat happens
Add a promiseCustomer overdue 8,000.00Add a promise 8,000.00 for 07/10/2026Open promise saved and a note appears in the contacts. A second one is refused; a past date is refused; 7 months ahead is refused.
Kept or broken is worked out from receiptsOpen promise 8,000.00 due 07/10, grace 3 daysReceive 8,000.00 on 06/10; separately let another promise pass with no moneyFirst becomes Kept (Received 8,000.00). The other becomes Broken once the date plus grace has passed and shows in Broken promises.
Cancel a promiseOpen promiseCancel without a reason; with one'Say why the promise is cancelled.' then Cancelled; a cancelled or kept promise cannot be cancelled again ('This promise is already cancelled.').

Dunning runs

ActionWhenWhat you doWhat happens
Propose a runLevels 1 (15 days) and 2 (30 days); customer A 45 days overdue 5,000.00; B has an open promise; C all in dispute; D marked No automated remindersPropose a run as at todayDraft run: A gets a level 2 notice (proposed); B skipped 'Promise to pay ... by <date>'; C skipped 'Everything overdue is in dispute'; D skipped 'Marked 'No automated reminders' on the customer'. Nothing is posted.
Skip reasonsUnapplied receipts 5,000.00 for a customer overdue 5,000.00; another overdue only 20.00 with minimum 50.00; another got a level 2 notice 3 days ago and spacing is 14Propose a runSkipped with 'Unapplied receipts or credit notes cover the overdue amount: allocate them', 'Below the minimum amount (50.00)', and 'Level 2 notice went on <date>'.
Issue the runDraft run with proposed noticesIssueNotices move to sent/issued by channel; an email level with no customer email is flagged and skipped. Run becomes Issued. Only one draft run may exist: a second Propose says '<code> is still draft. Issue or cancel it before starting another.'
Withdraw a notice and cancel a runDraft runWithdraw one notice with a reason; cancel the runNotice withdrawn ('Say why it is withdrawn.' required); run Cancelled and nothing is sent. Withdraw on an issued run: '<code> is issued; notices can only be withdrawn from a draft.'
Fees and interest on a noticePolicy fees On (legal reviewed); level 2 fee 25.00, interest 12% a year, basis 365; net overdue 10,000.00, 30 days latePropose a runNotice shows Fee 25.00 and Interest 10,000 x 12% x 30/365 = 98.63. Neither is posted to the ledger; raising them as an invoice is a separate deliberate step. With fees Off both are 0.00.

Collection policy and dunning levels

ActionWhenWhat you doWhat happens
Switch on fees needs legal confirmationFees OffSwitch on without ticking Legal review; then with review and a noteFirst refused with the 'regulated ... legal position has been reviewed' message; second saves and is audited as collections.fees_enabled with the note.
Level ladder rulesLevel 1 at 15 days, level 2 at 30Add level 3 at 20 days; add level 10; add a second level 2; Add the standard levels on a company that has levels'Level 2 starts at 30 days; level 3 has to start later.' 'The level is a number from 1 to 9.' 'Level 2 already exists.' 'This company already has dunning levels.' Delete of a level that sent notices: 'Notices were sent at this level. Switch it off instead.'

Payment proposal record

ActionWhenWhat you doWhat happens
Prepare a proposal by due dateThree posted supplier bills due by 31/10 (one held, one disputed in full)New proposal, Pay from bank account, Include everything due by 31/10/2026Draft proposal with only eligible bills; held and wholly disputed bills are left out; each line To pay = outstanding less dispute less retention.
Three-person controlUsers P (payment.prepare), A (payment.approve), R (payment.release); separation switch OnP submits; P tries Approve; A approves; A tries Release; R releasesP: refused 'Somebody other than the person who prepared this proposal has to approve it.' A approves: bank file fixed with a SHA-256 fingerprint. A release: 'The person who releases a payment is neither the person who prepared it nor the one who approved it.' R release succeeds.
Release books the paymentsApproved proposal: bills of 4,000.00 and 6,000.00 to two suppliersRelease to the bankTwo payments post in one unit of work: Dr Payable 4,000.00 / Cr Bank 4,000.00 and Dr Payable 6,000.00 / Cr Bank 6,000.00; bills Paid; proposal Released.
Separation switched offPolicy Separate release Off; A approvedA releasesAllowed (approver may release), but the preparer still cannot: 'The person who prepared a proposal cannot release it.'
Release withdraws a stale approvalApproved proposal; after approval a supplier's bank account changed (or a bill was partly paid)ReleaseRelease does not pay: approval withdrawn, affected lines held, proposal back to pending with the reason ('The earlier approval was withdrawn: ...'); somebody independent must approve again.
Authorised signersBank account lists signers (not user R)R releasesRefused: 'You are not an authorised signer of <bank account>.'
Supplier without bank detailsSupplier with no bank account on file in a proposalSubmit for approvalRefused: '<supplier> has no bank account on file. Add one, or hold <bill>.' All lines held: 'There is nothing to pay: every bill is held or there are none.'
Bank answers per lineReleased proposal with 2 billsRecord Accepted for one, Rejected (reason) for the otherAccepted line stays paid. Rejected line reverses its payment (Dr Bank / Cr Payable for the amount), the bill is open again and free for a new proposal. Rejection without a reason refused; changing an accepted line: 'reverse its payment from the payment screen ...'
Download the bank fileApproved proposalDownload bank file as a preparer, then as approverPreparer without approve/release: 'Only somebody who approves or releases payments can download the bank file.' Approver gets the generic header/detail/trailer CSV (not ISO 20022) with count and total.
CancelDraft proposal; a released oneCancel the draft with a reason; try the released oneDraft cancels and frees its bills. Released: 'A released proposal is with the bank: record its ...' Cancel without a reason: 'Say why the proposal is cancelled.'
Edit rulesPending proposalAdd a bill; hold a bill; remove a bill'Only a draft can be edited. Send an approved or pending one back, or cancel it.' Holds are allowed in draft or pending only.

Payment holds

ActionWhenWhat you doWhat happens
Place and lift a holdPosted supplier bill BILL-9; users P (payment.prepare) and A (payment.approve)P places a hold with a reason; P tries to lift it; A lifts itHold Active; the bill cannot be paid or proposed. P lifting is refused by permission; A lifts with a reason, state Released, Released by A. Placing again on the same bill: 'That is already on payment hold.'
Whole-supplier holdSupplier with 5 open billsPlace scope A whole supplierEvery bill of that supplier is refused for payment with 'This supplier is on payment hold: <reason>' until released.

Credit position

ActionWhenWhat you doWhat happens
Exposure against limitCustomer limit 100,000.00; open invoices 85,000.00; confirmed orders not yet invoiced 5,000.00Open Credit positionCustomer listed as near limit with Exposure 90,000.00 and Available 10,000.00; tiles count it under needs attention.
Confirming an order past the limit is refusedHard block policy; exposure 85,000.00; order of 30,000.00 (would be 115,000.00)Confirm the sales orderRefused with 'Credit check: ...' and the hint to ask for a credit override. Nothing is confirmed and no reservation is written.
Apply the overdue ruleCustomers with items 20, 70 and 100 days overdueEnter 60 and Apply the overdue ruleCustomers over 60 days are put on hold (blocking new orders); the 20-day customer is untouched; the result lists who was held. 0 days is refused.

Credit overrides

ActionWhenWhat you doWhat happens
Override lifecycle with two peopleLimit 100,000.00, exposure 85,000.00, order 30,000.00; user S (document.confirm) and approver M (credit.release)S requests max excess 15,000.00 until a date in 10 days; S tries Approve; M approves; S confirms the orderS cannot approve: 'Somebody other than the person who asked has to approve a credit override.' After M approves the order confirms; excess is min(30,000, 115,000 - 100,000) = 15,000.00; override Used 15,000.00; a reservation Held records exposure before 85,000.00 and after 115,000.00.
Override is boundedApproved override of 15,000.00Confirm a second order that needs 20,000.00 excess; confirm one after the end dateRefused: the override has no room or has expired; using it does not extend it. A blocked/blacklisted customer cannot even be given one.
Refuse and cancelRequested overrideRefuse without a note; with one; the requester cancels another; a stranger cancels'Say why the request is refused.' then Rejected; requester can cancel; others without credit.release: 'Only the person who asked, or someone who can release credit, can cancel this.'

Credit reservations

ActionWhenWhat you doWhat happens
Reservation statesOrder confirmed under creditCancel the order; invoice another fully; try Release on a standing orderCancelled order: reservation Released and its override draw is given back. Fully invoiced: Consumed (exposure counted once as a receivable). Manual Release of a standing order: 'The order still stands. Cancel it, and its credit is released with it.'

Credit groups

ActionWhenWhat you doWhat happens
Group limit across membersGroup limit 250,000.00 policy Block the order; member A exposure 150,000.00, member B 90,000.00Confirm an order of 20,000.00 for BCombined 240,000.00 + 20,000.00 = 260,000.00 > 250,000.00 so the order is refused with the group message; Warn only lets it through with a note on the reservation.
Membership rulesCustomer A already in group G1Add A to a new group G2; add a partner of another company; reuse code of G1'A is already in another credit group.' 'Each member is one of this company's customers.' 'Another credit group has that code.'

Provision matrices

ActionWhenWhat you doWhat happens
Build and approve a matrix with two peopleUsers E (ecl.manage) and F (ecl.approve); matrix with ratesE creates the matrix, saves rates, E tries Approve; F approves; F tries to editE approve: 'Somebody other than the person who built this matrix has to approve it.' F approves; afterwards edits refused: 'An approved matrix is never edited. Make a new version.' No rates: 'There are no rates to approve.'
New version retires the oldApproved matrix v1New version; leave it draft; try another new version; approve v2Second attempt: 'Version 2 is still a draft. Finish that one first.' Approving v2 retires v1; a draft can be discarded unless a run used it.

Expected credit loss runs

ActionWhenWhat you doWhat happens
Provision arithmeticBuckets 0-30 and 31-60; exposure 200,000.00 and 80,000.00; rates 1% (overlay 0) and 5% (overlay +10%); allowance in the ledger 3,000.00Work out the provision as at today0-30: 200,000 x 1% = 2,000.00. 31-60: 80,000 x 5% x 1.10 = 4,400.00. Required 6,400.00; in the ledger 3,000.00; adjustment +3,400.00. Unapplied receipts and credit notes are first taken off the oldest items.
Post the true-up (second person)Draft run with adjustment +3,400.00; preparer E, poster FE tries Post; F postsE: 'Somebody other than the person who prepared the provision has to post it.' F: Dr ECL expense 3,400.00 / Cr Allowance 3,400.00 dated the run date; status Posted.
Release when the need fallsRequired 9,000.00 against an allowance of 12,000.00; release account setPrepare and postAdjustment -3,000.00: Dr Allowance 3,000.00 / Cr Release account 3,000.00 (or the expense account if none named).
Stale or incomplete run cannot postDraft run; then a manual entry changes the allowance; another run has exposure with no matching ratePost each'The allowance changed after this run was prepared (<then> then, <now> now). Cancel it and prepare it again.' and '<n> of exposure matched no rate in <matrix>. Add a rate (a row with no portfolio and no risk covers everything) ...'
Run date rules and reversalPosted run at 30/09Prepare a run for 15/09; prepare another for 30/09; reverse the posted run with no reason; reverse with a reason after a later run exists'The provision as at 2026-09-30 is already posted. A run is for a date after the last posted one.' / 'A provision for 2026-09-30 already stands ...' / 'Say why the provision is reversed.' / 'The provision as at <date> was worked on top of this one. Reverse that first.' A clean reversal posts the opposite journal.

Budgets (list)

ActionWhenWhat you doWhat happens
Create a budgetbudget.manage; chart has income and expense accountsNew budget > Name 'Budget 2026', Scenario Original, From 2026-01-01, To 2026-12-31 > Create.A draft 'BUD-2026-ORI v1' appears with Income 0.00, Expense 0.00; audit 'budget.created'. Creating a second Original budget for 2026 is refused: 'Another budget already uses that code. Make a new version of it instead.'
Edit conflict on a budgetTwo users open the same draftUser 1 saves lines; user 2 saves lines from the stale page.User 2 is refused: 'Somebody changed this budget. Reload it and look again.'

Budget page

ActionWhenWhat you doWhat happens
Save budget lines from CSV (annual split worked)A draft budget 2026-01-01 to 2026-12-31Paste: account,period,amount / 610300,annual,10000 / 410100,2026-01,50000 > Save lines.Account 610300 gets 12 monthly rows: 11 x 833.33 and the last month 833.37 (10,000 - 11 x 833.33 = 833.37), total 10,000.00. Account 410100 gets one row in January. Totals: Income 50,000.00, Expense 10,000.00. Saving again replaces every earlier row.
Refuse bad budget rowsA draft budgetSave a row for account 120100 (asset); then a negative amount; then period 'Q1'.Each refused with its row number: 'Row 1: 120100 is a asset account; a budget covers income and expense.'; 'Row 1: amounts are positive; ...'; 'Row 1: the period is yyyy-mm, or annual.' Nothing is saved.
Approve a budget (maker-checker)Draft with lines built by user A; user B has budget.approveAs user A click Approve; then as user B click Approve.A: 'Somebody other than the person who built this budget has to approve it.' B: status Approved, Approved by B, audit 'budget.approved'. A draft with no lines: 'There are no lines to approve.' An approved budget cannot be approved again: 'This budget is already approved.'
An approved version is never edited; make a new versionApproved budget v1Try Save lines or edit name; then New version.Edit refused: 'An approved version is never edited. Make a new version.' New version creates v2 as a draft copy of v1's lines. While v2 is still a draft, another New version is refused: 'Version 2 is still a draft. Finish that one first.' Approving v2 (by someone other than its author) turns v1 into Replaced.
Discard a draftDraft budgetClick Discard draft.Draft and its lines are deleted. An approved budget cannot be discarded: 'Only a draft is discarded; an approved budget is retired by approving its successor.' A draft used by a control policy: 'A budget control policy uses this budget.'

Budget against actual

ActionWhenWhat you doWhat happens
Variance and favourable colour (worked)Approved budget: account 610300 (an expense account, called Marketing in these examples) budget 30,000 (Jan to Mar); account 410100 Sales budget 100,000; ledger Jan to Mar: 610300 debits 34,500, 410100 credits 90,000Choose the budget, From 2026-01-01 To 2026-03-31.610300: Budget 30,000.00, Actual 34,500.00, Variance 4,500.00, 15.0% (unfavourable for an expense). 410100: Budget 100,000.00, Actual 90,000.00 (income shown positive), Variance -10,000.00, -10.0% (unfavourable for income). Result: budget 70,000.00, actual 55,500.00, variance -14,500.00.
Availability after commitments (worked)Budget for 610300 is 1,000; actual 300; open commitments 200Open the report for the year; read the 610300 row.Unspent = 1,000 - 300 = 700.00; Committed 200.00; Available = 1,000 - 300 - 200 = 500.00. Income accounts show no committed or available figure.
Actual leaves year-end closing entries outA closed year with a year-end close journalRun the report over the closed year.Actual equals the ledger activity of the year and is not zeroed by the closing entry (journals from source 'yearend' are excluded).
Unbudgeted spend is flaggedAccount 610100 has postings but no budget lineOpen the report.610100 is listed with Budget 0.00, the actual amount, and no variance percentage (blank), marked unbudgeted.
Commitments from purchase ordersConfirmed purchase order with a service line 4,000 not yet billedOpen the report; then bill half of it.Committed on the expense posting-role account rises by 4,000.00; after billing 2,000 it falls to 2,000.00. Stocked goods lines are not counted (balance sheet matter).
Dimension filter hides commitmentsOpen the statement with a dimension filter (API ?department=SALES)Request /budgets/<id>/statement?department=SALES.Only budget lines and actuals carrying that dimension value are used; commitments show 0.00 because they are not filtered by dimension.

Budget control policies

ActionWhenWhat you doWhat happens
Create a policybudget.manage; an approved budgetNew policy > Name, Approved budget, Accounts 600000 to 699999, Measured whole budget, Tolerance 10, Block unless overridden > Save.Policy saved with an auto code BC-xxxxxxxx; audit 'budget_control.saved'. Choosing a draft budget is refused: 'A policy controls an approved budget version.'
Warn at the limit (worked)Policy: warn, tolerance 0, whole budget; account 610300 budget 12,000 for the year, spent 11,900, no commitmentsPost a manual journal Dr 610300 500 / Cr bank 500.Limit 12,000; used = 11,900 + 500 = 12,400 > 12,000; the journal posts and an audit row 'budget.warning' is written: '610300 ... would pass its budget (BUD-2026-ORI): budget 12,000.00, spent 11,900.00, this 500.00.' The posting is not stopped.
Block at the limit with tolerance (worked)Policy: block, tolerance 10%, whole budget; 610300 budget 12,000, spent 12,500Post Dr 610300 600 / Cr bank 600; then Dr 610300 50 / Cr bank 50.Limit = 12,000 x 110 / 100 = 13,200. 12,500 + 600 = 13,100 is within the limit and posts. After that spent is 13,100, and 13,100 + 50 = 13,150 also posts; a further 100 (13,250 > 13,200) is refused with 'Budget control <code>: ... Ask for a budget override (Planning > Budget control), and have somebody else approve it.' and no journal is made.
Basis: year to date versus whole year (worked)Budget 610300 is 1,000 per month for 2026; posting date 15 March; spent so far 2,900With basis year to date post 200; then switch the policy to whole budget and post 200.Year to date: months up to March = 3,000; 2,900 + 200 = 3,100 > 3,000 -> breach. Whole budget: 12,000; 3,100 < 12,000 -> no breach.
Commitments counted as spent (worked)Policy counts commitments; budget 1,000; actual 600; open commitment 300Post Dr 610300 200.used = 600 + 300 + 200 = 1,100 > 1,000 -> breach, and the message includes ', committed 300.00'. Untick 'Count commitments as spent' and the same posting passes (800).
Account with no budget linePolicy covers 600000 to 699999; account 690000 has no budget linePost Dr 690000 100 with the option unticked, then ticked.Unticked: not controlled, posts. Ticked: limit 0, so the 100 breaches (warn or block as set). Reversal, year-end, opening, FX and ECL journals are never checked.

Budget commitments

ActionWhenWhat you doWhat happens
Add and release a commitmentbudget.manageAdd commitment 'Fit-out' 610300, 25,000, today; then Release with reason 'Contract cancelled'.Code CMT-00001 (next number), Status Open, counted in Committed on the report. After release: Status Released and no longer counted. Releasing again: 'This commitment is already released.'. Empty reason: 'Say why it is released or cancelled.'

Budget overrides

ActionWhenWhat you doWhat happens
Request, approve and use an override (worked)Block policy; 610300 over limit by 100; user A budget.manage, user B budget.approveA requests 500 for 14 days, reason 'Urgent campaign'; B approves; A posts Dr 610300 300; then another Dr 610300 300.Request Waiting. B approves -> Approved. First posting passes and Used becomes 300.00 (excess charged, remaining 200.00, audit 'budget.override_used'). The second needs 300 but only 200 remains -> refused with the budget control message.
Approver cannot be the requesterUser A requested an override and also holds budget.approveA clicks Approve on own request.'Somebody other than the person who asked has to approve a budget override.'
Refuse, cancel and expiryA waiting request; an approved one past its end dateRefuse without a reason; refuse with a reason; the requester cancels another; look at an expired approved one.'Say why the request is refused.' then Refused. Cancel by the requester works; cancel by a third person without budget.approve: 'Only the person who asked, or an approver, can cancel this.' Expired approved override shows 'Ended' and is not used. Approving one already past its date: 'This override would already have ended. Ask for a new one.' A decided request: 'This request is already approved.'

Treasury register

ActionWhenWhat you doWhat happens
Register a post-dated cheque receivedtreasury.manage; type 'Cheque' activeRegister an instrument > Type Cheque, number CHQ-1001, counterparty 'Al Noor Trading', face value 12,500.00, date on the cheque 60 days ahead > Register.Code TRY-00001 (next number), Status Post dated, direction in, issued today; History shows 'registered'. Nothing is posted to the ledger.
Required details differ by kindTypes existRegister a guarantee without a bank; a deposit without a bank; a cheque without a number.'Name the bank.' / 'Name the bank.' / 'Enter the number or reference.' Maturity before issue: 'It cannot mature before it is issued.'
Called, expired and cancelled need a reasonAn active guaranteeMark as called with no note; then with a note.'Say why it is called.' then Status Called (final).
Collateral is masked for viewersGuarantee with collateral 'Cash margin 5,000'; user with treasury.view onlyOpen the instrument as the viewer, then as a manager.Viewer sees 'held (details are restricted)'; manager sees 'Cash margin 5,000.00 <note>'.

Instrument page

ActionWhenWhat you doWhat happens
Cheque status flowA post-dated chequeMark as received > deposited > returned (with note) > deposited > cleared.Allowed moves: post_dated to received, issued, deposited, cancelled; received to deposited, cancelled, returned; deposited to cleared, returned; returned to deposited or cancelled; cleared and cancelled are final. A wrong jump: 'A cheque that is cleared can become: nothing (it is final).' Returned without a note: 'Say why it is returned.' Clearing does not post a bank entry (register only).
Release a bank guarantee (maker-checker, worked)Guarantee 100,000.00 registered by user A; type needs evidence and a second person; user B has treasury.releaseA opens it and tries Release; B releases with evidence 'Bank letter 889'.A: 'Somebody other than the person who registered this instrument has to release it.' (A needs treasury.release even to see the button). B: Status Released, Released by B with the evidence line; History 'released'. Without evidence: 'Releasing needs evidence: ...'.
Release target for each kindGuarantee, deposit, letter of credit, chequeOpen each and check which Release target is offered.Guarantee -> released, deposit -> withdrawn, letter of credit -> closed; a cheque has no release. Calling release on a cheque or a final instrument: 'A cheque that is cleared cannot be released.'
Letter of credit drawings (worked)Letter of credit face value 80,000.00 USDRecord a drawing of 50,000; then 40,000; then 30,000; then try Release.After 50,000: Utilised 50,000, Balance 30,000, status Utilised. 40,000 refused: 'Only 30000.00 USD is left on this letter of credit.' 30,000 accepted: Balance 0.00. A face value edit below utilised: 'The face value cannot be less than what has been utilised.' A cheque drawing: 'Only a letter of credit is drawn on.'
Edit an open instrument and final instrumentsAn active guarantee; a released oneChange the maturity date and notes of the active one; try the released one.Change saved and History shows 'amended' with 'maturity <old> to <new>; notes'. The released instrument: 'This instrument is released; it is no longer edited.'

Treasury maturities

ActionWhenWhat you doWhat happens
Cash-related versus contingent (worked)Open: cheque 10,000 AED matures in 5 days (in); deposit 50,000 AED matures in 20 days (out); guarantee 100,000 AED in 40 days; LC face 80,000 USD drawn 50,000 in 10 daysOpen Maturities, Looking ahead 30 days; then 90.30 days: Cash-related totals AED in 10,000.00, out 50,000.00; Contingent: LC counted at its open balance 30,000.00 USD out; the guarantee (40 days) not listed. 90 days adds the guarantee 100,000.00 AED out. Cash and contingent are never added; currencies are never added.
Overdue open instrumentsAn open cheque dated yesterdayOpen Maturities and the register.A warning '1 instrument(s) are past their maturity and still open.' The row is red with 'overdue'. Final instruments are never overdue. Due soon uses the type's Alert days (a guarantee type of 30 days flags 30 days ahead).

Treasury instrument types

ActionWhenWhat you doWhat happens
Add the standard typestreasury.manage; company with no typesClick Add the standard types.Seven types: Cheque (no evidence, no second person, alert 7), Bank guarantee, Performance guarantee, Advance payment guarantee (30 days), Bid bond (14), Fixed deposit (14), Letter of credit (30), each with evidence and second person ticked except Cheque. Clicking again: 'This company already has instrument types.'
Edit, switch off and delete a typeA type with instrumentsChange its kind; delete it; untick Active.'Instruments of this type exist, so its kind cannot change.'; 'Instruments of this type exist. Switch the type off instead.'; switching off works and the type disappears from the Register picker. A type without instruments deletes cleanly.

Bank accounts

ActionWhenWhat you doWhat happens
Create a bank account with a ledger accountreference.manage; a postable asset account 112100 existsNew bank account > Code ENBD-AED-01, Name, Bank, Currency AED, Ledger account 112100 > Bank details: IBAN AE070331234567890123456 > Save.Saved; list shows IBAN as 'AE07 •••• 3456', Beneficiary version 1, Active. The full IBAN is never returned by the API (only has_iban true). Re-using 112100 for another active account: '112100 already carries the bank account ENBD-AED-01.'
IBAN checks and beneficiary version (fraud control)An existing account at version 1Enter an IBAN with a wrong check digit; then a valid new IBAN; then change only the account holder; then change only Notes.Bad IBAN refused with the check-digit message. A new IBAN raises Beneficiary version to 2 and History shows 'iban' with the user and time; holder name change makes version 3; Notes change does not raise the version. Audit 'bank_account.beneficiary_changed'.
Remove a sealed bank detailAn account with IBAN on fileOn the IBAN field click Remove it > Save.IBAN cleared (has_iban false), version raised; Keep it after all undoes the removal before saving. Closing the account (Status Closed) hides it from the default list.

Import statement

ActionWhenWhat you doWhat happens
Import a CSV statement (worked)journal.prepare; account 112100; profile none; CSV with columns Date,Description,Reference,Debit,Credit,Balance: 05/10/2026 'Transfer ABC Trading' credit 5,000.00; 08/10/2026 'Bank charges' debit 50.00; 12/10/2026 'CHQ 1001' debit 1,800.00; opening 10,000.00Choose account and file > Next > reference ENBD-2026-10, From 2026-10-01, To 2026-10-31, opening 10,000.00 > review rows > Import.Three valid lines: +5,000.00, -50.00, -1,800.00 (dates read day-first); closing computed 13,150.00 and must equal the file balance; statement appears as Imported with 0 matched. Day-first: 03/04 is 3 April.
Duplicate protectionThe statement above already importedImport the same file again; then a file with 2 old and 3 new rows.Same file: 'Every valid row in that file has been imported already.' Mixed file: old rows marked 'Seen before' and skipped, new rows imported; a duplicate warning shows on the statement.
Import with a profile and balance checkProfile: format csv, semicolon, date %d.%m.%Y, numbers 1.234,50, validate balance onImport a semicolon file whose closing balance is wrong by 10.00.'Balance check failed, so nothing was imported: the statement opens at ...' With tolerance 10.00 the file imports. The step shows 'Read through the import profile: <name>'.
camt.053 and MT940 filesA camt.053 XML and an MT940 fileImport each.Entries read with value dates and bank references; wrong content: 'That XML could not be read as a camt.053 statement.' / 'No transactions (tag 61) were found in that MT940 file.' BAI2 and OFX are not available.
Profile that does not match the fileA profile set to MT940Import a CSV file with it.'The import profile reads MT940 files, but this file looks like ...'

Bank statements

ActionWhenWhat you doWhat happens
Reconciled statements are lockedA reconciled statementAdd a line; edit; match a line.'This statement is already reconciled.' / 'A reconciled statement cannot be edited.'
Close a statement with a differenceDraft statement with an unexplained lineClose.'1 statement line(s) are still unexplained.' With all matched but a difference: 'The ledger reconciles to <x>, and the bank says <y>. The difference is <z>.'

Bank exceptions

ActionWhenWhat you doWhat happens
Raise and assign an exceptionbankrec.prepareOpen a line > Details > set Exception 'Timing difference', Category, Assignee, Note.Saved; the line is listed on Exceptions and counted in the header; an assignee from another company is refused.

Reconciliation rules

ActionWhenWhat you doWhat happens
Company policy and rule priority (worked)Policy: window 30, strong 80, possible 50. Rule A (account 112100, priority 10, window 7). Rule B (all accounts, priority 20, window 14)Open Reconciliation rules; check the effective rule for account 112100 and for 112200.112100 uses Rule A (lower priority number wins; window 7); 112200 uses Rule B (window 14); a blank rule field inherits the company figure. Two rules with equal scope, priority and dates are refused as ambiguous.

Bank import profiles

ActionWhenWhat you doWhat happens
Create, edit and delete a profilebankrec.configureNew profile with a column mapping; save; edit; delete.Saved with auto code; a mapping without a date column is refused; only one active profile per account; delete removes it (statements already imported stay).

Cash position

ActionWhenWhat you doWhat happens
Cash position arithmetic (worked)Account 112100: ledger balance 100,000.00; last reconciled statement 30 Sep; since then a receipt 8,000.00 and a payment 3,000.00 are in the books and not on any statementOpen Banking > Cash position as at today.Pending receipts 8,000.00; pending payments 3,000.00; Bank balance (estimated) = 100,000 - 8,000 + 3,000 = 95,000.00; Available cash = 100,000 - 8,000 = 92,000.00 (money not yet cleared is not available; a payment booked is already gone). Opening balances are never pending.

Cash forecast

ActionWhenWhat you doWhat happens
Weekly forecast arithmetic (worked)Available cash today 92,000.00; open customer invoice 20,000 due in week 2; supplier bill 15,000 overdue; a confirmed sales order 10,000 due in week 3; assumption payroll -85,000 in week 4Start today, 13 weeks, Calculate.Overdue bill lands in week 1: week 1 closing 77,000.00; week 2 +20,000 = 97,000.00; week 3 committed +10,000 = 107,000.00; week 4 assumption -85,000 = 22,000.00. Lowest point and Weeks below zero update; actual, committed and assumption columns are never blended; items beyond the last week show as 'Due after the last week'. A bill in a payment proposal sits on the proposal's payment date.
Save and reopen versionsjournal.prepareSave this version for scenario Base twice; open version 1.Versions 1 and 2 of 'Base' are listed with their closing figures; version 1 reopens exactly as it was made (immutable). Payroll, tax, projects and treasury instruments are not read automatically (only via assumptions) and the result says so.
Assumption checksForecast screenAdd an assumption with amount 0; with no description; calculate 0 weeks.Add stays disabled without date, amount and description; API refusals as in the field list; 'A forecast covers 1 to 52 weeks.'

Trial balance (report)

ActionWhenWhat you doWhat happens
Trial balance totals agree (worked)Posted journals: Dr 112100 Bank 10,000 / Cr 310000 Capital 10,000; Dr 610300 Marketing 2,000 / Cr 112100 Bank 2,000; draft entry Dr 610100 500 / Cr 112100 500 not postedRun Trial Balance for this fiscal year, Entries Posted only; then Posted and draft.Posted only: 112100 closing debit 8,000.00; 310000 closing credit 10,000.00; 610300 closing debit 2,000.00; total debit 10,000.00 = total credit 10,000.00. Posted and draft: 610100 shows 500.00 and the result is marked provisional; 112100 8,000 - 500 = 7,500.00.

Financial statements

ActionWhenWhat you doWhat happens
Profit and loss and balance sheet agree (worked)Same data as above plus a sale posted: Dr 120100 Receivables 5,250 / Cr 410100 Sales 5,000 / Cr 220100 VAT output 250Run Profit & Loss and Balance Sheet for the year.P&L: Revenue 5,000.00, Expenses 2,000.00, Net profit 3,000.00. Balance sheet: Assets 8,000.00 (bank) + 5,250.00 (receivables) = 13,250.00; Liabilities 250.00; Equity capital 10,000.00 + current year profit 3,000.00 = 13,000.00; liabilities + equity 13,250.00 = assets (balanced).
Comparison columnPrior year has dataRun P&L with Compare with Previous fiscal year.A Comparison column appears with last year's amounts for the same rows.

Report runner

ActionWhenWhat you doWhat happens
Drill down adds up to the clicked figureTrial balance run for Q1Click the 112100 row.The General Ledger opens with the same period and filters narrowed to account 112100; its debits and credits equal the Period debit and credit of the row. A report with no drill-down: '<title> rows do not open into anything.'
Saved viewsreport.viewSet Period This quarter, Entries Posted and draft; Save this view as 'Q posted+draft' visibility Everyone; reload; pick it.The filters come back exactly; a second user sees it when it is shared; Only me stays private; Company default loads for everyone.
Export totals equal the screenreport.export; Trial Balance runExport as CSV, XLSX and PDF.Same rows and totals as the screen; the file has a header with company, filters and user; PDF is archived with a SHA-256 shown in the response header; no export right gives 403; PDF without doc.print gives 403.
Filter validationReport runnerCall a report with an account from another company, a start after the end, an unknown dimension.'An account in the filter is not in this company.'; 'The start date cannot come after the end date.'; 'Unknown dimension <code>.'

Tax reports

ActionWhenWhat you doWhat happens
VAT return summary (worked journal)Sale invoice 10,000.00 net with tax SR 5% (tax 500.00); zero-rated export 4,000.00 (ZR); exempt sale 1,000.00 (EX); purchase 6,000.00 net with SR (input tax 300.00, recoverable 100%)Run Tax Return Summary for the month.Output side: SR net 10,000.00 tax 500.00; ZR net 4,000.00 tax 0.00 (its own line); EX net 1,000.00 tax 0.00 (its own line). Input side: SR net 6,000.00 tax 300.00 recoverable 300.00. Net VAT payable 500.00 - 300.00 = 200.00. Posting for the sale: Dr 120100 Receivables 10,500.00 / Cr 410100 Sales 10,000.00 / Cr 220100 VAT output 500.00.
Partly recoverable tax and reverse charge (worked journal)Tax code with recovery 50%; reverse charge purchase of a foreign service 2,000.00 net at 5%Post a bill with the 50% code on 1,000.00 net (tax 50.00); post the reverse charge bill; run Tax Detail and Reverse Charge.50% code: Dr 610300 Expense 1,025.00 (1,000 + 25 irrecoverable tax) / Dr 140100 VAT input 25.00 / Cr 210100 Payables 1,050.00. Reverse charge: tax 100.00 is accounted on both sides (Dr VAT input 100.00 / Cr VAT output 100.00) so it nets to nothing in the return; the Reverse Charge report lists the bill with net 2,000.00 tax 100.00. Detail shows partner tax registration.

Management P&L by dimension

ActionWhenWhat you doWhat happens
Unallocated lines are shownExpense 3,000 posted to department Sales and 1,000 with no departmentRun Department P&L.Sales expense 3,000.00 and a 'Not set' row of 1,000.00; total equals the P&L expense of 4,000.00.

Ledgers and books

ActionWhenWhat you doWhat happens
General ledger running balance (worked)Account 112100: opening 1,000.00; movements +500, -200 in the periodRun General Ledger for account 112100.Running balance 1,000.00, then 1,500.00, then 1,300.00; paged output keeps the running balance across pages; totals row equals the trial balance period figures.

Accounting settings

ActionWhenWhat you doWhat happens
Change the fiscal year start monthperiod.lockEdit > Year starts in April > Save; then run a report with 'This fiscal year'.Saved and audited ('policy.fiscal_year_start'); This fiscal year now runs 1 April to 31 March; no posting changes. A user without period.lock gets 403.
Lock date only moves forwardLock currently 2026-08-31Move the lock to 2026-09-30; then to 2026-07-31.First saved, audited 'period.locked'; second refused: 'A lock date cannot be moved backwards through this action.' Postings dated on or before the lock are refused.

Taxes

ActionWhenWhat you doWhat happens
Install the UAE tax packreference.manageInstall a country's taxes > AE.Codes created with effective-dated rates from 2018-01-01: SR 5%, ZR 0%, EX 0%, OS 0%, RC 5% (reverse charge, purchase), IM 5% (import, purchase) and others in the pack. Installing again adds nothing twice. 'IN' is refused: 'There is no tax pack for IN.' Packs: AE, SA, BH, OM, QA, KW only.

Tax code record

ActionWhenWhat you doWhat happens
Rate windows over time (worked)Code SA-VAT with 5% from 2018-01-01 to 2020-06-30 (closed window) and another code VAT-X with 5% from 2018-01-01 open-endedOn VAT-X add a rate 15% from 2020-07-01. On SA-VAT add 15% from 2020-07-01 with no end.VAT-X: refused 'VAT-X already has a rate covering 2020-07-01. Close the existing window first.'. SA-VAT: accepted. An invoice dated 2020-06-15 prices at 5%, dated 2020-07-15 at 15%. A date with no window: '<code> has no rate for <date>. Add one before using it; ...'
Tax line posting (worked journal)Sales invoice, one line 1,000.00, tax SR 5%, customer in DubaiPost the invoice.Dr 120100 Receivables 1,050.00 / Cr 410100 Sales 1,000.00 / Cr 220100 VAT output 50.00. A purchase bill of 1,000.00 with SR: Dr 610300 Expense 1,000.00 / Dr 140100 VAT input 50.00 / Cr 210100 Payables 1,050.00.

Fiscal positions

ActionWhenWhat you doWhat happens
Export position removes or zero-rates the tax (worked)Position EXPORT: tax SR -> ZR; position FREEZONE: SR -> Nothing at all; customer assigned each in turnCreate a sales invoice 2,000.00 with SR for each customer; use 'explain' on the customer.EXPORT: tax 0.00 shown on its own zero-rated line of the return (net 2,000.00). FREEZONE: no tax and the line does not appear on the return at all. Receivable 2,000.00 in both. Without a position: 2,100.00 with 100.00 VAT.
Automatic position and account substitutionPosition auto-apply, country AE, registered only; account rule 410100 -> 410300Create a customer in AE with a tax registration, then one without; invoice both.Customer with registration gets the position automatically; without does not; a position naming the country beats a generic one (then lower sequence, then code). Sales post to 410300 instead of 410100 where mapped.
Save validationreference.manageAdd two rules for SR; a rule SR->SR; a duplicate code.The three refusals quoted in the field list; 201 rules: 'Up to 200 tax substitutions.'

Dimension values

ActionWhenWhat you doWhat happens
Create a hierarchy and close a valuereference.manageCreate DUBAI (branch) and MARINA rolling up to DUBAI; set Closed after 2026-06-30; post on 2026-07-15 with MARINA.Hierarchy shown on 'Rolls up'; the posting is refused: 'MARINA is not available for a posting dated 2026-07-15.' Reopen makes it available again.

Account structure rules

ActionWhenWhat you doWhat happens
Required dimension on expense accountsRule: cost centre required for class expensePost Dr 610300 100 with no cost centre; then with one.Refused: '610300 <name> needs a cost centre. ...' then accepted. A prohibited rule refuses a line that carries the dimension. Nothing is seeded: a new rule starts refusing postings that used to pass.

Valid combinations

ActionWhenWhat you doWhat happens
Only and never rules (worked)Rule A: when project is Marina then branch must be Dubai (only). Rule B: when department is Sales then cost centre must not be Workshop (never)Post a line with Marina and Abu Dhabi; Sales and Workshop; Marina and Dubai.First refused naming the rule: 'project Marina: it takes branch Dubai. (Marina is a Dubai project)'; second refused by rule B; third accepted. A rule judges only lines carrying both dimensions. Try a combination reports the same without posting.

Distribution models

ActionWhenWhat you doWhat happens
Share a line across departments (worked journal)Model 'Office rent': department Sales 60 / Admin 40Post a rent line of 10,000.00 using the model.One ledger line per share: Dr 610200 Rent 6,000.00 (Sales) + Dr 610200 Rent 4,000.00 (Admin) / Cr 210100 Payables 10,000.00. With two split dimensions the shares multiply (60/40 x 50/50 gives four lines 30/30/20/20). Odd cents go to the largest remainders: 100.00 over 3 x 33.3333% gives 33.34 / 33.33 / 33.33.
Model suggestion and matchingTwo models match account 610300: order 10 and order 20Post a line to 610300 asking for a suggestion.The lower order number wins; a model limited to a partner or class matches only those.

Finance Features

ActionWhenWhat you doWhat happens
Turn Budgets off and onapps.configure and a second approver with apps.config.approvePropose Budgets off with a reason; the same user approves; the second user approves; try to create a budget; reads; turn it on again.Self-approval refused: 'Somebody other than the person who proposed it must review a configuration change.' After approval the Planning > Budgets menus disappear, creating a budget is refused with 'Budgets and budget control is disabled for this company.' (409, capability_disabled), existing budgets stay readable.
Protected controls and stale proposalsProposal openTry to switch off Journals; approve an old proposal after another was approved.'A protected control cannot be turned off.' / 'Another revision was approved since this was proposed. Propose it again against the current configuration.' A rejection needs a note: 'Say why the change is rejected.'

Finance Fields

ActionWhenWhat you doWhat happens
Make the payment reference requiredA company with the switch finance.payment.reference set to RequiredRecord a bank payment with no reference; then a cheque with a number.'Payment reference is required by this company.' (422) for the first; cheque accepted. A cheque needs its number whatever the switch says.
Hide treasury notes and credit override evidencetreasury.notes Hidden; credit_override.evidence HiddenRegister an instrument with notes; request a credit override with evidence.'Treasury instrument notes is turned off for this company.' (400) and 'Credit override evidence is turned off for this company.' A field set read-only refuses edits: '<field> cannot be changed in this company.'