{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://spi-recherche-de-besoins.onrender.com/api/lamal/v1/request.schema.json",
  "title": "SPI — comparaison LAMal 2027",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "year",
    "members"
  ],
  "properties": {
    "year": {
      "type": "integer",
      "const": 2027
    },
    "members": {
      "type": "array",
      "minItems": 1,
      "maxItems": 12,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "birthYear",
          "postcode",
          "franchise",
          "accident",
          "careType"
        ],
        "properties": {
          "birthYear": {
            "type": "integer",
            "minimum": 1907,
            "maximum": 2027
          },
          "postcode": {
            "type": "string",
            "pattern": "^[0-9]{4}$"
          },
          "bfs": {
            "type": "string",
            "pattern": "^[0-9]{1,6}$",
            "description": "Commune OFS, obligatoire si le NPA est ambigu. Utiliser places(postcode)."
          },
          "franchise": {
            "type": "integer",
            "enum": [
              0,
              100,
              200,
              300,
              400,
              500,
              600,
              1000,
              1500,
              2000,
              2500
            ]
          },
          "accident": {
            "type": "string",
            "enum": [
              "MIT",
              "OHN"
            ],
            "description": "MIT : inclus ; OHN : exclu. Ne pas déduire ce choix de l’âge ou de la profession."
          },
          "careType": {
            "type": "string",
            "enum": [
              "any",
              "BASE",
              "PRAXIS",
              "FLEX",
              "TEL_DIG",
              "PHARM"
            ]
          },
          "currentProduct": {
            "type": "string",
            "pattern": "^[0-9]+\\|[^|]+$",
            "maxLength": 100,
            "description": "Clé renvoyée par searchReferences ; facultative."
          },
          "currentPremium": {
            "type": "string",
            "pattern": "^[0-9]{1,5}([.,][0-9]{1,2})?$",
            "description": "CHF par mois, base seule, nette de redistribution, avant subsides. Remplace la référence calculée."
          }
        }
      }
    }
  }
}
