{
  "tool": "Payout Estimator",
  "canonical_url": "https://theplaybookusa.com/tools/payout/",
  "fixture_url": "https://theplaybookusa.com/tools/payout/test-fixtures.json",
  "model": "Payout Friction Model v2.2",
  "last_reviewed": "2026-05-18",
  "privacy_note": "Fixtures are educational formula checks. Do not enter or publish private account, identity, banking, document, login or wallet seed data.",
  "cases": [
    {
      "case": "baseline_crypto_repeat_withdrawal",
      "input": {
        "method": "crypto",
        "amount": 500,
        "firstWithdrawal": false,
        "kycComplete": true,
        "sameRoute": true,
        "weekendOrHoliday": false,
        "bonusCondition": "none",
        "status": "pending",
        "elapsedHours": 12,
        "operatorWindowHours": 48,
        "cryptoHashStatus": "notCrypto"
      },
      "expected": {
        "approvalBand": "10 minutes to 1 hour",
        "transferBand": "10 minutes to 1 hour",
        "frictionFlags": "No major friction flags in the current setup.",
        "bonusGate": "No active bonus restriction selected",
        "escalation": "Normal wait",
        "cryptoBranch": "standard method estimate"
      }
    },
    {
      "case": "kyc_incomplete_first_withdrawal",
      "input": {
        "method": "ewallet",
        "amount": 2500,
        "firstWithdrawal": true,
        "kycComplete": false,
        "sameRoute": true,
        "weekendOrHoliday": false,
        "bonusCondition": "none",
        "status": "documentRequested",
        "elapsedHours": 30,
        "operatorWindowHours": 48,
        "cryptoHashStatus": "notCrypto"
      },
      "expected": {
        "approvalBandWidened": true,
        "frictionFlagsInclude": ["first withdrawal", "KYC is not complete", "larger withdrawal amount"],
        "statusRoute": "Use withdrawal verification",
        "escalation": "verification owns the next step"
      }
    },
    {
      "case": "route_mismatch_bank_weekend",
      "input": {
        "method": "bank",
        "amount": 7500,
        "firstWithdrawal": false,
        "kycComplete": true,
        "sameRoute": false,
        "weekendOrHoliday": true,
        "bonusCondition": "none",
        "status": "processing",
        "elapsedHours": 40,
        "operatorWindowHours": 72,
        "cryptoHashStatus": "notCrypto"
      },
      "expected": {
        "frictionFlagsInclude": ["destination does not match", "weekend or holiday"],
        "nextRoute": "withdrawal verification and operator support records",
        "evidenceReadinessIncludes": "Payment route mismatch"
      }
    },
    {
      "case": "elapsed_time_past_operator_window",
      "input": {
        "method": "card",
        "amount": 1200,
        "firstWithdrawal": false,
        "kycComplete": true,
        "sameRoute": true,
        "weekendOrHoliday": false,
        "bonusCondition": "none",
        "status": "pending",
        "elapsedHours": 80,
        "operatorWindowHours": 48,
        "cryptoHashStatus": "notCrypto"
      },
      "expected": {
        "escalation": "Evidence packet",
        "route": "withdrawal verification or scam-sign checks"
      }
    },
    {
      "case": "crypto_no_transaction_hash",
      "input": {
        "method": "crypto",
        "amount": 2500,
        "firstWithdrawal": false,
        "kycComplete": true,
        "sameRoute": true,
        "weekendOrHoliday": false,
        "bonusCondition": "none",
        "status": "approved",
        "elapsedHours": 4,
        "operatorWindowHours": 24,
        "cryptoHashStatus": "noHashPending"
      },
      "expected": {
        "cryptoBranch": "operator-side pending",
        "statusMeaning": "operator-side review is complete but the payment rail may still need time"
      }
    },
    {
      "case": "crypto_transaction_hash_exists",
      "input": {
        "method": "crypto",
        "amount": 2500,
        "firstWithdrawal": false,
        "kycComplete": true,
        "sameRoute": true,
        "weekendOrHoliday": false,
        "bonusCondition": "none",
        "status": "txHashExists",
        "elapsedHours": 2,
        "operatorWindowHours": 24,
        "cryptoHashStatus": "hashZeroConf"
      },
      "expected": {
        "cryptoBranch": "save hash, network and first-seen timestamp",
        "escalation": "Payment appears sent",
        "evidenceIncludes": ["hash", "network", "timestamp"]
      }
    },
    {
      "case": "active_bonus_gate",
      "input": {
        "method": "ewallet",
        "amount": 300,
        "firstWithdrawal": false,
        "kycComplete": true,
        "sameRoute": true,
        "weekendOrHoliday": false,
        "bonusCondition": "activeWagering",
        "status": "pending",
        "elapsedHours": 8,
        "operatorWindowHours": 24,
        "cryptoHashStatus": "notCrypto"
      },
      "expected": {
        "bonusGate": "Use the wagering calculator",
        "doNotTreatPayoutClockAsLateYet": true
      }
    },
    {
      "case": "friction_score_do_not_estimate",
      "input": {
        "method": "bank",
        "amount": 30000,
        "firstWithdrawal": true,
        "kycComplete": false,
        "sameRoute": false,
        "weekendOrHoliday": true,
        "bonusCondition": "unclear",
        "status": "cancelledReversed",
        "elapsedHours": 120,
        "operatorWindowHours": 48,
        "cryptoHashStatus": "notCrypto"
      },
      "expected": {
        "frictionScore": "Do not estimate",
        "reasonIncludes": ["terms unclear", "cancelled or reversed", "KYC is not complete", "route mismatch"],
        "route": "evidence packet or scam-sign checks"
      }
    },
    {
      "case": "route_mismatch_wizard_high",
      "input": {
        "routeDepositSame": "no",
        "routeSameOwner": "no",
        "routeMethodActive": "unknown",
        "routeReturnToSource": "yes",
        "routeCryptoNew": "yes",
        "routeBonusAffected": "yes"
      },
      "expected": {
        "routeMismatchRisk": "High route-match risk",
        "evidenceIncludes": ["deposit route", "ownership proof", "return-to-source wording", "support reply"]
      }
    },
    {
      "case": "support_message_builder_safe_fields",
      "input": {
        "requestId": "WD-12345",
        "timestamp": "May 18, 2026 10:30 AM ET",
        "amount": 500,
        "method": "crypto",
        "status": "pending",
        "kycComplete": true,
        "sameRoute": true,
        "elapsedHours": 12,
        "txid": ""
      },
      "expected": {
        "messageIncludes": ["withdrawal request WD-12345", "500", "Crypto", "cashier status is Pending"],
        "privateDataValuesExcluded": true,
        "safetyWarningIncludes": ["SSN", "full card", "private key", "seed phrase"]
      }
    },
    {
      "case": "invalid_amount",
      "input": {
        "method": "crypto",
        "amount": 0
      },
      "expected": {
        "validationMessage": "Enter a withdrawal amount above zero.",
        "validEstimate": false
      }
    }
  ]
}
