Moving accounting to Odoo: SKR04 mapping, opening balance, balance reconciliation

How the old chart of accounts is mapped cleanly, and why opening balance and asset register come before the first month-end close.

8 min read ERP rollout and operations

The bookkeeper at a mid-sized company still has the legacy system open, while the first test entries are already in Odoo. Management asks when real bookings will start. Then the problems surface: legacy accounts don't map cleanly to SKR04, the opening balances don't match the last trial balance (Summen- und Saldenliste), and nobody knows which version is the valid one. The result is follow-up questions to the tax advisor, duplicate correction entries, and a first month-end close that takes days longer than necessary.

This article walks you through the three steps that should come before the first month-end close: account mapping, the opening balance sheet, and ongoing reconciliation against the trial balance.

Mapping Legacy Accounts to SKR04

Situation: You have exported a chart of accounts from the legacy system. Some of it follows SKR03, and some consists of custom accounts that have accumulated over the years. SKR04 is the standard chart of accounts built on the balance sheet classification scheme (SKR03 follows the process classification principle). Mapping by account number alone therefore doesn't work.

Here is how to proceed:

  1. Export all accounts with a balance or movement, not just those currently in use. An account that was posted to in the previous year can still provide a comparison value.
  2. Map each legacy account by content, not by number: What is posted here, what tax logic is attached, and which balance sheet or income statement (P&L) item does it belong to?
  3. Maintain a mapping table with columns for legacy account, description, SKR04 account, tax code, and remarks.
  4. Flag special cases: collective accounts, accounts with mixed tax treatment, and accounts that only one employee understands.
  5. Have your tax advisor review the table before you create anything in Odoo.

Decision rule: If several legacy accounts feed into one SKR04 account, check whether you still need the distinction. If you do (for example, for reporting), model it through cost centers or analytic accounts, not through additional general ledger accounts. If a legacy account has to be split across several SKR04 accounts, clarify in advance by which rule the balances will be divided.

Odoo comes with SKR03 and SKR04 charts of accounts. In Simplify-ERP, you create the receivable and payable accounts for individual customers and suppliers with one click on the contact. You therefore don't need to prepare a list of debtors and creditors in advance; your mapping table can focus on the general ledger accounts.

Clean Up Master Data Before the Balances Arrive

Situation: The account export contains customers and suppliers with no activity for years, and duplicates with slightly different spellings. If you carry them over, you will later have to correct every open items list by hand.

Check these questions before the transfer:

  • Which customer and supplier accounts have open items or movements within the statutory retention period?
  • Are there duplicates where open items are split across two accounts?
  • Do contacts have the complete details you need for invoices and payments?

Rule: Clean up before you import. Deleting a duplicate in the source file takes a minute; in the live system, it takes a reclassification entry with supporting documentation. The same applies to Excel and legacy systems: first map the columns and check the rows, then write to Odoo.

Creating the Opening Balance Sheet

Situation: The legacy system's annual financial statements are done, or at least the trial balance as of the cutoff date. Now the opening balances need to go into Odoo.

The process:

  1. Set the cutoff date. The start of the fiscal year is the usual choice. If you switch mid-year, you also need the balances up to the switchover date; clarify with your tax advisor whether you will carry over opening balances as of the start of the year plus monthly turnover, or only an interim balance.
  2. Transfer the general ledger balances from the trial balance into an opening entry, using the mapping table.
  3. Transfer open items individually: each open customer invoice and each open supplier invoice with document number, date, and remaining amount. The balance of the customer and supplier accounts then results from the individual items.
  4. Check the totals: debits must equal credits, and the sum of open items must match the balance of the respective collective account.
  5. Treat fixed assets separately. Fixed asset accounting needs the acquisition date, acquisition cost, and accumulated depreciation to date for each asset. The fixed asset register must match the asset accounts in the balance sheet.
  6. Have your tax advisor countersign the opening balance sheet before you allow real postings in the new period.

Decision rule: If the previous year's financial statements are not yet final, book the opening entry as provisional and plan for the adjustment instead of waiting. If the final statements then bring changes, you need a fixed procedure for them: Who books the difference, and who documents it?

Why this comes before the first month-end close: A month-end close based on incorrect opening balances compares errors with errors. Finding the cause later becomes laborious.

Parallel Phase and Monthly Balance Reconciliation

Situation: The legacy system is still running in parallel, or your tax advisor continues to keep the books in their own system. At month-end, both sides should show the same figures.

Reconciliation is a fixed monthly appointment, not an event triggered by anomalies. A pattern from the replacement of large legacy systems illustrates this: there, the data import is reconciled against the trial balance every month, so that deviations are noticed in the month they arise.

Your monthly routine:

  1. Pull the trial balance from Odoo for the closed month.
  2. Place it next to the other side's list, that is, the legacy system or the tax advisor.
  3. Compare the balances account by account. Only differences matter.
  4. Classify each difference: timing shift (the document falls in a different month), incorrect account assignment, missing document, wrong tax code, or error in the opening balances.
  5. Document the cause and the correction in a reconciliation list.
  6. Close the month only when every difference is explained.

Check questions for customer and supplier accounts: Does the sum of open items match the balance of the collective account? If not, the cause is often an entry without a partner assigned, or a document posted directly to the collective account.

Bank reconciliation also belongs in this appointment: after unallocated payments, the bank account balance in the accounting system must match the bank statement. With bank statements available directly in the system, for example via EBICS (a standard for data exchange with banks), the effort goes down. Some manual matching remains, however, for batch transfers and unclear payment references.

Define the Data Flow to Your Tax Advisor

Situation: Your tax advisor expects data in the usual format, such as a DATEV export (DATEV is the widely used exchange format for accounting data). If the format changes with the switch, questions will come up in the first month.

Clarify in advance:

  • Which format does the tax advisor need, and at what interval?
  • Who checks the first export before it is sent?
  • How are documents transmitted when they belong with the booking?
  • Which requirements for proper bookkeeping (GoBD) apply to change logs and archiving? Ask your tax advisor which of these they check.

PowerOn Accounting offers DATEV export, SKR03/SKR04, and GoBD-compliant accounting. If you work with other software, ask it the same questions.

Rule: Run a test export for a test month and have your tax advisor import it before the first real month comes up.

Where the Move Typically Gets Stuck

The situations above point to four stumbling blocks:

  • Shop integration: When orders from a shop such as Shopware or Shopify arrive in Odoo, revenue accounts and tax codes must be mapped in advance by country and tax rate. Otherwise, shop revenue ends up in a collective account that you have to split later. Ask: Which revenue account belongs to which product and tax type?
  • Version upgrade: If you later move Odoo to a newer version, you need the account mapping and the reconciliation list as a reference. With them, you can check in a single pass after the upgrade whether the balances are unchanged. Do a balance reconciliation before the upgrade and a second one after.
  • Company-wide search: When colleagues search for documents, contracts, and bookings across all modules, it helps in clarifying differences. This requires documents to be attached to the transaction, not stored in folders. Check whether every document is assigned to a booking.
  • No-code AI automation: When incoming invoices are read automatically and pre-coded, the automation suggests accounts. Specify that a person confirms the account assignment as long as your mapping table still has gaps. An incorrect account assignment in an automated process repeats with every invoice.

Companies with special circumstances also need the mapping in advance, for example a solar PV business that runs sales, projects, inventory, and accounting in one software. Project costs and stock movements must flow to clearly defined accounts and cost centers; otherwise, the trial balance cannot be analyzed.

Checklist Before the First Month-End Close

  • The mapping table from legacy accounts to SKR04 is complete and has been reviewed by the tax advisor.
  • Master data is cleaned up and duplicates are resolved.
  • The opening entry is balanced; open items match the collective accounts.
  • The fixed asset register matches the asset accounts.
  • The test export to the tax advisor has been imported.
  • The date and the responsible people for the monthly balance reconciliation are set.
  • There is a reconciliation list in which every difference has a cause.

Your Next Step

Take the current trial balance of your legacy system and mark every account for which you cannot say in one sentence which SKR04 account it belongs to. This list is your agenda for the first conversation with your tax advisor, and it shows how much preparatory work is still missing before the first month-end close in Odoo.

All knowledge articles