{"abstract":"A losing market produces a negative commission refund or a charge on the loss.","category":"Betting odds conversion","checks":7,"contract":"Betting exchange settlement. bets rows are [market, side, stake_cents, price, won] where won says whether the bet won. Back: win profit floor(stake * (price - 1)), loss -stake. Lay: win +stake, loss -ceil(stake * (price - 1)) (the liability). Commission is charged per market on the market net profit only when that net is positive, at rate_pct percent rounded half up to a cent. Return [total net after commission, total commission] in cents.","evaluation_group":"w2-odds-conversion-exchange-market-commission","failed_approach":"Charging commission on the absolute net penalises losing markets.","family":"w2-odds-conversion-exchange-market-commission-loss-market-commission","id":"FA-84541","implementations":{"attempt":{"sha256":"e576f84aa1d849a890405484bf086ea4eaadf3b634d83a477a468d2ba813551a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(bets, rate_pct):\n    nets = {}\n    for market, side, stake, price, won in bets:\n        p = Fraction(price)\n        if side == 'back':\n            pl = math.floor(stake * (p - 1)) if won else -stake\n        else:\n            pl = stake if won else -math.ceil(stake * (p - 1))\n        nets[market] = nets.get(market, 0) + pl\n    comm = 0\n    for m, net in nets.items():\n        comm += math.floor(abs(net) * Fraction(rate_pct) / 100 + Fraction(1, 2))\n    return [sum(nets.values()) - comm, comm]\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 single back winner', ([['m1', 'back', 1000, '3.00', True]], '5'), [1900, 100]),\n  ('boundary hedged market nets out',\n   ([['m1', 'back', 1000, '3.00', True], ['m1', 'lay', 1000, '2.50', False]], '5'),\n   [475, 25]),\n  ('control lay winner', ([['m2', 'lay', 1000, '4.00', True]], '5'), [950, 50]),\n  ('boundary losing market no commission',\n   ([['m1', 'back', 1000, '3.00', False], ['m1', 'lay', 500, '2.00', True]], '5'),\n   [-500, 0]),\n  ('regression: loss market commission',\n   ([['m1', 'back', 250, '7.43', True],\n     ['m1', 'back', 250, '5.08', True],\n     ['m2', 'back', 250, '6.10', False]],\n    '2'),\n   [2324, 53]),\n  ('variant scenario 1',\n   ([['m1', 'back', 777, '5.62', True], ['m3', 'back', 100, '2.02', False]], '6.5'),\n   [3256, 233]),\n  ('variant scenario 2', ([['m3', 'lay', 777, '6.38', False]], '2'), [-4181, 0])],\n [('control single back winner', ([['m1', 'back', 1000, '3.00', True]], '5'), [1900, 100]),\n  ('boundary hedged market nets out',\n   ([['m1', 'back', 1000, '3.00', True], ['m1', 'lay', 1000, '2.50', False]], '5'),\n   [475, 25]),\n  ('control lay winner', ([['m2', 'lay', 1000, '4.00', True]], '5'), [950, 50]),\n  ('boundary losing market no commission',\n   ([['m1', 'back', 1000, '3.00', False], ['m1', 'lay', 500, '2.00', True]], '5'),\n   [-500, 0]),\n  ('regression: loss market commission',\n   ([['m1', 'back', 250, '4.78', False], ['m3', 'lay', 1000, '4.13', False]], '5'),\n   [-3380, 0]),\n  ('variant scenario 1', ([['m1', 'lay', 2000, '7.96', True]], '5'), [1900, 100]),\n  ('variant scenario 2',\n   ([['m3', 'lay', 2000, '2.30', True],\n     ['m1', 'back', 1000, '2.62', False],\n     ['m1', 'lay', 777, '6.91', False],\n     ['m2', 'back', 100, '2.31', True],\n     ['m1', 'lay', 250, '5.96', True]],\n    '2'),\n   [-3255, 43])],\n [('control single back winner', ([['m1', 'back', 1000, '3.00', True]], '5'), [1900, 100]),\n  ('boundary hedged market nets out',\n   ([['m1', 'back', 1000, '3.00', True], ['m1', 'lay', 1000, '2.50', False]], '5'),\n   [475, 25]),\n  ('control lay winner', ([['m2', 'lay', 1000, '4.00', True]], '5'), [950, 50]),\n  ('boundary losing market no commission',\n   ([['m1', 'back', 1000, '3.00', False], ['m1', 'lay', 500, '2.00', True]], '5'),\n   [-500, 0]),\n  ('regression: loss market commission',\n   ([['m1', 'lay', 777, '6.98', False],\n     ['m3', 'back', 250, '4.94', False],\n     ['m1', 'back', 777, '5.13', True],\n     ['m3', 'back', 2000, '7.64', True]],\n    '6.5'),\n   [10745, 847]),\n  ('variant scenario 1',\n   ([['m2', 'back', 250, '4.54', True],\n     ['m3', 'back', 250, '4.14', True],\n     ['m3', 'lay', 250, '3.05', False],\n     ['m2', 'lay', 1000, '2.30', True]],\n    '6.5'),\n   [2016, 141]),\n  ('variant scenario 2',\n   ([['m2', 'back', 777, '3.62', True],\n     ['m2', 'back', 1000, '2.28', False],\n     ['m3', 'back', 250, '7.79', False]],\n    '5'),\n   [733, 52])],\n [('control single back winner', ([['m1', 'back', 1000, '3.00', True]], '5'), [1900, 100]),\n  ('boundary hedged market nets out',\n   ([['m1', 'back', 1000, '3.00', True], ['m1', 'lay', 1000, '2.50', False]], '5'),\n   [475, 25]),\n  ('control lay winner', ([['m2', 'lay', 1000, '4.00', True]], '5'), [950, 50]),\n  ('boundary losing market no commission',\n   ([['m1', 'back', 1000, '3.00', False], ['m1', 'lay', 500, '2.00', True]], '5'),\n   [-500, 0]),\n  ('regression: loss market commission',\n   ([['m2', 'lay', 777, '1.69', False],\n     ['m1', 'lay', 100, '7.97', True],\n     ['m1', 'back', 250, '4.99', False],\n     ['m3', 'lay', 250, '2.98', True],\n     ['m1', 'lay', 777, '1.65', False]],\n    '2'),\n   [-948, 5]),\n  ('variant scenario 1',\n   ([['m3', 'lay', 2000, '3.64', False], ['m2', 'back', 1000, '6.39', True]], '6.5'),\n   [-240, 350]),\n  ('variant scenario 2',\n   ([['m2', 'lay', 1000, '7.63', True],\n     ['m2', 'back', 2000, '1.39', True],\n     ['m3', 'back', 1000, '6.88', True]],\n    '5'),\n   [7277, 383])],\n [('control single back winner', ([['m1', 'back', 1000, '3.00', True]], '5'), [1900, 100]),\n  ('boundary hedged market nets out',\n   ([['m1', 'back', 1000, '3.00', True], ['m1', 'lay', 1000, '2.50', False]], '5'),\n   [475, 25]),\n  ('control lay winner', ([['m2', 'lay', 1000, '4.00', True]], '5'), [950, 50]),\n  ('boundary losing market no commission',\n   ([['m1', 'back', 1000, '3.00', False], ['m1', 'lay', 500, '2.00', True]], '5'),\n   [-500, 0]),\n  ('regression: loss market commission',\n   ([['m2', 'lay', 777, '1.85', False],\n     ['m1', 'back', 1000, '2.64', False],\n     ['m1', 'lay', 2000, '3.74', False],\n     ['m2', 'back', 1000, '7.08', True],\n     ['m3', 'back', 1000, '5.02', False]],\n    '2'),\n   [-2169, 108]),\n  ('variant scenario 1', ([['m2', 'lay', 777, '7.81', False]], '6.5'), [-5292, 0]),\n  ('variant scenario 2',\n   ([['m1', 'back', 777, '2.56', False], ['m3', 'back', 1000, '2.29', True]], '2'),\n   [487, 26])]]\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":"11732b668780c5ed294933b2bdc3750e49b45e011d45c0fb565f20e16f2b2723","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(bets, rate_pct):\n    nets = {}\n    for market, side, stake, price, won in bets:\n        p = Fraction(price)\n        if side == 'back':\n            pl = math.floor(stake * (p - 1)) if won else -stake\n        else:\n            pl = stake if won else -math.ceil(stake * (p - 1))\n        nets[market] = nets.get(market, 0) + pl\n    comm = 0\n    for m, net in nets.items():\n        comm += math.floor(net * Fraction(rate_pct) / 100 + Fraction(1, 2))\n    return [sum(nets.values()) - comm, comm]\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 single back winner', ([['m1', 'back', 1000, '3.00', True]], '5'), [1900, 100]),\n  ('boundary hedged market nets out',\n   ([['m1', 'back', 1000, '3.00', True], ['m1', 'lay', 1000, '2.50', False]], '5'),\n   [475, 25]),\n  ('control lay winner', ([['m2', 'lay', 1000, '4.00', True]], '5'), [950, 50]),\n  ('boundary losing market no commission',\n   ([['m1', 'back', 1000, '3.00', False], ['m1', 'lay', 500, '2.00', True]], '5'),\n   [-500, 0]),\n  ('regression: loss market commission',\n   ([['m1', 'back', 250, '7.43', True],\n     ['m1', 'back', 250, '5.08', True],\n     ['m2', 'back', 250, '6.10', False]],\n    '2'),\n   [2324, 53]),\n  ('variant scenario 1',\n   ([['m1', 'back', 777, '5.62', True], ['m3', 'back', 100, '2.02', False]], '6.5'),\n   [3256, 233]),\n  ('variant scenario 2', ([['m3', 'lay', 777, '6.38', False]], '2'), [-4181, 0])],\n [('control single back winner', ([['m1', 'back', 1000, '3.00', True]], '5'), [1900, 100]),\n  ('boundary hedged market nets out',\n   ([['m1', 'back', 1000, '3.00', True], ['m1', 'lay', 1000, '2.50', False]], '5'),\n   [475, 25]),\n  ('control lay winner', ([['m2', 'lay', 1000, '4.00', True]], '5'), [950, 50]),\n  ('boundary losing market no commission',\n   ([['m1', 'back', 1000, '3.00', False], ['m1', 'lay', 500, '2.00', True]], '5'),\n   [-500, 0]),\n  ('regression: loss market commission',\n   ([['m1', 'back', 250, '4.78', False], ['m3', 'lay', 1000, '4.13', False]], '5'),\n   [-3380, 0]),\n  ('variant scenario 1', ([['m1', 'lay', 2000, '7.96', True]], '5'), [1900, 100]),\n  ('variant scenario 2',\n   ([['m3', 'lay', 2000, '2.30', True],\n     ['m1', 'back', 1000, '2.62', False],\n     ['m1', 'lay', 777, '6.91', False],\n     ['m2', 'back', 100, '2.31', True],\n     ['m1', 'lay', 250, '5.96', True]],\n    '2'),\n   [-3255, 43])],\n [('control single back winner', ([['m1', 'back', 1000, '3.00', True]], '5'), [1900, 100]),\n  ('boundary hedged market nets out',\n   ([['m1', 'back', 1000, '3.00', True], ['m1', 'lay', 1000, '2.50', False]], '5'),\n   [475, 25]),\n  ('control lay winner', ([['m2', 'lay', 1000, '4.00', True]], '5'), [950, 50]),\n  ('boundary losing market no commission',\n   ([['m1', 'back', 1000, '3.00', False], ['m1', 'lay', 500, '2.00', True]], '5'),\n   [-500, 0]),\n  ('regression: loss market commission',\n   ([['m1', 'lay', 777, '6.98', False],\n     ['m3', 'back', 250, '4.94', False],\n     ['m1', 'back', 777, '5.13', True],\n     ['m3', 'back', 2000, '7.64', True]],\n    '6.5'),\n   [10745, 847]),\n  ('variant scenario 1',\n   ([['m2', 'back', 250, '4.54', True],\n     ['m3', 'back', 250, '4.14', True],\n     ['m3', 'lay', 250, '3.05', False],\n     ['m2', 'lay', 1000, '2.30', True]],\n    '6.5'),\n   [2016, 141]),\n  ('variant scenario 2',\n   ([['m2', 'back', 777, '3.62', True],\n     ['m2', 'back', 1000, '2.28', False],\n     ['m3', 'back', 250, '7.79', False]],\n    '5'),\n   [733, 52])],\n [('control single back winner', ([['m1', 'back', 1000, '3.00', True]], '5'), [1900, 100]),\n  ('boundary hedged market nets out',\n   ([['m1', 'back', 1000, '3.00', True], ['m1', 'lay', 1000, '2.50', False]], '5'),\n   [475, 25]),\n  ('control lay winner', ([['m2', 'lay', 1000, '4.00', True]], '5'), [950, 50]),\n  ('boundary losing market no commission',\n   ([['m1', 'back', 1000, '3.00', False], ['m1', 'lay', 500, '2.00', True]], '5'),\n   [-500, 0]),\n  ('regression: loss market commission',\n   ([['m2', 'lay', 777, '1.69', False],\n     ['m1', 'lay', 100, '7.97', True],\n     ['m1', 'back', 250, '4.99', False],\n     ['m3', 'lay', 250, '2.98', True],\n     ['m1', 'lay', 777, '1.65', False]],\n    '2'),\n   [-948, 5]),\n  ('variant scenario 1',\n   ([['m3', 'lay', 2000, '3.64', False], ['m2', 'back', 1000, '6.39', True]], '6.5'),\n   [-240, 350]),\n  ('variant scenario 2',\n   ([['m2', 'lay', 1000, '7.63', True],\n     ['m2', 'back', 2000, '1.39', True],\n     ['m3', 'back', 1000, '6.88', True]],\n    '5'),\n   [7277, 383])],\n [('control single back winner', ([['m1', 'back', 1000, '3.00', True]], '5'), [1900, 100]),\n  ('boundary hedged market nets out',\n   ([['m1', 'back', 1000, '3.00', True], ['m1', 'lay', 1000, '2.50', False]], '5'),\n   [475, 25]),\n  ('control lay winner', ([['m2', 'lay', 1000, '4.00', True]], '5'), [950, 50]),\n  ('boundary losing market no commission',\n   ([['m1', 'back', 1000, '3.00', False], ['m1', 'lay', 500, '2.00', True]], '5'),\n   [-500, 0]),\n  ('regression: loss market commission',\n   ([['m2', 'lay', 777, '1.85', False],\n     ['m1', 'back', 1000, '2.64', False],\n     ['m1', 'lay', 2000, '3.74', False],\n     ['m2', 'back', 1000, '7.08', True],\n     ['m3', 'back', 1000, '5.02', False]],\n    '2'),\n   [-2169, 108]),\n  ('variant scenario 1', ([['m2', 'lay', 777, '7.81', False]], '6.5'), [-5292, 0]),\n  ('variant scenario 2',\n   ([['m1', 'back', 777, '2.56', False], ['m3', 'back', 1000, '2.29', True]], '2'),\n   [487, 26])]]\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"},"fixed":{"sha256":"101ebb5f82f5d28b8cf31c2f91431d51737d4c3e7f9494d3d449ee54bdae967a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(bets, rate_pct):\n    nets = {}\n    for market, side, stake, price, won in bets:\n        p = Fraction(price)\n        if side == 'back':\n            pl = math.floor(stake * (p - 1)) if won else -stake\n        else:\n            pl = stake if won else -math.ceil(stake * (p - 1))\n        nets[market] = nets.get(market, 0) + pl\n    comm = 0\n    for m, net in nets.items():\n        if net > 0:\n            comm += math.floor(net * Fraction(rate_pct) / 100 + Fraction(1, 2))\n    return [sum(nets.values()) - comm, comm]\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 single back winner', ([['m1', 'back', 1000, '3.00', True]], '5'), [1900, 100]),\n  ('boundary hedged market nets out',\n   ([['m1', 'back', 1000, '3.00', True], ['m1', 'lay', 1000, '2.50', False]], '5'),\n   [475, 25]),\n  ('control lay winner', ([['m2', 'lay', 1000, '4.00', True]], '5'), [950, 50]),\n  ('boundary losing market no commission',\n   ([['m1', 'back', 1000, '3.00', False], ['m1', 'lay', 500, '2.00', True]], '5'),\n   [-500, 0]),\n  ('regression: loss market commission',\n   ([['m1', 'back', 250, '7.43', True],\n     ['m1', 'back', 250, '5.08', True],\n     ['m2', 'back', 250, '6.10', False]],\n    '2'),\n   [2324, 53]),\n  ('variant scenario 1',\n   ([['m1', 'back', 777, '5.62', True], ['m3', 'back', 100, '2.02', False]], '6.5'),\n   [3256, 233]),\n  ('variant scenario 2', ([['m3', 'lay', 777, '6.38', False]], '2'), [-4181, 0])],\n [('control single back winner', ([['m1', 'back', 1000, '3.00', True]], '5'), [1900, 100]),\n  ('boundary hedged market nets out',\n   ([['m1', 'back', 1000, '3.00', True], ['m1', 'lay', 1000, '2.50', False]], '5'),\n   [475, 25]),\n  ('control lay winner', ([['m2', 'lay', 1000, '4.00', True]], '5'), [950, 50]),\n  ('boundary losing market no commission',\n   ([['m1', 'back', 1000, '3.00', False], ['m1', 'lay', 500, '2.00', True]], '5'),\n   [-500, 0]),\n  ('regression: loss market commission',\n   ([['m1', 'back', 250, '4.78', False], ['m3', 'lay', 1000, '4.13', False]], '5'),\n   [-3380, 0]),\n  ('variant scenario 1', ([['m1', 'lay', 2000, '7.96', True]], '5'), [1900, 100]),\n  ('variant scenario 2',\n   ([['m3', 'lay', 2000, '2.30', True],\n     ['m1', 'back', 1000, '2.62', False],\n     ['m1', 'lay', 777, '6.91', False],\n     ['m2', 'back', 100, '2.31', True],\n     ['m1', 'lay', 250, '5.96', True]],\n    '2'),\n   [-3255, 43])],\n [('control single back winner', ([['m1', 'back', 1000, '3.00', True]], '5'), [1900, 100]),\n  ('boundary hedged market nets out',\n   ([['m1', 'back', 1000, '3.00', True], ['m1', 'lay', 1000, '2.50', False]], '5'),\n   [475, 25]),\n  ('control lay winner', ([['m2', 'lay', 1000, '4.00', True]], '5'), [950, 50]),\n  ('boundary losing market no commission',\n   ([['m1', 'back', 1000, '3.00', False], ['m1', 'lay', 500, '2.00', True]], '5'),\n   [-500, 0]),\n  ('regression: loss market commission',\n   ([['m1', 'lay', 777, '6.98', False],\n     ['m3', 'back', 250, '4.94', False],\n     ['m1', 'back', 777, '5.13', True],\n     ['m3', 'back', 2000, '7.64', True]],\n    '6.5'),\n   [10745, 847]),\n  ('variant scenario 1',\n   ([['m2', 'back', 250, '4.54', True],\n     ['m3', 'back', 250, '4.14', True],\n     ['m3', 'lay', 250, '3.05', False],\n     ['m2', 'lay', 1000, '2.30', True]],\n    '6.5'),\n   [2016, 141]),\n  ('variant scenario 2',\n   ([['m2', 'back', 777, '3.62', True],\n     ['m2', 'back', 1000, '2.28', False],\n     ['m3', 'back', 250, '7.79', False]],\n    '5'),\n   [733, 52])],\n [('control single back winner', ([['m1', 'back', 1000, '3.00', True]], '5'), [1900, 100]),\n  ('boundary hedged market nets out',\n   ([['m1', 'back', 1000, '3.00', True], ['m1', 'lay', 1000, '2.50', False]], '5'),\n   [475, 25]),\n  ('control lay winner', ([['m2', 'lay', 1000, '4.00', True]], '5'), [950, 50]),\n  ('boundary losing market no commission',\n   ([['m1', 'back', 1000, '3.00', False], ['m1', 'lay', 500, '2.00', True]], '5'),\n   [-500, 0]),\n  ('regression: loss market commission',\n   ([['m2', 'lay', 777, '1.69', False],\n     ['m1', 'lay', 100, '7.97', True],\n     ['m1', 'back', 250, '4.99', False],\n     ['m3', 'lay', 250, '2.98', True],\n     ['m1', 'lay', 777, '1.65', False]],\n    '2'),\n   [-948, 5]),\n  ('variant scenario 1',\n   ([['m3', 'lay', 2000, '3.64', False], ['m2', 'back', 1000, '6.39', True]], '6.5'),\n   [-240, 350]),\n  ('variant scenario 2',\n   ([['m2', 'lay', 1000, '7.63', True],\n     ['m2', 'back', 2000, '1.39', True],\n     ['m3', 'back', 1000, '6.88', True]],\n    '5'),\n   [7277, 383])],\n [('control single back winner', ([['m1', 'back', 1000, '3.00', True]], '5'), [1900, 100]),\n  ('boundary hedged market nets out',\n   ([['m1', 'back', 1000, '3.00', True], ['m1', 'lay', 1000, '2.50', False]], '5'),\n   [475, 25]),\n  ('control lay winner', ([['m2', 'lay', 1000, '4.00', True]], '5'), [950, 50]),\n  ('boundary losing market no commission',\n   ([['m1', 'back', 1000, '3.00', False], ['m1', 'lay', 500, '2.00', True]], '5'),\n   [-500, 0]),\n  ('regression: loss market commission',\n   ([['m2', 'lay', 777, '1.85', False],\n     ['m1', 'back', 1000, '2.64', False],\n     ['m1', 'lay', 2000, '3.74', False],\n     ['m2', 'back', 1000, '7.08', True],\n     ['m3', 'back', 1000, '5.02', False]],\n    '2'),\n   [-2169, 108]),\n  ('variant scenario 1', ([['m2', 'lay', 777, '7.81', False]], '6.5'), [-5292, 0]),\n  ('variant scenario 2',\n   ([['m1', 'back', 777, '2.56', False], ['m3', 'back', 1000, '2.29', True]], '2'),\n   [487, 26])]]\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-exchange-market-commission-loss-market-commission","generated_at":"2026-09-29T14:50:31.896291+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Exchanges charge commission on net market winnings, not per winning bet.","repair":"Charge commission only when the market net is positive.","root_cause":"The commission loop has no positive-net guard.","sha256":"e5f4e13b12e38de547199e3324baf29bb19020d952957be53779bedad097db90","title":"Commission computed on losing markets · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.998,"exit_code":1,"observations":[{"actual":[1900,100],"check":"control single back winner","expected":[1900,100],"passed":true},{"actual":[475,25],"check":"boundary hedged market nets out","expected":[475,25],"passed":true},{"actual":[950,50],"check":"control lay winner","expected":[950,50],"passed":true},{"actual":[-525,25],"check":"boundary losing market no commission","expected":[-500,0],"passed":false},{"actual":[2319,58],"check":"regression: loss market commission","expected":[2324,53],"passed":false},{"actual":[3249,240],"check":"variant scenario 1","expected":[3256,233],"passed":false},{"actual":[-4265,84],"check":"variant scenario 2","expected":[-4181,0],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control single back winner\", \"actual\": [1900, 100], \"expected\": [1900, 100], \"passed\": true}, {\"check\": \"boundary hedged market nets out\", \"actual\": [475, 25], \"expected\": [475, 25], \"passed\": true}, {\"check\": \"control lay winner\", \"actual\": [950, 50], \"expected\": [950, 50], \"passed\": true}, {\"check\": \"boundary losing market no commission\", \"actual\": [-525, 25], \"expected\": [-500, 0], \"passed\": false}, {\"check\": \"regression: loss market commission\", \"actual\": [2319, 58], \"expected\": [2324, 53], \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": [3249, 240], \"expected\": [3256, 233], \"passed\": false}, {\"check\": \"variant scenario 2\", \"actual\": [-4265, 84], \"expected\": [-4181, 0], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.797,"exit_code":1,"observations":[{"actual":[1900,100],"check":"control single back winner","expected":[1900,100],"passed":true},{"actual":[475,25],"check":"boundary hedged market nets out","expected":[475,25],"passed":true},{"actual":[950,50],"check":"control lay winner","expected":[950,50],"passed":true},{"actual":[-475,-25],"check":"boundary losing market no commission","expected":[-500,0],"passed":false},{"actual":[2329,48],"check":"regression: loss market commission","expected":[2324,53],"passed":false},{"actual":[3262,227],"check":"variant scenario 1","expected":[3256,233],"passed":false},{"actual":[-4097,-84],"check":"variant scenario 2","expected":[-4181,0],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control single back winner\", \"actual\": [1900, 100], \"expected\": [1900, 100], \"passed\": true}, {\"check\": \"boundary hedged market nets out\", \"actual\": [475, 25], \"expected\": [475, 25], \"passed\": true}, {\"check\": \"control lay winner\", \"actual\": [950, 50], \"expected\": [950, 50], \"passed\": true}, {\"check\": \"boundary losing market no commission\", \"actual\": [-475, -25], \"expected\": [-500, 0], \"passed\": false}, {\"check\": \"regression: loss market commission\", \"actual\": [2329, 48], \"expected\": [2324, 53], \"passed\": false}, {\"check\": \"variant scenario 1\", \"actual\": [3262, 227], \"expected\": [3256, 233], \"passed\": false}, {\"check\": \"variant scenario 2\", \"actual\": [-4097, -84], \"expected\": [-4181, 0], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":43.637,"exit_code":0,"observations":[{"actual":[1900,100],"check":"control single back winner","expected":[1900,100],"passed":true},{"actual":[475,25],"check":"boundary hedged market nets out","expected":[475,25],"passed":true},{"actual":[950,50],"check":"control lay winner","expected":[950,50],"passed":true},{"actual":[-500,0],"check":"boundary losing market no commission","expected":[-500,0],"passed":true},{"actual":[2324,53],"check":"regression: loss market commission","expected":[2324,53],"passed":true},{"actual":[3256,233],"check":"variant scenario 1","expected":[3256,233],"passed":true},{"actual":[-4181,0],"check":"variant scenario 2","expected":[-4181,0],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control single back winner\", \"actual\": [1900, 100], \"expected\": [1900, 100], \"passed\": true}, {\"check\": \"boundary hedged market nets out\", \"actual\": [475, 25], \"expected\": [475, 25], \"passed\": true}, {\"check\": \"control lay winner\", \"actual\": [950, 50], \"expected\": [950, 50], \"passed\": true}, {\"check\": \"boundary losing market no commission\", \"actual\": [-500, 0], \"expected\": [-500, 0], \"passed\": true}, {\"check\": \"regression: loss market commission\", \"actual\": [2324, 53], \"expected\": [2324, 53], \"passed\": true}, {\"check\": \"variant scenario 1\", \"actual\": [3256, 233], \"expected\": [3256, 233], \"passed\": true}, {\"check\": \"variant scenario 2\", \"actual\": [-4181, 0], \"expected\": [-4181, 0], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}