Skip to content

About

Cumplimiento Ley 21.719 (protección de datos, Chile) para sistemas con IA/LLMs: enmascara PII antes de los modelos, derechos ARCOP, auditoría y ROPA. Python + Node.js, multi-canal.

Topics

Resources

Stars

11 stars

Watchers

1 watching

Forks

Latest commit

 

History

9 Commits

Folders and files

Repository files navigation

privacy-kit-cl 🛡️

Cumplimiento de la Ley 21.719 (protección de datos, Chile) para sistemas con IA/LLMs — sin reescribir lo que ya funciona.

npm Python License status

La PII se enmascara antes de llegar al LLM y se rehidrata solo en la respuesta al cliente

La PII (RUT, teléfono) se enmascara antes de tocar el LLM, y se rehidrata solo en la respuesta al cliente.

Módulo independiente y reutilizable para cumplir la Ley 21.719 (Protección de Datos Personales de Chile) en cualquier sistema que trate datos personales — especialmente sistemas con IA/LLMs que interactúan con clientes por cualquier canal de mensajería (WhatsApp, SMS, Telegram, web chat, email…).

Disponible en Python y Node.js, con la misma API.

La idea: en vez de reimplementar el cumplimiento en cada proyecto, se acopla este kit como una capa transversal. Un desarrollador (o una IA) instala el paquete, lo configura con un archivo declarativo, y envuelve los puntos donde entra/sale/procesa un dato personal.

Qué resuelve (mapeo a la ley)

Componente Artículo/principio 21.719 Qué hace
consent Base de licitud, consentimiento Captura y registra consentimiento con evidencia (quién, cuándo, para qué).
redaction Minimización, seguridad Detecta y anonimiza PII antes de mandarla a un LLM o a terceros.
rights Derechos ARCOP+ Handlers de Acceso, Rectificación, Cancelación/supresión, Oposición y Portabilidad.
retention Calidad, plazos Políticas de retención y borrado automático (derecho al olvido).
transfers Transferencia a terceros Registro de a qué terceros (OpenAI, Anthropic, pasarelas…) se envían datos.
audit Responsabilidad proactiva Bitácora inmutable de cada acceso/tratamiento de dato personal.
notice Transparencia Genera el aviso de privacidad y su entrega en el primer contacto.

Cómo funciona

Flujo de cumplimiento privacy-kit

Principios de diseño

  1. Independiente: no depende de tu framework. Core sin dependencias externas + una interfaz de almacenamiento (store) que adaptas a Mongo, ClickHouse, Postgres, etc.
  2. Declarativo: todo el comportamiento sale de un archivo de configuración (categorías de datos, finalidades, plazos, terceros). Cambiar la política = cambiar config, no código.
  3. Acoplable por envoltura: envuelves las llamadas sensibles (redact(...), transfers.log(...), audit.record(...)) sin reescribir tu lógica.
  4. AI-friendly: el archivo AGENTS.md le dice a una IA exactamente cómo integrar el kit en un sistema nuevo o existente.

Implementaciones

El repo contiene dos paquetes independientes, uno por lenguaje, con la misma API. Instala solo el que necesites.

Lenguaje Código Manifiesto Prueba
Python python/privacy_kit/ pyproject.toml python python/examples/smoke_test.py
Node.js node/src/ package.json npm test

Ambos exponen los mismos componentes (redaction, consent, rights, transfers, audit, retention, notice, store) y son agnósticos del canal de mensajería.

Instalación

Python (pip):

pip install "git+https://github.com/Yugoxc/privacy-kit-cl.git"
# en local, desde el repo:  pip install .

Node.js (npm):

npm install privacy-kit-cl

Uso

Python

from privacy_kit import PrivacyKit

pk = PrivacyKit.from_config("privacy.config.yaml")   # sin archivo, usa DEFAULT_CONFIG

# 1) Antes de mandar texto de un cliente a un LLM (cualquier canal):
red = pk.redaction.redact(user_message, subject_id=rut)   # -> RedactionResult(text, token_map, found)
pk.transfers.log(subject_id=rut, destino="anthropic", finalidad="asistencia_venta",
                 categorias=list(red.found.keys()))

# 2) Enviar SOLO red.text al LLM; luego rehidratar la respuesta al cliente:
respuesta = pk.redaction.rehydrate(llm(red.text), red.token_map)

# 3) Auditar el tratamiento:
pk.audit.record(subject_id=rut, accion="procesar_mensaje", sistema="bot:whatsapp")

Node.js

const { PrivacyKit } = require("privacy-kit-cl");

const pk = PrivacyKit.fromConfig("privacy.config.json"); // o .fromObject({...})

const red = pk.redaction.redact(userMessage, subjectId); // -> { text, tokenMap, found }
pk.transfers.log(subjectId, "anthropic", "asistencia_venta", Object.keys(red.found));

const respuesta = pk.redaction.rehydrate(await llm(red.text), red.tokenMap);

Ejemplos completos multi-canal: python/examples/messaging_integration.py · node/examples/messaging_integration.js.

Panel de administración (opcional)

Módulo admin opcional: levanta un mini-servidor (sin dependencias) con API REST + UI para gestionar los datos que el kit registra —consentimientos, transferencias, auditoría, ROPA— y ejecutar el derecho al olvido (borrar todos los datos de un titular). Se activa por config; si está apagado, no levanta nada.

Panel de administración de privacy-kit

Activar:

// Node
const pk = PrivacyKit.fromObject({ adminUi: { enabled: true, port: 8787, token: "un-token-secreto" } });
pk.serveAdmin();
# Python (con admin_ui.enabled: true en el config)
pk.serve_admin()

API REST (requiere header Authorization: Bearer <token>):

Método Ruta Qué hace
GET /api/resolve?q=<dato> Busca subject_id(s) por RUT/email/teléfono (requiere resolver registrado).
GET /api/subject?id=<id> Todo lo del titular: consentimientos, transferencias, datos en fuentes y auditoría.
POST /api/subject/forget {id} Derecho al olvido: borra todos sus datos (la auditoría se conserva como evidencia).
GET /api/ropa Registro de Actividades de Tratamiento.
GET /api/health Estado.

Buscar por dato (RUT/email): como el subject_id es un id interno (idealmente un hash), tu integración registra un resolver que sabe mapear el dato real al id:

pk.rights.registerResolver(rut => db.usuarios.find({ rut }).map(u => u.subjectId)); // node
pk.rights.register_resolver(lambda rut: [u["subject_id"] for u in db.find("usuarios", {"rut": rut})])  # python

⚠️ Superficie sensible: exponla solo en red interna/VPN y siempre con token. Cada acción queda auditada.

Casos de uso

Aplica a cualquier sistema que trate datos personales (RUT, nombre, teléfono, email, dirección…), tenga IA o no. Las finalidades del config son ejemplos multi-rubro (asistencia_venta, soporte, agendamiento, cobranza, reclutamiento, verificacion_identidad, notificaciones, marketing…): cámbialas por las tuyas.

  • Con IA / chat (bots y agentes con LLM): el foco es redaction — enmascarar la PII antes de enviarla al modelo, más el registro de transferencia. → ejemplo messaging_integration.
  • Sin IA (formularios web, APIs de registro, CRM, RRHH, cobranza): se usan consent, retention, audit y rights (ARCOP), sin redaction. → ejemplo web_form_integration.

Ejemplos completos: python/examples/ · node/examples/.

Estado

Scaffold base (esqueleto funcional con interfaces y stubs). Diseñado para crecer proyecto a proyecto. No es asesoría legal — validar con abogado antes de producción.

About

Cumplimiento Ley 21.719 (protección de datos, Chile) para sistemas con IA/LLMs: enmascara PII antes de los modelos, derechos ARCOP, auditoría y ROPA. Python + Node.js, multi-canal.

Topics

Resources

Stars

11 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages