{"abstract":"Amounts like 12.05 display as 12.5.","category":"Subscription proration billing","checks":10,"contract":"Input {price (signed minor units), currency, num, den}. Exponents: USD 2, EUR 2, JPY 0, KWD 3, CLP 0. Amount = price*num/den rounded half away from zero. Display: zero-exponent currencies show an integer; others show sign, major units, a dot and exactly exponent digits, then a space and the code. Return {minor, display}.","evaluation_group":"w2-subscription-proration-currency-minor-units","failed_approach":"The attempt pads to two digits for every currency, misprinting three-decimal dinars.","family":"w2-subscription-proration-currency-minor-units-fraction-zero-padding","id":"FA-59511","implementations":{"attempt":{"sha256":"461d2b5bbc642e9db34f338ff7c532cc3e1366b87ca502f63395c67ef060940f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    exp = {'USD': 2, 'EUR': 2, 'JPY': 0, 'KWD': 3, 'CLP': 0}[x['currency']]\n    n = x['price'] * x['num']\n    v = (abs(n) * 2 + x['den']) // (2 * x['den'])\n    v = v if n >= 0 else -v\n    if exp == 0:\n        disp = str(v)\n    else:\n        sign = '-' if v < 0 else ''\n        q, r = divmod(abs(v), 10 ** exp)\n        disp = '%s%d.%02d' % (sign, q, r)\n    return {'minor': v, 'display': disp + ' ' + x['currency']}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression (boundary)', {'price': -7, 'currency': 'KWD', 'num': 1, 'den': 2}, {'minor': -4, 'display': '-0.004 KWD'}), ('regression (boundary)', {'price': -3, 'currency': 'USD', 'num': 1, 'den': 2}, {'minor': -2, 'display': '-0.02 USD'}), ('partial-repair probe', {'price': -35, 'currency': 'KWD', 'num': 30, 'den': 30}, {'minor': -35, 'display': '-0.035 KWD'}), ('partial-repair probe', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': -6310, 'currency': 'EUR', 'num': 23, 'den': 31}, {'minor': -4682, 'display': '-46.82 EUR'}), ('normal control', {'price': 63, 'currency': 'JPY', 'num': 925, 'den': 1000}, {'minor': 58, 'display': '58 JPY'}), ('normal control', {'price': 59, 'currency': 'JPY', 'num': 2, 'den': 4}, {'minor': 30, 'display': '30 JPY'}), ('normal control', {'price': -18, 'currency': 'JPY', 'num': 81, 'den': 365}, {'minor': -4, 'display': '-4 JPY'})], [('regression', {'price': -35, 'currency': 'KWD', 'num': 30, 'den': 30}, {'minor': -35, 'display': '-0.035 KWD'}), ('regression (boundary)', {'price': -7, 'currency': 'KWD', 'num': 1, 'den': 2}, {'minor': -4, 'display': '-0.004 KWD'}), ('partial-repair probe', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('partial-repair probe', {'price': -88, 'currency': 'KWD', 'num': 15, 'den': 31}, {'minor': -43, 'display': '-0.043 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': -48, 'currency': 'JPY', 'num': 0, 'den': 4}, {'minor': 0, 'display': '0 JPY'}), ('normal control', {'price': -51, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -26, 'display': '-0.26 EUR'}), ('normal control', {'price': -79, 'currency': 'JPY', 'num': 200, 'den': 365}, {'minor': -43, 'display': '-43 JPY'}), ('normal control', {'price': -20, 'currency': 'USD', 'num': 1, 'den': 2}, {'minor': -10, 'display': '-0.10 USD'})], [('regression', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('regression', {'price': -35, 'currency': 'KWD', 'num': 30, 'den': 30}, {'minor': -35, 'display': '-0.035 KWD'}), ('partial-repair probe', {'price': -74, 'currency': 'KWD', 'num': 111, 'den': 365}, {'minor': -23, 'display': '-0.023 KWD'}), ('partial-repair probe', {'price': 96, 'currency': 'KWD', 'num': 19, 'den': 31}, {'minor': 59, 'display': '0.059 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': 464209, 'currency': 'EUR', 'num': 10, 'den': 30}, {'minor': 154736, 'display': '1547.36 EUR'}), ('normal control', {'price': 61, 'currency': 'JPY', 'num': 50, 'den': 365}, {'minor': 8, 'display': '8 JPY'}), ('normal control', {'price': 675691, 'currency': 'KWD', 'num': 214, 'den': 365}, {'minor': 396159, 'display': '396.159 KWD'}), ('normal control', {'price': -28, 'currency': 'EUR', 'num': 30, 'den': 30}, {'minor': -28, 'display': '-0.28 EUR'})], [('regression', {'price': -88, 'currency': 'KWD', 'num': 15, 'den': 31}, {'minor': -43, 'display': '-0.043 KWD'}), ('regression', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('partial-repair probe', {'price': 79, 'currency': 'KWD', 'num': 2, 'den': 2}, {'minor': 79, 'display': '0.079 KWD'}), ('partial-repair probe', {'price': -147, 'currency': 'KWD', 'num': 546, 'den': 1000}, {'minor': -80, 'display': '-0.080 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': 95, 'currency': 'USD', 'num': 25, 'den': 30}, {'minor': 79, 'display': '0.79 USD'}), ('normal control', {'price': 553663, 'currency': 'USD', 'num': 138, 'den': 365}, {'minor': 209330, 'display': '2093.30 USD'}), ('normal control', {'price': 21, 'currency': 'JPY', 'num': 3, 'den': 30}, {'minor': 2, 'display': '2 JPY'}), ('normal control', {'price': 127, 'currency': 'JPY', 'num': 0, 'den': 2}, {'minor': 0, 'display': '0 JPY'})], [('regression', {'price': -74, 'currency': 'KWD', 'num': 111, 'den': 365}, {'minor': -23, 'display': '-0.023 KWD'}), ('regression', {'price': -88, 'currency': 'KWD', 'num': 15, 'den': 31}, {'minor': -43, 'display': '-0.043 KWD'}), ('partial-repair probe', {'price': 48, 'currency': 'KWD', 'num': 269, 'den': 1000}, {'minor': 13, 'display': '0.013 KWD'}), ('partial-repair probe', {'price': 140, 'currency': 'KWD', 'num': 661, 'den': 1000}, {'minor': 93, 'display': '0.093 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': 248141, 'currency': 'EUR', 'num': 187, 'den': 365}, {'minor': 127130, 'display': '1271.30 EUR'}), ('normal control', {'price': -70, 'currency': 'JPY', 'num': 209, 'den': 365}, {'minor': -40, 'display': '-40 JPY'}), ('normal control', {'price': 26512, 'currency': 'USD', 'num': 248, 'den': 365}, {'minor': 18014, 'display': '180.14 USD'}), ('normal control', {'price': -927642, 'currency': 'KWD', 'num': 9, 'den': 31}, {'minor': -269315, 'display': '-269.315 KWD'})]]\nfor i, (label, args, expected) in enumerate(fixtures[N-1]):\n    check(\"%s %d\" % (label, 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":"c08270190b8738b169d9ca51ea6c879f768e5e84a1df14047e7c5874833cfc21","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    exp = {'USD': 2, 'EUR': 2, 'JPY': 0, 'KWD': 3, 'CLP': 0}[x['currency']]\n    n = x['price'] * x['num']\n    v = (abs(n) * 2 + x['den']) // (2 * x['den'])\n    v = v if n >= 0 else -v\n    if exp == 0:\n        disp = str(v)\n    else:\n        sign = '-' if v < 0 else ''\n        q, r = divmod(abs(v), 10 ** exp)\n        disp = '%s%d.%d' % (sign, q, r)\n    return {'minor': v, 'display': disp + ' ' + x['currency']}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression (boundary)', {'price': -7, 'currency': 'KWD', 'num': 1, 'den': 2}, {'minor': -4, 'display': '-0.004 KWD'}), ('regression (boundary)', {'price': -3, 'currency': 'USD', 'num': 1, 'den': 2}, {'minor': -2, 'display': '-0.02 USD'}), ('partial-repair probe', {'price': -35, 'currency': 'KWD', 'num': 30, 'den': 30}, {'minor': -35, 'display': '-0.035 KWD'}), ('partial-repair probe', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': -6310, 'currency': 'EUR', 'num': 23, 'den': 31}, {'minor': -4682, 'display': '-46.82 EUR'}), ('normal control', {'price': 63, 'currency': 'JPY', 'num': 925, 'den': 1000}, {'minor': 58, 'display': '58 JPY'}), ('normal control', {'price': 59, 'currency': 'JPY', 'num': 2, 'den': 4}, {'minor': 30, 'display': '30 JPY'}), ('normal control', {'price': -18, 'currency': 'JPY', 'num': 81, 'den': 365}, {'minor': -4, 'display': '-4 JPY'})], [('regression', {'price': -35, 'currency': 'KWD', 'num': 30, 'den': 30}, {'minor': -35, 'display': '-0.035 KWD'}), ('regression (boundary)', {'price': -7, 'currency': 'KWD', 'num': 1, 'den': 2}, {'minor': -4, 'display': '-0.004 KWD'}), ('partial-repair probe', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('partial-repair probe', {'price': -88, 'currency': 'KWD', 'num': 15, 'den': 31}, {'minor': -43, 'display': '-0.043 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': -48, 'currency': 'JPY', 'num': 0, 'den': 4}, {'minor': 0, 'display': '0 JPY'}), ('normal control', {'price': -51, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -26, 'display': '-0.26 EUR'}), ('normal control', {'price': -79, 'currency': 'JPY', 'num': 200, 'den': 365}, {'minor': -43, 'display': '-43 JPY'}), ('normal control', {'price': -20, 'currency': 'USD', 'num': 1, 'den': 2}, {'minor': -10, 'display': '-0.10 USD'})], [('regression', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('regression', {'price': -35, 'currency': 'KWD', 'num': 30, 'den': 30}, {'minor': -35, 'display': '-0.035 KWD'}), ('partial-repair probe', {'price': -74, 'currency': 'KWD', 'num': 111, 'den': 365}, {'minor': -23, 'display': '-0.023 KWD'}), ('partial-repair probe', {'price': 96, 'currency': 'KWD', 'num': 19, 'den': 31}, {'minor': 59, 'display': '0.059 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': 464209, 'currency': 'EUR', 'num': 10, 'den': 30}, {'minor': 154736, 'display': '1547.36 EUR'}), ('normal control', {'price': 61, 'currency': 'JPY', 'num': 50, 'den': 365}, {'minor': 8, 'display': '8 JPY'}), ('normal control', {'price': 675691, 'currency': 'KWD', 'num': 214, 'den': 365}, {'minor': 396159, 'display': '396.159 KWD'}), ('normal control', {'price': -28, 'currency': 'EUR', 'num': 30, 'den': 30}, {'minor': -28, 'display': '-0.28 EUR'})], [('regression', {'price': -88, 'currency': 'KWD', 'num': 15, 'den': 31}, {'minor': -43, 'display': '-0.043 KWD'}), ('regression', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('partial-repair probe', {'price': 79, 'currency': 'KWD', 'num': 2, 'den': 2}, {'minor': 79, 'display': '0.079 KWD'}), ('partial-repair probe', {'price': -147, 'currency': 'KWD', 'num': 546, 'den': 1000}, {'minor': -80, 'display': '-0.080 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': 95, 'currency': 'USD', 'num': 25, 'den': 30}, {'minor': 79, 'display': '0.79 USD'}), ('normal control', {'price': 553663, 'currency': 'USD', 'num': 138, 'den': 365}, {'minor': 209330, 'display': '2093.30 USD'}), ('normal control', {'price': 21, 'currency': 'JPY', 'num': 3, 'den': 30}, {'minor': 2, 'display': '2 JPY'}), ('normal control', {'price': 127, 'currency': 'JPY', 'num': 0, 'den': 2}, {'minor': 0, 'display': '0 JPY'})], [('regression', {'price': -74, 'currency': 'KWD', 'num': 111, 'den': 365}, {'minor': -23, 'display': '-0.023 KWD'}), ('regression', {'price': -88, 'currency': 'KWD', 'num': 15, 'den': 31}, {'minor': -43, 'display': '-0.043 KWD'}), ('partial-repair probe', {'price': 48, 'currency': 'KWD', 'num': 269, 'den': 1000}, {'minor': 13, 'display': '0.013 KWD'}), ('partial-repair probe', {'price': 140, 'currency': 'KWD', 'num': 661, 'den': 1000}, {'minor': 93, 'display': '0.093 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': 248141, 'currency': 'EUR', 'num': 187, 'den': 365}, {'minor': 127130, 'display': '1271.30 EUR'}), ('normal control', {'price': -70, 'currency': 'JPY', 'num': 209, 'den': 365}, {'minor': -40, 'display': '-40 JPY'}), ('normal control', {'price': 26512, 'currency': 'USD', 'num': 248, 'den': 365}, {'minor': 18014, 'display': '180.14 USD'}), ('normal control', {'price': -927642, 'currency': 'KWD', 'num': 9, 'den': 31}, {'minor': -269315, 'display': '-269.315 KWD'})]]\nfor i, (label, args, expected) in enumerate(fixtures[N-1]):\n    check(\"%s %d\" % (label, 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":"64604ba84aa4c1b221e068417dcf3594c62f3aa695499ffcc9bf55f3810f2fdf","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    exp = {'USD': 2, 'EUR': 2, 'JPY': 0, 'KWD': 3, 'CLP': 0}[x['currency']]\n    n = x['price'] * x['num']\n    v = (abs(n) * 2 + x['den']) // (2 * x['den'])\n    v = v if n >= 0 else -v\n    if exp == 0:\n        disp = str(v)\n    else:\n        sign = '-' if v < 0 else ''\n        q, r = divmod(abs(v), 10 ** exp)\n        disp = '%s%d.%0*d' % (sign, q, exp, r)\n    return {'minor': v, 'display': disp + ' ' + x['currency']}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression (boundary)', {'price': -7, 'currency': 'KWD', 'num': 1, 'den': 2}, {'minor': -4, 'display': '-0.004 KWD'}), ('regression (boundary)', {'price': -3, 'currency': 'USD', 'num': 1, 'den': 2}, {'minor': -2, 'display': '-0.02 USD'}), ('partial-repair probe', {'price': -35, 'currency': 'KWD', 'num': 30, 'den': 30}, {'minor': -35, 'display': '-0.035 KWD'}), ('partial-repair probe', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': -6310, 'currency': 'EUR', 'num': 23, 'den': 31}, {'minor': -4682, 'display': '-46.82 EUR'}), ('normal control', {'price': 63, 'currency': 'JPY', 'num': 925, 'den': 1000}, {'minor': 58, 'display': '58 JPY'}), ('normal control', {'price': 59, 'currency': 'JPY', 'num': 2, 'den': 4}, {'minor': 30, 'display': '30 JPY'}), ('normal control', {'price': -18, 'currency': 'JPY', 'num': 81, 'den': 365}, {'minor': -4, 'display': '-4 JPY'})], [('regression', {'price': -35, 'currency': 'KWD', 'num': 30, 'den': 30}, {'minor': -35, 'display': '-0.035 KWD'}), ('regression (boundary)', {'price': -7, 'currency': 'KWD', 'num': 1, 'den': 2}, {'minor': -4, 'display': '-0.004 KWD'}), ('partial-repair probe', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('partial-repair probe', {'price': -88, 'currency': 'KWD', 'num': 15, 'den': 31}, {'minor': -43, 'display': '-0.043 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': -48, 'currency': 'JPY', 'num': 0, 'den': 4}, {'minor': 0, 'display': '0 JPY'}), ('normal control', {'price': -51, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -26, 'display': '-0.26 EUR'}), ('normal control', {'price': -79, 'currency': 'JPY', 'num': 200, 'den': 365}, {'minor': -43, 'display': '-43 JPY'}), ('normal control', {'price': -20, 'currency': 'USD', 'num': 1, 'den': 2}, {'minor': -10, 'display': '-0.10 USD'})], [('regression', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('regression', {'price': -35, 'currency': 'KWD', 'num': 30, 'den': 30}, {'minor': -35, 'display': '-0.035 KWD'}), ('partial-repair probe', {'price': -74, 'currency': 'KWD', 'num': 111, 'den': 365}, {'minor': -23, 'display': '-0.023 KWD'}), ('partial-repair probe', {'price': 96, 'currency': 'KWD', 'num': 19, 'den': 31}, {'minor': 59, 'display': '0.059 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': 464209, 'currency': 'EUR', 'num': 10, 'den': 30}, {'minor': 154736, 'display': '1547.36 EUR'}), ('normal control', {'price': 61, 'currency': 'JPY', 'num': 50, 'den': 365}, {'minor': 8, 'display': '8 JPY'}), ('normal control', {'price': 675691, 'currency': 'KWD', 'num': 214, 'den': 365}, {'minor': 396159, 'display': '396.159 KWD'}), ('normal control', {'price': -28, 'currency': 'EUR', 'num': 30, 'den': 30}, {'minor': -28, 'display': '-0.28 EUR'})], [('regression', {'price': -88, 'currency': 'KWD', 'num': 15, 'den': 31}, {'minor': -43, 'display': '-0.043 KWD'}), ('regression', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('partial-repair probe', {'price': 79, 'currency': 'KWD', 'num': 2, 'den': 2}, {'minor': 79, 'display': '0.079 KWD'}), ('partial-repair probe', {'price': -147, 'currency': 'KWD', 'num': 546, 'den': 1000}, {'minor': -80, 'display': '-0.080 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': 95, 'currency': 'USD', 'num': 25, 'den': 30}, {'minor': 79, 'display': '0.79 USD'}), ('normal control', {'price': 553663, 'currency': 'USD', 'num': 138, 'den': 365}, {'minor': 209330, 'display': '2093.30 USD'}), ('normal control', {'price': 21, 'currency': 'JPY', 'num': 3, 'den': 30}, {'minor': 2, 'display': '2 JPY'}), ('normal control', {'price': 127, 'currency': 'JPY', 'num': 0, 'den': 2}, {'minor': 0, 'display': '0 JPY'})], [('regression', {'price': -74, 'currency': 'KWD', 'num': 111, 'den': 365}, {'minor': -23, 'display': '-0.023 KWD'}), ('regression', {'price': -88, 'currency': 'KWD', 'num': 15, 'den': 31}, {'minor': -43, 'display': '-0.043 KWD'}), ('partial-repair probe', {'price': 48, 'currency': 'KWD', 'num': 269, 'den': 1000}, {'minor': 13, 'display': '0.013 KWD'}), ('partial-repair probe', {'price': 140, 'currency': 'KWD', 'num': 661, 'den': 1000}, {'minor': 93, 'display': '0.093 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': 248141, 'currency': 'EUR', 'num': 187, 'den': 365}, {'minor': 127130, 'display': '1271.30 EUR'}), ('normal control', {'price': -70, 'currency': 'JPY', 'num': 209, 'den': 365}, {'minor': -40, 'display': '-40 JPY'}), ('normal control', {'price': 26512, 'currency': 'USD', 'num': 248, 'den': 365}, {'minor': 18014, 'display': '180.14 USD'}), ('normal control', {'price': -927642, 'currency': 'KWD', 'num': 9, 'den': 31}, {'minor': -269315, 'display': '-269.315 KWD'})]]\nfor i, (label, args, expected) in enumerate(fixtures[N-1]):\n    check(\"%s %d\" % (label, 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 teaching model of a stipulated billing rule. It makes no claim to reproduce any billing provider's exact behaviour and is not billing software. 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-subscription-proration-currency-minor-units-fraction-zero-padding","generated_at":"2026-09-29T14:46:36.958236+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Prorated amounts must round and render in each currency's own minor-unit precision, including credits.","repair":"Restore the contract rule at the fraction zero padding step: use `disp = '%s%d.%0*d' % (sign, q, exp, r)`.","root_cause":"The minor-unit digits are printed without zero padding.","sha256":"e8aed62c42af76d1a26e395f6d01736bcb36057afa6938a4fb59acbe4107f61a","title":"Prorated amounts in currency minor units: fraction zero padding · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.228,"exit_code":1,"observations":[{"actual":{"display":"-0.04 KWD","minor":-4},"check":"regression (boundary) 0","expected":{"display":"-0.004 KWD","minor":-4},"passed":false},{"actual":{"display":"-0.02 USD","minor":-2},"check":"regression (boundary) 1","expected":{"display":"-0.02 USD","minor":-2},"passed":true},{"actual":{"display":"-0.35 KWD","minor":-35},"check":"partial-repair probe 2","expected":{"display":"-0.035 KWD","minor":-35},"passed":false},{"actual":{"display":"0.03 KWD","minor":3},"check":"partial-repair probe 3","expected":{"display":"0.003 KWD","minor":3},"passed":false},{"actual":{"display":"3 JPY","minor":3},"check":"boundary control 4","expected":{"display":"3 JPY","minor":3},"passed":true},{"actual":{"display":"-0.53 EUR","minor":-53},"check":"boundary control 5","expected":{"display":"-0.53 EUR","minor":-53},"passed":true},{"actual":{"display":"-46.82 EUR","minor":-4682},"check":"normal control 6","expected":{"display":"-46.82 EUR","minor":-4682},"passed":true},{"actual":{"display":"58 JPY","minor":58},"check":"normal control 7","expected":{"display":"58 JPY","minor":58},"passed":true},{"actual":{"display":"30 JPY","minor":30},"check":"normal control 8","expected":{"display":"30 JPY","minor":30},"passed":true},{"actual":{"display":"-4 JPY","minor":-4},"check":"normal control 9","expected":{"display":"-4 JPY","minor":-4},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression (boundary) 0\", \"actual\": {\"minor\": -4, \"display\": \"-0.04 KWD\"}, \"expected\": {\"minor\": -4, \"display\": \"-0.004 KWD\"}, \"passed\": false}, {\"check\": \"regression (boundary) 1\", \"actual\": {\"minor\": -2, \"display\": \"-0.02 USD\"}, \"expected\": {\"minor\": -2, \"display\": \"-0.02 USD\"}, \"passed\": true}, {\"check\": \"partial-repair probe 2\", \"actual\": {\"minor\": -35, \"display\": \"-0.35 KWD\"}, \"expected\": {\"minor\": -35, \"display\": \"-0.035 KWD\"}, \"passed\": false}, {\"check\": \"partial-repair probe 3\", \"actual\": {\"minor\": 3, \"display\": \"0.03 KWD\"}, \"expected\": {\"minor\": 3, \"display\": \"0.003 KWD\"}, \"passed\": false}, {\"check\": \"boundary control 4\", \"actual\": {\"minor\": 3, \"display\": \"3 JPY\"}, \"expected\": {\"minor\": 3, \"display\": \"3 JPY\"}, \"passed\": true}, {\"check\": \"boundary control 5\", \"actual\": {\"minor\": -53, \"display\": \"-0.53 EUR\"}, \"expected\": {\"minor\": -53, \"display\": \"-0.53 EUR\"}, \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": {\"minor\": -4682, \"display\": \"-46.82 EUR\"}, \"expected\": {\"minor\": -4682, \"display\": \"-46.82 EUR\"}, \"passed\": true}, {\"check\": \"normal control 7\", \"actual\": {\"minor\": 58, \"display\": \"58 JPY\"}, \"expected\": {\"minor\": 58, \"display\": \"58 JPY\"}, \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": {\"minor\": 30, \"display\": \"30 JPY\"}, \"expected\": {\"minor\": 30, \"display\": \"30 JPY\"}, \"passed\": true}, {\"check\": \"normal control 9\", \"actual\": {\"minor\": -4, \"display\": \"-4 JPY\"}, \"expected\": {\"minor\": -4, \"display\": \"-4 JPY\"}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.224,"exit_code":1,"observations":[{"actual":{"display":"-0.4 KWD","minor":-4},"check":"regression (boundary) 0","expected":{"display":"-0.004 KWD","minor":-4},"passed":false},{"actual":{"display":"-0.2 USD","minor":-2},"check":"regression (boundary) 1","expected":{"display":"-0.02 USD","minor":-2},"passed":false},{"actual":{"display":"-0.35 KWD","minor":-35},"check":"partial-repair probe 2","expected":{"display":"-0.035 KWD","minor":-35},"passed":false},{"actual":{"display":"0.3 KWD","minor":3},"check":"partial-repair probe 3","expected":{"display":"0.003 KWD","minor":3},"passed":false},{"actual":{"display":"3 JPY","minor":3},"check":"boundary control 4","expected":{"display":"3 JPY","minor":3},"passed":true},{"actual":{"display":"-0.53 EUR","minor":-53},"check":"boundary control 5","expected":{"display":"-0.53 EUR","minor":-53},"passed":true},{"actual":{"display":"-46.82 EUR","minor":-4682},"check":"normal control 6","expected":{"display":"-46.82 EUR","minor":-4682},"passed":true},{"actual":{"display":"58 JPY","minor":58},"check":"normal control 7","expected":{"display":"58 JPY","minor":58},"passed":true},{"actual":{"display":"30 JPY","minor":30},"check":"normal control 8","expected":{"display":"30 JPY","minor":30},"passed":true},{"actual":{"display":"-4 JPY","minor":-4},"check":"normal control 9","expected":{"display":"-4 JPY","minor":-4},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression (boundary) 0\", \"actual\": {\"minor\": -4, \"display\": \"-0.4 KWD\"}, \"expected\": {\"minor\": -4, \"display\": \"-0.004 KWD\"}, \"passed\": false}, {\"check\": \"regression (boundary) 1\", \"actual\": {\"minor\": -2, \"display\": \"-0.2 USD\"}, \"expected\": {\"minor\": -2, \"display\": \"-0.02 USD\"}, \"passed\": false}, {\"check\": \"partial-repair probe 2\", \"actual\": {\"minor\": -35, \"display\": \"-0.35 KWD\"}, \"expected\": {\"minor\": -35, \"display\": \"-0.035 KWD\"}, \"passed\": false}, {\"check\": \"partial-repair probe 3\", \"actual\": {\"minor\": 3, \"display\": \"0.3 KWD\"}, \"expected\": {\"minor\": 3, \"display\": \"0.003 KWD\"}, \"passed\": false}, {\"check\": \"boundary control 4\", \"actual\": {\"minor\": 3, \"display\": \"3 JPY\"}, \"expected\": {\"minor\": 3, \"display\": \"3 JPY\"}, \"passed\": true}, {\"check\": \"boundary control 5\", \"actual\": {\"minor\": -53, \"display\": \"-0.53 EUR\"}, \"expected\": {\"minor\": -53, \"display\": \"-0.53 EUR\"}, \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": {\"minor\": -4682, \"display\": \"-46.82 EUR\"}, \"expected\": {\"minor\": -4682, \"display\": \"-46.82 EUR\"}, \"passed\": true}, {\"check\": \"normal control 7\", \"actual\": {\"minor\": 58, \"display\": \"58 JPY\"}, \"expected\": {\"minor\": 58, \"display\": \"58 JPY\"}, \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": {\"minor\": 30, \"display\": \"30 JPY\"}, \"expected\": {\"minor\": 30, \"display\": \"30 JPY\"}, \"passed\": true}, {\"check\": \"normal control 9\", \"actual\": {\"minor\": -4, \"display\": \"-4 JPY\"}, \"expected\": {\"minor\": -4, \"display\": \"-4 JPY\"}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.314,"exit_code":0,"observations":[{"actual":{"display":"-0.004 KWD","minor":-4},"check":"regression (boundary) 0","expected":{"display":"-0.004 KWD","minor":-4},"passed":true},{"actual":{"display":"-0.02 USD","minor":-2},"check":"regression (boundary) 1","expected":{"display":"-0.02 USD","minor":-2},"passed":true},{"actual":{"display":"-0.035 KWD","minor":-35},"check":"partial-repair probe 2","expected":{"display":"-0.035 KWD","minor":-35},"passed":true},{"actual":{"display":"0.003 KWD","minor":3},"check":"partial-repair probe 3","expected":{"display":"0.003 KWD","minor":3},"passed":true},{"actual":{"display":"3 JPY","minor":3},"check":"boundary control 4","expected":{"display":"3 JPY","minor":3},"passed":true},{"actual":{"display":"-0.53 EUR","minor":-53},"check":"boundary control 5","expected":{"display":"-0.53 EUR","minor":-53},"passed":true},{"actual":{"display":"-46.82 EUR","minor":-4682},"check":"normal control 6","expected":{"display":"-46.82 EUR","minor":-4682},"passed":true},{"actual":{"display":"58 JPY","minor":58},"check":"normal control 7","expected":{"display":"58 JPY","minor":58},"passed":true},{"actual":{"display":"30 JPY","minor":30},"check":"normal control 8","expected":{"display":"30 JPY","minor":30},"passed":true},{"actual":{"display":"-4 JPY","minor":-4},"check":"normal control 9","expected":{"display":"-4 JPY","minor":-4},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression (boundary) 0\", \"actual\": {\"minor\": -4, \"display\": \"-0.004 KWD\"}, \"expected\": {\"minor\": -4, \"display\": \"-0.004 KWD\"}, \"passed\": true}, {\"check\": \"regression (boundary) 1\", \"actual\": {\"minor\": -2, \"display\": \"-0.02 USD\"}, \"expected\": {\"minor\": -2, \"display\": \"-0.02 USD\"}, \"passed\": true}, {\"check\": \"partial-repair probe 2\", \"actual\": {\"minor\": -35, \"display\": \"-0.035 KWD\"}, \"expected\": {\"minor\": -35, \"display\": \"-0.035 KWD\"}, \"passed\": true}, {\"check\": \"partial-repair probe 3\", \"actual\": {\"minor\": 3, \"display\": \"0.003 KWD\"}, \"expected\": {\"minor\": 3, \"display\": \"0.003 KWD\"}, \"passed\": true}, {\"check\": \"boundary control 4\", \"actual\": {\"minor\": 3, \"display\": \"3 JPY\"}, \"expected\": {\"minor\": 3, \"display\": \"3 JPY\"}, \"passed\": true}, {\"check\": \"boundary control 5\", \"actual\": {\"minor\": -53, \"display\": \"-0.53 EUR\"}, \"expected\": {\"minor\": -53, \"display\": \"-0.53 EUR\"}, \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": {\"minor\": -4682, \"display\": \"-46.82 EUR\"}, \"expected\": {\"minor\": -4682, \"display\": \"-46.82 EUR\"}, \"passed\": true}, {\"check\": \"normal control 7\", \"actual\": {\"minor\": 58, \"display\": \"58 JPY\"}, \"expected\": {\"minor\": 58, \"display\": \"58 JPY\"}, \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": {\"minor\": 30, \"display\": \"30 JPY\"}, \"expected\": {\"minor\": 30, \"display\": \"30 JPY\"}, \"passed\": true}, {\"check\": \"normal control 9\", \"actual\": {\"minor\": -4, \"display\": \"-4 JPY\"}, \"expected\": {\"minor\": -4, \"display\": \"-4 JPY\"}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}