{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/bund-dev/json-schema/bund-dev-extended-schema-schema.json",
  "title": "ExtendedSchema",
  "description": "Schema für Endpunkte, die den erweiterten Umfang an Messwerten pro Datenpunkt bereitstellen.",
  "x-generated": "2026-11-11",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/bund-dev-strahlenschutz-openapi.yml#/components/schemas/ExtendedSchema",
  "type": "object",
  "allOf": [
    {
      "$ref": "#/$defs/BaseSchema"
    }
  ],
  "properties": {
    "features": {
      "type": "array",
      "description": "Liste einzelner Datensätze",
      "items": {
        "$ref": "#/$defs/ExtendedFeature"
      }
    }
  },
  "$defs": {
    "BaseFeature": {
      "type": "object",
      "description": "Abstrakter Datenpunkt mit grundlegenden Werten. Entspricht einem `Feature` in GeoJSON.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "Feature"
          ],
          "description": "Feature-Feld, immer `Feature`"
        },
        "id": {
          "type": "string",
          "description": "ID des Features, setzt sich zusammen aus dem Name des Layers und einer eindeutigen ID"
        },
        "geometry": {
          "$ref": "#/$defs/GeometryPoint"
        },
        "geometry_name": {
          "type": "string",
          "enum": [
            "geom"
          ],
          "description": "Geometriename, immer `geom`"
        }
      }
    },
    "BaseSchema": {
      "description": "Abstraktes Standardschema der API. Diese Ebene entspricht einer `FeatureCollection` in GeoJSON.",
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "FeatureCollection"
          ],
          "description": "FeatureCollection-Feld, immer `FeatureCollection`"
        },
        "totalFeatures": {
          "type": "number",
          "description": "Anzahl der insgesamt gefundenen Datensätze"
        },
        "numberReturned": {
          "type": "number",
          "description": "Anzahl zurückgegebener Datensätze, also die Länge von `features`. Kleinergleich `totalFeatures`."
        },
        "timeStamp": {
          "type": "string",
          "format": "date-time",
          "description": "Zeitstempel der Antwort"
        }
      }
    },
    "ExtendedFeature": {
      "type": "object",
      "description": "Einzelner Datenpunkt, der nur über den erweiterten Umfang an Werten verfügt",
      "allOf": [
        {
          "$ref": "#/$defs/BaseFeature"
        }
      ],
      "properties": {
        "properties": {
          "$ref": "#/$defs/ExtendedFeatureProperties"
        }
      }
    },
    "ExtendedFeatureProperties": {
      "type": "object",
      "description": "Erweiterte Werte eines einzelnen Datenpunktes",
      "allOf": [
        {
          "$ref": "#/$defs/NormalFeatureProperties"
        }
      ],
      "properties": {
        "site_status": {
          "type": "number",
          "enum": [
            1,
            2,
            3
          ],
          "description": "Status der Messstelle:\n  * `1` - In Betrieb\n  * `2` - Defekt\n  * `3` - Testbetrieb\n"
        },
        "site_status_text": {
          "type": "string",
          "description": "Status der Messstelle als Text"
        },
        "kid": {
          "type": "number",
          "enum": [
            1,
            2,
            3,
            4,
            5,
            6
          ],
          "description": "ID des Messnetzknotens, dem die Messstelle zugeordnet ist:\n  * `1` - Freiburg\n  * `2` - Berlin\n  * `3` - München\n  * `4` - Bonn\n  * `5` - Salzgitter\n  * `6` - Rendsburg\n"
        },
        "height_above_sea": {
          "type": "number",
          "description": "Höhe der Messstelle über NN (Normal Null, Meereshöhe)"
        },
        "value_cosmic": {
          "type": "number",
          "description": "Kosmischer Anteil in `unit`"
        },
        "value_terrestrial": {
          "type": "number",
          "description": "Terrestrischer Anteil in `unit`"
        }
      }
    },
    "GeometryPoint": {
      "type": "object",
      "description": "Koordinaten der Messstelle",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "Point"
          ],
          "description": "Point-Feld, immer `Point`"
        },
        "coordinates": {
          "type": "array",
          "description": "Koordinaten des Punkts (erster Wert Längengrad, zweiter Wert Breitengrad)",
          "minItems": 2,
          "maxItems": 2,
          "items": {
            "type": "number"
          }
        }
      }
    },
    "NormalFeatureProperties": {
      "type": "object",
      "description": "Grundlegende Werte eines einzelnen Datenpunktes",
      "properties": {
        "id": {
          "type": "string",
          "description": "Internationale ID der Messstelle"
        },
        "kenn": {
          "type": "string",
          "description": "Interne Messstellenkennung"
        },
        "plz": {
          "type": "string",
          "description": "PLZ der Messstelle"
        },
        "name": {
          "type": "string",
          "description": "Name/Ortsname der Messstelle"
        },
        "start_measure": {
          "type": "string",
          "format": "date-time",
          "description": "Startzeitpunkt der Messperiode für den gegebenen Messwert als ISO-Datetime"
        },
        "end_measure": {
          "type": "string",
          "format": "date-time",
          "description": "Endzeitpunkt der Messperiode für den gegebenen Messwert als ISO-Datetime"
        },
        "value": {
          "type": "number",
          "description": "Der Messwert in `unit` (setzt sich aus `value_cosmic` und `value_terrestrial` zusammen)"
        },
        "unit": {
          "type": "string",
          "description": "Einheit der Messwerte"
        },
        "validated": {
          "type": "number",
          "enum": [
            1,
            2
          ],
          "description": "Prüfstatus des Messwertes:\n  * `1` - geprüft\n  * `2` - ungeprüft\n"
        },
        "nuclide": {
          "type": "string",
          "description": "Bezeichnung der Messgröße"
        },
        "duration": {
          "type": "string",
          "enum": [
            "1h",
            "1d"
          ],
          "description": "Dauer der Messperiode\n  * `1h` - eine Stunde\n  * `1d` - ein Tag\n"
        }
      }
    }
  }
}