🏦 Accounting settings — what the posting profile controls
Updated
Accounting settings are the singleton posting profile for the stand. They tell the ledger which chart-of-accounts leaf receives each subledger leg, and they also hold the default currency used by module defaults.
How the process works#
Open Accounting → Settings → Accounting settings after the chart of accounts is created. Each visible account field is a reference to ChartOfAccounts; the hidden *AccountCode fields are stamped from the selected account when the record is saved.
The profile is best-effort. If an account is empty, the business document still posts to its operational register, but the matching GL leg is skipped. This is useful during implementation, but it creates a reconciliation gap by exactly that skipped amount.
Settings#
| Setting | Empty value | Filled value |
|---|---|---|
| Default currency | No currency is stamped by this profile; other module defaults may still provide one | New documents and records that ask IRecordDefaults can take this currency |
| Auto-post journal entries | Manual JournalEntry records are saved as drafts until the user presses Post journal entry |
A balanced journal can be posted automatically when the saving path uses the journal service |
| Receivables account | Customer debt stays in Receivable, with no GL debit |
Customer issue posts Dr receivables |
| Revenue account | Revenue stays in Revenue, with no GL credit |
Customer issue posts Cr revenue |
| Inventory account | Stock and WIP can move in registers without GL inventory legs | Receipts, issues, production and cost of sales use this account |
| Payables account | Supplier debt stays in Payable, with no GL credit |
Supplier receipt posts Cr payables |
| Purchase price variance account | A supplier invoice that disagrees with the receipt still moves Payable, but the ledger gets no leg for the gap |
Register on a SupplierInvoice posts the difference here: Dr variance / Cr payables when the supplier billed more, the reverse when less |
| Cost of goods sold account | Sales cost stays only in costing registers | Issued realization posts Dr cost of goods sold |
| VAT payable account | Output VAT stays only in TaxLedger |
Output VAT posts to the payable VAT account |
| VAT receivable account | Input VAT stays only in TaxLedger |
Recoverable input VAT posts to the receivable VAT account |
| WIP account | Production release and finish remain silent in the ledger | ProductionOrder in Released posts Dr WIP / Cr inventory; Finished posts the reverse |
| Labor absorbed account | Labour still enters product cost, but the GL misses the labour absorption | Finished posts Dr inventory / Cr labour absorbed |
| Cash account | Payment documents settle debt registers without a cash GL leg | Payment documents can post the cash side |
| Payroll expense / liability / social insurance accounts | HR registers move without GL | Payroll and social insurance documents write their configured GL legs |
| Inventory write-off / surplus accounts | Stock adjustments change stock without these GL balancing legs | Shortage and surplus use the selected accounts |
Every account must be a leaf. The event handler rejects a group account; postings need final account codes, not headings.
Example with numbers#
A purchase receipt brings 4 bolts at 25 each, VAT 15%.
| Profile state | Operational result | GL result |
|---|---|---|
| Inventory account, Payables account and VAT receivable account are filled | Stock +4, Payable +115, TaxLedger +15 |
Dr inventory 100, Dr VAT receivable 15, Cr payables 115 |
| VAT receivable account is empty | same registers | Dr inventory 100, Cr payables 115; VAT exists in TaxLedger only |
| all three are empty | same registers | no receipt GL legs |
The boundary is important: empty accounts do not block operations. They make the ledger incomplete by the missing leg.
Boundaries and edge cases#
- Saving the reference stamps the hidden code. Users do not type the code.
- Empty reference means "do not create that GL leg"; it does not mean "use a default account".
- Changing an account does not repost older documents by itself. Repost or reverse documents deliberately if the old ledger must change.
- WIP account and Labor absorbed account are separate. WIP moves material cost during production; labour absorbed moves payroll cost into inventory on output.
- Purchase price variance account is a profit-and-loss leaf, not a second inventory account. The receipt priced the stock in
InventoryValueand in the cost layers, and a later invoice does not reopen those layers — see Supplier invoice. Pointing this field at the inventory account would put the ledger permanently ahead of the costing subledger.
What is posted#
The profile does not post anything by itself. It is read by posting handlers of documents such as PurchaseOrder, SalesRealization, PurchaseCreditNote, ProductionOrder, JournalEntry, payroll documents and stock documents.
For production, a release of components worth 28 posts Dr WIP / Cr inventory if WIP account is filled. Finishing reverses that pair and, if 90 minutes at 120 per hour were confirmed, adds Dr inventory 180 / Cr labour absorbed 180 if Labor absorbed account is filled.
What's not there yet#
- An empty account is not reported as a setup error before posting. The document succeeds and the missing GL leg is visible only by reconciliation.
- This profile names GL leaves. It does not import bank statements or match them to invoices. Cash and bank documents live on cash and bank.
Same topic for other readers: User · Developer