{"abstract":"Monthly charges are too high for assets with salvage value.","category":"Double-entry ledger accounting","checks":7,"contract":"x = {'cost', 'salvage', 'life_months', 'start_month', 'convention': 'full_month'|'mid_month'|'next_month', 'through': last month to post}. Depreciable base = cost - salvage. The first charge month is start_month (start_month + 1 for next_month). Charges use cumulative rounding: target accumulated after the j-th charge month is round(base*j/life) or, for mid_month, round(base*(2j-1)/(2*life)), half-up and capped at base; each month posts target - accumulated. Posting stops after 'through' or once accumulated reaches base. Return {'schedule': [[month, amount]], 'accumulated', 'book_value': cost - accumulated}.","contract_signature":"x","evaluation_group":"w2-double-entry-ledger-accounting-straight-line-depreciation-journal","failed_approach":"Only capping at cost minus salvage stops at the right total but charges each month at the full-cost rate.","family":"w2-double-entry-ledger-accounting-straight-line-depreciation-journal-salvage-exclusion","id":"FA-58326","implementations":{"attempt":{"sha256":"3d525e6321d039f368af5a371fc9066bef6fcb702c18fd9f412aa4ab42f13370","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    base = x['cost']\n    life = x['life_months']\n    conv = x['convention']\n    first = x['start_month'] + (1 if conv == 'next_month' else 0)\n    acc = 0\n    rows = []\n    month = first\n    while month <= x['through'] and acc < base:\n        j = month - first + 1\n        if conv == 'mid_month':\n            target = rnd(base * (2 * j - 1), 2 * life)\n        else:\n            target = rnd(base * j, life)\n        target = min(target, base - x['salvage'])\n        rows.append([month, target - acc])\n        acc = target\n        month += 1\n    return {'schedule': rows, 'accumulated': acc, 'book_value': x['cost'] - acc}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: salvage exclusion', {'cost': 120000, 'salvage': 7, 'life_months': 7, 'start_month': 10, 'convention': 'full_month', 'through': 80}, {'schedule': [[10, 17142], [11, 17142], [12, 17142], [13, 17141], [14, 17142], [15, 17142], [16, 17142]], 'accumulated': 119993, 'book_value': 7}], ['control 1', {'cost': 5000, 'salvage': 0, 'life_months': 12, 'start_month': 1, 'convention': 'mid_month', 'through': 80}, {'schedule': [[1, 208], [2, 417], [3, 417], [4, 416], [5, 417], [6, 417], [7, 416], [8, 417], [9, 417], [10, 416], [11, 417], [12, 417], [13, 208]], 'accumulated': 5000, 'book_value': 0}], ['control 2', {'cost': 5000, 'salvage': 12000, 'life_months': 12, 'start_month': 10, 'convention': 'next_month', 'through': 1}, {'schedule': [], 'accumulated': 0, 'book_value': 5000}], ['control 3', {'cost': 36000, 'salvage': 0, 'life_months': 12, 'start_month': 3, 'convention': 'full_month', 'through': 3}, {'schedule': [[3, 3000]], 'accumulated': 3000, 'book_value': 33000}], ['control 4', {'cost': 100000, 'salvage': 0, 'life_months': 12, 'start_month': 1, 'convention': 'mid_month', 'through': 1}, {'schedule': [[1, 4167]], 'accumulated': 4167, 'book_value': 95833}], ['control 5', {'cost': 5000, 'salvage': 7, 'life_months': 7, 'start_month': 1, 'convention': 'mid_month', 'through': 1}, {'schedule': [[1, 357]], 'accumulated': 357, 'book_value': 4643}], ['control 6', {'cost': 36000, 'salvage': 12000, 'life_months': 36, 'start_month': 1, 'convention': 'next_month', 'through': 1}, {'schedule': [], 'accumulated': 0, 'book_value': 36000}]], [['regression: salvage exclusion', {'cost': 99999, 'salvage': 1000, 'life_months': 60, 'start_month': 3, 'convention': 'next_month', 'through': 40}, {'schedule': [[4, 1650], [5, 1650], [6, 1650], [7, 1650], [8, 1650], [9, 1650], [10, 1650], [11, 1650], [12, 1650], [13, 1650], [14, 1650], [15, 1650], [16, 1650], [17, 1650], [18, 1650], [19, 1650], [20, 1650], [21, 1650], [22, 1650], [23, 1650], [24, 1650], [25, 1650], [26, 1650], [27, 1650], [28, 1650], [29, 1650], [30, 1650], [31, 1650], [32, 1650], [33, 1650], [34, 1649], [35, 1650], [36, 1650], [37, 1650], [38, 1650], [39, 1650], [40, 1650]], 'accumulated': 61049, 'book_value': 38950}], ['control 1', {'cost': 120000, 'salvage': 1000, 'life_months': 60, 'start_month': 10, 'convention': 'next_month', 'through': 1}, {'schedule': [], 'accumulated': 0, 'book_value': 120000}], ['control 2', {'cost': 36000, 'salvage': 0, 'life_months': 60, 'start_month': 10, 'convention': 'next_month', 'through': 80}, {'schedule': [[11, 600], [12, 600], [13, 600], [14, 600], [15, 600], [16, 600], [17, 600], [18, 600], [19, 600], [20, 600], [21, 600], [22, 600], [23, 600], [24, 600], [25, 600], [26, 600], [27, 600], [28, 600], [29, 600], [30, 600], [31, 600], [32, 600], [33, 600], [34, 600], [35, 600], [36, 600], [37, 600], [38, 600], [39, 600], [40, 600], [41, 600], [42, 600], [43, 600], [44, 600], [45, 600], [46, 600], [47, 600], [48, 600], [49, 600], [50, 600], [51, 600], [52, 600], [53, 600], [54, 600], [55, 600], [56, 600], [57, 600], [58, 600], [59, 600], [60, 600], [61, 600], [62, 600], [63, 600], [64, 600], [65, 600], [66, 600], [67, 600], [68, 600], [69, 600], [70, 600]], 'accumulated': 36000, 'book_value': 0}], ['control 3', {'cost': 100000, 'salvage': 7, 'life_months': 60, 'start_month': 1, 'convention': 'next_month', 'through': 1}, {'schedule': [], 'accumulated': 0, 'book_value': 100000}], ['control 4', {'cost': 36000, 'salvage': 7, 'life_months': 36, 'start_month': 3, 'convention': 'full_month', 'through': 3}, {'schedule': [[3, 1000]], 'accumulated': 1000, 'book_value': 35000}], ['control 5', {'cost': 120000, 'salvage': 0, 'life_months': 36, 'start_month': 10, 'convention': 'mid_month', 'through': 80}, {'schedule': [[10, 1667], [11, 3333], [12, 3333], [13, 3334], [14, 3333], [15, 3333], [16, 3334], [17, 3333], [18, 3333], [19, 3334], [20, 3333], [21, 3333], [22, 3334], [23, 3333], [24, 3333], [25, 3334], [26, 3333], [27, 3333], [28, 3334], [29, 3333], [30, 3333], [31, 3334], [32, 3333], [33, 3333], [34, 3334], [35, 3333], [36, 3333], [37, 3334], [38, 3333], [39, 3333], [40, 3334], [41, 3333], [42, 3333], [43, 3334], [44, 3333], [45, 3333], [46, 1667]], 'accumulated': 120000, 'book_value': 0}], ['control 6', {'cost': 99999, 'salvage': 0, 'life_months': 7, 'start_month': 10, 'convention': 'mid_month', 'through': 3}, {'schedule': [], 'accumulated': 0, 'book_value': 99999}]], [['regression: salvage exclusion', {'cost': 100000, 'salvage': 12000, 'life_months': 7, 'start_month': 1, 'convention': 'next_month', 'through': 12}, {'schedule': [[2, 12571], [3, 12572], [4, 12571], [5, 12572], [6, 12571], [7, 12572], [8, 12571]], 'accumulated': 88000, 'book_value': 12000}], ['control 1', {'cost': 36000, 'salvage': 0, 'life_months': 7, 'start_month': 3, 'convention': 'mid_month', 'through': 1}, {'schedule': [], 'accumulated': 0, 'book_value': 36000}], ['control 2', {'cost': 100000, 'salvage': 0, 'life_months': 12, 'start_month': 3, 'convention': 'next_month', 'through': 12}, {'schedule': [[4, 8333], [5, 8334], [6, 8333], [7, 8333], [8, 8334], [9, 8333], [10, 8333], [11, 8334], [12, 8333]], 'accumulated': 75000, 'book_value': 25000}], ['control 3', {'cost': 36000, 'salvage': 0, 'life_months': 60, 'start_month': 1, 'convention': 'next_month', 'through': 80}, {'schedule': [[2, 600], [3, 600], [4, 600], [5, 600], [6, 600], [7, 600], [8, 600], [9, 600], [10, 600], [11, 600], [12, 600], [13, 600], [14, 600], [15, 600], [16, 600], [17, 600], [18, 600], [19, 600], [20, 600], [21, 600], [22, 600], [23, 600], [24, 600], [25, 600], [26, 600], [27, 600], [28, 600], [29, 600], [30, 600], [31, 600], [32, 600], [33, 600], [34, 600], [35, 600], [36, 600], [37, 600], [38, 600], [39, 600], [40, 600], [41, 600], [42, 600], [43, 600], [44, 600], [45, 600], [46, 600], [47, 600], [48, 600], [49, 600], [50, 600], [51, 600], [52, 600], [53, 600], [54, 600], [55, 600], [56, 600], [57, 600], [58, 600], [59, 600], [60, 600], [61, 600]], 'accumulated': 36000, 'book_value': 0}], ['control 4', {'cost': 99999, 'salvage': 7, 'life_months': 12, 'start_month': 3, 'convention': 'next_month', 'through': 1}, {'schedule': [], 'accumulated': 0, 'book_value': 99999}], ['control 5', {'cost': 100000, 'salvage': 7, 'life_months': 36, 'start_month': 10, 'convention': 'full_month', 'through': 1}, {'schedule': [], 'accumulated': 0, 'book_value': 100000}], ['control 6', {'cost': 5000, 'salvage': 0, 'life_months': 60, 'start_month': 3, 'convention': 'mid_month', 'through': 1}, {'schedule': [], 'accumulated': 0, 'book_value': 5000}]], [['regression: salvage exclusion', {'cost': 36000, 'salvage': 12000, 'life_months': 60, 'start_month': 10, 'convention': 'full_month', 'through': 12}, {'schedule': [[10, 400], [11, 400], [12, 400]], 'accumulated': 1200, 'book_value': 34800}], ['control 1', {'cost': 36000, 'salvage': 7, 'life_months': 36, 'start_month': 1, 'convention': 'mid_month', 'through': 3}, {'schedule': [[1, 500], [2, 1000], [3, 1000]], 'accumulated': 2500, 'book_value': 33500}], ['control 2', {'cost': 120000, 'salvage': 12000, 'life_months': 36, 'start_month': 3, 'convention': 'next_month', 'through': 1}, {'schedule': [], 'accumulated': 0, 'book_value': 120000}], ['control 3', {'cost': 36000, 'salvage': 0, 'life_months': 7, 'start_month': 1, 'convention': 'next_month', 'through': 80}, {'schedule': [[2, 5143], [3, 5143], [4, 5143], [5, 5142], [6, 5143], [7, 5143], [8, 5143]], 'accumulated': 36000, 'book_value': 0}], ['control 4', {'cost': 100000, 'salvage': 7, 'life_months': 60, 'start_month': 3, 'convention': 'mid_month', 'through': 1}, {'schedule': [], 'accumulated': 0, 'book_value': 100000}], ['control 5', {'cost': 5000, 'salvage': 0, 'life_months': 7, 'start_month': 10, 'convention': 'mid_month', 'through': 40}, {'schedule': [[10, 357], [11, 714], [12, 715], [13, 714], [14, 714], [15, 715], [16, 714], [17, 357]], 'accumulated': 5000, 'book_value': 0}], ['control 6', {'cost': 5000, 'salvage': 7, 'life_months': 36, 'start_month': 3, 'convention': 'full_month', 'through': 3}, {'schedule': [[3, 139]], 'accumulated': 139, 'book_value': 4861}]], [['regression: salvage exclusion', {'cost': 100000, 'salvage': 12000, 'life_months': 12, 'start_month': 10, 'convention': 'mid_month', 'through': 80}, {'schedule': [[10, 3667], [11, 7333], [12, 7333], [13, 7334], [14, 7333], [15, 7333], [16, 7334], [17, 7333], [18, 7333], [19, 7334], [20, 7333], [21, 7333], [22, 3667]], 'accumulated': 88000, 'book_value': 12000}], ['control 1', {'cost': 120000, 'salvage': 12000, 'life_months': 60, 'start_month': 10, 'convention': 'mid_month', 'through': 3}, {'schedule': [], 'accumulated': 0, 'book_value': 120000}], ['control 2', {'cost': 5000, 'salvage': 0, 'life_months': 36, 'start_month': 3, 'convention': 'next_month', 'through': 12}, {'schedule': [[4, 139], [5, 139], [6, 139], [7, 139], [8, 138], [9, 139], [10, 139], [11, 139], [12, 139]], 'accumulated': 1250, 'book_value': 3750}], ['control 3', {'cost': 99999, 'salvage': 0, 'life_months': 60, 'start_month': 3, 'convention': 'full_month', 'through': 40}, {'schedule': [[3, 1667], [4, 1666], [5, 1667], [6, 1667], [7, 1666], [8, 1667], [9, 1667], [10, 1666], [11, 1667], [12, 1667], [13, 1666], [14, 1667], [15, 1666], [16, 1667], [17, 1667], [18, 1666], [19, 1667], [20, 1667], [21, 1666], [22, 1667], [23, 1667], [24, 1666], [25, 1667], [26, 1667], [27, 1666], [28, 1667], [29, 1667], [30, 1666], [31, 1667], [32, 1667], [33, 1666], [34, 1667], [35, 1666], [36, 1667], [37, 1667], [38, 1666], [39, 1667], [40, 1667]], 'accumulated': 63333, 'book_value': 36666}], ['control 4', {'cost': 100000, 'salvage': 0, 'life_months': 12, 'start_month': 1, 'convention': 'mid_month', 'through': 12}, {'schedule': [[1, 4167], [2, 8333], [3, 8333], [4, 8334], [5, 8333], [6, 8333], [7, 8334], [8, 8333], [9, 8333], [10, 8334], [11, 8333], [12, 8333]], 'accumulated': 95833, 'book_value': 4167}], ['control 5', {'cost': 100000, 'salvage': 0, 'life_months': 60, 'start_month': 10, 'convention': 'next_month', 'through': 1}, {'schedule': [], 'accumulated': 0, 'book_value': 100000}], ['control 6', {'cost': 100000, 'salvage': 0, 'life_months': 36, 'start_month': 3, 'convention': 'full_month', 'through': 1}, {'schedule': [], 'accumulated': 0, 'book_value': 100000}]]]\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":"151b9da9690f372b3e0a0bb6fd2d3a38bc38431f6bee3163f8ff7d81a6a61fd9","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    base = x['cost']\n    life = x['life_months']\n    conv = x['convention']\n    first = x['start_month'] + (1 if conv == 'next_month' else 0)\n    acc = 0\n    rows = []\n    month = first\n    while month <= x['through'] and acc < base:\n        j = month - first + 1\n        if conv == 'mid_month':\n            target = rnd(base * (2 * j - 1), 2 * life)\n        else:\n            target = rnd(base * j, life)\n        target = min(target, base)\n        rows.append([month, target - acc])\n        acc = target\n        month += 1\n    return {'schedule': rows, 'accumulated': acc, 'book_value': x['cost'] - acc}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: salvage exclusion', {'cost': 120000, 'salvage': 7, 'life_months': 7, 'start_month': 10, 'convention': 'full_month', 'through': 80}, {'schedule': [[10, 17142], [11, 17142], [12, 17142], [13, 17141], [14, 17142], [15, 17142], [16, 17142]], 'accumulated': 119993, 'book_value': 7}], ['control 1', {'cost': 5000, 'salvage': 0, 'life_months': 12, 'start_month': 1, 'convention': 'mid_month', 'through': 80}, {'schedule': [[1, 208], [2, 417], [3, 417], [4, 416], [5, 417], [6, 417], [7, 416], [8, 417], [9, 417], [10, 416], [11, 417], [12, 417], [13, 208]], 'accumulated': 5000, 'book_value': 0}], ['control 2', {'cost': 5000, 'salvage': 12000, 'life_months': 12, 'start_month': 10, 'convention': 'next_month', 'through': 1}, {'schedule': [], 'accumulated': 0, 'book_value': 5000}], ['control 3', {'cost': 36000, 'salvage': 0, 'life_months': 12, 'start_month': 3, 'convention': 'full_month', 'through': 3}, {'schedule': [[3, 3000]], 'accumulated': 3000, 'book_value': 33000}], ['control 4', {'cost': 100000, 'salvage': 0, 'life_months': 12, 'start_month': 1, 'convention': 'mid_month', 'through': 1}, {'schedule': [[1, 4167]], 'accumulated': 4167, 'book_value': 95833}], ['control 5', {'cost': 5000, 'salvage': 7, 'life_months': 7, 'start_month': 1, 'convention': 'mid_month', 'through': 1}, {'schedule': [[1, 357]], 'accumulated': 357, 'book_value': 4643}], ['control 6', {'cost': 36000, 'salvage': 12000, 'life_months': 36, 'start_month': 1, 'convention': 'next_month', 'through': 1}, {'schedule': [], 'accumulated': 0, 'book_value': 36000}]], [['regression: salvage exclusion', {'cost': 99999, 'salvage': 1000, 'life_months': 60, 'start_month': 3, 'convention': 'next_month', 'through': 40}, {'schedule': [[4, 1650], [5, 1650], [6, 1650], [7, 1650], [8, 1650], [9, 1650], [10, 1650], [11, 1650], [12, 1650], [13, 1650], [14, 1650], [15, 1650], [16, 1650], [17, 1650], [18, 1650], [19, 1650], [20, 1650], [21, 1650], [22, 1650], [23, 1650], [24, 1650], [25, 1650], [26, 1650], [27, 1650], [28, 1650], [29, 1650], [30, 1650], [31, 1650], [32, 1650], [33, 1650], [34, 1649], [35, 1650], [36, 1650], [37, 1650], [38, 1650], [39, 1650], [40, 1650]], 'accumulated': 61049, 'book_value': 38950}], ['control 1', {'cost': 120000, 'salvage': 1000, 'life_months': 60, 'start_month': 10, 'convention': 'next_month', 'through': 1}, {'schedule': [], 'accumulated': 0, 'book_value': 120000}], ['control 2', {'cost': 36000, 'salvage': 0, 'life_months': 60, 'start_month': 10, 'convention': 'next_month', 'through': 80}, {'schedule': [[11, 600], [12, 600], [13, 600], [14, 600], [15, 600], [16, 600], [17, 600], [18, 600], [19, 600], [20, 600], [21, 600], [22, 600], [23, 600], [24, 600], [25, 600], [26, 600], [27, 600], [28, 600], [29, 600], [30, 600], [31, 600], [32, 600], [33, 600], [34, 600], [35, 600], [36, 600], [37, 600], [38, 600], [39, 600], [40, 600], [41, 600], [42, 600], [43, 600], [44, 600], [45, 600], [46, 600], [47, 600], [48, 600], [49, 600], [50, 600], [51, 600], [52, 600], [53, 600], [54, 600], [55, 600], [56, 600], [57, 600], [58, 600], [59, 600], [60, 600], [61, 600], [62, 600], [63, 600], [64, 600], [65, 600], [66, 600], [67, 600], [68, 600], [69, 600], [70, 600]], 'accumulated': 36000, 'book_value': 0}], ['control 3', {'cost': 100000, 'salvage': 7, 'life_months': 60, 'start_month': 1, 'convention': 'next_month', 'through': 1}, {'schedule': [], 'accumulated': 0, 'book_value': 100000}], ['control 4', {'cost': 36000, 'salvage': 7, 'life_months': 36, 'start_month': 3, 'convention': 'full_month', 'through': 3}, {'schedule': [[3, 1000]], 'accumulated': 1000, 'book_value': 35000}], ['control 5', {'cost': 120000, 'salvage': 0, 'life_months': 36, 'start_month': 10, 'convention': 'mid_month', 'through': 80}, {'schedule': [[10, 1667], [11, 3333], [12, 3333], [13, 3334], [14, 3333], [15, 3333], [16, 3334], [17, 3333], [18, 3333], [19, 3334], [20, 3333], [21, 3333], [22, 3334], [23, 3333], [24, 3333], [25, 3334], [26, 3333], [27, 3333], [28, 3334], [29, 3333], [30, 3333], [31, 3334], [32, 3333], [33, 3333], [34, 3334], [35, 3333], [36, 3333], [37, 3334], [38, 3333], [39, 3333], [40, 3334], [41, 3333], [42, 3333], [43, 3334], [44, 3333], [45, 3333], [46, 1667]], 'accumulated': 120000, 'book_value': 0}], ['control 6', {'cost': 99999, 'salvage': 0, 'life_months': 7, 'start_month': 10, 'convention': 'mid_month', 'through': 3}, {'schedule': [], 'accumulated': 0, 'book_value': 99999}]], [['regression: salvage exclusion', {'cost': 100000, 'salvage': 12000, 'life_months': 7, 'start_month': 1, 'convention': 'next_month', 'through': 12}, {'schedule': [[2, 12571], [3, 12572], [4, 12571], [5, 12572], [6, 12571], [7, 12572], [8, 12571]], 'accumulated': 88000, 'book_value': 12000}], ['control 1', {'cost': 36000, 'salvage': 0, 'life_months': 7, 'start_month': 3, 'convention': 'mid_month', 'through': 1}, {'schedule': [], 'accumulated': 0, 'book_value': 36000}], ['control 2', {'cost': 100000, 'salvage': 0, 'life_months': 12, 'start_month': 3, 'convention': 'next_month', 'through': 12}, {'schedule': [[4, 8333], [5, 8334], [6, 8333], [7, 8333], [8, 8334], [9, 8333], [10, 8333], [11, 8334], [12, 8333]], 'accumulated': 75000, 'book_value': 25000}], ['control 3', {'cost': 36000, 'salvage': 0, 'life_months': 60, 'start_month': 1, 'convention': 'next_month', 'through': 80}, {'schedule': [[2, 600], [3, 600], [4, 600], [5, 600], [6, 600], [7, 600], [8, 600], [9, 600], [10, 600], [11, 600], [12, 600], [13, 600], [14, 600], [15, 600], [16, 600], [17, 600], [18, 600], [19, 600], [20, 600], [21, 600], [22, 600], [23, 600], [24, 600], [25, 600], [26, 600], [27, 600], [28, 600], [29, 600], [30, 600], [31, 600], [32, 600], [33, 600], [34, 600], [35, 600], [36, 600], [37, 600], [38, 600], [39, 600], [40, 600], [41, 600], [42, 600], [43, 600], [44, 600], [45, 600], [46, 600], [47, 600], [48, 600], [49, 600], [50, 600], [51, 600], [52, 600], [53, 600], [54, 600], [55, 600], [56, 600], [57, 600], [58, 600], [59, 600], [60, 600], [61, 600]], 'accumulated': 36000, 'book_value': 0}], ['control 4', {'cost': 99999, 'salvage': 7, 'life_months': 12, 'start_month': 3, 'convention': 'next_month', 'through': 1}, {'schedule': [], 'accumulated': 0, 'book_value': 99999}], ['control 5', {'cost': 100000, 'salvage': 7, 'life_months': 36, 'start_month': 10, 'convention': 'full_month', 'through': 1}, {'schedule': [], 'accumulated': 0, 'book_value': 100000}], ['control 6', {'cost': 5000, 'salvage': 0, 'life_months': 60, 'start_month': 3, 'convention': 'mid_month', 'through': 1}, {'schedule': [], 'accumulated': 0, 'book_value': 5000}]], [['regression: salvage exclusion', {'cost': 36000, 'salvage': 12000, 'life_months': 60, 'start_month': 10, 'convention': 'full_month', 'through': 12}, {'schedule': [[10, 400], [11, 400], [12, 400]], 'accumulated': 1200, 'book_value': 34800}], ['control 1', {'cost': 36000, 'salvage': 7, 'life_months': 36, 'start_month': 1, 'convention': 'mid_month', 'through': 3}, {'schedule': [[1, 500], [2, 1000], [3, 1000]], 'accumulated': 2500, 'book_value': 33500}], ['control 2', {'cost': 120000, 'salvage': 12000, 'life_months': 36, 'start_month': 3, 'convention': 'next_month', 'through': 1}, {'schedule': [], 'accumulated': 0, 'book_value': 120000}], ['control 3', {'cost': 36000, 'salvage': 0, 'life_months': 7, 'start_month': 1, 'convention': 'next_month', 'through': 80}, {'schedule': [[2, 5143], [3, 5143], [4, 5143], [5, 5142], [6, 5143], [7, 5143], [8, 5143]], 'accumulated': 36000, 'book_value': 0}], ['control 4', {'cost': 100000, 'salvage': 7, 'life_months': 60, 'start_month': 3, 'convention': 'mid_month', 'through': 1}, {'schedule': [], 'accumulated': 0, 'book_value': 100000}], ['control 5', {'cost': 5000, 'salvage': 0, 'life_months': 7, 'start_month': 10, 'convention': 'mid_month', 'through': 40}, {'schedule': [[10, 357], [11, 714], [12, 715], [13, 714], [14, 714], [15, 715], [16, 714], [17, 357]], 'accumulated': 5000, 'book_value': 0}], ['control 6', {'cost': 5000, 'salvage': 7, 'life_months': 36, 'start_month': 3, 'convention': 'full_month', 'through': 3}, {'schedule': [[3, 139]], 'accumulated': 139, 'book_value': 4861}]], [['regression: salvage exclusion', {'cost': 100000, 'salvage': 12000, 'life_months': 12, 'start_month': 10, 'convention': 'mid_month', 'through': 80}, {'schedule': [[10, 3667], [11, 7333], [12, 7333], [13, 7334], [14, 7333], [15, 7333], [16, 7334], [17, 7333], [18, 7333], [19, 7334], [20, 7333], [21, 7333], [22, 3667]], 'accumulated': 88000, 'book_value': 12000}], ['control 1', {'cost': 120000, 'salvage': 12000, 'life_months': 60, 'start_month': 10, 'convention': 'mid_month', 'through': 3}, {'schedule': [], 'accumulated': 0, 'book_value': 120000}], ['control 2', {'cost': 5000, 'salvage': 0, 'life_months': 36, 'start_month': 3, 'convention': 'next_month', 'through': 12}, {'schedule': [[4, 139], [5, 139], [6, 139], [7, 139], [8, 138], [9, 139], [10, 139], [11, 139], [12, 139]], 'accumulated': 1250, 'book_value': 3750}], ['control 3', {'cost': 99999, 'salvage': 0, 'life_months': 60, 'start_month': 3, 'convention': 'full_month', 'through': 40}, {'schedule': [[3, 1667], [4, 1666], [5, 1667], [6, 1667], [7, 1666], [8, 1667], [9, 1667], [10, 1666], [11, 1667], [12, 1667], [13, 1666], [14, 1667], [15, 1666], [16, 1667], [17, 1667], [18, 1666], [19, 1667], [20, 1667], [21, 1666], [22, 1667], [23, 1667], [24, 1666], [25, 1667], [26, 1667], [27, 1666], [28, 1667], [29, 1667], [30, 1666], [31, 1667], [32, 1667], [33, 1666], [34, 1667], [35, 1666], [36, 1667], [37, 1667], [38, 1666], [39, 1667], [40, 1667]], 'accumulated': 63333, 'book_value': 36666}], ['control 4', {'cost': 100000, 'salvage': 0, 'life_months': 12, 'start_month': 1, 'convention': 'mid_month', 'through': 12}, {'schedule': [[1, 4167], [2, 8333], [3, 8333], [4, 8334], [5, 8333], [6, 8333], [7, 8334], [8, 8333], [9, 8333], [10, 8334], [11, 8333], [12, 8333]], 'accumulated': 95833, 'book_value': 4167}], ['control 5', {'cost': 100000, 'salvage': 0, 'life_months': 60, 'start_month': 10, 'convention': 'next_month', 'through': 1}, {'schedule': [], 'accumulated': 0, 'book_value': 100000}], ['control 6', {'cost': 100000, 'salvage': 0, 'life_months': 36, 'start_month': 3, 'convention': 'full_month', 'through': 1}, {'schedule': [], 'accumulated': 0, 'book_value': 100000}]]]\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 bookkeeping rules stated in the contract; amounts are integer cents; it makes no claim of conformance to any accounting 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-double-entry-ledger-accounting-straight-line-depreciation-journal-salvage-exclusion","generated_at":"2026-09-29T14:46:25.534086+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Ledger software must keep debits equal to credits and apply normal-balance, period and cutoff rules exactly; small sign or boundary slips silently misstate financial statements.","root_cause":"The depreciable base ignores salvage.","sha256":"5ef571e1d35b32f525bd12ff0531235ac8d6700186da294f55500c7a6418b2ed","title":"Straight-line depreciation journal: salvage exclusion · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":41.17,"exit_code":1,"observations":[{"actual":{"accumulated":119993,"book_value":7,"schedule":[[10,17143],[11,17143],[12,17143],[13,17142],[14,17143],[15,17143],[16,17136],[17,0],[18,0],[19,0],[20,0],[21,0],[22,0],[23,0],[24,0],[25,0],[26,0],[27,0],[28,0],[29,0],[30,0],[31,0],[32,0],[33,0],[34,0],[35,0],[36,0],[37,0],[38,0],[39,0],[40,0],[41,0],[42,0],[43,0],[44,0],[45,0],[46,0],[47,0],[48,0],[49,0],[50,0],[51,0],[52,0],[53,0],[54,0],[55,0],[56,0],[57,0],[58,0],[59,0],[60,0],[61,0],[62,0],[63,0],[64,0],[65,0],[66,0],[67,0],[68,0],[69,0],[70,0],[71,0],[72,0],[73,0],[74,0],[75,0],[76,0],[77,0],[78,0],[79,0],[80,0]]},"check":"regression: salvage exclusion","expected":{"accumulated":119993,"book_value":7,"schedule":[[10,17142],[11,17142],[12,17142],[13,17141],[14,17142],[15,17142],[16,17142]]},"passed":false},{"actual":{"accumulated":5000,"book_value":0,"schedule":[[1,208],[2,417],[3,417],[4,416],[5,417],[6,417],[7,416],[8,417],[9,417],[10,416],[11,417],[12,417],[13,208]]},"check":"control 1","expected":{"accumulated":5000,"book_value":0,"schedule":[[1,208],[2,417],[3,417],[4,416],[5,417],[6,417],[7,416],[8,417],[9,417],[10,416],[11,417],[12,417],[13,208]]},"passed":true},{"actual":{"accumulated":0,"book_value":5000,"schedule":[]},"check":"control 2","expected":{"accumulated":0,"book_value":5000,"schedule":[]},"passed":true},{"actual":{"accumulated":3000,"book_value":33000,"schedule":[[3,3000]]},"check":"control 3","expected":{"accumulated":3000,"book_value":33000,"schedule":[[3,3000]]},"passed":true},{"actual":{"accumulated":4167,"book_value":95833,"schedule":[[1,4167]]},"check":"control 4","expected":{"accumulated":4167,"book_value":95833,"schedule":[[1,4167]]},"passed":true},{"actual":{"accumulated":357,"book_value":4643,"schedule":[[1,357]]},"check":"control 5","expected":{"accumulated":357,"book_value":4643,"schedule":[[1,357]]},"passed":true},{"actual":{"accumulated":0,"book_value":36000,"schedule":[]},"check":"control 6","expected":{"accumulated":0,"book_value":36000,"schedule":[]},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: salvage exclusion\", \"actual\": {\"schedule\": [[10, 17143], [11, 17143], [12, 17143], [13, 17142], [14, 17143], [15, 17143], [16, 17136], [17, 0], [18, 0], [19, 0], [20, 0], [21, 0], [22, 0], [23, 0], [24, 0], [25, 0], [26, 0], [27, 0], [28, 0], [29, 0], [30, 0], [31, 0], [32, 0], [33, 0], [34, 0], [35, 0], [36, 0], [37, 0], [38, 0], [39, 0], [40, 0], [41, 0], [42, 0], [43, 0], [44, 0], [45, 0], [46, 0], [47, 0], [48, 0], [49, 0], [50, 0], [51, 0], [52, 0], [53, 0], [54, 0], [55, 0], [56, 0], [57, 0], [58, 0], [59, 0], [60, 0], [61, 0], [62, 0], [63, 0], [64, 0], [65, 0], [66, 0], [67, 0], [68, 0], [69, 0], [70, 0], [71, 0], [72, 0], [73, 0], [74, 0], [75, 0], [76, 0], [77, 0], [78, 0], [79, 0], [80, 0]], \"accumulated\": 119993, \"book_value\": 7}, \"expected\": {\"schedule\": [[10, 17142], [11, 17142], [12, 17142], [13, 17141], [14, 17142], [15, 17142], [16, 17142]], \"accumulated\": 119993, \"book_value\": 7}, \"passed\": false}, {\"check\": \"control 1\", \"actual\": {\"schedule\": [[1, 208], [2, 417], [3, 417], [4, 416], [5, 417], [6, 417], [7, 416], [8, 417], [9, 417], [10, 416], [11, 417], [12, 417], [13, 208]], \"accumulated\": 5000, \"book_value\": 0}, \"expected\": {\"schedule\": [[1, 208], [2, 417], [3, 417], [4, 416], [5, 417], [6, 417], [7, 416], [8, 417], [9, 417], [10, 416], [11, 417], [12, 417], [13, 208]], \"accumulated\": 5000, \"book_value\": 0}, \"passed\": true}, {\"check\": \"control 2\", \"actual\": {\"schedule\": [], \"accumulated\": 0, \"book_value\": 5000}, \"expected\": {\"schedule\": [], \"accumulated\": 0, \"book_value\": 5000}, \"passed\": true}, {\"check\": \"control 3\", \"actual\": {\"schedule\": [[3, 3000]], \"accumulated\": 3000, \"book_value\": 33000}, \"expected\": {\"schedule\": [[3, 3000]], \"accumulated\": 3000, \"book_value\": 33000}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"schedule\": [[1, 4167]], \"accumulated\": 4167, \"book_value\": 95833}, \"expected\": {\"schedule\": [[1, 4167]], \"accumulated\": 4167, \"book_value\": 95833}, \"passed\": true}, {\"check\": \"control 5\", \"actual\": {\"schedule\": [[1, 357]], \"accumulated\": 357, \"book_value\": 4643}, \"expected\": {\"schedule\": [[1, 357]], \"accumulated\": 357, \"book_value\": 4643}, \"passed\": true}, {\"check\": \"control 6\", \"actual\": {\"schedule\": [], \"accumulated\": 0, \"book_value\": 36000}, \"expected\": {\"schedule\": [], \"accumulated\": 0, \"book_value\": 36000}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.136,"exit_code":1,"observations":[{"actual":{"accumulated":120000,"book_value":0,"schedule":[[10,17143],[11,17143],[12,17143],[13,17142],[14,17143],[15,17143],[16,17143]]},"check":"regression: salvage exclusion","expected":{"accumulated":119993,"book_value":7,"schedule":[[10,17142],[11,17142],[12,17142],[13,17141],[14,17142],[15,17142],[16,17142]]},"passed":false},{"actual":{"accumulated":5000,"book_value":0,"schedule":[[1,208],[2,417],[3,417],[4,416],[5,417],[6,417],[7,416],[8,417],[9,417],[10,416],[11,417],[12,417],[13,208]]},"check":"control 1","expected":{"accumulated":5000,"book_value":0,"schedule":[[1,208],[2,417],[3,417],[4,416],[5,417],[6,417],[7,416],[8,417],[9,417],[10,416],[11,417],[12,417],[13,208]]},"passed":true},{"actual":{"accumulated":0,"book_value":5000,"schedule":[]},"check":"control 2","expected":{"accumulated":0,"book_value":5000,"schedule":[]},"passed":true},{"actual":{"accumulated":3000,"book_value":33000,"schedule":[[3,3000]]},"check":"control 3","expected":{"accumulated":3000,"book_value":33000,"schedule":[[3,3000]]},"passed":true},{"actual":{"accumulated":4167,"book_value":95833,"schedule":[[1,4167]]},"check":"control 4","expected":{"accumulated":4167,"book_value":95833,"schedule":[[1,4167]]},"passed":true},{"actual":{"accumulated":357,"book_value":4643,"schedule":[[1,357]]},"check":"control 5","expected":{"accumulated":357,"book_value":4643,"schedule":[[1,357]]},"passed":true},{"actual":{"accumulated":0,"book_value":36000,"schedule":[]},"check":"control 6","expected":{"accumulated":0,"book_value":36000,"schedule":[]},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: salvage exclusion\", \"actual\": {\"schedule\": [[10, 17143], [11, 17143], [12, 17143], [13, 17142], [14, 17143], [15, 17143], [16, 17143]], \"accumulated\": 120000, \"book_value\": 0}, \"expected\": {\"schedule\": [[10, 17142], [11, 17142], [12, 17142], [13, 17141], [14, 17142], [15, 17142], [16, 17142]], \"accumulated\": 119993, \"book_value\": 7}, \"passed\": false}, {\"check\": \"control 1\", \"actual\": {\"schedule\": [[1, 208], [2, 417], [3, 417], [4, 416], [5, 417], [6, 417], [7, 416], [8, 417], [9, 417], [10, 416], [11, 417], [12, 417], [13, 208]], \"accumulated\": 5000, \"book_value\": 0}, \"expected\": {\"schedule\": [[1, 208], [2, 417], [3, 417], [4, 416], [5, 417], [6, 417], [7, 416], [8, 417], [9, 417], [10, 416], [11, 417], [12, 417], [13, 208]], \"accumulated\": 5000, \"book_value\": 0}, \"passed\": true}, {\"check\": \"control 2\", \"actual\": {\"schedule\": [], \"accumulated\": 0, \"book_value\": 5000}, \"expected\": {\"schedule\": [], \"accumulated\": 0, \"book_value\": 5000}, \"passed\": true}, {\"check\": \"control 3\", \"actual\": {\"schedule\": [[3, 3000]], \"accumulated\": 3000, \"book_value\": 33000}, \"expected\": {\"schedule\": [[3, 3000]], \"accumulated\": 3000, \"book_value\": 33000}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"schedule\": [[1, 4167]], \"accumulated\": 4167, \"book_value\": 95833}, \"expected\": {\"schedule\": [[1, 4167]], \"accumulated\": 4167, \"book_value\": 95833}, \"passed\": true}, {\"check\": \"control 5\", \"actual\": {\"schedule\": [[1, 357]], \"accumulated\": 357, \"book_value\": 4643}, \"expected\": {\"schedule\": [[1, 357]], \"accumulated\": 357, \"book_value\": 4643}, \"passed\": true}, {\"check\": \"control 6\", \"actual\": {\"schedule\": [], \"accumulated\": 0, \"book_value\": 36000}, \"expected\": {\"schedule\": [], \"accumulated\": 0, \"book_value\": 36000}, \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}