{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "currency": {
      "type": "string",
      "title": "Currency",
      "description": "All entered amounts use this currency. No automatic currency conversion.",
      "enum": [
        "USD",
        "EUR",
        "GBP",
        "JPY",
        "CHF",
        "CAD",
        "AUD",
        "CNY",
        "INR",
        "MXN",
        "BRL",
        "SGD",
        "HKD",
        "SEK",
        "NOK",
        "DKK",
        "NZD",
        "ZAR",
        "KRW",
        "TRY",
        "PLN",
        "CZK",
        "HUF",
        "AED",
        "THB",
        "IDR",
        "MYR",
        "PHP"
      ],
      "default": "USD"
    },
    "mode": {
      "type": "string",
      "title": "Mode",
      "description": "Mode",
      "enum": [
        "scenarios",
        "job-loss",
        "sabbatical",
        "drawdown"
      ],
      "default": "scenarios"
    },
    "scenario": {
      "type": "string",
      "title": "Scenario",
      "description": "Scenario",
      "enum": [
        "current",
        "trim-spending",
        "raise-income",
        "stress"
      ],
      "default": "current"
    },
    "liquidAssets": {
      "type": "number",
      "title": "Liquid savings",
      "description": "Liquid savings",
      "default": 12000,
      "minimum": 0,
      "maximum": 1000000000000
    },
    "monthlyIncome": {
      "type": "number",
      "title": "Recurring monthly income",
      "description": "Recurring monthly income",
      "default": 2000,
      "minimum": 0,
      "maximum": 1000000000000
    },
    "monthlyExpenses": {
      "type": "number",
      "title": "Recurring monthly expenses",
      "description": "Recurring monthly expenses",
      "default": 3000,
      "minimum": 0,
      "maximum": 1000000000000
    },
    "obligationsDue12Months": {
      "type": "number",
      "title": "Separate obligations due over 12 months",
      "description": "Separate obligations due over 12 months",
      "default": 0,
      "minimum": 0,
      "maximum": 1000000000000
    },
    "leaveMonths": {
      "type": "integer",
      "title": "Sabbatical length in months",
      "description": "Sabbatical length in months",
      "default": 6,
      "minimum": 1,
      "maximum": 120
    },
    "incomeDuringLeave": {
      "type": "number",
      "title": "Monthly income during leave",
      "description": "Monthly income during leave",
      "default": 0,
      "minimum": 0,
      "maximum": 1000000000000
    },
    "horizonMonths": {
      "type": "integer",
      "title": "Simulation horizon in months",
      "description": "Simulation horizon in months",
      "default": 120,
      "minimum": 1,
      "maximum": 600
    },
    "variancePercent": {
      "type": "number",
      "title": "Monthly income and expense variation (%)",
      "description": "Monthly income and expense variation (%)",
      "default": 10,
      "minimum": 0,
      "maximum": 100
    },
    "paths": {
      "type": "integer",
      "title": "Simulation paths",
      "description": "Simulation paths",
      "default": 1000,
      "minimum": 100,
      "maximum": 1000
    },
    "seed": {
      "type": "string",
      "title": "Simulation seed",
      "description": "Simulation seed",
      "default": "",
      "maxLength": 16,
      "pattern": "^(?:[a-fA-F0-9]{16})?$"
    }
  },
  "required": [
    "currency",
    "mode",
    "scenario",
    "liquidAssets",
    "monthlyIncome",
    "monthlyExpenses",
    "obligationsDue12Months",
    "leaveMonths",
    "incomeDuringLeave",
    "horizonMonths",
    "variancePercent",
    "paths",
    "seed"
  ]
}