pack_id: "checklist_dpa_gdpr"
pack_name: "Data Processing Agreement — GDPR (Art. 28)"
version: "1.0"
origin: "imported"
languages: ["en", "it", "es"]
summary: "Triage matrix for GDPR Art. 28 data processing agreements: breach notice, sub-processing, audit, deletion, instructions, transfers, security, assistance and liability (10 controls)."
name_loc:
  en: "Data Processing Agreement — GDPR (Art. 28)"
  it: "Accordo sul trattamento dei dati — GDPR (art. 28)"
  es: "Acuerdo de tratamiento de datos — RGPD (art. 28)"
summary_loc:
  en: "Triage matrix for GDPR Art. 28 data processing agreements: breach notice, sub-processing, audit, deletion, instructions, transfers, security, assistance and liability (10 controls)."
  it: "Matrice di triage per accordi di trattamento ex art. 28 GDPR: notifica violazioni, sub-responsabili, audit, cancellazione, istruzioni, trasferimenti, sicurezza, assistenza e responsabilità (10 controlli)."
  es: "Matriz de triaje para acuerdos de tratamiento del art. 28 RGPD: notificación de brechas, subencargados, auditoría, supresión, instrucciones, transferencias, seguridad, asistencia y responsabilidad (10 controles)."
category_loc:
  "Breach & Security":
    en: "Breach & Security"
    it: "Violazioni e sicurezza"
    es: "Brechas y seguridad"
  "Sub-processing":
    en: "Sub-processing"
    it: "Sub-responsabili"
    es: "Subencargados"
  "Audit & Oversight":
    en: "Audit & Oversight"
    it: "Audit e vigilanza"
    es: "Auditoría y supervisión"
  "Lifecycle":
    en: "Lifecycle"
    it: "Ciclo di vita"
    es: "Ciclo de vida"
  "Purpose & Instructions":
    en: "Purpose & Instructions"
    it: "Finalità e istruzioni"
    es: "Finalidad e instrucciones"
  "International Transfers":
    en: "International Transfers"
    it: "Trasferimenti internazionali"
    es: "Transferencias internacionales"
  "Assistance":
    en: "Assistance"
    it: "Assistenza"
    es: "Asistencia"
  "Liability":
    en: "Liability"
    it: "Responsabilità"
    es: "Responsabilidad"
companions:
  extraction: "extraction_dpa_gdpr"
checks:
  - check_id: "data_breach_notification"
    category: "Breach & Security"
    severity: "HIGH"
    languages:
      en:
        name: "Data breach notification window"
        semantic_anchors: ["personal data breach", "notify the controller", "without undue delay", "72 hours", "Article 33"]
        mandatory_keywords: ["breach", "notify", "hours"]
        fuzzy: true
        validation_prompt: "From the paragraph(s): {isolated_paragraphs}. Verify that the processor must notify the controller of a personal data breach and within what time; flag if the window exceeds 72 hours or is undefined. Reply only as {\"has_clause\":\"YES|NO\",\"detail\":\"notification window\"}."
      it:
        name: "Termine di notifica del data breach"
        semantic_anchors: ["violazione dei dati personali", "notifica al titolare", "senza ingiustificato ritardo", "72 ore", "art. 33 GDPR"]
        mandatory_keywords: ["violazione", "notifica", "ore"]
        fuzzy: true
        validation_prompt: "Dal/i paragrafo/i: {isolated_paragraphs}. Verifica che il responsabile debba notificare al titolare una violazione dei dati personali ed entro quale termine; segnala se il termine supera le 72 ore o non è definito. Rispondi solo come {\"has_clause\":\"YES|NO\",\"detail\":\"termine di notifica\"}."
      es:
        name: "Plazo de notificación de brecha"
        semantic_anchors: ["violación de datos personales", "notificar al responsable", "sin dilación indebida", "72 horas", "art. 33 RGPD"]
        mandatory_keywords: ["brecha", "notificar", "horas"]
        fuzzy: true
        validation_prompt: "Del/los párrafo(s): {isolated_paragraphs}. Verifica que el encargado deba notificar al responsable una violación de datos personales y en qué plazo; señala si el plazo supera las 72 horas o no está definido. Responde solo como {\"has_clause\":\"YES|NO\",\"detail\":\"plazo de notificación\"}."
  - check_id: "subprocessor_authorization"
    category: "Sub-processing"
    severity: "HIGH"
    languages:
      en:
        name: "Sub-processor prior authorization"
        semantic_anchors: ["sub-processor", "prior written authorisation", "general written authorisation", "right to object", "Article 28(2)"]
        mandatory_keywords: ["sub-processor", "authorisation", "object"]
        fuzzy: true
        validation_prompt: "From the paragraph(s): {isolated_paragraphs}. Verify that the processor cannot appoint sub-processors without the controller's specific or general written authorisation and a right to object; flag if no veto/objection right exists. Reply only as {\"has_clause\":\"YES|NO\",\"detail\":\"authorisation regime + objection right?\"}."
      it:
        name: "Autorizzazione preventiva dei sub-responsabili"
        semantic_anchors: ["sub-responsabile", "autorizzazione scritta preventiva", "autorizzazione generale", "diritto di obiezione", "art. 28(2) GDPR"]
        mandatory_keywords: ["sub-responsabile", "autorizzazione", "obiezione"]
        fuzzy: true
        validation_prompt: "Dal/i paragrafo/i: {isolated_paragraphs}. Verifica che il responsabile non possa nominare sub-responsabili senza autorizzazione scritta (specifica o generale) del titolare e un diritto di obiezione; segnala se manca il diritto di veto/obiezione. Rispondi solo come {\"has_clause\":\"YES|NO\",\"detail\":\"regime autorizzazione + diritto di obiezione?\"}."
      es:
        name: "Autorización previa de subencargados"
        semantic_anchors: ["subencargado", "autorización escrita previa", "autorización general", "derecho de oposición", "art. 28(2) RGPD"]
        mandatory_keywords: ["subencargado", "autorización", "oposición"]
        fuzzy: true
        validation_prompt: "Del/los párrafo(s): {isolated_paragraphs}. Verifica que el encargado no pueda nombrar subencargados sin autorización escrita (específica o general) del responsable y un derecho de oposición; señala si falta el derecho de veto/oposición. Responde solo como {\"has_clause\":\"YES|NO\",\"detail\":\"régimen de autorización + derecho de oposición?\"}."
  - check_id: "audit_inspection_rights"
    category: "Audit & Oversight"
    severity: "HIGH"
    languages:
      en:
        name: "Audit and inspection rights"
        semantic_anchors: ["right to audit", "inspections", "make available all information", "contribute to audits", "Article 28(3)(h)"]
        mandatory_keywords: ["audit", "inspection", "information"]
        fuzzy: true
        validation_prompt: "From the paragraph(s): {isolated_paragraphs}. Verify that the controller has the right to audit or inspect the processor (documentary or on-site); flag if audit is denied or excessively limited. Reply only as {\"has_clause\":\"YES|NO\",\"detail\":\"audit scope/limits\"}."
      it:
        name: "Diritti di audit e ispezione"
        semantic_anchors: ["diritto di audit", "ispezioni", "mettere a disposizione le informazioni", "contribuire agli audit", "art. 28(3)(h) GDPR"]
        mandatory_keywords: ["audit", "ispezione", "informazioni"]
        fuzzy: true
        validation_prompt: "Dal/i paragrafo/i: {isolated_paragraphs}. Verifica che il titolare abbia il diritto di effettuare audit o ispezioni sul responsabile (documentali o in loco); segnala se l'audit è negato o eccessivamente limitato. Rispondi solo come {\"has_clause\":\"YES|NO\",\"detail\":\"ambito/limiti audit\"}."
      es:
        name: "Derechos de auditoría e inspección"
        semantic_anchors: ["derecho de auditoría", "inspecciones", "poner a disposición la información", "contribuir a las auditorías", "art. 28(3)(h) RGPD"]
        mandatory_keywords: ["auditoría", "inspección", "información"]
        fuzzy: true
        validation_prompt: "Del/los párrafo(s): {isolated_paragraphs}. Verifica que el responsable tenga derecho a auditar o inspeccionar al encargado (documental o in situ); señala si la auditoría se deniega o limita en exceso. Responde solo como {\"has_clause\":\"YES|NO\",\"detail\":\"alcance/límites de auditoría\"}."
  - check_id: "data_deletion_return"
    category: "Lifecycle"
    severity: "HIGH"
    languages:
      en:
        name: "Data deletion or return upon termination"
        semantic_anchors: ["delete or return", "at the choice of the controller", "upon termination", "delete existing copies", "Article 28(3)(g)"]
        mandatory_keywords: ["delete", "return", "termination"]
        fuzzy: true
        validation_prompt: "From the paragraph(s): {isolated_paragraphs}. Verify the obligation to delete or return all personal data at the end of the service; flag if the controller is not given the choice between deletion and return. Reply only as {\"has_clause\":\"YES|NO\",\"detail\":\"delete|return|both + controller choice?\"}."
      it:
        name: "Cancellazione o restituzione dei dati alla cessazione"
        semantic_anchors: ["cancellare o restituire", "a scelta del titolare", "al termine del contratto", "cancellare le copie esistenti", "art. 28(3)(g) GDPR"]
        mandatory_keywords: ["cancellare", "restituire", "cessazione"]
        fuzzy: true
        validation_prompt: "Dal/i paragrafo/i: {isolated_paragraphs}. Verifica l'obbligo di cancellare o restituire tutti i dati personali alla fine del servizio; segnala se al titolare non è concessa la scelta tra cancellazione e restituzione. Rispondi solo come {\"has_clause\":\"YES|NO\",\"detail\":\"cancellazione|restituzione|entrambe + scelta del titolare?\"}."
      es:
        name: "Supresión o devolución de los datos al finalizar"
        semantic_anchors: ["suprimir o devolver", "a elección del responsable", "al finalizar el contrato", "suprimir las copias existentes", "art. 28(3)(g) RGPD"]
        mandatory_keywords: ["suprimir", "devolver", "finalización"]
        fuzzy: true
        validation_prompt: "Del/los párrafo(s): {isolated_paragraphs}. Verifica la obligación de suprimir o devolver todos los datos personales al final del servicio; señala si no se concede al responsable la elección entre supresión y devolución. Responde solo como {\"has_clause\":\"YES|NO\",\"detail\":\"supresión|devolución|ambas + elección del responsable?\"}."
  - check_id: "purpose_limitation_instructions"
    category: "Purpose & Instructions"
    severity: "HIGH"
    languages:
      en:
        name: "Purpose limitation & documented instructions"
        semantic_anchors: ["documented instructions", "only on instructions from the controller", "shall process the personal data only", "Article 28(3)(a)"]
        mandatory_keywords: ["instructions", "process", "controller"]
        fuzzy: true
        validation_prompt: "From the paragraph(s): {isolated_paragraphs}. Verify the binding clause whereby the processor acts only on the controller's documented instructions; flag if absent. Reply only as {\"has_clause\":\"YES|NO\",\"detail\":\"instructions clause present/absent\"}."
      it:
        name: "Limitazione di finalità e istruzioni documentate"
        semantic_anchors: ["istruzioni documentate", "soltanto su istruzione del titolare", "tratta i dati personali solo", "art. 28(3)(a) GDPR"]
        mandatory_keywords: ["istruzioni", "trattare", "titolare"]
        fuzzy: true
        validation_prompt: "Dal/i paragrafo/i: {isolated_paragraphs}. Verifica la clausola vincolante per cui il responsabile agisce esclusivamente sulla base delle istruzioni documentate del titolare; segnala se assente. Rispondi solo come {\"has_clause\":\"YES|NO\",\"detail\":\"clausola istruzioni presente/assente\"}."
      es:
        name: "Limitación de finalidad e instrucciones documentadas"
        semantic_anchors: ["instrucciones documentadas", "únicamente siguiendo instrucciones del responsable", "tratará los datos personales solo", "art. 28(3)(a) RGPD"]
        mandatory_keywords: ["instrucciones", "tratar", "responsable"]
        fuzzy: true
        validation_prompt: "Del/los párrafo(s): {isolated_paragraphs}. Verifica la cláusula vinculante por la que el encargado actúa únicamente según las instrucciones documentadas del responsable; señala si falta. Responde solo como {\"has_clause\":\"YES|NO\",\"detail\":\"cláusula de instrucciones presente/ausente\"}."
  - check_id: "cross_border_transfers_sccs"
    category: "International Transfers"
    severity: "HIGH"
    languages:
      en:
        name: "Cross-border transfers & SCCs"
        semantic_anchors: ["transfer outside the EEA", "Standard Contractual Clauses", "adequacy decision", "third country", "Chapter V GDPR"]
        mandatory_keywords: ["transfer", "SCC", "EEA"]
        fuzzy: true
        validation_prompt: "From the paragraph(s): {isolated_paragraphs}. Detect whether personal data is transferred outside the EEA and, if so, whether a valid safeguard (SCCs, adequacy decision) is referenced; flag transfers without safeguards. Reply only as {\"has_clause\":\"YES|NO\",\"detail\":\"transfer + mechanism\"}."
      it:
        name: "Trasferimenti extra-UE e SCC"
        semantic_anchors: ["trasferimento fuori dallo SEE", "Clausole Contrattuali Standard", "decisione di adeguatezza", "paese terzo", "Capo V GDPR"]
        mandatory_keywords: ["trasferimento", "SCC", "SEE"]
        fuzzy: true
        validation_prompt: "Dal/i paragrafo/i: {isolated_paragraphs}. Rileva se i dati personali sono trasferiti fuori dallo SEE e, in caso affermativo, se è richiamata una garanzia valida (SCC, decisione di adeguatezza); segnala i trasferimenti privi di garanzie. Rispondi solo come {\"has_clause\":\"YES|NO\",\"detail\":\"trasferimento + meccanismo\"}."
      es:
        name: "Transferencias extra-UE y SCC"
        semantic_anchors: ["transferencia fuera del EEE", "Cláusulas Contractuales Tipo", "decisión de adecuación", "tercer país", "Capítulo V RGPD"]
        mandatory_keywords: ["transferencia", "SCC", "EEE"]
        fuzzy: true
        validation_prompt: "Del/los párrafo(s): {isolated_paragraphs}. Detecta si los datos personales se transfieren fuera del EEE y, en su caso, si se invoca una garantía válida (SCC, decisión de adecuación); señala las transferencias sin garantías. Responde solo como {\"has_clause\":\"YES|NO\",\"detail\":\"transferencia + mecanismo\"}."
  - check_id: "toms_annex"
    category: "Breach & Security"
    severity: "MEDIUM"
    languages:
      en:
        name: "Technical & organisational measures (TOMs) annex"
        semantic_anchors: ["technical and organisational measures", "Annex", "encryption", "access control", "Article 32"]
        mandatory_keywords: ["measures", "annex", "security"]
        fuzzy: true
        validation_prompt: "From the paragraph(s): {isolated_paragraphs}. Verify the reference to a specific annex describing security measures (encryption, access control); flag if measures are only described generically in the body text. Reply only as {\"has_clause\":\"YES|NO\",\"detail\":\"TOMs annex vs generic text\"}."
      it:
        name: "Allegato sulle misure tecniche e organizzative (TOM)"
        semantic_anchors: ["misure tecniche e organizzative", "allegato", "cifratura", "controllo degli accessi", "art. 32 GDPR"]
        mandatory_keywords: ["misure", "allegato", "sicurezza"]
        fuzzy: true
        validation_prompt: "Dal/i paragrafo/i: {isolated_paragraphs}. Verifica il rimando a un allegato specifico che descrive le misure di sicurezza (cifratura, controllo accessi); segnala se le misure sono descritte solo in modo generico nel testo. Rispondi solo come {\"has_clause\":\"YES|NO\",\"detail\":\"allegato TOM vs testo generico\"}."
      es:
        name: "Anexo de medidas técnicas y organizativas (TOM)"
        semantic_anchors: ["medidas técnicas y organizativas", "anexo", "cifrado", "control de acceso", "art. 32 RGPD"]
        mandatory_keywords: ["medidas", "anexo", "seguridad"]
        fuzzy: true
        validation_prompt: "Del/los párrafo(s): {isolated_paragraphs}. Verifica la remisión a un anexo específico que describa las medidas de seguridad (cifrado, control de acceso); señala si las medidas solo se describen de forma genérica en el texto. Responde solo como {\"has_clause\":\"YES|NO\",\"detail\":\"anexo TOM vs texto genérico\"}."
  - check_id: "dpia_assistance"
    category: "Assistance"
    severity: "MEDIUM"
    languages:
      en:
        name: "Assistance with DPIAs"
        semantic_anchors: ["data protection impact assessment", "prior consultation", "assist the controller", "Articles 35-36"]
        mandatory_keywords: ["impact assessment", "assist", "consultation"]
        fuzzy: true
        validation_prompt: "From the paragraph(s): {isolated_paragraphs}. Verify the processor's obligation to assist the controller with data protection impact assessments and prior consultation with supervisory authorities; flag if omitted. Reply only as {\"has_clause\":\"YES|NO\",\"detail\":\"assistance present/omitted\"}."
      it:
        name: "Assistenza nelle DPIA"
        semantic_anchors: ["valutazione d'impatto sulla protezione dei dati", "consultazione preventiva", "assistere il titolare", "artt. 35-36 GDPR"]
        mandatory_keywords: ["valutazione d'impatto", "assistere", "consultazione"]
        fuzzy: true
        validation_prompt: "Dal/i paragrafo/i: {isolated_paragraphs}. Verifica l'obbligo del responsabile di assistere il titolare nelle valutazioni d'impatto e nelle consultazioni preventive con le autorità di controllo; segnala se omesso. Rispondi solo come {\"has_clause\":\"YES|NO\",\"detail\":\"assistenza presente/omessa\"}."
      es:
        name: "Asistencia en las EIPD"
        semantic_anchors: ["evaluación de impacto", "consulta previa", "asistir al responsable", "arts. 35-36 RGPD"]
        mandatory_keywords: ["evaluación de impacto", "asistir", "consulta"]
        fuzzy: true
        validation_prompt: "Del/los párrafo(s): {isolated_paragraphs}. Verifica la obligación del encargado de asistir al responsable en las evaluaciones de impacto y en las consultas previas con las autoridades de control; señala si se omite. Responde solo como {\"has_clause\":\"YES|NO\",\"detail\":\"asistencia presente/omitida\"}."
  - check_id: "dsar_assistance"
    category: "Assistance"
    severity: "MEDIUM"
    languages:
      en:
        name: "Data subject rights assistance (DSAR)"
        semantic_anchors: ["data subject rights", "right to erasure", "respond to requests", "assist by appropriate measures", "Article 28(3)(e)"]
        mandatory_keywords: ["data subject", "rights", "request"]
        fuzzy: true
        validation_prompt: "From the paragraph(s): {isolated_paragraphs}. Verify the processor's obligation to assist the controller in responding to data subject requests (e.g. erasure) and whether a response timeframe is set; flag if no timing is defined. Reply only as {\"has_clause\":\"YES|NO\",\"detail\":\"assistance + timing\"}."
      it:
        name: "Assistenza sui diritti degli interessati (DSAR)"
        semantic_anchors: ["diritti degli interessati", "diritto all'oblio", "rispondere alle richieste", "assistere con misure adeguate", "art. 28(3)(e) GDPR"]
        mandatory_keywords: ["interessato", "diritti", "richiesta"]
        fuzzy: true
        validation_prompt: "Dal/i paragrafo/i: {isolated_paragraphs}. Verifica l'obbligo del responsabile di assistere il titolare nel rispondere alle richieste degli interessati (es. diritto all'oblio) e se è prevista una tempistica di risposta; segnala se manca la tempistica. Rispondi solo come {\"has_clause\":\"YES|NO\",\"detail\":\"assistenza + tempistica\"}."
      es:
        name: "Asistencia en derechos de los interesados (DSAR)"
        semantic_anchors: ["derechos de los interesados", "derecho de supresión", "responder a las solicitudes", "asistir con medidas adecuadas", "art. 28(3)(e) RGPD"]
        mandatory_keywords: ["interesado", "derechos", "solicitud"]
        fuzzy: true
        validation_prompt: "Del/los párrafo(s): {isolated_paragraphs}. Verifica la obligación del encargado de asistir al responsable en la respuesta a las solicitudes de los interesados (p. ej. supresión) y si se fija un plazo de respuesta; señala si no se define un plazo. Responde solo como {\"has_clause\":\"YES|NO\",\"detail\":\"asistencia + plazo\"}."
  - check_id: "liability_caps_gdpr"
    category: "Liability"
    severity: "MEDIUM"
    languages:
      en:
        name: "Liability caps for GDPR breaches"
        semantic_anchors: ["limitation of liability", "liability cap", "administrative fines", "claims by data subjects", "annual contract value"]
        mandatory_keywords: ["liability", "cap", "fines"]
        fuzzy: true
        validation_prompt: "From the paragraph(s): {isolated_paragraphs}. Identify whether liability for supervisory fines or harm to data subjects is limited within the DPA; flag if liability is excluded or capped at the annual contract value. Reply only as {\"has_clause\":\"YES|NO\",\"detail\":\"cap basis / exclusion\"}."
      it:
        name: "Limitazioni di responsabilità per violazioni GDPR"
        semantic_anchors: ["limitazione di responsabilità", "tetto di responsabilità", "sanzioni amministrative", "richieste degli interessati", "valore annuo del contratto"]
        mandatory_keywords: ["responsabilità", "limite", "sanzioni"]
        fuzzy: true
        validation_prompt: "Dal/i paragrafo/i: {isolated_paragraphs}. Individua se la responsabilità per sanzioni delle autorità o danni agli interessati è limitata all'interno del DPA; segnala se la responsabilità è esclusa o limitata al valore annuo del contratto. Rispondi solo come {\"has_clause\":\"YES|NO\",\"detail\":\"base del cap / esclusione\"}."
      es:
        name: "Límites de responsabilidad por infracciones del RGPD"
        semantic_anchors: ["limitación de responsabilidad", "tope de responsabilidad", "multas administrativas", "reclamaciones de los interesados", "valor anual del contrato"]
        mandatory_keywords: ["responsabilidad", "tope", "multas"]
        fuzzy: true
        validation_prompt: "Del/los párrafo(s): {isolated_paragraphs}. Identifica si la responsabilidad por multas de las autoridades o daños a los interesados se limita dentro del DPA; señala si se excluye o se limita al valor anual del contrato. Responde solo como {\"has_clause\":\"YES|NO\",\"detail\":\"base del tope / exclusión\"}."
