0326d5baab
Phase 1-3 of the Vendor Contract Assessment:
Backend checklists (Doc-Check L1/L2 engine compatible):
- avv_checks.py: 28 checks (11 L1 + 17 L2) for Art. 28(3) DSGVO
- scc_checks.py: 7 checks for EU SCC 2021 (modules, annexes, TIA)
- tom_annex_checks.py: 12 checks for Art. 32 (8 control objectives)
- sub_processor_checks.py: 7 checks for sub-processor list completeness
Assessment service:
- POST /vendor-compliance/assessments — async contract analysis
- GET /vendor-compliance/assessments/{id} — poll status
- Cross-check engine: detects missing SCC when AVV mentions third-country,
missing TOM annex, missing sub-processor list
All checklists registered in runner.py CHECKLIST_MAP (27 doc_types total).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
105 lines
5.3 KiB
Python
105 lines
5.3 KiB
Python
"""
|
||
SCC (Standardvertragsklauseln / Standard Contractual Clauses) checks.
|
||
|
||
EU Commission Decision 2021/914 — the "new" SCCs.
|
||
|
||
Level 1: Pflichtbestandteil vorhanden?
|
||
Level 2: Bestandteil korrekt ausgefuellt?
|
||
"""
|
||
|
||
SCC_CHECKLIST = [
|
||
# ── L1: Modul-Wahl ──────────────────────────────────────────────
|
||
{
|
||
"id": "scc_module",
|
||
"label": "SCC-Modul gewaehlt (C2C, C2P, P2C, P2P)",
|
||
"level": 1, "parent": None,
|
||
"patterns": [
|
||
r"modul\s*(?:1|2|3|4|eins|zwei|drei|vier|i{1,3}v?)\s*[-–:.]",
|
||
r"(?:module\s+(?:one|two|three|four|[1-4]))",
|
||
r"(?:controller|processor)\s+to\s+(?:controller|processor)",
|
||
r"verantwortliche[rn]?\s+(?:an|zu)\s+(?:auftragsverarbeiter|verantwortliche)",
|
||
],
|
||
"severity": "CRITICAL",
|
||
"hint": "Die EU SCC 2021 bestehen aus 4 Modulen. Das richtige Modul MUSS gewaehlt werden: Modul 1 (C2C), Modul 2 (C2P — haeufigster Fall), Modul 3 (P2P), Modul 4 (P2C). Falsches Modul = unwirksame SCC.",
|
||
},
|
||
|
||
# ── L1: Annex I — Vertragsparteien + Transfer ───────────────────
|
||
{
|
||
"id": "scc_annex_i",
|
||
"label": "Annex I: Vertragsparteien und Uebermittlung beschrieben",
|
||
"level": 1, "parent": None,
|
||
"patterns": [
|
||
r"(?:anhang|anlage|annex)\s*i\b",
|
||
r"(?:list\s+of\s+parties|verzeichnis\s+der\s+(?:vertrags)?parteien)",
|
||
r"(?:daten(?:ex|im)porteur|data\s+(?:ex|im)porter)",
|
||
],
|
||
"severity": "HIGH",
|
||
"hint": "Annex I der SCC muss benennen: Datenexporteur (Name, Adresse, Kontakt, Rolle), Datenimporteur (Name, Adresse, Kontakt, Rolle), Beschreibung der Uebermittlung (Kategorien, Empfaenger, Zweck, Dauer).",
|
||
},
|
||
{
|
||
"id": "scc_annex_i_parties",
|
||
"label": "Vertragsparteien identifiziert (Exporteur + Importeur)",
|
||
"level": 2, "parent": "scc_annex_i",
|
||
"patterns": [
|
||
r"(?:daten)?exporteur|data\s+exporter",
|
||
r"(?:daten)?importeur|data\s+importer",
|
||
],
|
||
"severity": "MEDIUM",
|
||
"hint": "Beide Parteien muessen vollstaendig identifiziert sein: Name, Adresse, Ansprechpartner, Rolle (Controller/Processor).",
|
||
},
|
||
|
||
# ── L1: Annex II — TOM ──────────────────────────────────────────
|
||
{
|
||
"id": "scc_annex_ii",
|
||
"label": "Annex II: Technische und organisatorische Massnahmen",
|
||
"level": 1, "parent": None,
|
||
"patterns": [
|
||
r"(?:anhang|anlage|annex)\s*ii\b",
|
||
r"technische[\s\S]{0,30}organisatorische[\s\S]{0,30}ma(?:ss|ß)nahmen[\s\S]{0,50}(?:anhang|anlage|annex)",
|
||
],
|
||
"severity": "HIGH",
|
||
"hint": "Annex II muss konkrete TOM beschreiben (nicht nur auf den Hauptvertrag verweisen). Die Massnahmen muessen dem Risiko der Uebermittlung angemessen sein.",
|
||
},
|
||
|
||
# ── L1: Annex III — Sub-Processors ───────────────────────────────
|
||
{
|
||
"id": "scc_annex_iii",
|
||
"label": "Annex III: Liste der Unterauftragsverarbeiter (bei Modul 2/3)",
|
||
"level": 1, "parent": None,
|
||
"patterns": [
|
||
r"(?:anhang|anlage|annex)\s*iii\b",
|
||
r"(?:liste|verzeichnis)\s+(?:der\s+)?(?:unter|sub)[\s-]?auftrags?",
|
||
],
|
||
"severity": "MEDIUM",
|
||
"hint": "Bei Modul 2 (C2P) und Modul 3 (P2P): Annex III muss alle Sub-Processors auflisten mit Name, Adresse, Taetigkeit. Bei Modul 1 (C2C) und 4 (P2C) nicht erforderlich.",
|
||
},
|
||
|
||
# ── L1: Transfer Impact Assessment (TIA) ────────────────────────
|
||
{
|
||
"id": "scc_tia",
|
||
"label": "Transfer Impact Assessment (TIA) durchgefuehrt/referenziert",
|
||
"level": 1, "parent": None,
|
||
"patterns": [
|
||
r"transfer\s+impact\s+assessment",
|
||
r"(?:uebermittlungs|transfer)[\s-]?(?:risiko|folgen)[\s-]?(?:bewertung|abschaetzung|analyse)",
|
||
r"(?:risikobewertung|risikoanalyse)[\s\S]{0,100}(?:drittland|uebermittlung|transfer)",
|
||
r"klausel\s*14\b|clause\s*14\b",
|
||
],
|
||
"severity": "HIGH",
|
||
"hint": "Klausel 14 der SCC verlangt ein Transfer Impact Assessment (TIA): Analyse der Rechtslage im Zielland, insbesondere Zugriffsbefugnisse der Behoerden. Ohne TIA sind die SCC unvollstaendig (EuGH Schrems II, C-311/18).",
|
||
},
|
||
|
||
# ── L1: Keine unzulaessigen Aenderungen ─────────────────────────
|
||
{
|
||
"id": "scc_no_modification",
|
||
"label": "Kernklauseln unmodifiziert (keine unzulaessigen Aenderungen)",
|
||
"level": 1, "parent": None,
|
||
"patterns": [
|
||
r"(?:standardvertragsklauseln|standard\s+contractual\s+clauses)[\s\S]{0,200}(?:unver(?:ae|ä)ndert|nicht\s+ge(?:ae|ä)ndert|2021/914|durchfuehrungsbeschluss)",
|
||
r"(?:durchf(?:ue|ü)hrungsbeschluss|implementing\s+decision)\s+(?:\(EU\)\s+)?2021/914",
|
||
],
|
||
"severity": "MEDIUM",
|
||
"hint": "Die Kernklauseln der SCC (Klauseln 1-18) duerfen nicht geaendert werden. Ergaenzende Klauseln sind erlaubt, solange sie nicht im Widerspruch stehen. Geaenderte SCC sind unwirksam.",
|
||
},
|
||
]
|