{"abstract":"The prepayment penalty is charged on accrued interest as well as principal.","category":"Loan amortization schedules","checks":7,"contract":"x = {'balance', 'rate_bp', 'last_paid_day', 'payoff_day', 'basis', 'fees_due', 'escrow' (credit, may be negative), 'penalty_bp', 'penalty_until'}. Per diem = round_half_up(balance*bp/(10000*basis)); interest = per diem * (payoff_day - last_paid_day). Penalty = round_half_up(balance*penalty_bp/10000) when payoff_day <= penalty_until, else 0. Payoff = balance + interest + fees + penalty - escrow. Return {'per_diem', 'interest', 'penalty', 'payoff'}.","evaluation_group":"w2-loan-amortization-schedules-payoff-quote-per-diem","failed_approach":"Dividing by 120000 treats the penalty as a monthly rate.","family":"w2-loan-amortization-schedules-payoff-quote-per-diem-penalty-base","id":"FA-58666","implementations":{"attempt":{"sha256":"f10f6b77d7596e9111b7da7b532c822eae53d87850658c69d3ca35f10ffb7ec5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\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    per_diem = rnd(x['balance'] * x['rate_bp'], 10000 * x['basis'])\n    days = x['payoff_day'] - x['last_paid_day']\n    interest = per_diem * days\n    penalty = rnd(x['balance'] * x['penalty_bp'], 120000) if x['payoff_day'] <= x['penalty_until'] else 0\n    payoff = x['balance'] + interest + x['fees_due'] + penalty - x['escrow']\n    return {'per_diem': per_diem, 'interest': interest, 'penalty': penalty, 'payoff': payoff}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: penalty base', {'balance': 100000, 'rate_bp': 1250, 'last_paid_day': 1, 'payoff_day': 16, 'basis': 360, 'fees_due': 3500, 'escrow': 12000, 'penalty_bp': 100, 'penalty_until': 31}, {'per_diem': 35, 'interest': 525, 'penalty': 1000, 'payoff': 93025}], ['control 1', {'balance': 100000, 'rate_bp': 600, 'last_paid_day': 100, 'payoff_day': 145, 'basis': 360, 'fees_due': 3500, 'escrow': -4000, 'penalty_bp': 0, 'penalty_until': 115}, {'per_diem': 17, 'interest': 765, 'penalty': 0, 'payoff': 108265}], ['control 2', {'balance': 999999, 'rate_bp': 600, 'last_paid_day': 10, 'payoff_day': 11, 'basis': 365, 'fees_due': 0, 'escrow': 0, 'penalty_bp': 100, 'penalty_until': 10}, {'per_diem': 164, 'interest': 164, 'penalty': 0, 'payoff': 1000163}], ['control 3', {'balance': 12345678, 'rate_bp': 600, 'last_paid_day': 10, 'payoff_day': 41, 'basis': 360, 'fees_due': 3500, 'escrow': 12000, 'penalty_bp': 200, 'penalty_until': 40}, {'per_diem': 2058, 'interest': 63798, 'penalty': 0, 'payoff': 12400976}], ['control 4', {'balance': 12345678, 'rate_bp': 450, 'last_paid_day': 10, 'payoff_day': 55, 'basis': 360, 'fees_due': 0, 'escrow': 0, 'penalty_bp': 100, 'penalty_until': 25}, {'per_diem': 1543, 'interest': 69435, 'penalty': 0, 'payoff': 12415113}], ['control 5', {'balance': 5000, 'rate_bp': 1250, 'last_paid_day': 10, 'payoff_day': 41, 'basis': 360, 'fees_due': 0, 'escrow': 12000, 'penalty_bp': 0, 'penalty_until': 25}, {'per_diem': 2, 'interest': 62, 'penalty': 0, 'payoff': -6938}], ['control 6', {'balance': 100000, 'rate_bp': 600, 'last_paid_day': 1, 'payoff_day': 46, 'basis': 365, 'fees_due': 0, 'escrow': 12000, 'penalty_bp': 200, 'penalty_until': 1}, {'per_diem': 16, 'interest': 720, 'penalty': 0, 'payoff': 88720}]], [['regression: penalty base', {'balance': 12345678, 'rate_bp': 450, 'last_paid_day': 10, 'payoff_day': 11, 'basis': 365, 'fees_due': 0, 'escrow': -4000, 'penalty_bp': 200, 'penalty_until': 40}, {'per_diem': 1522, 'interest': 1522, 'penalty': 246914, 'payoff': 12598114}], ['control 1', {'balance': 999999, 'rate_bp': 1250, 'last_paid_day': 1, 'payoff_day': 46, 'basis': 365, 'fees_due': 3500, 'escrow': -4000, 'penalty_bp': 100, 'penalty_until': 1}, {'per_diem': 342, 'interest': 15390, 'penalty': 0, 'payoff': 1022889}], ['control 2', {'balance': 100000, 'rate_bp': 450, 'last_paid_day': 1, 'payoff_day': 2, 'basis': 360, 'fees_due': 3500, 'escrow': 0, 'penalty_bp': 200, 'penalty_until': 61}, {'per_diem': 13, 'interest': 13, 'penalty': 2000, 'payoff': 105513}], ['control 3', {'balance': 100000, 'rate_bp': 1250, 'last_paid_day': 10, 'payoff_day': 25, 'basis': 365, 'fees_due': 0, 'escrow': 0, 'penalty_bp': 100, 'penalty_until': 10}, {'per_diem': 34, 'interest': 510, 'penalty': 0, 'payoff': 100510}], ['control 4', {'balance': 999999, 'rate_bp': 450, 'last_paid_day': 1, 'payoff_day': 31, 'basis': 360, 'fees_due': 3500, 'escrow': 0, 'penalty_bp': 0, 'penalty_until': 61}, {'per_diem': 125, 'interest': 3750, 'penalty': 0, 'payoff': 1007249}], ['control 5', {'balance': 12345678, 'rate_bp': 1250, 'last_paid_day': 10, 'payoff_day': 11, 'basis': 365, 'fees_due': 0, 'escrow': 12000, 'penalty_bp': 0, 'penalty_until': 40}, {'per_diem': 4228, 'interest': 4228, 'penalty': 0, 'payoff': 12337906}], ['control 6', {'balance': 100000, 'rate_bp': 450, 'last_paid_day': 100, 'payoff_day': 101, 'basis': 365, 'fees_due': 0, 'escrow': 12000, 'penalty_bp': 200, 'penalty_until': 130}, {'per_diem': 12, 'interest': 12, 'penalty': 2000, 'payoff': 90012}]], [['regression: penalty base', {'balance': 12345678, 'rate_bp': 600, 'last_paid_day': 1, 'payoff_day': 31, 'basis': 360, 'fees_due': 0, 'escrow': 0, 'penalty_bp': 200, 'penalty_until': 31}, {'per_diem': 2058, 'interest': 61740, 'penalty': 246914, 'payoff': 12654332}], ['control 1', {'balance': 5000, 'rate_bp': 450, 'last_paid_day': 10, 'payoff_day': 55, 'basis': 365, 'fees_due': 0, 'escrow': -4000, 'penalty_bp': 0, 'penalty_until': 40}, {'per_diem': 1, 'interest': 45, 'penalty': 0, 'payoff': 9045}], ['control 2', {'balance': 100000, 'rate_bp': 1250, 'last_paid_day': 1, 'payoff_day': 46, 'basis': 360, 'fees_due': 0, 'escrow': 12000, 'penalty_bp': 0, 'penalty_until': 31}, {'per_diem': 35, 'interest': 1575, 'penalty': 0, 'payoff': 89575}], ['control 3', {'balance': 999999, 'rate_bp': 1250, 'last_paid_day': 10, 'payoff_day': 25, 'basis': 365, 'fees_due': 0, 'escrow': 0, 'penalty_bp': 0, 'penalty_until': 40}, {'per_diem': 342, 'interest': 5130, 'penalty': 0, 'payoff': 1005129}], ['control 4', {'balance': 12345678, 'rate_bp': 450, 'last_paid_day': 1, 'payoff_day': 31, 'basis': 360, 'fees_due': 3500, 'escrow': 12000, 'penalty_bp': 100, 'penalty_until': 16}, {'per_diem': 1543, 'interest': 46290, 'penalty': 0, 'payoff': 12383468}], ['control 5', {'balance': 100000, 'rate_bp': 1250, 'last_paid_day': 1, 'payoff_day': 2, 'basis': 365, 'fees_due': 3500, 'escrow': 12000, 'penalty_bp': 100, 'penalty_until': 1}, {'per_diem': 34, 'interest': 34, 'penalty': 0, 'payoff': 91534}], ['control 6', {'balance': 100000, 'rate_bp': 1250, 'last_paid_day': 100, 'payoff_day': 130, 'basis': 360, 'fees_due': 3500, 'escrow': -4000, 'penalty_bp': 100, 'penalty_until': 115}, {'per_diem': 35, 'interest': 1050, 'penalty': 0, 'payoff': 108550}]], [['regression: penalty base', {'balance': 5000, 'rate_bp': 600, 'last_paid_day': 10, 'payoff_day': 40, 'basis': 365, 'fees_due': 3500, 'escrow': 0, 'penalty_bp': 200, 'penalty_until': 70}, {'per_diem': 1, 'interest': 30, 'penalty': 100, 'payoff': 8630}], ['control 1', {'balance': 12345678, 'rate_bp': 450, 'last_paid_day': 1, 'payoff_day': 32, 'basis': 365, 'fees_due': 3500, 'escrow': -4000, 'penalty_bp': 100, 'penalty_until': 1}, {'per_diem': 1522, 'interest': 47182, 'penalty': 0, 'payoff': 12400360}], ['control 2', {'balance': 5000, 'rate_bp': 1250, 'last_paid_day': 1, 'payoff_day': 46, 'basis': 360, 'fees_due': 0, 'escrow': 12000, 'penalty_bp': 100, 'penalty_until': 16}, {'per_diem': 2, 'interest': 90, 'penalty': 0, 'payoff': -6910}], ['control 3', {'balance': 5000, 'rate_bp': 600, 'last_paid_day': 100, 'payoff_day': 130, 'basis': 365, 'fees_due': 3500, 'escrow': -4000, 'penalty_bp': 200, 'penalty_until': 100}, {'per_diem': 1, 'interest': 30, 'penalty': 0, 'payoff': 12530}], ['control 4', {'balance': 5000, 'rate_bp': 1250, 'last_paid_day': 100, 'payoff_day': 115, 'basis': 365, 'fees_due': 3500, 'escrow': 12000, 'penalty_bp': 100, 'penalty_until': 160}, {'per_diem': 2, 'interest': 30, 'penalty': 50, 'payoff': -3420}], ['control 5', {'balance': 100000, 'rate_bp': 1250, 'last_paid_day': 1, 'payoff_day': 46, 'basis': 365, 'fees_due': 0, 'escrow': 0, 'penalty_bp': 0, 'penalty_until': 61}, {'per_diem': 34, 'interest': 1530, 'penalty': 0, 'payoff': 101530}], ['control 6', {'balance': 12345678, 'rate_bp': 1250, 'last_paid_day': 100, 'payoff_day': 115, 'basis': 365, 'fees_due': 3500, 'escrow': 0, 'penalty_bp': 200, 'penalty_until': 100}, {'per_diem': 4228, 'interest': 63420, 'penalty': 0, 'payoff': 12412598}]], [['regression: penalty base', {'balance': 12345678, 'rate_bp': 450, 'last_paid_day': 100, 'payoff_day': 115, 'basis': 360, 'fees_due': 3500, 'escrow': 0, 'penalty_bp': 100, 'penalty_until': 160}, {'per_diem': 1543, 'interest': 23145, 'penalty': 123457, 'payoff': 12495780}], ['control 1', {'balance': 999999, 'rate_bp': 1250, 'last_paid_day': 100, 'payoff_day': 131, 'basis': 360, 'fees_due': 3500, 'escrow': 0, 'penalty_bp': 100, 'penalty_until': 115}, {'per_diem': 347, 'interest': 10757, 'penalty': 0, 'payoff': 1014256}], ['control 2', {'balance': 12345678, 'rate_bp': 450, 'last_paid_day': 100, 'payoff_day': 130, 'basis': 365, 'fees_due': 0, 'escrow': 12000, 'penalty_bp': 0, 'penalty_until': 130}, {'per_diem': 1522, 'interest': 45660, 'penalty': 0, 'payoff': 12379338}], ['control 3', {'balance': 12345678, 'rate_bp': 450, 'last_paid_day': 1, 'payoff_day': 31, 'basis': 360, 'fees_due': 3500, 'escrow': -4000, 'penalty_bp': 200, 'penalty_until': 1}, {'per_diem': 1543, 'interest': 46290, 'penalty': 0, 'payoff': 12399468}], ['control 4', {'balance': 999999, 'rate_bp': 600, 'last_paid_day': 10, 'payoff_day': 40, 'basis': 360, 'fees_due': 0, 'escrow': 0, 'penalty_bp': 0, 'penalty_until': 70}, {'per_diem': 167, 'interest': 5010, 'penalty': 0, 'payoff': 1005009}], ['control 5', {'balance': 999999, 'rate_bp': 450, 'last_paid_day': 1, 'payoff_day': 31, 'basis': 360, 'fees_due': 0, 'escrow': -4000, 'penalty_bp': 200, 'penalty_until': 16}, {'per_diem': 125, 'interest': 3750, 'penalty': 0, 'payoff': 1007749}], ['control 6', {'balance': 999999, 'rate_bp': 450, 'last_paid_day': 10, 'payoff_day': 11, 'basis': 365, 'fees_due': 3500, 'escrow': 12000, 'penalty_bp': 0, 'penalty_until': 25}, {'per_diem': 123, 'interest': 123, 'penalty': 0, 'payoff': 991622}]]]\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":"121c23eb1496a6f7f31e0eda02b62fc4e95e9d4e5c21948fdcb820bcf5f9cdbc","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\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    per_diem = rnd(x['balance'] * x['rate_bp'], 10000 * x['basis'])\n    days = x['payoff_day'] - x['last_paid_day']\n    interest = per_diem * days\n    penalty = rnd((x['balance'] + interest) * x['penalty_bp'], 10000) if x['payoff_day'] <= x['penalty_until'] else 0\n    payoff = x['balance'] + interest + x['fees_due'] + penalty - x['escrow']\n    return {'per_diem': per_diem, 'interest': interest, 'penalty': penalty, 'payoff': payoff}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: penalty base', {'balance': 100000, 'rate_bp': 1250, 'last_paid_day': 1, 'payoff_day': 16, 'basis': 360, 'fees_due': 3500, 'escrow': 12000, 'penalty_bp': 100, 'penalty_until': 31}, {'per_diem': 35, 'interest': 525, 'penalty': 1000, 'payoff': 93025}], ['control 1', {'balance': 100000, 'rate_bp': 600, 'last_paid_day': 100, 'payoff_day': 145, 'basis': 360, 'fees_due': 3500, 'escrow': -4000, 'penalty_bp': 0, 'penalty_until': 115}, {'per_diem': 17, 'interest': 765, 'penalty': 0, 'payoff': 108265}], ['control 2', {'balance': 999999, 'rate_bp': 600, 'last_paid_day': 10, 'payoff_day': 11, 'basis': 365, 'fees_due': 0, 'escrow': 0, 'penalty_bp': 100, 'penalty_until': 10}, {'per_diem': 164, 'interest': 164, 'penalty': 0, 'payoff': 1000163}], ['control 3', {'balance': 12345678, 'rate_bp': 600, 'last_paid_day': 10, 'payoff_day': 41, 'basis': 360, 'fees_due': 3500, 'escrow': 12000, 'penalty_bp': 200, 'penalty_until': 40}, {'per_diem': 2058, 'interest': 63798, 'penalty': 0, 'payoff': 12400976}], ['control 4', {'balance': 12345678, 'rate_bp': 450, 'last_paid_day': 10, 'payoff_day': 55, 'basis': 360, 'fees_due': 0, 'escrow': 0, 'penalty_bp': 100, 'penalty_until': 25}, {'per_diem': 1543, 'interest': 69435, 'penalty': 0, 'payoff': 12415113}], ['control 5', {'balance': 5000, 'rate_bp': 1250, 'last_paid_day': 10, 'payoff_day': 41, 'basis': 360, 'fees_due': 0, 'escrow': 12000, 'penalty_bp': 0, 'penalty_until': 25}, {'per_diem': 2, 'interest': 62, 'penalty': 0, 'payoff': -6938}], ['control 6', {'balance': 100000, 'rate_bp': 600, 'last_paid_day': 1, 'payoff_day': 46, 'basis': 365, 'fees_due': 0, 'escrow': 12000, 'penalty_bp': 200, 'penalty_until': 1}, {'per_diem': 16, 'interest': 720, 'penalty': 0, 'payoff': 88720}]], [['regression: penalty base', {'balance': 12345678, 'rate_bp': 450, 'last_paid_day': 10, 'payoff_day': 11, 'basis': 365, 'fees_due': 0, 'escrow': -4000, 'penalty_bp': 200, 'penalty_until': 40}, {'per_diem': 1522, 'interest': 1522, 'penalty': 246914, 'payoff': 12598114}], ['control 1', {'balance': 999999, 'rate_bp': 1250, 'last_paid_day': 1, 'payoff_day': 46, 'basis': 365, 'fees_due': 3500, 'escrow': -4000, 'penalty_bp': 100, 'penalty_until': 1}, {'per_diem': 342, 'interest': 15390, 'penalty': 0, 'payoff': 1022889}], ['control 2', {'balance': 100000, 'rate_bp': 450, 'last_paid_day': 1, 'payoff_day': 2, 'basis': 360, 'fees_due': 3500, 'escrow': 0, 'penalty_bp': 200, 'penalty_until': 61}, {'per_diem': 13, 'interest': 13, 'penalty': 2000, 'payoff': 105513}], ['control 3', {'balance': 100000, 'rate_bp': 1250, 'last_paid_day': 10, 'payoff_day': 25, 'basis': 365, 'fees_due': 0, 'escrow': 0, 'penalty_bp': 100, 'penalty_until': 10}, {'per_diem': 34, 'interest': 510, 'penalty': 0, 'payoff': 100510}], ['control 4', {'balance': 999999, 'rate_bp': 450, 'last_paid_day': 1, 'payoff_day': 31, 'basis': 360, 'fees_due': 3500, 'escrow': 0, 'penalty_bp': 0, 'penalty_until': 61}, {'per_diem': 125, 'interest': 3750, 'penalty': 0, 'payoff': 1007249}], ['control 5', {'balance': 12345678, 'rate_bp': 1250, 'last_paid_day': 10, 'payoff_day': 11, 'basis': 365, 'fees_due': 0, 'escrow': 12000, 'penalty_bp': 0, 'penalty_until': 40}, {'per_diem': 4228, 'interest': 4228, 'penalty': 0, 'payoff': 12337906}], ['control 6', {'balance': 100000, 'rate_bp': 450, 'last_paid_day': 100, 'payoff_day': 101, 'basis': 365, 'fees_due': 0, 'escrow': 12000, 'penalty_bp': 200, 'penalty_until': 130}, {'per_diem': 12, 'interest': 12, 'penalty': 2000, 'payoff': 90012}]], [['regression: penalty base', {'balance': 12345678, 'rate_bp': 600, 'last_paid_day': 1, 'payoff_day': 31, 'basis': 360, 'fees_due': 0, 'escrow': 0, 'penalty_bp': 200, 'penalty_until': 31}, {'per_diem': 2058, 'interest': 61740, 'penalty': 246914, 'payoff': 12654332}], ['control 1', {'balance': 5000, 'rate_bp': 450, 'last_paid_day': 10, 'payoff_day': 55, 'basis': 365, 'fees_due': 0, 'escrow': -4000, 'penalty_bp': 0, 'penalty_until': 40}, {'per_diem': 1, 'interest': 45, 'penalty': 0, 'payoff': 9045}], ['control 2', {'balance': 100000, 'rate_bp': 1250, 'last_paid_day': 1, 'payoff_day': 46, 'basis': 360, 'fees_due': 0, 'escrow': 12000, 'penalty_bp': 0, 'penalty_until': 31}, {'per_diem': 35, 'interest': 1575, 'penalty': 0, 'payoff': 89575}], ['control 3', {'balance': 999999, 'rate_bp': 1250, 'last_paid_day': 10, 'payoff_day': 25, 'basis': 365, 'fees_due': 0, 'escrow': 0, 'penalty_bp': 0, 'penalty_until': 40}, {'per_diem': 342, 'interest': 5130, 'penalty': 0, 'payoff': 1005129}], ['control 4', {'balance': 12345678, 'rate_bp': 450, 'last_paid_day': 1, 'payoff_day': 31, 'basis': 360, 'fees_due': 3500, 'escrow': 12000, 'penalty_bp': 100, 'penalty_until': 16}, {'per_diem': 1543, 'interest': 46290, 'penalty': 0, 'payoff': 12383468}], ['control 5', {'balance': 100000, 'rate_bp': 1250, 'last_paid_day': 1, 'payoff_day': 2, 'basis': 365, 'fees_due': 3500, 'escrow': 12000, 'penalty_bp': 100, 'penalty_until': 1}, {'per_diem': 34, 'interest': 34, 'penalty': 0, 'payoff': 91534}], ['control 6', {'balance': 100000, 'rate_bp': 1250, 'last_paid_day': 100, 'payoff_day': 130, 'basis': 360, 'fees_due': 3500, 'escrow': -4000, 'penalty_bp': 100, 'penalty_until': 115}, {'per_diem': 35, 'interest': 1050, 'penalty': 0, 'payoff': 108550}]], [['regression: penalty base', {'balance': 5000, 'rate_bp': 600, 'last_paid_day': 10, 'payoff_day': 40, 'basis': 365, 'fees_due': 3500, 'escrow': 0, 'penalty_bp': 200, 'penalty_until': 70}, {'per_diem': 1, 'interest': 30, 'penalty': 100, 'payoff': 8630}], ['control 1', {'balance': 12345678, 'rate_bp': 450, 'last_paid_day': 1, 'payoff_day': 32, 'basis': 365, 'fees_due': 3500, 'escrow': -4000, 'penalty_bp': 100, 'penalty_until': 1}, {'per_diem': 1522, 'interest': 47182, 'penalty': 0, 'payoff': 12400360}], ['control 2', {'balance': 5000, 'rate_bp': 1250, 'last_paid_day': 1, 'payoff_day': 46, 'basis': 360, 'fees_due': 0, 'escrow': 12000, 'penalty_bp': 100, 'penalty_until': 16}, {'per_diem': 2, 'interest': 90, 'penalty': 0, 'payoff': -6910}], ['control 3', {'balance': 5000, 'rate_bp': 600, 'last_paid_day': 100, 'payoff_day': 130, 'basis': 365, 'fees_due': 3500, 'escrow': -4000, 'penalty_bp': 200, 'penalty_until': 100}, {'per_diem': 1, 'interest': 30, 'penalty': 0, 'payoff': 12530}], ['control 4', {'balance': 5000, 'rate_bp': 1250, 'last_paid_day': 100, 'payoff_day': 115, 'basis': 365, 'fees_due': 3500, 'escrow': 12000, 'penalty_bp': 100, 'penalty_until': 160}, {'per_diem': 2, 'interest': 30, 'penalty': 50, 'payoff': -3420}], ['control 5', {'balance': 100000, 'rate_bp': 1250, 'last_paid_day': 1, 'payoff_day': 46, 'basis': 365, 'fees_due': 0, 'escrow': 0, 'penalty_bp': 0, 'penalty_until': 61}, {'per_diem': 34, 'interest': 1530, 'penalty': 0, 'payoff': 101530}], ['control 6', {'balance': 12345678, 'rate_bp': 1250, 'last_paid_day': 100, 'payoff_day': 115, 'basis': 365, 'fees_due': 3500, 'escrow': 0, 'penalty_bp': 200, 'penalty_until': 100}, {'per_diem': 4228, 'interest': 63420, 'penalty': 0, 'payoff': 12412598}]], [['regression: penalty base', {'balance': 12345678, 'rate_bp': 450, 'last_paid_day': 100, 'payoff_day': 115, 'basis': 360, 'fees_due': 3500, 'escrow': 0, 'penalty_bp': 100, 'penalty_until': 160}, {'per_diem': 1543, 'interest': 23145, 'penalty': 123457, 'payoff': 12495780}], ['control 1', {'balance': 999999, 'rate_bp': 1250, 'last_paid_day': 100, 'payoff_day': 131, 'basis': 360, 'fees_due': 3500, 'escrow': 0, 'penalty_bp': 100, 'penalty_until': 115}, {'per_diem': 347, 'interest': 10757, 'penalty': 0, 'payoff': 1014256}], ['control 2', {'balance': 12345678, 'rate_bp': 450, 'last_paid_day': 100, 'payoff_day': 130, 'basis': 365, 'fees_due': 0, 'escrow': 12000, 'penalty_bp': 0, 'penalty_until': 130}, {'per_diem': 1522, 'interest': 45660, 'penalty': 0, 'payoff': 12379338}], ['control 3', {'balance': 12345678, 'rate_bp': 450, 'last_paid_day': 1, 'payoff_day': 31, 'basis': 360, 'fees_due': 3500, 'escrow': -4000, 'penalty_bp': 200, 'penalty_until': 1}, {'per_diem': 1543, 'interest': 46290, 'penalty': 0, 'payoff': 12399468}], ['control 4', {'balance': 999999, 'rate_bp': 600, 'last_paid_day': 10, 'payoff_day': 40, 'basis': 360, 'fees_due': 0, 'escrow': 0, 'penalty_bp': 0, 'penalty_until': 70}, {'per_diem': 167, 'interest': 5010, 'penalty': 0, 'payoff': 1005009}], ['control 5', {'balance': 999999, 'rate_bp': 450, 'last_paid_day': 1, 'payoff_day': 31, 'basis': 360, 'fees_due': 0, 'escrow': -4000, 'penalty_bp': 200, 'penalty_until': 16}, {'per_diem': 125, 'interest': 3750, 'penalty': 0, 'payoff': 1007749}], ['control 6', {'balance': 999999, 'rate_bp': 450, 'last_paid_day': 10, 'payoff_day': 11, 'basis': 365, 'fees_due': 3500, 'escrow': 12000, 'penalty_bp': 0, 'penalty_until': 25}, {'per_diem': 123, 'interest': 123, 'penalty': 0, 'payoff': 991622}]]]\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":"93b8634caaf5d3511e2d361be126418635e6d872222dda625a7042da73f0da08","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\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    per_diem = rnd(x['balance'] * x['rate_bp'], 10000 * x['basis'])\n    days = x['payoff_day'] - x['last_paid_day']\n    interest = per_diem * days\n    penalty = rnd(x['balance'] * x['penalty_bp'], 10000) if x['payoff_day'] <= x['penalty_until'] else 0\n    payoff = x['balance'] + interest + x['fees_due'] + penalty - x['escrow']\n    return {'per_diem': per_diem, 'interest': interest, 'penalty': penalty, 'payoff': payoff}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: penalty base', {'balance': 100000, 'rate_bp': 1250, 'last_paid_day': 1, 'payoff_day': 16, 'basis': 360, 'fees_due': 3500, 'escrow': 12000, 'penalty_bp': 100, 'penalty_until': 31}, {'per_diem': 35, 'interest': 525, 'penalty': 1000, 'payoff': 93025}], ['control 1', {'balance': 100000, 'rate_bp': 600, 'last_paid_day': 100, 'payoff_day': 145, 'basis': 360, 'fees_due': 3500, 'escrow': -4000, 'penalty_bp': 0, 'penalty_until': 115}, {'per_diem': 17, 'interest': 765, 'penalty': 0, 'payoff': 108265}], ['control 2', {'balance': 999999, 'rate_bp': 600, 'last_paid_day': 10, 'payoff_day': 11, 'basis': 365, 'fees_due': 0, 'escrow': 0, 'penalty_bp': 100, 'penalty_until': 10}, {'per_diem': 164, 'interest': 164, 'penalty': 0, 'payoff': 1000163}], ['control 3', {'balance': 12345678, 'rate_bp': 600, 'last_paid_day': 10, 'payoff_day': 41, 'basis': 360, 'fees_due': 3500, 'escrow': 12000, 'penalty_bp': 200, 'penalty_until': 40}, {'per_diem': 2058, 'interest': 63798, 'penalty': 0, 'payoff': 12400976}], ['control 4', {'balance': 12345678, 'rate_bp': 450, 'last_paid_day': 10, 'payoff_day': 55, 'basis': 360, 'fees_due': 0, 'escrow': 0, 'penalty_bp': 100, 'penalty_until': 25}, {'per_diem': 1543, 'interest': 69435, 'penalty': 0, 'payoff': 12415113}], ['control 5', {'balance': 5000, 'rate_bp': 1250, 'last_paid_day': 10, 'payoff_day': 41, 'basis': 360, 'fees_due': 0, 'escrow': 12000, 'penalty_bp': 0, 'penalty_until': 25}, {'per_diem': 2, 'interest': 62, 'penalty': 0, 'payoff': -6938}], ['control 6', {'balance': 100000, 'rate_bp': 600, 'last_paid_day': 1, 'payoff_day': 46, 'basis': 365, 'fees_due': 0, 'escrow': 12000, 'penalty_bp': 200, 'penalty_until': 1}, {'per_diem': 16, 'interest': 720, 'penalty': 0, 'payoff': 88720}]], [['regression: penalty base', {'balance': 12345678, 'rate_bp': 450, 'last_paid_day': 10, 'payoff_day': 11, 'basis': 365, 'fees_due': 0, 'escrow': -4000, 'penalty_bp': 200, 'penalty_until': 40}, {'per_diem': 1522, 'interest': 1522, 'penalty': 246914, 'payoff': 12598114}], ['control 1', {'balance': 999999, 'rate_bp': 1250, 'last_paid_day': 1, 'payoff_day': 46, 'basis': 365, 'fees_due': 3500, 'escrow': -4000, 'penalty_bp': 100, 'penalty_until': 1}, {'per_diem': 342, 'interest': 15390, 'penalty': 0, 'payoff': 1022889}], ['control 2', {'balance': 100000, 'rate_bp': 450, 'last_paid_day': 1, 'payoff_day': 2, 'basis': 360, 'fees_due': 3500, 'escrow': 0, 'penalty_bp': 200, 'penalty_until': 61}, {'per_diem': 13, 'interest': 13, 'penalty': 2000, 'payoff': 105513}], ['control 3', {'balance': 100000, 'rate_bp': 1250, 'last_paid_day': 10, 'payoff_day': 25, 'basis': 365, 'fees_due': 0, 'escrow': 0, 'penalty_bp': 100, 'penalty_until': 10}, {'per_diem': 34, 'interest': 510, 'penalty': 0, 'payoff': 100510}], ['control 4', {'balance': 999999, 'rate_bp': 450, 'last_paid_day': 1, 'payoff_day': 31, 'basis': 360, 'fees_due': 3500, 'escrow': 0, 'penalty_bp': 0, 'penalty_until': 61}, {'per_diem': 125, 'interest': 3750, 'penalty': 0, 'payoff': 1007249}], ['control 5', {'balance': 12345678, 'rate_bp': 1250, 'last_paid_day': 10, 'payoff_day': 11, 'basis': 365, 'fees_due': 0, 'escrow': 12000, 'penalty_bp': 0, 'penalty_until': 40}, {'per_diem': 4228, 'interest': 4228, 'penalty': 0, 'payoff': 12337906}], ['control 6', {'balance': 100000, 'rate_bp': 450, 'last_paid_day': 100, 'payoff_day': 101, 'basis': 365, 'fees_due': 0, 'escrow': 12000, 'penalty_bp': 200, 'penalty_until': 130}, {'per_diem': 12, 'interest': 12, 'penalty': 2000, 'payoff': 90012}]], [['regression: penalty base', {'balance': 12345678, 'rate_bp': 600, 'last_paid_day': 1, 'payoff_day': 31, 'basis': 360, 'fees_due': 0, 'escrow': 0, 'penalty_bp': 200, 'penalty_until': 31}, {'per_diem': 2058, 'interest': 61740, 'penalty': 246914, 'payoff': 12654332}], ['control 1', {'balance': 5000, 'rate_bp': 450, 'last_paid_day': 10, 'payoff_day': 55, 'basis': 365, 'fees_due': 0, 'escrow': -4000, 'penalty_bp': 0, 'penalty_until': 40}, {'per_diem': 1, 'interest': 45, 'penalty': 0, 'payoff': 9045}], ['control 2', {'balance': 100000, 'rate_bp': 1250, 'last_paid_day': 1, 'payoff_day': 46, 'basis': 360, 'fees_due': 0, 'escrow': 12000, 'penalty_bp': 0, 'penalty_until': 31}, {'per_diem': 35, 'interest': 1575, 'penalty': 0, 'payoff': 89575}], ['control 3', {'balance': 999999, 'rate_bp': 1250, 'last_paid_day': 10, 'payoff_day': 25, 'basis': 365, 'fees_due': 0, 'escrow': 0, 'penalty_bp': 0, 'penalty_until': 40}, {'per_diem': 342, 'interest': 5130, 'penalty': 0, 'payoff': 1005129}], ['control 4', {'balance': 12345678, 'rate_bp': 450, 'last_paid_day': 1, 'payoff_day': 31, 'basis': 360, 'fees_due': 3500, 'escrow': 12000, 'penalty_bp': 100, 'penalty_until': 16}, {'per_diem': 1543, 'interest': 46290, 'penalty': 0, 'payoff': 12383468}], ['control 5', {'balance': 100000, 'rate_bp': 1250, 'last_paid_day': 1, 'payoff_day': 2, 'basis': 365, 'fees_due': 3500, 'escrow': 12000, 'penalty_bp': 100, 'penalty_until': 1}, {'per_diem': 34, 'interest': 34, 'penalty': 0, 'payoff': 91534}], ['control 6', {'balance': 100000, 'rate_bp': 1250, 'last_paid_day': 100, 'payoff_day': 130, 'basis': 360, 'fees_due': 3500, 'escrow': -4000, 'penalty_bp': 100, 'penalty_until': 115}, {'per_diem': 35, 'interest': 1050, 'penalty': 0, 'payoff': 108550}]], [['regression: penalty base', {'balance': 5000, 'rate_bp': 600, 'last_paid_day': 10, 'payoff_day': 40, 'basis': 365, 'fees_due': 3500, 'escrow': 0, 'penalty_bp': 200, 'penalty_until': 70}, {'per_diem': 1, 'interest': 30, 'penalty': 100, 'payoff': 8630}], ['control 1', {'balance': 12345678, 'rate_bp': 450, 'last_paid_day': 1, 'payoff_day': 32, 'basis': 365, 'fees_due': 3500, 'escrow': -4000, 'penalty_bp': 100, 'penalty_until': 1}, {'per_diem': 1522, 'interest': 47182, 'penalty': 0, 'payoff': 12400360}], ['control 2', {'balance': 5000, 'rate_bp': 1250, 'last_paid_day': 1, 'payoff_day': 46, 'basis': 360, 'fees_due': 0, 'escrow': 12000, 'penalty_bp': 100, 'penalty_until': 16}, {'per_diem': 2, 'interest': 90, 'penalty': 0, 'payoff': -6910}], ['control 3', {'balance': 5000, 'rate_bp': 600, 'last_paid_day': 100, 'payoff_day': 130, 'basis': 365, 'fees_due': 3500, 'escrow': -4000, 'penalty_bp': 200, 'penalty_until': 100}, {'per_diem': 1, 'interest': 30, 'penalty': 0, 'payoff': 12530}], ['control 4', {'balance': 5000, 'rate_bp': 1250, 'last_paid_day': 100, 'payoff_day': 115, 'basis': 365, 'fees_due': 3500, 'escrow': 12000, 'penalty_bp': 100, 'penalty_until': 160}, {'per_diem': 2, 'interest': 30, 'penalty': 50, 'payoff': -3420}], ['control 5', {'balance': 100000, 'rate_bp': 1250, 'last_paid_day': 1, 'payoff_day': 46, 'basis': 365, 'fees_due': 0, 'escrow': 0, 'penalty_bp': 0, 'penalty_until': 61}, {'per_diem': 34, 'interest': 1530, 'penalty': 0, 'payoff': 101530}], ['control 6', {'balance': 12345678, 'rate_bp': 1250, 'last_paid_day': 100, 'payoff_day': 115, 'basis': 365, 'fees_due': 3500, 'escrow': 0, 'penalty_bp': 200, 'penalty_until': 100}, {'per_diem': 4228, 'interest': 63420, 'penalty': 0, 'payoff': 12412598}]], [['regression: penalty base', {'balance': 12345678, 'rate_bp': 450, 'last_paid_day': 100, 'payoff_day': 115, 'basis': 360, 'fees_due': 3500, 'escrow': 0, 'penalty_bp': 100, 'penalty_until': 160}, {'per_diem': 1543, 'interest': 23145, 'penalty': 123457, 'payoff': 12495780}], ['control 1', {'balance': 999999, 'rate_bp': 1250, 'last_paid_day': 100, 'payoff_day': 131, 'basis': 360, 'fees_due': 3500, 'escrow': 0, 'penalty_bp': 100, 'penalty_until': 115}, {'per_diem': 347, 'interest': 10757, 'penalty': 0, 'payoff': 1014256}], ['control 2', {'balance': 12345678, 'rate_bp': 450, 'last_paid_day': 100, 'payoff_day': 130, 'basis': 365, 'fees_due': 0, 'escrow': 12000, 'penalty_bp': 0, 'penalty_until': 130}, {'per_diem': 1522, 'interest': 45660, 'penalty': 0, 'payoff': 12379338}], ['control 3', {'balance': 12345678, 'rate_bp': 450, 'last_paid_day': 1, 'payoff_day': 31, 'basis': 360, 'fees_due': 3500, 'escrow': -4000, 'penalty_bp': 200, 'penalty_until': 1}, {'per_diem': 1543, 'interest': 46290, 'penalty': 0, 'payoff': 12399468}], ['control 4', {'balance': 999999, 'rate_bp': 600, 'last_paid_day': 10, 'payoff_day': 40, 'basis': 360, 'fees_due': 0, 'escrow': 0, 'penalty_bp': 0, 'penalty_until': 70}, {'per_diem': 167, 'interest': 5010, 'penalty': 0, 'payoff': 1005009}], ['control 5', {'balance': 999999, 'rate_bp': 450, 'last_paid_day': 1, 'payoff_day': 31, 'basis': 360, 'fees_due': 0, 'escrow': -4000, 'penalty_bp': 200, 'penalty_until': 16}, {'per_diem': 125, 'interest': 3750, 'penalty': 0, 'payoff': 1007749}], ['control 6', {'balance': 999999, 'rate_bp': 450, 'last_paid_day': 10, 'payoff_day': 11, 'basis': 365, 'fees_due': 3500, 'escrow': 12000, 'penalty_bp': 0, 'penalty_until': 25}, {'per_diem': 123, 'interest': 123, 'penalty': 0, 'payoff': 991622}]]]\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-payoff-quote-per-diem-penalty-base","generated_at":"2026-09-29T14:46:28.845136+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":"Compute the penalty on the principal balance.","root_cause":"The penalty base adds payoff interest to the balance.","sha256":"8c7857181c7b27b2162cb376f91fe6d30d288594ae4878d2d5ac8844c4fa4c75","title":"Payoff quote with per diem: penalty base · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.605,"exit_code":1,"observations":[{"actual":{"interest":525,"payoff":92108,"penalty":83,"per_diem":35},"check":"regression: penalty base","expected":{"interest":525,"payoff":93025,"penalty":1000,"per_diem":35},"passed":false},{"actual":{"interest":765,"payoff":108265,"penalty":0,"per_diem":17},"check":"control 1","expected":{"interest":765,"payoff":108265,"penalty":0,"per_diem":17},"passed":true},{"actual":{"interest":164,"payoff":1000163,"penalty":0,"per_diem":164},"check":"control 2","expected":{"interest":164,"payoff":1000163,"penalty":0,"per_diem":164},"passed":true},{"actual":{"interest":63798,"payoff":12400976,"penalty":0,"per_diem":2058},"check":"control 3","expected":{"interest":63798,"payoff":12400976,"penalty":0,"per_diem":2058},"passed":true},{"actual":{"interest":69435,"payoff":12415113,"penalty":0,"per_diem":1543},"check":"control 4","expected":{"interest":69435,"payoff":12415113,"penalty":0,"per_diem":1543},"passed":true},{"actual":{"interest":62,"payoff":-6938,"penalty":0,"per_diem":2},"check":"control 5","expected":{"interest":62,"payoff":-6938,"penalty":0,"per_diem":2},"passed":true},{"actual":{"interest":720,"payoff":88720,"penalty":0,"per_diem":16},"check":"control 6","expected":{"interest":720,"payoff":88720,"penalty":0,"per_diem":16},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: penalty base\", \"actual\": {\"per_diem\": 35, \"interest\": 525, \"penalty\": 83, \"payoff\": 92108}, \"expected\": {\"per_diem\": 35, \"interest\": 525, \"penalty\": 1000, \"payoff\": 93025}, \"passed\": false}, {\"check\": \"control 1\", \"actual\": {\"per_diem\": 17, \"interest\": 765, \"penalty\": 0, \"payoff\": 108265}, \"expected\": {\"per_diem\": 17, \"interest\": 765, \"penalty\": 0, \"payoff\": 108265}, \"passed\": true}, {\"check\": \"control 2\", \"actual\": {\"per_diem\": 164, \"interest\": 164, \"penalty\": 0, \"payoff\": 1000163}, \"expected\": {\"per_diem\": 164, \"interest\": 164, \"penalty\": 0, \"payoff\": 1000163}, \"passed\": true}, {\"check\": \"control 3\", \"actual\": {\"per_diem\": 2058, \"interest\": 63798, \"penalty\": 0, \"payoff\": 12400976}, \"expected\": {\"per_diem\": 2058, \"interest\": 63798, \"penalty\": 0, \"payoff\": 12400976}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"per_diem\": 1543, \"interest\": 69435, \"penalty\": 0, \"payoff\": 12415113}, \"expected\": {\"per_diem\": 1543, \"interest\": 69435, \"penalty\": 0, \"payoff\": 12415113}, \"passed\": true}, {\"check\": \"control 5\", \"actual\": {\"per_diem\": 2, \"interest\": 62, \"penalty\": 0, \"payoff\": -6938}, \"expected\": {\"per_diem\": 2, \"interest\": 62, \"penalty\": 0, \"payoff\": -6938}, \"passed\": true}, {\"check\": \"control 6\", \"actual\": {\"per_diem\": 16, \"interest\": 720, \"penalty\": 0, \"payoff\": 88720}, \"expected\": {\"per_diem\": 16, \"interest\": 720, \"penalty\": 0, \"payoff\": 88720}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":37.609,"exit_code":1,"observations":[{"actual":{"interest":525,"payoff":93030,"penalty":1005,"per_diem":35},"check":"regression: penalty base","expected":{"interest":525,"payoff":93025,"penalty":1000,"per_diem":35},"passed":false},{"actual":{"interest":765,"payoff":108265,"penalty":0,"per_diem":17},"check":"control 1","expected":{"interest":765,"payoff":108265,"penalty":0,"per_diem":17},"passed":true},{"actual":{"interest":164,"payoff":1000163,"penalty":0,"per_diem":164},"check":"control 2","expected":{"interest":164,"payoff":1000163,"penalty":0,"per_diem":164},"passed":true},{"actual":{"interest":63798,"payoff":12400976,"penalty":0,"per_diem":2058},"check":"control 3","expected":{"interest":63798,"payoff":12400976,"penalty":0,"per_diem":2058},"passed":true},{"actual":{"interest":69435,"payoff":12415113,"penalty":0,"per_diem":1543},"check":"control 4","expected":{"interest":69435,"payoff":12415113,"penalty":0,"per_diem":1543},"passed":true},{"actual":{"interest":62,"payoff":-6938,"penalty":0,"per_diem":2},"check":"control 5","expected":{"interest":62,"payoff":-6938,"penalty":0,"per_diem":2},"passed":true},{"actual":{"interest":720,"payoff":88720,"penalty":0,"per_diem":16},"check":"control 6","expected":{"interest":720,"payoff":88720,"penalty":0,"per_diem":16},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: penalty base\", \"actual\": {\"per_diem\": 35, \"interest\": 525, \"penalty\": 1005, \"payoff\": 93030}, \"expected\": {\"per_diem\": 35, \"interest\": 525, \"penalty\": 1000, \"payoff\": 93025}, \"passed\": false}, {\"check\": \"control 1\", \"actual\": {\"per_diem\": 17, \"interest\": 765, \"penalty\": 0, \"payoff\": 108265}, \"expected\": {\"per_diem\": 17, \"interest\": 765, \"penalty\": 0, \"payoff\": 108265}, \"passed\": true}, {\"check\": \"control 2\", \"actual\": {\"per_diem\": 164, \"interest\": 164, \"penalty\": 0, \"payoff\": 1000163}, \"expected\": {\"per_diem\": 164, \"interest\": 164, \"penalty\": 0, \"payoff\": 1000163}, \"passed\": true}, {\"check\": \"control 3\", \"actual\": {\"per_diem\": 2058, \"interest\": 63798, \"penalty\": 0, \"payoff\": 12400976}, \"expected\": {\"per_diem\": 2058, \"interest\": 63798, \"penalty\": 0, \"payoff\": 12400976}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"per_diem\": 1543, \"interest\": 69435, \"penalty\": 0, \"payoff\": 12415113}, \"expected\": {\"per_diem\": 1543, \"interest\": 69435, \"penalty\": 0, \"payoff\": 12415113}, \"passed\": true}, {\"check\": \"control 5\", \"actual\": {\"per_diem\": 2, \"interest\": 62, \"penalty\": 0, \"payoff\": -6938}, \"expected\": {\"per_diem\": 2, \"interest\": 62, \"penalty\": 0, \"payoff\": -6938}, \"passed\": true}, {\"check\": \"control 6\", \"actual\": {\"per_diem\": 16, \"interest\": 720, \"penalty\": 0, \"payoff\": 88720}, \"expected\": {\"per_diem\": 16, \"interest\": 720, \"penalty\": 0, \"payoff\": 88720}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.102,"exit_code":0,"observations":[{"actual":{"interest":525,"payoff":93025,"penalty":1000,"per_diem":35},"check":"regression: penalty base","expected":{"interest":525,"payoff":93025,"penalty":1000,"per_diem":35},"passed":true},{"actual":{"interest":765,"payoff":108265,"penalty":0,"per_diem":17},"check":"control 1","expected":{"interest":765,"payoff":108265,"penalty":0,"per_diem":17},"passed":true},{"actual":{"interest":164,"payoff":1000163,"penalty":0,"per_diem":164},"check":"control 2","expected":{"interest":164,"payoff":1000163,"penalty":0,"per_diem":164},"passed":true},{"actual":{"interest":63798,"payoff":12400976,"penalty":0,"per_diem":2058},"check":"control 3","expected":{"interest":63798,"payoff":12400976,"penalty":0,"per_diem":2058},"passed":true},{"actual":{"interest":69435,"payoff":12415113,"penalty":0,"per_diem":1543},"check":"control 4","expected":{"interest":69435,"payoff":12415113,"penalty":0,"per_diem":1543},"passed":true},{"actual":{"interest":62,"payoff":-6938,"penalty":0,"per_diem":2},"check":"control 5","expected":{"interest":62,"payoff":-6938,"penalty":0,"per_diem":2},"passed":true},{"actual":{"interest":720,"payoff":88720,"penalty":0,"per_diem":16},"check":"control 6","expected":{"interest":720,"payoff":88720,"penalty":0,"per_diem":16},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: penalty base\", \"actual\": {\"per_diem\": 35, \"interest\": 525, \"penalty\": 1000, \"payoff\": 93025}, \"expected\": {\"per_diem\": 35, \"interest\": 525, \"penalty\": 1000, \"payoff\": 93025}, \"passed\": true}, {\"check\": \"control 1\", \"actual\": {\"per_diem\": 17, \"interest\": 765, \"penalty\": 0, \"payoff\": 108265}, \"expected\": {\"per_diem\": 17, \"interest\": 765, \"penalty\": 0, \"payoff\": 108265}, \"passed\": true}, {\"check\": \"control 2\", \"actual\": {\"per_diem\": 164, \"interest\": 164, \"penalty\": 0, \"payoff\": 1000163}, \"expected\": {\"per_diem\": 164, \"interest\": 164, \"penalty\": 0, \"payoff\": 1000163}, \"passed\": true}, {\"check\": \"control 3\", \"actual\": {\"per_diem\": 2058, \"interest\": 63798, \"penalty\": 0, \"payoff\": 12400976}, \"expected\": {\"per_diem\": 2058, \"interest\": 63798, \"penalty\": 0, \"payoff\": 12400976}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"per_diem\": 1543, \"interest\": 69435, \"penalty\": 0, \"payoff\": 12415113}, \"expected\": {\"per_diem\": 1543, \"interest\": 69435, \"penalty\": 0, \"payoff\": 12415113}, \"passed\": true}, {\"check\": \"control 5\", \"actual\": {\"per_diem\": 2, \"interest\": 62, \"penalty\": 0, \"payoff\": -6938}, \"expected\": {\"per_diem\": 2, \"interest\": 62, \"penalty\": 0, \"payoff\": -6938}, \"passed\": true}, {\"check\": \"control 6\", \"actual\": {\"per_diem\": 16, \"interest\": 720, \"penalty\": 0, \"payoff\": 88720}, \"expected\": {\"per_diem\": 16, \"interest\": 720, \"penalty\": 0, \"payoff\": 88720}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}