Skip to content

Financial Accounting Module

Nothing in this module is typed into a ledger by hand except a manual journal. The General Ledger is the running total of journals, and almost every journal is written by the server the moment a document somewhere else reaches FINAL. Everything in this module either writes those journals, settles the customer and supplier balances they create, proves the bank agrees, or reads the result back as a statement.

This page is a map, not a manual. Each applet’s own reference page carries its fields, settings, posting proof and failure modes. This page says which applets are in the module, what each one is for, and — the thing this module gets wrong most often in second-hand descriptions — which documents actually post to the ledger, and which do not.

Applets in this module

Membership is an editorial judgement — the product has no module↔applet relationship in its data — and it is written down in planning/specs/module-applet-membership.md. Financial Accounting owns 18 registry applets; 16 are documented. The two undocumented rows are migration connectors whose status is an open question (see the last table).

The ledger

AppletWhat it is for
Ledger And JournalWhere the General Ledger lives. Every AUTO journal the documents write, the manual journals you key or import, the ledgers and sub-ledgers per company, and the Error Checking workspace (unbalanced journals, FINAL documents with no journal, missing forex and card-charge entries). Manual journals are validated balanced on the server and are live the moment they save — there is no draft, no posting step and no approval
Financial ReportCloses a month per Set of Books (Month End Processing), freezes Trial Balance / Profit and Loss / Balance Sheet / MITRS snapshots, runs the ad-hoc Profit Loss Report by branch or dimension, and holds the two diagnostics — Stock Flow Report and Trace Document — that explain why a figure is wrong

Money in, money out

AppletWhat it is for
Receipt Voucher (Internal)Money received from a customer. FINAL writes one cashbook line per settlement line and the journal Dr cashbook GL / Cr debtor; contra links clear the customer’s open invoices
Payment Voucher (Internal)Money paid to a supplier or other payee, or an expense paid directly. FINAL writes the cashbook lines and Dr creditor (or expense) / Cr cashbook GL; contra links settle the supplier’s open invoices
Reimbursement Payment Voucher (Internal)Paying someone back for money spent on the company’s behalf. A near-twin of the Payment Voucher, but its document type has no entry in the posting handler: it never raises a creditor line or a tax line, so every expense line needs its own GL code
Purchase Invoice (Internal)The supplier’s bill. FINAL posts Dr purchase, Dr input tax / Cr creditor and books the invoiced quantity into stock (quantity signum +1). Filed here because it is the accounts-payable document; the reader in a purchasing process will find it from the Purchasing module too

Proving the bank

AppletWhat it is for
Bank ReconciliationOne session per cashbook and period: import the bank statement, link each statement line to the cashbook line it settles (by hand or with the weighted auto-matcher), and produce Reports 1–3 as the close evidence. It posts nothing — it reads the cashbook lines that vouchers, POS settlements and cash transfers created at FINAL, and writes reconciliation links

Who owes whom

AppletWhat it is for
Debtor ReportCustomers who owe you: outstanding documents with an aging strip, aging, statement of account, historical snapshots, AR transactions and the salesman collection report. The one thing it writes is a contra between two open customer documents
Creditor ReportThe same for suppliers you owe, plus settlement detail. Writes only contras between open supplier documents
Debtor and Creditor ReportBoth sides in one menu — fifteen reports — for a team that reviews AR and AP together. Reads only; no contra can be created from it
Statement of AccountBatch customer statements: a run per period expands into one PDF per company-and-customer pair, printed or e-mailed. Reports the receivable position; changes no balance

Assets, treasury, budget

AppletWhat it is for
Fixed AssetThe asset register, categories, per-asset depreciation configuration and schedule, the monthly depreciation run, CSV import and the asset report. Not a generic document — it has no FINAL and no posting handler; the Transactions tab sends journals directly. The depreciation run currently writes journals with no lines (see What does not post)
DepositMoney-market placements: a requisition that invites quotations, the live register with its interest schedule, and categories. A treasury register — it posts no journal; the ledger effect comes from the Payment Voucher that places the money and the Receipt Voucher that receives it back
BudgetaryBudget items, categories, profit centres and votebooks; opening a fiscal year creates one register per item per month; virements and adjustments move allocation; Purchase Invoice and Sales Invoice lines that carry a register consume it at FINAL. Posts no journal, and there is no budget check on the server — an over-budget line is coloured in the editor and still saves
Cashflow ProjectionDespite the name, not a treasury forecast. A billing-and-collection planning register: programs hold engagements, engagements hold lines, and for each line and fiscal month someone types in the open balance, the target and actual billing and the target and actual collection. The dashboard and the two reports (Cashflow Projection, Collection Delay) are sums over those typed rows. It reads no document, posts no journal and moves no stock — and today one of its two reports can only ever come back empty (see its page)

Tax

AppletWhat it is for
MY-SSTMalaysian Sales and Service Tax: tax years, filing cycles, tariff codes and tax codes; filing copies the taxed lines of posted documents into a frozen snapshot, and the SST-02 return is computed from that snapshot only. The three on-screen SST reports read the live documents, so the report and the return diverge the moment a filed document changes

Migration connectors — status open

Registry rowWhat is known
Autocount (AccountConnector_Autocount_Applet)ACTIVE in the registry, no page. Its bundle is served from the senwave/ CDN prefix and its element is a customer-profile applet, not an accounting connector — the same family the exclusion question Q-0261 covers
SQLAccount (AccountConnector_SQLAccount_Applet)Same prefix, same element, staging bundle. Whether these two are product or a customer build (Q-0309) decides whether this module reads 16 of 16 or 16 of 18

Until that is decided, no page in this module describes an AutoCount or SQL Account import.

Applets it depends on

Finance has no master data of its own. Everything below is owned by the Core module and read at FINAL by the documents in this one.

AppletWhat this module takes from it
Chart of AccountGL sections, categories and codes; each company’s ledgers and Default GL Codes (the 41 keys that tell a document which account to hit); Sets of Books; fiscal periods and their locks; opening balances on the primary ledger; the Closing Stock Balance figures the P&L uses
CashbookBank and cash accounts, each pointing at one GL code; settlement methods (which cashbook a card, cash or transfer line lands in); Cash Transfer and Cash Adjustment; the enquiry screens Query Cashbook Transaction and Cash Level; the auto-matcher weightage for Bank Reconciliation
OrganisationCompanies, branches, locations; the company timezone every date filter uses; the company E-Invoice Status
Customer Maintenance, SupplierThe entity’s AR/AP type, which decides whether a document posts to DEBTOR or DEBTOR_NON_TRADE, CREDITOR or CREDITOR_NON_TRADE
Tax ConfigurationTax codes and rates; the tax portion of a line posts to the company’s OUTPUT_TAX / INPUT_TAX default
Doc Item MaintenanceThe item-company GL link — the third step of the GL precedence line → header → item link → company default
ForexExchange rates; a foreign-currency document is finalised as a base-currency shadow that carries the posting, and settlement differences go to FOREX_GAIN / FOREX_LOSS

The documents that post into this module from other modules are listed under What posts to the ledger.

What posts to the ledger — and what does not

The server builds a document’s journal from one table, JournalPostingTypeHandler.handlers, which has seven entries. If a document type is not in that table — or does not fall through to one by name — it does not post through this path, whatever a page elsewhere says.

    flowchart LR
  subgraph docs["Document reaches FINAL"]
    SI["Sales Invoice, Cash Bill,<br/>Sales Return, Credit/Debit Note"]
    PI["Purchase Invoice,<br/>Purchase Return, Debit/Credit Note"]
    GRN["Purchase GRN Stock In"]
    RV["Receipt Voucher"]
    PV["Payment Voucher"]
    CON["Consignment purchase documents"]
    ADJ["Stock Adjustment"]
  end
  H["JournalPostingTypeHandler<br/>SALES · PURCHASE · INTERNAL_PURCHASE_GRN_STOCK_IN<br/>INTERNAL_RECEIPT_VOUCHER · INTERNAL_PAYMENT_VOUCHER<br/>PURCHASE_CONSIGNMENT · INTERNAL_STOCK_ADJUSTMENT"]
  J["AUTO journal in<br/>Ledger And Journal"]
  docs --> H --> J
  MJ["Manual journal / CSV import"] --> J
  CT["Cash Transfer (FINAL)"] --> J
  FA["Fixed Asset Transactions tab"] --> J
  ME["Month End Processing:<br/>closing-day and opening-day journals"] --> J
  
HandlerDocuments that use itJournal at FINAL (net)
SALESSales Invoice, POS cash bill, Sales Return, Sales Credit / Debit Note, Sales Refund Note, and anything else whose type name contains SALESDr DEBTOR / Cr SALES, Cr OUTPUT_TAX (discounts to SALES_DISCOUNT; return lines to SALES_RETURN — except the Refund Note, whose lines land in SALES, P-0241). No cost-of-sales line: the handler has no stock entry, so a sale does not post COGS or reduce inventory value in the ledger
PURCHASEPurchase Invoice, Purchase Return, Purchase Debit / Credit Note, and anything whose type name contains PURCHASEDr PURCHASE, Dr INPUT_TAX / Cr CREDITOR; returns to PURCHASE_RETURN, discounts to PURCHASE_DISCOUNT
INTERNAL_PURCHASE_GRN_STOCK_INPurchase GRN Stock In only — the plain Purchase GRN is signum 0/0 and posts nothingDr INVENTORY_NOT_INVOICED / Cr CREDITOR_NOT_INVOICED — the GR/IR (Goods Received / Invoice Received) accrual
INTERNAL_RECEIPT_VOUCHERReceipt Voucher (Internal)Dr cashbook GL (one line per settlement) / Cr DEBTOR; charges to SETTLEMENT_CHARGES
INTERNAL_PAYMENT_VOUCHERPayment Voucher (Internal)Dr CREDITOR or the expense lines / Cr cashbook GL; charges to SETTLEMENT_CHARGES
PURCHASE_CONSIGNMENTThe consignment purchase documents in the Purchasing moduleCONSIGNMENT_STOCK against CONSIGNMENT_LIABILITY
INTERNAL_STOCK_ADJUSTMENTStock AdjustmentAdjust-out: Dr STOCK_ADJUSTMENT / Cr stock (STOCK_BALANCE); adjust-in the reverse

Every handler resolves the GL code the same way — GL code on the line → GL code on the header → item-company link → company default — and every journal is checked before it is written: unequal debits and credits throw TOTAL_DEBITS_AND_TOTAL_CREDITS_NOT_BALANCES, an empty journal throws NO_JOURNAL_CREATED, and a missing entity default (DEBTOR*, CREDITOR*) throws MISSING_DEFAULT_GL_CODE: <key>. In all three cases the document does not finalise. VOID of a posted document writes a mirror journal with every debit and credit swapped, carrying the original document’s transaction date — only the posting timestamp is today, so voiding a January invoice in March moves January. See What a Void Undoes.

Three more things write journals without a handler: a manual journal (keyed or imported in Ledger And Journal, validated balanced on the server), a Cash Transfer at FINAL (Dr the receiving cashbook’s GL / Cr the sending one’s), and the Fixed Asset Transactions tab (acquisition, adjustment, disposal), which assembles the lines in the browser and posts them directly.

What does not post

Say this to anyone who tells you otherwise:

  • A sale posts no cost of goods sold. The SALES handler has no stock line. The only code that writes a COGS journal is the month-end cost-of-goods-sold processor — and its button is commented out of the Month End Processing screen, so it is reachable only by API. The ad-hoc Profit Loss Report computes cost of sales live from the sales lines instead; the frozen snapshot shows only what has been journalled.
  • The depreciation run writes journals with no lines. The processor adds each line only when the asset’s depreciation sub-ledger columns are set, and nothing in the applet or the backend ever sets them. The run completes, the journal header exists, and the ledger does not move. Until that is fixed, monthly depreciation is a manual journal — see the Journal Entries Guide.
  • A Reimbursement Payment Voucher raises no creditor and no tax line — its type is not in the handler table and does not fall through by name.
  • Bank Reconciliation, Statement of Account, the three debtor/creditor report applets, Budgetary, Deposit and MY-SST post nothing. They read FINAL documents and write their own tables (links, runs, registers, tax snapshots).
  • A plain Purchase GRN, a Sales GIN and a Sales GRN post nothing (amount signum 0). The plain GRN records receipt; the Purchase Invoice books the stock.
  • A claim posts nothing — the claims domain has no handler and no signums; money leaves through a Payment Voucher or a payroll file. See the Claims module.
  • Nothing in this module routes for approval. There is no approval engine for journals, receipt vouchers or payment vouchers; the generic engine covers Purchase Order, Purchase Requisition and Stock Requisition only, and is off until configured. Segregation of duties on a Payment Voucher is a permissions decision — give the create right and the finalise right to different roles.

Month-end, in the order the system expects

  1. Finalise everything. A DRAFT document is not in the ledger, not in the debtor or creditor reports, not in the cashbook and not in any statement. Manual journals are live on save.
  2. Reconcile the cashbooks. One Bank Reconciliation session per cashbook and month; Report 3 is the evidence. Bank charges and interest you find on the statement are entered as a Payment or Receipt Voucher (which creates the cashbook line the matcher needs) — a manual journal does not create a cashbook line and will never match.
  3. Month End Processing in Financial Report, once per Set of Books per month. It writes the closing-day and opening-day journals and the per-account monthly summaries. The Financial Report snapshot reads only those summaries — an empty Trial Balance almost always means the month was never processed, not that the journals are missing.
  4. Create or regenerate the Financial Report snapshot. Snapshots are frozen when created; after any back-dated posting, PROCESS the month again, then REGENERATE.
  5. Lock the period in Chart of Account > Fiscal Year. LOCK_GL stops manual journals (auto journals still post); LOCK_TXN stops operational documents being dated into the month; LOCK_ALL stops both. Anyone who can open Chart of Account can set a period back to OPEN — there is no approval on reopening.

The Financial Reporting Guide walks this through for the running example, and the Month-end closing tutorial is the short version.

Where the balances come from

BalanceSource of truthRead by
A customer’s or supplier’s outstanding amountarap_doc_open + arap_contra on each FINAL document header; contras from receipt/payment vouchers, credit notes and the report applets reduce itDebtor Report, Creditor Report, Debtor and Creditor Report, Statement of Account, and the contra screens on a receipt or payment voucher
A cashbook’s balanceThe cashbook transaction lines written when a Receipt Voucher, Payment Voucher, POS settlement, Cash Transfer or Cash Adjustment reached FINAL (VOID lines excluded)Query Cashbook Transaction, Cash Level, Bank Reconciliation
A GL account’s balanceACTIVE journal lines in Ledger And JournalSub Ledger, the Profit Loss Report (live), Financial Report snapshots (via month-end summaries)
A budget register’s balancelatest_allocated_amt − actual_used_amt on the register, moved by virements, adjustments and invoice linesBudget Report

Each of those is worked out live, from the rows underneath it. The figures on your reports mostly are not — the Trial Balance, Profit and Loss and Balance Sheet read a stored monthly summary, and the historical aging reads a monthly photograph. Which figures BigLedger stores, and which it works out fresh explains which is which across all five subsystems that make that trade-off, and how to tell a stale figure from a wrong one. If you already have a figure that will not tally, start instead from the symptom: when two numbers don’t tally.

The three are maintained separately. A receipt voucher moves all of the first three at once; a manual journal moves only the third. That is why “the GL bank balance is right but the cashbook is wrong” and “the customer’s statement is right but the debtor control account is wrong” are different problems with different fixes.

Reports in this module

QuestionReportApplet
Do the books balance, and what is the position at month-end?Trial Balance, Profit And Loss, Balance Sheet, MITRS (frozen snapshot per Set of Books and month range)Financial Report
How did branch A do against branch B this quarter?Profit Loss Report — grouped by branch, GL dimension, segment, profit centre or project; cost of sales computed live at the chosen cost basisFinancial Report
Why does stock value not equal the stock accounts?Stock Flow Report — inventory value versus accounting value per module, with a per-document listing and a repost actionFinancial Report
Why did this document not post?Trace Document — six checks on one document, each with a Resolve buttonFinancial Report
Which journals are wrong or missing?Journal Not Balance, Missing Journal, Missing Journal Forex Gain Loss, Missing Credit Card ChargeLedger And Journal
Who owes us, how old is it, and what did the position look like at a past month-end?Outstanding Document (with aging strip), Aging, Statement of Account, historical snapshots, AR Transaction, Collection Invoice with AgingDebtor Report
Whom do we owe, and how were the invoices settled?The supplier-side equivalents plus settlement detailCreditor Report
Both sides for one reviewerFifteen reports, debtor and creditor versions of eachDebtor and Creditor Report
Does the cashbook agree with the bank?Report 1 (which side the variance sits on), Report 2 (reconciling items), Report 3 (the sectioned overview to keep as evidence)Bank Reconciliation
What has each cashbook done this month?Query Cashbook Transaction, Cash LevelCashbook (core)
How much of the budget is used?Budget Report — allocated, utilised, balance per registerBudgetary
What goes on the SST-02?SST Service Tax Report, SST Sales Tax Report, SST Tax Code Summary (live), and the SST-02 itself (from the filed snapshot)MY-SST
What do we own and how is it depreciating?The asset report and each asset’s depreciation scheduleFixed Asset

What has no report. There is no cash flow statement, no consolidated group statement (one snapshot per Set of Books; combine outside BigLedger), no cost-of-sales-by-item report other than the Gross Profit listing behind the Profit Loss Report, and no budget commitment or reserved-amount report (the reserved_amt column exists and nothing writes to it).

Guides for this module

Related documentation