{
  "name": "METAR/SPECI",
  "version": "2.0.0",
  "description": "METAR/SPECI: Observation météorologique d'aérodrome",
  "tokens": {
    "identifier": {
      "pattern": "^(METAR|SPECI)$",
      "category": "keyword",
      "description": "Identifiant du type de message"
    },
    "correction": {
      "pattern": "^COR$",
      "category": "keyword",
      "description": "Indicateur de correction pour message corrigé"
    },
    "icao": {
      "pattern": "^[A-Z]{4}$",
      "category": "location",
      "description": "Indicateur d'emplacement OACI",
      "placeholder": {
        "value": "AAAA",
        "editable": [
          {
            "start": 0,
            "end": 4
          }
        ]
      }
    },
    "datetime": {
      "pattern": "^\\d{6}Z$",
      "category": "datetime",
      "description": "Jour et heure UTC",
      "validator": "DDHHmmZ",
      "placeholder": {
        "value": "000000Z",
        "editable": [
          {
            "start": 0,
            "end": 2
          },
          {
            "start": 2,
            "end": 4
          },
          {
            "start": 4,
            "end": 6
          }
        ]
      }
    },
    "nil": {
      "pattern": "^NIL$",
      "category": "keyword",
      "description": "Indicateur de message manquant"
    },
    "auto": {
      "pattern": "^AUTO$",
      "category": "keyword",
      "description": "Observation entièrement automatisée sans intervention humaine"
    },
    "windDirectionKT": {
      "pattern": "^(VRB|\\d{3})$",
      "category": "input",
      "description": "Direction du vent (KT)"
    },
    "windDirectionMPS": {
      "pattern": "^(VRB|\\d{3})$",
      "category": "input",
      "description": "Direction du vent (MPS)"
    },
    "windDirectionSpeedKT": {
      "pattern": "^(VRB|\\d{3})P?1?\\d{2}$",
      "category": "input",
      "description": "Direction + vitesse (KT)",
      "appendToPrevious": true
    },
    "windDirectionSpeedKT2": {
      "pattern": "^(VRB|\\d{3})P?\\d{2}$",
      "category": "input",
      "description": "Direction + vitesse (KT, 0-99 kt)",
      "appendToPrevious": true
    },
    "windDirectionSpeedKT3": {
      "pattern": "^(VRB|\\d{3})P?1\\d{2}$",
      "category": "input",
      "description": "Direction + vitesse (KT, 100-199 kt)",
      "appendToPrevious": true
    },
    "windDirectionSpeedMPS": {
      "pattern": "^(VRB|\\d{3})P?\\d{2}$",
      "category": "input",
      "description": "Direction + vitesse (MPS)",
      "appendToPrevious": true
    },
    "windKT": {
      "pattern": "^(VRB|\\d{3})P?1?\\d{2}(GP?1?\\d{2})?KT$",
      "category": "input",
      "description": "Groupe vent complet (KT)",
      "appendToPrevious": true
    },
    "windKT2": {
      "pattern": "^(VRB|\\d{3})P?\\d{2}(GP?1?\\d{2})?KT$",
      "category": "input",
      "description": "Groupe vent complet (KT, vitesse 2 chiffres)",
      "appendToPrevious": true
    },
    "windKT3": {
      "pattern": "^(VRB|\\d{3})P?1\\d{2}(GP?1\\d{2})?KT$",
      "category": "input",
      "description": "Groupe vent complet (KT, 3 chiffres)",
      "appendToPrevious": true
    },
    "windMPS": {
      "pattern": "^(VRB|\\d{3})P?\\d{2}(GP?\\d{2})?MPS$",
      "category": "input",
      "description": "Groupe vent complet (MPS)",
      "appendToPrevious": true
    },
    "wind": {
      "pattern": "^(VRB|\\d{3})P?1?\\d{2}(GP?1?\\d{2})?KT$|^(VRB|\\d{3})P?\\d{2}(GP?\\d{2})?MPS$",
      "category": "measurement",
      "description": "Groupe vent complet"
    },
    "windNotAvailable": {
      "pattern": "^\\/{5}(KT|MPS)$",
      "category": "unavailable",
      "description": "Vent non disponible système automatique (AUTO)"
    },
    "windVariation": {
      "pattern": "^\\d{3}V\\d{3}$",
      "category": "measurement",
      "description": "Variations significatives de direction",
      "placeholder": {
        "value": "000V000",
        "editable": [
          {
            "start": 0,
            "end": 3,
            "hint": "Direction min (°)"
          },
          {
            "start": 4,
            "end": 7,
            "hint": "Direction max (°)"
          }
        ]
      },
      "excludeWhen": { "hasToken": "^VRB\\d+" }
    },
    "cavok": {
      "pattern": "^CAVOK$",
      "category": "status",
      "description": "Plafond et Visibilité OK - vis ≥10km, pas de nuage <1500m/MSA, pas de CB/TCU, pas de temps significatif",
      "appendToPrevious": true
    },
    "visibility": {
      "pattern": "^\\d{4}$",
      "category": "measurement",
      "description": "Visibilité dominante en mètres",
      "placeholder": {
        "value": "0000",
        "editable": [
          {
            "start": 0,
            "end": 4
          }
        ]
      }
    },
    "visibilityNotAvailable": {
      "pattern": "^\\/{4}$",
      "category": "unavailable",
      "description": "Visibilité non disponible par système automatique (AUTO)"
    },
    "directionalVisibility": {
      "pattern": "^\\d{4}(N|NE|E|SE|S|SW|W|NW)$",
      "category": "measurement",
      "description": "Visibilité minimale avec direction"
    },
    "rvr": {
      "pattern": "^R\\d{2}[LCR]?\\/[PM]?\\d{4}(V[PM]?\\d{4})?[UDN]?$",
      "category": "measurement",
      "description": "Portée visuelle de piste avec préfixe P/M et tendance U/D/N",
      "placeholder": {
        "value": "R00/0000",
        "editable": [
          {
            "start": 1,
            "end": 3
          },
          {
            "start": 4,
            "end": 8
          }
        ]
      }
    },
    "weather": {
      "pattern": "^[-+]?(VC)?(MI|PR|BC|DR|BL|SH|TS|FZ)?(DZ|RA|SN|SG|IC|PL|GR|GS|UP)*(BR|FG|FU|VA|DU|SA|HZ|PY)?(PO|SQ|FC|SS|DS)?$",
      "category": "phenomenon",
      "description": "Temps présent - intensité/proximité + descripteur + phénomènes",
      "excludeWhen": [
        { "maxCount": 3, "countTypes": ["weather", "weatherSpecial"] },
        { "noDuplicates": true }
      ]
    },
    "weatherSpecial": {
      "pattern": "^(VCSH|VCTS|VCFG|VCPO|VCFC|VCDS|VCSS|VCBLDU|VCBLSA|VCBLSN|VCVA)$",
      "category": "phenomenon",
      "description": "Phénomènes météorologiques au voisinage",
      "excludeWhen": [
        { "maxCount": 3, "countTypes": ["weather", "weatherSpecial"] },
        { "noDuplicates": true }
      ]
    },
    "noWeather": {
      "pattern": "^\\/{2}$",
      "category": "phenomenon",
      "description": "Temps présent non observable par système automatique"
    },
    "cloudAmount": {
      "pattern": "^(FEW|SCT|BKN|OVC)$",
      "category": "measurement",
      "description": "Quantité de nuages (partiel - en attente de hauteur)",
      "excludeWhen": { "maxCount": 4, "countTypes": ["cloudBase", "cloud", "cloudUnknown"] }
    },
    "cloudBase": {
      "pattern": "^(FEW|SCT|BKN|OVC)(\\d{3})$",
      "category": "measurement",
      "description": "Couche nuageuse - quantité + hauteur sans type",
      "appendToPrevious": true,
      "placeholder": {
        "value": "000",
        "editable": [
          {
            "start": 0,
            "end": 3
          }
        ]
      }
    },
    "cloud": {
      "pattern": "^(FEW|SCT|BKN|OVC)(\\d{3})(CB|TCU|\\/\\/\\/)$",
      "category": "measurement",
      "description": "Couche nuageuse - quantité + hauteur en 100s pieds + type",
      "appendToPrevious": true
    },
    "cloudUnknown": {
      "pattern": "^(FEW|SCT|BKN|OVC)\\/\\/\\/(CB|TCU|\\/\\/\\/)?$",
      "category": "unavailable",
      "description": "Couche nuageuse avec hauteur inconnue (AUTO)"
    },
    "cloudAmountMissing": {
      "pattern": "^\\/{3}\\d{3}(CB|TCU|\\/\\/\\/)?$",
      "category": "unavailable",
      "description": "Couche nuageuse avec quantité inconnue (AUTO) - ex: ///015, ///015CB"
    },
    "cloudAllMissing": {
      "pattern": "^\\/{6}(CB|TCU|\\/\\/\\/)?$",
      "category": "unavailable",
      "description": "Couche nuageuse avec quantité et hauteur inconnues (AUTO) - ex: //////, //////CB, /////////"
    },
    "verticalVisibility": {
      "pattern": "^VV(\\d{3}|\\/\\/\\/)$",
      "category": "measurement",
      "description": "Visibilité verticale en 100s pieds quand ciel obscurci",
      "placeholder": {
        "value": "VV000",
        "editable": [
          {
            "start": 2,
            "end": 5
          }
        ]
      }
    },
    "nsc": {
      "pattern": "^NSC$",
      "category": "status",
      "description": "Pas de nuage significatif - pas de nuage <1500m/MSA, pas de CB/TCU"
    },
    "ncd": {
      "pattern": "^NCD$",
      "category": "status",
      "description": "Pas de nuage détecté par le système d'observation automatique"
    },
    "skyClear": {
      "pattern": "^(SKC|CLR)$",
      "category": "status",
      "description": "Ciel clair (usage régional)"
    },
    "temperature": {
      "pattern": "^M?\\d{2}\\/M?\\d{2}$",
      "category": "measurement",
      "description": "Température/Point de rosée en °C, M pour moins",
      "placeholder": {
        "value": "00/00",
        "editable": [
          { "start": 0, "end": 2, "hint": "Temp air" },
          { "start": 3, "end": 5, "hint": "Pt rosée" }
        ]
      }
    },
    "pressure": {
      "pattern": "^Q\\d{4}$",
      "category": "measurement",
      "description": "Pression QNH en hPa",
      "placeholder": {
        "value": "Q0000",
        "editable": [
          {
            "start": 1,
            "end": 5
          }
        ]
      }
    },
    "pressureInches": {
      "pattern": "^A\\d{4}$",
      "category": "measurement",
      "description": "Calage altimétrique en pouces de mercure (régional - Amérique du Nord)"
    },
    "recentWeather": {
      "pattern": "^RE(RASN|FZDZ|FZRA|DZ|SHRA|RA|SHSN|SN|SG|SHGR|SHGS|BLSN|SS|DS|TSRA|TSSN|TSGR|TSGS|TS|FC|VA|PL|UP|FZUP|TSUP|SHUP|//)$",
      "category": "phenomenon",
      "description": "Temps récent depuis le dernier message ou la dernière heure",
      "excludeWhen": [
        { "maxCount": 3 },
        { "noDuplicates": true }
      ]
    },
    "windshear": {
      "pattern": "^WS$",
      "category": "status",
      "description": "Indicateur de cisaillement de vent"
    },
    "windshearRunway": {
      "pattern": "^R\\d{2}[LCR]?$",
      "category": "status",
      "description": "Indicatif de piste cisaillement de vent",
      "placeholder": {
        "value": "R00",
        "editable": [
          {
            "start": 1,
            "end": 3
          }
        ]
      }
    },
    "windshearAllRwy": {
      "pattern": "^ALL$",
      "category": "status",
      "description": "Indicateur cisaillement de vent ALL RWY"
    },
    "rwy": {
      "pattern": "^RWY$",
      "category": "status",
      "description": "Mot-clé RWY pour WS ALL RWY"
    },
    "seaTemp": {
      "pattern": "^W(M?\\d{2}\\/|\\/\\/\\/)$",
      "category": "measurement",
      "description": "Température de surface de la mer"
    },
    "seaStateValue": {
      "pattern": "^S[0-9/]$",
      "category": "measurement",
      "description": "État de la mer",
      "appendToPrevious": true
    },
    "waveHeightValue": {
      "pattern": "^H(\\d{1,3}|\\/\\/\\/)$",
      "category": "measurement",
      "description": "Hauteur significative des vagues",
      "appendToPrevious": true
    },
    "seaState": {
      "pattern": "^W(M?\\d{2}\\/|\\/\\/\\/)(S[0-9/]|H(\\d{1,3}|\\/\\/\\/))$",
      "category": "measurement",
      "description": "Température et état de la mer"
    },
    "waveHeight": {
      "pattern": "^W(M?\\d{2}\\/|\\/\\/\\/)H\\d{1,3}$",
      "category": "measurement",
      "description": "Température de la mer et hauteur significative des vagues"
    },
    "runwayState": {
      "pattern": "^R\\d{2}[LCR]?\\/([0-9\\/]{6}|CLRD\\/\\/|SNOCLO)$",
      "category": "measurement",
      "description": "État de la piste"
    },
    "nosig": {
      "pattern": "^NOSIG$",
      "category": "trend",
      "description": "Pas de changement significatif prévu dans les 2 prochaines heures"
    },
    "becmg": {
      "pattern": "^BECMG$",
      "category": "trend",
      "description": "Devenant - changement prévu à taux régulier/irrégulier"
    },
    "tempo": {
      "pattern": "^TEMPO$",
      "category": "trend",
      "description": "Fluctuations temporaires <1h chacune, <50% de la période"
    },
    "trendTimeFM": {
      "pattern": "^FM\\d{4}$",
      "category": "datetime",
      "description": "Indicateur de temps tendance FM (À partir de)",
      "placeholder": {
        "value": "FM0000",
        "editable": [
          {
            "start": 2,
            "end": 6
          }
        ]
      }
    },
    "trendTimeTL": {
      "pattern": "^TL\\d{4}$",
      "category": "datetime",
      "description": "Indicateur de temps tendance TL (Jusqu'à)",
      "placeholder": {
        "value": "TL0000",
        "editable": [
          {
            "start": 2,
            "end": 6
          }
        ]
      }
    },
    "trendTimeAT": {
      "pattern": "^AT\\d{4}$",
      "category": "datetime",
      "description": "Indicateur de temps tendance AT (À)",
      "placeholder": {
        "value": "AT0000",
        "editable": [
          {
            "start": 2,
            "end": 6
          }
        ]
      }
    },
    "trendWindDirectionKT": { "pattern": "^\\d{3}$", "category": "trend", "description": "Direction vent tendance (KT)" },
    "trendWindDirectionMPS": { "pattern": "^\\d{3}$", "category": "trend", "description": "Direction vent tendance (MPS)" },
    "trendWindDirectionSpeedKT": { "pattern": "^\\d{3}P?1?\\d{2}$", "category": "trend", "description": "Direction + vitesse tendance (KT)", "appendToPrevious": true },
    "trendWindDirectionSpeedKT2": { "pattern": "^\\d{3}P?\\d{2}$", "category": "trend", "description": "Direction + vitesse tendance (KT, 0-99 kt)", "appendToPrevious": true },
    "trendWindDirectionSpeedKT3": { "pattern": "^\\d{3}P?1\\d{2}$", "category": "trend", "description": "Direction + vitesse tendance (KT, 100-199 kt)", "appendToPrevious": true },
    "trendWindDirectionSpeedMPS": { "pattern": "^\\d{3}P?\\d{2}$", "category": "trend", "description": "Direction + vitesse tendance (MPS)", "appendToPrevious": true },
    "trendWindKT": { "pattern": "^\\d{3}P?1?\\d{2}(GP?1?\\d{2})?KT$", "category": "trend", "description": "Vent tendance complet (KT)", "appendToPrevious": true },
    "trendWindKT2": { "pattern": "^\\d{3}P?\\d{2}(GP?1?\\d{2})?KT$", "category": "trend", "description": "Vent tendance complet (KT, vitesse 2 chiffres)", "appendToPrevious": true },
    "trendWindKT3": { "pattern": "^\\d{3}P?1\\d{2}(GP?1\\d{2})?KT$", "category": "trend", "description": "Vent tendance complet (KT, 3 chiffres)", "appendToPrevious": true },
    "trendWindMPS": { "pattern": "^\\d{3}P?\\d{2}(GP?\\d{2})?MPS$", "category": "trend", "description": "Vent tendance complet (MPS)", "appendToPrevious": true },
    "trendWind": { "pattern": "^\\d{3}P?1?\\d{2}(GP?1?\\d{2})?KT$|^\\d{3}P?\\d{2}(GP?\\d{2})?MPS$", "category": "trend", "description": "Vent prévu tendance (VRB interdit)" },
    "trendCavok": { "pattern": "^CAVOK$", "category": "trend", "description": "Tendance CAVOK - Plafond et visibilité OK" },
    "trendVisibility": { "pattern": "^\\d{4}$", "category": "trend", "description": "Visibilité prévue tendance", "placeholder": { "value": "0000", "editable": [{ "start": 0, "end": 4 }] } },
    "trendWeather": { "pattern": "^[-+]?(VC)?(MI|PR|BC|DR|BL|SH|TS|FZ)?(DZ|RA|SN|SG|IC|PL|GR|GS|UP)*(BR|FG|FU|VA|DU|SA|HZ|PY)?(PO|SQ|FC|SS|DS)?$", "category": "trend", "description": "Temps prévu tendance" },
    "trendNsw": { "pattern": "^NSW$", "category": "trend", "description": "Pas de temps significatif - fin des phénomènes météo dans la tendance" },
    "trendCloud": { "pattern": "^(FEW|SCT|BKN|OVC)(\\d{3})(CB|TCU)?$|^VV(\\d{3}|\\/\\/\\/)$|^NSC$", "category": "trend", "description": "Nuages prévus tendance" }
  },
  "structure": [
    {
      "id": "identifier",
      "cardinality": [
        1,
        1
      ]
    },
    {
      "id": "correction",
      "cardinality": [
        0,
        1
      ]
    },
    {
      "id": "icao",
      "cardinality": [
        1,
        1
      ]
    },
    {
      "id": "datetime",
      "cardinality": [
        1,
        1
      ]
    },
    {
      "id": "mainContent",
      "cardinality": [
        1,
        1
      ],
      "oneOf": [
        {
          "id": "nil",
          "terminal": true,
          "cardinality": [
            1,
            1
          ]
        },
        {
          "id": "body",
          "cardinality": [
            1,
            1
          ],
          "sequence": [
            {
              "id": "auto",
              "cardinality": [
                0,
                1
              ]
            },
            {
              "id": "windGroup",
              "cardinality": [
                1,
                1
              ],
              "oneOf": [
                {
                  "id": "windNotAvailable",
                  "cardinality": [1, 1]
                },
                {
                  "id": "wind",
                  "cardinality": [1, 1]
                },
                {
                  "id": "windKT3",
                  "cardinality": [1, 1]
                },
                {
                  "id": "windKT2",
                  "cardinality": [1, 1]
                },
                {
                  "id": "windKT",
                  "cardinality": [1, 1]
                },
                {
                  "id": "windMPS",
                  "cardinality": [1, 1]
                },
                {
                  "id": "windDirectionSpeedKT3",
                  "cardinality": [1, 1]
                },
                {
                  "id": "windDirectionSpeedKT2",
                  "cardinality": [1, 1]
                },
                {
                  "id": "windDirectionSpeedKT",
                  "cardinality": [1, 1]
                },
                {
                  "id": "windDirectionSpeedMPS",
                  "cardinality": [1, 1]
                },
                {
                  "id": "windDirectionKT",
                  "cardinality": [1, 1]
                },
                {
                  "id": "windDirectionMPS",
                  "cardinality": [1, 1]
                }
              ]
            },
            {
              "id": "windVariation",
              "cardinality": [
                0,
                1
              ]
            },
            {
              "id": "visibilityGroup",
              "cardinality": [
                1,
                1
              ],
              "oneOf": [
                {
                  "id": "cavok",
                  "cardinality": [
                    1,
                    1
                  ]
                },
                {
                  "id": "visibilityDetails",
                  "cardinality": [
                    1,
                    1
                  ],
                  "sequence": [
                    {
                      "id": "visibility",
                      "cardinality": [
                        1,
                        1
                      ]
                    },
                    {
                      "id": "directionalVisibility",
                      "cardinality": [
                        0,
                        1
                      ]
                    },
                    {
                      "id": "rvr",
                      "cardinality": [
                        0,
                        4
                      ]
                    },
                    {
                      "id": "weatherGroup",
                      "cardinality": [
                        1,
                        1
                      ],
                      "oneOf": [
                        {
                          "id": "weather",
                          "cardinality": [
                            0,
                            3
                          ]
                        },
                        {
                          "id": "weatherSpecial",
                          "cardinality": [
                            0,
                            3
                          ]
                        },
                        {
                          "id": "noWeather",
                          "cardinality": [
                            0,
                            1
                          ]
                        }
                      ]
                    },
                    {
                      "id": "cloudGroup",
                      "cardinality": [
                        1,
                        1
                      ],
                      "oneOf": [
                        {
                          "id": "nsc",
                          "cardinality": [
                            1,
                            1
                          ]
                        },
                        {
                          "id": "ncd",
                          "cardinality": [
                            1,
                            1
                          ]
                        },
                        {
                          "id": "skyClear",
                          "cardinality": [
                            1,
                            1
                          ]
                        },
                        {
                          "id": "verticalVisibility",
                          "cardinality": [
                            1,
                            1
                          ]
                        },
                        {
                          "id": "cloudBase",
                          "cardinality": [
                            1,
                            4
                          ]
                        },
                        {
                          "id": "cloud",
                          "cardinality": [
                            1,
                            4
                          ]
                        },
                        {
                          "id": "cloudUnknown",
                          "cardinality": [
                            1,
                            4
                          ]
                        },
                        {
                          "id": "cloudAmount",
                          "cardinality": [
                            1,
                            4
                          ]
                        },
                        {
                          "id": "cloudAmountMissing",
                          "cardinality": [
                            1,
                            4
                          ]
                        },
                        {
                          "id": "cloudAllMissing",
                          "cardinality": [
                            1,
                            4
                          ]
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "id": "temperature",
              "cardinality": [
                1,
                1
              ]
            },
            {
              "id": "pressureGroup",
              "cardinality": [
                1,
                1
              ],
              "oneOf": [
                {
                  "id": "pressure",
                  "cardinality": [
                    1,
                    1
                  ]
                },
                {
                  "id": "pressureInches",
                  "cardinality": [
                    1,
                    1
                  ]
                }
              ]
            },
            {
              "id": "recentWeather",
              "cardinality": [
                0,
                3
              ]
            },
            {
              "id": "windshearGroup",
              "cardinality": [
                0,
                1
              ],
              "sequence": [
                {
                  "id": "windshear",
                  "cardinality": [
                    0,
                    1
                  ]
                },
                {
                  "id": "windshearTarget",
                  "cardinality": [
                    1,
                    1
                  ],
                  "oneOf": [
                    {
                      "id": "windshearRunway",
                      "cardinality": [
                        1,
                        1
                      ]
                    },
                    {
                      "id": "windshearAll",
                      "cardinality": [
                        1,
                        1
                      ],
                      "sequence": [
                        {
                          "id": "windshearAllRwy",
                          "cardinality": [
                            1,
                            1
                          ]
                        },
                        {
                          "id": "rwy",
                          "cardinality": [
                            1,
                            1
                          ]
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "id": "seaTemp",
              "cardinality": [
                0,
                1
              ]
            },
            {
              "id": "runwayState",
              "cardinality": [
                0,
                null
              ]
            },
            {
              "id": "trendGroup",
              "cardinality": [
                0,
                1
              ],
              "oneOf": [
                {
                  "id": "nosig",
                  "cardinality": [
                    1,
                    1
                  ]
                },
                {
                  "id": "trendChanges",
                  "cardinality": [
                    1,
                    null
                  ],
                  "sequence": [
                    {
                      "id": "trendType",
                      "cardinality": [
                        1,
                        1
                      ],
                      "oneOf": [
                        {
                          "id": "becmg",
                          "cardinality": [
                            1,
                            1
                          ]
                        },
                        {
                          "id": "tempo",
                          "cardinality": [
                            1,
                            1
                          ]
                        }
                      ]
                    },
                    {
                      "id": "trendTimeFM",
                      "cardinality": [
                        0,
                        1
                      ]
                    },
                    {
                      "id": "trendTimeTL",
                      "cardinality": [
                        0,
                        1
                      ]
                    },
                    {
                      "id": "trendWindGroup",
                      "cardinality": [0, 1],
                      "oneOf": [
                        { "id": "trendWind", "cardinality": [1, 1] },
                        { "id": "trendWindKT3", "cardinality": [1, 1] },
                        { "id": "trendWindKT2", "cardinality": [1, 1] },
                        { "id": "trendWindKT", "cardinality": [1, 1] },
                        { "id": "trendWindMPS", "cardinality": [1, 1] },
                        { "id": "trendWindDirectionSpeedKT3", "cardinality": [1, 1] },
                        { "id": "trendWindDirectionSpeedKT2", "cardinality": [1, 1] },
                        { "id": "trendWindDirectionSpeedKT", "cardinality": [1, 1] },
                        { "id": "trendWindDirectionSpeedMPS", "cardinality": [1, 1] },
                        { "id": "trendWindDirectionKT", "cardinality": [1, 1] },
                        { "id": "trendWindDirectionMPS", "cardinality": [1, 1] }
                      ]
                    },
                    {
                      "id": "trendConditions",
                      "cardinality": [0, 1],
                      "oneOf": [
                        { "id": "trendCavok", "cardinality": [1, 1] },
                        {
                          "id": "trendConditionsDetail",
                          "cardinality": [1, 1],
                          "sequence": [
                            { "id": "trendVisibility", "cardinality": [0, 1] },
                            {
                              "id": "trendWeatherGroup",
                              "cardinality": [1, 1],
                              "oneOf": [
                                { "id": "trendWeather", "cardinality": [0, 3] },
                                { "id": "trendNsw", "cardinality": [0, 1] }
                              ]
                            },
                            { "id": "trendCloud", "cardinality": [0, 4] }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
  ],
  "suggestions": {
    "items": {
      "correction": [
        {
          "text": "COR",
          "description": "Correction"
        }
      ],
      "icao": [],
      "nil": [
        {
          "text": "NIL",
          "description": "Message manquant (pas de données disponibles)"
        }
      ],
      "auto": [
        {
          "text": "AUTO",
          "description": "Observation automatique",
          "auto": true
        }
      ],
      "datetime": [],
      "windDirectionKT": [
        {
          "text": "Vent (KT)",
          "description": "Vent en noeuds",
          "type": "category",
          "serie": true,
          "children": [
            { "text": "000", "description": "Direction (3 chiffres)", "placeholder": "000", "editable": [{ "start": 0, "end": 3, "hint": "Direction (°)" }] },
            { "text": "VRB", "description": "Direction variable" }
          ]
        }
      ],
      "windDirectionMPS": [
        {
          "text": "Vent (MPS)",
          "description": "Vent en mètres/seconde",
          "type": "category",
          "serie": true,
          "children": [
            { "text": "000", "description": "Direction (3 chiffres)", "placeholder": "000", "editable": [{ "start": 0, "end": 3, "hint": "Direction (°)" }] },
            { "text": "VRB", "description": "Direction variable" }
          ]
        }
      ],
      "windDirectionSpeedKT": [
        { "text": "00", "description": "Vitesse 0-99 kt", "placeholder": "00", "editable": [{ "start": 0, "end": 2, "hint": "Vitesse (kt)" }] },
        { "text": "100", "description": "Vitesse 100-199 kt", "placeholder": "100", "editable": [{ "start": 1, "end": 3, "hint": "Vitesse (kt)" }] },
        { "text": "P00", "description": "Vitesse >XX kt (0-99)", "placeholder": "P00", "editable": [{ "start": 1, "end": 3, "hint": "Vitesse (kt)" }] },
        { "text": "P100", "description": "Vitesse >1XX kt (100-199)", "placeholder": "P100", "editable": [{ "start": 2, "end": 4, "hint": "Vitesse (kt)" }] }
      ],
      "windDirectionSpeedKT2": [
        { "text": "00", "description": "Vitesse 0-99 kt", "placeholder": "00", "editable": [{ "start": 0, "end": 2, "hint": "Vitesse (kt)" }] },
        { "text": "P00", "description": "Vitesse >XX kt (0-99)", "placeholder": "P00", "editable": [{ "start": 1, "end": 3, "hint": "Vitesse (kt)" }] }
      ],
      "windDirectionSpeedKT3": [
        { "text": "100", "description": "Vitesse 100-199 kt", "placeholder": "100", "editable": [{ "start": 1, "end": 3, "hint": "Vitesse (kt)" }] },
        { "text": "P100", "description": "Vitesse >1XX kt (100-199)", "placeholder": "P100", "editable": [{ "start": 2, "end": 4, "hint": "Vitesse (kt)" }] }
      ],
      "windDirectionSpeedMPS": [
        { "text": "00", "description": "Vitesse 0-99 m/s", "placeholder": "00", "editable": [{ "start": 0, "end": 2, "hint": "Vitesse (m/s)" }] },
        { "text": "P00", "description": "Vitesse >XX m/s", "placeholder": "P00", "editable": [{ "start": 1, "end": 3, "hint": "Vitesse (m/s)" }] }
      ],
      "windKT": [
        { "text": "KT", "label": "Sans rafale", "description": "" },
        { "text": "G00KT", "label": "G00", "description": "Rafale 0-99 kt", "placeholder": "G00KT", "editable": [{ "start": 1, "end": 3, "hint": "Rafale (kt)" }] },
        { "text": "G100KT", "label": "G100", "description": "Rafale 100-199 kt", "placeholder": "G100KT", "editable": [{ "start": 2, "end": 4, "hint": "Rafale (kt)" }] },
        { "text": "GP00KT", "label": "GP00", "description": "Rafale >XX kt (0-99)", "placeholder": "GP00KT", "editable": [{ "start": 2, "end": 4, "hint": "Rafale (kt)" }] },
        { "text": "GP100KT", "label": "GP100", "description": "Rafale >1XX kt (100-199)", "placeholder": "GP100KT", "editable": [{ "start": 3, "end": 5, "hint": "Rafale (kt)" }] }
      ],
      "windKT2": [
        { "text": "KT", "label": "Sans rafale", "description": "" },
        { "text": "G00KT", "label": "G00", "description": "Rafale 0-99 kt", "placeholder": "G00KT", "editable": [{ "start": 1, "end": 3, "hint": "Rafale (kt)" }] },
        { "text": "G100KT", "label": "G100", "description": "Rafale 100-199 kt", "placeholder": "G100KT", "editable": [{ "start": 2, "end": 4, "hint": "Rafale (kt)" }] },
        { "text": "GP00KT", "label": "GP00", "description": "Rafale >XX kt (0-99)", "placeholder": "GP00KT", "editable": [{ "start": 2, "end": 4, "hint": "Rafale (kt)" }] },
        { "text": "GP100KT", "label": "GP100", "description": "Rafale >1XX kt (100-199)", "placeholder": "GP100KT", "editable": [{ "start": 3, "end": 5, "hint": "Rafale (kt)" }] }
      ],
      "windKT3": [
        { "text": "KT", "label": "Sans rafale", "description": "" },
        { "text": "G100KT", "label": "G100", "description": "Rafale 100-199 kt", "placeholder": "G100KT", "editable": [{ "start": 2, "end": 4, "hint": "Rafale (kt)" }] },
        { "text": "GP100KT", "label": "GP100", "description": "Rafale >1XX kt (100-199)", "placeholder": "GP100KT", "editable": [{ "start": 3, "end": 5, "hint": "Rafale (kt)" }] }
      ],
      "windMPS": [
        { "text": "MPS", "label": "Sans rafale", "description": "" },
        { "text": "G00MPS", "label": "G00", "description": "Rafale 0-99 m/s", "placeholder": "G00MPS", "editable": [{ "start": 1, "end": 3, "hint": "Rafale (m/s)" }] },
        { "text": "GP00MPS", "label": "GP00", "description": "Rafale >XX m/s", "placeholder": "GP00MPS", "editable": [{ "start": 2, "end": 4, "hint": "Rafale (m/s)" }] }
      ],
      "wind": [],
      "windNotAvailable": [
        {
          "text": "/////KT",
          "description": "Vent non disponible (AUTO)",
          "auto": true
        },
        {
          "text": "/////MPS",
          "description": "Vent non disponible (AUTO)",
          "auto": true
        }
      ],
      "cavok": [
        {
          "text": "CAVOK",
          "description": "Plafond et Visibilité OK"
        }
      ],
      "visibility": [],
      "directionalVisibility": [
        {
          "type": "skip",
          "description": "Pas de visibilité directionnelle"
        }
      ],
      "visibilityNotAvailable": [
        {
          "text": "////",
          "description": "Visibilité non disponible (AUTO)",
          "auto": true
        }
      ],
      "rvr": [],
      "cloud": [
        { "type": "skip", "description": "Continuer sans CB/TCU" },
        { "text": "NSC", "description": "Pas de nuage significatif" },
        { "text": "NCD", "description": "Pas de nuage détecté (AUTO)", "auto": true },
        { "text": "FEW", "description": "Peu de nuages (1-2 octas)" },
        { "text": "SCT", "description": "Épars (3-4 octas)" },
        { "text": "BKN", "description": "Fragmenté (5-7 octas)" },
        { "text": "OVC", "description": "Couvert (8 octas)" },
        { "text": "CB", "description": "Cumulonimbus" },
        { "text": "TCU", "description": "Cumulus bourgeonnant" }
      ],
      "weather": [
        {
          "text": "-RA",
          "description": "Pluie faible"
        },
        {
          "text": "RA",
          "description": "Pluie modérée"
        },
        {
          "text": "+RA",
          "description": "Pluie forte"
        },
        {
          "text": "-DZ",
          "description": "Bruine faible"
        },
        {
          "text": "DZ",
          "description": "Bruine modérée"
        },
        {
          "text": "+DZ",
          "description": "Bruine forte"
        },
        {
          "text": "-SN",
          "description": "Neige faible"
        },
        {
          "text": "SN",
          "description": "Neige modérée"
        },
        {
          "text": "+SN",
          "description": "Neige forte"
        },
        {
          "text": "-SG",
          "description": "Neige en grains faible"
        },
        {
          "text": "SG",
          "description": "Neige en grains"
        },
        {
          "text": "-PL",
          "description": "Granules de glace faible"
        },
        {
          "text": "PL",
          "description": "Granules de glace"
        },
        {
          "text": "+PL",
          "description": "Granules de glace forte"
        },
        {
          "text": "-GR",
          "description": "Grêle faible"
        },
        {
          "text": "GR",
          "description": "Grêle"
        },
        {
          "text": "+GR",
          "description": "Grêle forte"
        },
        {
          "text": "-GS",
          "description": "Grésil faible"
        },
        {
          "text": "GS",
          "description": "Grésil"
        },
        {
          "text": "IC",
          "description": "Cristaux de glace"
        },
        {
          "text": "BR",
          "description": "Brume (vis 1000-5000m)"
        },
        {
          "text": "FG",
          "description": "Brouillard (vis <1000m)"
        },
        {
          "text": "BCFG",
          "description": "Bancs de brouillard"
        },
        {
          "text": "PRFG",
          "description": "Brouillard partiel"
        },
        {
          "text": "MIFG",
          "description": "Brouillard mince"
        },
        {
          "text": "FZFG",
          "description": "Brouillard givrant"
        },
        {
          "text": "HZ",
          "description": "Brume sèche"
        },
        {
          "text": "FU",
          "description": "Fumée"
        },
        {
          "text": "VA",
          "description": "Cendres volcaniques"
        },
        {
          "text": "DU",
          "description": "Poussière étendue"
        },
        {
          "text": "SA",
          "description": "Sable"
        },
        {
          "text": "PY",
          "description": "Embruns"
        },
        {
          "text": "TS",
          "description": "Orage"
        },
        {
          "text": "TSRA",
          "description": "Orage avec pluie"
        },
        {
          "text": "TSSN",
          "description": "Orage avec neige"
        },
        {
          "text": "TSPL",
          "description": "Orage avec granules de glace"
        },
        {
          "text": "TSGR",
          "description": "Orage avec grêle"
        },
        {
          "text": "TSGS",
          "description": "Orage avec grésil"
        },
        {
          "text": "-SHRA",
          "description": "Averses de pluie faibles"
        },
        {
          "text": "SHRA",
          "description": "Averses de pluie"
        },
        {
          "text": "+SHRA",
          "description": "Averses de pluie fortes"
        },
        {
          "text": "-SHSN",
          "description": "Averses de neige faibles"
        },
        {
          "text": "SHSN",
          "description": "Averses de neige"
        },
        {
          "text": "+SHSN",
          "description": "Averses de neige fortes"
        },
        {
          "text": "SHGR",
          "description": "Averses de grêle"
        },
        {
          "text": "SHGS",
          "description": "Averses de grésil"
        },
        {
          "text": "-FZRA",
          "description": "Pluie verglaçante faible"
        },
        {
          "text": "FZRA",
          "description": "Pluie verglaçante"
        },
        {
          "text": "+FZRA",
          "description": "Pluie verglaçante forte"
        },
        {
          "text": "-FZDZ",
          "description": "Bruine verglaçante faible"
        },
        {
          "text": "FZDZ",
          "description": "Bruine verglaçante"
        },
        {
          "text": "+FZDZ",
          "description": "Bruine verglaçante forte"
        },
        {
          "text": "BLSN",
          "description": "Chasse-neige élevée"
        },
        {
          "text": "BLDU",
          "description": "Chasse-poussière élevée"
        },
        {
          "text": "BLSA",
          "description": "Chasse-sable élevée"
        },
        {
          "text": "DRSN",
          "description": "Chasse-neige basse"
        },
        {
          "text": "DRDU",
          "description": "Chasse-poussière basse"
        },
        {
          "text": "DRSA",
          "description": "Chasse-sable basse"
        },
        {
          "text": "PO",
          "description": "Tourbillons de poussière/sable"
        },
        {
          "text": "SQ",
          "description": "Grains"
        },
        {
          "text": "FC",
          "description": "Trombe/Tornade"
        },
        {
          "text": "+FC",
          "description": "Tornade/Trombe marine"
        },
        {
          "text": "SS",
          "description": "Tempête de sable"
        },
        {
          "text": "+SS",
          "description": "Tempête de sable forte"
        },
        {
          "text": "DS",
          "description": "Tempête de poussière"
        },
        {
          "text": "+DS",
          "description": "Tempête de poussière forte"
        },
        {
          "text": "VCSH",
          "description": "Averses au voisinage"
        },
        {
          "text": "VCTS",
          "description": "Orage au voisinage"
        },
        {
          "text": "VCFG",
          "description": "Brouillard au voisinage"
        },
        {
          "text": "//",
          "description": "Temps non observé (AUTO)",
          "auto": true
        },
        {
          "type": "category",
          "text": "Temps présent",
          "description": "Phénomènes météo (optionnel)",
          "children": [
            {
              "text": "-RA",
              "description": "Pluie faible"
            },
            {
              "text": "RA",
              "description": "Pluie modérée"
            },
            {
              "text": "+RA",
              "description": "Pluie forte"
            },
            {
              "text": "-DZ",
              "description": "Bruine faible"
            },
            {
              "text": "DZ",
              "description": "Bruine modérée"
            },
            {
              "text": "+DZ",
              "description": "Bruine forte"
            },
            {
              "text": "-SN",
              "description": "Neige faible"
            },
            {
              "text": "SN",
              "description": "Neige modérée"
            },
            {
              "text": "+SN",
              "description": "Neige forte"
            },
            {
              "text": "-SG",
              "description": "Neige en grains faible"
            },
            {
              "text": "SG",
              "description": "Neige en grains"
            },
            {
              "text": "-PL",
              "description": "Granules de glace faible"
            },
            {
              "text": "PL",
              "description": "Granules de glace"
            },
            {
              "text": "+PL",
              "description": "Granules de glace forte"
            },
            {
              "text": "-GR",
              "description": "Grêle faible"
            },
            {
              "text": "GR",
              "description": "Grêle"
            },
            {
              "text": "+GR",
              "description": "Grêle forte"
            },
            {
              "text": "-GS",
              "description": "Grésil faible"
            },
            {
              "text": "GS",
              "description": "Grésil"
            },
            {
              "text": "IC",
              "description": "Cristaux de glace"
            },
            {
              "text": "BR",
              "description": "Brume (vis 1000-5000m)"
            },
            {
              "text": "FG",
              "description": "Brouillard (vis <1000m)"
            },
            {
              "text": "BCFG",
              "description": "Bancs de brouillard"
            },
            {
              "text": "PRFG",
              "description": "Brouillard partiel"
            },
            {
              "text": "MIFG",
              "description": "Brouillard mince"
            },
            {
              "text": "FZFG",
              "description": "Brouillard givrant"
            },
            {
              "text": "HZ",
              "description": "Brume sèche"
            },
            {
              "text": "FU",
              "description": "Fumée"
            },
            {
              "text": "VA",
              "description": "Cendres volcaniques"
            },
            {
              "text": "DU",
              "description": "Poussière étendue"
            },
            {
              "text": "SA",
              "description": "Sable"
            },
            {
              "text": "PY",
              "description": "Embruns"
            },
            {
              "text": "TS",
              "description": "Orage"
            },
            {
              "text": "TSRA",
              "description": "Orage avec pluie"
            },
            {
              "text": "TSSN",
              "description": "Orage avec neige"
            },
            {
              "text": "TSPL",
              "description": "Orage avec granules de glace"
            },
            {
              "text": "TSGR",
              "description": "Orage avec grêle"
            },
            {
              "text": "TSGS",
              "description": "Orage avec grésil"
            },
            {
              "text": "-SHRA",
              "description": "Averses de pluie faibles"
            },
            {
              "text": "SHRA",
              "description": "Averses de pluie"
            },
            {
              "text": "+SHRA",
              "description": "Averses de pluie fortes"
            },
            {
              "text": "-SHSN",
              "description": "Averses de neige faibles"
            },
            {
              "text": "SHSN",
              "description": "Averses de neige"
            },
            {
              "text": "+SHSN",
              "description": "Averses de neige fortes"
            },
            {
              "text": "SHGR",
              "description": "Averses de grêle"
            },
            {
              "text": "SHGS",
              "description": "Averses de grésil"
            },
            {
              "text": "-FZRA",
              "description": "Pluie verglaçante faible"
            },
            {
              "text": "FZRA",
              "description": "Pluie verglaçante"
            },
            {
              "text": "+FZRA",
              "description": "Pluie verglaçante forte"
            },
            {
              "text": "-FZDZ",
              "description": "Bruine verglaçante faible"
            },
            {
              "text": "FZDZ",
              "description": "Bruine verglaçante"
            },
            {
              "text": "+FZDZ",
              "description": "Bruine verglaçante forte"
            },
            {
              "text": "BLSN",
              "description": "Chasse-neige élevée"
            },
            {
              "text": "BLDU",
              "description": "Chasse-poussière élevée"
            },
            {
              "text": "BLSA",
              "description": "Chasse-sable élevée"
            },
            {
              "text": "DRSN",
              "description": "Chasse-neige basse"
            },
            {
              "text": "DRDU",
              "description": "Chasse-poussière basse"
            },
            {
              "text": "DRSA",
              "description": "Chasse-sable basse"
            },
            {
              "text": "PO",
              "description": "Tourbillons de poussière/sable"
            },
            {
              "text": "SQ",
              "description": "Grains"
            },
            {
              "text": "FC",
              "description": "Trombe/Tornade"
            },
            {
              "text": "+FC",
              "description": "Tornade/Trombe marine"
            },
            {
              "text": "SS",
              "description": "Tempête de sable"
            },
            {
              "text": "+SS",
              "description": "Tempête de sable forte"
            },
            {
              "text": "DS",
              "description": "Tempête de poussière"
            },
            {
              "text": "+DS",
              "description": "Tempête de poussière forte"
            },
            {
              "text": "VCSH",
              "description": "Averses au voisinage"
            },
            {
              "text": "VCTS",
              "description": "Orage au voisinage"
            },
            {
              "text": "VCFG",
              "description": "Brouillard au voisinage"
            },
            {
              "text": "//",
              "description": "Temps non observé (AUTO)",
              "auto": true
            }
          ]
        },
        {
          "text": "RE",
          "description": "Temps récent"
        },
        {
          "text": "NSW",
          "description": "Pas de temps significatif"
        }
      ],
      "temperature": [
        {
          "text": "Température/Point de rosée",
          "description": "Température/Point de rosée en °C",
          "type": "category",
          "children": [
            { "text": "00/00", "description": "Temp positive / Point de rosée positif", "placeholder": "00/00", "editable": [{ "start": 0, "end": 2, "hint": "Temp air" }, { "start": 3, "end": 5, "hint": "Pt rosée" }] },
            { "text": "M00/00", "description": "Temp négative / Point de rosée positif", "placeholder": "M00/00", "editable": [{ "start": 1, "end": 3, "hint": "Temp air" }, { "start": 4, "end": 6, "hint": "Pt rosée" }] },
            { "text": "00/M00", "description": "Temp positive / Point de rosée négatif", "placeholder": "00/M00", "editable": [{ "start": 0, "end": 2, "hint": "Temp air" }, { "start": 4, "end": 6, "hint": "Pt rosée" }] },
            { "text": "M00/M00", "description": "Temp négative / Point de rosée négatif", "placeholder": "M00/M00", "editable": [{ "start": 1, "end": 3, "hint": "Temp air" }, { "start": 5, "end": 7, "hint": "Pt rosée" }] }
          ]
        },
        { "text": "/////", "description": "Température/Point de rosée non disponible (AUTO)", "auto": true }
      ],
      "pressure": [],
      "recentWeather": [
        {
          "text": "Temps récent",
          "description": "Temps depuis le dernier message",
          "type": "category",
          "children": [
            { "text": "RERASN", "description": "Pluie et neige mêlées récentes" },
            { "text": "REFZDZ", "description": "Bruine verglaçante récente" },
            { "text": "REFZRA", "description": "Pluie verglaçante récente" },
            { "text": "REDZ", "description": "Bruine récente" },
            { "text": "RESHRA", "description": "Averses de pluie récentes" },
            { "text": "RERA", "description": "Pluie récente" },
            { "text": "RESHSN", "description": "Averses de neige récentes" },
            { "text": "RESN", "description": "Neige récente" },
            { "text": "RESG", "description": "Neige en grains récente" },
            { "text": "RESHGR", "description": "Averses de grêle récentes" },
            { "text": "RESHGS", "description": "Averses de neige roulée récentes" },
            { "text": "REBLSN", "description": "Chasse-neige récente" },
            { "text": "RESS", "description": "Tempête de sable récente" },
            { "text": "REDS", "description": "Tempête de poussière récente" },
            { "text": "RETSRA", "description": "Orage avec pluie récent" },
            { "text": "RETSSN", "description": "Orage avec neige récent" },
            { "text": "RETSGR", "description": "Orage avec grêle récent" },
            { "text": "RETSGS", "description": "Orage avec neige roulée récent" },
            { "text": "RETS", "description": "Orage récent" },
            { "text": "REFC", "description": "Nuage en entonnoir récent" },
            { "text": "REVA", "description": "Cendres volcaniques récentes" },
            { "text": "REPL", "description": "Granules de glace récentes" },
            { "text": "REUP", "description": "Précipitations non identifiées récentes" },
            { "text": "REFZUP", "description": "Précip. verglaçantes non identifiées" },
            { "text": "RETSUP", "description": "Orage avec précip. non identifiées" },
            { "text": "RESHUP", "description": "Averses non identifiées récentes" },
            { "text": "RE//", "description": "Temps récent non disponible" }
          ]
        }
      ],
      "nosig": [
        { "text": "NOSIG", "description": "Pas de changement significatif" }
      ],
      "becmg": [
        { "text": "Tendance", "description": "Évolution prévue (max 3)", "type": "category", "children": [
          { "text": "BECMG", "description": "Devenant - changement régulier ou irrégulier" },
          { "text": "TEMPO", "description": "Fluctuations temporaires <1h chacune, <50% de la période" }
        ]}
      ],
      "tempo": [],
      "windshear": [
        {
          "text": "Cisaillement de vent",
          "description": "Cisaillement sur piste",
          "type": "category",
          "children": [
            { "text": "WS R00", "description": "Cisaillement sur piste", "placeholder": "WS R00", "editable": [{ "start": 4, "end": 6 }] },
            { "text": "WS R00L", "description": "Cisaillement sur piste gauche", "placeholder": "WS R00L", "editable": [{ "start": 4, "end": 6 }] },
            { "text": "WS R00C", "description": "Cisaillement sur piste centrale", "placeholder": "WS R00C", "editable": [{ "start": 4, "end": 6 }] },
            { "text": "WS R00R", "description": "Cisaillement sur piste droite", "placeholder": "WS R00R", "editable": [{ "start": 4, "end": 6 }] },
            { "text": "WS ALL RWY", "description": "Cisaillement sur toutes les pistes" }
          ]
        }
      ],
      "seaTemp": [
        {
          "text": "Info mer",
          "description": "Température de surface de la mer",
          "type": "category",
          "serie": true,
          "children": [
            { "text": "W00/", "description": "Température positive (°C)", "placeholder": "W00/", "editable": [{ "start": 1, "end": 3, "hint": "Temp mer" }] },
            { "text": "WM00/", "description": "Température négative (°C)", "placeholder": "WM00/", "editable": [{ "start": 2, "end": 4, "hint": "Temp mer" }] },
            { "text": "W///", "description": "Température non disponible" }
          ]
        }
      ],
      "seaStateValue": [
        {
          "text": "État de la mer",
          "description": "État de la mer (0-9)",
          "type": "category",
          "serie": true,
          "children": [
            { "text": "S0", "description": "État 0 - Calme (vitreux)", "placeholder": "S0", "editable": [{ "start": 1, "end": 2, "hint": "État mer" }] },
            { "text": "S/", "description": "État non disponible" }
          ]
        }
      ],
      "waveHeightValue": [
        {
          "text": "Hauteur vagues",
          "description": "Hauteur significative en décimètres",
          "type": "category",
          "serie": true,
          "children": [
            { "text": "H0", "description": "Hauteur 0-9 dm", "placeholder": "H0", "editable": [{ "start": 1, "end": 2, "hint": "Ht vagues" }] },
            { "text": "H00", "description": "Hauteur 00-99 dm", "placeholder": "H00", "editable": [{ "start": 1, "end": 3, "hint": "Ht vagues" }] },
            { "text": "H000", "description": "Hauteur 000-999 dm", "placeholder": "H000", "editable": [{ "start": 1, "end": 4, "hint": "Ht vagues" }] },
            { "text": "H///", "description": "Hauteur non disponible" }
          ]
        }
      ],
      "trendTimeFM": [
        { "text": "Période de changement", "description": "Période du changement", "type": "category", "children": [
          { "text": "FM0000", "description": "À partir de", "placeholder": "FM0000", "editable": [{ "start": 2, "end": 6 }] },
          { "text": "TL0000", "description": "Jusqu'à", "placeholder": "TL0000", "editable": [{ "start": 2, "end": 6 }] },
          { "text": "AT0000", "description": "À l'heure exacte", "placeholder": "AT0000", "editable": [{ "start": 2, "end": 6 }] }
        ]}
      ],
      "trendTimeTL": [],
      "trendTimeAT": [],
      "trendWindDirectionKT": [
        { "text": "Vent tendance (KT)", "description": "Vent en noeuds (VRB interdit)", "type": "category", "serie": true, "children": [
          { "text": "000", "description": "Direction (3 chiffres)", "placeholder": "000", "editable": [{ "start": 0, "end": 3, "hint": "Direction (°)" }] }
        ]}
      ],
      "trendWindDirectionMPS": [
        { "text": "Vent tendance (MPS)", "description": "Vent en m/s (VRB interdit)", "type": "category", "serie": true, "children": [
          { "text": "000", "description": "Direction (3 chiffres)", "placeholder": "000", "editable": [{ "start": 0, "end": 3, "hint": "Direction (°)" }] }
        ]}
      ],
      "trendWindDirectionSpeedKT": [
        { "text": "00", "description": "Vitesse 0-99 kt", "placeholder": "00", "editable": [{ "start": 0, "end": 2, "hint": "Vitesse (kt)" }] },
        { "text": "100", "description": "Vitesse 100-199 kt", "placeholder": "100", "editable": [{ "start": 1, "end": 3, "hint": "Vitesse (kt)" }] },
        { "text": "P00", "description": "Vitesse >XX kt (0-99)", "placeholder": "P00", "editable": [{ "start": 1, "end": 3, "hint": "Vitesse (kt)" }] },
        { "text": "P100", "description": "Vitesse >1XX kt (100-199)", "placeholder": "P100", "editable": [{ "start": 2, "end": 4, "hint": "Vitesse (kt)" }] }
      ],
      "trendWindDirectionSpeedKT2": [
        { "text": "00", "description": "Vitesse 0-99 kt", "placeholder": "00", "editable": [{ "start": 0, "end": 2, "hint": "Vitesse (kt)" }] },
        { "text": "P00", "description": "Vitesse >XX kt (0-99)", "placeholder": "P00", "editable": [{ "start": 1, "end": 3, "hint": "Vitesse (kt)" }] }
      ],
      "trendWindDirectionSpeedKT3": [
        { "text": "100", "description": "Vitesse 100-199 kt", "placeholder": "100", "editable": [{ "start": 1, "end": 3, "hint": "Vitesse (kt)" }] },
        { "text": "P100", "description": "Vitesse >1XX kt (100-199)", "placeholder": "P100", "editable": [{ "start": 2, "end": 4, "hint": "Vitesse (kt)" }] }
      ],
      "trendWindDirectionSpeedMPS": [
        { "text": "00", "description": "Vitesse 0-99 m/s", "placeholder": "00", "editable": [{ "start": 0, "end": 2, "hint": "Vitesse (m/s)" }] },
        { "text": "P00", "description": "Vitesse >XX m/s", "placeholder": "P00", "editable": [{ "start": 1, "end": 3, "hint": "Vitesse (m/s)" }] }
      ],
      "trendWindKT": [
        { "text": "KT", "label": "Sans rafale", "description": "" },
        { "text": "G00KT", "label": "G00", "description": "Rafale 0-99 kt", "placeholder": "G00KT", "editable": [{ "start": 1, "end": 3, "hint": "Rafale (kt)" }] },
        { "text": "G100KT", "label": "G100", "description": "Rafale 100-199 kt", "placeholder": "G100KT", "editable": [{ "start": 2, "end": 4, "hint": "Rafale (kt)" }] },
        { "text": "GP00KT", "label": "GP00", "description": "Rafale >XX kt (0-99)", "placeholder": "GP00KT", "editable": [{ "start": 2, "end": 4, "hint": "Rafale (kt)" }] },
        { "text": "GP100KT", "label": "GP100", "description": "Rafale >1XX kt (100-199)", "placeholder": "GP100KT", "editable": [{ "start": 3, "end": 5, "hint": "Rafale (kt)" }] }
      ],
      "trendWindKT2": [
        { "text": "KT", "label": "Sans rafale", "description": "" },
        { "text": "G00KT", "label": "G00", "description": "Rafale 0-99 kt", "placeholder": "G00KT", "editable": [{ "start": 1, "end": 3, "hint": "Rafale (kt)" }] },
        { "text": "G100KT", "label": "G100", "description": "Rafale 100-199 kt", "placeholder": "G100KT", "editable": [{ "start": 2, "end": 4, "hint": "Rafale (kt)" }] },
        { "text": "GP00KT", "label": "GP00", "description": "Rafale >XX kt (0-99)", "placeholder": "GP00KT", "editable": [{ "start": 2, "end": 4, "hint": "Rafale (kt)" }] },
        { "text": "GP100KT", "label": "GP100", "description": "Rafale >1XX kt (100-199)", "placeholder": "GP100KT", "editable": [{ "start": 3, "end": 5, "hint": "Rafale (kt)" }] }
      ],
      "trendWindKT3": [
        { "text": "KT", "label": "Sans rafale", "description": "" },
        { "text": "G100KT", "label": "G100", "description": "Rafale 100-199 kt", "placeholder": "G100KT", "editable": [{ "start": 2, "end": 4, "hint": "Rafale (kt)" }] },
        { "text": "GP100KT", "label": "GP100", "description": "Rafale >1XX kt (100-199)", "placeholder": "GP100KT", "editable": [{ "start": 3, "end": 5, "hint": "Rafale (kt)" }] }
      ],
      "trendWindMPS": [
        { "text": "MPS", "label": "Sans rafale", "description": "" },
        { "text": "G00MPS", "label": "G00", "description": "Rafale 0-99 m/s", "placeholder": "G00MPS", "editable": [{ "start": 1, "end": 3, "hint": "Rafale (m/s)" }] },
        { "text": "GP00MPS", "label": "GP00", "description": "Rafale >XX m/s", "placeholder": "GP00MPS", "editable": [{ "start": 2, "end": 4, "hint": "Rafale (m/s)" }] }
      ],
      "trendWind": [],
      "trendCavok": [
        { "text": "CAVOK", "description": "Plafond et visibilité OK (tendance)" }
      ],
      "trendVisibility": [],
      "trendWeather": [
        { "text": "Temps tendance", "description": "Phénomènes météo prévus", "type": "category", "children": [
          { "text": "Précipitations", "description": "Pluie, bruine, neige", "type": "category", "children": [
            { "text": "-DZ", "description": "Bruine faible" }, { "text": "DZ", "description": "Bruine" }, { "text": "+DZ", "description": "Bruine forte" },
            { "text": "-RA", "description": "Pluie faible" }, { "text": "RA", "description": "Pluie" }, { "text": "+RA", "description": "Pluie forte" },
            { "text": "-SN", "description": "Neige faible" }, { "text": "SN", "description": "Neige" }, { "text": "+SN", "description": "Neige forte" },
            { "text": "-SG", "description": "Neige en grains faible" }, { "text": "SG", "description": "Neige en grains" }, { "text": "+SG", "description": "Neige en grains forte" },
            { "text": "-PL", "description": "Granules de glace faible" }, { "text": "PL", "description": "Granules de glace" }, { "text": "+PL", "description": "Granules de glace forte" },
            { "text": "-DS", "description": "Tempête de poussière faible" }, { "text": "DS", "description": "Tempête de poussière" }, { "text": "+DS", "description": "Tempête de poussière forte" },
            { "text": "-SS", "description": "Tempête de sable faible" }, { "text": "SS", "description": "Tempête de sable" }, { "text": "+SS", "description": "Tempête de sable forte" }
          ]},
          { "text": "Verglaçant", "description": "Précipitations verglaçantes", "type": "category", "children": [
            { "text": "-FZDZ", "description": "Bruine verglaçante faible" }, { "text": "FZDZ", "description": "Bruine verglaçante" }, { "text": "+FZDZ", "description": "Bruine verglaçante forte" },
            { "text": "-FZRA", "description": "Pluie verglaçante faible" }, { "text": "FZRA", "description": "Pluie verglaçante" }, { "text": "+FZRA", "description": "Pluie verglaçante forte" }
          ]},
          { "text": "Averses", "description": "Averses", "type": "category", "children": [
            { "text": "-SHRA", "description": "Averses de pluie faibles" }, { "text": "SHRA", "description": "Averses de pluie" }, { "text": "+SHRA", "description": "Averses de pluie fortes" },
            { "text": "-SHSN", "description": "Averses de neige faibles" }, { "text": "SHSN", "description": "Averses de neige" }, { "text": "+SHSN", "description": "Averses de neige fortes" },
            { "text": "-SHGR", "description": "Averses de grêle faibles" }, { "text": "SHGR", "description": "Averses de grêle" }, { "text": "+SHGR", "description": "Averses de grêle fortes" },
            { "text": "-SHGS", "description": "Averses de grésil faibles" }, { "text": "SHGS", "description": "Averses de grésil" }, { "text": "+SHGS", "description": "Averses de grésil fortes" }
          ]},
          { "text": "Orage", "description": "Orage avec précipitations", "type": "category", "children": [
            { "text": "-TS", "description": "Orage faible" }, { "text": "TS", "description": "Orage" }, { "text": "+TS", "description": "Orage fort" },
            { "text": "-TSRA", "description": "Orage faible avec pluie" }, { "text": "TSRA", "description": "Orage avec pluie" }, { "text": "+TSRA", "description": "Orage fort avec pluie" },
            { "text": "-TSSN", "description": "Orage faible avec neige" }, { "text": "TSSN", "description": "Orage avec neige" }, { "text": "+TSSN", "description": "Orage fort avec neige" },
            { "text": "-TSGR", "description": "Orage faible avec grêle" }, { "text": "TSGR", "description": "Orage avec grêle" }, { "text": "+TSGR", "description": "Orage fort avec grêle" },
            { "text": "-TSGS", "description": "Orage faible avec grésil" }, { "text": "TSGS", "description": "Orage avec grésil" }, { "text": "+TSGS", "description": "Orage fort avec grésil" }
          ]},
          { "text": "Obscurcissement", "description": "Brouillard, brume, fumée", "type": "category", "children": [
            { "text": "FG", "description": "Brouillard" }, { "text": "BR", "description": "Brume" }, { "text": "HZ", "description": "Brume sèche" },
            { "text": "FU", "description": "Fumée" }, { "text": "VA", "description": "Cendres volcaniques" },
            { "text": "SA", "description": "Sable" }, { "text": "DU", "description": "Poussière" },
            { "text": "BCFG", "description": "Bancs de brouillard" }, { "text": "PRFG", "description": "Brouillard partiel" }, { "text": "MIFG", "description": "Brouillard mince" }, { "text": "FZFG", "description": "Brouillard givrant" },
            { "text": "BLDU", "description": "Chasse-poussière élevée" }, { "text": "BLSA", "description": "Chasse-sable élevée" }, { "text": "BLSN", "description": "Chasse-neige élevée" },
            { "text": "DRDU", "description": "Chasse-poussière basse" }, { "text": "DRSA", "description": "Chasse-sable basse" }, { "text": "DRSN", "description": "Chasse-neige basse" }
          ]},
          { "text": "Autres", "description": "Autres phénomènes", "type": "category", "children": [
            { "text": "SQ", "description": "Grains" }, { "text": "PO", "description": "Tourbillons de poussière/sable" }, { "text": "FC", "description": "Trombe" }
          ]}
        ]}
      ],
      "trendNsw": [
        { "text": "NSW", "description": "Pas de temps significatif" }
      ],
      "trendCloud": [
        { "text": "Nuages tendance", "description": "Nuages prévus", "type": "category", "children": [
          { "text": "FEW000", "description": "Peu de nuages", "placeholder": "FEW000", "editable": [{ "start": 3, "end": 6 }] },
          { "text": "SCT000", "description": "Épars", "placeholder": "SCT000", "editable": [{ "start": 3, "end": 6 }] },
          { "text": "BKN000", "description": "Fragmenté", "placeholder": "BKN000", "editable": [{ "start": 3, "end": 6 }] },
          { "text": "OVC000", "description": "Couvert", "placeholder": "OVC000", "editable": [{ "start": 3, "end": 6 }] },
          { "text": "VV000", "description": "Visibilité verticale", "placeholder": "VV000", "editable": [{ "start": 2, "end": 5 }] },
          { "text": "NSC", "description": "Pas de nuages significatifs" }
        ]}
      ],
      "cloudAmount": [
        {
          "text": "Nuages",
          "description": "Nuages ou condition du ciel",
          "type": "category",
          "children": [
            {
              "text": "Couche nuageuse",
              "description": "Quantité + hauteur",
              "type": "category",
              "serie": true,
              "children": [
                { "text": "FEW", "description": "Peu de nuages (1-2 octas)" },
                { "text": "SCT", "description": "Nuages épars (3-4 octas)" },
                { "text": "BKN", "description": "Nuages fragmentés (5-7 octas)" },
                { "text": "OVC", "description": "Ciel couvert (8 octas)" }
              ]
            },
            { "text": "VV000", "description": "Visibilité verticale", "placeholder": "VV000", "editable": [{ "start": 2, "end": 5 }] },
            { "text": "VV///", "description": "Visibilité verticale non disponible", "auto": true },
            { "text": "NSC", "description": "Pas de nuages significatifs" },
            { "text": "NCD", "description": "Aucun nuage détecté" }
          ]
        }
      ],
      "nsc": [],
      "ncd": [],
      "verticalVisibility": [],
      "cloudBase": []
    },
    "after": {
      "identifier": [
        "identifier",
        "icao"
      ],
      "correction": [
        "icao"
      ],
      "icao": [
        "datetime"
      ],
      "datetime": [
        "nil",
        "auto",
        "windDirectionKT",
        "windDirectionMPS",
        "wind",
        "windNotAvailable"
      ],
      "auto": [
        "windDirectionKT",
        "windDirectionMPS",
        "wind",
        "windNotAvailable"
      ],
      "windDirectionKT": [
        "windDirectionSpeedKT2",
        "windDirectionSpeedKT3"
      ],
      "windDirectionMPS": [
        "windDirectionSpeedMPS"
      ],
      "windDirectionSpeedKT": [
        "windKT"
      ],
      "windDirectionSpeedKT2": [
        "windKT2"
      ],
      "windDirectionSpeedKT3": [
        "windKT3"
      ],
      "windDirectionSpeedMPS": [
        "windMPS"
      ],
      "windKT": [
        "windVariation",
        "cavok",
        "visibility",
        "visibilityNotAvailable"
      ],
      "windKT2": [
        "windVariation",
        "cavok",
        "visibility",
        "visibilityNotAvailable"
      ],
      "windKT3": [
        "windVariation",
        "cavok",
        "visibility",
        "visibilityNotAvailable"
      ],
      "windMPS": [
        "windVariation",
        "cavok",
        "visibility",
        "visibilityNotAvailable"
      ],
      "windDirectionSpeedGust": [
        "wind"
      ],
      "wind": [
        "windVariation",
        "cavok",
        "visibility",
        "directionalVisibility",
        "visibilityNotAvailable",
        "rvr"
      ],
      "windNotAvailable": [
        "windVariation",
        "cavok",
        "visibility",
        "directionalVisibility",
        "visibilityNotAvailable",
        "rvr"
      ],
      "windVariation": [
        "cavok",
        "visibility",
        "directionalVisibility",
        "visibilityNotAvailable",
        "rvr"
      ],
      "visibility": [
        "directionalVisibility",
        "rvr",
        "weather",
        "cloudAmount"
      ],
      "visibilityNotAvailable": [
        "rvr",
        "weather",
        "cloudAmount"
      ],
      "directionalVisibility": [
        "rvr",
        "weather",
        "cloudAmount"
      ],
      "rvr": [
        "rvr",
        "weather",
        "cloudAmount",
        "cloudAmountMissing",
        "cloudAllMissing"
      ],
      "weather": [
        "weather",
        "cloudAmount",
        "cloudAmountMissing",
        "cloudAllMissing"
      ],
      "noWeather": [
        "cloudAmount",
        "cloudAmountMissing",
        "cloudAllMissing"
      ],
      "cloudAmount": [
        "cloudBase"
      ],
      "cloudBase": [
        "cloud"
      ],
      "cloud": [
        "cloudAmount",
        "cloudAmountMissing",
        "cloudAllMissing",
        "temperature"
      ],
      "nsc": [
        "temperature"
      ],
      "ncd": [
        "temperature"
      ],
      "cloudAmountMissing": [
        "cloudAmountMissing",
        "temperature"
      ],
      "cloudAllMissing": [
        "cloudAllMissing",
        "temperature"
      ],
      "verticalVisibility": [
        "temperature"
      ],
      "cavok": [
        "temperature"
      ],
      "temperature": [
        "pressure"
      ],
      "pressure": ["recentWeather", "windshear", "seaTemp", "nosig", "becmg"],
      "pressureInches": ["nosig", "becmg"],
      "seaTemp": ["seaStateValue", "waveHeightValue"],
      "seaStateValue": ["nosig", "becmg"],
      "waveHeightValue": ["nosig", "becmg"],
      "seaState": ["nosig", "becmg"],
      "waveHeight": ["nosig", "becmg"],
      "recentWeather": ["recentWeather", "windshear", "seaTemp", "nosig", "becmg"],
      "windshear": ["seaTemp", "nosig", "becmg"],
      "windshearAllRwy": ["seaTemp", "nosig", "becmg"],
      "windshearRunway": ["seaTemp", "nosig", "becmg"],
      "nosig": [],
      "becmg": ["trendTimeFM", "trendWindDirectionKT", "trendWindDirectionMPS", "trendCavok", "trendVisibility", "trendWeather", "trendNsw", "trendCloud"],
      "tempo": ["trendTimeFM", "trendWindDirectionKT", "trendWindDirectionMPS", "trendCavok", "trendVisibility", "trendWeather", "trendNsw", "trendCloud"],
      "trendTimeFM": ["trendTimeTL", "trendWindDirectionKT", "trendWindDirectionMPS", "trendCavok", "trendVisibility", "trendWeather", "trendNsw", "trendCloud"],
      "trendTimeTL": ["trendWindDirectionKT", "trendWindDirectionMPS", "trendCavok", "trendVisibility", "trendWeather", "trendNsw", "trendCloud"],
      "trendWindDirectionKT": ["trendWindDirectionSpeedKT2", "trendWindDirectionSpeedKT3"],
      "trendWindDirectionMPS": ["trendWindDirectionSpeedMPS"],
      "trendWindDirectionSpeedKT": ["trendWindKT"],
      "trendWindDirectionSpeedKT2": ["trendWindKT2"],
      "trendWindDirectionSpeedKT3": ["trendWindKT3"],
      "trendWindDirectionSpeedMPS": ["trendWindMPS"],
      "trendWindKT": ["trendCavok", "trendVisibility", "trendWeather", "trendNsw", "trendCloud"],
      "trendWindKT2": ["trendCavok", "trendVisibility", "trendWeather", "trendNsw", "trendCloud"],
      "trendWindKT3": ["trendCavok", "trendVisibility", "trendWeather", "trendNsw", "trendCloud"],
      "trendWindMPS": ["trendCavok", "trendVisibility", "trendWeather", "trendNsw", "trendCloud"],
      "trendWind": ["trendCavok", "trendVisibility", "trendWeather", "trendNsw", "trendCloud"],
      "trendCavok": ["becmg"],
      "trendVisibility": ["trendWeather", "trendNsw", "trendCloud"],
      "trendWeather": ["trendNsw", "trendCloud"],
      "trendNsw": ["trendCloud"],
      "trendCloud": ["trendCloud", "becmg"]
    }
  },
  "codeTable4678": {
    "intensity": {
      "-": "Faible",
      "": "Modéré",
      "+": "Fort"
    },
    "proximity": {
      "VC": "Au voisinage (8-16 km)"
    },
    "descriptor": {
      "MI": "Mince",
      "PR": "Partiel",
      "BC": "Bancs",
      "DR": "Chasse basse",
      "BL": "Chasse élevée",
      "SH": "Averses",
      "TS": "Orage",
      "FZ": "Givrant"
    },
    "precipitation": {
      "DZ": "Bruine",
      "RA": "Pluie",
      "SN": "Neige",
      "SG": "Neige en grains",
      "IC": "Cristaux de glace",
      "PL": "Granules de glace",
      "GR": "Grêle (≥5mm)",
      "GS": "Grésil (<5mm) et/ou neige roulée",
      "UP": "Précipitation inconnue (AUTO)"
    },
    "obscuration": {
      "BR": "Brume (vis 1000-5000m)",
      "FG": "Brouillard (vis <1000m)",
      "FU": "Fumée",
      "VA": "Cendres volcaniques",
      "DU": "Poussière étendue",
      "SA": "Sable",
      "HZ": "Brume sèche",
      "PY": "Embruns"
    },
    "other": {
      "PO": "Tourbillons de poussière/sable",
      "SQ": "Grains",
      "FC": "Trombe (tornade/trombe marine)",
      "SS": "Tempête de sable",
      "DS": "Tempête de poussière"
    }
  },
  "examples": [
    "METAR LFPG 281030Z 27015KT 9999 FEW040 12/05 Q1023 NOSIG",
    "METAR LFPG 281030Z 27015G25KT 350V030 9999 FEW040CB SCT100 12/05 Q1023 TEMPO 3000 TSRA",
    "SPECI LFML 281045Z 09012KT 3000 BR BKN004 08/07 Q1019",
    "METAR LFPG 281030Z AUTO 27015KT 9999 // NCD 12/05 Q1023",
    "METAR LFBO 281030Z 00000KT CAVOK 15/08 Q1025 NOSIG",
    "METAR LFPG 281030Z VRB02KT 0400 R24/0800U FG VV001 05/05 Q1018 BECMG FM1100 TL1200 2000 BR",
    "METAR LFPG 281030Z 27015KT 9999 -RA FEW020 SCT040 BKN080 12/08 Q1015 RETS TEMPO 5000 TSRA BKN025CB",
    "METAR LFPG 281030Z NIL",
    "METAR LFBO 281030Z COR 31012KT 9999 SCT035 18/12 Q1022 NOSIG"
  ]
}
