FA-61621 / Options payoff and settlement / Open access
Uncovered short option margin requirement: the put minimum uses the underlying price · case 01
Put minimums are wrong whenever the underlying differs from the strike.
ROOT CAUSE
The floor base is the underlying for every kind.
VERIFIED REPAIR
Puts use 10% of the strike as the minimum.
Unsuccessful approach: Using the strike for calls too moves the error to calls.
Case contract
Inputs kind, underlying price, strike, premium, contracts and multiplier. Out-of-the-money amount is max(K-S,0) for calls and max(S-K,0) for puts. Per-unit requirement = premium + max(20% of underlying - OTM amount, 10% of floor base) where the floor base is the underlying for calls and the strike for puts. Return requirement*multiplier*contracts rounded to cents.
Why this case matters
Option expiry, exercise and settlement engines move cash and shares; a wrong branch misstates obligations.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
N = 1
observations = []
def solve(kind, underlying, strike, premium, contracts, multiplier):
S = Fraction(str(underlying))
K = Fraction(str(strike))
P = Fraction(str(premium))
otm = max(K - S, 0) if kind == 'C' else max(S - K, 0)
floor_base = S
req = P + max(S * Fraction(20, 100) - otm, floor_base * Fraction(10, 100))
return float(round(req * multiplier * contracts, 2))
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression minimum floor base 1', ['P', 120.0, 95, 0.5, 10, 10], 1000.0], ['regression minimum floor base 2', ['P', 120.0, 95, 0.5, 10, 100], 10000.0], ['partial repair probe 1', ['C', 92.5, 110, 8.0, 1, 100], 1725.0], ['partial repair probe 2', ['C', 92.5, 105, 3.4, 2, 100], 2530.0], ['boundary control 1', ['P', 80.0, 100, 20.5, 1, 100], 3650.0], ['boundary control 2', ['C', 100.0, 100, 2.0, 1, 100], 2200.0], ['normal control 1', ['P', 100.0, 110, 3.4, 2, 10], 468.0], ['normal control 2', ['C', 92.5, 100, 1.25, 2, 10], 245.0]], [['regression minimum floor base 1', ['P', 120.0, 95, 3.4, 2, 100], 2580.0], ['regression minimum floor base 2', ['P', 104.25, 90, 3.4, 10, 100], 12400.0], ['partial repair probe 1', ['C', 100.0, 110, 15.1, 1, 100], 2510.0], ['partial repair probe 2', ['C', 80.0, 90, 1.25, 10, 10], 925.0], ['boundary control 1', ['P', 80.0, 100, 20.5, 1, 100], 3650.0], ['boundary control 2', ['C', 100.0, 100, 2.0, 1, 100], 2200.0], ['normal control 1', ['C', 100.0, 100, 1.25, 2, 100], 4250.0], ['normal control 2', ['P', 92.5, 95, 3.4, 1, 100], 2190.0]], [['regression minimum floor base 1', ['P', 120.0, 95, 3.4, 2, 10], 258.0], ['regression minimum floor base 2', ['P', 120.0, 95, 3.4, 1, 100], 1290.0], ['partial repair probe 1', ['C', 80.0, 95, 8.0, 1, 10], 160.0], ['partial repair probe 2', ['C', 80.0, 110, 8.0, 1, 100], 1600.0], ['boundary control 1', ['P', 80.0, 100, 20.5, 1, 100], 3650.0], ['boundary control 2', ['C', 100.0, 100, 2.0, 1, 100], 2200.0], ['normal control 1', ['P', 104.25, 105, 0.5, 2, 100], 4270.0], ['normal control 2', ['P', 100.0, 110, 1.25, 10, 10], 2125.0]], [['regression minimum floor base 1', ['P', 120.0, 95, 3.4, 1, 10], 129.0], ['regression minimum floor base 2', ['P', 120.0, 105, 3.4, 10, 10], 1390.0], ['partial repair probe 1', ['C', 80.0, 100, 3.4, 1, 100], 1140.0], ['partial repair probe 2', ['C', 100.0, 110, 3.4, 2, 100], 2680.0], ['boundary control 1', ['P', 80.0, 100, 20.5, 1, 100], 3650.0], ['boundary control 2', ['C', 100.0, 100, 2.0, 1, 100], 2200.0], ['normal control 1', ['P', 120.0, 110, 8.0, 10, 100], 22000.0], ['normal control 2', ['P', 92.5, 100, 15.1, 1, 10], 336.0]], [['regression minimum floor base 1', ['P', 120.0, 95, 0.5, 10, 100], 10000.0], ['regression minimum floor base 2', ['P', 120.0, 100, 8.0, 1, 100], 1800.0], ['partial repair probe 1', ['C', 92.5, 105, 0.5, 2, 100], 1950.0], ['partial repair probe 2', ['C', 80.0, 105, 3.4, 1, 10], 114.0], ['boundary control 1', ['C', 100.0, 100, 2.0, 1, 100], 2200.0], ['boundary control 2', ['P', 80.0, 100, 20.5, 1, 100], 3650.0], ['normal control 1', ['P', 104.25, 95, 15.1, 10, 100], 26700.0], ['normal control 2', ['C', 104.25, 110, 1.25, 10, 10], 1635.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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression minimum floor base 1 | 1250.0 | 1000.0 | Failed |
| regression minimum floor base 2 | 12500.0 | 10000.0 | Failed |
| partial repair probe 1 | 1725.0 | 1725.0 | Passed |
| partial repair probe 2 | 2530.0 | 2530.0 | Passed |
| boundary control 1 | 3650.0 | 3650.0 | Passed |
| boundary control 2 | 2200.0 | 2200.0 | Passed |
| normal control 1 | 468.0 | 468.0 | Passed |
| normal control 2 | 245.0 | 245.0 | Passed |
SHA-256 / 5e3f9bed2745ff9ecc27129e35dc6784b3744a3cddca4a7dc0657ed96e53c5ec
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
N = 1
observations = []
def solve(kind, underlying, strike, premium, contracts, multiplier):
S = Fraction(str(underlying))
K = Fraction(str(strike))
P = Fraction(str(premium))
otm = max(K - S, 0) if kind == 'C' else max(S - K, 0)
floor_base = K
req = P + max(S * Fraction(20, 100) - otm, floor_base * Fraction(10, 100))
return float(round(req * multiplier * contracts, 2))
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression minimum floor base 1', ['P', 120.0, 95, 0.5, 10, 10], 1000.0], ['regression minimum floor base 2', ['P', 120.0, 95, 0.5, 10, 100], 10000.0], ['partial repair probe 1', ['C', 92.5, 110, 8.0, 1, 100], 1725.0], ['partial repair probe 2', ['C', 92.5, 105, 3.4, 2, 100], 2530.0], ['boundary control 1', ['P', 80.0, 100, 20.5, 1, 100], 3650.0], ['boundary control 2', ['C', 100.0, 100, 2.0, 1, 100], 2200.0], ['normal control 1', ['P', 100.0, 110, 3.4, 2, 10], 468.0], ['normal control 2', ['C', 92.5, 100, 1.25, 2, 10], 245.0]], [['regression minimum floor base 1', ['P', 120.0, 95, 3.4, 2, 100], 2580.0], ['regression minimum floor base 2', ['P', 104.25, 90, 3.4, 10, 100], 12400.0], ['partial repair probe 1', ['C', 100.0, 110, 15.1, 1, 100], 2510.0], ['partial repair probe 2', ['C', 80.0, 90, 1.25, 10, 10], 925.0], ['boundary control 1', ['P', 80.0, 100, 20.5, 1, 100], 3650.0], ['boundary control 2', ['C', 100.0, 100, 2.0, 1, 100], 2200.0], ['normal control 1', ['C', 100.0, 100, 1.25, 2, 100], 4250.0], ['normal control 2', ['P', 92.5, 95, 3.4, 1, 100], 2190.0]], [['regression minimum floor base 1', ['P', 120.0, 95, 3.4, 2, 10], 258.0], ['regression minimum floor base 2', ['P', 120.0, 95, 3.4, 1, 100], 1290.0], ['partial repair probe 1', ['C', 80.0, 95, 8.0, 1, 10], 160.0], ['partial repair probe 2', ['C', 80.0, 110, 8.0, 1, 100], 1600.0], ['boundary control 1', ['P', 80.0, 100, 20.5, 1, 100], 3650.0], ['boundary control 2', ['C', 100.0, 100, 2.0, 1, 100], 2200.0], ['normal control 1', ['P', 104.25, 105, 0.5, 2, 100], 4270.0], ['normal control 2', ['P', 100.0, 110, 1.25, 10, 10], 2125.0]], [['regression minimum floor base 1', ['P', 120.0, 95, 3.4, 1, 10], 129.0], ['regression minimum floor base 2', ['P', 120.0, 105, 3.4, 10, 10], 1390.0], ['partial repair probe 1', ['C', 80.0, 100, 3.4, 1, 100], 1140.0], ['partial repair probe 2', ['C', 100.0, 110, 3.4, 2, 100], 2680.0], ['boundary control 1', ['P', 80.0, 100, 20.5, 1, 100], 3650.0], ['boundary control 2', ['C', 100.0, 100, 2.0, 1, 100], 2200.0], ['normal control 1', ['P', 120.0, 110, 8.0, 10, 100], 22000.0], ['normal control 2', ['P', 92.5, 100, 15.1, 1, 10], 336.0]], [['regression minimum floor base 1', ['P', 120.0, 95, 0.5, 10, 100], 10000.0], ['regression minimum floor base 2', ['P', 120.0, 100, 8.0, 1, 100], 1800.0], ['partial repair probe 1', ['C', 92.5, 105, 0.5, 2, 100], 1950.0], ['partial repair probe 2', ['C', 80.0, 105, 3.4, 1, 10], 114.0], ['boundary control 1', ['C', 100.0, 100, 2.0, 1, 100], 2200.0], ['boundary control 2', ['P', 80.0, 100, 20.5, 1, 100], 3650.0], ['normal control 1', ['P', 104.25, 95, 15.1, 10, 100], 26700.0], ['normal control 2', ['C', 104.25, 110, 1.25, 10, 10], 1635.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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression minimum floor base 1 | 1000.0 | 1000.0 | Passed |
| regression minimum floor base 2 | 10000.0 | 10000.0 | Passed |
| partial repair probe 1 | 1900.0 | 1725.0 | Failed |
| partial repair probe 2 | 2780.0 | 2530.0 | Failed |
| boundary control 1 | 3650.0 | 3650.0 | Passed |
| boundary control 2 | 2200.0 | 2200.0 | Passed |
| normal control 1 | 468.0 | 468.0 | Passed |
| normal control 2 | 245.0 | 245.0 | Passed |
SHA-256 / 1421c9d4d7a2d1ffaf2c49b0ddcd4c389e2f092311c5dfaf44cc787fc8726b8f
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
N = 1
observations = []
def solve(kind, underlying, strike, premium, contracts, multiplier):
S = Fraction(str(underlying))
K = Fraction(str(strike))
P = Fraction(str(premium))
otm = max(K - S, 0) if kind == 'C' else max(S - K, 0)
floor_base = S if kind == 'C' else K
req = P + max(S * Fraction(20, 100) - otm, floor_base * Fraction(10, 100))
return float(round(req * multiplier * contracts, 2))
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression minimum floor base 1', ['P', 120.0, 95, 0.5, 10, 10], 1000.0], ['regression minimum floor base 2', ['P', 120.0, 95, 0.5, 10, 100], 10000.0], ['partial repair probe 1', ['C', 92.5, 110, 8.0, 1, 100], 1725.0], ['partial repair probe 2', ['C', 92.5, 105, 3.4, 2, 100], 2530.0], ['boundary control 1', ['P', 80.0, 100, 20.5, 1, 100], 3650.0], ['boundary control 2', ['C', 100.0, 100, 2.0, 1, 100], 2200.0], ['normal control 1', ['P', 100.0, 110, 3.4, 2, 10], 468.0], ['normal control 2', ['C', 92.5, 100, 1.25, 2, 10], 245.0]], [['regression minimum floor base 1', ['P', 120.0, 95, 3.4, 2, 100], 2580.0], ['regression minimum floor base 2', ['P', 104.25, 90, 3.4, 10, 100], 12400.0], ['partial repair probe 1', ['C', 100.0, 110, 15.1, 1, 100], 2510.0], ['partial repair probe 2', ['C', 80.0, 90, 1.25, 10, 10], 925.0], ['boundary control 1', ['P', 80.0, 100, 20.5, 1, 100], 3650.0], ['boundary control 2', ['C', 100.0, 100, 2.0, 1, 100], 2200.0], ['normal control 1', ['C', 100.0, 100, 1.25, 2, 100], 4250.0], ['normal control 2', ['P', 92.5, 95, 3.4, 1, 100], 2190.0]], [['regression minimum floor base 1', ['P', 120.0, 95, 3.4, 2, 10], 258.0], ['regression minimum floor base 2', ['P', 120.0, 95, 3.4, 1, 100], 1290.0], ['partial repair probe 1', ['C', 80.0, 95, 8.0, 1, 10], 160.0], ['partial repair probe 2', ['C', 80.0, 110, 8.0, 1, 100], 1600.0], ['boundary control 1', ['P', 80.0, 100, 20.5, 1, 100], 3650.0], ['boundary control 2', ['C', 100.0, 100, 2.0, 1, 100], 2200.0], ['normal control 1', ['P', 104.25, 105, 0.5, 2, 100], 4270.0], ['normal control 2', ['P', 100.0, 110, 1.25, 10, 10], 2125.0]], [['regression minimum floor base 1', ['P', 120.0, 95, 3.4, 1, 10], 129.0], ['regression minimum floor base 2', ['P', 120.0, 105, 3.4, 10, 10], 1390.0], ['partial repair probe 1', ['C', 80.0, 100, 3.4, 1, 100], 1140.0], ['partial repair probe 2', ['C', 100.0, 110, 3.4, 2, 100], 2680.0], ['boundary control 1', ['P', 80.0, 100, 20.5, 1, 100], 3650.0], ['boundary control 2', ['C', 100.0, 100, 2.0, 1, 100], 2200.0], ['normal control 1', ['P', 120.0, 110, 8.0, 10, 100], 22000.0], ['normal control 2', ['P', 92.5, 100, 15.1, 1, 10], 336.0]], [['regression minimum floor base 1', ['P', 120.0, 95, 0.5, 10, 100], 10000.0], ['regression minimum floor base 2', ['P', 120.0, 100, 8.0, 1, 100], 1800.0], ['partial repair probe 1', ['C', 92.5, 105, 0.5, 2, 100], 1950.0], ['partial repair probe 2', ['C', 80.0, 105, 3.4, 1, 10], 114.0], ['boundary control 1', ['C', 100.0, 100, 2.0, 1, 100], 2200.0], ['boundary control 2', ['P', 80.0, 100, 20.5, 1, 100], 3650.0], ['normal control 1', ['P', 104.25, 95, 15.1, 10, 100], 26700.0], ['normal control 2', ['C', 104.25, 110, 1.25, 10, 10], 1635.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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression minimum floor base 1 | 1000.0 | 1000.0 | Passed |
| regression minimum floor base 2 | 10000.0 | 10000.0 | Passed |
| partial repair probe 1 | 1725.0 | 1725.0 | Passed |
| partial repair probe 2 | 2530.0 | 2530.0 | Passed |
| boundary control 1 | 3650.0 | 3650.0 | Passed |
| boundary control 2 | 2200.0 | 2200.0 | Passed |
| normal control 1 | 468.0 | 468.0 | Passed |
| normal control 2 | 245.0 | 245.0 | Passed |
SHA-256 / 52cc109bb1b678a3a2654e376e4e1006b96d0aed80d9955978fbfeaa657d1cad
Verification & scope
A deterministic toy contract stated explicitly in the contract field; no claim of conformance to any exchange or clearing rulebook. 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:46:56.875138+00:00.
Case digest / 8b24268c152ebb99396df4aef61ad51cc7093991a95b52d697058bed8e1a71fa