{"abstract":"Airport parking weekly cap returns a wrong result when a partial day is counted as a full day before the weekly split.","category":"Toll and parking fee computation","checks":8,"contract":"Input {minutes, daily, weekly, hourly}. Full 1440-minute days and a remainder; the remainder costs started hours * hourly capped at daily. Each full 7-day week costs weekly; the leftover full days plus the remainder cost days*daily + remainder charge, capped at weekly.","evaluation_group":"w2-toll_and_parking_fee_computation-airport-weekly","failed_approach":"A half-day rule rounds long remainders into a full day that is billed twice.","family":"w2-toll_and_parking_fee_computation-airport-weekly-week-days","id":"FA-68781","implementations":{"attempt":{"sha256":"eee7b599d0a8dceac68f1895eef20f450c91024562fbd51ea2532ac1929e4c84","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    m = x['minutes']\n    full, r = divmod(m, 1440)\n    part = min(x['daily'], -(-r // 60) * x['hourly'])\n    weeks, days = full // 7, full % 7 + (1 if r >= 720 else 0)\n    return weeks * x['weekly'] + min(x['weekly'], days * x['daily'] + part)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[({'minutes': 8000, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 11000), ({'minutes': 5760, 'daily': 2200, 'weekly': 9000, 'hourly': 400}, 8800), ({'minutes': 2651, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 4400), ({'minutes': 2156, 'daily': 2800, 'weekly': 9000, 'hourly': 500}, 5600), ({'minutes': 28800, 'daily': 2200, 'weekly': 9000, 'hourly': 400}, 27000), ({'minutes': 10180, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 12000), ({'minutes': 2719, 'daily': 1800, 'weekly': 11000, 'hourly': 500}, 3600), ({'minutes': 7200, 'daily': 2200, 'weekly': 9000, 'hourly': 600}, 9000)], [({'minutes': 10180, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 12000), ({'minutes': 1757, 'daily': 2800, 'weekly': 9000, 'hourly': 500}, 5600), ({'minutes': 20792, 'daily': 2800, 'weekly': 9000, 'hourly': 500}, 20800), ({'minutes': 1215, 'daily': 2800, 'weekly': 13000, 'hourly': 500}, 2800), ({'minutes': 780, 'daily': 2200, 'weekly': 9000, 'hourly': 400}, 2200), ({'minutes': 8000, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 11000), ({'minutes': 28800, 'daily': 2800, 'weekly': 9000, 'hourly': 500}, 27000), ({'minutes': 18051, 'daily': 2800, 'weekly': 13000, 'hourly': 600}, 26000)], [({'minutes': 15840, 'daily': 1800, 'weekly': 9000, 'hourly': 400}, 16200), ({'minutes': 25920, 'daily': 1800, 'weekly': 13000, 'hourly': 500}, 33200), ({'minutes': 2339, 'daily': 1800, 'weekly': 11000, 'hourly': 400}, 3600), ({'minutes': 860, 'daily': 1800, 'weekly': 11000, 'hourly': 600}, 1800), ({'minutes': 10180, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 12000), ({'minutes': 418, 'daily': 2800, 'weekly': 9000, 'hourly': 600}, 2800), ({'minutes': 553, 'daily': 1800, 'weekly': 13000, 'hourly': 600}, 1800), ({'minutes': 8000, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 11000)], [({'minutes': 740, 'daily': 2800, 'weekly': 11000, 'hourly': 600}, 2800), ({'minutes': 24656, 'daily': 2200, 'weekly': 13000, 'hourly': 500}, 34100), ({'minutes': 28970, 'daily': 2200, 'weekly': 9000, 'hourly': 400}, 27000), ({'minutes': 17056, 'daily': 1800, 'weekly': 9000, 'hourly': 400}, 18000), ({'minutes': 10180, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 12000), ({'minutes': 20909, 'daily': 2800, 'weekly': 9000, 'hourly': 400}, 20800), ({'minutes': 14400, 'daily': 2200, 'weekly': 9000, 'hourly': 500}, 15600), ({'minutes': 8000, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 11000)], [({'minutes': 10180, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 12000), ({'minutes': 11520, 'daily': 2800, 'weekly': 13000, 'hourly': 400}, 15800), ({'minutes': 2346, 'daily': 2800, 'weekly': 11000, 'hourly': 600}, 5600), ({'minutes': 15840, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 19800), ({'minutes': 1090, 'daily': 1800, 'weekly': 11000, 'hourly': 600}, 1800), ({'minutes': 8000, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 11000), ({'minutes': 25920, 'daily': 1800, 'weekly': 11000, 'hourly': 600}, 29200), ({'minutes': 8762, 'daily': 1800, 'weekly': 9000, 'hourly': 600}, 9000)]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check('fee oracle' + ' %d' % i, 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":"b2fe9218a781921bd4103e1ecddd16cfe450340b447d4694071c0577eb155a01","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    m = x['minutes']\n    full, r = divmod(m, 1440)\n    part = min(x['daily'], -(-r // 60) * x['hourly'])\n    weeks, days = divmod(-(-m // 1440), 7)\n    return weeks * x['weekly'] + min(x['weekly'], days * x['daily'] + part)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[({'minutes': 8000, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 11000), ({'minutes': 5760, 'daily': 2200, 'weekly': 9000, 'hourly': 400}, 8800), ({'minutes': 2651, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 4400), ({'minutes': 2156, 'daily': 2800, 'weekly': 9000, 'hourly': 500}, 5600), ({'minutes': 28800, 'daily': 2200, 'weekly': 9000, 'hourly': 400}, 27000), ({'minutes': 10180, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 12000), ({'minutes': 2719, 'daily': 1800, 'weekly': 11000, 'hourly': 500}, 3600), ({'minutes': 7200, 'daily': 2200, 'weekly': 9000, 'hourly': 600}, 9000)], [({'minutes': 10180, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 12000), ({'minutes': 1757, 'daily': 2800, 'weekly': 9000, 'hourly': 500}, 5600), ({'minutes': 20792, 'daily': 2800, 'weekly': 9000, 'hourly': 500}, 20800), ({'minutes': 1215, 'daily': 2800, 'weekly': 13000, 'hourly': 500}, 2800), ({'minutes': 780, 'daily': 2200, 'weekly': 9000, 'hourly': 400}, 2200), ({'minutes': 8000, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 11000), ({'minutes': 28800, 'daily': 2800, 'weekly': 9000, 'hourly': 500}, 27000), ({'minutes': 18051, 'daily': 2800, 'weekly': 13000, 'hourly': 600}, 26000)], [({'minutes': 15840, 'daily': 1800, 'weekly': 9000, 'hourly': 400}, 16200), ({'minutes': 25920, 'daily': 1800, 'weekly': 13000, 'hourly': 500}, 33200), ({'minutes': 2339, 'daily': 1800, 'weekly': 11000, 'hourly': 400}, 3600), ({'minutes': 860, 'daily': 1800, 'weekly': 11000, 'hourly': 600}, 1800), ({'minutes': 10180, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 12000), ({'minutes': 418, 'daily': 2800, 'weekly': 9000, 'hourly': 600}, 2800), ({'minutes': 553, 'daily': 1800, 'weekly': 13000, 'hourly': 600}, 1800), ({'minutes': 8000, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 11000)], [({'minutes': 740, 'daily': 2800, 'weekly': 11000, 'hourly': 600}, 2800), ({'minutes': 24656, 'daily': 2200, 'weekly': 13000, 'hourly': 500}, 34100), ({'minutes': 28970, 'daily': 2200, 'weekly': 9000, 'hourly': 400}, 27000), ({'minutes': 17056, 'daily': 1800, 'weekly': 9000, 'hourly': 400}, 18000), ({'minutes': 10180, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 12000), ({'minutes': 20909, 'daily': 2800, 'weekly': 9000, 'hourly': 400}, 20800), ({'minutes': 14400, 'daily': 2200, 'weekly': 9000, 'hourly': 500}, 15600), ({'minutes': 8000, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 11000)], [({'minutes': 10180, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 12000), ({'minutes': 11520, 'daily': 2800, 'weekly': 13000, 'hourly': 400}, 15800), ({'minutes': 2346, 'daily': 2800, 'weekly': 11000, 'hourly': 600}, 5600), ({'minutes': 15840, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 19800), ({'minutes': 1090, 'daily': 1800, 'weekly': 11000, 'hourly': 600}, 1800), ({'minutes': 8000, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 11000), ({'minutes': 25920, 'daily': 1800, 'weekly': 11000, 'hourly': 600}, 29200), ({'minutes': 8762, 'daily': 1800, 'weekly': 9000, 'hourly': 600}, 9000)]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check('fee oracle' + ' %d' % i, 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":"6c31fead9445c33ef480929e14a245833dc4a5d9f140888679afad94de37659d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    m = x['minutes']\n    full, r = divmod(m, 1440)\n    part = min(x['daily'], -(-r // 60) * x['hourly'])\n    weeks, days = divmod(full, 7)\n    return weeks * x['weekly'] + min(x['weekly'], days * x['daily'] + part)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[({'minutes': 8000, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 11000), ({'minutes': 5760, 'daily': 2200, 'weekly': 9000, 'hourly': 400}, 8800), ({'minutes': 2651, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 4400), ({'minutes': 2156, 'daily': 2800, 'weekly': 9000, 'hourly': 500}, 5600), ({'minutes': 28800, 'daily': 2200, 'weekly': 9000, 'hourly': 400}, 27000), ({'minutes': 10180, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 12000), ({'minutes': 2719, 'daily': 1800, 'weekly': 11000, 'hourly': 500}, 3600), ({'minutes': 7200, 'daily': 2200, 'weekly': 9000, 'hourly': 600}, 9000)], [({'minutes': 10180, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 12000), ({'minutes': 1757, 'daily': 2800, 'weekly': 9000, 'hourly': 500}, 5600), ({'minutes': 20792, 'daily': 2800, 'weekly': 9000, 'hourly': 500}, 20800), ({'minutes': 1215, 'daily': 2800, 'weekly': 13000, 'hourly': 500}, 2800), ({'minutes': 780, 'daily': 2200, 'weekly': 9000, 'hourly': 400}, 2200), ({'minutes': 8000, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 11000), ({'minutes': 28800, 'daily': 2800, 'weekly': 9000, 'hourly': 500}, 27000), ({'minutes': 18051, 'daily': 2800, 'weekly': 13000, 'hourly': 600}, 26000)], [({'minutes': 15840, 'daily': 1800, 'weekly': 9000, 'hourly': 400}, 16200), ({'minutes': 25920, 'daily': 1800, 'weekly': 13000, 'hourly': 500}, 33200), ({'minutes': 2339, 'daily': 1800, 'weekly': 11000, 'hourly': 400}, 3600), ({'minutes': 860, 'daily': 1800, 'weekly': 11000, 'hourly': 600}, 1800), ({'minutes': 10180, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 12000), ({'minutes': 418, 'daily': 2800, 'weekly': 9000, 'hourly': 600}, 2800), ({'minutes': 553, 'daily': 1800, 'weekly': 13000, 'hourly': 600}, 1800), ({'minutes': 8000, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 11000)], [({'minutes': 740, 'daily': 2800, 'weekly': 11000, 'hourly': 600}, 2800), ({'minutes': 24656, 'daily': 2200, 'weekly': 13000, 'hourly': 500}, 34100), ({'minutes': 28970, 'daily': 2200, 'weekly': 9000, 'hourly': 400}, 27000), ({'minutes': 17056, 'daily': 1800, 'weekly': 9000, 'hourly': 400}, 18000), ({'minutes': 10180, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 12000), ({'minutes': 20909, 'daily': 2800, 'weekly': 9000, 'hourly': 400}, 20800), ({'minutes': 14400, 'daily': 2200, 'weekly': 9000, 'hourly': 500}, 15600), ({'minutes': 8000, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 11000)], [({'minutes': 10180, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 12000), ({'minutes': 11520, 'daily': 2800, 'weekly': 13000, 'hourly': 400}, 15800), ({'minutes': 2346, 'daily': 2800, 'weekly': 11000, 'hourly': 600}, 5600), ({'minutes': 15840, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 19800), ({'minutes': 1090, 'daily': 1800, 'weekly': 11000, 'hourly': 600}, 1800), ({'minutes': 8000, 'daily': 2200, 'weekly': 11000, 'hourly': 500}, 11000), ({'minutes': 25920, 'daily': 1800, 'weekly': 11000, 'hourly': 600}, 29200), ({'minutes': 8762, 'daily': 1800, 'weekly': 9000, 'hourly': 600}, 9000)]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check('fee oracle' + ' %d' % i, 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, bounded toy model with a stipulated contract; it makes no claim of conformance to any agency manual or standard. 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-toll_and_parking_fee_computation-airport-weekly-week-days","generated_at":"2026-09-29T14:48:05.459828+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Fee engines bill customers in integer cents; a wrong boundary, rounding stage or cap scope silently over- or under-charges.","repair":"Restore the week and day split rule so that the step reads `weeks, days = divmod(full, 7)`.","root_cause":"The partial day is billed both as a full day and as its hourly remainder.","sha256":"43293d8d7652c8aa47c020f10f8a9568de454472aa846e67cdf534d2c5c54cb0","title":"Airport parking weekly cap: a partial day is counted as a full day before the weekly split · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.414,"exit_code":1,"observations":[{"actual":11000,"check":"fee oracle 0","expected":11000,"passed":true},{"actual":8800,"check":"fee oracle 1","expected":8800,"passed":true},{"actual":6600,"check":"fee oracle 2","expected":4400,"passed":false},{"actual":5600,"check":"fee oracle 3","expected":5600,"passed":true},{"actual":27000,"check":"fee oracle 4","expected":27000,"passed":true},{"actual":12000,"check":"fee oracle 5","expected":12000,"passed":true},{"actual":5400,"check":"fee oracle 6","expected":3600,"passed":false},{"actual":9000,"check":"fee oracle 7","expected":9000,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fee oracle 0\", \"actual\": 11000, \"expected\": 11000, \"passed\": true}, {\"check\": \"fee oracle 1\", \"actual\": 8800, \"expected\": 8800, \"passed\": true}, {\"check\": \"fee oracle 2\", \"actual\": 6600, \"expected\": 4400, \"passed\": false}, {\"check\": \"fee oracle 3\", \"actual\": 5600, \"expected\": 5600, \"passed\": true}, {\"check\": \"fee oracle 4\", \"actual\": 27000, \"expected\": 27000, \"passed\": true}, {\"check\": \"fee oracle 5\", \"actual\": 12000, \"expected\": 12000, \"passed\": true}, {\"check\": \"fee oracle 6\", \"actual\": 5400, \"expected\": 3600, \"passed\": false}, {\"check\": \"fee oracle 7\", \"actual\": 9000, \"expected\": 9000, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.134,"exit_code":1,"observations":[{"actual":11000,"check":"fee oracle 0","expected":11000,"passed":true},{"actual":8800,"check":"fee oracle 1","expected":8800,"passed":true},{"actual":6600,"check":"fee oracle 2","expected":4400,"passed":false},{"actual":8400,"check":"fee oracle 3","expected":5600,"passed":false},{"actual":27000,"check":"fee oracle 4","expected":27000,"passed":true},{"actual":14200,"check":"fee oracle 5","expected":12000,"passed":false},{"actual":5400,"check":"fee oracle 6","expected":3600,"passed":false},{"actual":9000,"check":"fee oracle 7","expected":9000,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fee oracle 0\", \"actual\": 11000, \"expected\": 11000, \"passed\": true}, {\"check\": \"fee oracle 1\", \"actual\": 8800, \"expected\": 8800, \"passed\": true}, {\"check\": \"fee oracle 2\", \"actual\": 6600, \"expected\": 4400, \"passed\": false}, {\"check\": \"fee oracle 3\", \"actual\": 8400, \"expected\": 5600, \"passed\": false}, {\"check\": \"fee oracle 4\", \"actual\": 27000, \"expected\": 27000, \"passed\": true}, {\"check\": \"fee oracle 5\", \"actual\": 14200, \"expected\": 12000, \"passed\": false}, {\"check\": \"fee oracle 6\", \"actual\": 5400, \"expected\": 3600, \"passed\": false}, {\"check\": \"fee oracle 7\", \"actual\": 9000, \"expected\": 9000, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":43.519,"exit_code":0,"observations":[{"actual":11000,"check":"fee oracle 0","expected":11000,"passed":true},{"actual":8800,"check":"fee oracle 1","expected":8800,"passed":true},{"actual":4400,"check":"fee oracle 2","expected":4400,"passed":true},{"actual":5600,"check":"fee oracle 3","expected":5600,"passed":true},{"actual":27000,"check":"fee oracle 4","expected":27000,"passed":true},{"actual":12000,"check":"fee oracle 5","expected":12000,"passed":true},{"actual":3600,"check":"fee oracle 6","expected":3600,"passed":true},{"actual":9000,"check":"fee oracle 7","expected":9000,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fee oracle 0\", \"actual\": 11000, \"expected\": 11000, \"passed\": true}, {\"check\": \"fee oracle 1\", \"actual\": 8800, \"expected\": 8800, \"passed\": true}, {\"check\": \"fee oracle 2\", \"actual\": 4400, \"expected\": 4400, \"passed\": true}, {\"check\": \"fee oracle 3\", \"actual\": 5600, \"expected\": 5600, \"passed\": true}, {\"check\": \"fee oracle 4\", \"actual\": 27000, \"expected\": 27000, \"passed\": true}, {\"check\": \"fee oracle 5\", \"actual\": 12000, \"expected\": 12000, \"passed\": true}, {\"check\": \"fee oracle 6\", \"actual\": 3600, \"expected\": 3600, \"passed\": true}, {\"check\": \"fee oracle 7\", \"actual\": 9000, \"expected\": 9000, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}