{"abstract":"Deposits starting on the last business day before a month-end weekend mature mid-month.","category":"Bond day-count conventions","checks":8,"contract":"Inputs a start business day, tenor in months, holidays, principal and rate. If the start is the last business day of its month, maturity is the last business day of the target month; otherwise maturity is the start day clamped into the target month and adjusted modified following. Interest = principal*rate*days/360 rounded to 2. Return [maturity, interest].","evaluation_group":"w2-bond_day_count_conventions-deposit-end-end-rule","failed_approach":"Treating any of the last three calendar days as month end triggers it for ordinary dates.","family":"w2-bond_day_count_conventions-deposit-end-end-rule-end-end-trigger","id":"FA-61331","implementations":{"attempt":{"sha256":"bd6db5faa675bf3601794c28412e1c1159561c22347b8f83a0d7c625422799fd","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime\nN = 1\nobservations = []\ndef solve(start, tenor, holidays, principal, rate):\n    S = datetime.date(*start)\n    H = {datetime.date(*h) for h in holidays}\n    def biz(x):\n        return x.weekday() < 5 and x not in H\n    def mlen(y, m):\n        if m == 2:\n            return 29 if (y % 4 == 0 and y % 100 != 0) or y % 400 == 0 else 28\n        return 30 if m in (4, 6, 9, 11) else 31\n    def last_biz(y, m):\n        x = datetime.date(y, m, mlen(y, m))\n        while not biz(x):\n            x -= datetime.timedelta(days=1)\n        return x\n    def mf(x):\n        f = x\n        while not biz(f):\n            f += datetime.timedelta(days=1)\n        if f.month != x.month:\n            f = x\n            while not biz(f):\n                f -= datetime.timedelta(days=1)\n        return f\n    t = S.year * 12 + S.month - 1 + tenor\n    y, m = t // 12, t % 12 + 1\n    if S.day >= mlen(S.year, S.month) - 2:\n        M = last_biz(y, m)\n    else:\n        M = mf(datetime.date(y, m, min(S.day, mlen(y, m))))\n    interest = round(principal * rate * (M - S).days / 360, 2)\n    return [[M.year, M.month, M.day], interest]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression end-end trigger 1', [[2026, 5, 29], 2, [], 1000000, 0.0425], [[2026, 7, 31], 7437.5]], ['regression end-end trigger 2', [[2019, 3, 29], 2, [[2019, 5, 28], [2019, 5, 27], [2019, 5, 31]], 1000000, 0.0425], [[2019, 5, 30], 7319.44]], ['partial repair probe 1', [[2030, 7, 29], 3, [], 1000000, 0.053], [[2030, 10, 29], 13544.44]], ['partial repair probe 2', [[2029, 11, 28], 6, [], 1000000, 0.053], [[2030, 5, 28], 26647.22]], ['normal control 1', [[2019, 2, 28], 3, [[2019, 5, 27]], 1000000, 0.0425], [[2019, 5, 31], 10861.11]], ['normal control 2', [[2027, 3, 31], 12, [[2028, 3, 27], [2028, 3, 30], [2028, 3, 30]], 1000000, 0.0425], [[2028, 3, 31], 43208.33]], ['normal control 3', [[2027, 7, 29], 6, [[2028, 1, 28], [2028, 1, 31], [2028, 1, 27]], 1000000, 0.0125], [[2028, 1, 26], 6284.72]], ['normal control 4', [[2028, 4, 26], 1, [[2028, 5, 30], [2028, 5, 30]], 1000000, 0.053], [[2028, 5, 26], 4416.67]]], [['regression end-end trigger 1', [[2023, 4, 28], 12, [], 250000, 0.0125], [[2024, 4, 30], 3194.44]], ['regression end-end trigger 2', [[2027, 1, 29], 6, [], 250000, 0.0125], [[2027, 7, 30], 1579.86]], ['partial repair probe 1', [[2029, 11, 28], 12, [[2030, 11, 26]], 250000, 0.0425], [[2030, 11, 28], 10772.57]], ['partial repair probe 2', [[2023, 11, 28], 6, [[2024, 5, 31]], 250000, 0.0125], [[2024, 5, 28], 1579.86]], ['normal control 1', [[2026, 3, 31], 12, [[2027, 3, 31]], 250000, 0.053], [[2027, 3, 30], 13397.22]], ['normal control 2', [[2030, 11, 11], 2, [[2031, 1, 31], [2031, 1, 28], [2031, 1, 30]], 1000000, 0.0425], [[2031, 1, 13], 7437.5]], ['normal control 3', [[2025, 1, 31], 3, [[2025, 4, 26], [2025, 4, 27]], 250000, 0.053], [[2025, 4, 30], 3275.69]], ['normal control 4', [[2023, 6, 22], 1, [], 1000000, 0.0125], [[2023, 7, 24], 1111.11]]], [['regression end-end trigger 1', [[2020, 2, 28], 2, [[2020, 4, 26], [2020, 4, 26]], 250000, 0.0125], [[2020, 4, 30], 538.19]], ['regression end-end trigger 2', [[2023, 4, 28], 6, [], 250000, 0.0425], [[2023, 10, 31], 5489.58]], ['partial repair probe 1', [[2021, 6, 28], 1, [[2021, 7, 29], [2021, 7, 27]], 1000000, 0.053], [[2021, 7, 28], 4416.67]], ['partial repair probe 2', [[2025, 2, 26], 3, [[2025, 5, 30], [2025, 5, 31]], 250000, 0.053], [[2025, 5, 26], 3275.69]], ['normal control 1', [[2023, 3, 31], 3, [[2023, 6, 26], [2023, 6, 29]], 250000, 0.0425], [[2023, 6, 30], 2685.76]], ['normal control 2', [[2029, 5, 31], 2, [[2029, 7, 28], [2029, 7, 31]], 1000000, 0.0125], [[2029, 7, 30], 2083.33]], ['normal control 3', [[2024, 9, 30], 2, [[2024, 11, 26]], 250000, 0.0425], [[2024, 11, 29], 1770.83]], ['normal control 4', [[2030, 5, 20], 12, [[2031, 5, 31], [2031, 5, 29], [2031, 5, 27]], 1000000, 0.053], [[2031, 5, 20], 53736.11]]], [['regression end-end trigger 1', [[2027, 1, 29], 2, [], 250000, 0.0425], [[2027, 3, 31], 1800.35]], ['regression end-end trigger 2', [[2027, 2, 26], 12, [[2028, 2, 25], [2028, 2, 27]], 1000000, 0.053], [[2028, 2, 29], 54177.78]], ['partial repair probe 1', [[2025, 10, 29], 2, [[2025, 12, 30]], 250000, 0.0125], [[2025, 12, 29], 529.51]], ['partial repair probe 2', [[2029, 1, 29], 12, [], 1000000, 0.053], [[2030, 1, 29], 53736.11]], ['normal control 1', [[2025, 5, 21], 2, [[2025, 7, 31], [2025, 7, 28], [2025, 7, 29]], 1000000, 0.0425], [[2025, 7, 21], 7201.39]], ['normal control 2', [[2028, 7, 31], 3, [], 1000000, 0.0125], [[2028, 10, 31], 3194.44]], ['normal control 3', [[2024, 1, 30], 2, [[2024, 3, 28], [2024, 3, 28], [2024, 3, 30]], 250000, 0.0125], [[2024, 3, 29], 512.15]], ['normal control 4', [[2023, 3, 27], 12, [[2024, 3, 31]], 250000, 0.0425], [[2024, 3, 27], 10802.08]]], [['regression end-end trigger 1', [[2030, 11, 29], 2, [[2031, 1, 29], [2031, 1, 29]], 250000, 0.0125], [[2031, 1, 31], 546.88]], ['regression end-end trigger 2', [[2023, 4, 28], 1, [[2023, 5, 31]], 250000, 0.0425], [[2023, 5, 30], 944.44]], ['partial repair probe 1', [[2021, 11, 29], 6, [], 250000, 0.053], [[2022, 5, 30], 6698.61]], ['partial repair probe 2', [[2030, 5, 29], 2, [], 250000, 0.0125], [[2030, 7, 29], 529.51]], ['normal control 1', [[2019, 1, 31], 1, [], 250000, 0.0125], [[2019, 2, 28], 243.06]], ['normal control 2', [[2021, 8, 31], 2, [[2021, 10, 29], [2021, 10, 29]], 250000, 0.0425], [[2021, 10, 28], 1711.81]], ['normal control 3', [[2020, 2, 17], 6, [[2020, 8, 29]], 1000000, 0.053], [[2020, 8, 17], 26794.44]], ['normal control 4', [[2030, 2, 28], 3, [], 1000000, 0.0425], [[2030, 5, 31], 10861.11]]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), 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":"9652ef9e84ee5dd3aad0cdbbeff96c1ed7dfcbadd2d75d02e2588e4273bada82","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime\nN = 1\nobservations = []\ndef solve(start, tenor, holidays, principal, rate):\n    S = datetime.date(*start)\n    H = {datetime.date(*h) for h in holidays}\n    def biz(x):\n        return x.weekday() < 5 and x not in H\n    def mlen(y, m):\n        if m == 2:\n            return 29 if (y % 4 == 0 and y % 100 != 0) or y % 400 == 0 else 28\n        return 30 if m in (4, 6, 9, 11) else 31\n    def last_biz(y, m):\n        x = datetime.date(y, m, mlen(y, m))\n        while not biz(x):\n            x -= datetime.timedelta(days=1)\n        return x\n    def mf(x):\n        f = x\n        while not biz(f):\n            f += datetime.timedelta(days=1)\n        if f.month != x.month:\n            f = x\n            while not biz(f):\n                f -= datetime.timedelta(days=1)\n        return f\n    t = S.year * 12 + S.month - 1 + tenor\n    y, m = t // 12, t % 12 + 1\n    if S.day == mlen(S.year, S.month):\n        M = last_biz(y, m)\n    else:\n        M = mf(datetime.date(y, m, min(S.day, mlen(y, m))))\n    interest = round(principal * rate * (M - S).days / 360, 2)\n    return [[M.year, M.month, M.day], interest]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression end-end trigger 1', [[2026, 5, 29], 2, [], 1000000, 0.0425], [[2026, 7, 31], 7437.5]], ['regression end-end trigger 2', [[2019, 3, 29], 2, [[2019, 5, 28], [2019, 5, 27], [2019, 5, 31]], 1000000, 0.0425], [[2019, 5, 30], 7319.44]], ['partial repair probe 1', [[2030, 7, 29], 3, [], 1000000, 0.053], [[2030, 10, 29], 13544.44]], ['partial repair probe 2', [[2029, 11, 28], 6, [], 1000000, 0.053], [[2030, 5, 28], 26647.22]], ['normal control 1', [[2019, 2, 28], 3, [[2019, 5, 27]], 1000000, 0.0425], [[2019, 5, 31], 10861.11]], ['normal control 2', [[2027, 3, 31], 12, [[2028, 3, 27], [2028, 3, 30], [2028, 3, 30]], 1000000, 0.0425], [[2028, 3, 31], 43208.33]], ['normal control 3', [[2027, 7, 29], 6, [[2028, 1, 28], [2028, 1, 31], [2028, 1, 27]], 1000000, 0.0125], [[2028, 1, 26], 6284.72]], ['normal control 4', [[2028, 4, 26], 1, [[2028, 5, 30], [2028, 5, 30]], 1000000, 0.053], [[2028, 5, 26], 4416.67]]], [['regression end-end trigger 1', [[2023, 4, 28], 12, [], 250000, 0.0125], [[2024, 4, 30], 3194.44]], ['regression end-end trigger 2', [[2027, 1, 29], 6, [], 250000, 0.0125], [[2027, 7, 30], 1579.86]], ['partial repair probe 1', [[2029, 11, 28], 12, [[2030, 11, 26]], 250000, 0.0425], [[2030, 11, 28], 10772.57]], ['partial repair probe 2', [[2023, 11, 28], 6, [[2024, 5, 31]], 250000, 0.0125], [[2024, 5, 28], 1579.86]], ['normal control 1', [[2026, 3, 31], 12, [[2027, 3, 31]], 250000, 0.053], [[2027, 3, 30], 13397.22]], ['normal control 2', [[2030, 11, 11], 2, [[2031, 1, 31], [2031, 1, 28], [2031, 1, 30]], 1000000, 0.0425], [[2031, 1, 13], 7437.5]], ['normal control 3', [[2025, 1, 31], 3, [[2025, 4, 26], [2025, 4, 27]], 250000, 0.053], [[2025, 4, 30], 3275.69]], ['normal control 4', [[2023, 6, 22], 1, [], 1000000, 0.0125], [[2023, 7, 24], 1111.11]]], [['regression end-end trigger 1', [[2020, 2, 28], 2, [[2020, 4, 26], [2020, 4, 26]], 250000, 0.0125], [[2020, 4, 30], 538.19]], ['regression end-end trigger 2', [[2023, 4, 28], 6, [], 250000, 0.0425], [[2023, 10, 31], 5489.58]], ['partial repair probe 1', [[2021, 6, 28], 1, [[2021, 7, 29], [2021, 7, 27]], 1000000, 0.053], [[2021, 7, 28], 4416.67]], ['partial repair probe 2', [[2025, 2, 26], 3, [[2025, 5, 30], [2025, 5, 31]], 250000, 0.053], [[2025, 5, 26], 3275.69]], ['normal control 1', [[2023, 3, 31], 3, [[2023, 6, 26], [2023, 6, 29]], 250000, 0.0425], [[2023, 6, 30], 2685.76]], ['normal control 2', [[2029, 5, 31], 2, [[2029, 7, 28], [2029, 7, 31]], 1000000, 0.0125], [[2029, 7, 30], 2083.33]], ['normal control 3', [[2024, 9, 30], 2, [[2024, 11, 26]], 250000, 0.0425], [[2024, 11, 29], 1770.83]], ['normal control 4', [[2030, 5, 20], 12, [[2031, 5, 31], [2031, 5, 29], [2031, 5, 27]], 1000000, 0.053], [[2031, 5, 20], 53736.11]]], [['regression end-end trigger 1', [[2027, 1, 29], 2, [], 250000, 0.0425], [[2027, 3, 31], 1800.35]], ['regression end-end trigger 2', [[2027, 2, 26], 12, [[2028, 2, 25], [2028, 2, 27]], 1000000, 0.053], [[2028, 2, 29], 54177.78]], ['partial repair probe 1', [[2025, 10, 29], 2, [[2025, 12, 30]], 250000, 0.0125], [[2025, 12, 29], 529.51]], ['partial repair probe 2', [[2029, 1, 29], 12, [], 1000000, 0.053], [[2030, 1, 29], 53736.11]], ['normal control 1', [[2025, 5, 21], 2, [[2025, 7, 31], [2025, 7, 28], [2025, 7, 29]], 1000000, 0.0425], [[2025, 7, 21], 7201.39]], ['normal control 2', [[2028, 7, 31], 3, [], 1000000, 0.0125], [[2028, 10, 31], 3194.44]], ['normal control 3', [[2024, 1, 30], 2, [[2024, 3, 28], [2024, 3, 28], [2024, 3, 30]], 250000, 0.0125], [[2024, 3, 29], 512.15]], ['normal control 4', [[2023, 3, 27], 12, [[2024, 3, 31]], 250000, 0.0425], [[2024, 3, 27], 10802.08]]], [['regression end-end trigger 1', [[2030, 11, 29], 2, [[2031, 1, 29], [2031, 1, 29]], 250000, 0.0125], [[2031, 1, 31], 546.88]], ['regression end-end trigger 2', [[2023, 4, 28], 1, [[2023, 5, 31]], 250000, 0.0425], [[2023, 5, 30], 944.44]], ['partial repair probe 1', [[2021, 11, 29], 6, [], 250000, 0.053], [[2022, 5, 30], 6698.61]], ['partial repair probe 2', [[2030, 5, 29], 2, [], 250000, 0.0125], [[2030, 7, 29], 529.51]], ['normal control 1', [[2019, 1, 31], 1, [], 250000, 0.0125], [[2019, 2, 28], 243.06]], ['normal control 2', [[2021, 8, 31], 2, [[2021, 10, 29], [2021, 10, 29]], 250000, 0.0425], [[2021, 10, 28], 1711.81]], ['normal control 3', [[2020, 2, 17], 6, [[2020, 8, 29]], 1000000, 0.053], [[2020, 8, 17], 26794.44]], ['normal control 4', [[2030, 2, 28], 3, [], 1000000, 0.0425], [[2030, 5, 31], 10861.11]]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), 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":"f1e4e9a9aabbfc78534c18675366297bea93887a2602e04e97119ba32b384e52","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport datetime\nN = 1\nobservations = []\ndef solve(start, tenor, holidays, principal, rate):\n    S = datetime.date(*start)\n    H = {datetime.date(*h) for h in holidays}\n    def biz(x):\n        return x.weekday() < 5 and x not in H\n    def mlen(y, m):\n        if m == 2:\n            return 29 if (y % 4 == 0 and y % 100 != 0) or y % 400 == 0 else 28\n        return 30 if m in (4, 6, 9, 11) else 31\n    def last_biz(y, m):\n        x = datetime.date(y, m, mlen(y, m))\n        while not biz(x):\n            x -= datetime.timedelta(days=1)\n        return x\n    def mf(x):\n        f = x\n        while not biz(f):\n            f += datetime.timedelta(days=1)\n        if f.month != x.month:\n            f = x\n            while not biz(f):\n                f -= datetime.timedelta(days=1)\n        return f\n    t = S.year * 12 + S.month - 1 + tenor\n    y, m = t // 12, t % 12 + 1\n    if S == last_biz(S.year, S.month):\n        M = last_biz(y, m)\n    else:\n        M = mf(datetime.date(y, m, min(S.day, mlen(y, m))))\n    interest = round(principal * rate * (M - S).days / 360, 2)\n    return [[M.year, M.month, M.day], interest]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression end-end trigger 1', [[2026, 5, 29], 2, [], 1000000, 0.0425], [[2026, 7, 31], 7437.5]], ['regression end-end trigger 2', [[2019, 3, 29], 2, [[2019, 5, 28], [2019, 5, 27], [2019, 5, 31]], 1000000, 0.0425], [[2019, 5, 30], 7319.44]], ['partial repair probe 1', [[2030, 7, 29], 3, [], 1000000, 0.053], [[2030, 10, 29], 13544.44]], ['partial repair probe 2', [[2029, 11, 28], 6, [], 1000000, 0.053], [[2030, 5, 28], 26647.22]], ['normal control 1', [[2019, 2, 28], 3, [[2019, 5, 27]], 1000000, 0.0425], [[2019, 5, 31], 10861.11]], ['normal control 2', [[2027, 3, 31], 12, [[2028, 3, 27], [2028, 3, 30], [2028, 3, 30]], 1000000, 0.0425], [[2028, 3, 31], 43208.33]], ['normal control 3', [[2027, 7, 29], 6, [[2028, 1, 28], [2028, 1, 31], [2028, 1, 27]], 1000000, 0.0125], [[2028, 1, 26], 6284.72]], ['normal control 4', [[2028, 4, 26], 1, [[2028, 5, 30], [2028, 5, 30]], 1000000, 0.053], [[2028, 5, 26], 4416.67]]], [['regression end-end trigger 1', [[2023, 4, 28], 12, [], 250000, 0.0125], [[2024, 4, 30], 3194.44]], ['regression end-end trigger 2', [[2027, 1, 29], 6, [], 250000, 0.0125], [[2027, 7, 30], 1579.86]], ['partial repair probe 1', [[2029, 11, 28], 12, [[2030, 11, 26]], 250000, 0.0425], [[2030, 11, 28], 10772.57]], ['partial repair probe 2', [[2023, 11, 28], 6, [[2024, 5, 31]], 250000, 0.0125], [[2024, 5, 28], 1579.86]], ['normal control 1', [[2026, 3, 31], 12, [[2027, 3, 31]], 250000, 0.053], [[2027, 3, 30], 13397.22]], ['normal control 2', [[2030, 11, 11], 2, [[2031, 1, 31], [2031, 1, 28], [2031, 1, 30]], 1000000, 0.0425], [[2031, 1, 13], 7437.5]], ['normal control 3', [[2025, 1, 31], 3, [[2025, 4, 26], [2025, 4, 27]], 250000, 0.053], [[2025, 4, 30], 3275.69]], ['normal control 4', [[2023, 6, 22], 1, [], 1000000, 0.0125], [[2023, 7, 24], 1111.11]]], [['regression end-end trigger 1', [[2020, 2, 28], 2, [[2020, 4, 26], [2020, 4, 26]], 250000, 0.0125], [[2020, 4, 30], 538.19]], ['regression end-end trigger 2', [[2023, 4, 28], 6, [], 250000, 0.0425], [[2023, 10, 31], 5489.58]], ['partial repair probe 1', [[2021, 6, 28], 1, [[2021, 7, 29], [2021, 7, 27]], 1000000, 0.053], [[2021, 7, 28], 4416.67]], ['partial repair probe 2', [[2025, 2, 26], 3, [[2025, 5, 30], [2025, 5, 31]], 250000, 0.053], [[2025, 5, 26], 3275.69]], ['normal control 1', [[2023, 3, 31], 3, [[2023, 6, 26], [2023, 6, 29]], 250000, 0.0425], [[2023, 6, 30], 2685.76]], ['normal control 2', [[2029, 5, 31], 2, [[2029, 7, 28], [2029, 7, 31]], 1000000, 0.0125], [[2029, 7, 30], 2083.33]], ['normal control 3', [[2024, 9, 30], 2, [[2024, 11, 26]], 250000, 0.0425], [[2024, 11, 29], 1770.83]], ['normal control 4', [[2030, 5, 20], 12, [[2031, 5, 31], [2031, 5, 29], [2031, 5, 27]], 1000000, 0.053], [[2031, 5, 20], 53736.11]]], [['regression end-end trigger 1', [[2027, 1, 29], 2, [], 250000, 0.0425], [[2027, 3, 31], 1800.35]], ['regression end-end trigger 2', [[2027, 2, 26], 12, [[2028, 2, 25], [2028, 2, 27]], 1000000, 0.053], [[2028, 2, 29], 54177.78]], ['partial repair probe 1', [[2025, 10, 29], 2, [[2025, 12, 30]], 250000, 0.0125], [[2025, 12, 29], 529.51]], ['partial repair probe 2', [[2029, 1, 29], 12, [], 1000000, 0.053], [[2030, 1, 29], 53736.11]], ['normal control 1', [[2025, 5, 21], 2, [[2025, 7, 31], [2025, 7, 28], [2025, 7, 29]], 1000000, 0.0425], [[2025, 7, 21], 7201.39]], ['normal control 2', [[2028, 7, 31], 3, [], 1000000, 0.0125], [[2028, 10, 31], 3194.44]], ['normal control 3', [[2024, 1, 30], 2, [[2024, 3, 28], [2024, 3, 28], [2024, 3, 30]], 250000, 0.0125], [[2024, 3, 29], 512.15]], ['normal control 4', [[2023, 3, 27], 12, [[2024, 3, 31]], 250000, 0.0425], [[2024, 3, 27], 10802.08]]], [['regression end-end trigger 1', [[2030, 11, 29], 2, [[2031, 1, 29], [2031, 1, 29]], 250000, 0.0125], [[2031, 1, 31], 546.88]], ['regression end-end trigger 2', [[2023, 4, 28], 1, [[2023, 5, 31]], 250000, 0.0425], [[2023, 5, 30], 944.44]], ['partial repair probe 1', [[2021, 11, 29], 6, [], 250000, 0.053], [[2022, 5, 30], 6698.61]], ['partial repair probe 2', [[2030, 5, 29], 2, [], 250000, 0.0125], [[2030, 7, 29], 529.51]], ['normal control 1', [[2019, 1, 31], 1, [], 250000, 0.0125], [[2019, 2, 28], 243.06]], ['normal control 2', [[2021, 8, 31], 2, [[2021, 10, 29], [2021, 10, 29]], 250000, 0.0425], [[2021, 10, 28], 1711.81]], ['normal control 3', [[2020, 2, 17], 6, [[2020, 8, 29]], 1000000, 0.053], [[2020, 8, 17], 26794.44]], ['normal control 4', [[2030, 2, 28], 3, [], 1000000, 0.0425], [[2030, 5, 31], 10861.11]]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), 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 toy contract stated explicitly in the contract field; no claim of conformance to any published convention text. 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-bond_day_count_conventions-deposit-end-end-rule-end-end-trigger","generated_at":"2026-09-29T14:46:54.222791+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Bond accrual and pricing systems depend on exact day-count arithmetic; a single-day error changes settlement cash.","repair":"Trigger the rule when the start equals the last business day of its month.","root_cause":"The trigger tests for the calendar last day instead of the last business day.","sha256":"1fd6add056dde2328bcc051e9db9e4e3c6d9810fa4895b450b54dfa9a2a6d9a6","title":"Deposit maturity with the end-to-end rule: the end-to-end rule is triggered by the calendar month end · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":38.925,"exit_code":1,"observations":[{"actual":[[2026,7,31],7437.5],"check":"regression end-end trigger 1","expected":[[2026,7,31],7437.5],"passed":true},{"actual":[[2019,5,30],7319.44],"check":"regression end-end trigger 2","expected":[[2019,5,30],7319.44],"passed":true},{"actual":[[2030,10,31],13838.89],"check":"partial repair probe 1","expected":[[2030,10,29],13544.44],"passed":false},{"actual":[[2030,5,31],27088.89],"check":"partial repair probe 2","expected":[[2030,5,28],26647.22],"passed":false},{"actual":[[2019,5,31],10861.11],"check":"normal control 1","expected":[[2019,5,31],10861.11],"passed":true},{"actual":[[2028,3,31],43208.33],"check":"normal control 2","expected":[[2028,3,31],43208.33],"passed":true},{"actual":[[2028,1,26],6284.72],"check":"normal control 3","expected":[[2028,1,26],6284.72],"passed":true},{"actual":[[2028,5,26],4416.67],"check":"normal control 4","expected":[[2028,5,26],4416.67],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression end-end trigger 1\", \"actual\": [[2026, 7, 31], 7437.5], \"expected\": [[2026, 7, 31], 7437.5], \"passed\": true}, {\"check\": \"regression end-end trigger 2\", \"actual\": [[2019, 5, 30], 7319.44], \"expected\": [[2019, 5, 30], 7319.44], \"passed\": true}, {\"check\": \"partial repair probe 1\", \"actual\": [[2030, 10, 31], 13838.89], \"expected\": [[2030, 10, 29], 13544.44], \"passed\": false}, {\"check\": \"partial repair probe 2\", \"actual\": [[2030, 5, 31], 27088.89], \"expected\": [[2030, 5, 28], 26647.22], \"passed\": false}, {\"check\": \"normal control 1\", \"actual\": [[2019, 5, 31], 10861.11], \"expected\": [[2019, 5, 31], 10861.11], \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": [[2028, 3, 31], 43208.33], \"expected\": [[2028, 3, 31], 43208.33], \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": [[2028, 1, 26], 6284.72], \"expected\": [[2028, 1, 26], 6284.72], \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": [[2028, 5, 26], 4416.67], \"expected\": [[2028, 5, 26], 4416.67], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.864,"exit_code":1,"observations":[{"actual":[[2026,7,29],7201.39],"check":"regression end-end trigger 1","expected":[[2026,7,31],7437.5],"passed":false},{"actual":[[2019,5,29],7201.39],"check":"regression end-end trigger 2","expected":[[2019,5,30],7319.44],"passed":false},{"actual":[[2030,10,29],13544.44],"check":"partial repair probe 1","expected":[[2030,10,29],13544.44],"passed":true},{"actual":[[2030,5,28],26647.22],"check":"partial repair probe 2","expected":[[2030,5,28],26647.22],"passed":true},{"actual":[[2019,5,31],10861.11],"check":"normal control 1","expected":[[2019,5,31],10861.11],"passed":true},{"actual":[[2028,3,31],43208.33],"check":"normal control 2","expected":[[2028,3,31],43208.33],"passed":true},{"actual":[[2028,1,26],6284.72],"check":"normal control 3","expected":[[2028,1,26],6284.72],"passed":true},{"actual":[[2028,5,26],4416.67],"check":"normal control 4","expected":[[2028,5,26],4416.67],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression end-end trigger 1\", \"actual\": [[2026, 7, 29], 7201.39], \"expected\": [[2026, 7, 31], 7437.5], \"passed\": false}, {\"check\": \"regression end-end trigger 2\", \"actual\": [[2019, 5, 29], 7201.39], \"expected\": [[2019, 5, 30], 7319.44], \"passed\": false}, {\"check\": \"partial repair probe 1\", \"actual\": [[2030, 10, 29], 13544.44], \"expected\": [[2030, 10, 29], 13544.44], \"passed\": true}, {\"check\": \"partial repair probe 2\", \"actual\": [[2030, 5, 28], 26647.22], \"expected\": [[2030, 5, 28], 26647.22], \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": [[2019, 5, 31], 10861.11], \"expected\": [[2019, 5, 31], 10861.11], \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": [[2028, 3, 31], 43208.33], \"expected\": [[2028, 3, 31], 43208.33], \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": [[2028, 1, 26], 6284.72], \"expected\": [[2028, 1, 26], 6284.72], \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": [[2028, 5, 26], 4416.67], \"expected\": [[2028, 5, 26], 4416.67], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.749,"exit_code":0,"observations":[{"actual":[[2026,7,31],7437.5],"check":"regression end-end trigger 1","expected":[[2026,7,31],7437.5],"passed":true},{"actual":[[2019,5,30],7319.44],"check":"regression end-end trigger 2","expected":[[2019,5,30],7319.44],"passed":true},{"actual":[[2030,10,29],13544.44],"check":"partial repair probe 1","expected":[[2030,10,29],13544.44],"passed":true},{"actual":[[2030,5,28],26647.22],"check":"partial repair probe 2","expected":[[2030,5,28],26647.22],"passed":true},{"actual":[[2019,5,31],10861.11],"check":"normal control 1","expected":[[2019,5,31],10861.11],"passed":true},{"actual":[[2028,3,31],43208.33],"check":"normal control 2","expected":[[2028,3,31],43208.33],"passed":true},{"actual":[[2028,1,26],6284.72],"check":"normal control 3","expected":[[2028,1,26],6284.72],"passed":true},{"actual":[[2028,5,26],4416.67],"check":"normal control 4","expected":[[2028,5,26],4416.67],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression end-end trigger 1\", \"actual\": [[2026, 7, 31], 7437.5], \"expected\": [[2026, 7, 31], 7437.5], \"passed\": true}, {\"check\": \"regression end-end trigger 2\", \"actual\": [[2019, 5, 30], 7319.44], \"expected\": [[2019, 5, 30], 7319.44], \"passed\": true}, {\"check\": \"partial repair probe 1\", \"actual\": [[2030, 10, 29], 13544.44], \"expected\": [[2030, 10, 29], 13544.44], \"passed\": true}, {\"check\": \"partial repair probe 2\", \"actual\": [[2030, 5, 28], 26647.22], \"expected\": [[2030, 5, 28], 26647.22], \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": [[2019, 5, 31], 10861.11], \"expected\": [[2019, 5, 31], 10861.11], \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": [[2028, 3, 31], 43208.33], \"expected\": [[2028, 3, 31], 43208.33], \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": [[2028, 1, 26], 6284.72], \"expected\": [[2028, 1, 26], 6284.72], \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": [[2028, 5, 26], 4416.67], \"expected\": [[2028, 5, 26], 4416.67], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}