How the Nigeria salary after tax calculator is verified

Inputs

InputFieldType
Gross monthly pay, all taxable allowances (₦)grossMonthlynumber
of which basic salary (₦ / month)basicMonthlynumber
of which housing and transport allowances (₦ / month)housingTransportMonthlynumber
Rent you pay for your home (₦ / year)annualRentnumber
In the contributory pension scheme (8% of basic, housing and transport)pensionMemberboolean
Public-sector employee, or a private-sector employee who opted in to the NHF (2.5% of basic)nhfMemberboolean
Your contribution under the national health insurance scheme (NHIA) (₦ / month)healthInsuranceMonthlynumber
National minimum wage (₦ / month)minimumWageMonthlynumber

The formula

Each derived value below is computed by the Valem engine from the expression shown, in this order. Nothing else runs — there is no hidden code path.

Derived valueFieldFormula (JSONata)
Gross pay for the yeargrossAnnual$round($n(grossMonthly) * 12, 2)
Pension 8% for the yearpensionAnnualpensionMember ? $round($min([$n(basicMonthly) + $n(housingTransportMonthly), $n(grossMonthly)]) * 12 * $const.pensionEmployeeRate, 2) : 0
National Housing Fund 2.5%nhfAnnualnhfMember ? $round($min([$n(basicMonthly), $n(grossMonthly)]) * 12 * $const.nhfRate, 2) : 0
National health insurance schemehealthInsuranceAnnual$round($n(healthInsuranceMonthly) * 12, 2)
Rent reliefrentRelief$round($min([$n(annualRent) * $const.rentReliefRate, $const.rentReliefCap]), 2)
Exempt: pay at or below the minimum wageminimumWageExempt$n(grossMonthly) <= $n(minimumWageMonthly)
Chargeable incomechargeableIncome$round($max([0, grossAnnual - pensionAnnual - nhfAnnual - healthInsuranceAnnual - rentRelief]), 2)
Income tax for the yearincomeTaxAnnualminimumWageExempt ? 0 : $round($bandedCharge(chargeableIncome, [{"upTo": $const.band1, "rate": $const.rate0}, {"upTo": $const.band2, "rate": $const.rate1}, {"upTo": $const.band3, "rate": $const.rate2}, {"upTo": $const.band4, "rate": $const.rate3}, {"upTo": $const.band5, "rate": $const.rate4}, {"upTo": null, "rate": $const.rate5}]), 2)
Income tax / month (PAYE)incomeTaxMonthly$round(incomeTaxAnnual / 12, 2)
Net / yearnetAnnual$round($max([0, grossAnnual - incomeTaxAnnual - pensionAnnual - nhfAnnual - healthInsuranceAnnual]), 2)
Net / monthnetMonthly$round(netAnnual / 12, 2)

Rates and thresholds

The expressions above read these as $const. They are the figures the annual refresh replaces, so they live as data rather than being written into the formulas — which is what makes a year-on-year change a one-line diff instead of an edit to arithmetic.

ConstantValue
band1800000
band23000000
band312000000
band425000000
band550000000
rate00
rate10.15
rate20.18
rate30.21
rate40.23
rate50.25
rentReliefRate0.2
rentReliefCap500000
pensionEmployeeRate0.08
nhfRate0.025

Test vectors (9)

Every case is executed against this model on each build, by the Java engine and independently by a JavaScript one. A mismatch of a single cent fails the build, so the page cannot ship advertising a figure the model no longer produces.

Case 1 — N1 ₦500,000 a month (₦300,000 basic, ₦150,000 housing and transport), ₦1.2m rent, no NHF: tax ₦330,000 + 18% of ₦2,328,000

given grossMonthly500000
given basicMonthly300000
given housingTransportMonthly150000
given annualRent1200000
given pensionMemberyes
given nhfMemberno
given healthInsuranceMonthly0
given minimumWageMonthly70000
expect pensionAnnual432000
expect chargeableIncome5328000
expect incomeTaxAnnual749040
expect netMonthly401580

Case 2 — N1b the same pay: rent relief, monthly PAYE and net for the year

given grossMonthly500000
given basicMonthly300000
given housingTransportMonthly150000
given annualRent1200000
given pensionMemberyes
given nhfMemberno
given healthInsuranceMonthly0
given minimumWageMonthly70000
expect nhfAnnual0
expect rentRelief240000
expect incomeTaxMonthly62420
expect netAnnual4818960

Case 3 — N1c the same pay, opted in to the NHF: 2.5% of ₦3.6m basic = ₦90,000, tax ₦330,000 + 18% of ₦2,238,000

given grossMonthly500000
given basicMonthly300000
given housingTransportMonthly150000
given annualRent1200000
given pensionMemberyes
given nhfMemberyes
given healthInsuranceMonthly0
given minimumWageMonthly70000
expect nhfAnnual90000
expect chargeableIncome5238000
expect incomeTaxAnnual732840
expect netMonthly395430

Case 4 — N2 ₦70,000 a month, no pension or NHF: the minimum wage, so exempt (₦6,000 otherwise)

given grossMonthly70000
given basicMonthly50000
given housingTransportMonthly15000
given annualRent0
given pensionMemberno
given nhfMemberno
given healthInsuranceMonthly0
given minimumWageMonthly70000
expect minimumWageExempttrue
expect chargeableIncome840000
expect incomeTaxAnnual0

Case 5 — N3 ₦1 a month above the minimum wage: 15% of the ₦40,012 above ₦800,000

given grossMonthly70001
given basicMonthly50001
given housingTransportMonthly15000
given annualRent0
given pensionMemberno
given nhfMemberno
given healthInsuranceMonthly0
given minimumWageMonthly70000
expect minimumWageExemptfalse
expect incomeTaxAnnual6001.8

Case 6 — N4 ₦3,000,000 chargeable: the 15% band ends at ₦330,000

given grossMonthly250000
given basicMonthly250000
given housingTransportMonthly0
given annualRent0
given pensionMemberno
given nhfMemberno
given healthInsuranceMonthly0
given minimumWageMonthly70000
expect chargeableIncome3000000
expect incomeTaxAnnual330000

Case 7 — N5 rent of ₦3,000,000: 20% would be ₦600,000, capped at ₦500,000

given grossMonthly500000
given basicMonthly300000
given housingTransportMonthly150000
given annualRent3000000
given pensionMemberyes
given nhfMemberno
given healthInsuranceMonthly0
given minimumWageMonthly70000
expect rentRelief500000
expect chargeableIncome5068000

Case 8 — N6 ₦5,000,000 a month, public sector (NHF): ₦54,780,000 chargeable, ₦10,430,000 + 25% of ₦4,780,000

given grossMonthly5000000
given basicMonthly3000000
given housingTransportMonthly1500000
given annualRent0
given pensionMemberyes
given nhfMemberyes
given healthInsuranceMonthly0
given minimumWageMonthly70000
expect pensionAnnual4320000
expect nhfAnnual900000
expect incomeTaxAnnual11625000

Case 9 — N7 ₦10,000 a month under the national health insurance scheme is deducted too

given grossMonthly500000
given basicMonthly300000
given housingTransportMonthly150000
given annualRent1200000
given pensionMemberyes
given nhfMemberno
given healthInsuranceMonthly10000
given minimumWageMonthly70000
expect chargeableIncome5208000
expect incomeTaxAnnual727440

Sources

Check it yourself — and reuse it

The whole model as JSON — inputs, outputs, formulas, vectors and sources in one re-runnable document.

This model is published under CC BY 4.0: use it, adapt it, build on it, with attribution. The licence covers the model — the expression of each rule and the arrangement of the catalog. The rates and thresholds are law, and nobody licenses those; the sources above are where they come from.

← Back to the Nigeria salary after tax calculator

Built with Valem — a live, verifiable calculator you can fork and embed.