VanillaPM
translation in beta
Войти Начать бесплатно Dashboard

Run payroll with statutory withholding

Learn Finance · Fund & Financial Accounting · Task B7. Run a payroll that withholds the right statutory tax, pays staff the correct net, and leaves the organisation owing the authority exactly what it withheld.

What it is

An employee's gross salary is not what hits their bank account. The employer is legally required to withhold tax at source and pass it to the revenue authority:

Net pay = Gross − statutory withholding − other deductions.

In Bangladesh the main withholdings are PAYE (pay-as-you-earn income tax on salaries), TDS (tax deducted at source) and VDS (VAT deducted at source) where applicable. The withheld amount is not the organisation's money — it's held on behalf of the government and remitted to them, usually monthly. Between withholding and remitting, it sits on the books as a liability.

Why it matters

  • Under-withholding is the organisation's liability, not the employee's. If you withhold too little and remit too little, the authority comes after the employer for the shortfall plus penalties.
  • The withheld money isn't yours to spend. Treating the withholding "float" as cash you can use is how organisations end up unable to remit — a serious compliance failure.
  • Donors fund gross, and expect allocation. Salary cost is charged to the grants staff worked on; payroll has to split each person's pay across the right projects and donors.

Where you do it in VanillaPM

Everything below is in Finance → Payroll. A step-by-step:

  1. Set the statutory rules — versioned. A PayrollRuleSet holds the TaxTable / TaxTableVersion / TaxBand / TaxComponent — the brackets and components (BD PAYE / TDS / VDS). Because they're versioned, re-running an old month reproduces exactly the rules in force then, not today's.

  2. Run payroll. A PayrollRun generates a Payslip per employee (with PayslipLines for every earning and deduction) and a PayrollTaxComputation that shows how each person's tax was derived — the audit trail, not just the number.

  3. Allocate across the coding block. PayrollAllocation splits each salary across project · donor · grant · cost-centre — driven by live staff assignment or by approved timesheet hours — so each grant bears only its fair share of a shared person.

  4. Post the run. Dr 5100 Salaries (→ allocations) / Cr Net-pay payable / Cr Tax withheld (liability) — gross hits the grants via the allocations, net is owed to staff, and the withheld tax sits as a liability until it's remitted to the authority.

Walked example — Hilsa Health Initiative

A field officer earns BDT 100,000 gross for the month. PAYE withholding computes to BDT 12,000; the staff member works 75% on the grant, 25% on core.

Line Account Dr Cr Coding
Salary cost (grant share) 5100 Salaries 75,000 → HHI-2026
Salary cost (core share) 5100 Salaries 25,000 → core
Tax withheld 2xxx PAYE payable 12,000 (owed to NBR)
Net pay 2xxx Net-pay payable 88,000 (owed to the employee)
Total 100,000 100,000 balances ✓

The employee receives BDT 88,000; the organisation now owes BDT 12,000 to the authority and the grant carries BDT 75,000 of eligible salary cost (which recognises grant income by matching, B3).

The numbers

Two identities: Gross = Net + withholding + other deductions (100,000 = 88,000 + 12,000), and Σ allocations = Gross (75,000 + 25,000 = 100,000). When the organisation remits, the liability clears: Dr PAYE payable 12,000 / Cr Bank 12,000 — the withheld money leaves, and the organisation is square with the authority.

Controls & evidence

  • The tax tables in force for the period (versioned), with the computation reproducible.
  • A payslip per employee showing gross, each deduction, and net.
  • Withholding remitted on time, with the remittance evidenced — the liability should clear each cycle, not accumulate.
  • Allocation of salary cost to grants supported by assignments or timesheets.

Best practices & pitfalls

  • Do run payroll on the versioned rules for that month — never retrofit this year's brackets onto last year's run.
  • Do remit withholding promptly; a growing withholding liability is a red flag.
  • Pitfall: thinking of the withheld tax as available cash. It's the government's money in your custody.
  • Pitfall: allocating 100% of everyone to whichever grant has budget left. Allocation must follow where people actually worked — see Cross-project time allocation.

Practise question

Q1. An employee's gross is BDT 80,000; PAYE withholding is BDT 8,000 and a pension deduction is BDT 4,000. What is net pay, and what does the organisation owe immediately after the run — and to whom?

Answer: Net pay = 80,000 − 8,000 − 4,000 = BDT 68,000 to the employee. The organisation now owes BDT 8,000 to the revenue authority (PAYE withheld) and BDT 4,000 to the pension fund — both liabilities until remitted. None of that BDT 12,000 is the organisation's to spend.

Terms used here

  • Gross / net pay — before and after deductions.
  • Withholding (PAYE/TDS/VDS) — statutory tax deducted at source and remitted to the authority.
  • Remittance — paying the withheld tax over to the government.
  • Payroll allocation — splitting salary cost across the coding block (projects/donors).
  • Related: Reconcile the bank & close the period — where the run is reflected and liabilities checked.

How an auditor / donor expects this

They check withholding was computed on the correct, in-force tables, remitted on time, and that salary cost was allocated to grants on a defensible basis (assignments/timesheets). A payroll register that ties gross → deductions → net, plus remittance evidence, is the artefact.

Honest boundary: VanillaPM models BD statutory withholding (PAYE/TDS/VDS). Other jurisdictions are configuration, not certified compliance — confirm the rules for your country.