Seguridad y cumplimiento

Si la auditoría falla,
la acción falla.

Cierre no es un SDR con un registro de actividad encima. La bitácora es la arquitectura. Cada prompt, cada llamada al modelo, cada aprobación humana queda grabada de forma sincrónica antes de que la acción se complete — y la cadena la hace verificable después de los hechos.

01

Escritura sincrónica

Cada acción de IA — enriquecimiento, redacción, clasificación, envío — escribe una fila en la bitácora antes de devolver el resultado al usuario. Si la escritura falla, la acción falla.

02

Encadenamiento por fila

Cada fila incluye el hash de la fila anterior dentro del mismo tenant. Alterar una fila histórica invalida todas las filas posteriores y rompe la cadena.

03

Raíz Merkle diaria

Un cron diario calcula la raíz Merkle de los hashes del día anterior y la persiste por separado. Verificar la integridad de cualquier día toma segundos, no horas.

04

Bloqueo a nivel de DB

Cuando un prospecto pide darse de baja, el lead se bloquea a nivel de base de datos. Cualquier intento posterior de generar un mensaje queda registrado como rechazo.

Cadena por fila

Cada fila apunta a la anterior.

El row_hash de cada entrada se calcula a partir de los campos de esa fila más el row_hash de la fila anterior dentro del mismo tenant. Modificar cualquier fila histórica invalida la cadena desde ese punto en adelante — y la siguiente raíz Merkle diaria expone la inconsistencia.

ENRICHED09:14:02
lead-1 · acme law
Maríaclaude-sonnet-4-6
row_hash · a31f...c2e9
DRAFTED09:14:09
lead-1 · es
Maríaclaude-haiku-4-5
row_hash · 7e44...f0a1
HUMAN REVIEWED09:15:31
review · APPROVED
Maríahuman
row_hash · b9c2...8714
SENT09:15:34
resend · acme@example.com
Cierren/a
row_hash · 1d8a...4fce
CLASSIFIED11:02:18
inbound · classifier
Cierreclaude-haiku-4-5
row_hash · 5fb0...d291
UNSUBSCRIBE LOCKED11:02:18
lead locked · UNSUBSCRIBE_REQUEST
Cierresystem
row_hash · 0a73...8826

Ejemplo simplificado. En producción cada fila incluye también el hash del prompt (sha256), el modelo usado, y los metadatos del evento.

Raíz Merkle diaria

Una raíz por día, por tenant.

A las 00:30 UTC, un cron computa el árbol Merkle binario de todos los row_hash del día anterior y persiste la raíz en una tabla aparte (merkle_roots). Si más adelante alguien manipula una fila, la raíz recomputada del día no coincide.

Diagrama del árbol Merkleh1h2h3h4h5h(h1·h2)h(h3·h4)h(h5·h5)h(h12·h34)h(h55·h55)root_hash (día N)

Árbol binario clásico (estilo Bitcoin): si el número de hojas es impar, la última se duplica para mantener la estructura. Cinco hojas en este ejemplo — cinco eventos en el día.

Lo que no hacemos.

  • No hay borrado lógico. Las filas de la bitácora son inmutables. Solo se pueden añadir; nunca modificar ni eliminar.
  • No hay envíos sin auditoría. El evento SENT se registra antes del envío externo. Si el envío falla, queda SEND_FAILED — nunca un envío fantasma.
  • No hay borradores para leads bloqueados. El bloqueo de baja se aplica antes de cualquier llamada al modelo. Cualquier intento deja huella como DRAFT_REFUSED_LOCKED.
  • No usamos los datos del cliente para entrenar modelos. Las llamadas a la API de Anthropic excluyen el entrenamiento por defecto.

¿Necesita un artefacto auditable
que un colegio profesional acepte?

El plan Compliance+ incluye exportación firmada en PDF, raíz Merkle diaria publicada y plantillas de restricciones por vertical (HIPAA, FINRA).