Skip to Content

Foreign currency revaluation at month end, in Odoo

October 29, 2026 by
Foreign currency revaluation at month end, in Odoo

An invoice issued in euro is collected three months later. Between issuing and collection the rate moves, and the difference is income or expense. The part everybody knows is that the difference is recorded on collection. The part that gets forgotten more often is that it also has to be recorded at every month end, on the balances that are still open.

For a company with ten invoices in foreign currency, the job is done by hand in an hour. For one with three hundred, it takes a day, with mistakes nobody can find again in March.

What actually gets revalued

Not everything in foreign currency, but:

  • the unreconciled lines of posted entries, held in foreign currency, on the accounts you selected;
  • the balance of every foreign-currency bank journal — the bank account itself, which also has a balance that moves with the rate.

Accounts are selected by a checkbox on the chart of accounts: Allow currency revaluation. Typically customers, suppliers, loans and advances are included; accounts that do not hold open foreign-currency balances are not.

That decision belongs to the accountant, not to the system, and that is why it is a checkbox and not a rule fixed in the program.

The rate: the first day of the following month

Here is the detail that separates an implementation that passes from one that gets argued over at every close.

Romanian practice requires balances to be valued at the BNR rate of the first day of the month following the one being closed. Not the rate of the last working day of the month, not an average, not the rate of the day you run the report.

The module uses exactly that rate. The practical consequence: the revaluation is run after that rate is available, so on the first day of the following month or later, with the closing date set to the last day of the month that ended.

What comes out: a single entry

Not a set of entries per partner or per invoice, but one single balanced journal entry, in the journal you configure (usually the miscellaneous operations journal).

The counterpart goes to the foreign exchange gain account for gains and to the loss account for losses — the ones already configured in the accounting settings, not new ones.

Every generated line is flagged as a revaluation line and keeps the link to the line it came from. That is not a technical detail: it is what lets next month's revaluation correctly reverse what the previous one did, instead of stacking one layer on another until nobody understands the balance any more.

Forced reconciliation, and when it is needed

There is a case Odoo's standard reconciliation refuses: two lines on the same side. Typically, when you want to match a payment against an earlier revaluation line.

For that there is a forced reconciliation action on journal entry lines. The recommended order:

  1. first reconcile the invoice with the payment, normally;
  2. only then force the match between the payment and the remaining revaluation line.

The reverse leads to situations that are hard to unpick, so it is worth remembering as a procedure, not as an improvisation of the moment.

The closing steps, in short

  1. Make sure all the month's documents are posted — the revaluation only looks at what is recorded.
  2. Reconcile whatever can be reconciled. The fewer lines left open, the smaller and more readable the revaluation entry.
  3. Check that the BNR rate is loaded for the first day of the following month.
  4. Run the revaluation with the closing date on the last day of the month.
  5. Open the generated entry and read it.

What to check in the generated entry

  • Is the total plausible against the movement of the rate? A euro that moved 0.5% on a balance of one million does not produce a difference of a hundred lei.
  • Are the accounts the expected ones: revalued balances on the ticked accounts, the counterpart on FX gains or losses.
  • Do the partners appear where they should, so the partner balance is not broken.
  • Did the foreign-currency bank journals come in as well, not just customers and suppliers.

And one check worth doing in the first month: take two or three actual invoices, work out the difference by hand and compare it with what the system wrote. If those match, the rest matches.

Why it is worth automating

Because revaluation is not a balance-sheet formality. It changes the result of the month, and therefore the tax base, and it changes the balances you confirm with your partners. An operation done consistently — the same rate, the same method, the same entry every month — is the difference between a close that verifies itself and one that has to be explained.

The module is on Odoo Apps, for Odoo 19 and 20: Romania - Account Currency Reevaluation.

If you want to see what the first run looks like on your data, before the month close: nexterp.ro/contactus.

Foreign currency revaluation at month end, in Odoo
October 29, 2026
Share this post
Archive