Accounting

Availableapp.erp.io/accounting/banks

Bank feeds

Transactions arrive, sit in a staging area, get categorised by rule or by hand, and only then reach the ledger. The staging step is what makes a feed safe.

Path
Feed → transactions → rules → ledger
Import
Feed or file
Duplicates
Detected on ingest
Posts automatically
Only via a rule you wrote

The path a transaction takes

It arrives

From a connected feed or an uploaded statement file. Nothing is posted at this point.

It lands in Transactions

A staging area at /accounting/transactions. This is the buffer that makes everything else recoverable.

A posting rule may claim it

If you have written a rule that matches, it is categorised deterministically and no one is asked.

Otherwise it is proposed

An agent suggests a category with a confidence. You accept, change it, or write a rule so it never asks again.

It posts to the ledger

As a journal entry, with the bank account on one side and the category on the other.

Reconciliation ties it to a document

Matching the posting to the invoice or bill it settles. See Reconciliation.

app.erp.io/accounting/transactions
Transactions

Bank — current · 42 to review

Import fileRules
To review42Posted318Excluded
DateDescriptionAmountSuggestedSource
12 MarSTRIPE PAYOUT+2,481.20Card settlementRule
12 MarAWS EMEA−418.55HostingRule
11 MarHARBOUR LOGISTICS+8,400.00Invoice INV-1042Match 96%
11 MarBP CONNECT SW11−72.40Motor expensesAI 71%
10 MarTFR REF 88213−1,000.00UnclearNone
The staging area. Nothing here has touched the ledger yet.

The five ways a feed double-counts

Every one of these has happened to somebody, and each produces a ledger that looks plausible and is wrong. They are worth reading once before you connect anything.

  1. Feed plus file. A connected feed and an uploaded statement covering the same dates. The transactions are identical but arrive by different routes.
  2. Overlapping file ranges. Two statement uploads whose date ranges overlap by a day.
  3. Re-connecting an account. A reconnection that re-fetches history already imported.
  4. A processor payout and its underlying sales. The payout lands in the bank and the individual sales arrive from the sales channel. Both are real; only one is income. See Commerce.
  5. A transfer between your own accounts. It appears twice — once as money out, once as money in — and if both are categorised as income and expense rather than as a transfer, revenue and costs both inflate.

The module detects exact duplicates on ingest and flags near-duplicates for review. The two it cannot detect by itself are the last two, because both legs are genuinely different transactions. Categorise transfers as transfers, and treat processor payouts as settlement rather than income.

Reconcile to the bank statement, not to the feed

A feed is a copy. The closing balance on the statement is the fact. If the module's balance and the statement disagree, the feed is missing something or holding something twice — do not adjust the ledger to match the feed.

Posting rules

A posting rule matches on the description, the amount, the direction or the counterparty and applies a category deterministically. Rules are the mechanism that turns a monthly categorising chore into a weekly glance, and they reduce classification spend at the same time, because a transaction a rule claims is never sent to a model.

  • Write a rule the second time you categorise the same thing, not the tenth.
  • Rules run before the agent, so a rule always wins.
  • A rule can post to a dimension as well as an account.
  • Rules are visible and editable at /accounting/posting-rules — they are not a black box.

What this does not do

Not every bank has a feed

Coverage depends on the provider. Where there is no feed, statement upload is the supported path.

No automatic posting of unmatched items

A transaction nothing matches waits for a person. That is deliberate.

No multi-currency bank accounts

An account is held in one currency.

No cheque or lockbox handling

There is no cheque-scanning or lockbox integration.

Questions

How far back does a feed import?

Depends on the provider, typically 90 days to two years. Older history is a file import.

What if a transaction is categorised wrongly?

Change it. If it has already posted, the change is a journal entry and the audit trail shows both.

Can we exclude personal transactions?

Yes — exclude them in the staging area and they never post.