{
  "url": "https://theplaybookusa.com/tools/bankroll/test-fixtures.json",
  "toolUrl": "https://theplaybookusa.com/tools/bankroll/",
  "methodologyUrl": "https://theplaybookusa.com/tools/bankroll/methodology/",
  "tool": "Bankroll Calculator",
  "model": "Bankroll Discipline Model v2.1",
  "lastReviewed": "2026-05-17",
  "privacy": "Fixtures contain no account, operator, card, bank, identity, ticket, document, location or login data.",
  "boundary": "Educational bankroll-discipline fixtures only. Not a profit predictor, Kelly model, tax estimate, legal check, payout advice or probability-of-ruin simulation.",
  "cases": [
    {
      "case": "percentage_unit_balanced",
      "input": {
        "bankroll": 1000,
        "method": "percent",
        "unitPercent": 2,
        "plannedSessions": 4,
        "monthlyBudget": 1000,
        "sessionStopLossPercent": 20,
        "dailyExposurePercent": 25,
        "coolingOffTrigger": "stopLoss"
      },
      "expected": {
        "unitSize": 20,
        "unitCount": 50,
        "sessionBudget": 250,
        "stopLossAmount": 200,
        "dailyExposureCap": 250,
        "stopLossRunwayUnits": 10,
        "dailyCapRunwayUnits": 12,
        "monthlyBudgetCheck": "Within entered budget",
        "cautionBand": "Balanced",
        "readinessScore": "Ready to save as a plan"
      }
    },
    {
      "case": "flat_unit_fragile_budget_warning",
      "input": {
        "bankroll": 500,
        "method": "flat",
        "flatUnit": 25,
        "plannedSessions": 2,
        "monthlyBudget": 400,
        "sessionStopLossPercent": 35,
        "dailyExposurePercent": 60,
        "coolingOffTrigger": "pressure"
      },
      "expected": {
        "unitSize": 25,
        "unitCount": 20,
        "sessionBudget": 250,
        "stopLossAmount": 175,
        "dailyExposureCap": 300,
        "stopLossRunwayUnits": 7,
        "dailyCapRunwayUnits": 12,
        "monthlyBudgetCheck": "Bankroll exceeds entered monthly budget",
        "readinessScore": "Stop and use support first",
        "riskWarningsContain": [
          "Bankroll exceeds the monthly entertainment budget",
          "Session stop-loss is above 30%",
          "Daily exposure is above 50%",
          "Unit count is below 25"
        ]
      }
    },
    {
      "case": "reverse_mode_25_unit_at_2_percent",
      "input": {
        "desiredUnit": 25,
        "unitPercent": 2
      },
      "expected": {
        "requiredBankroll": 1250,
        "noteContains": "$25.00 unit at 2% requires about $1,250.00"
      }
    },
    {
      "case": "session_tracker_loss",
      "input": {
        "startingSessionBankroll": 250,
        "endingSessionBankroll": 210,
        "unitSize": 20,
        "stopLossFollowed": "yes"
      },
      "expected": {
        "netSessionResult": -40,
        "unitsWonLost": -2,
        "boundaryContains": "Stop-loss followed"
      }
    },
    {
      "case": "readiness_unchecked_discretionary_money",
      "input": {
        "bankroll": 1000,
        "discretionaryConfirm": false,
        "method": "percent",
        "unitPercent": 2,
        "monthlyBudget": 1000,
        "sessionStopLossPercent": 20,
        "dailyExposurePercent": 25,
        "coolingOffTrigger": "stopLoss"
      },
      "expected": {
        "readinessScore": "Stop and use support first",
        "riskWarningsContain": [
          "Discretionary-money confirmation is not checked"
        ]
      }
    },
    {
      "case": "invalid_zero_bankroll",
      "input": {
        "bankroll": 0,
        "method": "percent",
        "unitPercent": 2
      },
      "expected": {
        "validationMessage": "Enter a bankroll above zero."
      }
    },
    {
      "case": "invalid_flat_unit_above_bankroll",
      "input": {
        "bankroll": 100,
        "method": "flat",
        "flatUnit": 150
      },
      "expected": {
        "validationMessage": "The selected unit cannot exceed the total bankroll."
      }
    },
    {
      "case": "share_url_canonical_boundary",
      "input": {
        "bankroll": 1000,
        "method": "percent",
        "unitPercent": 2,
        "plannedSessions": 4,
        "monthlyBudget": 1000,
        "sessionStopLossPercent": 20,
        "dailyExposurePercent": 25,
        "coolingOffTrigger": "stopLoss"
      },
      "expected": {
        "shareUrlStartsWith": "https://theplaybookusa.com/tools/bankroll/?",
        "canonical": "https://theplaybookusa.com/tools/bankroll/",
        "privateDataIncluded": false
      }
    }
  ]
}
