{"abstract":"A drop exactly at the tolerance is rejected while an equal rise is accepted.","category":"Currency rounding and FX conversion","checks":8,"contract":"solve(new, ref, tol_bps, inverted): accept a newly published rate if |n - ref| / ref * 10000 <= tol_bps using exact decimals, where n = new, or 1/new when the new quote arrives inverted. A non-positive new or ref returns 'ERR:rate'. Return 'accept' or 'reject'.","contract_signature":"new, ref, tol_bps, inverted","evaluation_group":"w2-currency_rounding_and_fx_conversion-rate-tolerance-band","failed_approach":"Dividing by the larger of the two rates makes the band asymmetric in the opposite way.","family":"w2-currency_rounding_and_fx_conversion-rate-tolerance-band-deviation-denominator","id":"FA-62216","implementations":{"attempt":{"sha256":"970f39102f36256ae5e03e50399bcb3c8fb742b75fd8e13462b5997f158cf4e1","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom decimal import Decimal, ROUND_HALF_EVEN, ROUND_HALF_UP, ROUND_FLOOR, ROUND_CEILING, ROUND_DOWN, ROUND_UP, ROUND_HALF_DOWN\nN = 1\nobservations = []\ndef solve(new, ref, tol_bps, inverted):\n    n, r = Decimal(new), Decimal(ref)\n    if r <= 0 or n <= 0: return 'ERR:rate'\n    if inverted: n = 1 / n\n    dev = abs(n - r) / max(n, r)\n    return 'accept' if dev * 10000 <= tol_bps else 'reject'\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('regression deviation-denominator 1', ('0.9', '1.0', 1000, False), 'accept'),\n  ('regression deviation-denominator 2', ('1.610829', '1.6271', 100, False), 'accept'),\n  ('partial repair guard 1', ('0.61344857', '1.6285', 10, True), 'reject'),\n  ('partial repair guard 2', ('1.87484661', '1.8561', 100, False), 'reject'),\n  ('control: upper boundary', ('1.1', '1.0', 1000, False), 'accept'),\n  ('control: drop too far', ('0.8', '1.0', 1000, False), 'reject'),\n  ('control: inverted exact', ('0.5', '2.0', 0, True), 'accept'),\n  ('control: bad ref', ('1.2', '0', 5, False), 'ERR:rate')],\n [('regression deviation-denominator 1', ('1.19829675', '1.2013', 25, False), 'accept'),\n  ('regression deviation-denominator 2', ('1.20407797', '0.8389', 100, True), 'accept'),\n  ('partial repair guard 1', ('0.93539594', '1.0664', 25, True), 'reject'),\n  ('partial repair guard 2', ('1.00665155', '0.9924', 10, True), 'reject'),\n  ('control: inverted exact', ('0.5', '2.0', 0, True), 'accept'),\n  ('control: bad ref', ('1.2', '0', 5, False), 'ERR:rate'),\n  ('control: small move', ('1.08351', '1.0835', 1, False), 'accept'),\n  ('control: rise too far', ('1.2', '1.0', 1000, False), 'reject')],\n [('regression deviation-denominator 1', ('0.61344857', '1.6285', 10, True), 'reject'),\n  ('regression deviation-denominator 2', ('1.8098883', '1.8117', 10, False), 'accept'),\n  ('partial repair guard 1', ('1.41341757', '0.7005', 100, True), 'reject'),\n  ('partial repair guard 2', ('0.78742098', '1.2687', 10, True), 'reject'),\n  ('control: rise too far', ('1.2', '1.0', 1000, False), 'reject'),\n  ('control: inverted far', ('0.9', '1.0', 50, True), 'reject'),\n  ('control: upper boundary', ('1.1', '1.0', 1000, False), 'accept'),\n  ('control: lower boundary', ('0.9', '1.0', 1000, False), 'accept')],\n [('regression deviation-denominator 1', ('1.093455', '1.1045', 100, False), 'accept'),\n  ('regression deviation-denominator 2', ('1.87484661', '1.8561', 100, False), 'reject'),\n  ('partial repair guard 1', ('0.78810637', '1.2657', 25, True), 'reject'),\n  ('partial repair guard 2', ('1.93703825', '1.7525', 1000, False), 'reject'),\n  ('control: lower boundary', ('0.9', '1.0', 1000, False), 'accept'),\n  ('control: drop too far', ('0.8', '1.0', 1000, False), 'reject'),\n  ('control: inverted exact', ('0.5', '2.0', 0, True), 'accept'),\n  ('control: bad ref', ('1.2', '0', 5, False), 'ERR:rate')],\n [('regression deviation-denominator 1', ('0.6260540', '0.6292', 50, False), 'accept'),\n  ('regression deviation-denominator 2', ('1.32976725', '1.3331', 25, False), 'accept'),\n  ('partial repair guard 1', ('1.36829603', '0.7236', 100, True), 'reject'),\n  ('partial repair guard 2', ('0.98224108', '1.0080', 100, True), 'reject'),\n  ('control: bad ref', ('1.2', '0', 5, False), 'ERR:rate'),\n  ('control: small move', ('1.08351', '1.0835', 1, False), 'accept'),\n  ('control: rise too far', ('1.2', '1.0', 1000, False), 'reject'),\n  ('control: inverted far', ('0.9', '1.0', 50, True), 'reject')]]\nfor label, args, expected in cases[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":"9b85c4b9e27ce8061a5f65c8e657a032db9faef7d879e87bcd000317a470130e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom decimal import Decimal, ROUND_HALF_EVEN, ROUND_HALF_UP, ROUND_FLOOR, ROUND_CEILING, ROUND_DOWN, ROUND_UP, ROUND_HALF_DOWN\nN = 1\nobservations = []\ndef solve(new, ref, tol_bps, inverted):\n    n, r = Decimal(new), Decimal(ref)\n    if r <= 0 or n <= 0: return 'ERR:rate'\n    if inverted: n = 1 / n\n    dev = abs(n - r) / n\n    return 'accept' if dev * 10000 <= tol_bps else 'reject'\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('regression deviation-denominator 1', ('0.9', '1.0', 1000, False), 'accept'),\n  ('regression deviation-denominator 2', ('1.610829', '1.6271', 100, False), 'accept'),\n  ('partial repair guard 1', ('0.61344857', '1.6285', 10, True), 'reject'),\n  ('partial repair guard 2', ('1.87484661', '1.8561', 100, False), 'reject'),\n  ('control: upper boundary', ('1.1', '1.0', 1000, False), 'accept'),\n  ('control: drop too far', ('0.8', '1.0', 1000, False), 'reject'),\n  ('control: inverted exact', ('0.5', '2.0', 0, True), 'accept'),\n  ('control: bad ref', ('1.2', '0', 5, False), 'ERR:rate')],\n [('regression deviation-denominator 1', ('1.19829675', '1.2013', 25, False), 'accept'),\n  ('regression deviation-denominator 2', ('1.20407797', '0.8389', 100, True), 'accept'),\n  ('partial repair guard 1', ('0.93539594', '1.0664', 25, True), 'reject'),\n  ('partial repair guard 2', ('1.00665155', '0.9924', 10, True), 'reject'),\n  ('control: inverted exact', ('0.5', '2.0', 0, True), 'accept'),\n  ('control: bad ref', ('1.2', '0', 5, False), 'ERR:rate'),\n  ('control: small move', ('1.08351', '1.0835', 1, False), 'accept'),\n  ('control: rise too far', ('1.2', '1.0', 1000, False), 'reject')],\n [('regression deviation-denominator 1', ('0.61344857', '1.6285', 10, True), 'reject'),\n  ('regression deviation-denominator 2', ('1.8098883', '1.8117', 10, False), 'accept'),\n  ('partial repair guard 1', ('1.41341757', '0.7005', 100, True), 'reject'),\n  ('partial repair guard 2', ('0.78742098', '1.2687', 10, True), 'reject'),\n  ('control: rise too far', ('1.2', '1.0', 1000, False), 'reject'),\n  ('control: inverted far', ('0.9', '1.0', 50, True), 'reject'),\n  ('control: upper boundary', ('1.1', '1.0', 1000, False), 'accept'),\n  ('control: lower boundary', ('0.9', '1.0', 1000, False), 'accept')],\n [('regression deviation-denominator 1', ('1.093455', '1.1045', 100, False), 'accept'),\n  ('regression deviation-denominator 2', ('1.87484661', '1.8561', 100, False), 'reject'),\n  ('partial repair guard 1', ('0.78810637', '1.2657', 25, True), 'reject'),\n  ('partial repair guard 2', ('1.93703825', '1.7525', 1000, False), 'reject'),\n  ('control: lower boundary', ('0.9', '1.0', 1000, False), 'accept'),\n  ('control: drop too far', ('0.8', '1.0', 1000, False), 'reject'),\n  ('control: inverted exact', ('0.5', '2.0', 0, True), 'accept'),\n  ('control: bad ref', ('1.2', '0', 5, False), 'ERR:rate')],\n [('regression deviation-denominator 1', ('0.6260540', '0.6292', 50, False), 'accept'),\n  ('regression deviation-denominator 2', ('1.32976725', '1.3331', 25, False), 'accept'),\n  ('partial repair guard 1', ('1.36829603', '0.7236', 100, True), 'reject'),\n  ('partial repair guard 2', ('0.98224108', '1.0080', 100, True), 'reject'),\n  ('control: bad ref', ('1.2', '0', 5, False), 'ERR:rate'),\n  ('control: small move', ('1.08351', '1.0835', 1, False), 'accept'),\n  ('control: rise too far', ('1.2', '1.0', 1000, False), 'reject'),\n  ('control: inverted far', ('0.9', '1.0', 50, True), 'reject')]]\nfor label, args, expected in cases[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, bounded teaching model with a stipulated toy contract; it makes no claim of conformance to any real regulation, standard, or institution's rules. 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-currency_rounding_and_fx_conversion-rate-tolerance-band-deviation-denominator","generated_at":"2026-09-29T14:47:02.611186+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Currency amounts must be rounded at the right stage and in the right unit, or ledgers, quotes and settlements drift by minor units.","root_cause":"The relative deviation divides by the new rate instead of the reference.","sha256":"731fc8825f1e3f2d19fca1727662cc5950a0d32badf7ec9f7a0fde1912da118f","title":"The rate deviation is measured relative to the new rate · 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.688,"exit_code":1,"observations":[{"actual":"accept","check":"regression deviation-denominator 1","expected":"accept","passed":true},{"actual":"accept","check":"regression deviation-denominator 2","expected":"accept","passed":true},{"actual":"accept","check":"partial repair guard 1","expected":"reject","passed":false},{"actual":"accept","check":"partial repair guard 2","expected":"reject","passed":false},{"actual":"accept","check":"control: upper boundary","expected":"accept","passed":true},{"actual":"reject","check":"control: drop too far","expected":"reject","passed":true},{"actual":"accept","check":"control: inverted exact","expected":"accept","passed":true},{"actual":"ERR:rate","check":"control: bad ref","expected":"ERR:rate","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression deviation-denominator 1\", \"actual\": \"accept\", \"expected\": \"accept\", \"passed\": true}, {\"check\": \"regression deviation-denominator 2\", \"actual\": \"accept\", \"expected\": \"accept\", \"passed\": true}, {\"check\": \"partial repair guard 1\", \"actual\": \"accept\", \"expected\": \"reject\", \"passed\": false}, {\"check\": \"partial repair guard 2\", \"actual\": \"accept\", \"expected\": \"reject\", \"passed\": false}, {\"check\": \"control: upper boundary\", \"actual\": \"accept\", \"expected\": \"accept\", \"passed\": true}, {\"check\": \"control: drop too far\", \"actual\": \"reject\", \"expected\": \"reject\", \"passed\": true}, {\"check\": \"control: inverted exact\", \"actual\": \"accept\", \"expected\": \"accept\", \"passed\": true}, {\"check\": \"control: bad ref\", \"actual\": \"ERR:rate\", \"expected\": \"ERR:rate\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.497,"exit_code":1,"observations":[{"actual":"reject","check":"regression deviation-denominator 1","expected":"accept","passed":false},{"actual":"reject","check":"regression deviation-denominator 2","expected":"accept","passed":false},{"actual":"accept","check":"partial repair guard 1","expected":"reject","passed":false},{"actual":"accept","check":"partial repair guard 2","expected":"reject","passed":false},{"actual":"accept","check":"control: upper boundary","expected":"accept","passed":true},{"actual":"reject","check":"control: drop too far","expected":"reject","passed":true},{"actual":"accept","check":"control: inverted exact","expected":"accept","passed":true},{"actual":"ERR:rate","check":"control: bad ref","expected":"ERR:rate","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression deviation-denominator 1\", \"actual\": \"reject\", \"expected\": \"accept\", \"passed\": false}, {\"check\": \"regression deviation-denominator 2\", \"actual\": \"reject\", \"expected\": \"accept\", \"passed\": false}, {\"check\": \"partial repair guard 1\", \"actual\": \"accept\", \"expected\": \"reject\", \"passed\": false}, {\"check\": \"partial repair guard 2\", \"actual\": \"accept\", \"expected\": \"reject\", \"passed\": false}, {\"check\": \"control: upper boundary\", \"actual\": \"accept\", \"expected\": \"accept\", \"passed\": true}, {\"check\": \"control: drop too far\", \"actual\": \"reject\", \"expected\": \"reject\", \"passed\": true}, {\"check\": \"control: inverted exact\", \"actual\": \"accept\", \"expected\": \"accept\", \"passed\": true}, {\"check\": \"control: bad ref\", \"actual\": \"ERR:rate\", \"expected\": \"ERR:rate\", \"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."}}