FAILURE MAP
← Case archive

FA-66661 / Airline fare rule evaluation / Open access

Cancellation fee eats into refundable taxes · case 01

A cheap ticket with a large penalty refunds less than its refundable government taxes.

Verified by executionVariant 1 · 9 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The zero floor is applied after taxes are added, so a negative fare portion reduces the tax refund.

VERIFIED REPAIR

Floor the fare portion at zero before adding refundable taxes.

Unsuccessful approach: Clamping only in the partial branch still lets the fee consume taxes on unused tickets.

Case contract

Input {'paid' base fare,'cancel_fee','used_fare','status' UNUSED|PARTIAL,'taxes':[[code, amount, refundable, used]]}. Fare portion = paid - cancel fee - (used fare only when PARTIAL), floored at 0 before taxes are added. Taxes are refunded only if refundable and not used. Return refund rounded 2.

Why this case matters

Refund calculation must keep the penalty from consuming refundable taxes and must only deduct usage for partially flown tickets.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    paid = x['paid']
    fare_part = paid - x['cancel_fee']
    if x['status'] == 'PARTIAL':
        fare_part -= x['used_fare']
    taxes = sum(a for code, a, refundable, used in x['taxes'] if refundable and not used)
    return round(max(0.0, fare_part + taxes), 2)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['unused refundable', {'paid': 481.0, 'cancel_fee': 100.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 37.2, True, False], ['YQ', 80.0, False, False]]}, 418.2], ['partial with used taxes', {'paid': 900.0, 'cancel_fee': 150.0, 'used_fare': 421.0, 'status': 'PARTIAL', 'taxes': [['US', 37.2, True, False], ['XF', 4.5, True, True], ['YQ', 80.0, False, False], ['AY', 5.6, True, True]]}, 366.2], ['fee larger than fare', {'paid': 90.0, 'cancel_fee': 150.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 38.2, True, False]]}, 38.2], ['used portion exceeds paid', {'paid': 300.0, 'cancel_fee': 50.0, 'used_fare': 310.0, 'status': 'PARTIAL', 'taxes': [['US', 18.6, True, False], ['XF', 4.5, True, True]]}, 18.6], ['unused with stale used estimate', {'paid': 650.0, 'cancel_fee': 0.0, 'used_fare': 201.0, 'status': 'UNUSED', 'taxes': [['US', 20.0, True, False]]}, 670.0], ['non-refundable carrier charges', {'paid': 700.0, 'cancel_fee': 75.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['YQ', 120.0, False, False], ['GB', 27.0, True, False]]}, 652.0], ['sampled case 1', {'paid': 386.27, 'cancel_fee': 250.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 51.02, True, False], ['YQ', 5.59, False, False], ['XF', 3.57, True, False], ['DE', 99.09, True, False]]}, 289.95], ['sampled case 2', {'paid': 1007.21, 'cancel_fee': 50.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['XF', 29.38, True, False]]}, 986.59], ['sampled case 3', {'paid': 176.19, 'cancel_fee': 0.0, 'used_fare': 203.14, 'status': 'PARTIAL', 'taxes': [['DE', 94.53, True, True], ['GB', 107.54, False, True], ['XF', 23.26, True, True]]}, 0.0]], [['unused refundable', {'paid': 482.0, 'cancel_fee': 100.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 37.2, True, False], ['YQ', 80.0, False, False]]}, 419.2], ['partial with used taxes', {'paid': 900.0, 'cancel_fee': 150.0, 'used_fare': 422.0, 'status': 'PARTIAL', 'taxes': [['US', 37.2, True, False], ['XF', 4.5, True, True], ['YQ', 80.0, False, False], ['AY', 5.6, True, True]]}, 365.2], ['fee larger than fare', {'paid': 90.0, 'cancel_fee': 150.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 39.2, True, False]]}, 39.2], ['used portion exceeds paid', {'paid': 300.0, 'cancel_fee': 50.0, 'used_fare': 310.0, 'status': 'PARTIAL', 'taxes': [['US', 18.6, True, False], ['XF', 4.5, True, True]]}, 18.6], ['unused with stale used estimate', {'paid': 650.0, 'cancel_fee': 0.0, 'used_fare': 202.0, 'status': 'UNUSED', 'taxes': [['US', 20.0, True, False]]}, 670.0], ['non-refundable carrier charges', {'paid': 700.0, 'cancel_fee': 75.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['YQ', 120.0, False, False], ['GB', 28.0, True, False]]}, 653.0], ['sampled case 1', {'paid': 1076.29, 'cancel_fee': 50.0, 'used_fare': 538.9, 'status': 'PARTIAL', 'taxes': [['YQ', 84.65, True, False], ['XF', 108.03, True, False]]}, 680.07], ['sampled case 2', {'paid': 193.38, 'cancel_fee': 250.0, 'used_fare': 218.71, 'status': 'PARTIAL', 'taxes': [['YQ', 67.48, True, False], ['GB', 86.2, True, False], ['AY', 96.45, True, False]]}, 250.13], ['sampled case 3', {'paid': 640.4, 'cancel_fee': 150.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['AY', 115.97, True, False], ['DE', 57.82, False, False]]}, 606.37]], [['unused refundable', {'paid': 483.0, 'cancel_fee': 100.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 37.2, True, False], ['YQ', 80.0, False, False]]}, 420.2], ['partial with used taxes', {'paid': 900.0, 'cancel_fee': 150.0, 'used_fare': 423.0, 'status': 'PARTIAL', 'taxes': [['US', 37.2, True, False], ['XF', 4.5, True, True], ['YQ', 80.0, False, False], ['AY', 5.6, True, True]]}, 364.2], ['fee larger than fare', {'paid': 90.0, 'cancel_fee': 150.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 40.2, True, False]]}, 40.2], ['used portion exceeds paid', {'paid': 300.0, 'cancel_fee': 50.0, 'used_fare': 310.0, 'status': 'PARTIAL', 'taxes': [['US', 18.6, True, False], ['XF', 4.5, True, True]]}, 18.6], ['unused with stale used estimate', {'paid': 650.0, 'cancel_fee': 0.0, 'used_fare': 203.0, 'status': 'UNUSED', 'taxes': [['US', 20.0, True, False]]}, 670.0], ['non-refundable carrier charges', {'paid': 700.0, 'cancel_fee': 75.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['YQ', 120.0, False, False], ['GB', 29.0, True, False]]}, 654.0], ['sampled case 1', {'paid': 502.45, 'cancel_fee': 100.0, 'used_fare': 464.12, 'status': 'PARTIAL', 'taxes': [['US', 99.3, False, True], ['AY', 85.33, True, True], ['DE', 48.94, True, False]]}, 48.94], ['sampled case 2', {'paid': 638.36, 'cancel_fee': 150.0, 'used_fare': 498.2, 'status': 'PARTIAL', 'taxes': [['GB', 89.81, True, False], ['US', 67.48, False, True]]}, 89.81], ['sampled case 3', {'paid': 311.77, 'cancel_fee': 50.0, 'used_fare': 120.66, 'status': 'PARTIAL', 'taxes': []}, 141.11]], [['unused refundable', {'paid': 484.0, 'cancel_fee': 100.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 37.2, True, False], ['YQ', 80.0, False, False]]}, 421.2], ['partial with used taxes', {'paid': 900.0, 'cancel_fee': 150.0, 'used_fare': 424.0, 'status': 'PARTIAL', 'taxes': [['US', 37.2, True, False], ['XF', 4.5, True, True], ['YQ', 80.0, False, False], ['AY', 5.6, True, True]]}, 363.2], ['fee larger than fare', {'paid': 90.0, 'cancel_fee': 150.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 41.2, True, False]]}, 41.2], ['used portion exceeds paid', {'paid': 300.0, 'cancel_fee': 50.0, 'used_fare': 310.0, 'status': 'PARTIAL', 'taxes': [['US', 18.6, True, False], ['XF', 4.5, True, True]]}, 18.6], ['unused with stale used estimate', {'paid': 650.0, 'cancel_fee': 0.0, 'used_fare': 204.0, 'status': 'UNUSED', 'taxes': [['US', 20.0, True, False]]}, 670.0], ['non-refundable carrier charges', {'paid': 700.0, 'cancel_fee': 75.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['YQ', 120.0, False, False], ['GB', 30.0, True, False]]}, 655.0], ['sampled case 1', {'paid': 716.18, 'cancel_fee': 50.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['YQ', 62.57, True, False], ['US', 60.18, True, False], ['AY', 40.23, True, False]]}, 829.16], ['sampled case 2', {'paid': 304.89, 'cancel_fee': 250.0, 'used_fare': 353.1, 'status': 'PARTIAL', 'taxes': [['DE', 109.57, False, True], ['YQ', 82.61, True, False]]}, 82.61], ['sampled case 3', {'paid': 1425.61, 'cancel_fee': 100.0, 'used_fare': 1346.54, 'status': 'PARTIAL', 'taxes': [['GB', 93.65, True, False], ['AY', 56.1, True, True], ['DE', 105.73, False, False]]}, 93.65]], [['unused refundable', {'paid': 485.0, 'cancel_fee': 100.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 37.2, True, False], ['YQ', 80.0, False, False]]}, 422.2], ['partial with used taxes', {'paid': 900.0, 'cancel_fee': 150.0, 'used_fare': 425.0, 'status': 'PARTIAL', 'taxes': [['US', 37.2, True, False], ['XF', 4.5, True, True], ['YQ', 80.0, False, False], ['AY', 5.6, True, True]]}, 362.2], ['fee larger than fare', {'paid': 90.0, 'cancel_fee': 150.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 42.2, True, False]]}, 42.2], ['used portion exceeds paid', {'paid': 300.0, 'cancel_fee': 50.0, 'used_fare': 310.0, 'status': 'PARTIAL', 'taxes': [['US', 18.6, True, False], ['XF', 4.5, True, True]]}, 18.6], ['unused with stale used estimate', {'paid': 650.0, 'cancel_fee': 0.0, 'used_fare': 205.0, 'status': 'UNUSED', 'taxes': [['US', 20.0, True, False]]}, 670.0], ['non-refundable carrier charges', {'paid': 700.0, 'cancel_fee': 75.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['YQ', 120.0, False, False], ['GB', 31.0, True, False]]}, 656.0], ['sampled case 1', {'paid': 1477.45, 'cancel_fee': 100.0, 'used_fare': 1174.26, 'status': 'PARTIAL', 'taxes': [['AY', 80.91, True, True], ['XF', 91.97, True, False]]}, 295.16], ['sampled case 2', {'paid': 441.62, 'cancel_fee': 50.0, 'used_fare': 285.82, 'status': 'PARTIAL', 'taxes': []}, 105.8], ['sampled case 3', {'paid': 1459.32, 'cancel_fee': 50.0, 'used_fare': 1488.81, 'status': 'PARTIAL', 'taxes': [['YQ', 64.57, False, True]]}, 0.0]]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
unused refundable418.2418.2Passed
partial with used taxes366.2366.2Passed
fee larger than fare0.038.2Failed
used portion exceeds paid0.018.6Failed
unused with stale used estimate670.0670.0Passed
non-refundable carrier charges652.0652.0Passed
sampled case 1289.95289.95Passed
sampled case 2986.59986.59Passed
sampled case 30.00.0Passed

SHA-256 / fe885c83c3a40bd554f2dd2848390ea809eca4e4dcbf1060b1885165a32d5b09

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    paid = x['paid']
    fare_part = paid - x['cancel_fee']
    if x['status'] == 'PARTIAL':
        fare_part = max(0.0, fare_part - x['used_fare'])
    taxes = sum(a for code, a, refundable, used in x['taxes'] if refundable and not used)
    return round(fare_part + taxes, 2)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['unused refundable', {'paid': 481.0, 'cancel_fee': 100.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 37.2, True, False], ['YQ', 80.0, False, False]]}, 418.2], ['partial with used taxes', {'paid': 900.0, 'cancel_fee': 150.0, 'used_fare': 421.0, 'status': 'PARTIAL', 'taxes': [['US', 37.2, True, False], ['XF', 4.5, True, True], ['YQ', 80.0, False, False], ['AY', 5.6, True, True]]}, 366.2], ['fee larger than fare', {'paid': 90.0, 'cancel_fee': 150.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 38.2, True, False]]}, 38.2], ['used portion exceeds paid', {'paid': 300.0, 'cancel_fee': 50.0, 'used_fare': 310.0, 'status': 'PARTIAL', 'taxes': [['US', 18.6, True, False], ['XF', 4.5, True, True]]}, 18.6], ['unused with stale used estimate', {'paid': 650.0, 'cancel_fee': 0.0, 'used_fare': 201.0, 'status': 'UNUSED', 'taxes': [['US', 20.0, True, False]]}, 670.0], ['non-refundable carrier charges', {'paid': 700.0, 'cancel_fee': 75.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['YQ', 120.0, False, False], ['GB', 27.0, True, False]]}, 652.0], ['sampled case 1', {'paid': 386.27, 'cancel_fee': 250.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 51.02, True, False], ['YQ', 5.59, False, False], ['XF', 3.57, True, False], ['DE', 99.09, True, False]]}, 289.95], ['sampled case 2', {'paid': 1007.21, 'cancel_fee': 50.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['XF', 29.38, True, False]]}, 986.59], ['sampled case 3', {'paid': 176.19, 'cancel_fee': 0.0, 'used_fare': 203.14, 'status': 'PARTIAL', 'taxes': [['DE', 94.53, True, True], ['GB', 107.54, False, True], ['XF', 23.26, True, True]]}, 0.0]], [['unused refundable', {'paid': 482.0, 'cancel_fee': 100.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 37.2, True, False], ['YQ', 80.0, False, False]]}, 419.2], ['partial with used taxes', {'paid': 900.0, 'cancel_fee': 150.0, 'used_fare': 422.0, 'status': 'PARTIAL', 'taxes': [['US', 37.2, True, False], ['XF', 4.5, True, True], ['YQ', 80.0, False, False], ['AY', 5.6, True, True]]}, 365.2], ['fee larger than fare', {'paid': 90.0, 'cancel_fee': 150.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 39.2, True, False]]}, 39.2], ['used portion exceeds paid', {'paid': 300.0, 'cancel_fee': 50.0, 'used_fare': 310.0, 'status': 'PARTIAL', 'taxes': [['US', 18.6, True, False], ['XF', 4.5, True, True]]}, 18.6], ['unused with stale used estimate', {'paid': 650.0, 'cancel_fee': 0.0, 'used_fare': 202.0, 'status': 'UNUSED', 'taxes': [['US', 20.0, True, False]]}, 670.0], ['non-refundable carrier charges', {'paid': 700.0, 'cancel_fee': 75.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['YQ', 120.0, False, False], ['GB', 28.0, True, False]]}, 653.0], ['sampled case 1', {'paid': 1076.29, 'cancel_fee': 50.0, 'used_fare': 538.9, 'status': 'PARTIAL', 'taxes': [['YQ', 84.65, True, False], ['XF', 108.03, True, False]]}, 680.07], ['sampled case 2', {'paid': 193.38, 'cancel_fee': 250.0, 'used_fare': 218.71, 'status': 'PARTIAL', 'taxes': [['YQ', 67.48, True, False], ['GB', 86.2, True, False], ['AY', 96.45, True, False]]}, 250.13], ['sampled case 3', {'paid': 640.4, 'cancel_fee': 150.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['AY', 115.97, True, False], ['DE', 57.82, False, False]]}, 606.37]], [['unused refundable', {'paid': 483.0, 'cancel_fee': 100.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 37.2, True, False], ['YQ', 80.0, False, False]]}, 420.2], ['partial with used taxes', {'paid': 900.0, 'cancel_fee': 150.0, 'used_fare': 423.0, 'status': 'PARTIAL', 'taxes': [['US', 37.2, True, False], ['XF', 4.5, True, True], ['YQ', 80.0, False, False], ['AY', 5.6, True, True]]}, 364.2], ['fee larger than fare', {'paid': 90.0, 'cancel_fee': 150.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 40.2, True, False]]}, 40.2], ['used portion exceeds paid', {'paid': 300.0, 'cancel_fee': 50.0, 'used_fare': 310.0, 'status': 'PARTIAL', 'taxes': [['US', 18.6, True, False], ['XF', 4.5, True, True]]}, 18.6], ['unused with stale used estimate', {'paid': 650.0, 'cancel_fee': 0.0, 'used_fare': 203.0, 'status': 'UNUSED', 'taxes': [['US', 20.0, True, False]]}, 670.0], ['non-refundable carrier charges', {'paid': 700.0, 'cancel_fee': 75.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['YQ', 120.0, False, False], ['GB', 29.0, True, False]]}, 654.0], ['sampled case 1', {'paid': 502.45, 'cancel_fee': 100.0, 'used_fare': 464.12, 'status': 'PARTIAL', 'taxes': [['US', 99.3, False, True], ['AY', 85.33, True, True], ['DE', 48.94, True, False]]}, 48.94], ['sampled case 2', {'paid': 638.36, 'cancel_fee': 150.0, 'used_fare': 498.2, 'status': 'PARTIAL', 'taxes': [['GB', 89.81, True, False], ['US', 67.48, False, True]]}, 89.81], ['sampled case 3', {'paid': 311.77, 'cancel_fee': 50.0, 'used_fare': 120.66, 'status': 'PARTIAL', 'taxes': []}, 141.11]], [['unused refundable', {'paid': 484.0, 'cancel_fee': 100.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 37.2, True, False], ['YQ', 80.0, False, False]]}, 421.2], ['partial with used taxes', {'paid': 900.0, 'cancel_fee': 150.0, 'used_fare': 424.0, 'status': 'PARTIAL', 'taxes': [['US', 37.2, True, False], ['XF', 4.5, True, True], ['YQ', 80.0, False, False], ['AY', 5.6, True, True]]}, 363.2], ['fee larger than fare', {'paid': 90.0, 'cancel_fee': 150.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 41.2, True, False]]}, 41.2], ['used portion exceeds paid', {'paid': 300.0, 'cancel_fee': 50.0, 'used_fare': 310.0, 'status': 'PARTIAL', 'taxes': [['US', 18.6, True, False], ['XF', 4.5, True, True]]}, 18.6], ['unused with stale used estimate', {'paid': 650.0, 'cancel_fee': 0.0, 'used_fare': 204.0, 'status': 'UNUSED', 'taxes': [['US', 20.0, True, False]]}, 670.0], ['non-refundable carrier charges', {'paid': 700.0, 'cancel_fee': 75.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['YQ', 120.0, False, False], ['GB', 30.0, True, False]]}, 655.0], ['sampled case 1', {'paid': 716.18, 'cancel_fee': 50.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['YQ', 62.57, True, False], ['US', 60.18, True, False], ['AY', 40.23, True, False]]}, 829.16], ['sampled case 2', {'paid': 304.89, 'cancel_fee': 250.0, 'used_fare': 353.1, 'status': 'PARTIAL', 'taxes': [['DE', 109.57, False, True], ['YQ', 82.61, True, False]]}, 82.61], ['sampled case 3', {'paid': 1425.61, 'cancel_fee': 100.0, 'used_fare': 1346.54, 'status': 'PARTIAL', 'taxes': [['GB', 93.65, True, False], ['AY', 56.1, True, True], ['DE', 105.73, False, False]]}, 93.65]], [['unused refundable', {'paid': 485.0, 'cancel_fee': 100.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 37.2, True, False], ['YQ', 80.0, False, False]]}, 422.2], ['partial with used taxes', {'paid': 900.0, 'cancel_fee': 150.0, 'used_fare': 425.0, 'status': 'PARTIAL', 'taxes': [['US', 37.2, True, False], ['XF', 4.5, True, True], ['YQ', 80.0, False, False], ['AY', 5.6, True, True]]}, 362.2], ['fee larger than fare', {'paid': 90.0, 'cancel_fee': 150.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 42.2, True, False]]}, 42.2], ['used portion exceeds paid', {'paid': 300.0, 'cancel_fee': 50.0, 'used_fare': 310.0, 'status': 'PARTIAL', 'taxes': [['US', 18.6, True, False], ['XF', 4.5, True, True]]}, 18.6], ['unused with stale used estimate', {'paid': 650.0, 'cancel_fee': 0.0, 'used_fare': 205.0, 'status': 'UNUSED', 'taxes': [['US', 20.0, True, False]]}, 670.0], ['non-refundable carrier charges', {'paid': 700.0, 'cancel_fee': 75.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['YQ', 120.0, False, False], ['GB', 31.0, True, False]]}, 656.0], ['sampled case 1', {'paid': 1477.45, 'cancel_fee': 100.0, 'used_fare': 1174.26, 'status': 'PARTIAL', 'taxes': [['AY', 80.91, True, True], ['XF', 91.97, True, False]]}, 295.16], ['sampled case 2', {'paid': 441.62, 'cancel_fee': 50.0, 'used_fare': 285.82, 'status': 'PARTIAL', 'taxes': []}, 105.8], ['sampled case 3', {'paid': 1459.32, 'cancel_fee': 50.0, 'used_fare': 1488.81, 'status': 'PARTIAL', 'taxes': [['YQ', 64.57, False, True]]}, 0.0]]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
unused refundable418.2418.2Passed
partial with used taxes366.2366.2Passed
fee larger than fare-21.838.2Failed
used portion exceeds paid18.618.6Passed
unused with stale used estimate670.0670.0Passed
non-refundable carrier charges652.0652.0Passed
sampled case 1289.95289.95Passed
sampled case 2986.59986.59Passed
sampled case 30.00.0Passed

SHA-256 / 90eddeee4b0d72bc6dcbc9ff7001edd8fa92750512ab6c6740598b4062345550

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    paid = x['paid']
    fare_part = paid - x['cancel_fee']
    if x['status'] == 'PARTIAL':
        fare_part -= x['used_fare']
    fare_part = max(0.0, fare_part)
    taxes = sum(a for code, a, refundable, used in x['taxes'] if refundable and not used)
    return round(fare_part + taxes, 2)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['unused refundable', {'paid': 481.0, 'cancel_fee': 100.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 37.2, True, False], ['YQ', 80.0, False, False]]}, 418.2], ['partial with used taxes', {'paid': 900.0, 'cancel_fee': 150.0, 'used_fare': 421.0, 'status': 'PARTIAL', 'taxes': [['US', 37.2, True, False], ['XF', 4.5, True, True], ['YQ', 80.0, False, False], ['AY', 5.6, True, True]]}, 366.2], ['fee larger than fare', {'paid': 90.0, 'cancel_fee': 150.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 38.2, True, False]]}, 38.2], ['used portion exceeds paid', {'paid': 300.0, 'cancel_fee': 50.0, 'used_fare': 310.0, 'status': 'PARTIAL', 'taxes': [['US', 18.6, True, False], ['XF', 4.5, True, True]]}, 18.6], ['unused with stale used estimate', {'paid': 650.0, 'cancel_fee': 0.0, 'used_fare': 201.0, 'status': 'UNUSED', 'taxes': [['US', 20.0, True, False]]}, 670.0], ['non-refundable carrier charges', {'paid': 700.0, 'cancel_fee': 75.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['YQ', 120.0, False, False], ['GB', 27.0, True, False]]}, 652.0], ['sampled case 1', {'paid': 386.27, 'cancel_fee': 250.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 51.02, True, False], ['YQ', 5.59, False, False], ['XF', 3.57, True, False], ['DE', 99.09, True, False]]}, 289.95], ['sampled case 2', {'paid': 1007.21, 'cancel_fee': 50.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['XF', 29.38, True, False]]}, 986.59], ['sampled case 3', {'paid': 176.19, 'cancel_fee': 0.0, 'used_fare': 203.14, 'status': 'PARTIAL', 'taxes': [['DE', 94.53, True, True], ['GB', 107.54, False, True], ['XF', 23.26, True, True]]}, 0.0]], [['unused refundable', {'paid': 482.0, 'cancel_fee': 100.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 37.2, True, False], ['YQ', 80.0, False, False]]}, 419.2], ['partial with used taxes', {'paid': 900.0, 'cancel_fee': 150.0, 'used_fare': 422.0, 'status': 'PARTIAL', 'taxes': [['US', 37.2, True, False], ['XF', 4.5, True, True], ['YQ', 80.0, False, False], ['AY', 5.6, True, True]]}, 365.2], ['fee larger than fare', {'paid': 90.0, 'cancel_fee': 150.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 39.2, True, False]]}, 39.2], ['used portion exceeds paid', {'paid': 300.0, 'cancel_fee': 50.0, 'used_fare': 310.0, 'status': 'PARTIAL', 'taxes': [['US', 18.6, True, False], ['XF', 4.5, True, True]]}, 18.6], ['unused with stale used estimate', {'paid': 650.0, 'cancel_fee': 0.0, 'used_fare': 202.0, 'status': 'UNUSED', 'taxes': [['US', 20.0, True, False]]}, 670.0], ['non-refundable carrier charges', {'paid': 700.0, 'cancel_fee': 75.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['YQ', 120.0, False, False], ['GB', 28.0, True, False]]}, 653.0], ['sampled case 1', {'paid': 1076.29, 'cancel_fee': 50.0, 'used_fare': 538.9, 'status': 'PARTIAL', 'taxes': [['YQ', 84.65, True, False], ['XF', 108.03, True, False]]}, 680.07], ['sampled case 2', {'paid': 193.38, 'cancel_fee': 250.0, 'used_fare': 218.71, 'status': 'PARTIAL', 'taxes': [['YQ', 67.48, True, False], ['GB', 86.2, True, False], ['AY', 96.45, True, False]]}, 250.13], ['sampled case 3', {'paid': 640.4, 'cancel_fee': 150.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['AY', 115.97, True, False], ['DE', 57.82, False, False]]}, 606.37]], [['unused refundable', {'paid': 483.0, 'cancel_fee': 100.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 37.2, True, False], ['YQ', 80.0, False, False]]}, 420.2], ['partial with used taxes', {'paid': 900.0, 'cancel_fee': 150.0, 'used_fare': 423.0, 'status': 'PARTIAL', 'taxes': [['US', 37.2, True, False], ['XF', 4.5, True, True], ['YQ', 80.0, False, False], ['AY', 5.6, True, True]]}, 364.2], ['fee larger than fare', {'paid': 90.0, 'cancel_fee': 150.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 40.2, True, False]]}, 40.2], ['used portion exceeds paid', {'paid': 300.0, 'cancel_fee': 50.0, 'used_fare': 310.0, 'status': 'PARTIAL', 'taxes': [['US', 18.6, True, False], ['XF', 4.5, True, True]]}, 18.6], ['unused with stale used estimate', {'paid': 650.0, 'cancel_fee': 0.0, 'used_fare': 203.0, 'status': 'UNUSED', 'taxes': [['US', 20.0, True, False]]}, 670.0], ['non-refundable carrier charges', {'paid': 700.0, 'cancel_fee': 75.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['YQ', 120.0, False, False], ['GB', 29.0, True, False]]}, 654.0], ['sampled case 1', {'paid': 502.45, 'cancel_fee': 100.0, 'used_fare': 464.12, 'status': 'PARTIAL', 'taxes': [['US', 99.3, False, True], ['AY', 85.33, True, True], ['DE', 48.94, True, False]]}, 48.94], ['sampled case 2', {'paid': 638.36, 'cancel_fee': 150.0, 'used_fare': 498.2, 'status': 'PARTIAL', 'taxes': [['GB', 89.81, True, False], ['US', 67.48, False, True]]}, 89.81], ['sampled case 3', {'paid': 311.77, 'cancel_fee': 50.0, 'used_fare': 120.66, 'status': 'PARTIAL', 'taxes': []}, 141.11]], [['unused refundable', {'paid': 484.0, 'cancel_fee': 100.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 37.2, True, False], ['YQ', 80.0, False, False]]}, 421.2], ['partial with used taxes', {'paid': 900.0, 'cancel_fee': 150.0, 'used_fare': 424.0, 'status': 'PARTIAL', 'taxes': [['US', 37.2, True, False], ['XF', 4.5, True, True], ['YQ', 80.0, False, False], ['AY', 5.6, True, True]]}, 363.2], ['fee larger than fare', {'paid': 90.0, 'cancel_fee': 150.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 41.2, True, False]]}, 41.2], ['used portion exceeds paid', {'paid': 300.0, 'cancel_fee': 50.0, 'used_fare': 310.0, 'status': 'PARTIAL', 'taxes': [['US', 18.6, True, False], ['XF', 4.5, True, True]]}, 18.6], ['unused with stale used estimate', {'paid': 650.0, 'cancel_fee': 0.0, 'used_fare': 204.0, 'status': 'UNUSED', 'taxes': [['US', 20.0, True, False]]}, 670.0], ['non-refundable carrier charges', {'paid': 700.0, 'cancel_fee': 75.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['YQ', 120.0, False, False], ['GB', 30.0, True, False]]}, 655.0], ['sampled case 1', {'paid': 716.18, 'cancel_fee': 50.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['YQ', 62.57, True, False], ['US', 60.18, True, False], ['AY', 40.23, True, False]]}, 829.16], ['sampled case 2', {'paid': 304.89, 'cancel_fee': 250.0, 'used_fare': 353.1, 'status': 'PARTIAL', 'taxes': [['DE', 109.57, False, True], ['YQ', 82.61, True, False]]}, 82.61], ['sampled case 3', {'paid': 1425.61, 'cancel_fee': 100.0, 'used_fare': 1346.54, 'status': 'PARTIAL', 'taxes': [['GB', 93.65, True, False], ['AY', 56.1, True, True], ['DE', 105.73, False, False]]}, 93.65]], [['unused refundable', {'paid': 485.0, 'cancel_fee': 100.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 37.2, True, False], ['YQ', 80.0, False, False]]}, 422.2], ['partial with used taxes', {'paid': 900.0, 'cancel_fee': 150.0, 'used_fare': 425.0, 'status': 'PARTIAL', 'taxes': [['US', 37.2, True, False], ['XF', 4.5, True, True], ['YQ', 80.0, False, False], ['AY', 5.6, True, True]]}, 362.2], ['fee larger than fare', {'paid': 90.0, 'cancel_fee': 150.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['US', 42.2, True, False]]}, 42.2], ['used portion exceeds paid', {'paid': 300.0, 'cancel_fee': 50.0, 'used_fare': 310.0, 'status': 'PARTIAL', 'taxes': [['US', 18.6, True, False], ['XF', 4.5, True, True]]}, 18.6], ['unused with stale used estimate', {'paid': 650.0, 'cancel_fee': 0.0, 'used_fare': 205.0, 'status': 'UNUSED', 'taxes': [['US', 20.0, True, False]]}, 670.0], ['non-refundable carrier charges', {'paid': 700.0, 'cancel_fee': 75.0, 'used_fare': 0.0, 'status': 'UNUSED', 'taxes': [['YQ', 120.0, False, False], ['GB', 31.0, True, False]]}, 656.0], ['sampled case 1', {'paid': 1477.45, 'cancel_fee': 100.0, 'used_fare': 1174.26, 'status': 'PARTIAL', 'taxes': [['AY', 80.91, True, True], ['XF', 91.97, True, False]]}, 295.16], ['sampled case 2', {'paid': 441.62, 'cancel_fee': 50.0, 'used_fare': 285.82, 'status': 'PARTIAL', 'taxes': []}, 105.8], ['sampled case 3', {'paid': 1459.32, 'cancel_fee': 50.0, 'used_fare': 1488.81, 'status': 'PARTIAL', 'taxes': [['YQ', 64.57, False, True]]}, 0.0]]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
unused refundable418.2418.2Passed
partial with used taxes366.2366.2Passed
fee larger than fare38.238.2Passed
used portion exceeds paid18.618.6Passed
unused with stale used estimate670.0670.0Passed
non-refundable carrier charges652.0652.0Passed
sampled case 1289.95289.95Passed
sampled case 2986.59986.59Passed
sampled case 30.00.0Passed

SHA-256 / 94c095d4077458e51e26581d568d95ccd7f31881600937aa01535af2b5a89d70

Verification & scope

A stipulated toy fare-rule contract with invented constants; it is not an ATPCO or carrier tariff implementation and makes no claim of industry-standard conformance. 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.

Observations recorded using Python 3.12.14 at 2026-09-29T14:47:45.639164+00:00.

Case digest / 6edcb2bf2a2b9f57a9860d149da25da35a9bb0bd6e79fb3216fdff9bb4cd4092