{"abstract":"Forbearance interest compounds monthly.","category":"Loan amortization schedules","checks":7,"contract":"x = {'principal', 'rate_bp', 'months' n, 'forbear': [start_month, count], 'mode': 'capitalize'|'defer'}. Months before start_month are paid with the level payment (exact annuity, half-up, interest round_half_up(balance*bp/120000)). During the count forbearance months interest accrues on the unchanged balance, rounded monthly, without compounding. The remaining payment count n - (start - 1) is preserved (term extended). capitalize: accrued interest is added to the balance and the payment re-leveled over the remaining count; defer: accrued interest goes to a non-interest bucket and the payment is unchanged. Return {'balance', 'deferred', 'payment'}.","evaluation_group":"w2-loan-amortization-schedules-forbearance-capitalize-or-defer","failed_approach":"Cumulative rounding spreads cents differently than rounding each month.","family":"w2-loan-amortization-schedules-forbearance-capitalize-or-defer-forbearance-accrual-compounding","id":"FA-58716","implementations":{"attempt":{"sha256":"f52daf5cc89a9a6242fef1fb52dcac05865580668c308cc73a22252583b98142","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    def rnd(n, d):\n        q, r = divmod(n, d)\n        return q + (1 if 2 * r >= d else 0)\n    def level(P, n):\n        if n <= 0 or P <= 0:\n            return 0\n        if bp == 0:\n            exact = Fraction(P, n)\n        else:\n            r = Fraction(bp, 120000)\n            exact = P * r / (1 - (1 + r) ** -n)\n        return math.floor(exact + Fraction(1, 2))\n    bp = x['rate_bp']\n    n = x['months']\n    P = x['principal']\n    pay = level(P, n)\n    bal = P\n    start, count = x['forbear']\n    for k in range(1, start):\n        interest = rnd(bal * bp, 120000)\n        bal -= pay - interest\n    acc = 0\n    for k in range(count):\n        acc += rnd(bal * bp * (k + 1), 120000) - rnd(bal * bp * k, 120000)\n    remaining = n - (start - 1)\n    if x['mode'] == 'capitalize':\n        bal += acc\n        new_pay = level(bal, remaining)\n        deferred = 0\n    else:\n        deferred = acc\n        new_pay = pay\n    return {'balance': bal, 'deferred': deferred, 'payment': new_pay}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: forbearance accrual compounding', {'principal': 100000, 'rate_bp': 1200, 'months': 24, 'forbear': [2, 6], 'mode': 'capitalize'}, {'balance': 102071, 'deferred': 0, 'payment': 4990}], ['regression: forbearance accrual compounding, partial-repair probe', {'principal': 250000, 'rate_bp': 1200, 'months': 12, 'forbear': [2, 6], 'mode': 'defer'}, {'balance': 230288, 'deferred': 13818, 'payment': 22212}], ['control 1', {'principal': 100000, 'rate_bp': 0, 'months': 24, 'forbear': [1, 3], 'mode': 'defer'}, {'balance': 100000, 'deferred': 0, 'payment': 4167}], ['control 2', {'principal': 1000000, 'rate_bp': 0, 'months': 60, 'forbear': [1, 3], 'mode': 'capitalize'}, {'balance': 1000000, 'deferred': 0, 'payment': 16667}], ['control 3', {'principal': 100000, 'rate_bp': 0, 'months': 24, 'forbear': [12, 1], 'mode': 'capitalize'}, {'balance': 54163, 'deferred': 0, 'payment': 4166}], ['control 4', {'principal': 100000, 'rate_bp': 1200, 'months': 12, 'forbear': [2, 1], 'mode': 'defer'}, {'balance': 92115, 'deferred': 921, 'payment': 8885}], ['control 5', {'principal': 250000, 'rate_bp': 0, 'months': 12, 'forbear': [12, 6], 'mode': 'capitalize'}, {'balance': 20837, 'deferred': 0, 'payment': 20837}]], [['regression: forbearance accrual compounding', {'principal': 1000000, 'rate_bp': 600, 'months': 24, 'forbear': [6, 6], 'mode': 'defer'}, {'balance': 801419, 'deferred': 24042, 'payment': 44321}], ['control 1', {'principal': 100000, 'rate_bp': 0, 'months': 60, 'forbear': [1, 1], 'mode': 'defer'}, {'balance': 100000, 'deferred': 0, 'payment': 1667}], ['control 2', {'principal': 250000, 'rate_bp': 600, 'months': 12, 'forbear': [12, 1], 'mode': 'defer'}, {'balance': 21406, 'deferred': 107, 'payment': 21517}], ['control 3', {'principal': 100000, 'rate_bp': 0, 'months': 60, 'forbear': [6, 6], 'mode': 'defer'}, {'balance': 91665, 'deferred': 0, 'payment': 1667}], ['control 4', {'principal': 250000, 'rate_bp': 600, 'months': 60, 'forbear': [6, 1], 'mode': 'defer'}, {'balance': 231905, 'deferred': 1160, 'payment': 4833}], ['control 5', {'principal': 1000000, 'rate_bp': 600, 'months': 60, 'forbear': [1, 1], 'mode': 'defer'}, {'balance': 1000000, 'deferred': 5000, 'payment': 19333}], ['control 6', {'principal': 250000, 'rate_bp': 0, 'months': 12, 'forbear': [12, 6], 'mode': 'defer'}, {'balance': 20837, 'deferred': 0, 'payment': 20833}]], [['regression: forbearance accrual compounding', {'principal': 1000000, 'rate_bp': 600, 'months': 24, 'forbear': [2, 3], 'mode': 'capitalize'}, {'balance': 975088, 'deferred': 0, 'payment': 44985}], ['control 1', {'principal': 100000, 'rate_bp': 1200, 'months': 60, 'forbear': [1, 1], 'mode': 'capitalize'}, {'balance': 101000, 'deferred': 0, 'payment': 2247}], ['control 2', {'principal': 100000, 'rate_bp': 0, 'months': 60, 'forbear': [1, 6], 'mode': 'defer'}, {'balance': 100000, 'deferred': 0, 'payment': 1667}], ['control 3', {'principal': 1000000, 'rate_bp': 600, 'months': 24, 'forbear': [6, 1], 'mode': 'defer'}, {'balance': 801419, 'deferred': 4007, 'payment': 44321}], ['control 4', {'principal': 250000, 'rate_bp': 0, 'months': 24, 'forbear': [2, 3], 'mode': 'defer'}, {'balance': 239583, 'deferred': 0, 'payment': 10417}], ['control 5', {'principal': 1000000, 'rate_bp': 0, 'months': 24, 'forbear': [2, 1], 'mode': 'capitalize'}, {'balance': 958333, 'deferred': 0, 'payment': 41667}], ['control 6', {'principal': 100000, 'rate_bp': 1200, 'months': 60, 'forbear': [12, 1], 'mode': 'defer'}, {'balance': 85843, 'deferred': 858, 'payment': 2224}]], [['regression: forbearance accrual compounding', {'principal': 250000, 'rate_bp': 600, 'months': 60, 'forbear': [6, 3], 'mode': 'capitalize'}, {'balance': 235385, 'deferred': 0, 'payment': 4906}], ['control 1', {'principal': 250000, 'rate_bp': 0, 'months': 12, 'forbear': [12, 1], 'mode': 'capitalize'}, {'balance': 20837, 'deferred': 0, 'payment': 20837}], ['control 2', {'principal': 250000, 'rate_bp': 600, 'months': 12, 'forbear': [1, 1], 'mode': 'defer'}, {'balance': 250000, 'deferred': 1250, 'payment': 21517}], ['control 3', {'principal': 1000000, 'rate_bp': 0, 'months': 60, 'forbear': [1, 1], 'mode': 'capitalize'}, {'balance': 1000000, 'deferred': 0, 'payment': 16667}], ['control 4', {'principal': 100000, 'rate_bp': 0, 'months': 12, 'forbear': [12, 6], 'mode': 'defer'}, {'balance': 8337, 'deferred': 0, 'payment': 8333}], ['control 5', {'principal': 100000, 'rate_bp': 600, 'months': 24, 'forbear': [12, 1], 'mode': 'capitalize'}, {'balance': 55929, 'deferred': 0, 'payment': 4454}], ['control 6', {'principal': 1000000, 'rate_bp': 600, 'months': 60, 'forbear': [6, 1], 'mode': 'defer'}, {'balance': 927614, 'deferred': 4638, 'payment': 19333}]], [['regression: forbearance accrual compounding', {'principal': 100000, 'rate_bp': 600, 'months': 60, 'forbear': [12, 3], 'mode': 'defer'}, {'balance': 83837, 'deferred': 1257, 'payment': 1933}], ['control 1', {'principal': 100000, 'rate_bp': 0, 'months': 60, 'forbear': [2, 3], 'mode': 'capitalize'}, {'balance': 98333, 'deferred': 0, 'payment': 1667}], ['control 2', {'principal': 1000000, 'rate_bp': 0, 'months': 60, 'forbear': [1, 6], 'mode': 'defer'}, {'balance': 1000000, 'deferred': 0, 'payment': 16667}], ['control 3', {'principal': 1000000, 'rate_bp': 600, 'months': 12, 'forbear': [2, 1], 'mode': 'defer'}, {'balance': 918934, 'deferred': 4595, 'payment': 86066}], ['control 4', {'principal': 100000, 'rate_bp': 600, 'months': 12, 'forbear': [12, 1], 'mode': 'defer'}, {'balance': 8560, 'deferred': 43, 'payment': 8607}], ['control 5', {'principal': 1000000, 'rate_bp': 0, 'months': 24, 'forbear': [12, 3], 'mode': 'capitalize'}, {'balance': 541663, 'deferred': 0, 'payment': 41666}], ['control 6', {'principal': 1000000, 'rate_bp': 600, 'months': 12, 'forbear': [12, 1], 'mode': 'capitalize'}, {'balance': 86070, 'deferred': 0, 'payment': 86500}]]]\nfor label, args, expected in fixtures[N-1]:\n    try:\n        actual = solve(args)\n    except Exception as exc:\n        actual = 'raised ' + type(exc).__name__\n    check(label, actual, expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"14b9be44edc953e418c142d2fe9ea90f4fac62175c76c97447f2431c869f4911","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    def rnd(n, d):\n        q, r = divmod(n, d)\n        return q + (1 if 2 * r >= d else 0)\n    def level(P, n):\n        if n <= 0 or P <= 0:\n            return 0\n        if bp == 0:\n            exact = Fraction(P, n)\n        else:\n            r = Fraction(bp, 120000)\n            exact = P * r / (1 - (1 + r) ** -n)\n        return math.floor(exact + Fraction(1, 2))\n    bp = x['rate_bp']\n    n = x['months']\n    P = x['principal']\n    pay = level(P, n)\n    bal = P\n    start, count = x['forbear']\n    for k in range(1, start):\n        interest = rnd(bal * bp, 120000)\n        bal -= pay - interest\n    acc = 0\n    for k in range(count):\n        acc += rnd((bal + acc) * bp, 120000)\n    remaining = n - (start - 1)\n    if x['mode'] == 'capitalize':\n        bal += acc\n        new_pay = level(bal, remaining)\n        deferred = 0\n    else:\n        deferred = acc\n        new_pay = pay\n    return {'balance': bal, 'deferred': deferred, 'payment': new_pay}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: forbearance accrual compounding', {'principal': 100000, 'rate_bp': 1200, 'months': 24, 'forbear': [2, 6], 'mode': 'capitalize'}, {'balance': 102071, 'deferred': 0, 'payment': 4990}], ['regression: forbearance accrual compounding, partial-repair probe', {'principal': 250000, 'rate_bp': 1200, 'months': 12, 'forbear': [2, 6], 'mode': 'defer'}, {'balance': 230288, 'deferred': 13818, 'payment': 22212}], ['control 1', {'principal': 100000, 'rate_bp': 0, 'months': 24, 'forbear': [1, 3], 'mode': 'defer'}, {'balance': 100000, 'deferred': 0, 'payment': 4167}], ['control 2', {'principal': 1000000, 'rate_bp': 0, 'months': 60, 'forbear': [1, 3], 'mode': 'capitalize'}, {'balance': 1000000, 'deferred': 0, 'payment': 16667}], ['control 3', {'principal': 100000, 'rate_bp': 0, 'months': 24, 'forbear': [12, 1], 'mode': 'capitalize'}, {'balance': 54163, 'deferred': 0, 'payment': 4166}], ['control 4', {'principal': 100000, 'rate_bp': 1200, 'months': 12, 'forbear': [2, 1], 'mode': 'defer'}, {'balance': 92115, 'deferred': 921, 'payment': 8885}], ['control 5', {'principal': 250000, 'rate_bp': 0, 'months': 12, 'forbear': [12, 6], 'mode': 'capitalize'}, {'balance': 20837, 'deferred': 0, 'payment': 20837}]], [['regression: forbearance accrual compounding', {'principal': 1000000, 'rate_bp': 600, 'months': 24, 'forbear': [6, 6], 'mode': 'defer'}, {'balance': 801419, 'deferred': 24042, 'payment': 44321}], ['control 1', {'principal': 100000, 'rate_bp': 0, 'months': 60, 'forbear': [1, 1], 'mode': 'defer'}, {'balance': 100000, 'deferred': 0, 'payment': 1667}], ['control 2', {'principal': 250000, 'rate_bp': 600, 'months': 12, 'forbear': [12, 1], 'mode': 'defer'}, {'balance': 21406, 'deferred': 107, 'payment': 21517}], ['control 3', {'principal': 100000, 'rate_bp': 0, 'months': 60, 'forbear': [6, 6], 'mode': 'defer'}, {'balance': 91665, 'deferred': 0, 'payment': 1667}], ['control 4', {'principal': 250000, 'rate_bp': 600, 'months': 60, 'forbear': [6, 1], 'mode': 'defer'}, {'balance': 231905, 'deferred': 1160, 'payment': 4833}], ['control 5', {'principal': 1000000, 'rate_bp': 600, 'months': 60, 'forbear': [1, 1], 'mode': 'defer'}, {'balance': 1000000, 'deferred': 5000, 'payment': 19333}], ['control 6', {'principal': 250000, 'rate_bp': 0, 'months': 12, 'forbear': [12, 6], 'mode': 'defer'}, {'balance': 20837, 'deferred': 0, 'payment': 20833}]], [['regression: forbearance accrual compounding', {'principal': 1000000, 'rate_bp': 600, 'months': 24, 'forbear': [2, 3], 'mode': 'capitalize'}, {'balance': 975088, 'deferred': 0, 'payment': 44985}], ['control 1', {'principal': 100000, 'rate_bp': 1200, 'months': 60, 'forbear': [1, 1], 'mode': 'capitalize'}, {'balance': 101000, 'deferred': 0, 'payment': 2247}], ['control 2', {'principal': 100000, 'rate_bp': 0, 'months': 60, 'forbear': [1, 6], 'mode': 'defer'}, {'balance': 100000, 'deferred': 0, 'payment': 1667}], ['control 3', {'principal': 1000000, 'rate_bp': 600, 'months': 24, 'forbear': [6, 1], 'mode': 'defer'}, {'balance': 801419, 'deferred': 4007, 'payment': 44321}], ['control 4', {'principal': 250000, 'rate_bp': 0, 'months': 24, 'forbear': [2, 3], 'mode': 'defer'}, {'balance': 239583, 'deferred': 0, 'payment': 10417}], ['control 5', {'principal': 1000000, 'rate_bp': 0, 'months': 24, 'forbear': [2, 1], 'mode': 'capitalize'}, {'balance': 958333, 'deferred': 0, 'payment': 41667}], ['control 6', {'principal': 100000, 'rate_bp': 1200, 'months': 60, 'forbear': [12, 1], 'mode': 'defer'}, {'balance': 85843, 'deferred': 858, 'payment': 2224}]], [['regression: forbearance accrual compounding', {'principal': 250000, 'rate_bp': 600, 'months': 60, 'forbear': [6, 3], 'mode': 'capitalize'}, {'balance': 235385, 'deferred': 0, 'payment': 4906}], ['control 1', {'principal': 250000, 'rate_bp': 0, 'months': 12, 'forbear': [12, 1], 'mode': 'capitalize'}, {'balance': 20837, 'deferred': 0, 'payment': 20837}], ['control 2', {'principal': 250000, 'rate_bp': 600, 'months': 12, 'forbear': [1, 1], 'mode': 'defer'}, {'balance': 250000, 'deferred': 1250, 'payment': 21517}], ['control 3', {'principal': 1000000, 'rate_bp': 0, 'months': 60, 'forbear': [1, 1], 'mode': 'capitalize'}, {'balance': 1000000, 'deferred': 0, 'payment': 16667}], ['control 4', {'principal': 100000, 'rate_bp': 0, 'months': 12, 'forbear': [12, 6], 'mode': 'defer'}, {'balance': 8337, 'deferred': 0, 'payment': 8333}], ['control 5', {'principal': 100000, 'rate_bp': 600, 'months': 24, 'forbear': [12, 1], 'mode': 'capitalize'}, {'balance': 55929, 'deferred': 0, 'payment': 4454}], ['control 6', {'principal': 1000000, 'rate_bp': 600, 'months': 60, 'forbear': [6, 1], 'mode': 'defer'}, {'balance': 927614, 'deferred': 4638, 'payment': 19333}]], [['regression: forbearance accrual compounding', {'principal': 100000, 'rate_bp': 600, 'months': 60, 'forbear': [12, 3], 'mode': 'defer'}, {'balance': 83837, 'deferred': 1257, 'payment': 1933}], ['control 1', {'principal': 100000, 'rate_bp': 0, 'months': 60, 'forbear': [2, 3], 'mode': 'capitalize'}, {'balance': 98333, 'deferred': 0, 'payment': 1667}], ['control 2', {'principal': 1000000, 'rate_bp': 0, 'months': 60, 'forbear': [1, 6], 'mode': 'defer'}, {'balance': 1000000, 'deferred': 0, 'payment': 16667}], ['control 3', {'principal': 1000000, 'rate_bp': 600, 'months': 12, 'forbear': [2, 1], 'mode': 'defer'}, {'balance': 918934, 'deferred': 4595, 'payment': 86066}], ['control 4', {'principal': 100000, 'rate_bp': 600, 'months': 12, 'forbear': [12, 1], 'mode': 'defer'}, {'balance': 8560, 'deferred': 43, 'payment': 8607}], ['control 5', {'principal': 1000000, 'rate_bp': 0, 'months': 24, 'forbear': [12, 3], 'mode': 'capitalize'}, {'balance': 541663, 'deferred': 0, 'payment': 41666}], ['control 6', {'principal': 1000000, 'rate_bp': 600, 'months': 12, 'forbear': [12, 1], 'mode': 'capitalize'}, {'balance': 86070, 'deferred': 0, 'payment': 86500}]]]\nfor label, args, expected in fixtures[N-1]:\n    try:\n        actual = solve(args)\n    except Exception as exc:\n        actual = 'raised ' + type(exc).__name__\n    check(label, actual, expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"2a5cb16e83ff37e2d2103aa5bd590951259aec9f1e0000fcf176d80744a62255","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    def rnd(n, d):\n        q, r = divmod(n, d)\n        return q + (1 if 2 * r >= d else 0)\n    def level(P, n):\n        if n <= 0 or P <= 0:\n            return 0\n        if bp == 0:\n            exact = Fraction(P, n)\n        else:\n            r = Fraction(bp, 120000)\n            exact = P * r / (1 - (1 + r) ** -n)\n        return math.floor(exact + Fraction(1, 2))\n    bp = x['rate_bp']\n    n = x['months']\n    P = x['principal']\n    pay = level(P, n)\n    bal = P\n    start, count = x['forbear']\n    for k in range(1, start):\n        interest = rnd(bal * bp, 120000)\n        bal -= pay - interest\n    acc = 0\n    for k in range(count):\n        acc += rnd(bal * bp, 120000)\n    remaining = n - (start - 1)\n    if x['mode'] == 'capitalize':\n        bal += acc\n        new_pay = level(bal, remaining)\n        deferred = 0\n    else:\n        deferred = acc\n        new_pay = pay\n    return {'balance': bal, 'deferred': deferred, 'payment': new_pay}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: forbearance accrual compounding', {'principal': 100000, 'rate_bp': 1200, 'months': 24, 'forbear': [2, 6], 'mode': 'capitalize'}, {'balance': 102071, 'deferred': 0, 'payment': 4990}], ['regression: forbearance accrual compounding, partial-repair probe', {'principal': 250000, 'rate_bp': 1200, 'months': 12, 'forbear': [2, 6], 'mode': 'defer'}, {'balance': 230288, 'deferred': 13818, 'payment': 22212}], ['control 1', {'principal': 100000, 'rate_bp': 0, 'months': 24, 'forbear': [1, 3], 'mode': 'defer'}, {'balance': 100000, 'deferred': 0, 'payment': 4167}], ['control 2', {'principal': 1000000, 'rate_bp': 0, 'months': 60, 'forbear': [1, 3], 'mode': 'capitalize'}, {'balance': 1000000, 'deferred': 0, 'payment': 16667}], ['control 3', {'principal': 100000, 'rate_bp': 0, 'months': 24, 'forbear': [12, 1], 'mode': 'capitalize'}, {'balance': 54163, 'deferred': 0, 'payment': 4166}], ['control 4', {'principal': 100000, 'rate_bp': 1200, 'months': 12, 'forbear': [2, 1], 'mode': 'defer'}, {'balance': 92115, 'deferred': 921, 'payment': 8885}], ['control 5', {'principal': 250000, 'rate_bp': 0, 'months': 12, 'forbear': [12, 6], 'mode': 'capitalize'}, {'balance': 20837, 'deferred': 0, 'payment': 20837}]], [['regression: forbearance accrual compounding', {'principal': 1000000, 'rate_bp': 600, 'months': 24, 'forbear': [6, 6], 'mode': 'defer'}, {'balance': 801419, 'deferred': 24042, 'payment': 44321}], ['control 1', {'principal': 100000, 'rate_bp': 0, 'months': 60, 'forbear': [1, 1], 'mode': 'defer'}, {'balance': 100000, 'deferred': 0, 'payment': 1667}], ['control 2', {'principal': 250000, 'rate_bp': 600, 'months': 12, 'forbear': [12, 1], 'mode': 'defer'}, {'balance': 21406, 'deferred': 107, 'payment': 21517}], ['control 3', {'principal': 100000, 'rate_bp': 0, 'months': 60, 'forbear': [6, 6], 'mode': 'defer'}, {'balance': 91665, 'deferred': 0, 'payment': 1667}], ['control 4', {'principal': 250000, 'rate_bp': 600, 'months': 60, 'forbear': [6, 1], 'mode': 'defer'}, {'balance': 231905, 'deferred': 1160, 'payment': 4833}], ['control 5', {'principal': 1000000, 'rate_bp': 600, 'months': 60, 'forbear': [1, 1], 'mode': 'defer'}, {'balance': 1000000, 'deferred': 5000, 'payment': 19333}], ['control 6', {'principal': 250000, 'rate_bp': 0, 'months': 12, 'forbear': [12, 6], 'mode': 'defer'}, {'balance': 20837, 'deferred': 0, 'payment': 20833}]], [['regression: forbearance accrual compounding', {'principal': 1000000, 'rate_bp': 600, 'months': 24, 'forbear': [2, 3], 'mode': 'capitalize'}, {'balance': 975088, 'deferred': 0, 'payment': 44985}], ['control 1', {'principal': 100000, 'rate_bp': 1200, 'months': 60, 'forbear': [1, 1], 'mode': 'capitalize'}, {'balance': 101000, 'deferred': 0, 'payment': 2247}], ['control 2', {'principal': 100000, 'rate_bp': 0, 'months': 60, 'forbear': [1, 6], 'mode': 'defer'}, {'balance': 100000, 'deferred': 0, 'payment': 1667}], ['control 3', {'principal': 1000000, 'rate_bp': 600, 'months': 24, 'forbear': [6, 1], 'mode': 'defer'}, {'balance': 801419, 'deferred': 4007, 'payment': 44321}], ['control 4', {'principal': 250000, 'rate_bp': 0, 'months': 24, 'forbear': [2, 3], 'mode': 'defer'}, {'balance': 239583, 'deferred': 0, 'payment': 10417}], ['control 5', {'principal': 1000000, 'rate_bp': 0, 'months': 24, 'forbear': [2, 1], 'mode': 'capitalize'}, {'balance': 958333, 'deferred': 0, 'payment': 41667}], ['control 6', {'principal': 100000, 'rate_bp': 1200, 'months': 60, 'forbear': [12, 1], 'mode': 'defer'}, {'balance': 85843, 'deferred': 858, 'payment': 2224}]], [['regression: forbearance accrual compounding', {'principal': 250000, 'rate_bp': 600, 'months': 60, 'forbear': [6, 3], 'mode': 'capitalize'}, {'balance': 235385, 'deferred': 0, 'payment': 4906}], ['control 1', {'principal': 250000, 'rate_bp': 0, 'months': 12, 'forbear': [12, 1], 'mode': 'capitalize'}, {'balance': 20837, 'deferred': 0, 'payment': 20837}], ['control 2', {'principal': 250000, 'rate_bp': 600, 'months': 12, 'forbear': [1, 1], 'mode': 'defer'}, {'balance': 250000, 'deferred': 1250, 'payment': 21517}], ['control 3', {'principal': 1000000, 'rate_bp': 0, 'months': 60, 'forbear': [1, 1], 'mode': 'capitalize'}, {'balance': 1000000, 'deferred': 0, 'payment': 16667}], ['control 4', {'principal': 100000, 'rate_bp': 0, 'months': 12, 'forbear': [12, 6], 'mode': 'defer'}, {'balance': 8337, 'deferred': 0, 'payment': 8333}], ['control 5', {'principal': 100000, 'rate_bp': 600, 'months': 24, 'forbear': [12, 1], 'mode': 'capitalize'}, {'balance': 55929, 'deferred': 0, 'payment': 4454}], ['control 6', {'principal': 1000000, 'rate_bp': 600, 'months': 60, 'forbear': [6, 1], 'mode': 'defer'}, {'balance': 927614, 'deferred': 4638, 'payment': 19333}]], [['regression: forbearance accrual compounding', {'principal': 100000, 'rate_bp': 600, 'months': 60, 'forbear': [12, 3], 'mode': 'defer'}, {'balance': 83837, 'deferred': 1257, 'payment': 1933}], ['control 1', {'principal': 100000, 'rate_bp': 0, 'months': 60, 'forbear': [2, 3], 'mode': 'capitalize'}, {'balance': 98333, 'deferred': 0, 'payment': 1667}], ['control 2', {'principal': 1000000, 'rate_bp': 0, 'months': 60, 'forbear': [1, 6], 'mode': 'defer'}, {'balance': 1000000, 'deferred': 0, 'payment': 16667}], ['control 3', {'principal': 1000000, 'rate_bp': 600, 'months': 12, 'forbear': [2, 1], 'mode': 'defer'}, {'balance': 918934, 'deferred': 4595, 'payment': 86066}], ['control 4', {'principal': 100000, 'rate_bp': 600, 'months': 12, 'forbear': [12, 1], 'mode': 'defer'}, {'balance': 8560, 'deferred': 43, 'payment': 8607}], ['control 5', {'principal': 1000000, 'rate_bp': 0, 'months': 24, 'forbear': [12, 3], 'mode': 'capitalize'}, {'balance': 541663, 'deferred': 0, 'payment': 41666}], ['control 6', {'principal': 1000000, 'rate_bp': 600, 'months': 12, 'forbear': [12, 1], 'mode': 'capitalize'}, {'balance': 86070, 'deferred': 0, 'payment': 86500}]]]\nfor label, args, expected in fixtures[N-1]:\n    try:\n        actual = solve(args)\n    except Exception as exc:\n        actual = 'raised ' + type(exc).__name__\n    check(label, actual, expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"A deterministic bounded teaching model with stipulated toy lending rules stated in the contract; money is integer cents and rates are basis points; it makes no claim of conformance to any regulation, servicing standard or product. 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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-loan-amortization-schedules-forbearance-capitalize-or-defer-forbearance-accrual-compounding","generated_at":"2026-09-29T14:46:29.382607+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Amortization engines drive borrower statements, payoff quotes and investor remittances; a misplaced rounding step, boundary or ordering rule compounds across hundreds of periods.","repair":"Accrue simple interest on the unchanged balance, rounded each month.","root_cause":"Accrued interest is included in the balance that accrues further interest.","sha256":"6d88144115551f15993306109389a8132484a28a5f87378e766cb68ada4dc38b","title":"Forbearance capitalization or deferral: forbearance accrual compounding · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":44.531,"exit_code":1,"observations":[{"actual":{"balance":102071,"deferred":0,"payment":4990},"check":"regression: forbearance accrual compounding","expected":{"balance":102071,"deferred":0,"payment":4990},"passed":true},{"actual":{"balance":230288,"deferred":13817,"payment":22212},"check":"regression: forbearance accrual compounding, partial-repair probe","expected":{"balance":230288,"deferred":13818,"payment":22212},"passed":false},{"actual":{"balance":100000,"deferred":0,"payment":4167},"check":"control 1","expected":{"balance":100000,"deferred":0,"payment":4167},"passed":true},{"actual":{"balance":1000000,"deferred":0,"payment":16667},"check":"control 2","expected":{"balance":1000000,"deferred":0,"payment":16667},"passed":true},{"actual":{"balance":54163,"deferred":0,"payment":4166},"check":"control 3","expected":{"balance":54163,"deferred":0,"payment":4166},"passed":true},{"actual":{"balance":92115,"deferred":921,"payment":8885},"check":"control 4","expected":{"balance":92115,"deferred":921,"payment":8885},"passed":true},{"actual":{"balance":20837,"deferred":0,"payment":20837},"check":"control 5","expected":{"balance":20837,"deferred":0,"payment":20837},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: forbearance accrual compounding\", \"actual\": {\"balance\": 102071, \"deferred\": 0, \"payment\": 4990}, \"expected\": {\"balance\": 102071, \"deferred\": 0, \"payment\": 4990}, \"passed\": true}, {\"check\": \"regression: forbearance accrual compounding, partial-repair probe\", \"actual\": {\"balance\": 230288, \"deferred\": 13817, \"payment\": 22212}, \"expected\": {\"balance\": 230288, \"deferred\": 13818, \"payment\": 22212}, \"passed\": false}, {\"check\": \"control 1\", \"actual\": {\"balance\": 100000, \"deferred\": 0, \"payment\": 4167}, \"expected\": {\"balance\": 100000, \"deferred\": 0, \"payment\": 4167}, \"passed\": true}, {\"check\": \"control 2\", \"actual\": {\"balance\": 1000000, \"deferred\": 0, \"payment\": 16667}, \"expected\": {\"balance\": 1000000, \"deferred\": 0, \"payment\": 16667}, \"passed\": true}, {\"check\": \"control 3\", \"actual\": {\"balance\": 54163, \"deferred\": 0, \"payment\": 4166}, \"expected\": {\"balance\": 54163, \"deferred\": 0, \"payment\": 4166}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"balance\": 92115, \"deferred\": 921, \"payment\": 8885}, \"expected\": {\"balance\": 92115, \"deferred\": 921, \"payment\": 8885}, \"passed\": true}, {\"check\": \"control 5\", \"actual\": {\"balance\": 20837, \"deferred\": 0, \"payment\": 20837}, \"expected\": {\"balance\": 20837, \"deferred\": 0, \"payment\": 20837}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.631,"exit_code":1,"observations":[{"actual":{"balance":102217,"deferred":0,"payment":4997},"check":"regression: forbearance accrual compounding","expected":{"balance":102071,"deferred":0,"payment":4990},"passed":false},{"actual":{"balance":230288,"deferred":14167,"payment":22212},"check":"regression: forbearance accrual compounding, partial-repair probe","expected":{"balance":230288,"deferred":13818,"payment":22212},"passed":false},{"actual":{"balance":100000,"deferred":0,"payment":4167},"check":"control 1","expected":{"balance":100000,"deferred":0,"payment":4167},"passed":true},{"actual":{"balance":1000000,"deferred":0,"payment":16667},"check":"control 2","expected":{"balance":1000000,"deferred":0,"payment":16667},"passed":true},{"actual":{"balance":54163,"deferred":0,"payment":4166},"check":"control 3","expected":{"balance":54163,"deferred":0,"payment":4166},"passed":true},{"actual":{"balance":92115,"deferred":921,"payment":8885},"check":"control 4","expected":{"balance":92115,"deferred":921,"payment":8885},"passed":true},{"actual":{"balance":20837,"deferred":0,"payment":20837},"check":"control 5","expected":{"balance":20837,"deferred":0,"payment":20837},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: forbearance accrual compounding\", \"actual\": {\"balance\": 102217, \"deferred\": 0, \"payment\": 4997}, \"expected\": {\"balance\": 102071, \"deferred\": 0, \"payment\": 4990}, \"passed\": false}, {\"check\": \"regression: forbearance accrual compounding, partial-repair probe\", \"actual\": {\"balance\": 230288, \"deferred\": 14167, \"payment\": 22212}, \"expected\": {\"balance\": 230288, \"deferred\": 13818, \"payment\": 22212}, \"passed\": false}, {\"check\": \"control 1\", \"actual\": {\"balance\": 100000, \"deferred\": 0, \"payment\": 4167}, \"expected\": {\"balance\": 100000, \"deferred\": 0, \"payment\": 4167}, \"passed\": true}, {\"check\": \"control 2\", \"actual\": {\"balance\": 1000000, \"deferred\": 0, \"payment\": 16667}, \"expected\": {\"balance\": 1000000, \"deferred\": 0, \"payment\": 16667}, \"passed\": true}, {\"check\": \"control 3\", \"actual\": {\"balance\": 54163, \"deferred\": 0, \"payment\": 4166}, \"expected\": {\"balance\": 54163, \"deferred\": 0, \"payment\": 4166}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"balance\": 92115, \"deferred\": 921, \"payment\": 8885}, \"expected\": {\"balance\": 92115, \"deferred\": 921, \"payment\": 8885}, \"passed\": true}, {\"check\": \"control 5\", \"actual\": {\"balance\": 20837, \"deferred\": 0, \"payment\": 20837}, \"expected\": {\"balance\": 20837, \"deferred\": 0, \"payment\": 20837}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":45.19,"exit_code":0,"observations":[{"actual":{"balance":102071,"deferred":0,"payment":4990},"check":"regression: forbearance accrual compounding","expected":{"balance":102071,"deferred":0,"payment":4990},"passed":true},{"actual":{"balance":230288,"deferred":13818,"payment":22212},"check":"regression: forbearance accrual compounding, partial-repair probe","expected":{"balance":230288,"deferred":13818,"payment":22212},"passed":true},{"actual":{"balance":100000,"deferred":0,"payment":4167},"check":"control 1","expected":{"balance":100000,"deferred":0,"payment":4167},"passed":true},{"actual":{"balance":1000000,"deferred":0,"payment":16667},"check":"control 2","expected":{"balance":1000000,"deferred":0,"payment":16667},"passed":true},{"actual":{"balance":54163,"deferred":0,"payment":4166},"check":"control 3","expected":{"balance":54163,"deferred":0,"payment":4166},"passed":true},{"actual":{"balance":92115,"deferred":921,"payment":8885},"check":"control 4","expected":{"balance":92115,"deferred":921,"payment":8885},"passed":true},{"actual":{"balance":20837,"deferred":0,"payment":20837},"check":"control 5","expected":{"balance":20837,"deferred":0,"payment":20837},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: forbearance accrual compounding\", \"actual\": {\"balance\": 102071, \"deferred\": 0, \"payment\": 4990}, \"expected\": {\"balance\": 102071, \"deferred\": 0, \"payment\": 4990}, \"passed\": true}, {\"check\": \"regression: forbearance accrual compounding, partial-repair probe\", \"actual\": {\"balance\": 230288, \"deferred\": 13818, \"payment\": 22212}, \"expected\": {\"balance\": 230288, \"deferred\": 13818, \"payment\": 22212}, \"passed\": true}, {\"check\": \"control 1\", \"actual\": {\"balance\": 100000, \"deferred\": 0, \"payment\": 4167}, \"expected\": {\"balance\": 100000, \"deferred\": 0, \"payment\": 4167}, \"passed\": true}, {\"check\": \"control 2\", \"actual\": {\"balance\": 1000000, \"deferred\": 0, \"payment\": 16667}, \"expected\": {\"balance\": 1000000, \"deferred\": 0, \"payment\": 16667}, \"passed\": true}, {\"check\": \"control 3\", \"actual\": {\"balance\": 54163, \"deferred\": 0, \"payment\": 4166}, \"expected\": {\"balance\": 54163, \"deferred\": 0, \"payment\": 4166}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"balance\": 92115, \"deferred\": 921, \"payment\": 8885}, \"expected\": {\"balance\": 92115, \"deferred\": 921, \"payment\": 8885}, \"passed\": true}, {\"check\": \"control 5\", \"actual\": {\"balance\": 20837, \"deferred\": 0, \"payment\": 20837}, \"expected\": {\"balance\": 20837, \"deferred\": 0, \"payment\": 20837}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}