FAILURE MAP
← Case archive

FA-66671 / Airline fare rule evaluation / Open access

Non-refundable charges refunded on fully unused tickets · case 01

An unused ticket refunds its non-refundable carrier-imposed charge.

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

ROOT CAUSE

The refundability flag is bypassed for UNUSED status.

VERIFIED REPAIR

Apply the refundable flag regardless of ticket status.

Unsuccessful approach: Dropping the used check as well also refunds taxes on flown coupons.

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']
    fare_part = max(0.0, fare_part)
    taxes = sum(a for code, a, refundable, used in x['taxes'] if (refundable or x['status'] == 'UNUSED') 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 refundable498.2418.2Failed
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 charges772.0652.0Failed
sampled case 1295.54289.95Failed
sampled case 2986.59986.59Passed
sampled case 30.00.0Passed

SHA-256 / dc135aabf0d3936f84e76e9c6b9c2f558fe364454c34b3d88dd253764a14f9fd

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 -= x['used_fare']
    fare_part = max(0.0, fare_part)
    taxes = sum(a for code, a, refundable, used in x['taxes'] if refundable or x['status'] == 'UNUSED')
    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 refundable498.2418.2Failed
partial with used taxes376.3366.2Failed
fee larger than fare38.238.2Passed
used portion exceeds paid23.118.6Failed
unused with stale used estimate670.0670.0Passed
non-refundable carrier charges772.0652.0Failed
sampled case 1295.54289.95Failed
sampled case 2986.59986.59Passed
sampled case 3117.790.0Failed

SHA-256 / 6031672cb21890e85b39fd992e4c9d319040b874a806f3026d6a10b32fe52dca

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.954785+00:00.

Case digest / c7323e78954c0ac0a70936296932f41869de29180daf9fa41e17999f2dd4ff13