pack_id: "checklist_professional_indemnity"
pack_name: "Insurance — Professional Indemnity"
version: "1.0"
origin: "imported"
languages: ["en", "it", "es"]
summary: "Triage matrix for professional indemnity (PI) policies: exclusions, retroactive cover, trigger basis, territory, defence costs, run-off, deductibles, good faith and notification (10 controls)."
name_loc:
  en: "Insurance — Professional Indemnity"
  it: "Assicurazione — RC professionale"
  es: "Seguro — Responsabilidad civil profesional"
summary_loc:
  en: "Triage matrix for professional indemnity (PI) policies: exclusions, retroactive cover, trigger basis, territory, defence costs, run-off, deductibles, good faith and notification (10 controls)."
  it: "Matrice di triage per polizze RC professionale: esclusioni, copertura retroattiva, regime del trigger, territorialità, spese di difesa, run-off, franchigie, buona fede e notifica (10 controlli)."
  es: "Matriz de triaje para pólizas de RC profesional: exclusiones, cobertura retroactiva, base del trigger, ámbito territorial, costes de defensa, run-off, franquicias, buena fe y notificación (10 controles)."
category_loc:
  "Scope & Exclusions":
    en: "Scope & Exclusions"
    it: "Ambito ed esclusioni"
    es: "Ámbito y exclusiones"
  "Cover Basis":
    en: "Cover Basis"
    it: "Base della copertura"
    es: "Base de la cobertura"
  "Limits & Costs":
    en: "Limits & Costs"
    it: "Massimali e spese"
    es: "Límites y costes"
  "Good Faith":
    en: "Good Faith"
    it: "Buona fede"
    es: "Buena fe"
  "Third-Party Cover":
    en: "Third-Party Cover"
    it: "Copertura terzi"
    es: "Cobertura de terceros"
  "Notification":
    en: "Notification"
    it: "Notifica"
    es: "Notificación"
companions:
  extraction: "extraction_professional_indemnity"
checks:
  - check_id: "specific_exclusions"
    category: "Scope & Exclusions"
    severity: "HIGH"
    languages:
      en:
        name: "Specific exclusions / high-risk carve-outs"
        semantic_anchors: ["exclusions", "this policy does not cover", "cyber risk exclusion", "pollution exclusion", "insolvency exclusion"]
        mandatory_keywords: ["exclusion", "not cover", "excluded"]
        fuzzy: true
        validation_prompt: "From the paragraph(s): {isolated_paragraphs}. Scan the exclusions section for carve-outs that strip core professional risks (e.g. cyber, pollution, insolvency). Reply only as {\"has_clause\":\"YES|NO\",\"detail\":\"critical exclusions found\"}."
      it:
        name: "Esclusioni specifiche / carve-out ad alto rischio"
        semantic_anchors: ["esclusioni", "la polizza non copre", "esclusione rischio cyber", "esclusione inquinamento", "esclusione insolvenza"]
        mandatory_keywords: ["esclusione", "non copre", "esclusi"]
        fuzzy: true
        validation_prompt: "Dal/i paragrafo/i: {isolated_paragraphs}. Scansiona la sezione esclusioni alla ricerca di carve-out che eliminano rischi core del professionista (es. cyber, inquinamento, insolvenza). Rispondi solo come {\"has_clause\":\"YES|NO\",\"detail\":\"esclusioni critiche rilevate\"}."
      es:
        name: "Exclusiones específicas / carve-outs de alto riesgo"
        semantic_anchors: ["exclusiones", "la póliza no cubre", "exclusión de riesgo cibernético", "exclusión de contaminación", "exclusión de insolvencia"]
        mandatory_keywords: ["exclusión", "no cubre", "excluidos"]
        fuzzy: true
        validation_prompt: "Del/los párrafo(s): {isolated_paragraphs}. Examina la sección de exclusiones en busca de carve-outs que eliminen riesgos esenciales del profesional (p. ej. cibernético, contaminación, insolvencia). Responde solo como {\"has_clause\":\"YES|NO\",\"detail\":\"exclusiones críticas detectadas\"}."
  - check_id: "retroactive_date_cover"
    category: "Cover Basis"
    severity: "HIGH"
    languages:
      en:
        name: "Retroactive date cover"
        semantic_anchors: ["retroactive date", "retroactive cover", "prior acts", "no retroactive cover", "acts committed before inception"]
        mandatory_keywords: ["retroactive", "prior acts", "date"]
        fuzzy: true
        validation_prompt: "From the paragraph(s): {isolated_paragraphs}. Verify whether the policy covers errors committed before inception but discovered during the period; flag if retroactive cover is absent or limited to inception (no retroactive cover). Reply only as {\"has_clause\":\"YES|NO\",\"detail\":\"retroactive date or none\"}."
      it:
        name: "Copertura della data di retroattività"
        semantic_anchors: ["data di retroattività", "copertura retroattiva", "fatti pregressi", "nessuna retroattività", "fatti commessi prima della decorrenza"]
        mandatory_keywords: ["retroattività", "pregressi", "data"]
        fuzzy: true
        validation_prompt: "Dal/i paragrafo/i: {isolated_paragraphs}. Verifica se la polizza copre errori commessi prima della decorrenza ma emersi durante il periodo; segnala se la copertura retroattiva manca o è limitata alla decorrenza attuale. Rispondi solo come {\"has_clause\":\"YES|NO\",\"detail\":\"data di retroattività o assenza\"}."
      es:
        name: "Cobertura de fecha retroactiva"
        semantic_anchors: ["fecha retroactiva", "cobertura retroactiva", "hechos anteriores", "sin retroactividad", "actos cometidos antes del inicio"]
        mandatory_keywords: ["retroactiva", "anteriores", "fecha"]
        fuzzy: true
        validation_prompt: "Del/los párrafo(s): {isolated_paragraphs}. Verifica si la póliza cubre errores cometidos antes del inicio pero descubiertos durante la vigencia; señala si falta la cobertura retroactiva o se limita al inicio actual. Responde solo como {\"has_clause\":\"YES|NO\",\"detail\":\"fecha retroactiva o ausencia\"}."
  - check_id: "trigger_mechanism"
    category: "Cover Basis"
    severity: "MEDIUM"
    languages:
      en:
        name: "Trigger mechanism (claims-made vs occurrence)"
        semantic_anchors: ["claims-made", "occurrence basis", "claim first made", "continuity clause", "trigger"]
        mandatory_keywords: ["claims-made", "occurrence", "trigger"]
        fuzzy: true
        validation_prompt: "From the paragraph(s): {isolated_paragraphs}. Determine the policy trigger; flag if it does not adopt the claims-made basis (international PI standard) or lacks a continuity clause. Reply only as {\"has_clause\":\"YES|NO\",\"detail\":\"claims-made|occurrence + continuity?\"}."
      it:
        name: "Regime del trigger (claims-made vs occurrence)"
        semantic_anchors: ["claims-made", "loss occurrence", "richiesta avanzata per la prima volta", "clausola di continuità", "trigger"]
        mandatory_keywords: ["claims-made", "occurrence", "trigger"]
        fuzzy: true
        validation_prompt: "Dal/i paragrafo/i: {isolated_paragraphs}. Determina il trigger della polizza; segnala se non adotta il regime claims-made (standard internazionale per la RC professionale) o manca la clausola di continuità. Rispondi solo come {\"has_clause\":\"YES|NO\",\"detail\":\"claims-made|occurrence + continuità?\"}."
      es:
        name: "Mecanismo de trigger (claims-made vs occurrence)"
        semantic_anchors: ["claims-made", "base de ocurrencia", "reclamación presentada por primera vez", "cláusula de continuidad", "trigger"]
        mandatory_keywords: ["claims-made", "ocurrencia", "trigger"]
        fuzzy: true
        validation_prompt: "Del/los párrafo(s): {isolated_paragraphs}. Determina el trigger de la póliza; señala si no adopta la base claims-made (estándar internacional de RC profesional) o carece de cláusula de continuidad. Responde solo como {\"has_clause\":\"YES|NO\",\"detail\":\"claims-made|ocurrencia + continuidad?\"}."
  - check_id: "territorial_limits"
    category: "Scope & Exclusions"
    severity: "HIGH"
    languages:
      en:
        name: "Territorial and jurisdictional limits"
        semantic_anchors: ["territorial limits", "jurisdiction clause", "worldwide excluding USA/Canada", "geographical scope"]
        mandatory_keywords: ["territorial", "jurisdiction", "worldwide"]
        fuzzy: true
        validation_prompt: "From the paragraph(s): {isolated_paragraphs}. Verify the geographical/jurisdictional scope of cover; flag if key territories are excluded (e.g. excluding USA/Canada) where the insured operates. Reply only as {\"has_clause\":\"YES|NO\",\"detail\":\"territorial scope + key exclusions\"}."
      it:
        name: "Limiti territoriali e di giurisdizione"
        semantic_anchors: ["limiti territoriali", "clausola di giurisdizione", "mondo intero esclusi USA/Canada", "estensione geografica"]
        mandatory_keywords: ["territoriale", "giurisdizione", "mondo"]
        fuzzy: true
        validation_prompt: "Dal/i paragrafo/i: {isolated_paragraphs}. Verifica l'estensione geografica/giurisdizionale della copertura; segnala se sono esclusi territori chiave (es. esclusi USA/Canada) in cui l'assicurato opera. Rispondi solo come {\"has_clause\":\"YES|NO\",\"detail\":\"ambito territoriale + esclusioni chiave\"}."
      es:
        name: "Límites territoriales y de jurisdicción"
        semantic_anchors: ["límites territoriales", "cláusula de jurisdicción", "todo el mundo excepto EE. UU./Canadá", "ámbito geográfico"]
        mandatory_keywords: ["territorial", "jurisdicción", "mundo"]
        fuzzy: true
        validation_prompt: "Del/los párrafo(s): {isolated_paragraphs}. Verifica el ámbito geográfico/jurisdiccional de la cobertura; señala si se excluyen territorios clave (p. ej. excepto EE. UU./Canadá) donde opera el asegurado. Responde solo como {\"has_clause\":\"YES|NO\",\"detail\":\"ámbito territorial + exclusiones clave\"}."
  - check_id: "defense_costs_treatment"
    category: "Limits & Costs"
    severity: "MEDIUM"
    languages:
      en:
        name: "Defence costs treatment (inside vs outside the limit)"
        semantic_anchors: ["defence costs", "costs inclusive", "costs in addition", "erode the limit", "within the limit of indemnity"]
        mandatory_keywords: ["defence costs", "limit", "inclusive"]
        fuzzy: true
        validation_prompt: "From the paragraph(s): {isolated_paragraphs}. Determine whether legal defence costs are inside the limit (costs inclusive, eroding cover) or in addition to it; flag costs-inclusive treatment. Reply only as {\"has_clause\":\"YES|NO\",\"detail\":\"inside|outside the limit\"}."
      it:
        name: "Trattamento delle spese di difesa (dentro/fuori il massimale)"
        semantic_anchors: ["spese di difesa", "spese comprese nel massimale", "spese in aggiunta", "erodono il massimale", "entro il massimale"]
        mandatory_keywords: ["spese di difesa", "massimale", "comprese"]
        fuzzy: true
        validation_prompt: "Dal/i paragrafo/i: {isolated_paragraphs}. Determina se le spese legali di difesa sono comprese nel massimale (lo erodono) o in aggiunta ad esso; segnala il trattamento 'costs inclusive'. Rispondi solo come {\"has_clause\":\"YES|NO\",\"detail\":\"dentro|fuori il massimale\"}."
      es:
        name: "Tratamiento de los costes de defensa (dentro/fuera del límite)"
        semantic_anchors: ["costes de defensa", "costes incluidos en el límite", "costes adicionales", "erosionan el límite", "dentro del límite"]
        mandatory_keywords: ["costes de defensa", "límite", "incluidos"]
        fuzzy: true
        validation_prompt: "Del/los párrafo(s): {isolated_paragraphs}. Determina si los costes legales de defensa están dentro del límite (lo erosionan) o se suman a él; señala el tratamiento 'costs inclusive'. Responde solo como {\"has_clause\":\"YES|NO\",\"detail\":\"dentro|fuera del límite\"}."
  - check_id: "extended_reporting_period"
    category: "Cover Basis"
    severity: "HIGH"
    languages:
      en:
        name: "Extended reporting period (run-off cover)"
        semantic_anchors: ["extended reporting period", "run-off cover", "claims made after expiry", "discovery period"]
        mandatory_keywords: ["run-off", "extended reporting", "discovery"]
        fuzzy: true
        validation_prompt: "From the paragraph(s): {isolated_paragraphs}. Verify the presence of a clause covering claims made after the activity or policy ceases (run-off / extended reporting period); flag if absent. Reply only as {\"has_clause\":\"YES|NO\",\"detail\":\"run-off present/absent + duration\"}."
      it:
        name: "Periodo di osservazione esteso (copertura run-off)"
        semantic_anchors: ["periodo di osservazione esteso", "copertura postuma", "run-off", "richieste dopo la scadenza", "ultrattività"]
        mandatory_keywords: ["run-off", "postuma", "ultrattività"]
        fuzzy: true
        validation_prompt: "Dal/i paragrafo/i: {isolated_paragraphs}. Verifica la presenza di una clausola che copre le richieste avanzate dopo la cessazione dell'attività o della polizza (run-off / copertura postuma); segnala se assente. Rispondi solo come {\"has_clause\":\"YES|NO\",\"detail\":\"run-off presente/assente + durata\"}."
      es:
        name: "Periodo de cobertura extendido (run-off)"
        semantic_anchors: ["periodo de cobertura extendido", "cobertura posterior", "run-off", "reclamaciones tras el vencimiento", "periodo de descubrimiento"]
        mandatory_keywords: ["run-off", "posterior", "descubrimiento"]
        fuzzy: true
        validation_prompt: "Del/los párrafo(s): {isolated_paragraphs}. Verifica la presencia de una cláusula que cubra reclamaciones presentadas tras el cese de la actividad o de la póliza (run-off / periodo extendido); señala si falta. Responde solo como {\"has_clause\":\"YES|NO\",\"detail\":\"run-off presente/ausente + duración\"}."
  - check_id: "deductible_excess_structure"
    category: "Limits & Costs"
    severity: "MEDIUM"
    languages:
      en:
        name: "Deductible / excess structure (per claim vs aggregate)"
        semantic_anchors: ["deductible", "excess", "each and every claim", "in the aggregate", "self-insured retention"]
        mandatory_keywords: ["deductible", "excess", "aggregate"]
        fuzzy: true
        validation_prompt: "From the paragraph(s): {isolated_paragraphs}. Determine whether the deductible applies per claim or in the aggregate; flag a disproportionate per-claim excess. Reply only as {\"has_clause\":\"YES|NO\",\"detail\":\"per-claim|aggregate + amount\"}."
      it:
        name: "Struttura della franchigia (per sinistro vs aggregato)"
        semantic_anchors: ["franchigia", "scoperto", "per ciascun sinistro", "in aggregato", "ritenzione"]
        mandatory_keywords: ["franchigia", "scoperto", "aggregato"]
        fuzzy: true
        validation_prompt: "Dal/i paragrafo/i: {isolated_paragraphs}. Determina se la franchigia si applica per singolo sinistro o complessivamente all'anno (aggregato); segnala una franchigia per sinistro sproporzionata. Rispondi solo come {\"has_clause\":\"YES|NO\",\"detail\":\"per sinistro|aggregato + importo\"}."
      es:
        name: "Estructura de la franquicia (por siniestro vs agregado)"
        semantic_anchors: ["franquicia", "exceso", "por cada siniestro", "en el agregado", "retención"]
        mandatory_keywords: ["franquicia", "exceso", "agregado"]
        fuzzy: true
        validation_prompt: "Del/los párrafo(s): {isolated_paragraphs}. Determina si la franquicia se aplica por siniestro o de forma agregada al año; señala una franquicia por siniestro desproporcionada. Responde solo como {\"has_clause\":\"YES|NO\",\"detail\":\"por siniestro|agregado + importe\"}."
  - check_id: "inadvertent_nondisclosure"
    category: "Good Faith"
    severity: "MEDIUM"
    languages:
      en:
        name: "Inadvertent non-disclosure protection"
        semantic_anchors: ["innocent non-disclosure", "inadvertent misrepresentation", "non-avoidance", "good faith", "waiver of right to avoid"]
        mandatory_keywords: ["non-disclosure", "avoid", "good faith"]
        fuzzy: true
        validation_prompt: "From the paragraph(s): {isolated_paragraphs}. Verify whether the insurer waives the right to avoid the policy for unintentional non-disclosure or misrepresentation made in good faith; flag if absent. Reply only as {\"has_clause\":\"YES|NO\",\"detail\":\"protection present/absent\"}."
      it:
        name: "Tutela per dichiarazioni inesatte non intenzionali"
        semantic_anchors: ["dichiarazioni inesatte non intenzionali", "omissioni in buona fede", "rinuncia all'annullamento", "buona fede", "non contestabilità"]
        mandatory_keywords: ["inesatte", "annullamento", "buona fede"]
        fuzzy: true
        validation_prompt: "Dal/i paragrafo/i: {isolated_paragraphs}. Verifica se l'assicuratore rinuncia al diritto di annullare la polizza per omissioni o dichiarazioni inesatte non intenzionali rese in buona fede; segnala se assente. Rispondi solo come {\"has_clause\":\"YES|NO\",\"detail\":\"tutela presente/assente\"}."
      es:
        name: "Protección por inexactitud no intencionada"
        semantic_anchors: ["no divulgación inocente", "inexactitud no intencionada", "renuncia a la anulación", "buena fe", "no anulabilidad"]
        mandatory_keywords: ["inexactitud", "anulación", "buena fe"]
        fuzzy: true
        validation_prompt: "Del/los párrafo(s): {isolated_paragraphs}. Verifica si el asegurador renuncia al derecho de anular la póliza por omisiones o declaraciones inexactas no intencionadas hechas de buena fe; señala si falta. Responde solo como {\"has_clause\":\"YES|NO\",\"detail\":\"protección presente/ausente\"}."
  - check_id: "subcontractors_vicarious_liability"
    category: "Third-Party Cover"
    severity: "MEDIUM"
    languages:
      en:
        name: "Sub-contractors & vicarious liability cover"
        semantic_anchors: ["sub-contractors", "vicarious liability", "liability for the acts of others", "consultants and agents"]
        mandatory_keywords: ["sub-contractor", "vicarious", "agents"]
        fuzzy: true
        validation_prompt: "From the paragraph(s): {isolated_paragraphs}. Verify whether the policy covers liability arising from errors of sub-contractors or external collaborators; flag if they are excluded. Reply only as {\"has_clause\":\"YES|NO\",\"detail\":\"vicarious cover present/excluded\"}."
      it:
        name: "Copertura per subappaltatori e responsabilità vicaria"
        semantic_anchors: ["subappaltatori", "responsabilità vicaria", "responsabilità per fatto altrui", "consulenti e collaboratori"]
        mandatory_keywords: ["subappaltatore", "vicaria", "collaboratori"]
        fuzzy: true
        validation_prompt: "Dal/i paragrafo/i: {isolated_paragraphs}. Verifica se la polizza copre la responsabilità derivante da errori di subappaltatori o collaboratori esterni; segnala se esclusi. Rispondi solo come {\"has_clause\":\"YES|NO\",\"detail\":\"copertura vicaria presente/esclusa\"}."
      es:
        name: "Cobertura de subcontratistas y responsabilidad vicaria"
        semantic_anchors: ["subcontratistas", "responsabilidad vicaria", "responsabilidad por hechos ajenos", "consultores y colaboradores"]
        mandatory_keywords: ["subcontratista", "vicaria", "colaboradores"]
        fuzzy: true
        validation_prompt: "Del/los párrafo(s): {isolated_paragraphs}. Verifica si la póliza cubre la responsabilidad derivada de errores de subcontratistas o colaboradores externos; señala si se excluyen. Responde solo como {\"has_clause\":\"YES|NO\",\"detail\":\"cobertura vicaria presente/excluida\"}."
  - check_id: "notification_window_circumstances"
    category: "Notification"
    severity: "MEDIUM"
    languages:
      en:
        name: "Notification window for circumstances"
        semantic_anchors: ["notification of circumstances", "as soon as practicable", "immediate notice", "circumstance that may give rise to a claim"]
        mandatory_keywords: ["notification", "circumstance", "notice"]
        fuzzy: true
        validation_prompt: "From the paragraph(s): {isolated_paragraphs}. Verify the time allowed to notify a potential claim or known circumstance; flag if 'immediate' notice is required with no defined tolerance window. Reply only as {\"has_clause\":\"YES|NO\",\"detail\":\"notification window\"}."
      it:
        name: "Termine di notifica delle circostanze"
        semantic_anchors: ["notifica delle circostanze", "non appena possibile", "notifica immediata", "circostanza che può dar luogo a un sinistro"]
        mandatory_keywords: ["notifica", "circostanza", "termine"]
        fuzzy: true
        validation_prompt: "Dal/i paragrafo/i: {isolated_paragraphs}. Verifica il tempo concesso per segnalare un potenziale sinistro o una circostanza nota; segnala se è richiesta una notifica 'immediata' senza una finestra di tolleranza definita. Rispondi solo come {\"has_clause\":\"YES|NO\",\"detail\":\"finestra di notifica\"}."
      es:
        name: "Plazo de notificación de circunstancias"
        semantic_anchors: ["notificación de circunstancias", "tan pronto como sea posible", "notificación inmediata", "circunstancia que pueda dar lugar a una reclamación"]
        mandatory_keywords: ["notificación", "circunstancia", "plazo"]
        fuzzy: true
        validation_prompt: "Del/los párrafo(s): {isolated_paragraphs}. Verifica el tiempo concedido para notificar un posible siniestro o circunstancia conocida; señala si se exige notificación 'inmediata' sin una ventana de tolerancia definida. Responde solo como {\"has_clause\":\"YES|NO\",\"detail\":\"ventana de notificación\"}."
