{"abstract":"The interest-only period bills one month too few.","category":"Loan amortization schedules","checks":7,"contract":"x = {'principal', 'rate_bp', 'io_months' >= 1, 'amort_months' >= 1, 'fund_day' 1..30}. IO month m pays interest round_half_up(P*bp*days/(120000*30)) with days = 31 - fund_day for the first IO month and 30 otherwise. Then the level payment on the full principal over amort_months (exact annuity, half-up) amortizes with monthly interest round_half_up(balance*bp/120000); the last month pays balance + interest. Return {'io_bills': list of IO payments, 'payment', 'final_payment', 'total_interest'}.","evaluation_group":"w2-loan-amortization-schedules-interest-only-then-amortizing","failed_approach":"Iterating one extra month bills an interest-only payment that does not exist.","family":"w2-loan-amortization-schedules-interest-only-then-amortizing-interest-only-month-count","id":"FA-58436","implementations":{"attempt":{"sha256":"8893e3b0a90f3353eb45b53c4b2f89fd7865633fcb974291bddf627cd86b7b06","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    P = x['principal']\n    io_bills = []\n    total_int = 0\n    for m in range(x['io_months'] + 1):\n        days = 31 - x['fund_day'] if m == 0 else 30\n        interest = rnd(P * bp * days, 120000 * 30)\n        io_bills.append(interest)\n        total_int += interest\n    pay = level(P, x['amort_months'])\n    bal = P\n    final = 0\n    for k in range(1, x['amort_months'] + 1):\n        interest = rnd(bal * bp, 120000)\n        total_int += interest\n        if k == x['amort_months']:\n            final = bal + interest\n        else:\n            bal -= pay - interest\n    return {'io_bills': io_bills, 'payment': pay, 'final_payment': final, 'total_interest': total_int}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: interest-only month count', {'principal': 3000000, 'rate_bp': 500, 'io_months': 3, 'amort_months': 60, 'fund_day': 1}, {'io_bills': [12500, 12500, 12500], 'payment': 56614, 'final_payment': 56596, 'total_interest': 434322}], ['sample 1', {'principal': 12345, 'rate_bp': 725, 'io_months': 12, 'amort_months': 12, 'fund_day': 15}, {'io_bills': [40, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75], 'payment': 1070, 'final_payment': 1065, 'total_interest': 1355}], ['sample 2', {'principal': 250000, 'rate_bp': 725, 'io_months': 3, 'amort_months': 12, 'fund_day': 29}, {'io_bills': [101, 1510, 1510], 'payment': 21661, 'final_payment': 21655, 'total_interest': 13047}], ['sample 3', {'principal': 250000, 'rate_bp': 1200, 'io_months': 3, 'amort_months': 24, 'fund_day': 29}, {'io_bills': [167, 2500, 2500], 'payment': 11768, 'final_payment': 11778, 'total_interest': 37609}], ['sample 4', {'principal': 3000000, 'rate_bp': 1200, 'io_months': 3, 'amort_months': 1, 'fund_day': 2}, {'io_bills': [29000, 30000, 30000], 'payment': 3030000, 'final_payment': 3030000, 'total_interest': 119000}], ['sample 5', {'principal': 12345, 'rate_bp': 0, 'io_months': 1, 'amort_months': 24, 'fund_day': 2}, {'io_bills': [0], 'payment': 514, 'final_payment': 523, 'total_interest': 0}], ['sample 6', {'principal': 12345, 'rate_bp': 500, 'io_months': 3, 'amort_months': 12, 'fund_day': 15}, {'io_bills': [27, 51, 51], 'payment': 1057, 'final_payment': 1054, 'total_interest': 465}]], [['regression: interest-only month count', {'principal': 12345, 'rate_bp': 0, 'io_months': 3, 'amort_months': 12, 'fund_day': 1}, {'io_bills': [0, 0, 0], 'payment': 1029, 'final_payment': 1026, 'total_interest': 0}], ['sample 1', {'principal': 100000, 'rate_bp': 725, 'io_months': 2, 'amort_months': 60, 'fund_day': 1}, {'io_bills': [604, 604], 'payment': 1992, 'final_payment': 1987, 'total_interest': 20723}], ['sample 2', {'principal': 250000, 'rate_bp': 500, 'io_months': 2, 'amort_months': 60, 'fund_day': 30}, {'io_bills': [35, 1042], 'payment': 4718, 'final_payment': 4703, 'total_interest': 34142}], ['sample 3', {'principal': 3000000, 'rate_bp': 0, 'io_months': 12, 'amort_months': 60, 'fund_day': 2}, {'io_bills': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'payment': 50000, 'final_payment': 50000, 'total_interest': 0}], ['sample 4', {'principal': 100000, 'rate_bp': 1200, 'io_months': 3, 'amort_months': 24, 'fund_day': 30}, {'io_bills': [33, 1000, 1000], 'payment': 4707, 'final_payment': 4718, 'total_interest': 15012}], ['sample 5', {'principal': 12345, 'rate_bp': 725, 'io_months': 3, 'amort_months': 60, 'fund_day': 15}, {'io_bills': [40, 75, 75], 'payment': 246, 'final_payment': 239, 'total_interest': 2598}], ['sample 6', {'principal': 3000000, 'rate_bp': 500, 'io_months': 3, 'amort_months': 12, 'fund_day': 1}, {'io_bills': [12500, 12500, 12500], 'payment': 256822, 'final_payment': 256827, 'total_interest': 119369}]], [['regression: interest-only month count', {'principal': 3000000, 'rate_bp': 500, 'io_months': 2, 'amort_months': 24, 'fund_day': 29}, {'io_bills': [833, 12500], 'payment': 131614, 'final_payment': 131618, 'total_interest': 172073}], ['sample 1', {'principal': 3000000, 'rate_bp': 500, 'io_months': 3, 'amort_months': 24, 'fund_day': 1}, {'io_bills': [12500, 12500, 12500], 'payment': 131614, 'final_payment': 131618, 'total_interest': 196240}], ['sample 2', {'principal': 12345, 'rate_bp': 500, 'io_months': 2, 'amort_months': 12, 'fund_day': 15}, {'io_bills': [27, 51], 'payment': 1057, 'final_payment': 1054, 'total_interest': 414}], ['sample 3', {'principal': 100000, 'rate_bp': 0, 'io_months': 12, 'amort_months': 24, 'fund_day': 29}, {'io_bills': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'payment': 4167, 'final_payment': 4159, 'total_interest': 0}], ['sample 4', {'principal': 100000, 'rate_bp': 500, 'io_months': 12, 'amort_months': 24, 'fund_day': 15}, {'io_bills': [222, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417], 'payment': 4387, 'final_payment': 4389, 'total_interest': 10099}], ['sample 5', {'principal': 100000, 'rate_bp': 500, 'io_months': 12, 'amort_months': 12, 'fund_day': 29}, {'io_bills': [28, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417], 'payment': 8561, 'final_payment': 8559, 'total_interest': 7345}], ['sample 6', {'principal': 12345, 'rate_bp': 0, 'io_months': 2, 'amort_months': 24, 'fund_day': 30}, {'io_bills': [0, 0], 'payment': 514, 'final_payment': 523, 'total_interest': 0}]], [['regression: interest-only month count', {'principal': 250000, 'rate_bp': 500, 'io_months': 12, 'amort_months': 60, 'fund_day': 15}, {'io_bills': [556, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042], 'payment': 4718, 'final_payment': 4703, 'total_interest': 45083}], ['sample 1', {'principal': 100000, 'rate_bp': 0, 'io_months': 12, 'amort_months': 60, 'fund_day': 29}, {'io_bills': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'payment': 1667, 'final_payment': 1647, 'total_interest': 0}], ['sample 2', {'principal': 250000, 'rate_bp': 0, 'io_months': 3, 'amort_months': 1, 'fund_day': 2}, {'io_bills': [0, 0, 0], 'payment': 250000, 'final_payment': 250000, 'total_interest': 0}], ['sample 3', {'principal': 250000, 'rate_bp': 1200, 'io_months': 12, 'amort_months': 24, 'fund_day': 15}, {'io_bills': [1333, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500], 'payment': 11768, 'final_payment': 11778, 'total_interest': 61275}], ['sample 4', {'principal': 100000, 'rate_bp': 725, 'io_months': 12, 'amort_months': 24, 'fund_day': 15}, {'io_bills': [322, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604], 'payment': 4489, 'final_payment': 4477, 'total_interest': 14690}], ['sample 5', {'principal': 12345, 'rate_bp': 1200, 'io_months': 2, 'amort_months': 24, 'fund_day': 30}, {'io_bills': [4, 123], 'payment': 581, 'final_payment': 584, 'total_interest': 1729}], ['sample 6', {'principal': 100000, 'rate_bp': 500, 'io_months': 1, 'amort_months': 12, 'fund_day': 30}, {'io_bills': [14], 'payment': 8561, 'final_payment': 8559, 'total_interest': 2744}]], [['regression: interest-only month count', {'principal': 12345, 'rate_bp': 725, 'io_months': 1, 'amort_months': 12, 'fund_day': 2}, {'io_bills': [72], 'payment': 1070, 'final_payment': 1065, 'total_interest': 562}], ['sample 1', {'principal': 3000000, 'rate_bp': 725, 'io_months': 1, 'amort_months': 60, 'fund_day': 29}, {'io_bills': [1208], 'payment': 59758, 'final_payment': 59764, 'total_interest': 586694}], ['sample 2', {'principal': 100000, 'rate_bp': 500, 'io_months': 3, 'amort_months': 60, 'fund_day': 2}, {'io_bills': [403, 417, 417], 'payment': 1887, 'final_payment': 1894, 'total_interest': 14464}], ['sample 3', {'principal': 250000, 'rate_bp': 725, 'io_months': 1, 'amort_months': 60, 'fund_day': 15}, {'io_bills': [806], 'payment': 4980, 'final_payment': 4967, 'total_interest': 49593}], ['sample 4', {'principal': 100000, 'rate_bp': 0, 'io_months': 12, 'amort_months': 24, 'fund_day': 30}, {'io_bills': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'payment': 4167, 'final_payment': 4159, 'total_interest': 0}], ['sample 5', {'principal': 12345, 'rate_bp': 725, 'io_months': 2, 'amort_months': 24, 'fund_day': 15}, {'io_bills': [40, 75], 'payment': 554, 'final_payment': 559, 'total_interest': 1071}], ['sample 6', {'principal': 3000000, 'rate_bp': 0, 'io_months': 12, 'amort_months': 24, 'fund_day': 15}, {'io_bills': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'payment': 125000, 'final_payment': 125000, 'total_interest': 0}]]]\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":"87a236b98500d21dcb34bfc477b1473c93f5fd927255dc5521dea48ada844ecc","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    P = x['principal']\n    io_bills = []\n    total_int = 0\n    for m in range(1, x['io_months']):\n        days = 31 - x['fund_day'] if m == 0 else 30\n        interest = rnd(P * bp * days, 120000 * 30)\n        io_bills.append(interest)\n        total_int += interest\n    pay = level(P, x['amort_months'])\n    bal = P\n    final = 0\n    for k in range(1, x['amort_months'] + 1):\n        interest = rnd(bal * bp, 120000)\n        total_int += interest\n        if k == x['amort_months']:\n            final = bal + interest\n        else:\n            bal -= pay - interest\n    return {'io_bills': io_bills, 'payment': pay, 'final_payment': final, 'total_interest': total_int}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: interest-only month count', {'principal': 3000000, 'rate_bp': 500, 'io_months': 3, 'amort_months': 60, 'fund_day': 1}, {'io_bills': [12500, 12500, 12500], 'payment': 56614, 'final_payment': 56596, 'total_interest': 434322}], ['sample 1', {'principal': 12345, 'rate_bp': 725, 'io_months': 12, 'amort_months': 12, 'fund_day': 15}, {'io_bills': [40, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75], 'payment': 1070, 'final_payment': 1065, 'total_interest': 1355}], ['sample 2', {'principal': 250000, 'rate_bp': 725, 'io_months': 3, 'amort_months': 12, 'fund_day': 29}, {'io_bills': [101, 1510, 1510], 'payment': 21661, 'final_payment': 21655, 'total_interest': 13047}], ['sample 3', {'principal': 250000, 'rate_bp': 1200, 'io_months': 3, 'amort_months': 24, 'fund_day': 29}, {'io_bills': [167, 2500, 2500], 'payment': 11768, 'final_payment': 11778, 'total_interest': 37609}], ['sample 4', {'principal': 3000000, 'rate_bp': 1200, 'io_months': 3, 'amort_months': 1, 'fund_day': 2}, {'io_bills': [29000, 30000, 30000], 'payment': 3030000, 'final_payment': 3030000, 'total_interest': 119000}], ['sample 5', {'principal': 12345, 'rate_bp': 0, 'io_months': 1, 'amort_months': 24, 'fund_day': 2}, {'io_bills': [0], 'payment': 514, 'final_payment': 523, 'total_interest': 0}], ['sample 6', {'principal': 12345, 'rate_bp': 500, 'io_months': 3, 'amort_months': 12, 'fund_day': 15}, {'io_bills': [27, 51, 51], 'payment': 1057, 'final_payment': 1054, 'total_interest': 465}]], [['regression: interest-only month count', {'principal': 12345, 'rate_bp': 0, 'io_months': 3, 'amort_months': 12, 'fund_day': 1}, {'io_bills': [0, 0, 0], 'payment': 1029, 'final_payment': 1026, 'total_interest': 0}], ['sample 1', {'principal': 100000, 'rate_bp': 725, 'io_months': 2, 'amort_months': 60, 'fund_day': 1}, {'io_bills': [604, 604], 'payment': 1992, 'final_payment': 1987, 'total_interest': 20723}], ['sample 2', {'principal': 250000, 'rate_bp': 500, 'io_months': 2, 'amort_months': 60, 'fund_day': 30}, {'io_bills': [35, 1042], 'payment': 4718, 'final_payment': 4703, 'total_interest': 34142}], ['sample 3', {'principal': 3000000, 'rate_bp': 0, 'io_months': 12, 'amort_months': 60, 'fund_day': 2}, {'io_bills': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'payment': 50000, 'final_payment': 50000, 'total_interest': 0}], ['sample 4', {'principal': 100000, 'rate_bp': 1200, 'io_months': 3, 'amort_months': 24, 'fund_day': 30}, {'io_bills': [33, 1000, 1000], 'payment': 4707, 'final_payment': 4718, 'total_interest': 15012}], ['sample 5', {'principal': 12345, 'rate_bp': 725, 'io_months': 3, 'amort_months': 60, 'fund_day': 15}, {'io_bills': [40, 75, 75], 'payment': 246, 'final_payment': 239, 'total_interest': 2598}], ['sample 6', {'principal': 3000000, 'rate_bp': 500, 'io_months': 3, 'amort_months': 12, 'fund_day': 1}, {'io_bills': [12500, 12500, 12500], 'payment': 256822, 'final_payment': 256827, 'total_interest': 119369}]], [['regression: interest-only month count', {'principal': 3000000, 'rate_bp': 500, 'io_months': 2, 'amort_months': 24, 'fund_day': 29}, {'io_bills': [833, 12500], 'payment': 131614, 'final_payment': 131618, 'total_interest': 172073}], ['sample 1', {'principal': 3000000, 'rate_bp': 500, 'io_months': 3, 'amort_months': 24, 'fund_day': 1}, {'io_bills': [12500, 12500, 12500], 'payment': 131614, 'final_payment': 131618, 'total_interest': 196240}], ['sample 2', {'principal': 12345, 'rate_bp': 500, 'io_months': 2, 'amort_months': 12, 'fund_day': 15}, {'io_bills': [27, 51], 'payment': 1057, 'final_payment': 1054, 'total_interest': 414}], ['sample 3', {'principal': 100000, 'rate_bp': 0, 'io_months': 12, 'amort_months': 24, 'fund_day': 29}, {'io_bills': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'payment': 4167, 'final_payment': 4159, 'total_interest': 0}], ['sample 4', {'principal': 100000, 'rate_bp': 500, 'io_months': 12, 'amort_months': 24, 'fund_day': 15}, {'io_bills': [222, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417], 'payment': 4387, 'final_payment': 4389, 'total_interest': 10099}], ['sample 5', {'principal': 100000, 'rate_bp': 500, 'io_months': 12, 'amort_months': 12, 'fund_day': 29}, {'io_bills': [28, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417], 'payment': 8561, 'final_payment': 8559, 'total_interest': 7345}], ['sample 6', {'principal': 12345, 'rate_bp': 0, 'io_months': 2, 'amort_months': 24, 'fund_day': 30}, {'io_bills': [0, 0], 'payment': 514, 'final_payment': 523, 'total_interest': 0}]], [['regression: interest-only month count', {'principal': 250000, 'rate_bp': 500, 'io_months': 12, 'amort_months': 60, 'fund_day': 15}, {'io_bills': [556, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042], 'payment': 4718, 'final_payment': 4703, 'total_interest': 45083}], ['sample 1', {'principal': 100000, 'rate_bp': 0, 'io_months': 12, 'amort_months': 60, 'fund_day': 29}, {'io_bills': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'payment': 1667, 'final_payment': 1647, 'total_interest': 0}], ['sample 2', {'principal': 250000, 'rate_bp': 0, 'io_months': 3, 'amort_months': 1, 'fund_day': 2}, {'io_bills': [0, 0, 0], 'payment': 250000, 'final_payment': 250000, 'total_interest': 0}], ['sample 3', {'principal': 250000, 'rate_bp': 1200, 'io_months': 12, 'amort_months': 24, 'fund_day': 15}, {'io_bills': [1333, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500], 'payment': 11768, 'final_payment': 11778, 'total_interest': 61275}], ['sample 4', {'principal': 100000, 'rate_bp': 725, 'io_months': 12, 'amort_months': 24, 'fund_day': 15}, {'io_bills': [322, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604], 'payment': 4489, 'final_payment': 4477, 'total_interest': 14690}], ['sample 5', {'principal': 12345, 'rate_bp': 1200, 'io_months': 2, 'amort_months': 24, 'fund_day': 30}, {'io_bills': [4, 123], 'payment': 581, 'final_payment': 584, 'total_interest': 1729}], ['sample 6', {'principal': 100000, 'rate_bp': 500, 'io_months': 1, 'amort_months': 12, 'fund_day': 30}, {'io_bills': [14], 'payment': 8561, 'final_payment': 8559, 'total_interest': 2744}]], [['regression: interest-only month count', {'principal': 12345, 'rate_bp': 725, 'io_months': 1, 'amort_months': 12, 'fund_day': 2}, {'io_bills': [72], 'payment': 1070, 'final_payment': 1065, 'total_interest': 562}], ['sample 1', {'principal': 3000000, 'rate_bp': 725, 'io_months': 1, 'amort_months': 60, 'fund_day': 29}, {'io_bills': [1208], 'payment': 59758, 'final_payment': 59764, 'total_interest': 586694}], ['sample 2', {'principal': 100000, 'rate_bp': 500, 'io_months': 3, 'amort_months': 60, 'fund_day': 2}, {'io_bills': [403, 417, 417], 'payment': 1887, 'final_payment': 1894, 'total_interest': 14464}], ['sample 3', {'principal': 250000, 'rate_bp': 725, 'io_months': 1, 'amort_months': 60, 'fund_day': 15}, {'io_bills': [806], 'payment': 4980, 'final_payment': 4967, 'total_interest': 49593}], ['sample 4', {'principal': 100000, 'rate_bp': 0, 'io_months': 12, 'amort_months': 24, 'fund_day': 30}, {'io_bills': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'payment': 4167, 'final_payment': 4159, 'total_interest': 0}], ['sample 5', {'principal': 12345, 'rate_bp': 725, 'io_months': 2, 'amort_months': 24, 'fund_day': 15}, {'io_bills': [40, 75], 'payment': 554, 'final_payment': 559, 'total_interest': 1071}], ['sample 6', {'principal': 3000000, 'rate_bp': 0, 'io_months': 12, 'amort_months': 24, 'fund_day': 15}, {'io_bills': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'payment': 125000, 'final_payment': 125000, 'total_interest': 0}]]]\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":"bd44aa72fd6da15bdb96051d75a8cf09889bce0bb21224e40b1eff111b664dd4","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    P = x['principal']\n    io_bills = []\n    total_int = 0\n    for m in range(x['io_months']):\n        days = 31 - x['fund_day'] if m == 0 else 30\n        interest = rnd(P * bp * days, 120000 * 30)\n        io_bills.append(interest)\n        total_int += interest\n    pay = level(P, x['amort_months'])\n    bal = P\n    final = 0\n    for k in range(1, x['amort_months'] + 1):\n        interest = rnd(bal * bp, 120000)\n        total_int += interest\n        if k == x['amort_months']:\n            final = bal + interest\n        else:\n            bal -= pay - interest\n    return {'io_bills': io_bills, 'payment': pay, 'final_payment': final, 'total_interest': total_int}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: interest-only month count', {'principal': 3000000, 'rate_bp': 500, 'io_months': 3, 'amort_months': 60, 'fund_day': 1}, {'io_bills': [12500, 12500, 12500], 'payment': 56614, 'final_payment': 56596, 'total_interest': 434322}], ['sample 1', {'principal': 12345, 'rate_bp': 725, 'io_months': 12, 'amort_months': 12, 'fund_day': 15}, {'io_bills': [40, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75], 'payment': 1070, 'final_payment': 1065, 'total_interest': 1355}], ['sample 2', {'principal': 250000, 'rate_bp': 725, 'io_months': 3, 'amort_months': 12, 'fund_day': 29}, {'io_bills': [101, 1510, 1510], 'payment': 21661, 'final_payment': 21655, 'total_interest': 13047}], ['sample 3', {'principal': 250000, 'rate_bp': 1200, 'io_months': 3, 'amort_months': 24, 'fund_day': 29}, {'io_bills': [167, 2500, 2500], 'payment': 11768, 'final_payment': 11778, 'total_interest': 37609}], ['sample 4', {'principal': 3000000, 'rate_bp': 1200, 'io_months': 3, 'amort_months': 1, 'fund_day': 2}, {'io_bills': [29000, 30000, 30000], 'payment': 3030000, 'final_payment': 3030000, 'total_interest': 119000}], ['sample 5', {'principal': 12345, 'rate_bp': 0, 'io_months': 1, 'amort_months': 24, 'fund_day': 2}, {'io_bills': [0], 'payment': 514, 'final_payment': 523, 'total_interest': 0}], ['sample 6', {'principal': 12345, 'rate_bp': 500, 'io_months': 3, 'amort_months': 12, 'fund_day': 15}, {'io_bills': [27, 51, 51], 'payment': 1057, 'final_payment': 1054, 'total_interest': 465}]], [['regression: interest-only month count', {'principal': 12345, 'rate_bp': 0, 'io_months': 3, 'amort_months': 12, 'fund_day': 1}, {'io_bills': [0, 0, 0], 'payment': 1029, 'final_payment': 1026, 'total_interest': 0}], ['sample 1', {'principal': 100000, 'rate_bp': 725, 'io_months': 2, 'amort_months': 60, 'fund_day': 1}, {'io_bills': [604, 604], 'payment': 1992, 'final_payment': 1987, 'total_interest': 20723}], ['sample 2', {'principal': 250000, 'rate_bp': 500, 'io_months': 2, 'amort_months': 60, 'fund_day': 30}, {'io_bills': [35, 1042], 'payment': 4718, 'final_payment': 4703, 'total_interest': 34142}], ['sample 3', {'principal': 3000000, 'rate_bp': 0, 'io_months': 12, 'amort_months': 60, 'fund_day': 2}, {'io_bills': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'payment': 50000, 'final_payment': 50000, 'total_interest': 0}], ['sample 4', {'principal': 100000, 'rate_bp': 1200, 'io_months': 3, 'amort_months': 24, 'fund_day': 30}, {'io_bills': [33, 1000, 1000], 'payment': 4707, 'final_payment': 4718, 'total_interest': 15012}], ['sample 5', {'principal': 12345, 'rate_bp': 725, 'io_months': 3, 'amort_months': 60, 'fund_day': 15}, {'io_bills': [40, 75, 75], 'payment': 246, 'final_payment': 239, 'total_interest': 2598}], ['sample 6', {'principal': 3000000, 'rate_bp': 500, 'io_months': 3, 'amort_months': 12, 'fund_day': 1}, {'io_bills': [12500, 12500, 12500], 'payment': 256822, 'final_payment': 256827, 'total_interest': 119369}]], [['regression: interest-only month count', {'principal': 3000000, 'rate_bp': 500, 'io_months': 2, 'amort_months': 24, 'fund_day': 29}, {'io_bills': [833, 12500], 'payment': 131614, 'final_payment': 131618, 'total_interest': 172073}], ['sample 1', {'principal': 3000000, 'rate_bp': 500, 'io_months': 3, 'amort_months': 24, 'fund_day': 1}, {'io_bills': [12500, 12500, 12500], 'payment': 131614, 'final_payment': 131618, 'total_interest': 196240}], ['sample 2', {'principal': 12345, 'rate_bp': 500, 'io_months': 2, 'amort_months': 12, 'fund_day': 15}, {'io_bills': [27, 51], 'payment': 1057, 'final_payment': 1054, 'total_interest': 414}], ['sample 3', {'principal': 100000, 'rate_bp': 0, 'io_months': 12, 'amort_months': 24, 'fund_day': 29}, {'io_bills': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'payment': 4167, 'final_payment': 4159, 'total_interest': 0}], ['sample 4', {'principal': 100000, 'rate_bp': 500, 'io_months': 12, 'amort_months': 24, 'fund_day': 15}, {'io_bills': [222, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417], 'payment': 4387, 'final_payment': 4389, 'total_interest': 10099}], ['sample 5', {'principal': 100000, 'rate_bp': 500, 'io_months': 12, 'amort_months': 12, 'fund_day': 29}, {'io_bills': [28, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, 417], 'payment': 8561, 'final_payment': 8559, 'total_interest': 7345}], ['sample 6', {'principal': 12345, 'rate_bp': 0, 'io_months': 2, 'amort_months': 24, 'fund_day': 30}, {'io_bills': [0, 0], 'payment': 514, 'final_payment': 523, 'total_interest': 0}]], [['regression: interest-only month count', {'principal': 250000, 'rate_bp': 500, 'io_months': 12, 'amort_months': 60, 'fund_day': 15}, {'io_bills': [556, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042], 'payment': 4718, 'final_payment': 4703, 'total_interest': 45083}], ['sample 1', {'principal': 100000, 'rate_bp': 0, 'io_months': 12, 'amort_months': 60, 'fund_day': 29}, {'io_bills': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'payment': 1667, 'final_payment': 1647, 'total_interest': 0}], ['sample 2', {'principal': 250000, 'rate_bp': 0, 'io_months': 3, 'amort_months': 1, 'fund_day': 2}, {'io_bills': [0, 0, 0], 'payment': 250000, 'final_payment': 250000, 'total_interest': 0}], ['sample 3', {'principal': 250000, 'rate_bp': 1200, 'io_months': 12, 'amort_months': 24, 'fund_day': 15}, {'io_bills': [1333, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500], 'payment': 11768, 'final_payment': 11778, 'total_interest': 61275}], ['sample 4', {'principal': 100000, 'rate_bp': 725, 'io_months': 12, 'amort_months': 24, 'fund_day': 15}, {'io_bills': [322, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604], 'payment': 4489, 'final_payment': 4477, 'total_interest': 14690}], ['sample 5', {'principal': 12345, 'rate_bp': 1200, 'io_months': 2, 'amort_months': 24, 'fund_day': 30}, {'io_bills': [4, 123], 'payment': 581, 'final_payment': 584, 'total_interest': 1729}], ['sample 6', {'principal': 100000, 'rate_bp': 500, 'io_months': 1, 'amort_months': 12, 'fund_day': 30}, {'io_bills': [14], 'payment': 8561, 'final_payment': 8559, 'total_interest': 2744}]], [['regression: interest-only month count', {'principal': 12345, 'rate_bp': 725, 'io_months': 1, 'amort_months': 12, 'fund_day': 2}, {'io_bills': [72], 'payment': 1070, 'final_payment': 1065, 'total_interest': 562}], ['sample 1', {'principal': 3000000, 'rate_bp': 725, 'io_months': 1, 'amort_months': 60, 'fund_day': 29}, {'io_bills': [1208], 'payment': 59758, 'final_payment': 59764, 'total_interest': 586694}], ['sample 2', {'principal': 100000, 'rate_bp': 500, 'io_months': 3, 'amort_months': 60, 'fund_day': 2}, {'io_bills': [403, 417, 417], 'payment': 1887, 'final_payment': 1894, 'total_interest': 14464}], ['sample 3', {'principal': 250000, 'rate_bp': 725, 'io_months': 1, 'amort_months': 60, 'fund_day': 15}, {'io_bills': [806], 'payment': 4980, 'final_payment': 4967, 'total_interest': 49593}], ['sample 4', {'principal': 100000, 'rate_bp': 0, 'io_months': 12, 'amort_months': 24, 'fund_day': 30}, {'io_bills': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'payment': 4167, 'final_payment': 4159, 'total_interest': 0}], ['sample 5', {'principal': 12345, 'rate_bp': 725, 'io_months': 2, 'amort_months': 24, 'fund_day': 15}, {'io_bills': [40, 75], 'payment': 554, 'final_payment': 559, 'total_interest': 1071}], ['sample 6', {'principal': 3000000, 'rate_bp': 0, 'io_months': 12, 'amort_months': 24, 'fund_day': 15}, {'io_bills': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'payment': 125000, 'final_payment': 125000, 'total_interest': 0}]]]\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-interest-only-then-amortizing-interest-only-month-count","generated_at":"2026-09-29T14:46:26.714454+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":"Bill every interest-only month starting from the first.","root_cause":"The loop starts at one, skipping the first interest-only month (and its funding stub).","sha256":"32e136ff2f858754c7411ae3f880223e51f9e5a395bcc3f11c452834594b1228","title":"Interest-only period with funding stub: interest-only month count · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":46.321,"exit_code":1,"observations":[{"actual":{"final_payment":56596,"io_bills":[12500,12500,12500,12500],"payment":56614,"total_interest":446822},"check":"regression: interest-only month count","expected":{"final_payment":56596,"io_bills":[12500,12500,12500],"payment":56614,"total_interest":434322},"passed":false},{"actual":{"final_payment":1065,"io_bills":[40,75,75,75,75,75,75,75,75,75,75,75,75],"payment":1070,"total_interest":1430},"check":"sample 1","expected":{"final_payment":1065,"io_bills":[40,75,75,75,75,75,75,75,75,75,75,75],"payment":1070,"total_interest":1355},"passed":false},{"actual":{"final_payment":21655,"io_bills":[101,1510,1510,1510],"payment":21661,"total_interest":14557},"check":"sample 2","expected":{"final_payment":21655,"io_bills":[101,1510,1510],"payment":21661,"total_interest":13047},"passed":false},{"actual":{"final_payment":11778,"io_bills":[167,2500,2500,2500],"payment":11768,"total_interest":40109},"check":"sample 3","expected":{"final_payment":11778,"io_bills":[167,2500,2500],"payment":11768,"total_interest":37609},"passed":false},{"actual":{"final_payment":3030000,"io_bills":[29000,30000,30000,30000],"payment":3030000,"total_interest":149000},"check":"sample 4","expected":{"final_payment":3030000,"io_bills":[29000,30000,30000],"payment":3030000,"total_interest":119000},"passed":false},{"actual":{"final_payment":523,"io_bills":[0,0],"payment":514,"total_interest":0},"check":"sample 5","expected":{"final_payment":523,"io_bills":[0],"payment":514,"total_interest":0},"passed":false},{"actual":{"final_payment":1054,"io_bills":[27,51,51,51],"payment":1057,"total_interest":516},"check":"sample 6","expected":{"final_payment":1054,"io_bills":[27,51,51],"payment":1057,"total_interest":465},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: interest-only month count\", \"actual\": {\"io_bills\": [12500, 12500, 12500, 12500], \"payment\": 56614, \"final_payment\": 56596, \"total_interest\": 446822}, \"expected\": {\"io_bills\": [12500, 12500, 12500], \"payment\": 56614, \"final_payment\": 56596, \"total_interest\": 434322}, \"passed\": false}, {\"check\": \"sample 1\", \"actual\": {\"io_bills\": [40, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75], \"payment\": 1070, \"final_payment\": 1065, \"total_interest\": 1430}, \"expected\": {\"io_bills\": [40, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75], \"payment\": 1070, \"final_payment\": 1065, \"total_interest\": 1355}, \"passed\": false}, {\"check\": \"sample 2\", \"actual\": {\"io_bills\": [101, 1510, 1510, 1510], \"payment\": 21661, \"final_payment\": 21655, \"total_interest\": 14557}, \"expected\": {\"io_bills\": [101, 1510, 1510], \"payment\": 21661, \"final_payment\": 21655, \"total_interest\": 13047}, \"passed\": false}, {\"check\": \"sample 3\", \"actual\": {\"io_bills\": [167, 2500, 2500, 2500], \"payment\": 11768, \"final_payment\": 11778, \"total_interest\": 40109}, \"expected\": {\"io_bills\": [167, 2500, 2500], \"payment\": 11768, \"final_payment\": 11778, \"total_interest\": 37609}, \"passed\": false}, {\"check\": \"sample 4\", \"actual\": {\"io_bills\": [29000, 30000, 30000, 30000], \"payment\": 3030000, \"final_payment\": 3030000, \"total_interest\": 149000}, \"expected\": {\"io_bills\": [29000, 30000, 30000], \"payment\": 3030000, \"final_payment\": 3030000, \"total_interest\": 119000}, \"passed\": false}, {\"check\": \"sample 5\", \"actual\": {\"io_bills\": [0, 0], \"payment\": 514, \"final_payment\": 523, \"total_interest\": 0}, \"expected\": {\"io_bills\": [0], \"payment\": 514, \"final_payment\": 523, \"total_interest\": 0}, \"passed\": false}, {\"check\": \"sample 6\", \"actual\": {\"io_bills\": [27, 51, 51, 51], \"payment\": 1057, \"final_payment\": 1054, \"total_interest\": 516}, \"expected\": {\"io_bills\": [27, 51, 51], \"payment\": 1057, \"final_payment\": 1054, \"total_interest\": 465}, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.311,"exit_code":1,"observations":[{"actual":{"final_payment":56596,"io_bills":[12500,12500],"payment":56614,"total_interest":421822},"check":"regression: interest-only month count","expected":{"final_payment":56596,"io_bills":[12500,12500,12500],"payment":56614,"total_interest":434322},"passed":false},{"actual":{"final_payment":1065,"io_bills":[75,75,75,75,75,75,75,75,75,75,75],"payment":1070,"total_interest":1315},"check":"sample 1","expected":{"final_payment":1065,"io_bills":[40,75,75,75,75,75,75,75,75,75,75,75],"payment":1070,"total_interest":1355},"passed":false},{"actual":{"final_payment":21655,"io_bills":[1510,1510],"payment":21661,"total_interest":12946},"check":"sample 2","expected":{"final_payment":21655,"io_bills":[101,1510,1510],"payment":21661,"total_interest":13047},"passed":false},{"actual":{"final_payment":11778,"io_bills":[2500,2500],"payment":11768,"total_interest":37442},"check":"sample 3","expected":{"final_payment":11778,"io_bills":[167,2500,2500],"payment":11768,"total_interest":37609},"passed":false},{"actual":{"final_payment":3030000,"io_bills":[30000,30000],"payment":3030000,"total_interest":90000},"check":"sample 4","expected":{"final_payment":3030000,"io_bills":[29000,30000,30000],"payment":3030000,"total_interest":119000},"passed":false},{"actual":{"final_payment":523,"io_bills":[],"payment":514,"total_interest":0},"check":"sample 5","expected":{"final_payment":523,"io_bills":[0],"payment":514,"total_interest":0},"passed":false},{"actual":{"final_payment":1054,"io_bills":[51,51],"payment":1057,"total_interest":438},"check":"sample 6","expected":{"final_payment":1054,"io_bills":[27,51,51],"payment":1057,"total_interest":465},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: interest-only month count\", \"actual\": {\"io_bills\": [12500, 12500], \"payment\": 56614, \"final_payment\": 56596, \"total_interest\": 421822}, \"expected\": {\"io_bills\": [12500, 12500, 12500], \"payment\": 56614, \"final_payment\": 56596, \"total_interest\": 434322}, \"passed\": false}, {\"check\": \"sample 1\", \"actual\": {\"io_bills\": [75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75], \"payment\": 1070, \"final_payment\": 1065, \"total_interest\": 1315}, \"expected\": {\"io_bills\": [40, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75], \"payment\": 1070, \"final_payment\": 1065, \"total_interest\": 1355}, \"passed\": false}, {\"check\": \"sample 2\", \"actual\": {\"io_bills\": [1510, 1510], \"payment\": 21661, \"final_payment\": 21655, \"total_interest\": 12946}, \"expected\": {\"io_bills\": [101, 1510, 1510], \"payment\": 21661, \"final_payment\": 21655, \"total_interest\": 13047}, \"passed\": false}, {\"check\": \"sample 3\", \"actual\": {\"io_bills\": [2500, 2500], \"payment\": 11768, \"final_payment\": 11778, \"total_interest\": 37442}, \"expected\": {\"io_bills\": [167, 2500, 2500], \"payment\": 11768, \"final_payment\": 11778, \"total_interest\": 37609}, \"passed\": false}, {\"check\": \"sample 4\", \"actual\": {\"io_bills\": [30000, 30000], \"payment\": 3030000, \"final_payment\": 3030000, \"total_interest\": 90000}, \"expected\": {\"io_bills\": [29000, 30000, 30000], \"payment\": 3030000, \"final_payment\": 3030000, \"total_interest\": 119000}, \"passed\": false}, {\"check\": \"sample 5\", \"actual\": {\"io_bills\": [], \"payment\": 514, \"final_payment\": 523, \"total_interest\": 0}, \"expected\": {\"io_bills\": [0], \"payment\": 514, \"final_payment\": 523, \"total_interest\": 0}, \"passed\": false}, {\"check\": \"sample 6\", \"actual\": {\"io_bills\": [51, 51], \"payment\": 1057, \"final_payment\": 1054, \"total_interest\": 438}, \"expected\": {\"io_bills\": [27, 51, 51], \"payment\": 1057, \"final_payment\": 1054, \"total_interest\": 465}, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":44.597,"exit_code":0,"observations":[{"actual":{"final_payment":56596,"io_bills":[12500,12500,12500],"payment":56614,"total_interest":434322},"check":"regression: interest-only month count","expected":{"final_payment":56596,"io_bills":[12500,12500,12500],"payment":56614,"total_interest":434322},"passed":true},{"actual":{"final_payment":1065,"io_bills":[40,75,75,75,75,75,75,75,75,75,75,75],"payment":1070,"total_interest":1355},"check":"sample 1","expected":{"final_payment":1065,"io_bills":[40,75,75,75,75,75,75,75,75,75,75,75],"payment":1070,"total_interest":1355},"passed":true},{"actual":{"final_payment":21655,"io_bills":[101,1510,1510],"payment":21661,"total_interest":13047},"check":"sample 2","expected":{"final_payment":21655,"io_bills":[101,1510,1510],"payment":21661,"total_interest":13047},"passed":true},{"actual":{"final_payment":11778,"io_bills":[167,2500,2500],"payment":11768,"total_interest":37609},"check":"sample 3","expected":{"final_payment":11778,"io_bills":[167,2500,2500],"payment":11768,"total_interest":37609},"passed":true},{"actual":{"final_payment":3030000,"io_bills":[29000,30000,30000],"payment":3030000,"total_interest":119000},"check":"sample 4","expected":{"final_payment":3030000,"io_bills":[29000,30000,30000],"payment":3030000,"total_interest":119000},"passed":true},{"actual":{"final_payment":523,"io_bills":[0],"payment":514,"total_interest":0},"check":"sample 5","expected":{"final_payment":523,"io_bills":[0],"payment":514,"total_interest":0},"passed":true},{"actual":{"final_payment":1054,"io_bills":[27,51,51],"payment":1057,"total_interest":465},"check":"sample 6","expected":{"final_payment":1054,"io_bills":[27,51,51],"payment":1057,"total_interest":465},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: interest-only month count\", \"actual\": {\"io_bills\": [12500, 12500, 12500], \"payment\": 56614, \"final_payment\": 56596, \"total_interest\": 434322}, \"expected\": {\"io_bills\": [12500, 12500, 12500], \"payment\": 56614, \"final_payment\": 56596, \"total_interest\": 434322}, \"passed\": true}, {\"check\": \"sample 1\", \"actual\": {\"io_bills\": [40, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75], \"payment\": 1070, \"final_payment\": 1065, \"total_interest\": 1355}, \"expected\": {\"io_bills\": [40, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75], \"payment\": 1070, \"final_payment\": 1065, \"total_interest\": 1355}, \"passed\": true}, {\"check\": \"sample 2\", \"actual\": {\"io_bills\": [101, 1510, 1510], \"payment\": 21661, \"final_payment\": 21655, \"total_interest\": 13047}, \"expected\": {\"io_bills\": [101, 1510, 1510], \"payment\": 21661, \"final_payment\": 21655, \"total_interest\": 13047}, \"passed\": true}, {\"check\": \"sample 3\", \"actual\": {\"io_bills\": [167, 2500, 2500], \"payment\": 11768, \"final_payment\": 11778, \"total_interest\": 37609}, \"expected\": {\"io_bills\": [167, 2500, 2500], \"payment\": 11768, \"final_payment\": 11778, \"total_interest\": 37609}, \"passed\": true}, {\"check\": \"sample 4\", \"actual\": {\"io_bills\": [29000, 30000, 30000], \"payment\": 3030000, \"final_payment\": 3030000, \"total_interest\": 119000}, \"expected\": {\"io_bills\": [29000, 30000, 30000], \"payment\": 3030000, \"final_payment\": 3030000, \"total_interest\": 119000}, \"passed\": true}, {\"check\": \"sample 5\", \"actual\": {\"io_bills\": [0], \"payment\": 514, \"final_payment\": 523, \"total_interest\": 0}, \"expected\": {\"io_bills\": [0], \"payment\": 514, \"final_payment\": 523, \"total_interest\": 0}, \"passed\": true}, {\"check\": \"sample 6\", \"actual\": {\"io_bills\": [27, 51, 51], \"payment\": 1057, \"final_payment\": 1054, \"total_interest\": 465}, \"expected\": {\"io_bills\": [27, 51, 51], \"payment\": 1057, \"final_payment\": 1054, \"total_interest\": 465}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}