{
  "message_count": 117,
  "counts_by_code": {
    "G": 48,
    "T": 25,
    "S": 12,
    "E": 8,
    "J": 7,
    "P": 6,
    "V": 3,
    "K": 2,
    "F": 2,
    "W": 2,
    "L": 1,
    "O": 1
  },
  "counts_by_area": {
    "G": 48,
    "T": 25,
    "S": 12,
    "E": 8,
    "J": 7,
    "P": 6,
    "V": 3,
    "K": 2,
    "F": 2,
    "W": 2,
    "L": 1,
    "O": 1
  },
  "keyword_counts": {
    "fog": 16,
    "warning": 9,
    "gale": 4,
    "survey": 3,
    "exercise": 3,
    "ais": 1,
    "storm": 1,
    "ice": 1
  },
  "station_coverage": {
    "resolved_message_count": 64,
    "unresolved_message_count": 53,
    "resolved_station_count": 8,
    "station_rows": [
      {
        "key": "cullercoats",
        "code": "G",
        "station_name": "Cullercoats",
        "country": "United Kingdom",
        "nav_area": "I",
        "latitude": 55.0747,
        "longitude": -1.4632,
        "coverage_label": "North Sea and north-east UK coast",
        "message_count": 27,
        "basis": "station-signature",
        "matched_terms": [
          "DOGGER",
          "SOFIA OFFSHORE WIND FARM"
        ]
      },
      {
        "key": "oostende",
        "code": "T",
        "station_name": "Oostende Radio",
        "country": "Belgium",
        "nav_area": "I",
        "latitude": 51.1825,
        "longitude": 2.8078,
        "coverage_label": "Belgian coast and southern North Sea",
        "message_count": 13,
        "basis": "station-signature",
        "matched_terms": [
          "OOSTENDE",
          "OOSTENDERADIO"
        ]
      },
      {
        "key": "pinneberg",
        "code": "S",
        "station_name": "Pinneberg",
        "country": "Germany",
        "nav_area": "I",
        "latitude": 53.675,
        "longitude": 9.8083,
        "coverage_label": "German Bight and German North Sea",
        "message_count": 9,
        "basis": "station-signature",
        "matched_terms": [
          "GERMAN BIGHT"
        ]
      },
      {
        "key": "oostende_thames",
        "code": "V",
        "station_name": "Oostende (Thames Approaches relay)",
        "country": "Belgium / United Kingdom",
        "nav_area": "I",
        "latitude": 51.1825,
        "longitude": 2.8078,
        "coverage_label": "Thames approaches and Dover approaches",
        "message_count": 5,
        "basis": "station-signature",
        "matched_terms": [
          "THAMES"
        ]
      },
      {
        "key": "niton",
        "code": "E",
        "station_name": "Niton",
        "country": "United Kingdom",
        "nav_area": "I",
        "latitude": 50.5863,
        "longitude": -1.2545,
        "coverage_label": "English Channel and western approaches",
        "message_count": 4,
        "basis": "regional-context",
        "matched_terms": [
          "LUNDY"
        ]
      },
      {
        "key": "niton_france",
        "code": "K",
        "station_name": "Niton (France relay)",
        "country": "United Kingdom / France",
        "nav_area": "I",
        "latitude": 50.5863,
        "longitude": -1.2545,
        "coverage_label": "Channel Islands and north-east French coast",
        "message_count": 3,
        "basis": "station-signature",
        "matched_terms": [
          "AVURNAV CHERBOURG",
          "CHERBOURG"
        ]
      },
      {
        "key": "cross_la_garde",
        "code": "W",
        "station_name": "CROSS La Garde",
        "country": "France",
        "nav_area": "III",
        "latitude": 43.1043,
        "longitude": 5.9915,
        "coverage_label": "Provence, Ligurian Sea and western Mediterranean",
        "message_count": 2,
        "basis": "station-signature",
        "matched_terms": [
          "AVURNAV TOULON"
        ]
      },
      {
        "key": "netherlands_coastguard",
        "code": "P",
        "station_name": "Netherlands Coastguard Radio",
        "country": "Netherlands",
        "nav_area": "I",
        "latitude": 52.9177,
        "longitude": 4.739,
        "coverage_label": "Dutch EEZ and southern North Sea",
        "message_count": 1,
        "basis": "station-signature",
        "matched_terms": [
          "DUTCH EEZ"
        ]
      }
    ],
    "code_rows": [
      {
        "code": "G",
        "message_count": 48,
        "resolved_station_names": [
          "Cullercoats"
        ],
        "unresolved_message_count": 21
      },
      {
        "code": "T",
        "message_count": 25,
        "resolved_station_names": [
          "Oostende Radio",
          "Oostende (Thames Approaches relay)"
        ],
        "unresolved_message_count": 11
      },
      {
        "code": "S",
        "message_count": 12,
        "resolved_station_names": [
          "Pinneberg"
        ],
        "unresolved_message_count": 3
      },
      {
        "code": "E",
        "message_count": 8,
        "resolved_station_names": [
          "Niton"
        ],
        "unresolved_message_count": 4
      },
      {
        "code": "J",
        "message_count": 7,
        "resolved_station_names": [
          "Niton (France relay)"
        ],
        "unresolved_message_count": 6
      },
      {
        "code": "P",
        "message_count": 6,
        "resolved_station_names": [
          "Oostende (Thames Approaches relay)",
          "Netherlands Coastguard Radio"
        ],
        "unresolved_message_count": 3
      },
      {
        "code": "V",
        "message_count": 3,
        "resolved_station_names": [
          "Oostende (Thames Approaches relay)"
        ],
        "unresolved_message_count": 1
      },
      {
        "code": "K",
        "message_count": 2,
        "resolved_station_names": [
          "Niton (France relay)"
        ],
        "unresolved_message_count": 0
      },
      {
        "code": "F",
        "message_count": 2,
        "resolved_station_names": [],
        "unresolved_message_count": 2
      },
      {
        "code": "W",
        "message_count": 2,
        "resolved_station_names": [
          "CROSS La Garde"
        ],
        "unresolved_message_count": 0
      },
      {
        "code": "L",
        "message_count": 1,
        "resolved_station_names": [],
        "unresolved_message_count": 1
      },
      {
        "code": "O",
        "message_count": 1,
        "resolved_station_names": [],
        "unresolved_message_count": 1
      }
    ],
    "station_reference_source_label": "ITU List IV coast station table (2025)",
    "station_reference_source_url": "https://www.itu.int/en/ITU-R/terrestrial/mars/Documents/ListIV_User%20Guide%20and%20Reference%20Tables_2025.pdf",
    "global_map_source_label": "WMO NAVTEX stations map",
    "global_map_source_url": "https://wmo.int/navtex-stations"
  }
}