HR (HRM)
Multi-currency and multi-country payroll
Pay people in more than one currency and more than one country from one workspace. Each legal entity pays in its own currency under its own country rules. Every payroll line keeps the exchange rate it was converted at, and the consolidated payroll report shows all entities together in one reporting currency.
Contents: Who can use it · How currencies are decided · Reporting currency and rate type · Exchange rates · Running payroll in another currency · When a rate changes later · Pay calendars per legal entity · Consolidated payroll · Moving someone to another legal entity · FAQ
Who can use it
It's on every plan. Roles get these permissions on the Roles screen, under Payroll:
- See exchange rates and the currency settings: Exchange rates (List).
- Add, revise or delete exchange rates: Exchange rates (Add).
- Change the reporting currency and the default rate type: the payroll settings permission.
- See consolidated payroll and the legal entities overview: Consolidated payroll (View). You only see payroll of the people you can already see.
- Check a move to another legal entity: the employee transfer permission.
Roles that could already list payroll runs get Exchange rates (List) and Consolidated payroll (View). Roles that could already lock payroll runs get Exchange rates (Add).
How currencies are decided
Each person in a payroll run is paid in one currency:
- Their pay group's currency, if the pay group has one.
- Otherwise the currency of the pay group's legal entity.
- Otherwise the currency of the run's legal entity.
Salary amounts are read in that currency. Each currency is rounded to its own decimals. For example, US dollars have two decimals and Japanese yen have none.
A legal entity has a country, a currency and its own country pack. One workspace can have entities in different countries, each with its own tax, contribution, leave and notice rules, and its own tax year.
Reporting currency and rate type
Open Payroll → Settings → Currency.
- Reporting currency: consolidated payroll is shown in this currency. If you leave it empty, your workspace currency is used.
- Default rate type: how a line in another currency is converted:
- Rate on the pay date: the rate in force on the day people are paid. The pay date comes from the pay calendar. Without a calendar, the last day of the pay period is used.
- Average rate over the pay period: the average of the daily rates from the first to the last day of the period.
- Fixed rate for the run: you type one rate per currency on the run.
A pay group can have its own rate type, and so can a single run. The run's choice wins, then the pay group's, then the default.
Tip: Set the reporting currency on purpose. Until you do, a run with a missing rate is still generated, but its foreign-currency lines stay unconverted and the run lists the missing rate. Once a reporting currency is set, a missing rate stops the run until you add it.
Exchange rates
Open Payroll → Exchange rates.
- Click Add rate.
- Pick the two currencies, type the rate and the date. A rate reads "1 first currency = rate second currency", for example 1 USD = 120 BDT.
- Save.
Your own rates win over the daily rates 9bx keeps for every workspace. A rate is used from its date until a newer one. You only need one direction: 1 USD = 120 BDT also answers BDT to USD.
To check a rate before a run, use Look up. It shows the rate for a day, or the average over a period. If there is no rate, it says so.
Saving a rate for a date that already has one replaces it. This counts as a revision. Deleting a rate is also allowed.
Running payroll in another currency
- Create the run for the legal entity (or pay group) as usual.
- Optional: choose a Rate type for this run. For Fixed rate for the run, enter the rate for each currency, for example USD 110.25.
- Click Generate.
If a rate is missing, generating stops with a message such as "No exchange rate from USD to BDT on or before 2026-09-30". Nothing is converted one-to-one. Add the rate, then generate again.
After generating, each line shows its currency, the rate, the rate type and the rate date. The run shows totals for each currency and the total in the reporting currency. Editing amounts on the register converts them again at the rates the run already holds.
When a rate changes later
A run keeps the rate it was generated with. Revising or deleting a rate never changes a run silently.
- When you save a rate, 9bx lists the runs that used that currency pair from that date on and whose rate is now different. Final (locked or paid) runs stay as paid.
- A run's Currency panel shows each rate it used, the rate on record today, and a Revised mark when they differ.
- To use the new rate on a draft run, generate it again.
Pay calendars per legal entity
Open Payroll → Pay calendars and add a calendar with a Legal entity. Pay groups of that entity that have no calendar of their own use it. The order is: the pay group's calendar, then the legal entity's, then the workspace default. Each legal entity can have one calendar.
Consolidated payroll
Open Payroll → Consolidated payroll.
- Pick the months, and optionally one legal entity.
- Only final (locked or paid) runs are counted. Turn on Include drafts to see runs in progress.
For each legal entity you see its country, currency, country pack and current tax year, the number of people and runs, and the amounts in its own currency and in the reporting currency. Totals per currency and a grand total in the reporting currency are at the top.
- Amounts come from the rate stored on each line, so the report gives the same answer next year.
- Lines from before multi-currency payroll, or converted to a reporting currency you have since changed, are converted at the rate of the last day of their month and marked Restated.
- If a month has no rate, it is listed under Missing rates and left out of the totals. Add the rate to include it.
Moving someone to another legal entity
Before you transfer an employee to a branch that belongs to another legal entity, the transfer screen shows what changes for pay:
- the new entity that pays them from the transfer date,
- a change of currency (review the salary amounts, which are read in the new currency from that date),
- different country rules,
- a different tax year,
- runs of the old entity from that month that are not final yet (generate them again after the move).
The transfer itself works as usual.
FAQ
Why did generating stop with "No exchange rate"? The run pays someone in a currency other than the reporting currency and there is no rate for the date. Add the rate under Exchange rates, or pick another rate type, then generate again.
Why does my report show "Restated"? Those lines were paid before multi-currency payroll, or the reporting currency was changed after the run. They are converted at the month-end rate instead of a stored one.
Can I change the reporting currency? Yes. New runs use the new currency. Runs already converted keep their stored figures. The report restates them in the new currency.
Does a new rate change a locked run? No. Locked and paid runs keep the rate they were paid at.