Configuration
PRIMA Bookkeeper keeps the settings and records for one business in the .prima-bookkeeper folder of your workspace. None of these files holds a credential, so you and your agent can read them.
The Files
Section titled “The Files”| File | What it holds |
|---|---|
business.json |
The business, its bank accounts, its ledger connection and account map, and its document sources |
rules.json |
The classification rules, which grow from your decisions |
suppliers.json |
A profile for each supplier, which grows from each confirmed invoice |
bookkeeper.sqlite |
The store of bank lines, proposals, batches, postings, documents and the audit log |
init writes business.json, and the commands write the other three. The setting PRIMA_BOOKKEEPER_CONFIG points the MCP server at a business.json in another place, and the -c option does the same for a terminal command.
The Business
Section titled “The Business”| Field | What it sets |
|---|---|
name |
The business name |
jurisdiction |
The jurisdiction pack, such as IE |
vatRegistered and vatNumber |
Whether the business is registered for VAT, and its number |
accountingBasis |
invoice or cash receipts |
returnPeriod |
The VAT return period, such as bimonthly or fourmonthly |
fiscalYearStartMonth |
The month the financial year starts, from 1 to 12 |
posts.purchases and posts.sales |
Whether the tool posts payments out, and whether it posts money in as sales |
Bank Accounts
Section titled “Bank Accounts”Each entry in bankAccounts is one bank account mapped to one bank account in your ledger.
| Field | What it sets |
|---|---|
id |
Your name for the account, such as aib-current |
provider |
revolut, gocardless or csv |
accountIds |
The provider’s ids for the account. Revolut pockets that share one ledger account all go here |
ledgerBankAccountId |
The bank account in your ledger it posts to |
csvFormat |
The CSV profile for a CSV-fed account, saved by csv-inspect --save |
Ledger
Section titled “Ledger”| Field | What it sets |
|---|---|
provider |
sage, xero, quickbooks or freshbooks |
businessId |
The ledger’s business, tenant, account or company id |
taxRateMap |
Which of your ledger’s tax rates stands for each rate in the pack |
accountMap |
Which ledger account stands for each account code in the pack |
bankFeeContactId |
On Sage, the supplier contact that bank and currency charges post against |
Documents
Section titled “Documents”| Field | What it sets |
|---|---|
sources |
The folders, drop folder and mailboxes to collect from |
ownAddresses |
The business’s own mail addresses and domains, never taken for a supplier’s |
archiveRoot |
The one folder every document is filed into |
priorYears |
invoice_year or current_year_tagged for invoices from an earlier year |
matching |
How far a document date may sit from the bank date, and the tolerance for currency and card-fee differences |
policy |
Which kinds of payment and which account codes never need a document |
Invoices and Receipts explains each source type and the filing rule.
How Rules Learn
Section titled “How Rules Learn”Rules run in priority order, with your own rules first and the jurisdiction pack’s supplier defaults after. When you decide an unknown line with decide, the tool records a rule for that supplier. The tool then places the next payment to them without a question. You can read and edit rules.json directly.
Supplier Profiles
Section titled “Supplier Profiles”Each supplier your rules name gets a profile in suppliers.json. Every confirmed invoice adds what it shows, such as the legal entity, VAT number, rates, currency, usual amount and the usual gap between invoice and charge. The tool checks each new invoice against the profile, and the invoice itself still governs.

