Reconciliation Reports

Amounts: Major & Minor Units

How amounts are represented in reconciliation reports and how the conversion works across currencies with different decimal places.

All amounts in the reconciliation reports are shown in major units by default. This means the value you see is in the main currency unit: dollars, euros, rand, naira, yen, etc. Some reports also include a _minor_units column with the raw integer value for exact arithmetic.

Last updated: March 2026

What Are Major and Minor Units?

Every currency has a major unit (what you spend) and a minor unit (the smallest subdivision):

  • USD: major unit = dollar, minor unit = cent (1 dollar = 100 cents)
  • EUR: major unit = euro, minor unit = cent (1 euro = 100 cents)
  • ZAR: major unit = rand, minor unit = cent (1 rand = 100 cents)
  • NGN: major unit = naira, minor unit = kobo (1 naira = 100 kobo)
  • JPY: major unit = yen, no minor unit (1 yen = 1 yen)
  • BHD: major unit = dinar, minor unit = fils (1 dinar = 1000 fils)

Payment systems internally store amounts as integers in the minor unit to avoid floating-point rounding errors. NjiaPay converts these to major units for readability in reports, but also provides the raw minor-unit value when precision matters.

Conversion Table

The conversion from minor to major units depends on the currency's exponent (number of decimal places). Most currencies use 2, but some use 0 or 3:

ExponentDivisorCurrencies1000 minor units =
0 (no decimals)1JPY (Japanese Yen), UGX (Ugandan Shilling), XAF (CFA Franc)1000 major units
2 (standard)100USD, EUR, GBP, ZAR, NGN, AUD, CAD, CHF, NZD, KES, and most others10.00 major units
3 (three decimals)1000BHD (Bahraini Dinar), JOD (Jordanian Dinar), KWD (Kuwaiti Dinar), OMR (Omani Rial)1.000 major units

The formula is:

major_units = minor_units / divisor

Examples by Currency

USD (2 decimals, divisor 100)

minor_unitsmajor_unitsExplanation
3993.99$3.99 (399 cents)
100010.00$10.00
402040.20$40.20

EUR (2 decimals, divisor 100)

minor_unitsmajor_unitsExplanation
105010.5010.50 EUR
5005.005.00 EUR
200020.0020.00 EUR

ZAR (2 decimals, divisor 100)

minor_unitsmajor_unitsExplanation
15000150.00R150.00 (15,000 cents)
450.45R0.45
1250001250.00R1,250.00

NGN (2 decimals, divisor 100)

minor_unitsmajor_unitsExplanation
3800003800.00₦3,800.00 (380,000 kobo)
1900001900.00₦1,900.00
3900003900.00₦3,900.00

JPY (0 decimals, divisor 1)

minor_unitsmajor_unitsExplanation
500500¥500 (no subdivision, minor = major)
10001000¥1,000
1500015000¥15,000

Japanese yen has no subdivision. A minor unit of 500 is simply ¥500. The amount and amount_minor_units columns will always be the same value.

BHD (3 decimals, divisor 1000)

minor_unitsmajor_unitsExplanation
15001.500BHD 1.500 (1,500 fils)
35503.550BHD 3.550
1000010.000BHD 10.000

Bahraini dinar (and Kuwaiti dinar, Jordanian dinar, Omani rial) use three decimal places. A minor unit of 1500 is BHD 1.500, not BHD 15.00.

When to Use Minor Units vs. Major Units

Use major units (amount, njia_amount, psp_gross_amount, etc.) when:

  • Displaying values to humans
  • Quick visual inspection of transactions
  • Preparing reports for stakeholders

Use minor units (_minor_units columns) when:

  • Doing exact arithmetic in spreadsheets (SUMIFS, pivot tables, comparisons)
  • Comparing amounts programmatically (avoids floating-point issues like 10.00 != 9.999999999)
  • Building automated reconciliation workflows
Major-unit columns are floating-point numbers and may have tiny rounding differences (e.g. 10.000001 instead of 10.0). Minor-unit columns are always integers and safe for exact comparison. When writing formulas that compare amounts, prefer minor-unit columns.

How This Affects Break Flags

The break_gross_amount flag in the Successful Payments report compares NjiaPay's amount against the PSP's gross amount. This comparison is done in minor units internally, so floating-point rounding does not cause false breaks.

If you see break_gross_amount = True, it means the actual integer amounts disagree, not just a rounding artifact.

Full Currency List

NjiaPay supports the following currencies in reconciliation. The divisor column shows how minor units convert to major units.

CurrencyNameDivisorExponent
AEDUAE Dirham1002
AUDAustralian Dollar1002
BDTBangladesh Taka1002
BHDBahraini Dinar10003
BRLBrazilian Real1002
BWPBotswana Pula1002
CADCanadian Dollar1002
CHFSwiss Franc1002
CNYYuan Renminbi1002
COPColombian Peso1002
EGPEgyptian Pound1002
ETBEthiopian Birr1002
EUREuro1002
GBPPound Sterling1002
GHSGhanaian Cedi1002
INRIndian Rupee1002
JODJordanian Dinar10003
JPYJapanese Yen10
KESKenyan Shilling1002
KWDKuwaiti Dinar10003
LSLLesotho Loti1002
MADMoroccan Dirham1002
MXNMexican Peso1002
NADNamibian Dollar1002
NGNNigerian Naira1002
NZDNew Zealand Dollar1002
OMRRial Omani10003
PHPPhilippine Peso1002
PKRPakistan Rupee1002
PLNPolish Zloty1002
QARQatari Rial1002
SARSaudi Riyal1002
TRYTurkish Lira1002
TZSTanzanian Shilling1002
UGXUganda Shilling10
USDUS Dollar1002
XAFCFA Franc BEAC10
ZARSouth African Rand1002
ZMWZambian Kwacha1002