FAILURE MAP
← Case archive

FA-62711 / Tax bracket computation / Open access

Eligible and non-eligible gross-up rates are swapped · case 01

Eligible dividends are grossed up by 15% and non-eligible by 38%.

Verified by executionVariant 1 · 6 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The gross-up factors are attached to the wrong dividend classes.

VERIFIED REPAIR

Gross up eligible dividends by 38% and non-eligible dividends by 15%.

Unsuccessful approach: Using the 38% factor for both classes over-includes non-eligible dividends.

Case contract

solve(other, elig, nonelig): stipulated dividend integration, whole dollars. Eligible dividends are grossed up by 38% and non-eligible by 15%; taxable income is other income plus both grossed-up amounts, taxed with slices 15% to 55867, 20.5% to 111733, 26% to 173205, 29% to 246752, 33% above. The nonrefundable dividend credit is 15.0198% of the grossed-up eligible amount plus 9.0301% of the grossed-up non-eligible amount. Tax = max(0, slice tax - credit), returned in integer cents half-up.

Why this case matters

Tax computations hinge on which slice, threshold, ordering and rounding rule applies at each step; a misplaced boundary silently misstates liabilities.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
N = 1
observations = []
def solve(other, elig, nonelig):
    def prog(x, br):
        tax, lower = Fraction(0), 0
        for upper, rate in br:
            top = x if upper is None else min(x, upper)
            if top > lower: tax += (top - lower) * Fraction(rate) / 100
            if upper is None or x <= upper: break
            lower = upper
        return tax
    def cents(v):
        v = v * 100
        return int(v + Fraction(1, 2)) if v >= 0 else -int(-v + Fraction(1, 2))
    
    br = [[55867, '15'], [111733, '20.5'], [173205, '26'], [246752, '29'], [None, '33']]
    g_e = elig * Fraction(115, 100)
    g_n = nonelig * Fraction(138, 100)
    taxable = other + g_e + g_n
    credit = g_e * Fraction(150198, 1000000) + g_n * Fraction(90301, 1000000)
    return cents(max(0, prog(taxable, br) - credit))
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('regression grossup-rates 1', (40000, 0, 20000), 776539),
  ('regression grossup-rates 2', (80000, 15000, 15000), 1678221), ('control: wages only', (50000, 0, 0), 750000),
  ('control: eligible dividends only', (0, 10000, 0), 0), ('control: mixed', (100000, 10000, 0), 1829727),
  ('control: high income', (250000, 50000, 10000), 7337865)],
 [('regression grossup-rates 1', (100000, 10000, 0), 1829727),
  ('regression grossup-rates 2', (250000, 50000, 10000), 7337865),
  ('partial repair guard 2', (20000, 78584, 5000), 886535),
  ('control: non-eligible dividends', (40000, 0, 20000), 776539),
  ('control: both kinds', (80000, 15000, 15000), 1678221), ('control: wages only', (50000, 0, 0), 750000),
  ('control: eligible dividends only', (0, 10000, 0), 0)],
 [('regression grossup-rates 1', (50000, 3936, 0), 749892), ('regression grossup-rates 2', (0, 50000, 0), 70865),
  ('partial repair guard 1', (0, 0, 16293), 111858), ('partial repair guard 2', (100000, 0, 5000), 1808683),
  ('control: wages only', (50000, 0, 0), 750000), ('control: eligible dividends only', (0, 10000, 0), 0),
  ('control: mixed', (100000, 10000, 0), 1829727), ('control: non-eligible dividends', (40000, 0, 20000), 776539)],
 [('regression grossup-rates 1', (100000, 997, 0), 1750271),
  ('regression grossup-rates 2', (20000, 78584, 5000), 886535), ('partial repair guard 1', (0, 10000, 5000), 34054),
  ('partial repair guard 2', (0, 50000, 49145), 794917), ('control: non-eligible dividends', (40000, 0, 20000), 776539),
  ('control: both kinds', (80000, 15000, 15000), 1678221), ('control: high income', (250000, 50000, 10000), 7337865),
  ('control: wages only', (50000, 0, 0), 750000)],
 [('regression grossup-rates 1', (0, 0, 16293), 111858), ('regression grossup-rates 2', (100000, 0, 5000), 1808683),
  ('partial repair guard 1', (20000, 1000, 5000), 334300), ('partial repair guard 2', (10606, 50000, 20000), 552096),
  ('control: wages only', (50000, 0, 0), 750000), ('control: eligible dividends only', (0, 10000, 0), 0),
  ('control: mixed', (100000, 10000, 0), 1829727), ('control: non-eligible dividends', (40000, 0, 20000), 776539)]]
for label, args, expected in cases[N - 1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression grossup-rates 1829301776539Failed
regression grossup-rates 216988851678221Failed
control: wages only750000750000Passed
control: eligible dividends only00Passed
control: mixed18057541829727Failed
control: high income71862237337865Failed

SHA-256 / d921b90f7fdd58e5a142caf9d5a4ba9b3b1eb78122f5703c19da1096b793d5b8

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
N = 1
observations = []
def solve(other, elig, nonelig):
    def prog(x, br):
        tax, lower = Fraction(0), 0
        for upper, rate in br:
            top = x if upper is None else min(x, upper)
            if top > lower: tax += (top - lower) * Fraction(rate) / 100
            if upper is None or x <= upper: break
            lower = upper
        return tax
    def cents(v):
        v = v * 100
        return int(v + Fraction(1, 2)) if v >= 0 else -int(-v + Fraction(1, 2))
    
    br = [[55867, '15'], [111733, '20.5'], [173205, '26'], [246752, '29'], [None, '33']]
    g_e = elig * Fraction(138, 100)
    g_n = nonelig * Fraction(138, 100)
    taxable = other + g_e + g_n
    credit = g_e * Fraction(150198, 1000000) + g_n * Fraction(90301, 1000000)
    return cents(max(0, prog(taxable, br) - credit))
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('regression grossup-rates 1', (40000, 0, 20000), 776539),
  ('regression grossup-rates 2', (80000, 15000, 15000), 1678221), ('control: wages only', (50000, 0, 0), 750000),
  ('control: eligible dividends only', (0, 10000, 0), 0), ('control: mixed', (100000, 10000, 0), 1829727),
  ('control: high income', (250000, 50000, 10000), 7337865)],
 [('regression grossup-rates 1', (100000, 10000, 0), 1829727),
  ('regression grossup-rates 2', (250000, 50000, 10000), 7337865),
  ('partial repair guard 2', (20000, 78584, 5000), 886535),
  ('control: non-eligible dividends', (40000, 0, 20000), 776539),
  ('control: both kinds', (80000, 15000, 15000), 1678221), ('control: wages only', (50000, 0, 0), 750000),
  ('control: eligible dividends only', (0, 10000, 0), 0)],
 [('regression grossup-rates 1', (50000, 3936, 0), 749892), ('regression grossup-rates 2', (0, 50000, 0), 70865),
  ('partial repair guard 1', (0, 0, 16293), 111858), ('partial repair guard 2', (100000, 0, 5000), 1808683),
  ('control: wages only', (50000, 0, 0), 750000), ('control: eligible dividends only', (0, 10000, 0), 0),
  ('control: mixed', (100000, 10000, 0), 1829727), ('control: non-eligible dividends', (40000, 0, 20000), 776539)],
 [('regression grossup-rates 1', (100000, 997, 0), 1750271),
  ('regression grossup-rates 2', (20000, 78584, 5000), 886535), ('partial repair guard 1', (0, 10000, 5000), 34054),
  ('partial repair guard 2', (0, 50000, 49145), 794917), ('control: non-eligible dividends', (40000, 0, 20000), 776539),
  ('control: both kinds', (80000, 15000, 15000), 1678221), ('control: high income', (250000, 50000, 10000), 7337865),
  ('control: wages only', (50000, 0, 0), 750000)],
 [('regression grossup-rates 1', (0, 0, 16293), 111858), ('regression grossup-rates 2', (100000, 0, 5000), 1808683),
  ('partial repair guard 1', (20000, 1000, 5000), 334300), ('partial repair guard 2', (10606, 50000, 20000), 552096),
  ('control: wages only', (50000, 0, 0), 750000), ('control: eligible dividends only', (0, 10000, 0), 0),
  ('control: mixed', (100000, 10000, 0), 1829727), ('control: non-eligible dividends', (40000, 0, 20000), 776539)]]
for label, args, expected in cases[N - 1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression grossup-rates 1829301776539Failed
regression grossup-rates 217367671678221Failed
control: wages only750000750000Passed
control: eligible dividends only00Passed
control: mixed18297271829727Passed
control: high income73929957337865Failed

SHA-256 / 0752d06cde27d23aae6a6d2a99ffc64c13ebd0bb5410511c88208c6667be8033

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
N = 1
observations = []
def solve(other, elig, nonelig):
    def prog(x, br):
        tax, lower = Fraction(0), 0
        for upper, rate in br:
            top = x if upper is None else min(x, upper)
            if top > lower: tax += (top - lower) * Fraction(rate) / 100
            if upper is None or x <= upper: break
            lower = upper
        return tax
    def cents(v):
        v = v * 100
        return int(v + Fraction(1, 2)) if v >= 0 else -int(-v + Fraction(1, 2))
    
    br = [[55867, '15'], [111733, '20.5'], [173205, '26'], [246752, '29'], [None, '33']]
    g_e = elig * Fraction(138, 100)
    g_n = nonelig * Fraction(115, 100)
    taxable = other + g_e + g_n
    credit = g_e * Fraction(150198, 1000000) + g_n * Fraction(90301, 1000000)
    return cents(max(0, prog(taxable, br) - credit))
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('regression grossup-rates 1', (40000, 0, 20000), 776539),
  ('regression grossup-rates 2', (80000, 15000, 15000), 1678221), ('control: wages only', (50000, 0, 0), 750000),
  ('control: eligible dividends only', (0, 10000, 0), 0), ('control: mixed', (100000, 10000, 0), 1829727),
  ('control: high income', (250000, 50000, 10000), 7337865)],
 [('regression grossup-rates 1', (100000, 10000, 0), 1829727),
  ('regression grossup-rates 2', (250000, 50000, 10000), 7337865),
  ('partial repair guard 2', (20000, 78584, 5000), 886535),
  ('control: non-eligible dividends', (40000, 0, 20000), 776539),
  ('control: both kinds', (80000, 15000, 15000), 1678221), ('control: wages only', (50000, 0, 0), 750000),
  ('control: eligible dividends only', (0, 10000, 0), 0)],
 [('regression grossup-rates 1', (50000, 3936, 0), 749892), ('regression grossup-rates 2', (0, 50000, 0), 70865),
  ('partial repair guard 1', (0, 0, 16293), 111858), ('partial repair guard 2', (100000, 0, 5000), 1808683),
  ('control: wages only', (50000, 0, 0), 750000), ('control: eligible dividends only', (0, 10000, 0), 0),
  ('control: mixed', (100000, 10000, 0), 1829727), ('control: non-eligible dividends', (40000, 0, 20000), 776539)],
 [('regression grossup-rates 1', (100000, 997, 0), 1750271),
  ('regression grossup-rates 2', (20000, 78584, 5000), 886535), ('partial repair guard 1', (0, 10000, 5000), 34054),
  ('partial repair guard 2', (0, 50000, 49145), 794917), ('control: non-eligible dividends', (40000, 0, 20000), 776539),
  ('control: both kinds', (80000, 15000, 15000), 1678221), ('control: high income', (250000, 50000, 10000), 7337865),
  ('control: wages only', (50000, 0, 0), 750000)],
 [('regression grossup-rates 1', (0, 0, 16293), 111858), ('regression grossup-rates 2', (100000, 0, 5000), 1808683),
  ('partial repair guard 1', (20000, 1000, 5000), 334300), ('partial repair guard 2', (10606, 50000, 20000), 552096),
  ('control: wages only', (50000, 0, 0), 750000), ('control: eligible dividends only', (0, 10000, 0), 0),
  ('control: mixed', (100000, 10000, 0), 1829727), ('control: non-eligible dividends', (40000, 0, 20000), 776539)]]
for label, args, expected in cases[N - 1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression grossup-rates 1776539776539Passed
regression grossup-rates 216782211678221Passed
control: wages only750000750000Passed
control: eligible dividends only00Passed
control: mixed18297271829727Passed
control: high income73378657337865Passed

SHA-256 / 38b3c625bf0f514adc0ef0abfc1b6f4750492ae7ab34d0a00f219c3786f7b3d2

Verification & scope

A deterministic, bounded teaching model with a stipulated toy contract; it makes no claim of conformance to any real regulation, standard, or institution's rules. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.

Observations recorded using Python 3.12.14 at 2026-09-29T14:47:07.286962+00:00.

Case digest / 6d7ed149f3bbdb0b7d7be829105bf82c55dd3966380bc4aef36c9de902c16b42