Accounting

Ledger and reports

MarketplaceFinanceVersion 0.1.0manifest

What it is for ​

A chart of accounts, journals, tax rates, journal entries with debit and credit lines, fiscal periods and bank statement lines. Nothing is computed for you: balancing and tax amounts are the responsibility of whoever enters them. Posting and closing need approval.

What the package does and does not do ​

Chart of accounts, journals, tax rates, journal entries with debit and credit lines, fiscal years and periods, and bank statement lines. Amounts are money fields in minor currency units and tax rates are numbers in basis points (2000 means 20.00 percent). Nothing is computed: balancing of debits and credits, tax amounts and entry numbers are the responsibility of whoever enters them. Posting an entry and closing a period or fiscal year need a human approval and the stricter accounting.approver group; agents may only propose them.

Models ​

accounting_account ​

An account of the chart of accounts

Read group: accounting.user. Write group: accounting.manager.

FieldKindData classPersonal dataGroupAgents seeDescription
codetextnonenoaccounting.userin clearAccount code as used in the chart, for example 400000
nametextnonenoaccounting.userin clearAccount name, for example Trade receivables
account_typeselect (asset_receivable, asset_cash, asset_current, asset_fixed, liability_payable, liability_current, liability_non_current, equity, income, income_other, expense, expense_direct_cost)nonenoaccounting.userin clearType of account: asset_receivable, asset_cash, asset_current, asset_fixed, liability_payable, liability_current, liability_non_current, equity, income, income_other, expense, expense_direct_cost
reconcileboolnonenoaccounting.userin clearWhether open items on this account can be reconciled (receivable, payable, bank clearing)
deprecatedboolnonenoaccounting.userin clearWhether the account is closed to new postings
notelongtextnonenoaccounting.userin clearInternal remarks about how the account is used

accounting_journal ​

A journal that groups entries of one kind (sales, purchases, bank, cash, miscellaneous)

Read group: accounting.user. Write group: accounting.manager.

FieldKindData classPersonal dataGroupAgents seeDescription
nametextnonenoaccounting.userin clearJournal name, for example Customer invoices
codetextnonenoaccounting.userin clearShort code used in entry numbers, for example INV
kindselect (sale, purchase, cash, bank, general)nonenoaccounting.userin clearWhat the journal records: sale, purchase, cash, bank, general
default_account_idref → accounting_accountnonenoaccounting.userin clearDefault account for entries of this journal (the bank account for a bank journal)
currencytextnonenoaccounting.userin clearISO 4217 currency code of the journal, for example EUR; empty means the company currency
activeboolnonenoaccounting.userin clearWhether the journal can still receive entries

accounting_tax ​

A tax rate that entry lines can refer to

Read group: accounting.user. Write group: accounting.manager.

FieldKindData classPersonal dataGroupAgents seeDescription
nametextnonenoaccounting.userin clearTax name, for example VAT 20% sales
rate_bpnumbernonenoaccounting.userin clearRate in basis points: 2000 means 20.00 percent, 550 means 5.50 percent
scopeselect (sales, purchases, none)nonenoaccounting.userin clearWhere the tax applies: sales, purchases, none
price_includedboolnonenoaccounting.userin clearWhether prices already include this tax
tax_account_idref → accounting_accountnonenoaccounting.userin clearAccount the tax amount is booked on
activeboolnonenoaccounting.userin clearWhether the tax can still be chosen on new lines

accounting_fiscal_year ​

A fiscal year, opened and closed as a whole

Read group: accounting.user. Write group: accounting.manager.

FieldKindData classPersonal dataGroupAgents seeDescription
nametextnonenoaccounting.userin clearFiscal year name, for example FY2026
start_ondatenonenoaccounting.userin clearFirst day of the fiscal year (YYYY-MM-DD)
end_ondatenonenoaccounting.userin clearLast day of the fiscal year (YYYY-MM-DD)
stateselect (open, closed)nonenoaccounting.userin clearFiscal year status: open, closed

accounting_period ​

An accounting period (normally a month) inside a fiscal year

Read group: accounting.user. Write group: accounting.manager.

FieldKindData classPersonal dataGroupAgents seeDescription
fiscal_year_idref → accounting_fiscal_yearnonenoaccounting.userin clearThe fiscal year the period belongs to
nametextnonenoaccounting.userin clearPeriod name, for example 2026-03
start_ondatenonenoaccounting.userin clearFirst day of the period (YYYY-MM-DD)
end_ondatenonenoaccounting.userin clearLast day of the period (YYYY-MM-DD)
stateselect (open, closed)nonenoaccounting.userin clearPeriod status: open, closed

accounting_move ​

A journal entry: a dated set of debit and credit lines in one journal

Read group: accounting.user. Write group: accounting.user.

FieldKindData classPersonal dataGroupAgents seeDescription
journal_idref → accounting_journalnonenoaccounting.userin clearThe journal the entry belongs to
datedatenonenoaccounting.userin clearAccounting date of the entry (YYYY-MM-DD)
numbertextnonenoaccounting.userin clearEntry number such as INV/2026/0001. Free text: packages cannot generate sequences, so whoever posts the entry assigns the next number by hand and keeps the series gapless
referencetextnonenoaccounting.userin clearExternal reference, for example the supplier's invoice number
partner_idref → partynonenoaccounting.userin clearThe contact the entry is about
narrationlongtextnonenoaccounting.userin clearFree-text note about the entry
stateselect (draft, posted, cancelled, reversed)nonenoaccounting.userin clearEntry status: draft, posted, cancelled, reversed

accounting_move_line ​

One debit or credit line of a journal entry

Read group: accounting.user. Write group: accounting.user.

FieldKindData classPersonal dataGroupAgents seeDescription
move_idref → accounting_movenonenoaccounting.userin clearThe journal entry the line belongs to
account_idref → accounting_accountnonenoaccounting.userin clearThe account the line is booked on
partner_idref → partynonenoaccounting.userin clearThe contact the line is about
labeltextnonenoaccounting.userin clearLine description
debitmoneyfinancialnoaccounting.userwithheldDebit amount in minor currency units; 0 when the line is a credit
creditmoneyfinancialnoaccounting.userwithheldCredit amount in minor currency units; 0 when the line is a debit
tax_idref → accounting_taxnonenoaccounting.userin clearTax the line carries, if any
due_ondatenonenoaccounting.userin clearDue date for receivable and payable lines (YYYY-MM-DD)
reconciledboolnonenoaccounting.userin clearWhether the line has been matched against a payment

accounting_bank_statement_line ​

A line of a bank statement waiting to be matched to entries

Read group: accounting.user. Write group: accounting.user.

FieldKindData classPersonal dataGroupAgents seeDescription
journal_idref → accounting_journalnonenoaccounting.userin clearThe bank journal the statement belongs to
datedatenonenoaccounting.userin clearBooking date at the bank (YYYY-MM-DD)
labeltextnonenoaccounting.userin clearPayment reference or description as the bank reports it
amountmoneyfinancialnoaccounting.userwithheldAmount in minor currency units; positive for money in, negative for money out
counterparty_nametextfinancialyesaccounting.userwithheldName of the payer or payee as the bank reports it
counterparty_ibantextfinancialyesaccounting.userwithheldBank account of the payer or payee
move_line_idref → accounting_move_linenonenoaccounting.userin clearThe entry line this statement line was matched to
stateselect (unmatched, matched, reconciled)nonenoaccounting.userin clearMatching status: unmatched, matched, reconciled

Workflows ​

accounting_fiscal_year ​

ActionMovesWho may run itApproval
accounting_fiscal_year.closestate: open → closedaccounting.approveryes
accounting_fiscal_year.reopenstate: closed → openaccounting.approveryes

accounting_period ​

ActionMovesWho may run itApproval
accounting_period.closestate: open → closedaccounting.approveryes
accounting_period.reopenstate: closed → openaccounting.approveryes

accounting_move ​

ActionMovesWho may run itApproval
accounting_move.poststate: draft → postedaccounting.approveryes
accounting_move.cancelstate: draft → cancelledaccounting.userno
accounting_move.reversestate: posted → reversedaccounting.approveryes

accounting_bank_statement_line ​

ActionMovesWho may run itApproval
accounting_bank_statement_line.matchstate: unmatched → matchedaccounting.userno
accounting_bank_statement_line.reconcilestate: matched → reconciledaccounting.managerno
accounting_bank_statement_line.unmatchstate: matched → unmatchedaccounting.userno

Permission groups ​

Groups used by this app:

  • accounting.approver
  • accounting.manager
  • accounting.user

Approval steps ​

Steps an agent can only propose:

  • accounting_fiscal_year.close
  • accounting_fiscal_year.reopen
  • accounting_period.close
  • accounting_period.reopen
  • accounting_move.post
  • accounting_move.reverse

What agents can and cannot do ​

An agent can read, search, create and update records of this app, and run the actions that need no approval, within the permission groups of its token.

It can only propose these steps, and a person must approve them: accounting_fiscal_year.close, accounting_fiscal_year.reopen, accounting_period.close, accounting_period.reopen, accounting_move.post, accounting_move.reverse, accounting_account.delete, accounting_journal.delete, accounting_tax.delete, accounting_fiscal_year.delete, accounting_period.delete, accounting_move.delete, accounting_move_line.delete, accounting_bank_statement_line.delete.

These fields are withheld from agents entirely: accounting_move_line.debit, accounting_move_line.credit, accounting_bank_statement_line.amount, accounting_bank_statement_line.counterparty_name, accounting_bank_statement_line.counterparty_iban.

Dependencies ​

  • base

Install ​

Install it from the Customize app (Marketplace), or from the command line:

bash
obop modules install-from accounting

Needs a database and administrator rights.

Build your own ​

The module guide shows how apps like this one are written