"""
AVV (Auftragsverarbeitungsvertrag) checks — Art. 28 DSGVO.

Level 1: Pflichtklausel nach Art. 28(3) vorhanden?
Level 2: Klausel korrekt/vollstaendig formuliert?

Source: checklists-data.ts AVV_CHECKLIST → Python portiert.
"""

AVV_CHECKLIST = [
    # ── L1: Gegenstand und Dauer (Art. 28(3) Satz 1) ────────────────
    {
        "id": "avv_subject",
        "label": "Gegenstand und Dauer der Verarbeitung (Art. 28(3) S. 1)",
        "level": 1, "parent": None,
        "patterns": [
            r"gegenstand\s+(?:und|&)\s+dauer\s+der\s+verarbeitung",
            r"gegenstand\s+de[rs]\s+(?:auftrag|vertrag)",
            r"vertragsgegenstand",
            r"dauer\s+der\s+(?:auftrags)?verarbeitung",
            r"laufzeit\s+de[rs]\s+(?:auftrag|vertrag)",
        ],
        "severity": "HIGH",
        "hint": "Art. 28(3) Satz 1 DSGVO verlangt, dass der AVV den Gegenstand und die Dauer der Verarbeitung festlegt. Ohne diese Angabe ist der AVV unvollstaendig.",
    },
    {
        "id": "avv_subject_purpose",
        "label": "Art und Zweck der Verarbeitung beschrieben",
        "level": 2, "parent": "avv_subject",
        "patterns": [
            r"art\s+(?:und|&)\s+zweck\s+der\s+verarbeitung",
            r"zweck\s+der\s+(?:daten)?verarbeitung",
            r"verarbeitungszweck",
            r"(?:hosting|speicherung|analyse|support|wartung)\s+(?:von|der|personenbezogener)",
        ],
        "severity": "MEDIUM",
        "hint": "Die Art und der Zweck der Verarbeitung muessen konkret benannt sein (z.B. 'Hosting von Kundendaten', 'E-Mail-Versand'), nicht nur allgemein als 'Datenverarbeitung'.",
    },
    {
        "id": "avv_subject_categories",
        "label": "Kategorien betroffener Personen und Datenarten benannt",
        "level": 2, "parent": "avv_subject",
        "patterns": [
            r"kategorie[n]?\s+(?:der\s+)?betroffene[nr]?\s+person",
            r"art\s+der\s+personenbezogenen\s+daten",
            r"datenkategorie",
            r"(?:kunden|mitarbeiter|besch(?:ae|ä)ftigte|nutzer|bewerber)(?:daten|informationen)",
        ],
        "severity": "MEDIUM",
        "hint": "Der AVV muss die Kategorien betroffener Personen (z.B. Kunden, Mitarbeiter) und die Arten personenbezogener Daten (z.B. Name, E-Mail, IP-Adresse) konkret benennen.",
    },

    # ── L1: Weisungsgebundenheit (Art. 28(3)(a)) ────────────────────
    {
        "id": "avv_instruction",
        "label": "Weisungsgebundenheit (Art. 28(3)(a))",
        "level": 1, "parent": None,
        "patterns": [
            r"weisung(?:en|sgebunden|srecht|sbindung)",
            r"(?:nur\s+)?auf\s+(?:dokumentierte\s+)?weisung\s+de[rs]\s+verantwortlichen",
            r"documented\s+instructions?",
            r"weisungsbefugnis",
        ],
        "severity": "CRITICAL",
        "hint": "Art. 28(3)(a) DSGVO: Der Auftragsverarbeiter darf Daten nur auf dokumentierte Weisung des Verantwortlichen verarbeiten. Ohne diese Klausel ist der AVV nichtig.",
    },
    {
        "id": "avv_instruction_doc",
        "label": "Dokumentierte Weisungen vorgesehen",
        "level": 2, "parent": "avv_instruction",
        "patterns": [
            r"dokumentierte\s+weisung",
            r"weisung(?:en)?\s+(?:schriftlich|per\s+e-?mail|in\s+textform)",
            r"textform\s+(?:gem(?:ae|ä)(?:ss|ß)|nach)\s+",
        ],
        "severity": "MEDIUM",
        "hint": "Weisungen muessen dokumentiert erfolgen (Art. 28(3)(a) DSGVO). Best Practice: Schriftform oder Textform (E-Mail genuegt), nicht nur muendlich.",
    },
    {
        "id": "avv_instruction_unlawful",
        "label": "Hinweispflicht bei rechtswidrigen Weisungen",
        "level": 2, "parent": "avv_instruction",
        "patterns": [
            r"(?:rechtswidrig|unzul(?:ae|ä)ssig|rechts(?:versto(?:ss|ß)|verletzend))\w*\s+weisung",
            r"hinweis(?:pflicht)?\s+(?:bei|auf)\s+(?:versto(?:ss|ß)|rechtswidr)",
            r"auftragsverarbeiter\s+(?:ist\s+)?(?:verpflichtet|hat)\s+(?:den\s+verantwortlichen\s+)?(?:zu\s+)?(?:informieren|hinzuweisen|unterrichten)",
        ],
        "severity": "MEDIUM",
        "hint": "Art. 28(3) Satz 3 DSGVO: Der Auftragsverarbeiter muss den Verantwortlichen informieren, wenn eine Weisung seiner Ansicht nach gegen Datenschutzrecht verstoesst.",
    },

    # ── L1: Vertraulichkeit (Art. 28(3)(b)) ─────────────────────────
    {
        "id": "avv_confidentiality",
        "label": "Vertraulichkeitsverpflichtung (Art. 28(3)(b))",
        "level": 1, "parent": None,
        "patterns": [
            r"vertraulichkeit(?:sverpflichtung)?",
            r"verschwiegenheit(?:spflicht|sverpflichtung)?",
            r"zur\s+vertraulichkeit\s+verpflichtet",
            r"geheimhaltung(?:sverpflichtung)?",
            r"confidentiality\s+(?:obligation|agreement)",
        ],
        "severity": "HIGH",
        "hint": "Art. 28(3)(b) DSGVO: Alle zur Verarbeitung befugten Personen muessen zur Vertraulichkeit verpflichtet sein oder einer gesetzlichen Verschwiegenheitspflicht unterliegen.",
    },
    {
        "id": "avv_confidentiality_employees",
        "label": "Verpflichtung erstreckt sich auf Mitarbeiter",
        "level": 2, "parent": "avv_confidentiality",
        "patterns": [
            r"(?:mitarbeiter|besch(?:ae|ä)ftigte|personal|angestellte)\s+(?:zur|auf)\s+vertraulichkeit",
            r"vertraulichkeit[\s\S]{0,100}(?:mitarbeiter|besch(?:ae|ä)ftigte|personal)",
            r"verpflichtung\s+(?:der\s+)?(?:mitarbeiter|besch(?:ae|ä)ftigten)",
        ],
        "severity": "MEDIUM",
        "hint": "Die Vertraulichkeitsverpflichtung muss sich auf alle Personen erstrecken, die Zugang zu den Daten haben — nicht nur vertraglich, sondern auch faktisch (z.B. Reinigungspersonal mit Zugang zu Serverraeumen).",
    },

    # ── L1: TOM (Art. 28(3)(c)) ─────────────────────────────────────
    {
        "id": "avv_tom",
        "label": "Technische und organisatorische Massnahmen (Art. 28(3)(c))",
        "level": 1, "parent": None,
        "patterns": [
            r"technische[nr]?\s+(?:und|&)\s+organisatorische[nr]?\s+ma(?:ss|ß)nahmen",
            r"(?:tom|to[ms])\s*[-–:]",
            r"art(?:ikel)?\s*\.?\s*32\s+(?:dsgvo|ds-?gvo|gdpr)",
            r"sicherheit\s+der\s+verarbeitung",
        ],
        "severity": "CRITICAL",
        "hint": "Art. 28(3)(c) DSGVO i.V.m. Art. 32: Der AVV muss die TOM des Auftragsverarbeiters beschreiben oder auf eine Anlage verweisen. Fehlende TOM sind einer der haeufigsten Maengel bei AVV-Pruefungen.",
    },
    {
        "id": "avv_tom_annex",
        "label": "TOM-Anlage vorhanden oder referenziert",
        "level": 2, "parent": "avv_tom",
        "patterns": [
            r"(?:anlage|anhang|annex)\s*(?:\d|[a-z])?\s*(?:[-–:]\s*)?(?:technische|tom|sicherheit)",
            r"tom[\s-]?anlage",
            r"massnahmen\s+(?:gem(?:ae|ä)(?:ss|ß)|nach)\s+(?:art(?:ikel)?\s*\.?\s*)?32",
        ],
        "severity": "HIGH",
        "hint": "Best Practice: TOM als separate Anlage beifuegen (nicht nur im Fliesstext). Die Anlage muss konkrete Massnahmen benennen, nicht nur Art. 32-Kategorien wiederholen.",
    },
    {
        "id": "avv_tom_update",
        "label": "Aktualisierungspflicht fuer TOM vereinbart",
        "level": 2, "parent": "avv_tom",
        "patterns": [
            r"(?:aktualisierung|anpassung|fortschreibung|ueberarbeitung)\s+(?:der\s+)?(?:technischen|tom|massnahmen)",
            r"(?:tom|massnahmen)\s+(?:regelm(?:ae|ä)(?:ss|ß)ig|jaehrlich|j(?:ae|ä)hrlich)\s+(?:ueberpruefen|aktualisieren|anpassen)",
            r"stand\s+der\s+technik",
        ],
        "severity": "MEDIUM",
        "hint": "Art. 32(1) DSGVO verlangt Massnahmen 'unter Beruecksichtigung des Stands der Technik'. Der AVV sollte eine regelmaessige Aktualisierungspflicht enthalten (mindestens jaehrlich).",
    },

    # ── L1: Unterauftragsverarbeitung (Art. 28(3)(d)) ────────────────
    {
        "id": "avv_subprocessor",
        "label": "Unterauftragsverarbeitung (Art. 28(3)(d))",
        "level": 1, "parent": None,
        "patterns": [
            r"(?:unter|sub)[\s-]?auftrags?(?:ver)?arbeiter",
            r"sub[\s-]?processor",
            r"weitere[rn]?\s+auftragsverarbeiter",
            r"subunternehmer\s+(?:fuer|f(?:ue|ü)r)\s+(?:die\s+)?(?:daten)?verarbeitung",
        ],
        "severity": "CRITICAL",
        "hint": "Art. 28(2)+(3)(d) DSGVO: Ohne Genehmigungsklausel fuer Unterauftragsverarbeiter ist jeder Einsatz eines Sub-Processors rechtswidrig. Der AVV muss regeln: allgemeine oder spezifische Genehmigung, Informationspflicht, Widerspruchsrecht.",
    },
    {
        "id": "avv_subprocessor_approval",
        "label": "Genehmigungserfordernis (allgemein oder spezifisch)",
        "level": 2, "parent": "avv_subprocessor",
        "patterns": [
            r"(?:vorherige|schriftliche|allgemeine|spezifische)\s+(?:schriftliche\s+)?genehmigung",
            r"zustimmung\s+(?:des\s+verantwortlichen|zur\s+(?:unter|sub))",
            r"(?:einwilligung|genehmigung)\s+(?:des\s+verantwortlichen|vor(?:ab|her))",
        ],
        "severity": "CRITICAL",
        "hint": "Art. 28(2) DSGVO: Entweder spezifische (namentlich) oder allgemeine (pauschal + Informationspflicht) Genehmigung. Bei allgemeiner Genehmigung MUSS der AV ueber Aenderungen informieren.",
    },
    {
        "id": "avv_subprocessor_objection",
        "label": "Widerspruchsrecht bei Aenderung der Unterauftragnehmer",
        "level": 2, "parent": "avv_subprocessor",
        "patterns": [
            r"(?:widerspruch|einspruch|einwand)(?:srecht|smoeglichkeit)?[\s\S]{0,100}(?:unter|sub)[\s-]?auftrags?",
            r"(?:unter|sub)[\s-]?auftrags?[\s\S]{0,200}(?:widerspruch|einspruch|ablehnung)",
            r"(?:informieren|benachrichtigen|mitteilen)[\s\S]{0,100}(?:aenderung|wechsel|einsatz)",
        ],
        "severity": "HIGH",
        "hint": "Art. 28(2) Satz 2 DSGVO: Bei allgemeiner Genehmigung muss der Verantwortliche ueber jeden neuen Unterauftragsverarbeiter informiert werden und die Moeglichkeit haben, Einspruch zu erheben.",
    },
    {
        "id": "avv_subprocessor_list",
        "label": "Aktuelle Liste der Unterauftragnehmer",
        "level": 2, "parent": "avv_subprocessor",
        "patterns": [
            r"(?:liste|verzeichnis|uebersicht|aufstellung)\s+(?:der\s+)?(?:aktuellen\s+)?(?:unter|sub)[\s-]?auftrags?",
            r"(?:anlage|anhang|annex)\s*\d?\s*[-–:]\s*(?:unter|sub)[\s-]?auftrags?",
            r"(?:unter|sub)[\s-]?auftrags?[\s\S]{0,100}(?:anlage|anhang|liste)",
        ],
        "severity": "HIGH",
        "hint": "Best Practice: Aktuelle Sub-Processor-Liste als Anlage zum AVV. Sollte enthalten: Name, Anschrift, Land, Verarbeitungszweck, Datenkategorien. Viele Aufsichtsbehoerden fordern dies explizit.",
    },

    # ── L1: Betroffenenrechte (Art. 28(3)(e)) ────────────────────────
    {
        "id": "avv_data_subject_rights",
        "label": "Unterstuetzung bei Betroffenenrechten (Art. 28(3)(e))",
        "level": 1, "parent": None,
        "patterns": [
            r"betroffenenrecht",
            r"(?:unterstuetzung|mithilfe|mitwirkung)\s+(?:bei|zur)\s+(?:erf(?:ue|ü)llung|wahrnehmung|gew(?:ae|ä)hrleistung)\s+(?:der\s+)?(?:rechte|pflichten)",
            r"(?:auskunft|l(?:oe|ö)schung|berichtigung|einschr(?:ae|ä)nkung|daten(?:ue|ü)bertragbarkeit|widerspruch)",
            r"art(?:ikel)?\s*\.?\s*(?:15|16|17|18|19|20|21|22)\s+(?:dsgvo|ds-?gvo)",
        ],
        "severity": "HIGH",
        "hint": "Art. 28(3)(e) DSGVO: Der Auftragsverarbeiter muss den Verantwortlichen bei der Erfuellung der Betroffenenrechte (Art. 15-22) unterstuetzen — insbesondere bei Auskunfts- und Loeschungsanfragen.",
    },
    {
        "id": "avv_data_subject_forwarding",
        "label": "Weiterleitung von Betroffenenanfragen geregelt",
        "level": 2, "parent": "avv_data_subject_rights",
        "patterns": [
            r"(?:weiterleitung|weiterleiten|informieren)\s+(?:von\s+)?(?:anfragen|antraegen)\s+(?:betroffener|von\s+betroffenen)",
            r"(?:betroffene|datensubjekt)[\s\S]{0,150}(?:weiterleiten|informieren|benachrichtigen)",
            r"(?:anfrage|antrag|ersuchen)\s+(?:des|der|von)\s+(?:betroffenen|datensubjekt)",
        ],
        "severity": "MEDIUM",
        "hint": "Der AVV sollte regeln: Wer leitet Betroffenenanfragen weiter? In welcher Frist? Wer antwortet dem Betroffenen?",
    },

    # ── L1: DSFA-Unterstuetzung (Art. 28(3)(f)) ─────────────────────
    {
        "id": "avv_dpia",
        "label": "Unterstuetzung bei DSFA und Konsultation (Art. 28(3)(f))",
        "level": 1, "parent": None,
        "patterns": [
            r"datenschutz[\s-]?folgenabsch(?:ae|ä)tzung",
            r"dsfa",
            r"(?:dpia|data\s+protection\s+impact)",
            r"art(?:ikel)?\s*\.?\s*(?:35|36)\s+(?:dsgvo|ds-?gvo)",
            r"(?:unterstuetzung|mitwirkung)\s+(?:bei\s+)?(?:der\s+)?(?:einhaltung|erfuellung)\s+(?:der\s+)?(?:pflichten\s+)?(?:gem(?:ae|ä)(?:ss|ß)|nach)\s+art(?:ikel)?\s*\.?\s*(?:32|33|34|35|36)",
        ],
        "severity": "MEDIUM",
        "hint": "Art. 28(3)(f) DSGVO: Der Auftragsverarbeiter muss den Verantwortlichen bei der Durchfuehrung einer DSFA und bei der vorherigen Konsultation der Aufsichtsbehoerde (Art. 36) unterstuetzen.",
    },

    # ── L1: Loeschung/Rueckgabe (Art. 28(3)(g)) ─────────────────────
    {
        "id": "avv_deletion",
        "label": "Loeschung/Rueckgabe nach Vertragsende (Art. 28(3)(g))",
        "level": 1, "parent": None,
        "patterns": [
            r"(?:l(?:oe|ö)schung|rueckgabe|r(?:ue|ü)ckgabe)\s+(?:nach|bei|zum)\s+(?:vertragsende|beendigung|ablauf)",
            r"(?:nach|bei)\s+(?:beendigung|ablauf|ende)\s+(?:des\s+)?(?:vertrag|auftrag)[\s\S]{0,100}(?:l(?:oe|ö)sch|rueckgabe|r(?:ue|ü)ckgabe|vernicht)",
            r"(?:alle|saemtliche)\s+(?:personenbezogenen?\s+)?daten\s+(?:l(?:oe|ö)sch|vernicht|zurueckgeb|zur(?:ue|ü)ckgeb)",
            # P39: reverse order — "loescht/gibt ... nach Beendigung/Ablauf"
            r"(?:l(?:oe|ö)sch|gibt|gibt\s+zur(?:ue|ü)ck|vernicht)\w*[\s\S]{0,150}(?:nach|bei|zum)\s+(?:beendigung|ablauf|ende|vertragsende)",
        ],
        "severity": "CRITICAL",
        "hint": "Art. 28(3)(g) DSGVO: Nach Ende der Verarbeitung muessen alle personenbezogenen Daten geloescht oder zurueckgegeben werden — nach Wahl des Verantwortlichen. Ausnahme nur bei gesetzlicher Aufbewahrungspflicht.",
    },
    {
        "id": "avv_deletion_deadline",
        "label": "Frist fuer Loeschung/Rueckgabe definiert",
        "level": 2, "parent": "avv_deletion",
        "patterns": [
            r"(?:\d+\s+(?:tage|werktage|wochen|monate)|(?:innerhalb|binnen)\s+(?:von\s+)?\d+)\s*[\s\S]{0,50}(?:l(?:oe|ö)sch|rueckgabe|r(?:ue|ü)ckgabe)",
            r"(?:l(?:oe|ö)sch|rueckgabe|r(?:ue|ü)ckgabe)[\s\S]{0,100}(?:frist|innerhalb|binnen)\s+(?:von\s+)?\d+",
            r"(?:unverz(?:ue|ü)glich|sofort|sp(?:ae|ä)testens)",
        ],
        "severity": "HIGH",
        "hint": "Best Practice: Loeschfrist von max. 30 Tagen nach Vertragsende. Viele Aufsichtsbehoerden beanstanden AVVs ohne konkrete Frist.",
    },
    {
        "id": "avv_deletion_confirmation",
        "label": "Loeschbestaetigung/Nachweis vorgesehen",
        "level": 2, "parent": "avv_deletion",
        "patterns": [
            r"(?:l(?:oe|ö)sch|vernichtungs?)(?:best(?:ae|ä)tigung|nachweis|protokoll|zertifikat)",
            r"(?:best(?:ae|ä)tigung|nachweis)\s+(?:der|ueber)\s+(?:die\s+)?(?:l(?:oe|ö)schung|vernichtung)",
            r"schriftlich\s+best(?:ae|ä)tigen[\s\S]{0,50}(?:l(?:oe|ö)sch|vernicht)",
        ],
        "severity": "MEDIUM",
        "hint": "Best Practice: Schriftliche Loeschbestaetigung mit Datum und Umfang anfordern. Einige Aufsichtsbehoerden (z.B. LfDI BaWue) fordern dies als Nachweis der Pflichterfuellung.",
    },

    # ── L1: Audit-/Inspektionsrechte (Art. 28(3)(h)) ────────────────
    {
        "id": "avv_audit",
        "label": "Audit- und Inspektionsrechte (Art. 28(3)(h))",
        "level": 1, "parent": None,
        "patterns": [
            r"(?:audit|inspektion|ueberpruefung|ueberpr(?:ue|ü)fung|kontrolle|pruefung|pr(?:ue|ü)fung)(?:s)?(?:recht|rechte|moeglichkeit|befugnis)",
            r"(?:vor[\s-]?ort|on[\s-]?site)[\s-]?(?:inspektion|kontrolle|pruefung|pr(?:ue|ü)fung)",
            r"art(?:ikel)?\s*\.?\s*28\s*(?:\(3\)|abs(?:atz)?\s*\.?\s*3)\s*(?:(?:lit(?:era)?\s*\.?\s*)?h|buchst(?:abe)?\s*\.?\s*h)",
        ],
        "severity": "HIGH",
        "hint": "Art. 28(3)(h) DSGVO: Der Auftragsverarbeiter muss Ueberpruefungen (Audits, Inspektionen) durch den Verantwortlichen ermoeglichen und dazu beitragen. Dieses Recht darf vertraglich nicht ausgeschlossen oder unangemessen eingeschraenkt werden.",
    },
    {
        "id": "avv_audit_onsite",
        "label": "Vor-Ort-Inspektionen moeglich",
        "level": 2, "parent": "avv_audit",
        "patterns": [
            r"vor[\s-]?ort[\s-]?(?:inspektion|kontrolle|pruefung|pr(?:ue|ü)fung|besichtigung)",
            r"(?:inspektion|kontrolle|pruefung|pr(?:ue|ü)fung)\s+vor\s+ort",
            r"(?:zugang|zutritt)\s+(?:zu\s+)?(?:den\s+)?(?:raeumen|r(?:ae|ä)umlichkeiten|betriebsstaetten|rechenzentren)",
        ],
        "severity": "MEDIUM",
        "hint": "Vor-Ort-Inspektionen sind ein Kernrecht nach Art. 28(3)(h) DSGVO. Einschraenkungen auf 'Remote Audits' oder 'nur Zertifikate' genuegen laut EuGH-Rechtsprechung nicht.",
    },
    {
        "id": "avv_audit_independent",
        "label": "Akzeptanz unabhaengiger Pruefer",
        "level": 2, "parent": "avv_audit",
        "patterns": [
            r"(?:unabh(?:ae|ä)ngig|extern|dritte)\w*\s+(?:pruefer|pr(?:ue|ü)fer|auditor|sachverstaendig|gutachter|wirtschaftspruefer)",
            r"(?:pruefer|pr(?:ue|ü)fer|auditor)\s+(?:des\s+verantwortlichen|des\s+auftraggebers|beauftragt)",
        ],
        "severity": "LOW",
        "hint": "Best Practice: AVV sollte ausdruecklich erwaehnen, dass der Verantwortliche auch unabhaengige Pruefer beauftragen kann. Dies ist besonders wichtig bei grossen Cloud-Anbietern (z.B. SOC2-Berichte als Ersatz).",
    },

    # ── L1: Datenschutzverletzungen (Art. 33(2)) ────────────────────
    {
        "id": "avv_breach",
        "label": "Meldung von Datenschutzverletzungen (Art. 33(2))",
        "level": 1, "parent": None,
        "patterns": [
            r"datenschutzverletzung",
            r"(?:sicherheits)?vorfall",
            r"data\s+breach",
            r"(?:meld|benachrichtig|informier|unterricht)\w*[\s\S]{0,50}(?:verletzung|vorfall|sicherheit)",
            r"art(?:ikel)?\s*\.?\s*33\s+(?:dsgvo|ds-?gvo)",
            # P39: "Datenpanne" als gleichwertiges Synonym (sehr verbreitet)
            r"datenpanne",
            r"meldung\s+von\s+datenpannen",
            r"art\.?\s*33\s+abs\.?\s*\d",
        ],
        "severity": "CRITICAL",
        "hint": "Art. 33(2) DSGVO: Der Auftragsverarbeiter muss den Verantwortlichen UNVERZUEGLICH ueber jede Datenschutzverletzung informieren. Die 72-Stunden-Frist des Verantwortlichen gegenueber der Aufsichtsbehoerde laeuft ab Kenntnis — daher sollte die Meldefrist im AVV enger sein (z.B. 24h).",
    },
    {
        "id": "avv_breach_timeline",
        "label": "Meldefrist fuer Datenschutzverletzungen definiert",
        "level": 2, "parent": "avv_breach",
        "patterns": [
            r"(?:unverz(?:ue|ü)glich|ohne\s+(?:unangemessene|ungebuerliche)\s+verzoegerung|sofort|binnen\s+\d+\s+stunden|innerhalb\s+(?:von\s+)?\d+\s+stunden)",
            r"\d+\s*(?:h|stunden|hours?)[\s\S]{0,50}(?:meld|benachrichtig|informier)",
            r"(?:24|48|72)\s*(?:h|stunden)",
        ],
        "severity": "HIGH",
        "hint": "Best Practice: Meldefrist von max. 24 Stunden nach Kenntnis (nicht 72h — das ist die Frist des Verantwortlichen gegenueber der Behoerde). DSK empfiehlt in den Standard-AVV-Klauseln 'unverzueglich, spaetestens innerhalb von 48 Stunden'.",
    },
    {
        "id": "avv_breach_content",
        "label": "Mindestinhalt der Meldung definiert",
        "level": 2, "parent": "avv_breach",
        "patterns": [
            r"(?:mindestinhalt|mindestangaben|informationen|inhalt)\s+(?:der|einer|zur)\s+(?:meldung|benachrichtigung|mitteilung)",
            r"(?:art\s+der\s+verletzung|betroffene\s+datenkategorien|anzahl\s+betroffener|wahrscheinliche\s+folgen|ergriffene\s+massnahmen)",
        ],
        "severity": "MEDIUM",
        "hint": "Die Meldung sollte mindestens enthalten: Art der Verletzung, betroffene Datenkategorien, ungefaehre Anzahl Betroffener, wahrscheinliche Folgen, ergriffene Abhilfemassnahmen (Art. 33(3) DSGVO).",
    },

    # ── L1: Haftung ──────────────────────────────────────────────────
    {
        "id": "avv_liability",
        "label": "Haftungsregelung",
        "level": 1, "parent": None,
        "patterns": [
            r"haftung(?:s)?(?:regelung|beschraenkung|begrenzung|verteilung)?",
            r"schadensersatz",
            r"(?:freistellung|indemnit)",
            r"art(?:ikel)?\s*\.?\s*82\s+(?:dsgvo|ds-?gvo)",
        ],
        "severity": "MEDIUM",
        "hint": "Art. 82 DSGVO regelt die Haftung bei Datenschutzverstoessen. Der AVV sollte eine klare Haftungsverteilung enthalten. Achtung: Haftungsausschluesse gegenueber Betroffenen sind unwirksam (Art. 82(4) DSGVO).",
    },
]
