{
  "name": "METAR/SPECI",
  "version": "2.0.0",
  "description": "METAR/SPECI: Aerodrome meteorological report",
  "tokens": {
    "identifier": {
      "pattern": "^(METAR|SPECI)$",
      "category": "keyword",
      "description": "Message type identifier"
    },
    "correction": {
      "pattern": "^COR$",
      "category": "keyword",
      "description": "Correction indicator for corrected report"
    },
    "icao": {
      "pattern": "^[A-Z]{4}$",
      "category": "location",
      "description": "ICAO location indicator",
      "placeholder": {
        "value": "AAAA",
        "editable": [{ "start": 0, "end": 4 }]
      }
    },
    "datetime": {
      "pattern": "^\\d{6}Z$",
      "category": "datetime",
      "description": "Day and time 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": "Missing report indicator"
    },
    "auto": {
      "pattern": "^AUTO$",
      "category": "keyword",
      "description": "Fully automated observation without human intervention"
    },
    "windDirectionKT": {
      "pattern": "^(VRB|\\d{3})$",
      "category": "input",
      "description": "Wind direction (KT)"
    },
    "windDirectionMPS": {
      "pattern": "^(VRB|\\d{3})$",
      "category": "input",
      "description": "Wind direction (MPS)"
    },
    "windDirectionSpeedKT": {
      "pattern": "^(VRB|\\d{3})P?1?\\d{2}$",
      "category": "input",
      "description": "Wind direction + speed (KT)",
      "appendToPrevious": true
    },
    "windDirectionSpeedKT2": {
      "pattern": "^(VRB|\\d{3})P?\\d{2}$",
      "category": "input",
      "description": "Wind direction + speed (KT, 0-99 kt)",
      "appendToPrevious": true
    },
    "windDirectionSpeedKT3": {
      "pattern": "^(VRB|\\d{3})P?1\\d{2}$",
      "category": "input",
      "description": "Wind direction + speed (KT, 100-199 kt)",
      "appendToPrevious": true
    },
    "windDirectionSpeedMPS": {
      "pattern": "^(VRB|\\d{3})P?\\d{2}$",
      "category": "input",
      "description": "Wind direction + speed (MPS)",
      "appendToPrevious": true
    },
    "windKT": {
      "pattern": "^(VRB|\\d{3})P?1?\\d{2}(GP?1?\\d{2})?KT$",
      "category": "input",
      "description": "Complete wind group (KT)",
      "appendToPrevious": true
    },
    "windKT2": {
      "pattern": "^(VRB|\\d{3})P?\\d{2}(GP?1?\\d{2})?KT$",
      "category": "input",
      "description": "Complete wind group (KT, 2-digit speed)",
      "appendToPrevious": true
    },
    "windKT3": {
      "pattern": "^(VRB|\\d{3})P?1\\d{2}(GP?1\\d{2})?KT$",
      "category": "input",
      "description": "Complete wind group (KT, 3-digit speed/gust)",
      "appendToPrevious": true
    },
    "windMPS": {
      "pattern": "^(VRB|\\d{3})P?\\d{2}(GP?\\d{2})?MPS$",
      "category": "input",
      "description": "Complete wind group (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": "Complete wind group"
    },
    "windNotAvailable": {
      "pattern": "^\\/{5}(KT|MPS)$",
      "category": "unavailable",
      "description": "Wind not available from automatic system (AUTO)"
    },
    "windVariation": {
      "pattern": "^\\d{3}V\\d{3}$",
      "category": "measurement",
      "description": "Significant direction variations",
      "placeholder": { "value": "000V000", "editable": [{ "start": 0, "end": 3, "hint": "Min direction (°)" }, { "start": 4, "end": 7, "hint": "Max direction (°)" }] },
      "excludeWhen": { "hasToken": "^VRB\\d+" }
    },
    "cavok": {
      "pattern": "^CAVOK$",
      "category": "status",
      "description": "Ceiling And Visibility OK - vis ≥10km, no cloud <1500m/MSA, no CB/TCU, no sig wx"
    },
    "visibility": {
      "pattern": "^\\d{4}$",
      "category": "measurement",
      "description": "Prevailing or minimum visibility in metres",
      "placeholder": { "value": "0000", "editable": [{ "start": 0, "end": 4 }] }
    },
    "visibilityNotAvailable": {
      "pattern": "^\\/{4}$",
      "category": "unavailable",
      "description": "Visibility not available from automatic system (AUTO)"
    },
    "visibilitySM": {
      "pattern": "^(M?\\d+(\\/\\d+)?|\\d+\\/\\d+)SM$",
      "category": "measurement",
      "description": "Visibility in statute miles (regional - North America)"
    },
    "visibilitySMNotAvailable": {
      "pattern": "^\\/{4}SM$",
      "category": "unavailable",
      "description": "Visibility in statute miles not available (AUTO - North America)"
    },
    "directionalVisibility": {
      "pattern": "^\\d{4}(N|NE|E|SE|S|SW|W|NW)$",
      "category": "measurement",
      "description": "Minimum visibility with direction"
    },
    "rvr": {
      "pattern": "^R\\d{2}[LCR]?\\/[PM]?\\d{4}(V[PM]?\\d{4})?[UDN]?$",
      "category": "measurement",
      "description": "Runway Visual Range with P/M prefix and U/D/N tendency",
      "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": "Present weather - intensity/proximity + descriptor + phenomena",
      "excludeWhen": [
        { "maxCount": 3, "countTypes": ["weather", "weatherSpecial"] },
        { "noDuplicates": true }
      ]
    },
    "weatherSpecial": {
      "pattern": "^(VCSH|VCTS|VCFG|VCPO|VCFC|VCDS|VCSS|VCBLDU|VCBLSA|VCBLSN|VCVA)$",
      "category": "phenomenon",
      "description": "Weather phenomena in vicinity",
      "excludeWhen": [
        { "maxCount": 3, "countTypes": ["weather", "weatherSpecial"] },
        { "noDuplicates": true }
      ]
    },
    "noWeather": {
      "pattern": "^\\/{2}$",
      "category": "phenomenon",
      "description": "Present weather not observable by automatic system"
    },
    "cloudAmount": {
      "pattern": "^(FEW|SCT|BKN|OVC)$",
      "category": "measurement",
      "description": "Cloud amount (partial - awaiting height)",
      "excludeWhen": { "maxCount": 4, "countTypes": ["cloudBase", "cloud", "cloudUnknown"] }
    },
    "cloudBase": {
      "pattern": "^(FEW|SCT|BKN|OVC)(\\d{3})$",
      "category": "measurement",
      "description": "Cloud layer - amount + height without type",
      "appendToPrevious": true,
      "placeholder": { "value": "000", "editable": [{ "start": 0, "end": 3 }] }
    },
    "cloud": {
      "pattern": "^(FEW|SCT|BKN|OVC)(\\d{3})(CB|TCU|\\/\\/\\/)$",
      "category": "measurement",
      "description": "Cloud layer - amount + height in 100s ft + type",
      "appendToPrevious": true
    },
    "cloudUnknown": {
      "pattern": "^(FEW|SCT|BKN|OVC)\\/\\/\\/(CB|TCU|\\/\\/\\/)?$",
      "category": "unavailable",
      "description": "Cloud layer with unknown height (AUTO)"
    },
    "cloudAmountMissing": {
      "pattern": "^\\/{3}\\d{3}(CB|TCU|\\/\\/\\/)?$",
      "category": "unavailable",
      "description": "Cloud layer with unknown amount (AUTO) - e.g. ///015, ///015CB"
    },
    "cloudAllMissing": {
      "pattern": "^\\/{6}(CB|TCU|\\/\\/\\/)?$",
      "category": "unavailable",
      "description": "Cloud layer with unknown amount and height (AUTO) - e.g. //////, //////CB, /////////"
    },
    "verticalVisibility": {
      "pattern": "^VV(\\d{3}|\\/\\/\\/)$",
      "category": "measurement",
      "description": "Vertical visibility in 100s ft when sky obscured",
      "placeholder": { "value": "VV000", "editable": [{ "start": 2, "end": 5 }] }
    },
    "nsc": {
      "pattern": "^NSC$",
      "category": "status",
      "description": "No Significant Cloud - no cloud <1500m/MSA, no CB/TCU"
    },
    "ncd": {
      "pattern": "^NCD$",
      "category": "status",
      "description": "No Cloud Detected by automatic observing system"
    },
    "skyClear": {
      "pattern": "^(SKC|CLR)$",
      "category": "status",
      "description": "Sky Clear (regional usage)"
    },
    "temperature": {
      "pattern": "^M?\\d{2}\\/M?\\d{2}$",
      "category": "measurement",
      "description": "Temperature/Dewpoint in °C, M for minus",
      "placeholder": { "value": "00/00", "editable": [{ "start": 0, "end": 2, "hint": "Air temp" }, { "start": 3, "end": 5, "hint": "Dew point" }] }
    },
    "temperatureDewpointMissing": {
      "pattern": "^M?\\d{2}\\/{3}$",
      "category": "unavailable",
      "description": "Temperature with missing dewpoint (dewpoint not available)"
    },
    "temperatureNotAvailable": {
      "pattern": "^\\/{5}$",
      "category": "unavailable",
      "description": "Temperature/Dewpoint not available from automatic system (AUTO)"
    },
    "pressure": {
      "pattern": "^Q\\d{4}$",
      "category": "measurement",
      "description": "QNH pressure in hPa",
      "placeholder": { "value": "Q0000", "editable": [{ "start": 1, "end": 5 }] }
    },
    "pressureNotAvailable": {
      "pattern": "^Q////$",
      "category": "unavailable",
      "description": "QNH pressure not available from automatic system (AUTO)"
    },
    "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": "Recent weather since last report or last hour",
      "excludeWhen": [
        { "maxCount": 3 },
        { "noDuplicates": true }
      ]
    },
    "windshear": {
      "pattern": "^WS$",
      "category": "status",
      "description": "Wind shear indicator"
    },
    "windshearRunway": {
      "pattern": "^R\\d{2}[LCR]?$",
      "category": "status",
      "description": "Wind shear runway designator",
      "placeholder": { "value": "R00", "editable": [{ "start": 1, "end": 3 }] }
    },
    "windshearAllRwy": {
      "pattern": "^ALL$",
      "category": "status",
      "description": "Wind shear ALL RWY indicator"
    },
    "rwy": {
      "pattern": "^RWY$",
      "category": "status",
      "description": "RWY keyword for WS ALL RWY"
    },
    "seaTemp": {
      "pattern": "^W(M?\\d{2}\\/|\\/\\/\\/)$",
      "category": "measurement",
      "description": "Sea-surface temperature"
    },
    "seaStateValue": {
      "pattern": "^S[0-9/]$",
      "category": "measurement",
      "description": "State of the sea",
      "appendToPrevious": true
    },
    "waveHeightValue": {
      "pattern": "^H(\\d{1,3}|\\/\\/\\/)$",
      "category": "measurement",
      "description": "Significant wave height",
      "appendToPrevious": true
    },
    "seaState": {
      "pattern": "^W(M?\\d{2}\\/|\\/\\/\\/)(S[0-9/]|H(\\d{1,3}|\\/\\/\\/))$",
      "category": "measurement",
      "description": "Sea-surface temperature and state of sea or wave height"
    },
    "waveHeight": {
      "pattern": "^W(M?\\d{2}\\/|\\/\\/\\/)H\\d{1,3}$",
      "category": "measurement",
      "description": "Sea-surface temperature and significant wave height",
      "placeholder": { "value": "W00/H00", "editable": [{ "start": 1, "end": 3, "hint": "Sea temp" }, { "start": 5, "end": 7, "hint": "Wave ht" }] }
    },
    "runwayState": {
      "pattern": "^R\\d{2}[LCR]?\\/([0-9\\/]{6}|CLRD\\/\\/|SNOCLO)$",
      "category": "measurement",
      "description": "Runway state"
    },
    "nosig": {
      "pattern": "^NOSIG$",
      "category": "trend",
      "description": "No significant change expected in next 2 hours"
    },
    "becmg": {
      "pattern": "^BECMG$",
      "category": "trend",
      "description": "Becoming - change expected at regular/irregular rate"
    },
    "tempo": {
      "pattern": "^TEMPO$",
      "category": "trend",
      "description": "Temporary fluctuations <1h each, <50% of period"
    },
    "trendTimeFM": {
      "pattern": "^FM\\d{4}$",
      "category": "datetime",
      "description": "Trend time indicator FM (From)",
      "placeholder": { "value": "FM0000", "editable": [{ "start": 2, "end": 6 }] }
    },
    "trendTimeTL": {
      "pattern": "^TL\\d{4}$",
      "category": "datetime",
      "description": "Trend time indicator TL (Until)",
      "placeholder": { "value": "TL0000", "editable": [{ "start": 2, "end": 6 }] }
    },
    "trendTimeAT": {
      "pattern": "^AT\\d{4}$",
      "category": "datetime",
      "description": "Trend time indicator AT (At)",
      "placeholder": { "value": "AT0000", "editable": [{ "start": 2, "end": 6 }] }
    },
    "trendWindDirectionKT": {
      "pattern": "^\\d{3}$",
      "category": "trend",
      "description": "Trend wind direction (KT)"
    },
    "trendWindDirectionMPS": {
      "pattern": "^\\d{3}$",
      "category": "trend",
      "description": "Trend wind direction (MPS)"
    },
    "trendWindDirectionSpeedKT": {
      "pattern": "^\\d{3}P?1?\\d{2}$",
      "category": "trend",
      "description": "Trend wind direction + speed (KT)",
      "appendToPrevious": true
    },
    "trendWindDirectionSpeedKT2": {
      "pattern": "^\\d{3}P?\\d{2}$",
      "category": "trend",
      "description": "Trend wind direction + speed (KT, 0-99 kt)",
      "appendToPrevious": true
    },
    "trendWindDirectionSpeedKT3": {
      "pattern": "^\\d{3}P?1\\d{2}$",
      "category": "trend",
      "description": "Trend wind direction + speed (KT, 100-199 kt)",
      "appendToPrevious": true
    },
    "trendWindDirectionSpeedMPS": {
      "pattern": "^\\d{3}P?\\d{2}$",
      "category": "trend",
      "description": "Trend wind direction + speed (MPS)",
      "appendToPrevious": true
    },
    "trendWindKT": {
      "pattern": "^\\d{3}P?1?\\d{2}(GP?1?\\d{2})?KT$",
      "category": "trend",
      "description": "Complete trend wind (KT)",
      "appendToPrevious": true
    },
    "trendWindKT2": {
      "pattern": "^\\d{3}P?\\d{2}(GP?1?\\d{2})?KT$",
      "category": "trend",
      "description": "Complete trend wind (KT, 2-digit speed)",
      "appendToPrevious": true
    },
    "trendWindKT3": {
      "pattern": "^\\d{3}P?1\\d{2}(GP?1\\d{2})?KT$",
      "category": "trend",
      "description": "Complete trend wind (KT, 3-digit speed/gust)",
      "appendToPrevious": true
    },
    "trendWindMPS": {
      "pattern": "^\\d{3}P?\\d{2}(GP?\\d{2})?MPS$",
      "category": "trend",
      "description": "Complete trend wind (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": "Trend forecast wind (no VRB)" },
    "trendCavok": { "pattern": "^CAVOK$", "category": "trend", "description": "Trend CAVOK - Ceiling And Visibility OK" },
    "trendVisibility": { "pattern": "^\\d{4}$", "category": "trend", "description": "Trend forecast visibility", "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": "Trend forecast weather" },
    "trendNsw": { "pattern": "^NSW$", "category": "trend", "description": "No Significant Weather - end of weather phenomena in trend" },
    "trendCloud": { "pattern": "^(FEW|SCT|BKN|OVC)(\\d{3})(CB|TCU)?$|^VV(\\d{3}|\\/\\/\\/)$|^NSC$", "category": "trend", "description": "Trend forecast cloud" }
  },
  "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": "pressureNotAvailable",
                  "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 indicator"
        }
      ],
      "icao": [],
      "nil": [
        {
          "text": "NIL",
          "description": "Missing report (no data available)"
        }
      ],
      "auto": [
        {
          "text": "AUTO",
          "description": "Fully automated observation",
          "auto": true
        }
      ],
      "datetime": [],
      "windDirectionKT": [
        {
          "text": "Wind (KT)",
          "description": "Wind in knots",
          "type": "category",
          "serie": true,
          "children": [
            { "text": "000", "description": "Direction (3 digits)", "placeholder": "000", "editable": [{ "start": 0, "end": 3, "hint": "Direction (°)" }] },
            { "text": "VRB", "description": "Variable direction" }
          ]
        }
      ],
      "windDirectionMPS": [
        {
          "text": "Wind (MPS)",
          "description": "Wind in metres/second",
          "type": "category",
          "serie": true,
          "children": [
            { "text": "000", "description": "Direction (3 digits)", "placeholder": "000", "editable": [{ "start": 0, "end": 3, "hint": "Direction (°)" }] },
            { "text": "VRB", "description": "Variable direction" }
          ]
        }
      ],
      "windDirectionSpeedKT": [
        { "text": "00", "description": "Speed 0-99 kt", "placeholder": "00", "editable": [{ "start": 0, "end": 2, "hint": "Speed (kt)" }] },
        { "text": "100", "description": "Speed 100-199 kt", "placeholder": "100", "editable": [{ "start": 1, "end": 3, "hint": "Speed (kt)" }] },
        { "text": "P00", "description": "Speed >XX kt (0-99)", "placeholder": "P00", "editable": [{ "start": 1, "end": 3, "hint": "Speed (kt)" }] },
        { "text": "P100", "description": "Speed >1XX kt (100-199)", "placeholder": "P100", "editable": [{ "start": 2, "end": 4, "hint": "Speed (kt)" }] }
      ],
      "windDirectionSpeedKT2": [
        { "text": "00", "description": "Speed 0-99 kt", "placeholder": "00", "editable": [{ "start": 0, "end": 2, "hint": "Speed (kt)" }] },
        { "text": "P00", "description": "Speed >XX kt (0-99)", "placeholder": "P00", "editable": [{ "start": 1, "end": 3, "hint": "Speed (kt)" }] }
      ],
      "windDirectionSpeedKT3": [
        { "text": "100", "description": "Speed 100-199 kt", "placeholder": "100", "editable": [{ "start": 1, "end": 3, "hint": "Speed (kt)" }] },
        { "text": "P100", "description": "Speed >1XX kt (100-199)", "placeholder": "P100", "editable": [{ "start": 2, "end": 4, "hint": "Speed (kt)" }] }
      ],
      "windDirectionSpeedMPS": [
        { "text": "00", "description": "Speed 0-99 m/s", "placeholder": "00", "editable": [{ "start": 0, "end": 2, "hint": "Speed (m/s)" }] },
        { "text": "P00", "description": "Speed >XX m/s", "placeholder": "P00", "editable": [{ "start": 1, "end": 3, "hint": "Speed (m/s)" }] }
      ],
      "windKT": [
        { "text": "KT", "label": "No gust", "description": "" },
        { "text": "G00KT", "label": "G00", "description": "Gust 0-99 kt", "placeholder": "G00KT", "editable": [{ "start": 1, "end": 3, "hint": "Gust (kt)" }] },
        { "text": "G100KT", "label": "G100", "description": "Gust 100-199 kt", "placeholder": "G100KT", "editable": [{ "start": 2, "end": 4, "hint": "Gust (kt)" }] },
        { "text": "GP00KT", "label": "GP00", "description": "Gust >XX kt (0-99)", "placeholder": "GP00KT", "editable": [{ "start": 2, "end": 4, "hint": "Gust (kt)" }] },
        { "text": "GP100KT", "label": "GP100", "description": "Gust >1XX kt (100-199)", "placeholder": "GP100KT", "editable": [{ "start": 3, "end": 5, "hint": "Gust (kt)" }] }
      ],
      "windKT2": [
        { "text": "KT", "label": "No gust", "description": "" },
        { "text": "G00KT", "label": "G00", "description": "Gust 0-99 kt", "placeholder": "G00KT", "editable": [{ "start": 1, "end": 3, "hint": "Gust (kt)" }] },
        { "text": "G100KT", "label": "G100", "description": "Gust 100-199 kt", "placeholder": "G100KT", "editable": [{ "start": 2, "end": 4, "hint": "Gust (kt)" }] },
        { "text": "GP00KT", "label": "GP00", "description": "Gust >XX kt (0-99)", "placeholder": "GP00KT", "editable": [{ "start": 2, "end": 4, "hint": "Gust (kt)" }] },
        { "text": "GP100KT", "label": "GP100", "description": "Gust >1XX kt (100-199)", "placeholder": "GP100KT", "editable": [{ "start": 3, "end": 5, "hint": "Gust (kt)" }] }
      ],
      "windKT3": [
        { "text": "KT", "label": "No gust", "description": "" },
        { "text": "G100KT", "label": "G100", "description": "Gust 100-199 kt", "placeholder": "G100KT", "editable": [{ "start": 2, "end": 4, "hint": "Gust (kt)" }] },
        { "text": "GP100KT", "label": "GP100", "description": "Gust >1XX kt (100-199)", "placeholder": "GP100KT", "editable": [{ "start": 3, "end": 5, "hint": "Gust (kt)" }] }
      ],
      "windMPS": [
        { "text": "MPS", "label": "No gust", "description": "" },
        { "text": "G00MPS", "label": "G00", "description": "Gust 0-99 m/s", "placeholder": "G00MPS", "editable": [{ "start": 1, "end": 3, "hint": "Gust (m/s)" }] },
        { "text": "GP00MPS", "label": "GP00", "description": "Gust >XX m/s", "placeholder": "GP00MPS", "editable": [{ "start": 2, "end": 4, "hint": "Gust (m/s)" }] }
      ],
      "wind": [],
      "windNotAvailable": [
        {
          "text": "/////KT",
          "description": "Wind not available (AUTO)",
          "auto": true
        },
        {
          "text": "/////MPS",
          "description": "Wind not available (AUTO)",
          "auto": true
        }
      ],
      "cavok": [
        {
          "text": "CAVOK",
          "description": "Ceiling And Visibility OK"
        }
      ],
      "visibility": [],
      "directionalVisibility": [
        {
          "text": "Minimum visibility",
          "description": "Minimum visibility with direction",
          "type": "category",
          "children": [
            { "text": "0000N", "description": "North", "placeholder": "0000N", "editable": [{ "start": 0, "end": 4 }] },
            { "text": "0000NE", "description": "North-East", "placeholder": "0000NE", "editable": [{ "start": 0, "end": 4 }] },
            { "text": "0000E", "description": "East", "placeholder": "0000E", "editable": [{ "start": 0, "end": 4 }] },
            { "text": "0000SE", "description": "South-East", "placeholder": "0000SE", "editable": [{ "start": 0, "end": 4 }] },
            { "text": "0000S", "description": "South", "placeholder": "0000S", "editable": [{ "start": 0, "end": 4 }] },
            { "text": "0000SW", "description": "South-West", "placeholder": "0000SW", "editable": [{ "start": 0, "end": 4 }] },
            { "text": "0000W", "description": "West", "placeholder": "0000W", "editable": [{ "start": 0, "end": 4 }] },
            { "text": "0000NW", "description": "North-West", "placeholder": "0000NW", "editable": [{ "start": 0, "end": 4 }] }
          ]
        }
      ],
      "visibilityNotAvailable": [
        {
          "text": "////",
          "description": "Visibility not available (AUTO)",
          "auto": true
        }
      ],
      "rvr": [],
      "cloud": [
        { "type": "skip", "description": "Continue without CB/TCU" },
        { "text": "CB", "description": "Cumulonimbus" },
        { "text": "TCU", "description": "Towering Cumulus" },
        { "text": "///", "description": "Cloud type not detected (AUTO)", "auto": true }
      ],
      "weather": [
        {
          "text": "Present Weather",
          "description": "Weather phenomena",
          "type": "category",
          "children": [
            {
              "text": "Precipitation",
              "description": "Rain, drizzle, snow, hail",
              "type": "category",
              "children": [
                { "text": "-RA", "description": "Light rain" },
                { "text": "RA", "description": "Moderate rain" },
                { "text": "+RA", "description": "Heavy rain" },
                { "text": "-DZ", "description": "Light drizzle" },
                { "text": "DZ", "description": "Moderate drizzle" },
                { "text": "+DZ", "description": "Heavy drizzle" },
                { "text": "-SN", "description": "Light snow" },
                { "text": "SN", "description": "Moderate snow" },
                { "text": "+SN", "description": "Heavy snow" },
                { "text": "-SG", "description": "Light snow grains" },
                { "text": "SG", "description": "Snow grains" },
                { "text": "-PL", "description": "Light ice pellets" },
                { "text": "PL", "description": "Ice pellets" },
                { "text": "+PL", "description": "Heavy ice pellets" },
                { "text": "-GR", "description": "Light hail (>=5mm)" },
                { "text": "GR", "description": "Hail (>=5mm)" },
                { "text": "+GR", "description": "Heavy hail (>=5mm)" },
                { "text": "-GS", "description": "Light small hail (<5mm)" },
                { "text": "GS", "description": "Small hail (<5mm)" },
                { "text": "IC", "description": "Ice crystals" }
              ]
            },
            {
              "text": "Obscuration",
              "description": "Fog, mist, haze, smoke",
              "type": "category",
              "children": [
                { "text": "BR", "description": "Mist (vis 1000-5000m)" },
                { "text": "FG", "description": "Fog (vis <1000m)" },
                { "text": "BCFG", "description": "Patches of fog" },
                { "text": "PRFG", "description": "Partial fog" },
                { "text": "MIFG", "description": "Shallow fog" },
                { "text": "FZFG", "description": "Freezing fog" },
                { "text": "HZ", "description": "Haze" },
                { "text": "FU", "description": "Smoke" },
                { "text": "VA", "description": "Volcanic ash" },
                { "text": "DU", "description": "Widespread dust" },
                { "text": "SA", "description": "Sand" },
                { "text": "PY", "description": "Spray" }
              ]
            },
            {
              "text": "Thunderstorm",
              "description": "TS with/without precipitation",
              "type": "category",
              "children": [
                { "text": "TS", "description": "Thunderstorm (no precipitation)" },
                { "text": "TSRA", "description": "Thunderstorm with rain" },
                { "text": "TSSN", "description": "Thunderstorm with snow" },
                { "text": "TSPL", "description": "Thunderstorm with ice pellets" },
                { "text": "TSGR", "description": "Thunderstorm with hail" },
                { "text": "TSGS", "description": "Thunderstorm with small hail" }
              ]
            },
            {
              "text": "Showers",
              "description": "SH precipitation showers",
              "type": "category",
              "children": [
                { "text": "-SHRA", "description": "Light rain showers" },
                { "text": "SHRA", "description": "Rain showers" },
                { "text": "+SHRA", "description": "Heavy rain showers" },
                { "text": "-SHSN", "description": "Light snow showers" },
                { "text": "SHSN", "description": "Snow showers" },
                { "text": "+SHSN", "description": "Heavy snow showers" },
                { "text": "SHGR", "description": "Hail showers" },
                { "text": "SHGS", "description": "Small hail showers" }
              ]
            },
            {
              "text": "Freezing",
              "description": "FZ freezing precipitation",
              "type": "category",
              "children": [
                { "text": "-FZRA", "description": "Light freezing rain" },
                { "text": "FZRA", "description": "Freezing rain" },
                { "text": "+FZRA", "description": "Heavy freezing rain" },
                { "text": "-FZDZ", "description": "Light freezing drizzle" },
                { "text": "FZDZ", "description": "Freezing drizzle" },
                { "text": "+FZDZ", "description": "Heavy freezing drizzle" }
              ]
            },
            {
              "text": "Blowing/Drifting",
              "description": "BL/DR wind-driven phenomena",
              "type": "category",
              "children": [
                { "text": "BLSN", "description": "Blowing snow" },
                { "text": "BLDU", "description": "Blowing dust" },
                { "text": "BLSA", "description": "Blowing sand" },
                { "text": "DRSN", "description": "Drifting snow" },
                { "text": "DRDU", "description": "Drifting dust" },
                { "text": "DRSA", "description": "Drifting sand" }
              ]
            },
            {
              "text": "Other phenomena",
              "description": "Dust whirls, squalls, funnel clouds, storms",
              "type": "category",
              "children": [
                { "text": "PO", "description": "Dust/sand whirls" },
                { "text": "SQ", "description": "Squalls" },
                { "text": "FC", "description": "Funnel cloud" },
                { "text": "+FC", "description": "Tornado/waterspout" },
                { "text": "SS", "description": "Sandstorm" },
                { "text": "+SS", "description": "Heavy sandstorm" },
                { "text": "DS", "description": "Duststorm" },
                { "text": "+DS", "description": "Heavy duststorm" }
              ]
            },
            {
              "text": "Vicinity",
              "description": "VC phenomena 8-16km from aerodrome",
              "type": "category",
              "children": [
                { "text": "VCSH", "description": "Showers in vicinity" },
                { "text": "VCTS", "description": "Thunderstorm in vicinity" },
                { "text": "VCFG", "description": "Fog in vicinity" },
                { "text": "VCBLSN", "description": "Blowing snow in vicinity" },
                { "text": "VCBLDU", "description": "Blowing dust in vicinity" },
                { "text": "VCBLSA", "description": "Blowing sand in vicinity" },
                { "text": "VCPO", "description": "Dust/sand whirls in vicinity" },
                { "text": "VCFC", "description": "Funnel cloud in vicinity" },
                { "text": "VCDS", "description": "Duststorm in vicinity" },
                { "text": "VCSS", "description": "Sandstorm in vicinity" },
                { "text": "VCVA", "description": "Volcanic ash in vicinity" }
              ]
            },
            { "text": "//", "description": "Weather not observed (AUTO)", "auto": true }
          ]
        }
      ],
      "temperature": [
        {
          "text": "Temperature/Dewpoint",
          "description": "Temperature/Dewpoint in °C",
          "type": "category",
          "children": [
            { "text": "00/00", "description": "Positive temp / Positive dewpoint", "placeholder": "00/00", "editable": [{ "start": 0, "end": 2, "hint": "Air temp" }, { "start": 3, "end": 5, "hint": "Dew point" }] },
            { "text": "M00/00", "description": "Negative temp / Positive dewpoint", "placeholder": "M00/00", "editable": [{ "start": 1, "end": 3, "hint": "Air temp" }, { "start": 4, "end": 6, "hint": "Dew point" }] },
            { "text": "00/M00", "description": "Positive temp / Negative dewpoint", "placeholder": "00/M00", "editable": [{ "start": 0, "end": 2, "hint": "Air temp" }, { "start": 4, "end": 6, "hint": "Dew point" }] },
            { "text": "M00/M00", "description": "Negative temp / Negative dewpoint", "placeholder": "M00/M00", "editable": [{ "start": 1, "end": 3, "hint": "Air temp" }, { "start": 5, "end": 7, "hint": "Dew point" }] }
          ]
        },
        { "text": "/////", "description": "Temperature/Dewpoint not available (AUTO)", "auto": true }
      ],
      "pressure": [
        { "text": "Q////", "description": "QNH not available (AUTO)", "auto": true }
      ],
      "recentWeather": [
        {
          "text": "Recent Weather",
          "description": "Weather since last report",
          "type": "category",
          "children": [
            { "text": "RERASN", "description": "Recent rain and snow" },
            { "text": "REFZDZ", "description": "Recent freezing drizzle" },
            { "text": "REFZRA", "description": "Recent freezing rain" },
            { "text": "REDZ", "description": "Recent drizzle" },
            { "text": "RESHRA", "description": "Recent showery rain" },
            { "text": "RERA", "description": "Recent rain" },
            { "text": "RESHSN", "description": "Recent showery snow" },
            { "text": "RESN", "description": "Recent snow" },
            { "text": "RESG", "description": "Recent snow grains" },
            { "text": "RESHGR", "description": "Recent showery hail" },
            { "text": "RESHGS", "description": "Recent showery snow pellets" },
            { "text": "REBLSN", "description": "Recent blowing snow" },
            { "text": "RESS", "description": "Recent sandstorm" },
            { "text": "REDS", "description": "Recent duststorm" },
            { "text": "RETSRA", "description": "Recent thunderstorm with rain" },
            { "text": "RETSSN", "description": "Recent thunderstorm with snow" },
            { "text": "RETSGR", "description": "Recent thunderstorm with hail" },
            { "text": "RETSGS", "description": "Recent thunderstorm with snow pellets" },
            { "text": "RETS", "description": "Recent thunderstorm" },
            { "text": "REFC", "description": "Recent funnel cloud" },
            { "text": "REVA", "description": "Recent volcanic ash" },
            { "text": "REPL", "description": "Recent ice pellets" },
            { "text": "REUP", "description": "Recent unidentified precipitation" },
            { "text": "REFZUP", "description": "Recent unidentified freezing precip" },
            { "text": "RETSUP", "description": "Recent TS with unidentified precip" },
            { "text": "RESHUP", "description": "Recent showery unidentified precip" },
            { "text": "RE//", "description": "Recent weather not available" }
          ]
        }
      ],
      "nosig": [
        { "text": "NOSIG", "description": "No significant change" }
      ],
      "becmg": [
        { "text": "Trend Forecast", "description": "Change expected (max 3)", "type": "category", "children": [
          { "text": "BECMG", "description": "Becoming - change at regular/irregular rate" },
          { "text": "TEMPO", "description": "Temporary fluctuations <1h each, <50% of period" }
        ]}
      ],
      "tempo": [],
      "windshear": [
        {
          "text": "Wind Shear",
          "description": "Wind shear on runway",
          "type": "category",
          "children": [
            { "text": "WS R00", "description": "Wind shear on runway", "placeholder": "WS R00", "editable": [{ "start": 4, "end": 6 }] },
            { "text": "WS R00L", "description": "Wind shear on left runway", "placeholder": "WS R00L", "editable": [{ "start": 4, "end": 6 }] },
            { "text": "WS R00C", "description": "Wind shear on center runway", "placeholder": "WS R00C", "editable": [{ "start": 4, "end": 6 }] },
            { "text": "WS R00R", "description": "Wind shear on right runway", "placeholder": "WS R00R", "editable": [{ "start": 4, "end": 6 }] },
            { "text": "WS ALL RWY", "description": "Wind shear on all runways" }
          ]
        }
      ],
      "seaTemp": [
        {
          "text": "Sea Information",
          "description": "Sea-surface temperature",
          "type": "category",
          "serie": true,
          "children": [
            { "text": "W00/", "description": "Positive temperature (°C)", "placeholder": "W00/", "editable": [{ "start": 1, "end": 3, "hint": "Sea temp" }] },
            { "text": "WM00/", "description": "Negative temperature (°C)", "placeholder": "WM00/", "editable": [{ "start": 2, "end": 4, "hint": "Sea temp" }] },
            { "text": "W///", "description": "Temperature not available" }
          ]
        }
      ],
      "seaStateValue": [
        {
          "text": "State of the Sea",
          "description": "Sea state (0-9)",
          "type": "category",
          "serie": true,
          "children": [
            { "text": "S0", "description": "State 0 - Calm (glassy)", "placeholder": "S0", "editable": [{ "start": 1, "end": 2, "hint": "Sea state" }] },
            { "text": "S/", "description": "State not available" }
          ]
        }
      ],
      "waveHeightValue": [
        {
          "text": "Significant Wave Height",
          "description": "Wave height in decimetres",
          "type": "category",
          "serie": true,
          "children": [
            { "text": "H0", "description": "Height 0-9 dm", "placeholder": "H0", "editable": [{ "start": 1, "end": 2, "hint": "Wave ht" }] },
            { "text": "H00", "description": "Height 00-99 dm", "placeholder": "H00", "editable": [{ "start": 1, "end": 3, "hint": "Wave ht" }] },
            { "text": "H000", "description": "Height 000-999 dm", "placeholder": "H000", "editable": [{ "start": 1, "end": 4, "hint": "Wave ht" }] },
            { "text": "H///", "description": "Height not available" }
          ]
        }
      ],
      "seaState": [
        { "text": "W///S/", "description": "Sea info not available" }
      ],
      "trendTimeFM": [
        { "text": "Time period", "description": "From/Until/At time", "type": "category", "appendToPrevious": true, "children": [
          { "text": "FM0000", "description": "From time", "placeholder": "FM0000", "editable": [{ "start": 2, "end": 6 }] },
          { "text": "TL0000", "description": "Until time", "placeholder": "TL0000", "editable": [{ "start": 2, "end": 6 }] },
          { "text": "AT0000", "description": "At time", "placeholder": "AT0000", "editable": [{ "start": 2, "end": 6 }] }
        ]}
      ],
      "trendTimeTL": [],
      "trendTimeAT": [],
      "trendWindDirectionKT": [
        { "text": "Wind (KT)", "description": "Wind in knots (no VRB)", "type": "category", "appendToPrevious": true, "serie": true, "children": [
          { "text": "000", "description": "Direction (3 digits)", "placeholder": "000", "editable": [{ "start": 0, "end": 3, "hint": "Direction (°)" }] }
        ]}
      ],
      "trendWindDirectionMPS": [
        { "text": "Wind (MPS)", "description": "Wind in m/s (no VRB)", "type": "category", "appendToPrevious": true, "serie": true, "children": [
          { "text": "000", "description": "Direction (3 digits)", "placeholder": "000", "editable": [{ "start": 0, "end": 3, "hint": "Direction (°)" }] }
        ]}
      ],
      "trendWindDirectionSpeedKT": [
        { "text": "00", "description": "Speed 0-99 kt", "placeholder": "00", "editable": [{ "start": 0, "end": 2, "hint": "Speed (kt)" }] },
        { "text": "100", "description": "Speed 100-199 kt", "placeholder": "100", "editable": [{ "start": 1, "end": 3, "hint": "Speed (kt)" }] },
        { "text": "P00", "description": "Speed >XX kt (0-99)", "placeholder": "P00", "editable": [{ "start": 1, "end": 3, "hint": "Speed (kt)" }] },
        { "text": "P100", "description": "Speed >1XX kt (100-199)", "placeholder": "P100", "editable": [{ "start": 2, "end": 4, "hint": "Speed (kt)" }] }
      ],
      "trendWindDirectionSpeedKT2": [
        { "text": "00", "description": "Speed 0-99 kt", "placeholder": "00", "editable": [{ "start": 0, "end": 2, "hint": "Speed (kt)" }] },
        { "text": "P00", "description": "Speed >XX kt (0-99)", "placeholder": "P00", "editable": [{ "start": 1, "end": 3, "hint": "Speed (kt)" }] }
      ],
      "trendWindDirectionSpeedKT3": [
        { "text": "100", "description": "Speed 100-199 kt", "placeholder": "100", "editable": [{ "start": 1, "end": 3, "hint": "Speed (kt)" }] },
        { "text": "P100", "description": "Speed >1XX kt (100-199)", "placeholder": "P100", "editable": [{ "start": 2, "end": 4, "hint": "Speed (kt)" }] }
      ],
      "trendWindDirectionSpeedMPS": [
        { "text": "00", "description": "Speed 0-99 m/s", "placeholder": "00", "editable": [{ "start": 0, "end": 2, "hint": "Speed (m/s)" }] },
        { "text": "P00", "description": "Speed >XX m/s", "placeholder": "P00", "editable": [{ "start": 1, "end": 3, "hint": "Speed (m/s)" }] }
      ],
      "trendWindKT": [
        { "text": "KT", "label": "No gust", "description": "" },
        { "text": "G00KT", "label": "G00", "description": "Gust 0-99 kt", "placeholder": "G00KT", "editable": [{ "start": 1, "end": 3, "hint": "Gust (kt)" }] },
        { "text": "G100KT", "label": "G100", "description": "Gust 100-199 kt", "placeholder": "G100KT", "editable": [{ "start": 2, "end": 4, "hint": "Gust (kt)" }] },
        { "text": "GP00KT", "label": "GP00", "description": "Gust >XX kt (0-99)", "placeholder": "GP00KT", "editable": [{ "start": 2, "end": 4, "hint": "Gust (kt)" }] },
        { "text": "GP100KT", "label": "GP100", "description": "Gust >1XX kt (100-199)", "placeholder": "GP100KT", "editable": [{ "start": 3, "end": 5, "hint": "Gust (kt)" }] }
      ],
      "trendWindKT2": [
        { "text": "KT", "label": "No gust", "description": "" },
        { "text": "G00KT", "label": "G00", "description": "Gust 0-99 kt", "placeholder": "G00KT", "editable": [{ "start": 1, "end": 3, "hint": "Gust (kt)" }] },
        { "text": "G100KT", "label": "G100", "description": "Gust 100-199 kt", "placeholder": "G100KT", "editable": [{ "start": 2, "end": 4, "hint": "Gust (kt)" }] },
        { "text": "GP00KT", "label": "GP00", "description": "Gust >XX kt (0-99)", "placeholder": "GP00KT", "editable": [{ "start": 2, "end": 4, "hint": "Gust (kt)" }] },
        { "text": "GP100KT", "label": "GP100", "description": "Gust >1XX kt (100-199)", "placeholder": "GP100KT", "editable": [{ "start": 3, "end": 5, "hint": "Gust (kt)" }] }
      ],
      "trendWindKT3": [
        { "text": "KT", "label": "No gust", "description": "" },
        { "text": "G100KT", "label": "G100", "description": "Gust 100-199 kt", "placeholder": "G100KT", "editable": [{ "start": 2, "end": 4, "hint": "Gust (kt)" }] },
        { "text": "GP100KT", "label": "GP100", "description": "Gust >1XX kt (100-199)", "placeholder": "GP100KT", "editable": [{ "start": 3, "end": 5, "hint": "Gust (kt)" }] }
      ],
      "trendWindMPS": [
        { "text": "MPS", "label": "No gust", "description": "" },
        { "text": "G00MPS", "label": "G00", "description": "Gust 0-99 m/s", "placeholder": "G00MPS", "editable": [{ "start": 1, "end": 3, "hint": "Gust (m/s)" }] },
        { "text": "GP00MPS", "label": "GP00", "description": "Gust >XX m/s", "placeholder": "GP00MPS", "editable": [{ "start": 2, "end": 4, "hint": "Gust (m/s)" }] }
      ],
      "trendWind": [],
      "trendCavok": [
        { "text": "CAVOK", "description": "Ceiling And Visibility OK", "appendToPrevious": true }
      ],
      "trendVisibility": [],
      "trendWeather": [
        { "text": "Weather", "description": "Forecast weather phenomena", "type": "category", "appendToPrevious": true, "children": [
          { "text": "NSW", "description": "No significant weather", "ref": "trendNsw" },
          { "text": "Precipitation", "description": "Rain, drizzle, snow", "type": "category", "children": [
            { "text": "-DZ", "description": "Light drizzle" }, { "text": "DZ", "description": "Drizzle" }, { "text": "+DZ", "description": "Heavy drizzle" },
            { "text": "-RA", "description": "Light rain" }, { "text": "RA", "description": "Rain" }, { "text": "+RA", "description": "Heavy rain" },
            { "text": "-SN", "description": "Light snow" }, { "text": "SN", "description": "Snow" }, { "text": "+SN", "description": "Heavy snow" },
            { "text": "-SG", "description": "Light snow grains" }, { "text": "SG", "description": "Snow grains" }, { "text": "+SG", "description": "Heavy snow grains" },
            { "text": "-PL", "description": "Light ice pellets" }, { "text": "PL", "description": "Ice pellets" }, { "text": "+PL", "description": "Heavy ice pellets" },
            { "text": "-DS", "description": "Light duststorm" }, { "text": "DS", "description": "Duststorm" }, { "text": "+DS", "description": "Heavy duststorm" },
            { "text": "-SS", "description": "Light sandstorm" }, { "text": "SS", "description": "Sandstorm" }, { "text": "+SS", "description": "Heavy sandstorm" }
          ]},
          { "text": "Freezing", "description": "Freezing precipitation", "type": "category", "children": [
            { "text": "-FZDZ", "description": "Light freezing drizzle" }, { "text": "FZDZ", "description": "Freezing drizzle" }, { "text": "+FZDZ", "description": "Heavy freezing drizzle" },
            { "text": "-FZRA", "description": "Light freezing rain" }, { "text": "FZRA", "description": "Freezing rain" }, { "text": "+FZRA", "description": "Heavy freezing rain" }
          ]},
          { "text": "Showers", "description": "Shower precipitation", "type": "category", "children": [
            { "text": "-SHRA", "description": "Light rain showers" }, { "text": "SHRA", "description": "Rain showers" }, { "text": "+SHRA", "description": "Heavy rain showers" },
            { "text": "-SHSN", "description": "Light snow showers" }, { "text": "SHSN", "description": "Snow showers" }, { "text": "+SHSN", "description": "Heavy snow showers" },
            { "text": "-SHGR", "description": "Light hail showers" }, { "text": "SHGR", "description": "Hail showers" }, { "text": "+SHGR", "description": "Heavy hail showers" },
            { "text": "-SHGS", "description": "Light small hail showers" }, { "text": "SHGS", "description": "Small hail showers" }, { "text": "+SHGS", "description": "Heavy small hail showers" }
          ]},
          { "text": "Thunderstorm", "description": "TS with precipitation", "type": "category", "children": [
            { "text": "-TS", "description": "Light thunderstorm" }, { "text": "TS", "description": "Thunderstorm" }, { "text": "+TS", "description": "Heavy thunderstorm" },
            { "text": "-TSRA", "description": "Light TS with rain" }, { "text": "TSRA", "description": "TS with rain" }, { "text": "+TSRA", "description": "Heavy TS with rain" },
            { "text": "-TSSN", "description": "Light TS with snow" }, { "text": "TSSN", "description": "TS with snow" }, { "text": "+TSSN", "description": "Heavy TS with snow" },
            { "text": "-TSGR", "description": "Light TS with hail" }, { "text": "TSGR", "description": "TS with hail" }, { "text": "+TSGR", "description": "Heavy TS with hail" },
            { "text": "-TSGS", "description": "Light TS with small hail" }, { "text": "TSGS", "description": "TS with small hail" }, { "text": "+TSGS", "description": "Heavy TS with small hail" }
          ]},
          { "text": "Obscuration", "description": "Fog, mist, haze", "type": "category", "children": [
            { "text": "FG", "description": "Fog" }, { "text": "BR", "description": "Mist" }, { "text": "HZ", "description": "Haze" },
            { "text": "FU", "description": "Smoke" }, { "text": "VA", "description": "Volcanic ash" },
            { "text": "SA", "description": "Sand" }, { "text": "DU", "description": "Dust" },
            { "text": "BCFG", "description": "Patches of fog" }, { "text": "PRFG", "description": "Partial fog" }, { "text": "MIFG", "description": "Shallow fog" }, { "text": "FZFG", "description": "Freezing fog" },
            { "text": "BLDU", "description": "Blowing dust" }, { "text": "BLSA", "description": "Blowing sand" }, { "text": "BLSN", "description": "Blowing snow" },
            { "text": "DRDU", "description": "Drifting dust" }, { "text": "DRSA", "description": "Drifting sand" }, { "text": "DRSN", "description": "Drifting snow" }
          ]},
          { "text": "Other", "description": "Other phenomena", "type": "category", "children": [
            { "text": "SQ", "description": "Squall" }, { "text": "PO", "description": "Dust/sand whirls" }, { "text": "FC", "description": "Funnel cloud" }
          ]}
        ]}
      ],
      "trendNsw": [],
      "trendCloud": [
        { "text": "Cloud", "description": "Forecast cloud", "type": "category", "appendToPrevious": true, "children": [
          { "text": "FEW000", "description": "Few clouds", "placeholder": "FEW000", "editable": [{ "start": 3, "end": 6 }] },
          { "text": "SCT000", "description": "Scattered", "placeholder": "SCT000", "editable": [{ "start": 3, "end": 6 }] },
          { "text": "BKN000", "description": "Broken", "placeholder": "BKN000", "editable": [{ "start": 3, "end": 6 }] },
          { "text": "OVC000", "description": "Overcast", "placeholder": "OVC000", "editable": [{ "start": 3, "end": 6 }] },
          { "text": "VV000", "description": "Vertical visibility", "placeholder": "VV000", "editable": [{ "start": 2, "end": 5 }] },
          { "text": "NSC", "description": "No significant cloud" }
        ]}
      ],
      "cloudAmount": [
        {
          "text": "Cloud",
          "description": "Cloud or sky condition",
          "type": "category",
          "children": [
            {
              "text": "Cloud layer",
              "description": "Cloud amount + height",
              "type": "category",
              "serie": true,
              "children": [
                { "text": "FEW", "description": "Few clouds (1-2 oktas)" },
                { "text": "SCT", "description": "Scattered clouds (3-4 oktas)" },
                { "text": "BKN", "description": "Broken clouds (5-7 oktas)" },
                { "text": "OVC", "description": "Overcast (8 oktas)" }
              ]
            },
            { "text": "VV000", "description": "Vertical Visibility", "placeholder": "VV000", "editable": [{ "start": 2, "end": 5 }] },
            { "text": "VV///", "description": "Vertical Visibility not available", "auto": true },
            { "text": "NSC", "description": "No Significant Cloud" },
            { "text": "NCD", "description": "No Cloud Detected" }
          ]
        }
      ],
      "nsc": [],
      "ncd": [],
      "verticalVisibility": [],
      "cloudBase": []
    },
    "after": {
      "identifier": [
        "correction",
        "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"
      ],
      "wind": [
        "windVariation",
        "cavok",
        "visibility",
        "visibilityNotAvailable"
      ],
      "windNotAvailable": [
        "windVariation",
        "cavok",
        "visibility",
        "visibilityNotAvailable"
      ],
      "windVariation": [
        "cavok",
        "visibility",
        "visibilityNotAvailable"
      ],
      "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"],
      "pressureNotAvailable": ["recentWeather", "windshear", "seaTemp", "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": {
      "-": "Light",
      "": "Moderate",
      "+": "Heavy"
    },
    "proximity": {
      "VC": "In the vicinity (8-16 km)"
    },
    "descriptor": {
      "MI": "Shallow",
      "PR": "Partial",
      "BC": "Patches",
      "DR": "Low drifting",
      "BL": "Blowing",
      "SH": "Showers",
      "TS": "Thunderstorm",
      "FZ": "Freezing"
    },
    "precipitation": {
      "DZ": "Drizzle",
      "RA": "Rain",
      "SN": "Snow",
      "SG": "Snow grains",
      "IC": "Ice crystals",
      "PL": "Ice pellets",
      "GR": "Hail (≥5mm)",
      "GS": "Small hail (<5mm) and/or snow pellets",
      "UP": "Unknown precipitation (AUTO)"
    },
    "obscuration": {
      "BR": "Mist (vis 1000-5000m)",
      "FG": "Fog (vis <1000m)",
      "FU": "Smoke",
      "VA": "Volcanic ash",
      "DU": "Widespread dust",
      "SA": "Sand",
      "HZ": "Haze",
      "PY": "Spray"
    },
    "other": {
      "PO": "Dust/sand whirls",
      "SQ": "Squall",
      "FC": "Funnel cloud (tornado/waterspout)",
      "SS": "Sandstorm",
      "DS": "Duststorm"
    }
  },
  "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 EGLL 281045Z 09012KT 3000 BR BKN004 08/07 Q1019",
    "METAR KJFK 281056Z 32008KT 10SM SCT250 M02/M14 A3042 RMK AO2",
    "METAR LFPG 281030Z AUTO 27015KT 9999 // NCD 12/05 Q1023",
    "METAR LFPG 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"
  ]
}
