{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://schema.fitko.de/fit-connect/process-definition/vereinsfest/schemas/MessageFlow7_Rueckmeldung_zu_Einwendungen.schema.json",
  "title": "Rückmeldung zu Einwendungen",
  "description": "Datenschema für MessageFlow #7 (Rückmeldung zu Einwendungen) im Prozess „Anzeige eines vorübergehenden Gaststättenbetriebs (z.B. Vereinsfest)“. Übermittelt von der Fachbehörde an den Onlinedienst/Vereinssoftware als Antwort auf eine Einwendung (MessageFlow #6).",
  "type": "object",
  "additionalProperties": false,
  "$defs": {
    "Id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "Eindeutige Kennung (System-/Vorgangs-/Dokument-ID)."
    },
    "Timestamp": {
      "type": "string",
      "format": "date-time",
      "description": "Zeitstempel im ISO-8601-Format (date-time)."
    },
    "Date": {
      "type": "string",
      "format": "date",
      "description": "Datum im ISO-8601-Format (YYYY-MM-DD)."
    },
    "Kontakt": {
      "type": "object",
      "title": "Kontakt (optional)",
      "description": "Kontaktmöglichkeit für Rückfragen zur Rückmeldung.",
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200,
          "description": "Ansprechperson oder Funktionspostfach (Name)."
        },
        "organisation": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200,
          "description": "Organisation/Behörde/Einheit."
        },
        "email": {
          "type": "string",
          "format": "email",
          "description": "E-Mail-Adresse für Rückfragen."
        },
        "telefon": {
          "type": "string",
          "minLength": 3,
          "maxLength": 30,
          "description": "Telefonnummer für Rückfragen."
        },
        "fax": {
          "type": "string",
          "minLength": 3,
          "maxLength": 30,
          "description": "Faxnummer (falls genutzt)."
        }
      }
    },
    "Dokument": {
      "type": "object",
      "title": "Dokument/Anlage",
      "description": "Optionales Dokument zur Rückmeldung (z.B. Stellungnahme, Entscheidung, Begründung, Anlage).",
      "additionalProperties": false,
      "properties": {
        "dokumentId": {
          "$ref": "#/$defs/Id",
          "description": "Optionale Dokument-ID."
        },
        "kategorie": {
          "type": "string",
          "description": "Kategorie/Typ des Dokuments.",
          "enum": [
            "stellungnahme",
            "entscheidung",
            "begruendung",
            "anlage",
            "sonstiges"
          ]
        },
        "titel": {
          "type": "string",
          "maxLength": 200,
          "description": "Optionaler Titel."
        },
        "dateiname": {
          "type": "string",
          "maxLength": 255,
          "description": "Optionaler Dateiname."
        },
        "mimeType": {
          "type": "string",
          "maxLength": 100,
          "description": "Optionaler MIME-Type (z.B. application/pdf)."
        },
        "dateiRef": {
          "type": "string",
          "minLength": 1,
          "maxLength": 500,
          "description": "Referenz/ID auf die Datei im Austausch-/Dokumenten-System (keine Binärdaten)."
        },
        "hashSha256": {
          "type": "string",
          "pattern": "^[A-Fa-f0-9]{64}$",
          "description": "Optionaler SHA-256 Hash der Datei (hex)."
        }
      },
      "required": [
        "kategorie",
        "dateiRef"
      ]
    },
    "Ergebnis": {
      "type": "object",
      "title": "Ergebnis der Prüfung der Einwendung",
      "description": "Ergebnis/Status der Rückmeldung zur Einwendung.",
      "additionalProperties": false,
      "properties": {
        "code": {
          "type": "string",
          "description": "Normierter Ergebniscode.",
          "enum": [
            "stattgegeben",
            "teilweise_stattgegeben",
            "abgelehnt",
            "nicht_zustaendig",
            "zurueckgezogen",
            "sonstiges"
          ]
        },
        "label": {
          "type": "string",
          "maxLength": 200,
          "description": "Optionales Kurzlabel/Anzeige-Text."
        }
      },
      "required": [
        "code"
      ]
    },
    "Entscheidung": {
      "type": "object",
      "title": "Aktualisierte Entscheidung (optional)",
      "description": "Optional: aktualisierte Entscheidung als Konsequenz aus der Einwendungsprüfung (z.B. angepasste Auflagen).",
      "additionalProperties": false,
      "properties": {
        "code": {
          "type": "string",
          "description": "Normierter Entscheidungscode.",
          "enum": [
            "keine_einwaende",
            "auflagen",
            "untersagung",
            "sonstiges"
          ]
        },
        "label": {
          "type": "string",
          "maxLength": 200,
          "description": "Optionales Kurzlabel/Anzeige-Text zur Entscheidung."
        }
      },
      "required": [
        "code"
      ]
    },
    "Auflage": {
      "type": "object",
      "title": "Auflage",
      "description": "Einzelne Auflage/Bedingung, die einzuhalten ist.",
      "additionalProperties": false,
      "properties": {
        "auflageId": {
          "$ref": "#/$defs/Id",
          "description": "Optionale ID der Auflage (falls systemseitig vorhanden)."
        },
        "text": {
          "type": "string",
          "minLength": 1,
          "maxLength": 4000,
          "description": "Beschreibung der Auflage."
        },
        "fristBis": {
          "description": "Optional: Frist zur Erfüllung (Datum oder date-time).",
          "anyOf": [
            {
              "$ref": "#/$defs/Date"
            },
            {
              "$ref": "#/$defs/Timestamp"
            }
          ]
        },
        "bezug": {
          "type": "string",
          "maxLength": 500,
          "description": "Optional: Bezug (z.B. Ort/Bereich, Dokument, Feldpfad)."
        }
      },
      "required": [
        "text"
      ]
    },
    "BearbeitendeStelle": {
      "type": "object",
      "title": "Bearbeitende Stelle (optional)",
      "description": "Optionale Metadaten zur bearbeitenden Fachbehörde/Stelle.",
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": "string",
          "maxLength": 200,
          "description": "Name der Stelle/Einheit."
        },
        "organisationseinheit": {
          "type": "string",
          "maxLength": 200,
          "description": "Organisationseinheit/Fachdienst."
        },
        "behoerdenkennung": {
          "type": "string",
          "maxLength": 100,
          "description": "Optionale Kennung (z.B. Behördenkennzeichen)."
        }
      }
    }
  },
  "properties": {
    "vorgangsId": {
      "$ref": "#/$defs/Id",
      "description": "ID/Aktenzeichen zur eindeutigen Zuordnung des Vorgangs (Anzeige)."
    },
    "antwortId": {
      "$ref": "#/$defs/Id",
      "description": "Eindeutige ID der Rückmeldung/Antwort auf die Einwendung."
    },
    "bezugEinwendungId": {
      "$ref": "#/$defs/Id",
      "description": "Referenz auf die Einwendung-ID (MessageFlow #6), auf die geantwortet wird."
    },
    "erstelltAm": {
      "$ref": "#/$defs/Timestamp",
      "description": "Zeitpunkt der Erstellung/Übermittlung der Rückmeldung."
    },
    "ergebnis": {
      "$ref": "#/$defs/Ergebnis"
    },
    "begruendung": {
      "type": "string",
      "maxLength": 10000,
      "description": "Optionale Begründung/Erläuterung der Rückmeldung."
    },
    "aktualisierteEntscheidung": {
      "$ref": "#/$defs/Entscheidung"
    },
    "auflagen": {
      "type": "array",
      "minItems": 0,
      "items": {
        "$ref": "#/$defs/Auflage"
      },
      "description": "Optional: (aktualisierte) Auflagen, falls Ergebnis/Entscheidung dies vorsieht."
    },
    "untersagungsgruende": {
      "type": "array",
      "minItems": 0,
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 2000
      },
      "description": "Optional: Gründe für eine (Teil-)Untersagung."
    },
    "anlagen": {
      "type": "array",
      "minItems": 0,
      "items": {
        "$ref": "#/$defs/Dokument"
      },
      "description": "Optionale Anlagen zur Rückmeldung."
    },
    "bearbeitendeStelle": {
      "$ref": "#/$defs/BearbeitendeStelle"
    },
    "kontakt": {
      "$ref": "#/$defs/Kontakt"
    },
    "hinweise": {
      "type": "string",
      "maxLength": 8000,
      "description": "Optionale zusätzliche Hinweise (z.B. weiteres Vorgehen, Fristen, Kontaktwege)."
    },
    "bezugAnzeigeSchema": {
      "type": "object",
      "title": "Bezug zum Anzeige-Schema (optional)",
      "description": "Optionaler Hinweis, auf welches Fachdatenschema (Anzeige) sich die Rückmeldung bezieht.",
      "additionalProperties": false,
      "properties": {
        "schemaId": {
          "type": "string",
          "minLength": 1,
          "maxLength": 500,
          "description": "Schema-$id oder andere Kennung.",
          "default": "https://schema.fitko.de/fit-connect/process-definition/vereinsfest/schemas/MessageFlow1_S05000581V1.1_2025-11-25-1764059338437.schema.json"
        },
        "schemaVersion": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100,
          "description": "Version des Fachdatenschemas.",
          "default": "S05000581V1.1"
        }
      }
    },
    "text": {
      "type": "string",
      "title": "Text",
      "description": "Optionaler Nachrichtentext zur Rückmeldung auf die Einwendung (für Menschen lesbar).",
      "minLength": 1
    }
  },
  "required": [
    "vorgangsId",
    "antwortId",
    "bezugEinwendungId",
    "erstelltAm",
    "ergebnis"
  ],
  "allOf": [
    {
      "if": {
        "properties": {
          "ergebnis": {
            "properties": {
              "code": {
                "enum": [
                  "stattgegeben",
                  "teilweise_stattgegeben"
                ]
              }
            },
            "required": [
              "code"
            ]
          }
        },
        "required": [
          "ergebnis"
        ]
      },
      "then": {
        "required": [
          "aktualisierteEntscheidung"
        ]
      }
    },
    {
      "if": {
        "properties": {
          "aktualisierteEntscheidung": {
            "properties": {
              "code": {
                "const": "auflagen"
              }
            },
            "required": [
              "code"
            ]
          }
        },
        "required": [
          "aktualisierteEntscheidung"
        ]
      },
      "then": {
        "required": [
          "auflagen"
        ],
        "properties": {
          "auflagen": {
            "minItems": 1
          }
        }
      }
    },
    {
      "if": {
        "properties": {
          "aktualisierteEntscheidung": {
            "properties": {
              "code": {
                "const": "untersagung"
              }
            },
            "required": [
              "code"
            ]
          }
        },
        "required": [
          "aktualisierteEntscheidung"
        ]
      },
      "then": {
        "required": [
          "untersagungsgruende",
          "begruendung"
        ],
        "properties": {
          "untersagungsgruende": {
            "minItems": 1
          }
        }
      }
    }
  ],
  "examples": [
    {
      "vorgangsId": "VF-2026-000123",
      "antwortId": "AW-2026-000002",
      "bezugEinwendungId": "EW-2026-000007",
      "erstelltAm": "2026-02-16T14:15:00+01:00",
      "ergebnis": {
        "code": "teilweise_stattgegeben",
        "label": "Teilweise stattgegeben"
      },
      "begruendung": "Die Einwendung wird teilweise berücksichtigt. Die Ausschankzeit wird verlängert, sofern die zusätzlichen Sicherheitsmaßnahmen umgesetzt werden.",
      "aktualisierteEntscheidung": {
        "code": "auflagen",
        "label": "Auflagen angepasst"
      },
      "auflagen": [
        {
          "auflageId": "A-2026-0003",
          "text": "Ausschank bis 23:00 Uhr. Während der gesamten Veranstaltung ist ein Ordnerdienst (mind. 4 Personen) einzusetzen.",
          "fristBis": "2026-03-01",
          "bezug": "Sicherheitskonzept / Ordnerdienst"
        }
      ],
      "anlagen": [
        {
          "kategorie": "entscheidung",
          "titel": "Stellungnahme Fachbehörde",
          "dateiname": "stellungnahme.pdf",
          "mimeType": "application/pdf",
          "dateiRef": "DOC-STORE-4c2f6f90"
        }
      ],
      "kontakt": {
        "organisation": "Fachbehörde Lebensmittelüberwachung",
        "email": "lebensmittelueberwachung@example.de"
      },
      "hinweise": "Bitte leiten Sie die aktualisierten Auflagen an die antragstellende Stelle weiter.",
      "bezugAnzeigeSchema": {
        "schemaId": "https://schema.fitko.de/fit-connect/process-definition/vereinsfest/schemas/MessageFlow1_S05000581V1.1_2025-11-25-1764059338437.schema.json",
        "schemaVersion": "S05000581V1.1"
      },
      "text": "Rückmeldung zur Einwendung: Ausweiskontrolle muss bei allen Gästen durchgeführt werden."
    }
  ]
}