Consentimiento contextual
Integración del widget, configuración de finalidades, captura de decisiones y evidencia.
Una solución transversal para gestionar privacidad de punta a punta, conectando consentimiento, derechos, comunicación y evidencia en una experiencia transparente y trazable.
Captura contextual de decisiones.
Intercambio con sistemas cliente.
Gestión posterior y derechos.
Gestión y trazabilidad.
Historial de decisiones y acciones.
CASANDRA conecta las actividades de tratamiento con las decisiones de las personas, la gestión de derechos y las comunicaciones necesarias para operar privacidad con trazabilidad.
Integración del widget, configuración de finalidades, captura de decisiones y evidencia.
Arquitectura de acceso, identificación, revisión de consentimientos y continuidad de derechos.
Ingreso, seguimiento y trazabilidad de solicitudes de acceso, rectificación, supresión, oposición y portabilidad.
Matriz de SLA legales, contenido íntegro exigido, estados de entrega y evidencia probatoria.
Registro de Actividades de Tratamiento, versionado, finalidades, bases de licitud y trazabilidad asociada.
Contratos de API, modelos, autenticación, eventos, errores y versionado para integrar CASANDRA.
Elige entre Widget embebido o API directa, identifica responsabilidades y transforma el alcance técnico en un plan estimable por el equipo del cliente.
La documentación acompaña el ciclo completo de CASANDRA desde el contexto en que ocurre una decisión hasta la evidencia que respalda su gestión.
Guía para comprender el alcance, elegir un enfoque de integración y revisar los contratos técnicos necesarios para conectar CASANDRA.
CASANDRA gestiona privacidad de punta a punta conectando actividades de tratamiento, consentimiento, derechos, comunicación y evidencia dentro de una operación trazable.
La página Resumen permite comparar los enfoques disponibles antes de revisar el detalle técnico del Widget o de la API directa.
La documentación distingue entre comportamiento definido de producto, implementación disponible en DEV, contratos preliminares y decisiones técnicas pendientes. Esa diferencia se identifica en cada página.
Vista de los componentes que participan en la operación y de las relaciones necesarias para integrar CASANDRA sin exponer detalles internos de infraestructura que no forman parte del contrato con el integrador.
Las Finalidades y las respuestas ARSOP se interpretan en relación con las versiones correspondientes de las Actividades de Tratamiento declaradas en el RAT.
Ambientes, valores de integración y controles vigentes para implementar y probar el flujo público de consentimiento.
| Recurso | Disponibilidad actual |
|---|---|
| Dashboard | https://casandra-dev.elunlabs.io |
| CASANDRA API | https://casandrabackend-dev.elunlabs.io |
| Widget | https://casandra-dev.elunlabs.io/widget/consent-widget.js |
| Valor | Uso | Tratamiento |
|---|---|---|
codigo_importacionwid_… | Identifica el Widget en las cuatro rutas públicas y se usa como widgetId. | Es público e impredecible; no debe tratarse como autorización. |
widget_id | Identificador UUID para rutas administrativas del Dashboard. | No se utiliza en el flujo público del cliente. |
secret_integracionsec_… | Reservado para autenticación servidor a servidor. | Se muestra una sola vez; CASANDRA conserva su SHA-256. Guardar en un gestor de secretos. |
Authorization ni validan actualmente secret_integracion. En navegador, la protección aplicable es la lista de dominios autorizados y la validación de Origin/Referer. En servidor a servidor, el cliente debe proteger su propio endpoint intermedio.PUBLICADA y dentro de su ventana de fechas.codigo_importacion externalizados por ambiente.curl -s https://casandrabackend-dev.elunlabs.io/api/v1/public/widgets/wid_TU_CODIGORegistro declarativo por organización de las Actividades de Tratamiento. En CASANDRA es una entidad versionada que relaciona finalidades, bases de licitud y evidencia con la operación posterior.
El RAT corresponde al Registro de Actividades de Tratamiento exigido por el Art. 14 ter de la Ley 21.719. Cada edición de una Actividad de Tratamiento genera una nueva versión y conserva la anterior como histórico inmutable.
vN+1 con estado Archivada. El estado no se modifica in place, preservando la cadena de evidencia.| Atributo | Tipo / regla |
|---|---|
id_actividad | UUID |
organización | FK |
versión | Integer correlativo |
finalidad | Referencia única |
base_licitud | Enum |
atributos_datos | Lista: personal / sensible / biométrico / económico / adolescente / niño |
categoría_titulares | String |
destinatarios | Lista de cesionarios |
plazo_conservación | Duración |
transferencia_internacional | Boolean + detalle |
decisiones_automatizadas | Boolean + detalle |
estado | Activa / Archivada |
hash_registro | SHA-256 |
hash_anterior | SHA-256, referencia |
La cardinalidad RAT (AT) — Finalidad es muchos a uno: cada Actividad de Tratamiento declara una finalidad específica y una finalidad puede estar asociada a varias Actividades de Tratamiento con distintas bases de licitud o formas de tratamiento.
Una finalidad activa en operación sin Actividad de Tratamiento declarada, o una Actividad de Tratamiento sin consentimientos de respaldo cuando corresponda, se registra como Brecha de Cumplimiento.
| Método | Ruta | Resultado |
|---|---|---|
| POST | /v1/rat/activities | 201 · AT versión 1, estado Activa |
| PUT | /v1/rat/activities/{id} | 201 · nueva versión vN+1 |
| PATCH | /v1/rat/activities/{id}/archive | Nueva versión en estado Archivada |
| GET | /v1/compliance/gaps | Brechas y ciclo de vida |
El PUT devuelve 201 porque cada edición se registra como un evento nuevo append-only y no como una mutación del registro existente.
Entidades y reglas transversales utilizadas para relacionar tratamiento, decisiones, solicitudes, comunicaciones y evidencia dentro de CASANDRA.
La implementación entregada permite reconocer organizaciones, usuarios, finalidades, campañas, widgets, titulares, identificadores, interacciones, consentimientos, solicitudes y auditoría. Este listado describe la implementación actual y no sustituye el modelo de datos contractual.
hash_registro corresponde al SHA-256 del contenido canónico del registro, serializado de forma determinística y calculado una sola vez al insertar. hash_anterior referencia el hash_registro del registro insertado inmediatamente antes en la misma tabla.
hash_anterior.| Categoría | Nivel |
|---|---|
| Dato personal | base |
| Dato personal sensible | sensible |
| Dato de salud / perfil biológico | especial |
| Dato biométrico | especial |
| Dato de geolocalización | especial |
| Dato financiero / económico | especial |
| Dato de niño o niña | especial |
| Dato de adolescente | especial |
Presenta una solicitud contextual, permite una decisión granular por finalidad y conserva el resultado con su contexto y evidencia.
Las finalidades configurables derivan de las Actividades de Tratamiento declaradas en el RAT y referencian la versión específica de la Actividad de Tratamiento bajo la que ocurre la decisión.
La taxonomía base de CASANDRA considera las siguientes finalidades bajo consentimiento:
| # | Finalidad |
|---|---|
| 01 | Comunicaciones comerciales y marketing |
| 02 | Personalización de productos o servicios |
| 03 | Análisis estadístico o investigación |
| 04 | Prestación y mejora del servicio |
| 05 | Contacto y atención al cliente |
| 06 | Cesión o transferencia a terceros |
| 07 | Elaboración de perfiles y decisiones automatizadas |
CASANDRA ofrece dos vías que producen el mismo tipo de evidencia: Widget embebido, con interfaz provista por CASANDRA, y API directa, para interfaces propias, aplicaciones no web y procesos servidor a servidor.
El registro de la decisión conserva el contexto necesario para reconstruir quién decidió, cuándo, bajo qué finalidad y bajo qué versión de tratamiento ocurrió la interacción.
Capa de gestión posterior para que la persona revise consentimientos, consulte historial y continúe acciones vinculadas al ejercicio de sus derechos.
Gestiona el ingreso, seguimiento, plazos, resolución y evidencia de las solicitudes asociadas al ejercicio de derechos del titular.
| Derecho | Uso en CASANDRA | Bloqueo accesorio |
|---|---|---|
| Acceso | Solicitud de información asociada al titular. | — |
| Rectificación | Corrección de datos. | Disponible |
| Supresión | Eliminación según corresponda. | Disponible |
| Oposición | Oposición a un tratamiento. | Disponible |
| Portabilidad | Entrega o traslado de datos cuando corresponda. | — |
| Situación | Plazo |
|---|---|
| Solicitud ARSOP estándar | 30 días corridos |
| Bloqueo accesorio | 2 días hábiles |
Al cerrar una resolución se publica el evento correspondiente hacia Notificaciones para gestionar la comunicación y su evidencia.
Gestiona las comunicaciones que CASANDRA debe emitir a partir de eventos del producto y conserva evidencia de contenido, envío, entrega y escalamiento.
Notificaciones consume eventos generados por otras capacidades de CASANDRA. No requiere una invocación directa de usuario para iniciar el proceso.
| Evento conocido | Origen |
|---|---|
arsop.resuelta | ARSOP al cerrar resolución |
arsop.bloqueo.disparado | ARSOP · bloqueo Art. 8° ter |
arsop.resolución_positiva | Rectificación / supresión hacia cesionarios |
politica.clasificada_sustancial | Consentimiento · re-consentimiento |
Todo productor debe emitir al menos tipoEvento, idEntidadOrigen, timestamp de emisión, destinatarios resueltos según la matriz de SLA y el payload mínimo exigido para ese tipo de evento.
| Evento | Destinatario | Canal | SLA | Contenido mínimo |
|---|---|---|---|---|
| Resolución de bloqueo | Titular | Email / domicilio físico | 2 días hábiles | Decisión, fundamento y, si hay denegación, plazo de 30 días hábiles para reclamar ante la Agencia. |
| Resolución de bloqueo · aviso interno | DPO / Legal | Junto a respuesta al titular | Aviso de que debe notificarse a la Agencia si existe rechazo. | |
| Respuesta a solicitud ARSOP | Titular | Email / domicilio físico | 30 días corridos | Resolución completa, fundamento de denegación, plazo y vía de reclamación. |
| Prórroga de solicitud ARSOP | Titular | Email / domicilio físico | Antes del vencimiento original | Notificación de prórroga y nuevo plazo. |
| Aviso a cesionarios | Cesionarios | Junto a resolución al titular | Resolución positiva y finalidades afectadas. | |
| Alerta de vencimiento | DPO / Legal | Plataforma + Email | Configurable, p.ej. 72h / 24h | ID de solicitud, días restantes, responsable y acción requerida. |
| Nueva solicitud ARSOP | DPO / Legal / Titular | Plataforma + Email | Inmediato | Tipo de derecho, canal, identidad verificada y timestamp. |
| Cambio de política | Titular | Email / canal original | Configurable | Descripción del cambio, finalidades afectadas y acción requerida. |
| Atributo | Definición |
|---|---|
id_notificación | UUID |
evento_disparador | Referencia a Consentimiento / Expediente / Política |
destinatario | Titular / DPO / Cesionario / Agencia |
canal | Email / domicilio físico / plataforma |
contenido_íntegro | Snapshot renderizado |
sla_aplicable | SLA asociado |
nivel_certeza_entrega | Remitido / Entregado / Leído |
estado | Estado de ciclo de vida |
timestamp_envío | Timestamp |
timestamp_confirmación | Timestamp |
hash_registro | SHA-256 |
hash_anterior | SHA-256 |
Los estados de falla continúan de forma append-only: falla de entrega → reintento → escalada a DPO → cierre con evidencia.
| Método | Ruta | Uso |
|---|---|---|
| GET | /v1/notifications/{expedienteId} | Snapshot íntegro |
| GET | /v1/notifications?tipo=bloqueo | Notificaciones críticas |
| GET | /v1/notifications/alerts | Alertas internas |
| POST | /v1/notifications/cesionarios | Comunicación a cesionarios |
| POST | /v1/notifications/delivery-callback | Estado de entrega del proveedor |
| GET | /v1/notifications/reports | Reporte de trazabilidad |
Comparación general de los enfoques disponibles para integrar el consentimiento CASANDRA en los canales digitales de una organización.
CASANDRA provee modal, estilos, verificación previa y orquestación del registro.
El cliente construye la interfaz y ejecuta cuatro llamadas públicas.
| Criterio | Widget | API directa |
|---|---|---|
| Interfaz | Provista por CASANDRA. | Diseñada y desarrollada por el cliente. |
| Textos y orden | Se obtienen en cada apertura. | El cliente debe consultar y renderizar la configuración vigente. |
| Verificación previa | Automática. | El cliente implementa verificar-titular. |
| Contexto de evidencia | IP, user-agent y dominio del navegador. | Corresponde al origen de la llamada; si se usa backend, será el servidor. |
| Responsabilidad principal | Integración del canal e identidad. | UX, texto mostrado, identidad, orquestación, reintentos y observabilidad. |
La vía de menor esfuerzo para incorporar la experiencia CASANDRA en un canal web, conservando el contexto del navegador y delegando la orquestación del flujo.
window.CassandraConsent.open().<script src="https://casandra-dev.elunlabs.io/widget/consent-widget.js" defer></script>
<button id="casandra-consent">Gestionar mis consentimientos</button>
<script>
document.getElementById("casandra-consent")
.addEventListener("click", function () {
window.CassandraConsent.open({
widgetId: "wid_TU_CODIGO",
apiBaseUrl: "https://casandrabackend-dev.elunlabs.io",
userName: "Nombre del titular",
userIdentifiers: [
{ tipo: "EXTERNAL_ID", valor: "cli-90210" },
{ tipo: "EMAIL", valor: "titular@ejemplo.com" }
]
});
});
</script>| Parámetro | Uso | Consideración técnica |
|---|---|---|
widgetId | Recibe el codigo_importacion con prefijo wid_. | Debe externalizarse y cambiar por ambiente. |
apiBaseUrl | URL base de CASANDRA API. | No dejar fija en el código; configurar DEV y producción. |
userName | Nombre del titular cuando está disponible. | Se almacena solo si el titular aún no tiene nombre. |
userIdentifiers | Uno o más identificadores de la misma persona. | Requiere definir fuente, confiabilidad y momento de disponibilidad. |
500, aplica falla abierta y muestra el consentimiento.DENEGAR; ninguna opción parte seleccionada.duracion_dias, la verificación vuelve a solicitar respuesta.| Código | Normalización en CASANDRA | Uso recomendado |
|---|---|---|
EMAIL | Espacios recortados, minúsculas y validación básica. | Identificación y contacto. |
TELEFONO | Formato E.164; sin prefijo se asume Chile +56. | Identificación y contacto. |
RUT | Sin puntos ni guion, K mayúscula y dígito verificador válido. | Identificador nacional. |
EXTERNAL_ID | Recorte de espacios. | ID estable del sistema cliente; ideal junto al email. |
409 IDENTITY_CONFLICT. Si el Widget exige contacto, debe incluirse al menos un EMAIL o TELEFONO.apiBaseUrl y widgetId por ambiente.Para comparar este enfoque con la API directa, revisa el Resumen.
Cada ambiente tiene su propia campaña, codigo_importacion, bundle y base URL. Antes de desplegar, registrar todos los hosts —incluyendo variantes con y sin www— y verificar que la evidencia conserve el dominio, IP y user-agent esperados.
Contrato implementado en DEV para construir una experiencia propia y registrar el mismo tipo de evidencia que genera el Widget embebido.
titulo, descripcion y texto_completo obtenidos de la configuración vigente.| Aspecto | Contrato DEV |
|---|---|
| Base URL | https://casandrabackend-dev.elunlabs.io |
| Prefijo | /api/v1/public |
| Autenticación | Sin Authorization; codigo_importacion en la ruta. |
| Cuerpo | JSON UTF-8; POST con Content-Type: application/json. |
| Fechas | ISO 8601 con offset UTC. |
| CORS | Abierto (*); las rutas pueden llamarse desde navegador. |
| Dominio | Compara host de Origin o Referer con la lista autorizada. |
| Rate limit | No se aplica actualmente; un proxy del cliente debe incorporar su propio límite. |
| Campos desconocidos | Se ignoran; los obligatorios se validan. |
La validación de dominio no ocurre si el Widget no tiene dominios configurados o la petición no envía Origin ni Referer, como suele ocurrir en servidor a servidor.
/api/v1/public/widgets/{codigo_importacion}Configuración y textos vigentes de la campaña./api/v1/public/widgets/{codigo_importacion}/verificar-titularIndica si corresponde solicitar una respuesta./api/v1/public/widgets/{codigo_importacion}/interaccionesResuelve o crea al titular y abre el contenedor de evidencia./api/v1/public/interacciones/{interaccion_id}/respuestasRegistra las decisiones y completa la interacción.curl -s \
https://casandrabackend-dev.elunlabs.io/api/v1/public/widgets/wid_TU_CODIGO{
"codigo_importacion": "wid_TU_CODIGO",
"campania": {
"nombre": "Consentimientos de datos personales",
"descripcion": "Elige cómo quieres que usemos tus datos."
},
"consentimientos": [{
"campania_consentimiento_id": "3f1c9b0e-2d4a-4f7b-9a1e-8c5d6e7f0a1b",
"consentimiento_version_id": "b7e2d1a4-5c6f-4839-9d0e-1f2a3b4c5d6e",
"icono": "megaphone",
"titulo": "Comunicaciones comerciales",
"descripcion": "Para enviarte ofertas y novedades por email.",
"tooltip_titulo": "¿Qué implica?",
"tooltip_descripcion": "Puedes revocarlo cuando quieras.",
"texto_completo": "Autorizo el tratamiento de mis datos…",
"duracion_dias": 365,
"requiere_respuesta": true,
"orden": 1
}]
}orden ascendente, no por la posición del arreglo.campania_consentimiento_id al enviar la decisión.consentimiento_version_id identifica la versión exacta del texto y queda referenciada en la evidencia.Es una operación de solo lectura: no crea titular, identificador ni interacción. Puede omitirse si todavía no existe ningún identificador.
curl -X POST \
https://casandrabackend-dev.elunlabs.io/api/v1/public/widgets/wid_TU_CODIGO/verificar-titular \
-H 'Content-Type: application/json' \
-d '{
"identificadores": [
{ "tipo": "EMAIL", "valor": "juan@ejemplo.cl" },
{ "tipo": "RUT", "valor": "12.345.678-5" }
]
}'{
"debe_responder": false,
"motivo": "YA_RESPONDIO",
"consentimientos_requeridos": 2,
"consentimientos_pendientes": 0,
"vigente_hasta": "2026-12-14T18:30:00+00:00"
}| motivo | ¿Mostrar? | Interpretación |
|---|---|---|
TITULAR_NO_ENCONTRADO | Sí | Primera respuesta en la empresa. |
RESPUESTA_PENDIENTE | Sí | Falta una respuesta o cambió la versión del texto. |
RESPUESTA_EXPIRADA | Sí | Venció, fue revocada o expirada. |
YA_RESPONDIO | No | Todos los obligatorios están respondidos y vigentes. |
SIN_CONSENTIMIENTOS_REQUERIDOS | Sí | La campaña solo contiene opciones no obligatorias. |
500, continuar y mostrar. Los 403 y 409 asociados al Widget o campaña también impedirán obtener la configuración y deben tratarse como errores de configuración.| Regla | Comportamiento requerido |
|---|---|
| Estado inicial | Todas las opciones desmarcadas; nunca preseleccionar. |
| Contenido | Mostrar titulo y descripcion; hacer accesible texto_completo. |
| Detalle | Presentar tooltip cuando sus campos tengan valor. |
| Salir sin responder | Debe permitirse; no llamar a la API ni crear interacción. |
requiere_respuesta | Exige incluir OTORGAR o DENEGAR; no obliga a otorgar. |
| Seleccionar todos | Puede ofrecerse como atajo, manteniendo decisión granular. |
curl -X POST \
https://casandrabackend-dev.elunlabs.io/api/v1/public/widgets/wid_TU_CODIGO/interacciones \
-H 'Content-Type: application/json' \
-d '{
"nombre": "Juan Pérez",
"identificadores": [
{ "tipo": "EXTERNAL_ID", "valor": "cli-90210" },
{ "tipo": "EMAIL", "valor": "juan@ejemplo.cl" }
]
}'{
"interaccion_id": "9c3a7f21-5b6d-4e08-a1c2-3d4e5f6a7b89",
"titular_id": "1a2b3c4d-5e6f-4708-9a0b-1c2d3e4f5a6b",
"estado": "ABIERTA",
"expira_at": "2026-08-21T14:05:00+00:00"
}La API normaliza los identificadores, busca al titular por hash y lo reutiliza si existe. Los identificadores nuevos se asocian al titular resuelto; si apuntan a personas distintas, la operación se rechaza. La interacción expira a las 72 horas.
| Contexto registrado | Origen |
|---|---|
dominio_origen | Host de Origin o Referer. |
ip_address | Primer valor válido de X-Forwarded-For o IP de conexión. |
user_agent | Cabecera User-Agent. |
curl -X POST \
https://casandrabackend-dev.elunlabs.io/api/v1/public/interacciones/9c3a7f21-5b6d-4e08-a1c2-3d4e5f6a7b89/respuestas \
-H 'Content-Type: application/json' \
-d '{
"decisiones": [
{ "campania_consentimiento_id": "3f1c9b0e-2d4a-4f7b-9a1e-8c5d6e7f0a1b", "accion": "OTORGAR" },
{ "campania_consentimiento_id": "7d2e8a1f-aaaa-4bbb-8ccc-123456789012", "accion": "DENEGAR" }
]
}'{
"interaccion_id": "9c3a7f21-5b6d-4e08-a1c2-3d4e5f6a7b89",
"estado": "COMPLETADA",
"resultados": [{
"consentimiento_id": "c0ffee00-1111-4222-8333-444455556666",
"accion": "OTORGAR",
"ocurrido_at": "2026-08-18T14:05:03+00:00"
}]
}OTORGAR; desmarcado → DENEGAR. Así se incluye cada obligatorio y queda evidencia explícita del rechazo.resultados[].consentimiento_id identifica la finalidad visible en el Portal Titular; no es el campania_consentimiento_id enviado ni el consentimiento_version_id.
| Tipo | Normalización | Ejemplo |
|---|---|---|
EMAIL | Trim, minúsculas y validación de estructura. | Juan@Ejemplo.CL → juan@ejemplo.cl |
TELEFONO | E.164; asume +56 sin prefijo. | 9 1234 5678 → +56912345678 |
RUT | Sin puntos/guion, K mayúscula y módulo 11. | 12.345.678-5 → 123456785 |
EXTERNAL_ID | Trim; no puede quedar vacío. | cli-90210 → cli-90210 |
EXTERNAL_ID estable junto al email para mantener continuidad si este cambia.| Objeto | Valores | Regla |
|---|---|---|
| Interacción | ABIERTA, COMPLETADA, ABANDONADA, EXPIRADA | Solo ABIERTA recibe respuestas. |
| Acción del flujo | OTORGAR, DENEGAR | Ambas cuentan como respuesta vigente. |
| Otras acciones | RENOVAR, REVOCAR, EXPIRAR | Corresponden a otros orígenes, como el Portal Titular. |
Los eventos creados mediante estas rutas quedan con origen WIDGET, tanto si la llamada proviene del bundle como de una interfaz desarrollada por el cliente.
| Llamada | ¿Reintentar? | Comportamiento |
|---|---|---|
| Configuración | Sí | Solo lectura. |
| Verificar titular | Sí | Solo lectura; falla abierta. |
| Crear interacción | Con cuidado | Cada llamada crea otra interacción abierta. |
| Registrar respuestas | Sí, con el mismo payload | Devuelve 200 sin duplicar; payload distinto retorna 409. |
Antes del paso 5, conservar temporalmente interaccion_id y decisiones para poder reintentar durante las 72 horas. Una interacción abierta sin respuestas no constituye evidencia de consentimiento.
Un consentimiento requerido vuelve a quedar pendiente si nunca se respondió esa versión, la última acción fue REVOCAR/EXPIRAR, cambió el consentimiento_version_id o transcurrió duracion_dias. Con valor null, la respuesta no vence por tiempo.
vigente_hasta puede reducir llamadas, pero una nueva versión del texto solo se detecta consultando CASANDRA.{
"error": {
"code": "DOMAIN_NOT_ALLOWED",
"message": "El dominio de origen no está autorizado",
"details": { "origen": "sitio-no-autorizado.cl" }
}
}Programar contra error.code, que es estable. message puede cambiar de redacción y details depende del caso.
Mecanismo técnico para propagar cambios relevantes de CASANDRA hacia otras capacidades o sistemas del cliente.
| Evento | Uso |
|---|---|
arsop.resuelta | Inicia comunicación de resolución. |
arsop.bloqueo.disparado | Activa la lógica de bloqueo y comunicación asociada. |
arsop.resolución_positiva | Permite comunicar a cesionarios cuando corresponda. |
politica.clasificada_sustancial | Inicia proceso de re-consentimiento. |
Todo productor debe emitir tipoEvento, idEntidadOrigen, timestamp de emisión, destinatarios resueltos y el payload mínimo requerido para el caso.