{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://schema.fitko.de/fit-connect/process-definition/vereinsfest/schemas/MessageFlow4_Rueckmeldung_Bescheid.schema.json",
  "title": "Rückmeldung / Bescheid",
  "description": "Datenschema für MessageFlow #4 (Rückmeldung / Bescheid) im Prozess „Anzeige eines vorübergehenden Gaststättenbetriebs (z.B. Vereinsfest)“. Übermittelt von Ordnungsamt/Gewerbeamt an Onlinedienst/Vereinssoftware. Enthält Entscheidung (keine Einwände / Auflagen / Untersagung), optional Gebühren und Anlagen.",
  "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)."
    },
    "Entscheidung": {
      "type": "object",
      "title": "Entscheidung",
      "description": "Entscheidungsinhalt der Rückmeldung / des Bescheids.",
      "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"
      ]
    },
    "Gebuehr": {
      "type": "object",
      "title": "Gebühren / Zahlungsaufforderung",
      "description": "Optionaler Gebührenblock (z.B. Gebührenbescheid / Zahlungsaufforderung).",
      "additionalProperties": false,
      "properties": {
        "betrag": {
          "type": "number",
          "minimum": 0,
          "multipleOf": 0.01,
          "description": "Betrag in Währungseinheiten (z.B. 12.34 für EUR)."
        },
        "waehrung": {
          "type": "string",
          "pattern": "^[A-Z]{3}$",
          "default": "EUR",
          "description": "ISO-4217 Währungscode (z.B. EUR)."
        },
        "faelligAm": {
          "$ref": "#/$defs/Date",
          "description": "Fälligkeitsdatum (optional)."
        },
        "kassenzeichen": {
          "type": "string",
          "maxLength": 100,
          "description": "Optionales Kassenzeichen / Zahlungsreferenz."
        },
        "verwendungszweck": {
          "type": "string",
          "maxLength": 500,
          "description": "Optionaler Verwendungszweck."
        },
        "empfaenger": {
          "type": "string",
          "maxLength": 200,
          "description": "Optional: Zahlungsempfänger."
        },
        "iban": {
          "type": "string",
          "maxLength": 34,
          "description": "Optional: IBAN."
        },
        "bic": {
          "type": "string",
          "maxLength": 11,
          "description": "Optional: BIC."
        }
      },
      "required": [
        "betrag",
        "waehrung"
      ]
    },
    "Dokument": {
      "type": "object",
      "title": "Dokument/Anlage",
      "description": "Optionales Dokument (z.B. Bescheid-PDF, Gebührenbescheid, Auflagenblatt).",
      "additionalProperties": false,
      "properties": {
        "dokumentId": {
          "$ref": "#/$defs/Id",
          "description": "Optionale Dokument-ID."
        },
        "kategorie": {
          "type": "string",
          "description": "Kategorie/Typ des Dokuments.",
          "enum": [
            "bescheid",
            "gebuehrenbescheid",
            "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"
      ]
    },
    "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
        }
      }
    }
  },
  "properties": {
    "vorgangsId": {
      "$ref": "#/$defs/Id",
      "title": "Vorgangs-ID",
      "description": "Eindeutige ID zur Zuordnung zur Anzeige / zum Vorgang."
    },
    "rueckmeldungId": {
      "$ref": "#/$defs/Id",
      "title": "Rückmeldungs-/Bescheid-ID",
      "description": "Eindeutige ID der Rückmeldung/des Bescheids (von der Behörde vergeben)."
    },
    "erstelltAm": {
      "$ref": "#/$defs/Timestamp",
      "title": "Erstellt am",
      "description": "Zeitpunkt der Erstellung/Übermittlung der Rückmeldung."
    },
    "aktenzeichen": {
      "type": "string",
      "maxLength": 100,
      "description": "Optionales behördliches Aktenzeichen."
    },
    "entscheidung": {
      "$ref": "#/$defs/Entscheidung",
      "description": "Entscheidung (Status) der Rückmeldung / des Bescheids."
    },
    "begruendung": {
      "type": "string",
      "maxLength": 12000,
      "description": "Optional: Begründung/Begründungstext (insb. bei Untersagung oder sonstigen Entscheidungen)."
    },
    "auflagen": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/Auflage"
      },
      "description": "Optional: Liste von Auflagen (bei Entscheidung 'auflagen')."
    },
    "untersagungsgruende": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 2000
      },
      "description": "Optional: Liste von Untersagungsgründen (bei Entscheidung 'untersagung')."
    },
    "gebuehren": {
      "$ref": "#/$defs/Gebuehr"
    },
    "dokumente": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/Dokument"
      },
      "description": "Optional: Anlagen/Dokumente zur Rückmeldung (z.B. Bescheid als PDF)."
    },
    "kontakt": {
      "$ref": "#/$defs/Kontakt"
    },
    "hinweise": {
      "type": "string",
      "maxLength": 8000,
      "description": "Optionale Freitext-Hinweise."
    },
    "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 (falls separat geführt)."
        }
      }
    }
  },
  "required": [
    "vorgangsId",
    "rueckmeldungId",
    "erstelltAm",
    "entscheidung"
  ],
  "allOf": [
    {
      "if": {
        "properties": {
          "entscheidung": {
            "properties": {
              "code": {
                "const": "auflagen"
              }
            }
          }
        },
        "required": [
          "entscheidung"
        ]
      },
      "then": {
        "required": [
          "auflagen"
        ]
      }
    },
    {
      "if": {
        "properties": {
          "entscheidung": {
            "properties": {
              "code": {
                "const": "untersagung"
              }
            }
          }
        },
        "required": [
          "entscheidung"
        ]
      },
      "then": {
        "required": [
          "begruendung",
          "untersagungsgruende"
        ]
      }
    }
  ],
  "examples": [
    {
      "vorgangsId": "VORG-2026-000123",
      "rueckmeldungId": "BESCH-2026-000045",
      "erstelltAm": "2026-02-16T10:15:30Z",
      "aktenzeichen": "32.1-123/2026",
      "entscheidung": {
        "code": "auflagen",
        "label": "Durchführung mit Auflagen"
      },
      "auflagen": [
        {
          "auflageId": "A1",
          "text": "Ausschank nur im Zeitraum 12:00–22:00 Uhr.",
          "bezug": "Öffnungszeiten"
        },
        {
          "auflageId": "A2",
          "text": "Hinweisschilder zur Jugendschutzkontrolle sichtbar anbringen.",
          "fristBis": "2026-06-01"
        }
      ],
      "gebuehren": {
        "betrag": 25.0,
        "waehrung": "EUR",
        "faelligAm": "2026-03-01",
        "kassenzeichen": "KZ-2026-991122",
        "verwendungszweck": "Anzeige Vereinsfest"
      },
      "dokumente": [
        {
          "kategorie": "bescheid",
          "titel": "Rückmeldung zur Anzeige (Auflagen)",
          "mimeType": "application/pdf",
          "dateiRef": "DOC-STORE-987654"
        }
      ],
      "kontakt": {
        "organisation": "Ordnungsamt Musterstadt",
        "email": "ordnungsamt@musterstadt.de",
        "telefon": "+49 30 123456-0"
      },
      "hinweise": "Bitte Auflagen beachten."
    },
    {
      "vorgangsId": "VORG-2026-000124",
      "rueckmeldungId": "BESCH-2026-000046",
      "erstelltAm": "2026-02-16T11:00:00Z",
      "entscheidung": {
        "code": "keine_einwaende",
        "label": "Keine Einwände"
      },
      "dokumente": [
        {
          "kategorie": "bescheid",
          "titel": "Eingangs- und Kenntnisnahmebestätigung",
          "mimeType": "application/pdf",
          "dateiRef": "DOC-STORE-123456"
        }
      ]
    }
  ]
}