Skip to content

Accounting

1. Purpose

Accounting is the financial backbone of NestERP. It records every sale, purchase, payment and adjustment as a double-entry journal entry, produces the customer invoices and vendor bills, calculates VAT, and holds the chart of accounts that every other module posts into.

Almost nothing else in NestERP is financially meaningful without it. Payroll posts salary journal entries here. Inventory posts stock valuation here. Purchase approvals, sales and customer invoicing all end as entries in this module.

We do not deploy the bare Invoicing app — read this before quoting a client

In Odoo Community, account on its own presents as Invoicing: invoices, vendor bills, payments, taxes, journals and the chart of accounts. The full Accounting app (account_accountant) is Enterprise. Community has no native Profit & Loss or Balance Sheet, no bank-reconciliation widget, and no asset or deferred-revenue management.

NestERP never ships the bare Invoicing app. Every deployment carries base_accounting_kit (Cybrosys), which supplies the full Accounting menu and the financial statements, plus dynamic_accounts_report (Heritage) for filterable, drill-down reports. What the client sees and works in is that combination.

So the accounting product we sell is Tier 1 and Tier 2 together, never core alone. Any proposal that says "Odoo Accounting" without naming these third-party modules is describing something we do not deploy.

2. Features

  • Customer invoices and credit notes, with sequential legal numbering that locks on posting
  • Vendor bills and refunds, with three-way matching against purchase orders and receipts
  • Double-entry journal entries for every posted document, with a full audit trail
  • Chart of accounts, configurable per company and per country
  • Journals for sales, purchases, cash, bank and miscellaneous entries
  • VAT and other tax computation, including tax groups and price-included taxes
  • Fiscal positions, to swap tax and account mappings per customer type or country
  • Payment terms, including multi-instalment schedules
  • Payment registration and partial payments, with outstanding-balance tracking
  • Multi-currency invoicing with per-journal currency and exchange-difference handling
  • Analytic accounting — cost centres and project/department cost allocation
  • Period locking, so closed months cannot be silently altered
  • Multi-company accounting with inter-company journal separation
  • Cheque printing configuration via account_check_printing

3. Where to find it

  • Menu as deployed: Accounting → Customers / Vendors / Accounting / Reporting — the Accounting root menu comes from base_accounting_kit, not from core account
  • Menu on bare core (not our deployment): Invoicing → …
  • Technical names: account, analytic, account_check_printing
  • Tier: Odoo core (Community Edition)
  • Available in: Odoo 16, 17 and 18 — required by our stack on all three

4. Modules used

Module Tier Why it is needed
account Odoo core Journal entries, invoices, bills, payments, taxes, chart of accounts
analytic Odoo core Analytic accounts and distributions — cost centres, departmental costing
account_check_printing Odoo core Cheque layout and numbering on payments
base_accounting_kit Third-party (Cybrosys) Supplies the Accounting app itself — root menu, financial statements, asset management. Always installed.
dynamic_accounts_report Third-party (Heritage) Filterable, drill-down financial reports. Always installed.
base_account_budget Third-party (Cybrosys) Budget definition and budget-vs-actual comparison
stock_account Odoo core Stock valuation entries — links Inventory to the general ledger

NestERP custom modules that build on Accounting

Module Odoo version What it adds
payroll_custom_module 17 · 18 Posts payroll journal entries; Tanzanian statutory rules
purchase_multi_approval 17 · 18 Multi-stage purchase approval before a bill is allowed
thalia_invoice_reminders 17 Tiered overdue-invoice escalation across email, WhatsApp and SMS
thalia_tra_reconciliation 17 Reconciliation of sales and purchases against TRA data — in development, do not quote as available
partner_statement 17 Customer and vendor statements, exported to Excel
direct_budget_management 17 Budget management against accounting data
sales_dashboard, thalia_mgmt_dashboard_v17 17 Management reporting drawn from accounting data

5. Configuration

Order matters. Several of these cannot be changed cleanly once transactions exist.

  1. Prerequisite — set the company country first. Settings → Users & Companies → Companies. The country determines which chart-of-accounts template and tax set Odoo offers. Getting this wrong means redoing the chart.
  2. Install the fiscal localisation / chart of accounts template. Settings → Accounting → Fiscal Localization. For Tanzanian clients confirm the package selected and whether the default VAT rate is 18%.
  3. Set the fiscal year end — Settings → Accounting → Fiscal Periods.
  4. Review the chart of accounts. Accounting → Configuration → Chart of Accounts. Add the client's own accounts and set each one's type correctly; account type drives which financial report a balance lands in.
  5. Configure journals. Accounting → Configuration → Journals. Confirm the short code and the entry sequence of each journal. Bank and cash journals need their linked account set.
  6. Configure taxes. Accounting → Configuration → Taxes. Verify the VAT rate, whether it is price-included, and the tax grids each one posts to — the tax report is only as correct as these mappings.
  7. Set default payment terms — Accounting → Configuration → Payment Terms.
  8. Enable Analytic Accounting if cost centres are needed — Settings → Accounting → Analytics. Then create the analytic plans and accounts.
  9. Enable multi-currency if the client invoices in foreign currency, and set the rate update source.
  10. Set the lock dates once the first period is closed — Settings → Accounting → Fiscal Year lock date and Tax lock date.

Configuration traps

  • Account type is not cosmetic. It decides whether a balance appears on the P&L or the Balance Sheet. A misfiled account produces reports that look plausible and are wrong.
  • Anglo-Saxon vs Continental accounting changes when cost of goods sold is recognised — on delivery versus on invoice. It is set once and must not be flipped mid-year. Anglo-Saxon requires stock_account and a costing method on each product category.
  • Journal sequences are legal numbering. Changing a posted journal's sequence creates gaps that an auditor will ask about.
  • Lock dates are the only real protection against back-dated edits. Without them, a user with accounting rights can alter a closed month.

6. How it's used

Customer invoicing

  1. Accountant — Accounting → Customers → Invoices → New. Select the customer; payment terms and fiscal position default from the customer record.
  2. Accountant — add invoice lines. Each line carries an account and a tax, defaulted from the product.
  3. AccountantConfirm. This posts the journal entry and assigns the legal sequential number. Before this point the invoice is a draft and freely editable; after it, changes require a credit note.
  4. AccountantSend & Print to deliver the invoice to the customer.
  5. Cashier / AccountantRegister Payment when money arrives. Partial payments leave a residual balance and the invoice stays Partially Paid.

Vendor bills

  1. Purchasing — raises the purchase order (see the Purchase page). On NestERP deployments this passes through purchase_multi_approval first.
  2. Accountant — Accounting → Vendors → Bills → New, or Create Bill from the confirmed purchase order so quantities and prices are inherited.
  3. Accountant — checks the bill against the receipt, then Confirm and register the outgoing payment.

Period close

  1. Accountant — reconciles bank and cash journals against statements.
  2. Accountant — reviews the tax report and files the VAT return.
  3. Accounting Administrator — sets the lock date so the period cannot be reopened.

Screenshots needed

Capture from the Thalia live instance and save to docs/assets/accounting/:

  • Invoicing dashboard showing journal cards
  • A posted customer invoice in form view
  • Chart of Accounts list view
  • Journals configuration list
  • Taxes configuration, one tax open showing its grids
  • Register Payment dialog
  • Profit & Loss report as produced by base_accounting_kit

7. Access rights

Group Can do
Billing Create, edit and post invoices and bills; register payments. Cannot change the chart of accounts or configuration.
Billing Administrator Everything above, plus manage the chart of accounts, journals, taxes, fiscal positions and lock dates.
Analytic Accounting See and set analytic distributions on documents.

Multi-company deployments restrict records by company through Odoo's standard company record rules — a user only sees journals and entries of companies in their allowed set. Branch-level restriction beyond company level requires multi_branch_base (Tier 2).

8. Version differences (16 / 17 / 18)

  • The app is labelled Invoicing in Community.
  • View definitions use attrs and states for conditional field behaviour. Any of our modules inheriting accounting views on 16 use this older syntax.
  • attrs and states are removed. Conditional behaviour moves to direct invisible, readonly and required attributes carrying Python expressions. This breaks any view inheritance carried over unchanged from 16 — it is the single most common cause of a module failing to load after a 16 → 17 upgrade.
  • Refreshed interface; menu structure largely unchanged from 16.
  • This is the version of the Thalia reference instance.
  • <tree> view elements are superseded by <list>. Our modules were corrected for this during the v18 upgrades.
  • Mail-template rendering is stricter — a template referencing a field that does not resolve now raises instead of rendering empty. This bit us during the payroll v18 upgrade.
  • editable="0" is required in places where an empty attribute previously sufficed.

9. Known limitations

  • No bank-statement reconciliation widget in Community. Reconciliation is manual through journal items. The guided reconciliation screen is Enterprise.
  • No native financial reports in Community. Profit & Loss, Balance Sheet and Cash Flow come from base_accounting_kit (Cybrosys) and dynamic_accounts_report (Heritage), both Tier 2. If either lags an Odoo release, the client loses their financial reports on upgrade — and since the kit also supplies the Accounting root menu, they lose the app layout with it. This is the sharpest upgrade dependency in the whole stack.
  • No asset or deferred-revenue management in core Community — also backfilled by base_accounting_kit.
  • No automated dunning in core. Overdue-invoice chasing is why thalia_invoice_reminders exists.
  • No TRA / EFD fiscal-device integration anywhere in Odoo. Tanzanian fiscal compliance is entirely custom work. thalia_tra_reconciliation is being built to reconcile against TRA data — never to fiscalise at device level — and it is not finished, so today this is a gap, not a feature.
  • Budgets are third-party, via base_account_budget.

Needs verification on the Thalia live instance

Written from the code and from Odoo behaviour, not yet confirmed against the running instance. Confirm each before this page is treated as final.

  • Which fiscal localisation package is installed, and the default VAT rate on it
  • Whether accounting is configured Anglo-Saxon or Continental, and the costing method set on product categories
  • The actual journal list and their short codes
  • Whether lock dates are set, and to what
  • Whether dynamic_accounts_report is installed on the live instance or only base_accounting_kit
  • Exact reconciliation workflow in use — confirm what Community 17 offers versus what the team actually does
  • Whether analytic accounting is enabled, and the analytic plan structure
  • Multi-company setup: how many companies, and whether multi_branch_base is active