Skip to content
Marko Ivanovski

Odoo for an accounting firm

A version upgrade, a database split, and employee and payroll modules for a firm keeping the books of more than 80 companies in one Odoo database.

category
client
year
2026
status
completed
role
Freelance developer
  • Odoo
  • PostgreSQL
  • Python

What it is

Freelance work on Odoo 18 for a Macedonian accounting firm that keeps the books of more than 80 client companies in a single multi-company database. The firm configures its chart of accounts and taxes by hand, in more detail than any localisation, so every module reads them from the live configuration instead of shipping its own.

The work runs from upgrading the system from Odoo 16 to 18 and tracing access errors across companies, to new employee and payroll modules built for Macedonian rules, and early work on national e-invoicing.

  • Upgraded the production system from Odoo 16 to 18, carrying the custom modules across the version break.
  • Built employee contract and payroll modules for Macedonian rules, driven by dated legal parameters so no rate or threshold is hard-coded.
  • Wrote a copy-and-prune migration script that splits a multi-company database into standalone instances without ever writing to the source.
  • Traced a partner-locking bug blocking billing across 71 companies to partners stamped with a company at import time, and applied the fix on staging.
  • Did early work on a module for the national e-Faktura e-invoicing system.

What I learnt

  1. In a multi-company database, a partner created while logged into one company is stamped with that company and hidden from the rest. That one column explained the billing errors across 71 companies.
  2. Payroll law changes over time, so legal figures live as dated parameters, and amending a contract creates a new contract record instead of editing the old one.

What I would do next

Supporting the firm after delivery as its needs change.