Finance & Accounting
This page is generated from the in-app guide content — edit
featureToggleGuidesand runpnpm gen:feature-toggle-docs.
Asset transfer in mid-period
When the person or unit in charge of a fixed asset or tool changes during a month, how that month’s depreciation/amortization is charged to cost centers. Later months always go to the new unit.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
finance.asset_transfer_depreciation_split | prorate_days | /accounting/settings | Cost Centres (finance.cost_center) |
How it works
When the person or unit in charge of a fixed asset, tool (CCDC) or prepaid expense changes during a month, decides how that month’s depreciation/amortization is split between cost centers. Applied when the depreciation entry is posted, from the custody history.
Conditions for it to take effect
Requires Cost centers.
When ON
Prorate by days (default): split by the days each cost center held the asset. Month-end holder: the whole month goes to the holder on the last day. Period-start holder: the whole month goes to the holder on the first day; the new unit pays from next month.
When OFF
There is no off option. An asset without custody history keeps its own cost center, and while Cost centers is off no split is made at all.
Screens, documents and reports affected
Monthly depreciation of fixed assets, tools and prepaid expenses; cost-center P&L.
Caveats
Later months always go to the new holder. Changing the option does not re-split entries already posted. An unknown value is treated as Prorate by days. Turning Cost centers off stops the split even though this option keeps its value.
Bank Reconciliation
Match bank statement lines to journal entries for accurate cash reconciliation
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
finance.bank_reconciliation | On | /accounting/settings | — |
How it works
Turns on the bank reconciliation workspace: import statements, match statement lines to ledger entries (one-to-one or many-to-many), match rules, auto-match, adjustments, payments from a statement line, and closing a statement.
When ON
Every reconciliation action works; the bank reconciliation assistant (AI) runs.
When OFF
Every reconciliation write is refused (feature disabled) — import, match, unmatch, auto-match, exclude, adjust, close — and the statement list too. Reports and outstanding items still read. The menu item is hidden and the AI assistant skips its run.
Screens, documents and reports affected
Accounting → Bank reconciliation, bank feeds, match rules, journal (reconciled flag), bank reconciliation assistant.
Caveats
Bank feeds keep importing statement lines while off but skip auto-match, so lines wait unmatched until you turn it back on. Match rules can still be edited, and a journal entry can still be marked reconciled by hand from the journal. Existing matches and closed statements are kept but cannot be undone while off.
Bill customers for time (T&M)
Time logs can be billable: billable checkbox, billable KPIs, invoice from hours and expense rebilling. Off: every hour is internal cost only (cost rate still recorded). Service Management is not affected.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
finance.billable_time | Off | /finance/settings | Client projects (revenue) (projects.client_projects) |
How it works
Decides whether a logged hour can be billable to a customer. The billable flag is resolved by one rule on every time-log write path (time tracking, timesheets, task daily logs, project edits, imports); a database trigger also forces billable = false while off.
Conditions for it to take effect
Requires “Client projects (revenue)” (Projects → Settings). In internal-only mode billable time is inert and every hour is cost only.
When ON
Billable checkbox, billable filters/columns/KPIs, invoice from hours, mark as billed, expense rebilling, overtime premium on billing and the billable-hours AI agent are available. An internal project cannot have billable hours.
When OFF
Every new or edited hour is saved as non-billable without an error (cost rate is still recorded). Invoice from hours, mark as billed, project invoice generation and expense rebilling are refused (feature disabled). Billable UI is hidden; the billable-hours agent skips its run.
Screens, documents and reports affected
Time tracking (entries, my day, reports, employee pages), timesheets, project detail, time logs, expenses, profitability, task time logs, approvals, project settings and rate cards, analytics.
Caveats
Service Management ticket timesheets are not affected. Turning it off does not clear hours already marked billable, but they cannot be invoiced while off, and editing such an hour turns it non-billable. Projects toggles “billable by default”, “expense rebilling”, “bill overtime premium” and “require bill rate card” require this one.
Budget Control
Check spending, purchasing and payroll against approved budgets. Overruns warn or block per budget plan; for payroll, per the payroll budget gate setting.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
finance.budget_control | Off | /accounting/settings | — |
How it works
Checks spending documents against the APPROVED budget line matching the document’s dimensions (cost center > department > company; a project budget is checked in addition and the worse result wins). Used = actuals + commitments (approved PRs not yet on a PO, open POs, unposted bills).
When ON
Warns at 80% used or when the contingency is being used. Over the ceiling (budget × (1 + contingency %), default 10%): a plan set to “warn” only warns; a plan set to “block” sends the document to Pending budget override, which only a budget-override approver can release. Applies to expenses, bills, POs and PRs. Manual journal entries and internal-use goods issues only warn, never block.
When OFF
No budget check; the budget impact hint on forms is hidden.
Screens, documents and reports affected
PR, PO, bill and expense forms (budget impact hint), approval screens, budget vs actual reports, overrun alerts, the budget variance agent, the payroll budget check.
Caveats
Needs at least one approved budget plan with lines; category lines must map to a GL account. Documents with no dimension (account, cost center, category, department) are not checked. Different currency from base is not compared. If the check fails, the document goes through (an error is logged). For payroll, warn vs block is set by the separate Payroll budget gate setting, not by the budget plan. Supplier and employee advances are not checked. Turning it on for a running company may block documents that used to pass if plans are set to “block”. Turning it off does not release documents already Pending budget override — they still need to be approved or rejected.
Budget overrun review cadence
How often approved budget overruns are bundled into a supplement proposal for the budget owner. None = manual review only.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
finance.budget_overrun_review_cadence | none | /accounting/settings | Budget Control (finance.budget_control) |
How it works
A scheduled job checks each company: when a review period (by fiscal-year start month) has just closed, it bundles approved budget overruns of that period into one supplement proposal for the budget owner and sends a “budget overrun review ready” notification. One proposal per period.
Conditions for it to take effect
Requires Budget control.
When ON
Monthly, quarterly, semi-annual or annual: a proposal is created after each period closes.
When OFF
None (default): no scheduled proposal; review overruns manually.
Screens, documents and reports affected
Budget entries (supplement proposals), budget notifications.
Caveats
The proposal is only a draft supplement — it changes no budget until approved. Setting the cadence back to None leaves proposals already created pending. While Budget control is off the job creates no proposals, whatever the cadence.
Cost Centres
Tag transactions with cost/profit centers for profit and loss reporting by center
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
finance.cost_center | Off | /accounting/settings | — |
How it works
Lets journal lines carry a cost/profit center. Automatic postings (invoices, bills, sales orders, goods issues, transfers…) inherit the source document’s cost center on lines that have none.
When ON
The cost center picker appears on manual journal entries and supported documents (sales orders, goods issues, transfers…). Profit & loss by cost center gets data from new postings.
When OFF
The cost center picker is hidden. A manual journal entry that carries a cost center is rejected. Automatic postings still post, but the cost center is dropped from their lines (an internal warning is logged; the user sees no error).
Screens, documents and reports affected
Journal, manual journal entries, sales orders, goods issues, stock transfers, cost center list and P&L by cost center, internal charges, depreciation split on asset transfer.
Caveats
Create cost centers before turning this on — the cost center list and reports by cost center stay open so you can set them up first and see past data. A cost center is not a department — a department only optionally links to one. Even while off, documents still record a cost center (from the owner’s department) so documents posted after you turn it back on carry it; only entries posted while off have none and are not backfilled. Turning it off does not delete earlier entries that carry a cost center. Internal charges, Depreciation split on asset transfer and Mandatory cost center on journal entries require this toggle (turn them off first before turning this off).
Double-Entry Accounting
Every document posts balanced debit and credit entries to the ledger. Turning it off stops all automatic posting — keep it on.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
finance.double_entry | On | /accounting/settings | — |
How it works
Every automatic posting (invoices, bills, payments, stock, payroll, depreciation…) goes through one journal posting service, which writes a balanced debit/credit entry only while this is on.
When ON
Documents post their journal entry and show a GL status (posted / failed).
When OFF
No automatic journal entry is created; new documents get GL status “Not required”. Actions that cannot work without a journal entry are refused: cash advance payout/settlement, bank transfers, adjustments and payments recorded from a bank statement line. Payroll skips its GL posting.
Screens, documents and reports affected
Journal, every report built on the ledger (P&L, balance sheet, cash flow, cost-center P&L), bank reconciliation, cash advances, payroll accounting, procurement notices.
Caveats
Keep it on. The switch is locked on the ERP Group and Accounting settings pages; the setup assistant can still change it. Manual journal entries are still allowed while off. Documents created while off are NOT posted back when you turn it on again — there is no catch-up run. Existing entries are untouched.
Intercompany Transactions
A sales invoice may name another group company as its counterpart (a matching bill is created there), and assets can be transferred between group companies. Off: both are rejected and hidden on the forms.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
finance.intercompany | Off | /finance/settings | — |
How it works
Lets a sales invoice name another company of the same group as its counterpart — on save, a matching bill is created in the counterpart company in the same transaction and linked in the document chain — and lets assets be transferred between group companies.
When ON
The Intercompany section appears on the invoice form and the intercompany option on asset transfers; the counterpart bill is created automatically (fail-closed: no invoice without its bill).
When OFF
Intercompany invoices and new intercompany asset transfers are rejected (feature disabled), and the options are hidden on the forms.
Screens, documents and reports affected
Sales invoice create, counterpart company bills, asset transfers, document chain.
Caveats
New companies have this on. The counterpart cannot be the same company, and an intercompany invoice cannot carry a header discount. Turning it off leaves existing intercompany invoices, their bills and asset transfers already pending unchanged (pending transfers can still be approved or rejected).
Internal charge approval
Internal charges go Draft → Submit → Approve → Posted. Off: posted on create.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
finance.internal_charge_approval | Off | /accounting/settings | Internal charges (finance.internal_charges) |
How it works
Adds an approval step to internal charges: Draft → Pending approval → Posted (or Rejected). The approval workflow for internal charges applies if one is active; otherwise the charge waits for a direct approval.
Conditions for it to take effect
Requires Internal charges.
When ON
Charges are created as drafts; Submit sends them to Pending approval; approval posts the entry. The maker cannot approve their own charge. A rejected charge keeps its lines and can be edited and resubmitted.
When OFF
Charges post on create (unless saved as draft — the form does this for an empty charge you will fill by time pull); submitting a draft posts it immediately.
Screens, documents and reports affected
Internal charge form and detail, approvals inbox, workflow.
Caveats
Approvers need the internal charge approval permission. Allocation runs also create drafts while this is on — submit each generated charge. Turning it off does not post charges already pending — they still need to be approved or rejected.
Internal charges
Recharge between cost centres at an internal price. Journals are excluded from statutory company P&L.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
finance.internal_charges | Off | /accounting/settings | Cost Centres (finance.cost_center) |
How it works
Managerial recharge between cost centers at an internal price: the provider cost center is credited, the receiver debited (labor, material and equipment lines can use their own mapped accounts). Entries are tagged as internal charges and excluded from the statutory company P&L; cost-center P&L shows them as internal revenue/expense.
Conditions for it to take effect
Requires Cost centers. Map the internal charge accounts in account mapping first — posting without them is rejected.
When ON
Accounting → Internal charges: create, edit, submit, void charges, manage internal services and allocation rules, run allocations.
When OFF
Every write on charges, services and rules is refused with an error naming the toggle that is off. Lists, details and exports stay readable. The menu item is hidden.
Screens, documents and reports affected
Internal charges, internal services, allocation rules, cost-center P&L, journal, labor rate card and time pull (child toggles).
Caveats
Labor rate card and Internal charge approval require this toggle. Stock transfers between two cost centers post an internal-charge entry only while this is on; when off they post an ordinary transfer entry. Turning it off keeps posted charges and their entries. Charges already created can still be finished while it is off: rejected, voided (reverses the entry), deleted as drafts, and approval decisions from the approvals inbox are still recorded; only creating, editing and approving directly need the toggle.
Internal labor rate card
Price labor lines on internal charges from a standard cost per hour by position and level. Not derived from payroll — Accounting maintains it.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
finance.internal_labor_rate_card | Off | /accounting/settings | Internal charges (finance.internal_charges) |
How it works
Prices labor lines from a standard internal cost per hour maintained by Accounting (not from payroll). The card is chosen by the employee’s position, then level, then a company default, valid on the charge date (each card has an effective window; active cards cannot overlap). Amount = hours × rate × the factor of the rate kind (normal, overtime… from HR overtime rules).
Conditions for it to take effect
Requires Internal charges.
When ON
The Rate cards tab and the Labor line type appear; labor lines take the card rate unless a unit price is typed (then marked manual).
When OFF
Rate cards cannot be listed, created or edited, and a labor line is refused. Material and equipment lines still work.
Screens, documents and reports affected
Internal charges (charge form, rate cards tab, labor economics), time pull, rate kinds.
Caveats
A card in a currency other than the charge currency is rejected — no conversion. Turning it off does not reprice stored lines and existing drafts can still be posted, but editing a draft that has a manual labor line fails. Labor line without a rate card and Pull approved time require this toggle.
Labor line without a rate card
Required: a labor line with no rate card covering the position/level is rejected, even with a typed price. Fallback: a typed unit price is accepted and marked manual.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
finance.internal_rate_card_policy | fallback_manual | /accounting/settings | Internal labor rate card (finance.internal_labor_rate_card) |
How it works
Decides what happens to a labor line when no rate card covers the employee’s position/level on the charge date.
Conditions for it to take effect
Only read when Labor rate card is on.
When ON
Required: such a line is rejected, even if a unit price is typed. When a card exists, a typed price still overrides it and is marked manual.
When OFF
Fallback (default): a typed unit price is accepted and marked manual; a line with neither card nor price is rejected.
Screens, documents and reports affected
Labor lines on internal charges.
Caveats
Changing the option does not touch stored lines, but editing a draft re-checks its labor lines under the new option. The time pull never uses manual prices: employees without a card are skipped with a warning.
Multi-Currency
Documents may use a foreign currency; the exchange rate is stamped from the document date. Off: invoices, bills, orders, quotations and expenses must use the company currency.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
finance.multi_currency | Off | /accounting/settings | — |
How it works
Lets a document carry a currency other than the company base currency. The exchange rate is taken from the rate table on the document date and stamped on the document.
When ON
Invoices, bills, purchase orders, sales orders, quotations, expenses, credit notes, purchase requests and on-account payments accept a foreign currency; a missing rate for that date is rejected rather than defaulted to 1.
When OFF
Those documents must use the base currency — a foreign currency is rejected on create and on update of currency or rate.
Screens, documents and reports affected
Sales, purchasing and expense forms, open-document import, exchange rates page, FX risk page (shows a notice while off).
Caveats
New companies have this on; existing companies keep their stored choice. Turning it off keeps foreign-currency documents already stored, and they can still be paid (a payment settling documents follows their currency). Not checked by this toggle: invoices generated from a quotation, sales order, delivery order or service document (they copy the source currency). The currency picker on invoice and bill forms stays visible; the error appears on save.
Parent/child budget cap
Approved child budgets (department, cost centre, project) must fit inside the linked parent budget per category and month. Warn records the excess in the approval trail; Block rejects submit/approve until it fits. Off = no check.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
finance.budget_hierarchy_cap_mode | off | /accounting/settings | Budget Control (finance.budget_control) |
How it works
Checks that an approved child budget (department, cost center, project) fits inside its linked parent budget, per budget category and month — both child over parent and parent lowered below its children. Runs on plan submit/approve and on budget entries (supplements, reallocations) after applying their changes.
Conditions for it to take effect
Requires Budget control — while it is off the check does not run.
When ON
Warn: the excess is recorded in the approval trail and the budget page shows a banner and cell hints. Block: submit/approve (or the entry) is rejected until it fits.
When OFF
Off (default): no check.
Screens, documents and reports affected
Accounting → Budgets (plan detail, submit/approve), budget entries.
Caveats
Only compared when the parent is approved; rows without a budget category are not compared. If the check itself fails it lets the action through (logged). Switching modes does not re-check budgets already approved.
Payment Approval Threshold
Outgoing payments of this amount or more need approval. 0 means every outgoing payment needs approval. Only applies while “Require Approval for Outgoing Payments” is on.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
finance.payment_approval_threshold | 0 | /settings/erp-configuration | Require Approval for Outgoing Payments (finance.payment_approval_required) |
How it works
Minimum amount at which a payment is held for approval. The comparison is “at or above” (equal is held) and uses the company’s base currency.
Conditions for it to take effect
Only takes effect when Require payment approval is on.
When ON
Payments whose base-currency value is at or above the threshold need approval; smaller ones post immediately.
When OFF
0 means every payment needs approval while the approval gate is on.
Screens, documents and reports affected
Every payment path the payment approval gate holds (vendor payments, payment runs, employee payouts).
Caveats
One threshold for all payment types. Foreign-currency payments without an exchange rate are always held. An invalid or negative value is treated as 0 (hold everything).
Payment Terms
Invoices carry payment terms (e.g. Net 30) and a due date. Off: the payment term sent when creating an invoice is dropped; the due date is kept.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
finance.payment_terms | On | /finance/settings | — |
How it works
When creating a sales invoice, decides whether the payment term entered on the form is kept.
When ON
The invoice stores the payment term and due date from the form (the form suggests Net 30 and today + 30 days). The due date drives overdue status and receivables aging.
When OFF
On invoice create, the payment term is dropped; the due date entered is still saved, so overdue and aging keep working.
Screens, documents and reports affected
Sales invoice create (Invoices page).
Caveats
The due date is not calculated from the term — both are entered on the form. Only manual invoice create reads this toggle: editing an invoice, invoices generated from quotations, sales orders, delivery orders, service or projects, recurring invoices, opening balances and sync still keep terms. Bills, purchase orders, sales orders and quotations are not affected. Stored values are kept when you turn it off.
Pull hours from timesheets
Build labor lines from approved hours of the provider department: project time logs, general time entries, overtime records, ticket timesheets; also machine hours. Each entry is recharged once.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
finance.internal_charge_timesheet_pull | Off | /accounting/settings | Internal labor rate card (finance.internal_labor_rate_card) |
How it works
On a draft manual charge, builds labor lines from approved hours of the provider cost center’s department for a period. Sources: project time logs (hours worked, excluding hours moved to overtime records), general time entries, approved/paid overtime records, ticket timesheets, and machine hours. Each pulled entry is linked to the charge and cannot be recharged again.
Conditions for it to take effect
Requires Labor rate card (machine-hour pull works without it).
When ON
The Pull time action appears on draft charges; lines are grouped by employee, project, rate kind and card, priced by the card valid on each work date.
When OFF
Pulling time is refused.
Screens, documents and reports affected
Internal charge detail (Pull time dialog), unrecharged time tab, project time logs (shown as recharged), source time records.
Caveats
The provider cost center must be linked to a department, and that department must not be shared by another active cost center — otherwise nothing is pulled (a warning explains why). Employees are matched by their current department. Employees without a rate card are skipped with a warning. Voiding or deleting the charge releases the pulled entries; rejecting it does not. While pulled, the source time cannot be undone (rejecting a ticket timesheet, voiding a field job). Turning it off keeps lines already pulled.
Require Approval for Outgoing Payments
An outgoing payment at or above the threshold is held for approval: no journal entry, no bank balance change and no reduction of what you owe until it is approved. Off by default — money in (receipts) is never held.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
finance.payment_approval_required | Off | /finance/settings | — |
How it works
Outgoing payments at or above the threshold are held as Pending approval instead of posting immediately. While pending: no journal entry, no bank balance change, no reduction of accounts payable. On approval the payment is posted through the same original write path.
When ON
Held: vendor/outgoing payments (Payments page, bill payments, AP payment runs, AI assistant), and payouts to employees (expense mark-paid, cash-advance payout, settlement payout). Pending payments show on the “Pending approval” tab and the “Employee payouts” block of the Payments page.
When OFF
Every payment posts immediately, as before.
Screens, documents and reports affected
Payments, bills, AP payment runs, expenses, request cash advances and settlements, workflow inbox, payment approval notifications.
Caveats
RECEIPTS (customer payments, employee refunds) are never held. Approvers need payment approval permission; the maker (and for employee payouts, the beneficiary) cannot approve. A sample approval workflow exists for payments; without one, payments wait for manual approval. Employee payouts are approved manually only for now. Payments recorded from a bank statement line are not held (the money already moved — the reason is stamped). Payroll is not covered. Turning the toggle off does not release payments already pending — they must still be approved, rejected or withdrawn.
Require Reason to Void
Voiding an invoice, bill, payment, credit note, expense, purchase order, vendor return or posted debit note requires a reason.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
finance.void_requires_reason | On | /accounting/settings | — |
How it works
Requires a non-empty reason when voiding or cancelling selected finance and purchasing documents.
When ON
A reason is required to void a sales invoice, bill, payment, credit note or expense, to void a vendor return, to cancel a purchase order, and to cancel a debit note that was already posted. An empty reason is rejected.
When OFF
Those documents can be voided/cancelled without a reason.
Screens, documents and reports affected
Detail pages of invoices, bills, payments, credit notes, expenses, purchase orders, vendor returns and debit notes.
Caveats
Some voids always need a reason regardless of this toggle (journal entries, internal charges, service confirmations, individual services, goods receipts/issues and others). POS has its own toggle. The reason box on the void dialog is marked required while this is on. The reason is stored on the document. Past voids are unaffected.