{"abstract":"A cash refund of -2.075 pays out -2.05 while a 2.075 sale charges 2.10.","category":"Currency rounding and FX conversion","checks":7,"contract":"solve(lines, tender): lines are CHF decimal strings with up to three decimals (weight- or volume-priced items; refund lines negative). The exact total is their sum. For tender 'cash' (compared after trimming and lower-casing) the total is rounded to the nearest 0.05 with ties away from zero; every other tender ('card', 'twint', 'voucher', ...) pays the total rounded half-up to 0.01. Return [payable as a 2-decimal string, adjustment as a 3-decimal string] where adjustment = payable - exact; zeros are unsigned.","evaluation_group":"w2-currency_rounding_and_fx_conversion-swiss-cash-rounding","failed_approach":"Switching to half-even rounding breaks ties toward even multiples instead of away from zero.","family":"w2-currency_rounding_and_fx_conversion-swiss-cash-rounding-refund-tie-direction","id":"FA-62011","implementations":{"attempt":{"sha256":"3d18bda14f37d1b37ec527de78fb58b0f38fb15568af58f46c5f518bc882c1aa","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(lines, tender):\n    def cash(v):\n        return (v / Decimal('0.05')).quantize(Decimal(1), rounding=ROUND_HALF_EVEN) * Decimal('0.05')\n    def z(d, e):\n        d = d.quantize(Decimal(1).scaleb(-e), rounding=ROUND_HALF_UP)\n        return format(abs(d) if d == 0 else d, 'f')\n    exact = sum((Decimal(l) for l in lines), Decimal('0.000'))\n    if tender.strip().lower() == 'cash':\n        r = cash(exact)\n    else:\n        r = exact.quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)\n    return [z(r, 2), z(r - exact, 3)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('regression refund-tie-direction 1', (['-2.075'], 'cash'), ['-2.10', '-0.025']),\n  ('regression refund-tie-direction 2', (['-1.025'], 'cash'), ['-1.05', '-0.025']),\n  ('partial repair guard 2', (['3.00', '0.025'], 'cash'), ['3.05', '0.025']),\n  ('control: round down', (['1.02', '1.00'], 'cash'), ['2.00', '-0.020']),\n  ('control: round to franc', (['0.99', '0.03'], 'cash'), ['1.00', '-0.020']),\n  ('control: refund', (['-1.03', '-0.99'], 'cash'), ['-2.00', '0.020']),\n  ('control: refund to zero', (['-0.02'], 'Cash '), ['0.00', '0.020'])],\n [('regression refund-tie-direction 1', (['-0.075'], 'cash'), ['-0.10', '-0.025']),\n  ('regression refund-tie-direction 2', (['-0.625'], 'cash'), ['-0.65', '-0.025']),\n  ('partial repair guard 1', (['7.95', '16.09', '-3.325', '23.21'], 'cash'), ['43.95', '0.025']),\n  ('partial repair guard 2', (['-0.46', '-0.885', '26.47'], 'CASH'), ['25.15', '0.025']),\n  ('control: refund to zero', (['-0.02'], 'Cash '), ['0.00', '0.020']),\n  ('control: card exact', (['1.02'], 'card'), ['1.02', '0.000']),\n  ('control: twint exact', (['3.33', '4.44'], 'twint'), ['7.77', '0.000']),\n  ('control: positive tie', (['3.00', '0.025'], 'cash'), ['3.05', '0.025'])],\n [('regression refund-tie-direction 1', (['-2.075'], 'cash'), ['-2.10', '-0.025']),\n  ('regression refund-tie-direction 2', (['-1.025'], 'cash'), ['-1.05', '-0.025']),\n  ('partial repair guard 1', (['1.825'], 'CASH'), ['1.85', '0.025']),\n  ('partial repair guard 2', (['-0.625'], 'cash'), ['-0.65', '-0.025']),\n  ('control: positive tie', (['3.00', '0.025'], 'cash'), ['3.05', '0.025']),\n  ('control: voucher exact', (['7.07'], 'voucher'), ['7.07', '0.000']),\n  ('control: mixed basket', (['12.40', '-3.12', '0.99'], ' CASH'), ['10.25', '-0.020']),\n  ('control: round down', (['1.02', '1.00'], 'cash'), ['2.00', '-0.020'])],\n [('regression refund-tie-direction 1', (['-0.075'], 'cash'), ['-0.10', '-0.025']),\n  ('regression refund-tie-direction 2', (['-0.625'], 'cash'), ['-0.65', '-0.025']),\n  ('partial repair guard 1', (['22.51', '1.915'], 'Cash'), ['24.45', '0.025']),\n  ('partial repair guard 2', (['8.51', '22.58', '28.67', '0.565'], 'Cash'), ['60.35', '0.025']),\n  ('control: mixed basket', (['12.40', '-3.12', '0.99'], ' CASH'), ['10.25', '-0.020']),\n  ('control: round down', (['1.02', '1.00'], 'cash'), ['2.00', '-0.020']),\n  ('control: round to franc', (['0.99', '0.03'], 'cash'), ['1.00', '-0.020']),\n  ('control: refund', (['-1.03', '-0.99'], 'cash'), ['-2.00', '0.020'])],\n [('regression refund-tie-direction 1', (['-2.075'], 'cash'), ['-2.10', '-0.025']),\n  ('regression refund-tie-direction 2', (['-1.025'], 'cash'), ['-1.05', '-0.025']),\n  ('partial repair guard 1', (['3.51', '-0.375', '11.09'], 'Cash'), ['14.25', '0.025']),\n  ('partial repair guard 2', (['15.83', '18.48', '1.715'], 'Cash'), ['36.05', '0.025']),\n  ('control: refund', (['-1.03', '-0.99'], 'cash'), ['-2.00', '0.020']),\n  ('control: refund to zero', (['-0.02'], 'Cash '), ['0.00', '0.020']),\n  ('control: card exact', (['1.02'], 'card'), ['1.02', '0.000']),\n  ('control: twint exact', (['3.33', '4.44'], 'twint'), ['7.77', '0.000'])]]\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":"56a58067d5a87d090fd7ebd999f2e9fbff70cda9e77b89189ec52e5dd4bbdb98","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(lines, tender):\n    def cash(v):\n        return (v / Decimal('0.05') + Decimal('0.5')).quantize(Decimal(1), rounding=ROUND_FLOOR) * Decimal('0.05')\n    def z(d, e):\n        d = d.quantize(Decimal(1).scaleb(-e), rounding=ROUND_HALF_UP)\n        return format(abs(d) if d == 0 else d, 'f')\n    exact = sum((Decimal(l) for l in lines), Decimal('0.000'))\n    if tender.strip().lower() == 'cash':\n        r = cash(exact)\n    else:\n        r = exact.quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)\n    return [z(r, 2), z(r - exact, 3)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('regression refund-tie-direction 1', (['-2.075'], 'cash'), ['-2.10', '-0.025']),\n  ('regression refund-tie-direction 2', (['-1.025'], 'cash'), ['-1.05', '-0.025']),\n  ('partial repair guard 2', (['3.00', '0.025'], 'cash'), ['3.05', '0.025']),\n  ('control: round down', (['1.02', '1.00'], 'cash'), ['2.00', '-0.020']),\n  ('control: round to franc', (['0.99', '0.03'], 'cash'), ['1.00', '-0.020']),\n  ('control: refund', (['-1.03', '-0.99'], 'cash'), ['-2.00', '0.020']),\n  ('control: refund to zero', (['-0.02'], 'Cash '), ['0.00', '0.020'])],\n [('regression refund-tie-direction 1', (['-0.075'], 'cash'), ['-0.10', '-0.025']),\n  ('regression refund-tie-direction 2', (['-0.625'], 'cash'), ['-0.65', '-0.025']),\n  ('partial repair guard 1', (['7.95', '16.09', '-3.325', '23.21'], 'cash'), ['43.95', '0.025']),\n  ('partial repair guard 2', (['-0.46', '-0.885', '26.47'], 'CASH'), ['25.15', '0.025']),\n  ('control: refund to zero', (['-0.02'], 'Cash '), ['0.00', '0.020']),\n  ('control: card exact', (['1.02'], 'card'), ['1.02', '0.000']),\n  ('control: twint exact', (['3.33', '4.44'], 'twint'), ['7.77', '0.000']),\n  ('control: positive tie', (['3.00', '0.025'], 'cash'), ['3.05', '0.025'])],\n [('regression refund-tie-direction 1', (['-2.075'], 'cash'), ['-2.10', '-0.025']),\n  ('regression refund-tie-direction 2', (['-1.025'], 'cash'), ['-1.05', '-0.025']),\n  ('partial repair guard 1', (['1.825'], 'CASH'), ['1.85', '0.025']),\n  ('partial repair guard 2', (['-0.625'], 'cash'), ['-0.65', '-0.025']),\n  ('control: positive tie', (['3.00', '0.025'], 'cash'), ['3.05', '0.025']),\n  ('control: voucher exact', (['7.07'], 'voucher'), ['7.07', '0.000']),\n  ('control: mixed basket', (['12.40', '-3.12', '0.99'], ' CASH'), ['10.25', '-0.020']),\n  ('control: round down', (['1.02', '1.00'], 'cash'), ['2.00', '-0.020'])],\n [('regression refund-tie-direction 1', (['-0.075'], 'cash'), ['-0.10', '-0.025']),\n  ('regression refund-tie-direction 2', (['-0.625'], 'cash'), ['-0.65', '-0.025']),\n  ('partial repair guard 1', (['22.51', '1.915'], 'Cash'), ['24.45', '0.025']),\n  ('partial repair guard 2', (['8.51', '22.58', '28.67', '0.565'], 'Cash'), ['60.35', '0.025']),\n  ('control: mixed basket', (['12.40', '-3.12', '0.99'], ' CASH'), ['10.25', '-0.020']),\n  ('control: round down', (['1.02', '1.00'], 'cash'), ['2.00', '-0.020']),\n  ('control: round to franc', (['0.99', '0.03'], 'cash'), ['1.00', '-0.020']),\n  ('control: refund', (['-1.03', '-0.99'], 'cash'), ['-2.00', '0.020'])],\n [('regression refund-tie-direction 1', (['-2.075'], 'cash'), ['-2.10', '-0.025']),\n  ('regression refund-tie-direction 2', (['-1.025'], 'cash'), ['-1.05', '-0.025']),\n  ('partial repair guard 1', (['3.51', '-0.375', '11.09'], 'Cash'), ['14.25', '0.025']),\n  ('partial repair guard 2', (['15.83', '18.48', '1.715'], 'Cash'), ['36.05', '0.025']),\n  ('control: refund', (['-1.03', '-0.99'], 'cash'), ['-2.00', '0.020']),\n  ('control: refund to zero', (['-0.02'], 'Cash '), ['0.00', '0.020']),\n  ('control: card exact', (['1.02'], 'card'), ['1.02', '0.000']),\n  ('control: twint exact', (['3.33', '4.44'], 'twint'), ['7.77', '0.000'])]]\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"},"fixed":{"sha256":"b62b35ddd422334e28b3e8ef6add6536bbd45e280d3257161cf1a830820fef6f","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(lines, tender):\n    def cash(v):\n        return (v / Decimal('0.05')).quantize(Decimal(1), rounding=ROUND_HALF_UP) * Decimal('0.05')\n    def z(d, e):\n        d = d.quantize(Decimal(1).scaleb(-e), rounding=ROUND_HALF_UP)\n        return format(abs(d) if d == 0 else d, 'f')\n    exact = sum((Decimal(l) for l in lines), Decimal('0.000'))\n    if tender.strip().lower() == 'cash':\n        r = cash(exact)\n    else:\n        r = exact.quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)\n    return [z(r, 2), z(r - exact, 3)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ncases = [[('regression refund-tie-direction 1', (['-2.075'], 'cash'), ['-2.10', '-0.025']),\n  ('regression refund-tie-direction 2', (['-1.025'], 'cash'), ['-1.05', '-0.025']),\n  ('partial repair guard 2', (['3.00', '0.025'], 'cash'), ['3.05', '0.025']),\n  ('control: round down', (['1.02', '1.00'], 'cash'), ['2.00', '-0.020']),\n  ('control: round to franc', (['0.99', '0.03'], 'cash'), ['1.00', '-0.020']),\n  ('control: refund', (['-1.03', '-0.99'], 'cash'), ['-2.00', '0.020']),\n  ('control: refund to zero', (['-0.02'], 'Cash '), ['0.00', '0.020'])],\n [('regression refund-tie-direction 1', (['-0.075'], 'cash'), ['-0.10', '-0.025']),\n  ('regression refund-tie-direction 2', (['-0.625'], 'cash'), ['-0.65', '-0.025']),\n  ('partial repair guard 1', (['7.95', '16.09', '-3.325', '23.21'], 'cash'), ['43.95', '0.025']),\n  ('partial repair guard 2', (['-0.46', '-0.885', '26.47'], 'CASH'), ['25.15', '0.025']),\n  ('control: refund to zero', (['-0.02'], 'Cash '), ['0.00', '0.020']),\n  ('control: card exact', (['1.02'], 'card'), ['1.02', '0.000']),\n  ('control: twint exact', (['3.33', '4.44'], 'twint'), ['7.77', '0.000']),\n  ('control: positive tie', (['3.00', '0.025'], 'cash'), ['3.05', '0.025'])],\n [('regression refund-tie-direction 1', (['-2.075'], 'cash'), ['-2.10', '-0.025']),\n  ('regression refund-tie-direction 2', (['-1.025'], 'cash'), ['-1.05', '-0.025']),\n  ('partial repair guard 1', (['1.825'], 'CASH'), ['1.85', '0.025']),\n  ('partial repair guard 2', (['-0.625'], 'cash'), ['-0.65', '-0.025']),\n  ('control: positive tie', (['3.00', '0.025'], 'cash'), ['3.05', '0.025']),\n  ('control: voucher exact', (['7.07'], 'voucher'), ['7.07', '0.000']),\n  ('control: mixed basket', (['12.40', '-3.12', '0.99'], ' CASH'), ['10.25', '-0.020']),\n  ('control: round down', (['1.02', '1.00'], 'cash'), ['2.00', '-0.020'])],\n [('regression refund-tie-direction 1', (['-0.075'], 'cash'), ['-0.10', '-0.025']),\n  ('regression refund-tie-direction 2', (['-0.625'], 'cash'), ['-0.65', '-0.025']),\n  ('partial repair guard 1', (['22.51', '1.915'], 'Cash'), ['24.45', '0.025']),\n  ('partial repair guard 2', (['8.51', '22.58', '28.67', '0.565'], 'Cash'), ['60.35', '0.025']),\n  ('control: mixed basket', (['12.40', '-3.12', '0.99'], ' CASH'), ['10.25', '-0.020']),\n  ('control: round down', (['1.02', '1.00'], 'cash'), ['2.00', '-0.020']),\n  ('control: round to franc', (['0.99', '0.03'], 'cash'), ['1.00', '-0.020']),\n  ('control: refund', (['-1.03', '-0.99'], 'cash'), ['-2.00', '0.020'])],\n [('regression refund-tie-direction 1', (['-2.075'], 'cash'), ['-2.10', '-0.025']),\n  ('regression refund-tie-direction 2', (['-1.025'], 'cash'), ['-1.05', '-0.025']),\n  ('partial repair guard 1', (['3.51', '-0.375', '11.09'], 'Cash'), ['14.25', '0.025']),\n  ('partial repair guard 2', (['15.83', '18.48', '1.715'], 'Cash'), ['36.05', '0.025']),\n  ('control: refund', (['-1.03', '-0.99'], 'cash'), ['-2.00', '0.020']),\n  ('control: refund to zero', (['-0.02'], 'Cash '), ['0.00', '0.020']),\n  ('control: card exact', (['1.02'], 'card'), ['1.02', '0.000']),\n  ('control: twint exact', (['3.33', '4.44'], 'twint'), ['7.77', '0.000'])]]\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-swiss-cash-rounding-refund-tie-direction","generated_at":"2026-09-29T14:47:00.699446+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.","repair":"Round ties away from zero for both sales and refunds.","root_cause":"Rounding adds one half and floors, which is not symmetric for negative totals.","sha256":"7fcbb56d04f1acc058034d7f32b7a9fbb5d179cb11edeb5da96eef658f72d6f3","title":"A 5-rappen tie on a cash refund rounds toward positive infinity · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":44.971,"exit_code":1,"observations":[{"actual":["-2.10","-0.025"],"check":"regression refund-tie-direction 1","expected":["-2.10","-0.025"],"passed":true},{"actual":["-1.00","0.025"],"check":"regression refund-tie-direction 2","expected":["-1.05","-0.025"],"passed":false},{"actual":["3.00","-0.025"],"check":"partial repair guard 2","expected":["3.05","0.025"],"passed":false},{"actual":["2.00","-0.020"],"check":"control: round down","expected":["2.00","-0.020"],"passed":true},{"actual":["1.00","-0.020"],"check":"control: round to franc","expected":["1.00","-0.020"],"passed":true},{"actual":["-2.00","0.020"],"check":"control: refund","expected":["-2.00","0.020"],"passed":true},{"actual":["0.00","0.020"],"check":"control: refund to zero","expected":["0.00","0.020"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression refund-tie-direction 1\", \"actual\": [\"-2.10\", \"-0.025\"], \"expected\": [\"-2.10\", \"-0.025\"], \"passed\": true}, {\"check\": \"regression refund-tie-direction 2\", \"actual\": [\"-1.00\", \"0.025\"], \"expected\": [\"-1.05\", \"-0.025\"], \"passed\": false}, {\"check\": \"partial repair guard 2\", \"actual\": [\"3.00\", \"-0.025\"], \"expected\": [\"3.05\", \"0.025\"], \"passed\": false}, {\"check\": \"control: round down\", \"actual\": [\"2.00\", \"-0.020\"], \"expected\": [\"2.00\", \"-0.020\"], \"passed\": true}, {\"check\": \"control: round to franc\", \"actual\": [\"1.00\", \"-0.020\"], \"expected\": [\"1.00\", \"-0.020\"], \"passed\": true}, {\"check\": \"control: refund\", \"actual\": [\"-2.00\", \"0.020\"], \"expected\": [\"-2.00\", \"0.020\"], \"passed\": true}, {\"check\": \"control: refund to zero\", \"actual\": [\"0.00\", \"0.020\"], \"expected\": [\"0.00\", \"0.020\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.17,"exit_code":1,"observations":[{"actual":["-2.05","0.025"],"check":"regression refund-tie-direction 1","expected":["-2.10","-0.025"],"passed":false},{"actual":["-1.00","0.025"],"check":"regression refund-tie-direction 2","expected":["-1.05","-0.025"],"passed":false},{"actual":["3.05","0.025"],"check":"partial repair guard 2","expected":["3.05","0.025"],"passed":true},{"actual":["2.00","-0.020"],"check":"control: round down","expected":["2.00","-0.020"],"passed":true},{"actual":["1.00","-0.020"],"check":"control: round to franc","expected":["1.00","-0.020"],"passed":true},{"actual":["-2.00","0.020"],"check":"control: refund","expected":["-2.00","0.020"],"passed":true},{"actual":["0.00","0.020"],"check":"control: refund to zero","expected":["0.00","0.020"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression refund-tie-direction 1\", \"actual\": [\"-2.05\", \"0.025\"], \"expected\": [\"-2.10\", \"-0.025\"], \"passed\": false}, {\"check\": \"regression refund-tie-direction 2\", \"actual\": [\"-1.00\", \"0.025\"], \"expected\": [\"-1.05\", \"-0.025\"], \"passed\": false}, {\"check\": \"partial repair guard 2\", \"actual\": [\"3.05\", \"0.025\"], \"expected\": [\"3.05\", \"0.025\"], \"passed\": true}, {\"check\": \"control: round down\", \"actual\": [\"2.00\", \"-0.020\"], \"expected\": [\"2.00\", \"-0.020\"], \"passed\": true}, {\"check\": \"control: round to franc\", \"actual\": [\"1.00\", \"-0.020\"], \"expected\": [\"1.00\", \"-0.020\"], \"passed\": true}, {\"check\": \"control: refund\", \"actual\": [\"-2.00\", \"0.020\"], \"expected\": [\"-2.00\", \"0.020\"], \"passed\": true}, {\"check\": \"control: refund to zero\", \"actual\": [\"0.00\", \"0.020\"], \"expected\": [\"0.00\", \"0.020\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":43.231,"exit_code":0,"observations":[{"actual":["-2.10","-0.025"],"check":"regression refund-tie-direction 1","expected":["-2.10","-0.025"],"passed":true},{"actual":["-1.05","-0.025"],"check":"regression refund-tie-direction 2","expected":["-1.05","-0.025"],"passed":true},{"actual":["3.05","0.025"],"check":"partial repair guard 2","expected":["3.05","0.025"],"passed":true},{"actual":["2.00","-0.020"],"check":"control: round down","expected":["2.00","-0.020"],"passed":true},{"actual":["1.00","-0.020"],"check":"control: round to franc","expected":["1.00","-0.020"],"passed":true},{"actual":["-2.00","0.020"],"check":"control: refund","expected":["-2.00","0.020"],"passed":true},{"actual":["0.00","0.020"],"check":"control: refund to zero","expected":["0.00","0.020"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression refund-tie-direction 1\", \"actual\": [\"-2.10\", \"-0.025\"], \"expected\": [\"-2.10\", \"-0.025\"], \"passed\": true}, {\"check\": \"regression refund-tie-direction 2\", \"actual\": [\"-1.05\", \"-0.025\"], \"expected\": [\"-1.05\", \"-0.025\"], \"passed\": true}, {\"check\": \"partial repair guard 2\", \"actual\": [\"3.05\", \"0.025\"], \"expected\": [\"3.05\", \"0.025\"], \"passed\": true}, {\"check\": \"control: round down\", \"actual\": [\"2.00\", \"-0.020\"], \"expected\": [\"2.00\", \"-0.020\"], \"passed\": true}, {\"check\": \"control: round to franc\", \"actual\": [\"1.00\", \"-0.020\"], \"expected\": [\"1.00\", \"-0.020\"], \"passed\": true}, {\"check\": \"control: refund\", \"actual\": [\"-2.00\", \"0.020\"], \"expected\": [\"-2.00\", \"0.020\"], \"passed\": true}, {\"check\": \"control: refund to zero\", \"actual\": [\"0.00\", \"0.020\"], \"expected\": [\"0.00\", \"0.020\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}