{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://klarfort.com/tools/fire-calculator/schema.json",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "currency": {
      "type": "string",
      "title": "Currency",
      "description": "Currency",
      "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": "FIRE mode",
      "description": "FIRE mode",
      "enum": [
        "standard",
        "lean",
        "fat",
        "barista",
        "coast",
        "expat"
      ],
      "default": "standard"
    },
    "principal": {
      "type": "number",
      "title": "Current invested balance",
      "description": "Current invested balance",
      "default": 100000,
      "minimum": 0,
      "maximum": 1000000000000
    },
    "monthlyExpenses": {
      "type": "number",
      "title": "Target monthly spending",
      "description": "Target monthly spending",
      "default": 2000,
      "minimum": 0,
      "maximum": 1000000000000
    },
    "withdrawalRate": {
      "type": "number",
      "title": "Annual withdrawal rate (%)",
      "description": "Annual withdrawal rate (%)",
      "default": 4,
      "minimum": 0.1,
      "maximum": 100
    },
    "annualReturn": {
      "type": "number",
      "title": "Annual return (%)",
      "description": "Annual return (%)",
      "default": 0,
      "minimum": -99,
      "maximum": 100
    },
    "inflationRate": {
      "type": "number",
      "title": "Annual inflation (%)",
      "description": "Annual inflation (%)",
      "default": 0,
      "minimum": -99,
      "maximum": 100
    },
    "savingMode": {
      "type": "string",
      "title": "Saving input",
      "description": "Saving input",
      "enum": [
        "amount",
        "rate"
      ],
      "default": "amount"
    },
    "monthlyContribution": {
      "type": "number",
      "title": "Monthly invested saving",
      "description": "Monthly invested saving",
      "default": 1000,
      "minimum": 0,
      "maximum": 1000000000000
    },
    "monthlyIncome": {
      "type": "number",
      "title": "Monthly take-home income",
      "description": "Monthly take-home income",
      "default": 5000,
      "minimum": 0,
      "maximum": 1000000000000
    },
    "savingsRate": {
      "type": "number",
      "title": "Saving rate (%)",
      "description": "Saving rate (%)",
      "default": 20,
      "minimum": 0,
      "maximum": 100
    },
    "monthlyBaristaIncome": {
      "type": "number",
      "title": "Monthly part-time income",
      "description": "Monthly part-time income",
      "default": 0,
      "minimum": 0,
      "maximum": 1000000000000
    },
    "monthlyPension": {
      "type": "number",
      "title": "Monthly expected pension",
      "description": "Monthly expected pension",
      "default": 0,
      "minimum": 0,
      "maximum": 1000000000000
    },
    "retirementMonths": {
      "type": "integer",
      "title": "Months until retirement",
      "description": "Months until retirement",
      "default": 240,
      "minimum": 1,
      "maximum": 600
    },
    "startMonth": {
      "type": "string",
      "title": "Starting month",
      "description": "Starting month for the projected milestone date, in YYYY-MM format.",
      "pattern": "^[0-9]{4}-(0[1-9]|1[0-2])$",
      "default": "2026-09"
    }
  },
  "required": [
    "currency",
    "mode",
    "principal",
    "monthlyExpenses",
    "withdrawalRate",
    "annualReturn",
    "inflationRate",
    "savingMode",
    "monthlyContribution",
    "monthlyIncome",
    "savingsRate",
    "monthlyBaristaIncome",
    "monthlyPension",
    "retirementMonths",
    "startMonth"
  ]
}