# ISO compliance y audit logs: trazabilidad y Ley 19.628
Este post está orientado a oficiales de cumplimiento, asesores legales y equipos de auditoría que evalúan DispensAI para su corporación. Aquí explicamos cómo funciona la trazabilidad técnica, qué marcos normativos aplican y por qué el modelo BYO-Infra es estructuralmente más seguro que un SaaS hosted tradicional.
## El problema que resuelve la trazabilidad criptográfica
En Chile, la operación de un club de cannabis medicinal bajo Ley 20.000 y Decreto 84/2015 exige trazabilidad gramo a gramo. La pregunta operativa es: ¿cómo demuestras ante una auditoría del SAG o ante una investigación judicial que cada gramo dispensado a un paciente corresponde a un lote autorizado, con un médico recetante real, dentro de la dosis aprobada, en un momento verificable?
La respuesta tradicional es "tenemos planillas Excel y comprobantes en PDF". El problema es que esos artefactos son mutables. Cualquiera con acceso al sistema puede editarlos a posteriori, y no hay forma técnica de demostrar que no se editaron.
DispensAI resuelve esto con dos mecanismos complementarios: **audit logs cripto-encadenados** y **sellado criptográfico de documentos**.
## Workers/audit: cadena de hash SHA-256
Cada acción crítica del sistema (creación, modificación, eliminación, lectura de datos sensibles) se registra en `workers/audit`, un Cloudflare Worker dedicado por corporación que escribe en una base de datos D1 propia.
La estructura de cada audit log incluye: id UUID, table_name, record_id, action (INSERT/UPDATE/DELETE/VIEW), old_values JSONB, new_values JSONB, changed_by UUID, ip_address, user_agent, previous_hash, chain_hash SHA-256(previous_hash + new_record), created_at.
El campo `chain_hash` se calcula como SHA-256 del hash anterior concatenado con el contenido del nuevo registro. Esto crea una cadena: cada eslabón depende del anterior, así que si alguien modifica un log antiguo, todos los hashes posteriores quedan invalidados.
El endpoint público `GET /audit/verify` (admin-only) retorna `{ valid, total, firstMismatch? }`. Si la cadena está rota, lo sabes con certeza matemática. No hay forma de manipular un registro antiguo sin que la auditoría detecte el rompimiento.
## Workers/iso: 109 tipos de eventos y auditor IA
Sobre la base de audit logs, hay un sistema de eventos ISO en `workers/iso`. Cada operación del negocio dispara uno de 109 tipos de eventos definidos en una matriz de severidad.
Eventos con `auto_nc=true` generan automáticamente un **finding** (`iso_audit_findings`) con workflow `open → in_review → resolved`. Si no se atiende en el SLA configurado, escala a alerta.
Hay tres tipos de auditoría automatizada:
1. **Event processor** (`*/15 minutes`): procesa eventos pendientes y crea findings.
2. **Alert scans** (`every 6 hours`): detecta findings vencidos, errores de procesamiento y patrones anómalos.
3. **AI auditor** (`daily 02:00 UTC` + `weekly Monday 03:00 UTC`): GPT-4o analiza el log completo, identifica riesgos no detectados por reglas, propone acciones correctivas y genera insights predictivos.
## Marcos normativos cubiertos
DispensAI implementa controles alineados con:
- **ISO 9001:2015** (Sistemas de Gestión de Calidad): políticas, objetivos, KPIs, no conformidades, acciones correctivas, auditorías internas.
- **ISO 26000:2010** (Responsabilidad Social): código de ética, política de RSE, gestión de quejas, proyectos sociales, stakeholder engagement.
- **ISO 27001:2022** (Seguridad de la Información): controles de acceso, audit logs inmutables, encriptación en reposo (R2 SSE), encriptación en tránsito (TLS 1.3), gestión de incidentes.
- **ISO 37001:2016** (Antisoborno): política antisoborno, due diligence de proveedores, gestión de regalos, canal de denuncias.
- **Ley 20.000** (Sustancias estupefacientes): trazabilidad de lotes, registro de dispensaciones, control de inventario.
- **Decreto 84/2015** (Cannabis medicinal): receta médica obligatoria, dosis máxima mensual, registro de pacientes.
- **Ley 19.628** (Protección de la Vida Privada): consentimiento informado, derechos ARCO, DPA con processor.
## El modelo BYO-Infra
Aquí está la decisión arquitectónica más importante para compliance: **DispensAI no es un SaaS hosted**.
DispensAI es un **template de código**. Cada corporación cliente despliega ese código sobre **sus propias cuentas** de Supabase, Cloudflare y Vercel. Farmiemos SpA mantiene el código y entrega soporte, pero **no opera la infraestructura de los clientes**.
Esto tiene implicaciones legales fuertes bajo Ley 19.628:
- **La corporación es data controller**: tiene control directo sobre sus datos de pacientes, decide políticas de retención, responde a derechos ARCO de sus pacientes, es la responsable legal ante el órgano regulador.
- **Farmiemos es data processor solo bajo DPA firmado**: la relación es contractual estricta. En operación normal, Farmiemos no accede a Supabase ni Cloudflare del cliente.
- **No hay riesgo de breach lateral**: si Farmiemos sufriera un incidente, los datos de los pacientes de la corporación X estarían fuera del scope, porque viven en infraestructura de la corporación X.
Comparado con SaaS hosted multi-tenant: en un SaaS típico, miles de clientes comparten la misma base de datos con aislamiento lógico (row-level security). Un bug en RLS puede exponer datos cruzados. En BYO-Infra esto es estructuralmente imposible.
## Sellado de documentos: Ed25519 + OpenTimestamps
Doce tipos de documentos críticos se sellan criptográficamente al generarse. El sellado funciona así:
1. Se calcula SHA-256 del PDF final.
2. Se firma el hash con la clave privada Ed25519 de la corporación (vive en Cloudflare Worker, no accesible externamente).
3. Se envía el hash a OpenTimestamps, que lo agrega a una transacción Bitcoin pendiente.
4. Cuando la transacción se confirma en la blockchain (típicamente en una hora), recibimos el "receipt" que prueba el momento exacto del sellado.
El receipt es verificable de forma independiente, incluso si Farmiemos y el Club desaparecieran. Esto da nivel de garantía equivalente a Firma Electrónica Avanzada bajo Ley 19.799, dependiendo de la integración con Time Stamping Authority.
## Derechos ARCO
Los pacientes ejercen sus derechos ARCO (Acceso, Rectificación, Cancelación, Oposición) desde `/dashboard/perfil/tickets`. Cada solicitud genera un ticket categorizado como ARCO con SLA de 15 días hábiles.
El sistema registra solicitud original del titular, respuesta del admin, cambios efectuados en datos, audit trail completo. Esto satisface el deber de evidenciar el cumplimiento ante una eventual inspección de la futura Agencia de Protección de Datos Personales.
## Próximos pasos
Lee el marco completo en `demo.dispensai.cl/legal`. Si tu corporación está evaluando DispensAI para implementación, podemos coordinar una reunión técnica con tu oficial de cumplimiento. Contáctanos en `[email protected]`.
El proceso de onboarding corporativo incluye: firma de NDA y DPA bajo Ley 19.628, aprovisionamiento de tu infraestructura (Supabase + Cloudflare + Vercel propias), configuración branding (logo, colores, dominio propio), migración de pacientes existentes, capacitación del equipo admin, activación de módulos marketplace.
## Preguntas frecuentes
**¿Quién es responsable legalmente ante un incidente de datos?** La corporación cliente, en su rol de data controller. Farmiemos puede acompañar técnicamente bajo DPA, pero no es responsable ante los titulares de datos.
**¿Puedo auditar el código fuente antes de implementar?** Sí. Como parte del onboarding corporativo entregamos acceso al repositorio para revisión técnica.
**¿Qué pasa si Farmiemos quiebra o discontinúa el producto?** La corporación retiene su instancia operativa (corre en su infraestructura). El código fuente queda con la corporación bajo licencia, y los datos siempre han estado en sus cuentas.
**¿La cadena de hashes es suficiente prueba forense?** Combinada con sellado Ed25519 + OpenTimestamps, sí, para la mayoría de los escenarios de auditoría regulatoria. Para procesos judiciales formales con FEA plena, se requiere integración TSA.
**¿Cuánto cuesta el módulo de compliance?** La trazabilidad criptográfica básica viene incluida. El módulo ISO completo se activa vía marketplace con pricing por definir.
