Tax Lab · Policy design & simulation
Uganda Presumptive Tax Optimisation Engine
A real revenue-maximisation search over band thresholds, marginal rates and sector multipliers, run against the prototype's own real sample of 13,770 small-business turnover records.
Current law and the firm distribution are real; the optimiser is a real but different search method than the prototype's.
Uganda's presumptive tax, as it stands
Under Income Tax Act Cap 340, s.4, small businesses with annual turnover up to UGX 150 million can pay a presumptive tax instead of filing standard returns. The current schedule is a marginal band structure, like income tax brackets: 0% up to 10M, 1% on the next band to 30M, 1.5% to 50M, 2% to 100M, and 3% up to the 150M ceiling. This tool lets you ask what a different band/rate/sector structure would raise, against a real distribution of small-business turnover, not a hypothetical one.
The optimiser
Edit thresholds, rates or sector multipliers directly, or press Optimise to search for the revenue-maximising schedule within your chosen rate bounds and compliance-burden tolerance. The compliance burden is a turnover-weighted blend of each firm's effective rate and its sector's real average compliance cost (as a share of turnover, computed from the same sample data), normalised so current law scores roughly 0.4 on the tolerance scale.
Band thresholds (UGX million)
Marginal rates per band
Sector multipliers
Constraints
This schedule's revenue
UGX 1,542m
vs. current law UGX 1,542m (+0.0%)
Compliance burden
Burden 0.20 within tolerance 0.40
Revenue by sector
Band bounds in effect: 10 → 30 → 50 → 75 → 100 → 150 (UGX million). Revenue is computed against the real, aggregated sample firm distribution (13,770 firms across 7 sectors, bucketed into 5M-wide turnover bins), the same sample_ubos.csv the prototype ships, not official UBOS microdata. "Optimise" runs a constrained local search for the revenue-maximising schedule within your rate and burden bounds; it is not the prototype's own COBYLA solver, but solves the identical real objective.
How revenue is actually computed
Each of the prototype's 13,770 usable sample firm records (sector and turnover, after dropping rows with missing fields) is bucketed into a 5-million-shilling-wide turnover bin within its sector. For every bin, the tool applies the current schedule's marginal rates to that bin's average turnover, exactly as it would to a single firm, then multiplies by how many firms sit in that bin. Summing across every bin and sector gives the total projected revenue for any schedule you try, including the one the search lands on.
What's simplified from the prototype
- The optimiser here is a constrained local search (coordinate ascent with a burden penalty), not the prototype's COBYLA solver; both solve the same real objective and constraints, but won't always land on the identical optimum.
- The compliance-burden index substitutes the prototype's own sample compliance-cost data for its separate World Bank Enterprise Survey-derived burden index, which isn't shipped with this calculator.
- Firms are grouped into turnover bins per sector rather than evaluated individually, a negligible approximation given bins are far narrower than any band.
Limitations, stated by the prototype itself
- Assumes 100% collection of whatever is assessed; real revenue would need a URA collection-efficiency factor applied afterward.
- Sample data mimics UBOS's structure; real estimates would move once run against actual UBOS microdata.
- No behavioural response: doesn't model taxpayers moving toward non-compliance as rates rise.
- Sector multipliers represent differential administrative capacity and enforcement intensity, not discrimination by sector.
Sources: Uganda Income Tax Act, Cap 340, s.4 (presumptive tax); URA Practice Note on Presumptive Taxation; prototype sample data structured to mimic the UBOS Business Register.