{"abstract":"Bonus payouts include a percentage of the stake.","category":"Betting odds conversion","checks":7,"contract":"Winning accumulator bonus. Every leg price multiplies the accumulator. Legs priced at 1.20 or more qualify; the bonus percentage by qualifying count is {3: 5, 4: 10, 5: 15, 6: 20, 7: 25} with 7 or more paying 25 and fewer than 3 paying 0. The bonus is applied to the profit only: return = stake + profit * (100 + pct) / 100, rounded down. Return [qualifying legs, bonus pct, return cents].","contract_signature":"prices, stake_cents","evaluation_group":"w2-odds-conversion-accumulator-bonus","failed_approach":"Adding a percentage of the stake is not a winnings bonus.","family":"w2-odds-conversion-accumulator-bonus-bonus-base","id":"FA-84796","implementations":{"attempt":{"sha256":"73cc7ffa15299ad9dd30e25a60e74067dbf21fe5282bbd19bb42b704dcfe8086","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(prices, stake_cents):\n    TABLE = {3: 5, 4: 10, 5: 15, 6: 20, 7: 25}\n    factor = Fraction(1)\n    q = 0\n    for p in prices:\n        d = Fraction(p)\n        factor *= d\n        if d >= Fraction(120, 100):\n            q += 1\n    pct = TABLE.get(min(q, 7), 0)\n    profit = stake_cents * (factor - 1)\n    return [q, pct, math.floor(stake_cents + profit + stake_cents * pct / Fraction(100))]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ndef run(args):\n    try:\n        return solve(*args)\n    except Exception as exc:\n        return 'raised ' + type(exc).__name__\ncases = [[('control treble', (['2.00', '2.00', '2.00'], 100), [3, 5, 835]),\n  ('boundary minimum odds leg', (['1.20', '2.00', '2.00'], 100), [3, 5, 499]),\n  ('boundary short leg does not qualify', (['1.19', '2.00', '2.00'], 100), [2, 0, 476]),\n  ('boundary eight legs capped',\n   (['1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50'], 100),\n   [8, 25, 3178]),\n  ('regression: bonus base',\n   (['1.15', '1.15', '1.07', '1.66', '1.15', '1.15', '2.23', '1.69', '1.25'], 1000),\n   [4, 10, 15998]),\n  ('variant scenario 1',\n   (['1.50', '1.19', '1.33', '1.30', '1.19', '1.19', '1.19', '1.19', '1.19'], 500),\n   [3, 5, 3841]),\n  ('variant scenario 2',\n   (['1.20', '1.33', '1.15', '1.20', '1.60', '1.15', '1.37', '1.72'], 500),\n   [6, 20, 5629])],\n [('control treble', (['2.00', '2.00', '2.00'], 100), [3, 5, 835]),\n  ('boundary minimum odds leg', (['1.20', '2.00', '2.00'], 100), [3, 5, 499]),\n  ('boundary short leg does not qualify', (['1.19', '2.00', '2.00'], 100), [2, 0, 476]),\n  ('boundary eight legs capped',\n   (['1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50'], 100),\n   [8, 25, 3178]),\n  ('regression: bonus base',\n   (['1.20', '1.25', '1.25', '1.25', '1.56', '1.15', '1.19', '2.16'], 100),\n   [6, 20, 1276]),\n  ('variant scenario 1', (['1.52', '1.25', '1.20', '1.25'], 100), [4, 10, 303]),\n  ('variant scenario 2', (['1.15', '1.19', '1.19', '2.36'], 100), [1, 0, 384])],\n [('control treble', (['2.00', '2.00', '2.00'], 100), [3, 5, 835]),\n  ('boundary minimum odds leg', (['1.20', '2.00', '2.00'], 100), [3, 5, 499]),\n  ('boundary short leg does not qualify', (['1.19', '2.00', '2.00'], 100), [2, 0, 476]),\n  ('boundary eight legs capped',\n   (['1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50'], 100),\n   [8, 25, 3178]),\n  ('regression: bonus base',\n   (['2.25', '2.49', '1.25', '2.47', '1.15', '1.20'], 100),\n   [5, 15, 2730]),\n  ('variant scenario 1', (['1.15', '1.19', '1.15'], 100), [0, 0, 157]),\n  ('variant scenario 2', (['1.15', '1.19', '1.46', '1.20', '1.20', '1.25'], 100), [4, 10, 385])],\n [('control treble', (['2.00', '2.00', '2.00'], 100), [3, 5, 835]),\n  ('boundary minimum odds leg', (['1.20', '2.00', '2.00'], 100), [3, 5, 499]),\n  ('boundary short leg does not qualify', (['1.19', '2.00', '2.00'], 100), [2, 0, 476]),\n  ('boundary eight legs capped',\n   (['1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50'], 100),\n   [8, 25, 3178]),\n  ('regression: bonus base',\n   (['2.37', '1.15', '1.25', '2.10', '1.20', '1.15', '2.72', '2.40', '1.19'], 1000),\n   [6, 20, 91837]),\n  ('variant scenario 1',\n   (['1.54', '1.20', '1.20', '1.36', '1.15', '1.25', '1.32'], 1000),\n   [6, 20, 6667]),\n  ('variant scenario 2',\n   (['1.15', '2.35', '2.91', '1.25', '1.19', '1.25', '1.20', '1.33'], 100),\n   [6, 20, 2780])],\n [('control treble', (['2.00', '2.00', '2.00'], 100), [3, 5, 835]),\n  ('boundary minimum odds leg', (['1.20', '2.00', '2.00'], 100), [3, 5, 499]),\n  ('boundary short leg does not qualify', (['1.19', '2.00', '2.00'], 100), [2, 0, 476]),\n  ('boundary eight legs capped',\n   (['1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50'], 100),\n   [8, 25, 3178]),\n  ('regression: bonus base',\n   (['1.15', '1.19', '1.25', '2.20', '2.41', '1.15'], 1000),\n   [3, 5, 10901]),\n  ('variant scenario 1', (['2.40', '1.19', '1.25'], 500), [2, 0, 1785]),\n  ('variant scenario 2', (['1.20', '1.15', '1.20', '1.15'], 1000), [2, 0, 1904])]]\nfor label, args, expected in cases[N - 1]:\n    check(label, run(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":"720f25171eb14c9c51d221afeb85e723b69b1f5f3c701aae58e8a348143fdbf1","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(prices, stake_cents):\n    TABLE = {3: 5, 4: 10, 5: 15, 6: 20, 7: 25}\n    factor = Fraction(1)\n    q = 0\n    for p in prices:\n        d = Fraction(p)\n        factor *= d\n        if d >= Fraction(120, 100):\n            q += 1\n    pct = TABLE.get(min(q, 7), 0)\n    profit = stake_cents * (factor - 1)\n    return [q, pct, math.floor(stake_cents * factor * (100 + pct) / 100)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\ndef run(args):\n    try:\n        return solve(*args)\n    except Exception as exc:\n        return 'raised ' + type(exc).__name__\ncases = [[('control treble', (['2.00', '2.00', '2.00'], 100), [3, 5, 835]),\n  ('boundary minimum odds leg', (['1.20', '2.00', '2.00'], 100), [3, 5, 499]),\n  ('boundary short leg does not qualify', (['1.19', '2.00', '2.00'], 100), [2, 0, 476]),\n  ('boundary eight legs capped',\n   (['1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50'], 100),\n   [8, 25, 3178]),\n  ('regression: bonus base',\n   (['1.15', '1.15', '1.07', '1.66', '1.15', '1.15', '2.23', '1.69', '1.25'], 1000),\n   [4, 10, 15998]),\n  ('variant scenario 1',\n   (['1.50', '1.19', '1.33', '1.30', '1.19', '1.19', '1.19', '1.19', '1.19'], 500),\n   [3, 5, 3841]),\n  ('variant scenario 2',\n   (['1.20', '1.33', '1.15', '1.20', '1.60', '1.15', '1.37', '1.72'], 500),\n   [6, 20, 5629])],\n [('control treble', (['2.00', '2.00', '2.00'], 100), [3, 5, 835]),\n  ('boundary minimum odds leg', (['1.20', '2.00', '2.00'], 100), [3, 5, 499]),\n  ('boundary short leg does not qualify', (['1.19', '2.00', '2.00'], 100), [2, 0, 476]),\n  ('boundary eight legs capped',\n   (['1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50'], 100),\n   [8, 25, 3178]),\n  ('regression: bonus base',\n   (['1.20', '1.25', '1.25', '1.25', '1.56', '1.15', '1.19', '2.16'], 100),\n   [6, 20, 1276]),\n  ('variant scenario 1', (['1.52', '1.25', '1.20', '1.25'], 100), [4, 10, 303]),\n  ('variant scenario 2', (['1.15', '1.19', '1.19', '2.36'], 100), [1, 0, 384])],\n [('control treble', (['2.00', '2.00', '2.00'], 100), [3, 5, 835]),\n  ('boundary minimum odds leg', (['1.20', '2.00', '2.00'], 100), [3, 5, 499]),\n  ('boundary short leg does not qualify', (['1.19', '2.00', '2.00'], 100), [2, 0, 476]),\n  ('boundary eight legs capped',\n   (['1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50'], 100),\n   [8, 25, 3178]),\n  ('regression: bonus base',\n   (['2.25', '2.49', '1.25', '2.47', '1.15', '1.20'], 100),\n   [5, 15, 2730]),\n  ('variant scenario 1', (['1.15', '1.19', '1.15'], 100), [0, 0, 157]),\n  ('variant scenario 2', (['1.15', '1.19', '1.46', '1.20', '1.20', '1.25'], 100), [4, 10, 385])],\n [('control treble', (['2.00', '2.00', '2.00'], 100), [3, 5, 835]),\n  ('boundary minimum odds leg', (['1.20', '2.00', '2.00'], 100), [3, 5, 499]),\n  ('boundary short leg does not qualify', (['1.19', '2.00', '2.00'], 100), [2, 0, 476]),\n  ('boundary eight legs capped',\n   (['1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50'], 100),\n   [8, 25, 3178]),\n  ('regression: bonus base',\n   (['2.37', '1.15', '1.25', '2.10', '1.20', '1.15', '2.72', '2.40', '1.19'], 1000),\n   [6, 20, 91837]),\n  ('variant scenario 1',\n   (['1.54', '1.20', '1.20', '1.36', '1.15', '1.25', '1.32'], 1000),\n   [6, 20, 6667]),\n  ('variant scenario 2',\n   (['1.15', '2.35', '2.91', '1.25', '1.19', '1.25', '1.20', '1.33'], 100),\n   [6, 20, 2780])],\n [('control treble', (['2.00', '2.00', '2.00'], 100), [3, 5, 835]),\n  ('boundary minimum odds leg', (['1.20', '2.00', '2.00'], 100), [3, 5, 499]),\n  ('boundary short leg does not qualify', (['1.19', '2.00', '2.00'], 100), [2, 0, 476]),\n  ('boundary eight legs capped',\n   (['1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50', '1.50'], 100),\n   [8, 25, 3178]),\n  ('regression: bonus base',\n   (['1.15', '1.19', '1.25', '2.20', '2.41', '1.15'], 1000),\n   [3, 5, 10901]),\n  ('variant scenario 1', (['2.40', '1.19', '1.25'], 500), [2, 0, 1785]),\n  ('variant scenario 2', (['1.20', '1.15', '1.20', '1.15'], 1000), [2, 0, 1904])]]\nfor label, args, expected in cases[N - 1]:\n    check(label, run(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":"Stipulated, bounded toy contract stated in the contract field; not a claim of conformance with any operator, exchange or regulator rule set. 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-odds-conversion-accumulator-bonus-bonus-base","generated_at":"2026-09-29T14:50:34.455852+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Acca promotions depend on minimum-odds qualification and apply the bonus to winnings.","root_cause":"The bonus percentage is applied to stake plus profit.","sha256":"19435a08267406782260b1d16353e60f91301343a804c40c74e020e45280b7f5","title":"Acca bonus applied to the whole return or to the stake · 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":44.24,"exit_code":1,"observations":[{"actual":[3,5,805],"check":"control treble","expected":[3,5,835],"passed":false},{"actual":[3,5,485],"check":"boundary minimum odds leg","expected":[3,5,499],"passed":false},{"actual":[2,0,476],"check":"boundary short leg does not qualify","expected":[2,0,476],"passed":true},{"actual":[8,25,2587],"check":"boundary eight legs capped","expected":[8,25,3178],"passed":false},{"actual":[4,10,14734],"check":"regression: bonus base","expected":[4,10,15998],"passed":false},{"actual":[3,5,3707],"check":"variant scenario 1","expected":[3,5,3841],"passed":false},{"actual":[6,20,4874],"check":"variant scenario 2","expected":[6,20,5629],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control treble\", \"actual\": [3, 5, 805], \"expected\": [3, 5, 835], \"passed\": false}, {\"check\": \"boundary minimum odds leg\", \"actual\": [3, 5, 485], \"expected\": [3, 5, 499], \"passed\": false}, {\"check\": \"boundary short leg does not qualify\", \"actual\": [2, 0, 476], \"expected\": [2, 0, 476], \"passed\": true}, {\"check\": \"boundary eight legs capped\", \"actual\": [8, 25, 2587], \"expected\": [8, 25, 3178], \"passed\": false}, {\"check\": \"regression: bonus base\", \"actual\": [4, 10, 14734], \"expected\": [4, 10, 15998], \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": [3, 5, 3707], \"expected\": [3, 5, 3841], \"passed\": false}, {\"check\": \"variant scenario 2\", \"actual\": [6, 20, 4874], \"expected\": [6, 20, 5629], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":45.558,"exit_code":1,"observations":[{"actual":[3,5,840],"check":"control treble","expected":[3,5,835],"passed":false},{"actual":[3,5,504],"check":"boundary minimum odds leg","expected":[3,5,499],"passed":false},{"actual":[2,0,476],"check":"boundary short leg does not qualify","expected":[2,0,476],"passed":true},{"actual":[8,25,3203],"check":"boundary eight legs capped","expected":[8,25,3178],"passed":false},{"actual":[4,10,16098],"check":"regression: bonus base","expected":[4,10,15998],"passed":false},{"actual":[3,5,3866],"check":"variant scenario 1","expected":[3,5,3841],"passed":false},{"actual":[6,20,5729],"check":"variant scenario 2","expected":[6,20,5629],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control treble\", \"actual\": [3, 5, 840], \"expected\": [3, 5, 835], \"passed\": false}, {\"check\": \"boundary minimum odds leg\", \"actual\": [3, 5, 504], \"expected\": [3, 5, 499], \"passed\": false}, {\"check\": \"boundary short leg does not qualify\", \"actual\": [2, 0, 476], \"expected\": [2, 0, 476], \"passed\": true}, {\"check\": \"boundary eight legs capped\", \"actual\": [8, 25, 3203], \"expected\": [8, 25, 3178], \"passed\": false}, {\"check\": \"regression: bonus base\", \"actual\": [4, 10, 16098], \"expected\": [4, 10, 15998], \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": [3, 5, 3866], \"expected\": [3, 5, 3841], \"passed\": false}, {\"check\": \"variant scenario 2\", \"actual\": [6, 20, 5729], \"expected\": [6, 20, 5629], \"passed\": false}], \"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."}}