{"abstract":"A rider with credits and a promo is charged negative amounts and loses credit balance.","category":"Ride-hailing fare and surge pricing","checks":7,"contract":"Validate a promo in order: expired if now_day is after expires_day (the expiry day itself is valid), exhausted if no uses remain, not_first if first-ride-only and the rider has prior rides, min_fare if the fare (cents) is below min_fare. A valid pct promo takes value% of the fare (floored), capped at cap cents when cap is not None (a cap of 0 means a zero discount); a flat promo takes value but never more than the fare. Ride credits then cover up to the remaining fare. Return discount, credit used, amount due and reason.","evaluation_group":"w2-ride-hailing-fare-surge-promo-and-credits","failed_approach":"Refusing to combine credits with a promo leaves the rider paying cash they had credit for.","family":"w2-ride-hailing-fare-surge-promo-and-credits-credits-after-discount","id":"FA-85601","implementations":{"attempt":{"sha256":"9de0de8bb8b55684dfed19cd12722b1406d1f7409429641e984cd67cc37a89a0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(promo, ride, now_day):\n    reason = None\n    if now_day > promo['expires_day']:\n        reason = 'expired'\n    elif promo['uses_left'] <= 0:\n        reason = 'exhausted'\n    elif promo['first_ride_only'] and ride['rider_rides'] > 0:\n        reason = 'not_first'\n    elif ride['fare'] < promo['min_fare']:\n        reason = 'min_fare'\n    disc = 0\n    if reason is None:\n        if promo['kind'] == 'pct':\n            disc = ride['fare'] * promo['value'] // 100\n            if promo['cap'] is not None:\n                disc = min(disc, promo['cap'])\n        else:\n            disc = min(promo['value'], ride['fare'])\n    credit = min(ride['credits'], ride['fare'] - disc) if disc == 0 else 0\n    return {'discount': disc, 'credit_used': credit, 'due': ride['fare'] - disc - credit, 'reason': reason}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: credits after discount',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 1050,\n     'uses_left': 3,\n     'value': 10},\n    {'credits': 5000, 'fare': 2400, 'rider_rides': 1}, 100],\n   {'credit_used': 2160, 'discount': 240, 'due': 0, 'reason': None}),\n  ('partial repair probe: credits after discount',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 0,\n     'uses_left': 1,\n     'value': 50},\n    {'credits': 5000, 'fare': 3459, 'rider_rides': 1}, 100],\n   {'credit_used': 1730, 'discount': 1729, 'due': 0, 'reason': None}),\n  ('second regression',\n   [{'cap': 0,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 1000,\n     'uses_left': 3,\n     'value': 2500},\n    {'credits': 5000, 'fare': 1099, 'rider_rides': 0}, 99],\n   {'credit_used': 0, 'discount': 1099, 'due': 0, 'reason': None}),\n  ('normal control 1',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 0,\n     'uses_left': 0,\n     'value': 25},\n    {'credits': 5000, 'fare': 1000, 'rider_rides': 5}, 100],\n   {'credit_used': 1000, 'discount': 0, 'due': 0, 'reason': 'exhausted'}),\n  ('normal control 2',\n   [{'cap': 300,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 1050,\n     'uses_left': 3,\n     'value': 10},\n    {'credits': 250, 'fare': 700, 'rider_rides': 5}, 99],\n   {'credit_used': 250, 'discount': 0, 'due': 450, 'reason': 'min_fare'}),\n  ('normal control 3',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 0,\n     'uses_left': 1,\n     'value': 2500},\n    {'credits': 0, 'fare': 700, 'rider_rides': 0}, 101],\n   {'credit_used': 0, 'discount': 0, 'due': 700, 'reason': 'expired'}),\n  ('normal control 4',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 0,\n     'uses_left': 0,\n     'value': 50},\n    {'credits': 0, 'fare': 1050, 'rider_rides': 5}, 101],\n   {'credit_used': 0, 'discount': 0, 'due': 1050, 'reason': 'expired'})],\n [('regression: credits after discount',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 1050,\n     'uses_left': 1,\n     'value': 50},\n    {'credits': 5000, 'fare': 3646, 'rider_rides': 5}, 100],\n   {'credit_used': 1823, 'discount': 1823, 'due': 0, 'reason': None}),\n  ('partial repair probe: credits after discount',\n   [{'cap': 300,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 1050,\n     'uses_left': 1,\n     'value': 2500},\n    {'credits': 250, 'fare': 3192, 'rider_rides': 0}, 100],\n   {'credit_used': 250, 'discount': 2500, 'due': 442, 'reason': None}),\n  ('second regression',\n   [{'cap': 300,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'pct',\n     'min_fare': 1000,\n     'uses_left': 1,\n     'value': 50},\n    {'credits': 5000, 'fare': 1099, 'rider_rides': 0}, 99],\n   {'credit_used': 799, 'discount': 300, 'due': 0, 'reason': None}),\n  ('normal control 1',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'flat',\n     'min_fare': 1050,\n     'uses_left': 3,\n     'value': 1000},\n    {'credits': 0, 'fare': 2400, 'rider_rides': 0}, 100],\n   {'credit_used': 0, 'discount': 1000, 'due': 1400, 'reason': None}),\n  ('normal control 2',\n   [{'cap': 0,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'flat',\n     'min_fare': 0,\n     'uses_left': 3,\n     'value': 2500},\n    {'credits': 5000, 'fare': 1099, 'rider_rides': 5}, 99],\n   {'credit_used': 1099, 'discount': 0, 'due': 0, 'reason': 'not_first'}),\n  ('normal control 3',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'pct',\n     'min_fare': 1050,\n     'uses_left': 3,\n     'value': 25},\n    {'credits': 0, 'fare': 2400, 'rider_rides': 0}, 99],\n   {'credit_used': 0, 'discount': 600, 'due': 1800, 'reason': None}),\n  ('normal control 4',\n   [{'cap': 0,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 0,\n     'uses_left': 0,\n     'value': 500},\n    {'credits': 0, 'fare': 632, 'rider_rides': 5}, 101],\n   {'credit_used': 0, 'discount': 0, 'due': 632, 'reason': 'expired'})],\n [('regression: credits after discount',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 1050,\n     'uses_left': 1,\n     'value': 2500},\n    {'credits': 250, 'fare': 1099, 'rider_rides': 1}, 100],\n   {'credit_used': 0, 'discount': 1099, 'due': 0, 'reason': None}),\n  ('partial repair probe: credits after discount',\n   [{'cap': 300,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 1000,\n     'uses_left': 1,\n     'value': 10},\n    {'credits': 250, 'fare': 2836, 'rider_rides': 0}, 99],\n   {'credit_used': 250, 'discount': 283, 'due': 2303, 'reason': None}),\n  ('second regression',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 1050,\n     'uses_left': 3,\n     'value': 1000},\n    {'credits': 5000, 'fare': 1099, 'rider_rides': 1}, 100],\n   {'credit_used': 99, 'discount': 1000, 'due': 0, 'reason': None}),\n  ('normal control 1',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 1000,\n     'uses_left': 1,\n     'value': 10},\n    {'credits': 0, 'fare': 1099, 'rider_rides': 0}, 100],\n   {'credit_used': 0, 'discount': 109, 'due': 990, 'reason': None}),\n  ('normal control 2',\n   [{'cap': 300,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 0,\n     'uses_left': 0,\n     'value': 500},\n    {'credits': 5000, 'fare': 1050, 'rider_rides': 5}, 100],\n   {'credit_used': 1050, 'discount': 0, 'due': 0, 'reason': 'exhausted'}),\n  ('normal control 3',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 1050,\n     'uses_left': 3,\n     'value': 50},\n    {'credits': 5000, 'fare': 1275, 'rider_rides': 0}, 101],\n   {'credit_used': 1275, 'discount': 0, 'due': 0, 'reason': 'expired'}),\n  ('normal control 4',\n   [{'cap': 0,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 0,\n     'uses_left': 3,\n     'value': 500},\n    {'credits': 0, 'fare': 1050, 'rider_rides': 0}, 100],\n   {'credit_used': 0, 'discount': 500, 'due': 550, 'reason': None})],\n [('regression: credits after discount',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 1000,\n     'uses_left': 3,\n     'value': 2500},\n    {'credits': 5000, 'fare': 2400, 'rider_rides': 0}, 100],\n   {'credit_used': 0, 'discount': 2400, 'due': 0, 'reason': None}),\n  ('partial repair probe: credits after discount',\n   [{'cap': 300,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 1050,\n     'uses_left': 3,\n     'value': 500},\n    {'credits': 5000, 'fare': 2400, 'rider_rides': 0}, 99],\n   {'credit_used': 1900, 'discount': 500, 'due': 0, 'reason': None}),\n  ('second regression',\n   [{'cap': 0,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 1000,\n     'uses_left': 3,\n     'value': 2500},\n    {'credits': 250, 'fare': 1000, 'rider_rides': 0}, 100],\n   {'credit_used': 0, 'discount': 1000, 'due': 0, 'reason': None}),\n  ('normal control 1',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'pct',\n     'min_fare': 0,\n     'uses_left': 3,\n     'value': 25},\n    {'credits': 0, 'fare': 1050, 'rider_rides': 0}, 100],\n   {'credit_used': 0, 'discount': 262, 'due': 788, 'reason': None}),\n  ('normal control 2',\n   [{'cap': 0,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 0,\n     'uses_left': 0,\n     'value': 50},\n    {'credits': 5000, 'fare': 1000, 'rider_rides': 1}, 100],\n   {'credit_used': 1000, 'discount': 0, 'due': 0, 'reason': 'exhausted'}),\n  ('normal control 3',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'flat',\n     'min_fare': 0,\n     'uses_left': 1,\n     'value': 2500},\n    {'credits': 0, 'fare': 700, 'rider_rides': 1}, 99],\n   {'credit_used': 0, 'discount': 0, 'due': 700, 'reason': 'not_first'}),\n  ('normal control 4',\n   [{'cap': 0,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'flat',\n     'min_fare': 1050,\n     'uses_left': 0,\n     'value': 2500},\n    {'credits': 5000, 'fare': 1050, 'rider_rides': 1}, 100],\n   {'credit_used': 1050, 'discount': 0, 'due': 0, 'reason': 'exhausted'})],\n [('regression: credits after discount',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 1050,\n     'uses_left': 1,\n     'value': 25},\n    {'credits': 5000, 'fare': 1050, 'rider_rides': 1}, 99],\n   {'credit_used': 788, 'discount': 262, 'due': 0, 'reason': None}),\n  ('partial repair probe: credits after discount',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 0,\n     'uses_left': 1,\n     'value': 25},\n    {'credits': 250, 'fare': 3234, 'rider_rides': 0}, 99],\n   {'credit_used': 250, 'discount': 808, 'due': 2176, 'reason': None}),\n  ('second regression',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 0,\n     'uses_left': 1,\n     'value': 25},\n    {'credits': 5000, 'fare': 2400, 'rider_rides': 0}, 100],\n   {'credit_used': 1800, 'discount': 600, 'due': 0, 'reason': None}),\n  ('normal control 1',\n   [{'cap': 0,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 0,\n     'uses_left': 3,\n     'value': 500},\n    {'credits': 0, 'fare': 1050, 'rider_rides': 0}, 101],\n   {'credit_used': 0, 'discount': 0, 'due': 1050, 'reason': 'expired'}),\n  ('normal control 2',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'pct',\n     'min_fare': 1050,\n     'uses_left': 0,\n     'value': 50},\n    {'credits': 0, 'fare': 1000, 'rider_rides': 0}, 100],\n   {'credit_used': 0, 'discount': 0, 'due': 1000, 'reason': 'exhausted'}),\n  ('normal control 3',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'pct',\n     'min_fare': 1000,\n     'uses_left': 1,\n     'value': 10},\n    {'credits': 0, 'fare': 2400, 'rider_rides': 0}, 100],\n   {'credit_used': 0, 'discount': 240, 'due': 2160, 'reason': None}),\n  ('normal control 4',\n   [{'cap': 300,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'flat',\n     'min_fare': 1000,\n     'uses_left': 1,\n     'value': 1000},\n    {'credits': 0, 'fare': 2400, 'rider_rides': 5}, 99],\n   {'credit_used': 0, 'discount': 0, 'due': 2400, 'reason': 'not_first'})]]\nfor label, args, expected in fixtures[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":"bdbe92079f11fbce63138388c6973e57c1428053bb4c57e4d23d8a48bff4fdb6","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(promo, ride, now_day):\n    reason = None\n    if now_day > promo['expires_day']:\n        reason = 'expired'\n    elif promo['uses_left'] <= 0:\n        reason = 'exhausted'\n    elif promo['first_ride_only'] and ride['rider_rides'] > 0:\n        reason = 'not_first'\n    elif ride['fare'] < promo['min_fare']:\n        reason = 'min_fare'\n    disc = 0\n    if reason is None:\n        if promo['kind'] == 'pct':\n            disc = ride['fare'] * promo['value'] // 100\n            if promo['cap'] is not None:\n                disc = min(disc, promo['cap'])\n        else:\n            disc = min(promo['value'], ride['fare'])\n    credit = min(ride['credits'], ride['fare'])\n    return {'discount': disc, 'credit_used': credit, 'due': ride['fare'] - disc - credit, 'reason': reason}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: credits after discount',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 1050,\n     'uses_left': 3,\n     'value': 10},\n    {'credits': 5000, 'fare': 2400, 'rider_rides': 1}, 100],\n   {'credit_used': 2160, 'discount': 240, 'due': 0, 'reason': None}),\n  ('partial repair probe: credits after discount',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 0,\n     'uses_left': 1,\n     'value': 50},\n    {'credits': 5000, 'fare': 3459, 'rider_rides': 1}, 100],\n   {'credit_used': 1730, 'discount': 1729, 'due': 0, 'reason': None}),\n  ('second regression',\n   [{'cap': 0,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 1000,\n     'uses_left': 3,\n     'value': 2500},\n    {'credits': 5000, 'fare': 1099, 'rider_rides': 0}, 99],\n   {'credit_used': 0, 'discount': 1099, 'due': 0, 'reason': None}),\n  ('normal control 1',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 0,\n     'uses_left': 0,\n     'value': 25},\n    {'credits': 5000, 'fare': 1000, 'rider_rides': 5}, 100],\n   {'credit_used': 1000, 'discount': 0, 'due': 0, 'reason': 'exhausted'}),\n  ('normal control 2',\n   [{'cap': 300,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 1050,\n     'uses_left': 3,\n     'value': 10},\n    {'credits': 250, 'fare': 700, 'rider_rides': 5}, 99],\n   {'credit_used': 250, 'discount': 0, 'due': 450, 'reason': 'min_fare'}),\n  ('normal control 3',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 0,\n     'uses_left': 1,\n     'value': 2500},\n    {'credits': 0, 'fare': 700, 'rider_rides': 0}, 101],\n   {'credit_used': 0, 'discount': 0, 'due': 700, 'reason': 'expired'}),\n  ('normal control 4',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 0,\n     'uses_left': 0,\n     'value': 50},\n    {'credits': 0, 'fare': 1050, 'rider_rides': 5}, 101],\n   {'credit_used': 0, 'discount': 0, 'due': 1050, 'reason': 'expired'})],\n [('regression: credits after discount',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 1050,\n     'uses_left': 1,\n     'value': 50},\n    {'credits': 5000, 'fare': 3646, 'rider_rides': 5}, 100],\n   {'credit_used': 1823, 'discount': 1823, 'due': 0, 'reason': None}),\n  ('partial repair probe: credits after discount',\n   [{'cap': 300,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 1050,\n     'uses_left': 1,\n     'value': 2500},\n    {'credits': 250, 'fare': 3192, 'rider_rides': 0}, 100],\n   {'credit_used': 250, 'discount': 2500, 'due': 442, 'reason': None}),\n  ('second regression',\n   [{'cap': 300,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'pct',\n     'min_fare': 1000,\n     'uses_left': 1,\n     'value': 50},\n    {'credits': 5000, 'fare': 1099, 'rider_rides': 0}, 99],\n   {'credit_used': 799, 'discount': 300, 'due': 0, 'reason': None}),\n  ('normal control 1',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'flat',\n     'min_fare': 1050,\n     'uses_left': 3,\n     'value': 1000},\n    {'credits': 0, 'fare': 2400, 'rider_rides': 0}, 100],\n   {'credit_used': 0, 'discount': 1000, 'due': 1400, 'reason': None}),\n  ('normal control 2',\n   [{'cap': 0,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'flat',\n     'min_fare': 0,\n     'uses_left': 3,\n     'value': 2500},\n    {'credits': 5000, 'fare': 1099, 'rider_rides': 5}, 99],\n   {'credit_used': 1099, 'discount': 0, 'due': 0, 'reason': 'not_first'}),\n  ('normal control 3',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'pct',\n     'min_fare': 1050,\n     'uses_left': 3,\n     'value': 25},\n    {'credits': 0, 'fare': 2400, 'rider_rides': 0}, 99],\n   {'credit_used': 0, 'discount': 600, 'due': 1800, 'reason': None}),\n  ('normal control 4',\n   [{'cap': 0,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 0,\n     'uses_left': 0,\n     'value': 500},\n    {'credits': 0, 'fare': 632, 'rider_rides': 5}, 101],\n   {'credit_used': 0, 'discount': 0, 'due': 632, 'reason': 'expired'})],\n [('regression: credits after discount',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 1050,\n     'uses_left': 1,\n     'value': 2500},\n    {'credits': 250, 'fare': 1099, 'rider_rides': 1}, 100],\n   {'credit_used': 0, 'discount': 1099, 'due': 0, 'reason': None}),\n  ('partial repair probe: credits after discount',\n   [{'cap': 300,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 1000,\n     'uses_left': 1,\n     'value': 10},\n    {'credits': 250, 'fare': 2836, 'rider_rides': 0}, 99],\n   {'credit_used': 250, 'discount': 283, 'due': 2303, 'reason': None}),\n  ('second regression',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 1050,\n     'uses_left': 3,\n     'value': 1000},\n    {'credits': 5000, 'fare': 1099, 'rider_rides': 1}, 100],\n   {'credit_used': 99, 'discount': 1000, 'due': 0, 'reason': None}),\n  ('normal control 1',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 1000,\n     'uses_left': 1,\n     'value': 10},\n    {'credits': 0, 'fare': 1099, 'rider_rides': 0}, 100],\n   {'credit_used': 0, 'discount': 109, 'due': 990, 'reason': None}),\n  ('normal control 2',\n   [{'cap': 300,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 0,\n     'uses_left': 0,\n     'value': 500},\n    {'credits': 5000, 'fare': 1050, 'rider_rides': 5}, 100],\n   {'credit_used': 1050, 'discount': 0, 'due': 0, 'reason': 'exhausted'}),\n  ('normal control 3',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 1050,\n     'uses_left': 3,\n     'value': 50},\n    {'credits': 5000, 'fare': 1275, 'rider_rides': 0}, 101],\n   {'credit_used': 1275, 'discount': 0, 'due': 0, 'reason': 'expired'}),\n  ('normal control 4',\n   [{'cap': 0,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 0,\n     'uses_left': 3,\n     'value': 500},\n    {'credits': 0, 'fare': 1050, 'rider_rides': 0}, 100],\n   {'credit_used': 0, 'discount': 500, 'due': 550, 'reason': None})],\n [('regression: credits after discount',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 1000,\n     'uses_left': 3,\n     'value': 2500},\n    {'credits': 5000, 'fare': 2400, 'rider_rides': 0}, 100],\n   {'credit_used': 0, 'discount': 2400, 'due': 0, 'reason': None}),\n  ('partial repair probe: credits after discount',\n   [{'cap': 300,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 1050,\n     'uses_left': 3,\n     'value': 500},\n    {'credits': 5000, 'fare': 2400, 'rider_rides': 0}, 99],\n   {'credit_used': 1900, 'discount': 500, 'due': 0, 'reason': None}),\n  ('second regression',\n   [{'cap': 0,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 1000,\n     'uses_left': 3,\n     'value': 2500},\n    {'credits': 250, 'fare': 1000, 'rider_rides': 0}, 100],\n   {'credit_used': 0, 'discount': 1000, 'due': 0, 'reason': None}),\n  ('normal control 1',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'pct',\n     'min_fare': 0,\n     'uses_left': 3,\n     'value': 25},\n    {'credits': 0, 'fare': 1050, 'rider_rides': 0}, 100],\n   {'credit_used': 0, 'discount': 262, 'due': 788, 'reason': None}),\n  ('normal control 2',\n   [{'cap': 0,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 0,\n     'uses_left': 0,\n     'value': 50},\n    {'credits': 5000, 'fare': 1000, 'rider_rides': 1}, 100],\n   {'credit_used': 1000, 'discount': 0, 'due': 0, 'reason': 'exhausted'}),\n  ('normal control 3',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'flat',\n     'min_fare': 0,\n     'uses_left': 1,\n     'value': 2500},\n    {'credits': 0, 'fare': 700, 'rider_rides': 1}, 99],\n   {'credit_used': 0, 'discount': 0, 'due': 700, 'reason': 'not_first'}),\n  ('normal control 4',\n   [{'cap': 0,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'flat',\n     'min_fare': 1050,\n     'uses_left': 0,\n     'value': 2500},\n    {'credits': 5000, 'fare': 1050, 'rider_rides': 1}, 100],\n   {'credit_used': 1050, 'discount': 0, 'due': 0, 'reason': 'exhausted'})],\n [('regression: credits after discount',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 1050,\n     'uses_left': 1,\n     'value': 25},\n    {'credits': 5000, 'fare': 1050, 'rider_rides': 1}, 99],\n   {'credit_used': 788, 'discount': 262, 'due': 0, 'reason': None}),\n  ('partial repair probe: credits after discount',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 0,\n     'uses_left': 1,\n     'value': 25},\n    {'credits': 250, 'fare': 3234, 'rider_rides': 0}, 99],\n   {'credit_used': 250, 'discount': 808, 'due': 2176, 'reason': None}),\n  ('second regression',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 0,\n     'uses_left': 1,\n     'value': 25},\n    {'credits': 5000, 'fare': 2400, 'rider_rides': 0}, 100],\n   {'credit_used': 1800, 'discount': 600, 'due': 0, 'reason': None}),\n  ('normal control 1',\n   [{'cap': 0,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 0,\n     'uses_left': 3,\n     'value': 500},\n    {'credits': 0, 'fare': 1050, 'rider_rides': 0}, 101],\n   {'credit_used': 0, 'discount': 0, 'due': 1050, 'reason': 'expired'}),\n  ('normal control 2',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'pct',\n     'min_fare': 1050,\n     'uses_left': 0,\n     'value': 50},\n    {'credits': 0, 'fare': 1000, 'rider_rides': 0}, 100],\n   {'credit_used': 0, 'discount': 0, 'due': 1000, 'reason': 'exhausted'}),\n  ('normal control 3',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'pct',\n     'min_fare': 1000,\n     'uses_left': 1,\n     'value': 10},\n    {'credits': 0, 'fare': 2400, 'rider_rides': 0}, 100],\n   {'credit_used': 0, 'discount': 240, 'due': 2160, 'reason': None}),\n  ('normal control 4',\n   [{'cap': 300,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'flat',\n     'min_fare': 1000,\n     'uses_left': 1,\n     'value': 1000},\n    {'credits': 0, 'fare': 2400, 'rider_rides': 5}, 99],\n   {'credit_used': 0, 'discount': 0, 'due': 2400, 'reason': 'not_first'})]]\nfor label, args, expected in fixtures[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":"b2097dde6bf3fabdeccb68368a65f4c95631fc0d0959ad666fa6ad7bd97005c4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(promo, ride, now_day):\n    reason = None\n    if now_day > promo['expires_day']:\n        reason = 'expired'\n    elif promo['uses_left'] <= 0:\n        reason = 'exhausted'\n    elif promo['first_ride_only'] and ride['rider_rides'] > 0:\n        reason = 'not_first'\n    elif ride['fare'] < promo['min_fare']:\n        reason = 'min_fare'\n    disc = 0\n    if reason is None:\n        if promo['kind'] == 'pct':\n            disc = ride['fare'] * promo['value'] // 100\n            if promo['cap'] is not None:\n                disc = min(disc, promo['cap'])\n        else:\n            disc = min(promo['value'], ride['fare'])\n    credit = min(ride['credits'], ride['fare'] - disc)\n    return {'discount': disc, 'credit_used': credit, 'due': ride['fare'] - disc - credit, 'reason': reason}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: credits after discount',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 1050,\n     'uses_left': 3,\n     'value': 10},\n    {'credits': 5000, 'fare': 2400, 'rider_rides': 1}, 100],\n   {'credit_used': 2160, 'discount': 240, 'due': 0, 'reason': None}),\n  ('partial repair probe: credits after discount',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 0,\n     'uses_left': 1,\n     'value': 50},\n    {'credits': 5000, 'fare': 3459, 'rider_rides': 1}, 100],\n   {'credit_used': 1730, 'discount': 1729, 'due': 0, 'reason': None}),\n  ('second regression',\n   [{'cap': 0,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 1000,\n     'uses_left': 3,\n     'value': 2500},\n    {'credits': 5000, 'fare': 1099, 'rider_rides': 0}, 99],\n   {'credit_used': 0, 'discount': 1099, 'due': 0, 'reason': None}),\n  ('normal control 1',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 0,\n     'uses_left': 0,\n     'value': 25},\n    {'credits': 5000, 'fare': 1000, 'rider_rides': 5}, 100],\n   {'credit_used': 1000, 'discount': 0, 'due': 0, 'reason': 'exhausted'}),\n  ('normal control 2',\n   [{'cap': 300,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 1050,\n     'uses_left': 3,\n     'value': 10},\n    {'credits': 250, 'fare': 700, 'rider_rides': 5}, 99],\n   {'credit_used': 250, 'discount': 0, 'due': 450, 'reason': 'min_fare'}),\n  ('normal control 3',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 0,\n     'uses_left': 1,\n     'value': 2500},\n    {'credits': 0, 'fare': 700, 'rider_rides': 0}, 101],\n   {'credit_used': 0, 'discount': 0, 'due': 700, 'reason': 'expired'}),\n  ('normal control 4',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 0,\n     'uses_left': 0,\n     'value': 50},\n    {'credits': 0, 'fare': 1050, 'rider_rides': 5}, 101],\n   {'credit_used': 0, 'discount': 0, 'due': 1050, 'reason': 'expired'})],\n [('regression: credits after discount',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 1050,\n     'uses_left': 1,\n     'value': 50},\n    {'credits': 5000, 'fare': 3646, 'rider_rides': 5}, 100],\n   {'credit_used': 1823, 'discount': 1823, 'due': 0, 'reason': None}),\n  ('partial repair probe: credits after discount',\n   [{'cap': 300,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 1050,\n     'uses_left': 1,\n     'value': 2500},\n    {'credits': 250, 'fare': 3192, 'rider_rides': 0}, 100],\n   {'credit_used': 250, 'discount': 2500, 'due': 442, 'reason': None}),\n  ('second regression',\n   [{'cap': 300,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'pct',\n     'min_fare': 1000,\n     'uses_left': 1,\n     'value': 50},\n    {'credits': 5000, 'fare': 1099, 'rider_rides': 0}, 99],\n   {'credit_used': 799, 'discount': 300, 'due': 0, 'reason': None}),\n  ('normal control 1',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'flat',\n     'min_fare': 1050,\n     'uses_left': 3,\n     'value': 1000},\n    {'credits': 0, 'fare': 2400, 'rider_rides': 0}, 100],\n   {'credit_used': 0, 'discount': 1000, 'due': 1400, 'reason': None}),\n  ('normal control 2',\n   [{'cap': 0,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'flat',\n     'min_fare': 0,\n     'uses_left': 3,\n     'value': 2500},\n    {'credits': 5000, 'fare': 1099, 'rider_rides': 5}, 99],\n   {'credit_used': 1099, 'discount': 0, 'due': 0, 'reason': 'not_first'}),\n  ('normal control 3',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'pct',\n     'min_fare': 1050,\n     'uses_left': 3,\n     'value': 25},\n    {'credits': 0, 'fare': 2400, 'rider_rides': 0}, 99],\n   {'credit_used': 0, 'discount': 600, 'due': 1800, 'reason': None}),\n  ('normal control 4',\n   [{'cap': 0,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 0,\n     'uses_left': 0,\n     'value': 500},\n    {'credits': 0, 'fare': 632, 'rider_rides': 5}, 101],\n   {'credit_used': 0, 'discount': 0, 'due': 632, 'reason': 'expired'})],\n [('regression: credits after discount',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 1050,\n     'uses_left': 1,\n     'value': 2500},\n    {'credits': 250, 'fare': 1099, 'rider_rides': 1}, 100],\n   {'credit_used': 0, 'discount': 1099, 'due': 0, 'reason': None}),\n  ('partial repair probe: credits after discount',\n   [{'cap': 300,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 1000,\n     'uses_left': 1,\n     'value': 10},\n    {'credits': 250, 'fare': 2836, 'rider_rides': 0}, 99],\n   {'credit_used': 250, 'discount': 283, 'due': 2303, 'reason': None}),\n  ('second regression',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 1050,\n     'uses_left': 3,\n     'value': 1000},\n    {'credits': 5000, 'fare': 1099, 'rider_rides': 1}, 100],\n   {'credit_used': 99, 'discount': 1000, 'due': 0, 'reason': None}),\n  ('normal control 1',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 1000,\n     'uses_left': 1,\n     'value': 10},\n    {'credits': 0, 'fare': 1099, 'rider_rides': 0}, 100],\n   {'credit_used': 0, 'discount': 109, 'due': 990, 'reason': None}),\n  ('normal control 2',\n   [{'cap': 300,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 0,\n     'uses_left': 0,\n     'value': 500},\n    {'credits': 5000, 'fare': 1050, 'rider_rides': 5}, 100],\n   {'credit_used': 1050, 'discount': 0, 'due': 0, 'reason': 'exhausted'}),\n  ('normal control 3',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 1050,\n     'uses_left': 3,\n     'value': 50},\n    {'credits': 5000, 'fare': 1275, 'rider_rides': 0}, 101],\n   {'credit_used': 1275, 'discount': 0, 'due': 0, 'reason': 'expired'}),\n  ('normal control 4',\n   [{'cap': 0,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 0,\n     'uses_left': 3,\n     'value': 500},\n    {'credits': 0, 'fare': 1050, 'rider_rides': 0}, 100],\n   {'credit_used': 0, 'discount': 500, 'due': 550, 'reason': None})],\n [('regression: credits after discount',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 1000,\n     'uses_left': 3,\n     'value': 2500},\n    {'credits': 5000, 'fare': 2400, 'rider_rides': 0}, 100],\n   {'credit_used': 0, 'discount': 2400, 'due': 0, 'reason': None}),\n  ('partial repair probe: credits after discount',\n   [{'cap': 300,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 1050,\n     'uses_left': 3,\n     'value': 500},\n    {'credits': 5000, 'fare': 2400, 'rider_rides': 0}, 99],\n   {'credit_used': 1900, 'discount': 500, 'due': 0, 'reason': None}),\n  ('second regression',\n   [{'cap': 0,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 1000,\n     'uses_left': 3,\n     'value': 2500},\n    {'credits': 250, 'fare': 1000, 'rider_rides': 0}, 100],\n   {'credit_used': 0, 'discount': 1000, 'due': 0, 'reason': None}),\n  ('normal control 1',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'pct',\n     'min_fare': 0,\n     'uses_left': 3,\n     'value': 25},\n    {'credits': 0, 'fare': 1050, 'rider_rides': 0}, 100],\n   {'credit_used': 0, 'discount': 262, 'due': 788, 'reason': None}),\n  ('normal control 2',\n   [{'cap': 0,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 0,\n     'uses_left': 0,\n     'value': 50},\n    {'credits': 5000, 'fare': 1000, 'rider_rides': 1}, 100],\n   {'credit_used': 1000, 'discount': 0, 'due': 0, 'reason': 'exhausted'}),\n  ('normal control 3',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'flat',\n     'min_fare': 0,\n     'uses_left': 1,\n     'value': 2500},\n    {'credits': 0, 'fare': 700, 'rider_rides': 1}, 99],\n   {'credit_used': 0, 'discount': 0, 'due': 700, 'reason': 'not_first'}),\n  ('normal control 4',\n   [{'cap': 0,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'flat',\n     'min_fare': 1050,\n     'uses_left': 0,\n     'value': 2500},\n    {'credits': 5000, 'fare': 1050, 'rider_rides': 1}, 100],\n   {'credit_used': 1050, 'discount': 0, 'due': 0, 'reason': 'exhausted'})],\n [('regression: credits after discount',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 1050,\n     'uses_left': 1,\n     'value': 25},\n    {'credits': 5000, 'fare': 1050, 'rider_rides': 1}, 99],\n   {'credit_used': 788, 'discount': 262, 'due': 0, 'reason': None}),\n  ('partial repair probe: credits after discount',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 0,\n     'uses_left': 1,\n     'value': 25},\n    {'credits': 250, 'fare': 3234, 'rider_rides': 0}, 99],\n   {'credit_used': 250, 'discount': 808, 'due': 2176, 'reason': None}),\n  ('second regression',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'pct',\n     'min_fare': 0,\n     'uses_left': 1,\n     'value': 25},\n    {'credits': 5000, 'fare': 2400, 'rider_rides': 0}, 100],\n   {'credit_used': 1800, 'discount': 600, 'due': 0, 'reason': None}),\n  ('normal control 1',\n   [{'cap': 0,\n     'expires_day': 100,\n     'first_ride_only': False,\n     'kind': 'flat',\n     'min_fare': 0,\n     'uses_left': 3,\n     'value': 500},\n    {'credits': 0, 'fare': 1050, 'rider_rides': 0}, 101],\n   {'credit_used': 0, 'discount': 0, 'due': 1050, 'reason': 'expired'}),\n  ('normal control 2',\n   [{'cap': None,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'pct',\n     'min_fare': 1050,\n     'uses_left': 0,\n     'value': 50},\n    {'credits': 0, 'fare': 1000, 'rider_rides': 0}, 100],\n   {'credit_used': 0, 'discount': 0, 'due': 1000, 'reason': 'exhausted'}),\n  ('normal control 3',\n   [{'cap': 800,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'pct',\n     'min_fare': 1000,\n     'uses_left': 1,\n     'value': 10},\n    {'credits': 0, 'fare': 2400, 'rider_rides': 0}, 100],\n   {'credit_used': 0, 'discount': 240, 'due': 2160, 'reason': None}),\n  ('normal control 4',\n   [{'cap': 300,\n     'expires_day': 100,\n     'first_ride_only': True,\n     'kind': 'flat',\n     'min_fare': 1000,\n     'uses_left': 1,\n     'value': 1000},\n    {'credits': 0, 'fare': 2400, 'rider_rides': 5}, 99],\n   {'credit_used': 0, 'discount': 0, 'due': 2400, 'reason': 'not_first'})]]\nfor label, args, expected in fixtures[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 toy pricing contract stipulated for this example; it does not reproduce the pricing of any real ride-hailing operator or regulator. 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-ride-hailing-fare-surge-promo-and-credits-credits-after-discount","generated_at":"2026-09-29T14:50:41.847387+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Ride-hailing prices are computed per trip at scale; ordering, unit and boundary slips become systematic over- or under-charging.","repair":"Apply credits to the post-discount remainder.","root_cause":"Credit usage is limited by the full fare instead of the fare after discount.","sha256":"a54a3039821ffe6f33be975848a17dde7fd155ec36d4c015ac0465f5164e83d1","title":"Ride credits consumed on the pre-discount fare · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.519,"exit_code":1,"observations":[{"actual":{"credit_used":0,"discount":240,"due":2160,"reason":null},"check":"regression: credits after discount","expected":{"credit_used":2160,"discount":240,"due":0,"reason":null},"passed":false},{"actual":{"credit_used":0,"discount":1729,"due":1730,"reason":null},"check":"partial repair probe: credits after discount","expected":{"credit_used":1730,"discount":1729,"due":0,"reason":null},"passed":false},{"actual":{"credit_used":0,"discount":1099,"due":0,"reason":null},"check":"second regression","expected":{"credit_used":0,"discount":1099,"due":0,"reason":null},"passed":true},{"actual":{"credit_used":1000,"discount":0,"due":0,"reason":"exhausted"},"check":"normal control 1","expected":{"credit_used":1000,"discount":0,"due":0,"reason":"exhausted"},"passed":true},{"actual":{"credit_used":250,"discount":0,"due":450,"reason":"min_fare"},"check":"normal control 2","expected":{"credit_used":250,"discount":0,"due":450,"reason":"min_fare"},"passed":true},{"actual":{"credit_used":0,"discount":0,"due":700,"reason":"expired"},"check":"normal control 3","expected":{"credit_used":0,"discount":0,"due":700,"reason":"expired"},"passed":true},{"actual":{"credit_used":0,"discount":0,"due":1050,"reason":"expired"},"check":"normal control 4","expected":{"credit_used":0,"discount":0,"due":1050,"reason":"expired"},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: credits after discount\", \"actual\": {\"discount\": 240, \"credit_used\": 0, \"due\": 2160, \"reason\": null}, \"expected\": {\"credit_used\": 2160, \"discount\": 240, \"due\": 0, \"reason\": null}, \"passed\": false}, {\"check\": \"partial repair probe: credits after discount\", \"actual\": {\"discount\": 1729, \"credit_used\": 0, \"due\": 1730, \"reason\": null}, \"expected\": {\"credit_used\": 1730, \"discount\": 1729, \"due\": 0, \"reason\": null}, \"passed\": false}, {\"check\": \"second regression\", \"actual\": {\"discount\": 1099, \"credit_used\": 0, \"due\": 0, \"reason\": null}, \"expected\": {\"credit_used\": 0, \"discount\": 1099, \"due\": 0, \"reason\": null}, \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": {\"discount\": 0, \"credit_used\": 1000, \"due\": 0, \"reason\": \"exhausted\"}, \"expected\": {\"credit_used\": 1000, \"discount\": 0, \"due\": 0, \"reason\": \"exhausted\"}, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": {\"discount\": 0, \"credit_used\": 250, \"due\": 450, \"reason\": \"min_fare\"}, \"expected\": {\"credit_used\": 250, \"discount\": 0, \"due\": 450, \"reason\": \"min_fare\"}, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": {\"discount\": 0, \"credit_used\": 0, \"due\": 700, \"reason\": \"expired\"}, \"expected\": {\"credit_used\": 0, \"discount\": 0, \"due\": 700, \"reason\": \"expired\"}, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": {\"discount\": 0, \"credit_used\": 0, \"due\": 1050, \"reason\": \"expired\"}, \"expected\": {\"credit_used\": 0, \"discount\": 0, \"due\": 1050, \"reason\": \"expired\"}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.692,"exit_code":1,"observations":[{"actual":{"credit_used":2400,"discount":240,"due":-240,"reason":null},"check":"regression: credits after discount","expected":{"credit_used":2160,"discount":240,"due":0,"reason":null},"passed":false},{"actual":{"credit_used":3459,"discount":1729,"due":-1729,"reason":null},"check":"partial repair probe: credits after discount","expected":{"credit_used":1730,"discount":1729,"due":0,"reason":null},"passed":false},{"actual":{"credit_used":1099,"discount":1099,"due":-1099,"reason":null},"check":"second regression","expected":{"credit_used":0,"discount":1099,"due":0,"reason":null},"passed":false},{"actual":{"credit_used":1000,"discount":0,"due":0,"reason":"exhausted"},"check":"normal control 1","expected":{"credit_used":1000,"discount":0,"due":0,"reason":"exhausted"},"passed":true},{"actual":{"credit_used":250,"discount":0,"due":450,"reason":"min_fare"},"check":"normal control 2","expected":{"credit_used":250,"discount":0,"due":450,"reason":"min_fare"},"passed":true},{"actual":{"credit_used":0,"discount":0,"due":700,"reason":"expired"},"check":"normal control 3","expected":{"credit_used":0,"discount":0,"due":700,"reason":"expired"},"passed":true},{"actual":{"credit_used":0,"discount":0,"due":1050,"reason":"expired"},"check":"normal control 4","expected":{"credit_used":0,"discount":0,"due":1050,"reason":"expired"},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: credits after discount\", \"actual\": {\"discount\": 240, \"credit_used\": 2400, \"due\": -240, \"reason\": null}, \"expected\": {\"credit_used\": 2160, \"discount\": 240, \"due\": 0, \"reason\": null}, \"passed\": false}, {\"check\": \"partial repair probe: credits after discount\", \"actual\": {\"discount\": 1729, \"credit_used\": 3459, \"due\": -1729, \"reason\": null}, \"expected\": {\"credit_used\": 1730, \"discount\": 1729, \"due\": 0, \"reason\": null}, \"passed\": false}, {\"check\": \"second regression\", \"actual\": {\"discount\": 1099, \"credit_used\": 1099, \"due\": -1099, \"reason\": null}, \"expected\": {\"credit_used\": 0, \"discount\": 1099, \"due\": 0, \"reason\": null}, \"passed\": false}, {\"check\": \"normal control 1\", \"actual\": {\"discount\": 0, \"credit_used\": 1000, \"due\": 0, \"reason\": \"exhausted\"}, \"expected\": {\"credit_used\": 1000, \"discount\": 0, \"due\": 0, \"reason\": \"exhausted\"}, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": {\"discount\": 0, \"credit_used\": 250, \"due\": 450, \"reason\": \"min_fare\"}, \"expected\": {\"credit_used\": 250, \"discount\": 0, \"due\": 450, \"reason\": \"min_fare\"}, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": {\"discount\": 0, \"credit_used\": 0, \"due\": 700, \"reason\": \"expired\"}, \"expected\": {\"credit_used\": 0, \"discount\": 0, \"due\": 700, \"reason\": \"expired\"}, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": {\"discount\": 0, \"credit_used\": 0, \"due\": 1050, \"reason\": \"expired\"}, \"expected\": {\"credit_used\": 0, \"discount\": 0, \"due\": 1050, \"reason\": \"expired\"}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.373,"exit_code":0,"observations":[{"actual":{"credit_used":2160,"discount":240,"due":0,"reason":null},"check":"regression: credits after discount","expected":{"credit_used":2160,"discount":240,"due":0,"reason":null},"passed":true},{"actual":{"credit_used":1730,"discount":1729,"due":0,"reason":null},"check":"partial repair probe: credits after discount","expected":{"credit_used":1730,"discount":1729,"due":0,"reason":null},"passed":true},{"actual":{"credit_used":0,"discount":1099,"due":0,"reason":null},"check":"second regression","expected":{"credit_used":0,"discount":1099,"due":0,"reason":null},"passed":true},{"actual":{"credit_used":1000,"discount":0,"due":0,"reason":"exhausted"},"check":"normal control 1","expected":{"credit_used":1000,"discount":0,"due":0,"reason":"exhausted"},"passed":true},{"actual":{"credit_used":250,"discount":0,"due":450,"reason":"min_fare"},"check":"normal control 2","expected":{"credit_used":250,"discount":0,"due":450,"reason":"min_fare"},"passed":true},{"actual":{"credit_used":0,"discount":0,"due":700,"reason":"expired"},"check":"normal control 3","expected":{"credit_used":0,"discount":0,"due":700,"reason":"expired"},"passed":true},{"actual":{"credit_used":0,"discount":0,"due":1050,"reason":"expired"},"check":"normal control 4","expected":{"credit_used":0,"discount":0,"due":1050,"reason":"expired"},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: credits after discount\", \"actual\": {\"discount\": 240, \"credit_used\": 2160, \"due\": 0, \"reason\": null}, \"expected\": {\"credit_used\": 2160, \"discount\": 240, \"due\": 0, \"reason\": null}, \"passed\": true}, {\"check\": \"partial repair probe: credits after discount\", \"actual\": {\"discount\": 1729, \"credit_used\": 1730, \"due\": 0, \"reason\": null}, \"expected\": {\"credit_used\": 1730, \"discount\": 1729, \"due\": 0, \"reason\": null}, \"passed\": true}, {\"check\": \"second regression\", \"actual\": {\"discount\": 1099, \"credit_used\": 0, \"due\": 0, \"reason\": null}, \"expected\": {\"credit_used\": 0, \"discount\": 1099, \"due\": 0, \"reason\": null}, \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": {\"discount\": 0, \"credit_used\": 1000, \"due\": 0, \"reason\": \"exhausted\"}, \"expected\": {\"credit_used\": 1000, \"discount\": 0, \"due\": 0, \"reason\": \"exhausted\"}, \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": {\"discount\": 0, \"credit_used\": 250, \"due\": 450, \"reason\": \"min_fare\"}, \"expected\": {\"credit_used\": 250, \"discount\": 0, \"due\": 450, \"reason\": \"min_fare\"}, \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": {\"discount\": 0, \"credit_used\": 0, \"due\": 700, \"reason\": \"expired\"}, \"expected\": {\"credit_used\": 0, \"discount\": 0, \"due\": 700, \"reason\": \"expired\"}, \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": {\"discount\": 0, \"credit_used\": 0, \"due\": 1050, \"reason\": \"expired\"}, \"expected\": {\"credit_used\": 0, \"discount\": 0, \"due\": 1050, \"reason\": \"expired\"}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}