{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/bund-dev/json-schema/bund-dev-normal-schema-schema.json",
  "title": "NormalSchema",
  "description": "Schema für Endpunkte, die den grundlegen 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/NormalSchema",
  "type": "object",
  "allOf": [
    {
      "$ref": "#/$defs/BaseSchema"
    }
  ],
  "properties": {
    "features": {
      "type": "array",
      "description": "Liste einzelner Datensätze",
      "items": {
        "$ref": "#/$defs/NormalFeature"
      }
    }
  },
  "$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"
        }
      }
    },
    "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"
          }
        }
      }
    },
    "NormalFeature": {
      "type": "object",
      "description": "Einzelner Datenpunkt, der nur über den normalen Umfang an Werten verfügt",
      "allOf": [
        {
          "$ref": "#/$defs/BaseFeature"
        }
      ],
      "properties": {
        "properties": {
          "$ref": "#/$defs/NormalFeatureProperties"
        }
      }
    },
    "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"
        }
      }
    }
  }
}