{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://schema.fitko.de/fit-connect/process-definition/vereinsfest/schemas/MessageFlow9_Stellungnahme_Entscheidung_Fachbehoerde_Zustimmung_Auflagen.schema.json",
  "title": "MessageFlow 9: Stellungnahme / Entscheidung Fachbehörde (Zustimmung/Auflagen)",
  "description": "Datenschema für die Übermittlung einer fachbehördlichen Stellungnahme/Entscheidung im positiven Pfad (Zustimmung bzw. Zustimmung mit Auflagen) vom Ordnungsamt/Gewerbeamt an die Fachbehörde und zurück (MessageFlow 9 im BPMN-Prozess).",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "vorgangsId",
    "bezugWeiterleitungId",
    "stellungnahmeId",
    "erstelltAm",
    "entscheidung"
  ],
  "properties": {
    "vorgangsId": {
      "$ref": "#/$defs/Id",
      "description": "Eindeutige Vorgangs-ID zur Zuordnung im Gesamtprozess."
    },
    "bezugWeiterleitungId": {
      "$ref": "#/$defs/Id",
      "description": "Referenz auf die weiterleitungId aus MessageFlow 5 (Anzeige weitergeleitet)."
    },
    "stellungnahmeId": {
      "$ref": "#/$defs/Id",
      "description": "Eindeutige ID der fachbehördlichen Stellungnahme/Entscheidung."
    },
    "erstelltAm": {
      "$ref": "#/$defs/Timestamp",
      "description": "Erstellungszeitpunkt der Stellungnahme/Entscheidung (ISO-8601 date-time)."
    },
    "aktenzeichen": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Optionales Aktenzeichen/Referenz der Behörde."
    },
    "entscheidung": {
      "$ref": "#/$defs/Entscheidung",
      "description": "Fachliche Entscheidung der Fachbehörde (positiver Pfad)."
    },
    "begruendung": {
      "type": "string",
      "maxLength": 10000,
      "description": "Optionale Begründung / Erläuterung zur Entscheidung."
    },
    "auflagen": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Auflage"
      },
      "minItems": 1,
      "description": "Auflagen/Bedingungen, die einzuhalten sind (bei Zustimmung mit Auflagen)."
    },
    "anlagen": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Dokument"
      },
      "minItems": 0,
      "description": "Optionale Anlagen/Dokumente (z.B. Prüfbogen, Auflagenkatalog, Gutachten)."
    },
    "bearbeitendeStelle": {
      "$ref": "#/$defs/BearbeitendeStelle",
      "description": "Optionale Metadaten zur bearbeitenden Fachbehörde/Stelle."
    },
    "kontakt": {
      "$ref": "#/$defs/Kontakt",
      "description": "Optionaler Kontakt für Rückfragen."
    },
    "hinweise": {
      "type": "string",
      "maxLength": 5000,
      "description": "Optionale Hinweise zur weiteren Bearbeitung (z.B. Vollzug, Kommunikation, Fristen)."
    },
    "bezugAnzeigeSchema": {
      "type": "object",
      "title": "Bezug Anzeige-Fachschema (optional)",
      "description": "Optionaler Verweis auf das zugrundeliegende Fachdatenschema der Anzeige.",
      "additionalProperties": false,
      "properties": {
        "schemaId": {
          "type": "string",
          "const": "https://schema.fitko.de/fit-connect/process-definition/vereinsfest/schemas/MessageFlow1_S05000581V1.1_2025-11-25-1764059338437.schema.json",
          "description": "Schema-$id der Anzeige (S05000581V1.1)."
        },
        "version": {
          "type": "string",
          "maxLength": 50,
          "description": "Optionale Version/Release-Angabe, falls abweichend vom schemaId erfasst."
        }
      },
      "required": [
        "schemaId"
      ]
    }
  },
  "allOf": [
    {
      "if": {
        "properties": {
          "entscheidung": {
            "properties": {
              "code": {
                "const": "zustimmung_mit_auflagen"
              }
            },
            "required": [
              "code"
            ]
          }
        },
        "required": [
          "entscheidung"
        ]
      },
      "then": {
        "required": [
          "auflagen"
        ]
      }
    }
  ],
  "$defs": {
    "Id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "Eindeutige Kennung (System-/Vorgangs-/Dokument-ID)."
    },
    "Timestamp": {
      "type": "string",
      "format": "date-time",
      "description": "Zeitpunkt im ISO-8601-Format (date-time)."
    },
    "Date": {
      "type": "string",
      "format": "date",
      "description": "Datum im ISO-8601-Format (YYYY-MM-DD)."
    },
    "Entscheidung": {
      "type": "object",
      "title": "Entscheidung (Fachbehörde)",
      "description": "Fachbehördliche Entscheidung im positiven Pfad.",
      "additionalProperties": false,
      "properties": {
        "code": {
          "type": "string",
          "description": "Normierter Entscheidungscode.",
          "enum": [
            "zustimmung",
            "zustimmung_mit_auflagen"
          ]
        },
        "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)."
        },
        "rechtsgrundlage": {
          "type": "string",
          "maxLength": 500,
          "description": "Optional: Rechtsgrundlage/Normverweis zur Auflage."
        }
      },
      "required": [
        "text"
      ]
    },
    "Dokument": {
      "type": "object",
      "title": "Dokument/Anlage",
      "description": "Optionales Dokument zur Stellungnahme/Entscheidung (keine Binärdaten).",
      "additionalProperties": false,
      "properties": {
        "dokumentId": {
          "$ref": "#/$defs/Id",
          "description": "Optionale Dokument-ID."
        },
        "kategorie": {
          "type": "string",
          "description": "Kategorie/Typ des Dokuments.",
          "enum": [
            "stellungnahme",
            "auflagen",
            "pruefbericht",
            "gutachten",
            "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."
        },
        "hashSha256": {
          "type": "string",
          "pattern": "^[A-Fa-f0-9]{64}$",
          "description": "Optionaler SHA-256 Hash der Datei (hex)."
        }
      },
      "required": [
        "kategorie",
        "dateiRef"
      ]
    },
    "Kontakt": {
      "type": "object",
      "title": "Kontakt",
      "description": "Optionaler Kontakt für Rückfragen.",
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": "string",
          "maxLength": 200
        },
        "organisation": {
          "type": "string",
          "maxLength": 200
        },
        "email": {
          "type": "string",
          "format": "email",
          "maxLength": 254
        },
        "telefon": {
          "type": "string",
          "maxLength": 50
        },
        "fax": {
          "type": "string",
          "maxLength": 50
        }
      }
    },
    "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)."
        }
      }
    }
  },
  "examples": [
    {
      "vorgangsId": "VORG-2026-000123",
      "bezugWeiterleitungId": "WEITERL-2026-000045",
      "stellungnahmeId": "STELL-2026-000078",
      "erstelltAm": "2026-02-17T10:15:30Z",
      "entscheidung": {
        "code": "zustimmung_mit_auflagen",
        "label": "Zustimmung mit Auflagen"
      },
      "begruendung": "Aus lebensmittelrechtlicher Sicht bestehen keine Einwände, sofern die folgenden Auflagen eingehalten werden.",
      "auflagen": [
        {
          "text": "Handwaschgelegenheit mit fließendem Wasser bereitstellen.",
          "bezug": "Ausgabestand",
          "fristBis": "2026-06-01"
        },
        {
          "text": "Kühlkette für leicht verderbliche Lebensmittel sicherstellen.",
          "bezug": "Lagerung/Kühlung"
        }
      ],
      "anlagen": [
        {
          "kategorie": "pruefbericht",
          "titel": "Prüfhinweise Lebensmittelhygiene",
          "dateiname": "pruefhinweise.pdf",
          "mimeType": "application/pdf",
          "dateiRef": "DOK-4711"
        }
      ],
      "bearbeitendeStelle": {
        "name": "Lebensmittelüberwachung",
        "organisationseinheit": "Fachdienst"
      },
      "kontakt": {
        "email": "lebensmittelueberwachung@example.de",
        "telefon": "+49 123 456789"
      },
      "bezugAnzeigeSchema": {
        "schemaId": "https://schema.fitko.de/fit-connect/process-definition/vereinsfest/schemas/MessageFlow1_S05000581V1.1_2025-11-25-1764059338437.schema.json"
      }
    }
  ]
}