Saltar al contenido principal

Acuerdos y Permisos

Acuerdos y Permisos

En Soyio, un Agreement (Acuerdo) es la representación digital del "contrato" de privacidad vigente entre tu organización y un usuario específico. No es solo un registro estático; es un objeto vivo que evoluciona en el tiempo, manteniendo un historial completo y auditable de qué datos puedes procesar y por qué.

Anatomía de un Agreement​

Un Agreement vincula a un Sujeto de Datos con un conjunto de Permisos de Datos bajo el contexto de una Empresa.

Componentes clave​

  • Sujeto (Subject): El titular de los datos. Puede ser una Identity (usuario verificado) o una Entity (usuario anónimo o no verificado).
  • User Reference: Un identificador externo (tu propio ID de usuario) que permite vincular el acuerdo con tus sistemas.
  • Permisos (Data Permissions): La lista explícita de categorías de datos y usos de datos con consentimiento vigente.
  • Estado (Latest): Un indicador booleano (latest: true) que señala que esta es la versión activa y vigente del acuerdo para ese usuario.
  • Versión: Un número secuencial que indica la iteración del acuerdo.

Ejemplo de Estructura​

{
"id": "agr_1B2M2Y8AsgTpgAmY7PhCfg",
"user_reference": "user_123",
"latest": true,
"version": 4,
"created_at": "2025-03-12T10:00:00Z",
"data_permissions": [
{
"data_category": "user.contact.email",
"data_use": "marketing.advertising",
"expires_at": "2026-03-12T10:00:00Z",
"scope_type": "product",
"scope_id": "prod_8X9L2Z1...",
"scope_version": 1
},
{
"data_category": "user.financial.bank_account",
"data_use": "essential.service",
"expires_at": "2026-03-12T10:00:00Z"
}
]
}

Data Permissions​

Los permisos definen qué datos puedes usar, para qué y el alcance donde es válido el permiso. Cada permiso incluye:

  • Categoría: El tipo de dato (ej. user.contact.email, user.financial.bank_account). Consulta la Taxonomía de Categorías.
  • Uso: La finalidad del tratamiento (ej. marketing.advertising, essential.service). Consulta la Taxonomía de Usos.
  • Expiración: La fecha hasta la cual el permiso es válido.
  • Scope (Alcance): El contexto donde es válido el permiso (ej. un Producto específico o una Sucursal).

Scope (Alcance)​

Un permiso no siempre es global. Puede estar restringido a un contexto específico.

Los tipos de alcance son jerárquicos:

  1. Global: Si no se define scope, el permiso aplica a toda la empresa.
  2. Branch (Sucursal): Aplica a una división física o lógica de la empresa (ej. "Sucursal Centro", "División Créditos", "Tienda Online").
  3. Product (Producto): Aplica a un producto o servicio específico (ej. "Tarjeta de Crédito Gold", "Seguro de Vida", "Suscripción Premium").

Jerarquía: Un Producto puede estar contenido dentro de una Sucursal. Si un usuario otorga permiso para un Producto, el sistema entiende el contexto de la Sucursal a la que pertenece.

Ciclo de Vida y Versionado​

El aspecto más crítico de los Agreements en Soyio es su inmutabilidad lógica. Un Agreement nunca se modifica "in-place"; en su lugar, evoluciona a través de versiones.

Creación de versiones​

El Agreement es un recurso versionado. Cuando ocurren cambios (ej. nuevos consentimientos), actualizamos el recurso a una nueva versión para garantizar trazabilidad.

  1. Nueva Versión: Se genera una nueva versión del acuerdo que incorpora los cambios.
  2. Continuidad: La nueva versión se convierte inmediatamente en el estado vigente del usuario.
  3. Cálculo de cambios (Diffing): El sistema calcula qué permisos se agregaron, eliminaron o extendieron respecto a la versión anterior.
  4. Evidencia: Se genera y asocia una Evidencia inmutable para auditar el cambio.
  5. Historial: La versión anterior se archiva como histórica, manteniendo la cadena de custodia intacta.

Lógica de "Diffing"​

Al crear una nueva versión, Soyio clasifica los cambios en los permisos en tres categorías:

  • Created (Nuevos): Permisos que no existían en la versión anterior.
  • Removed (Eliminados): Permisos que existían antes pero fueron revocados o no renovados en esta versión.
  • Extended (Extendidos): Permisos que ya existían y cuya fecha de expiración ha sido ampliada (renovación).

Esta lógica permite responder preguntas como: "¿Qué cambió exactamente en la relación de privacidad con este usuario el día de ayer?".

Relación con Sujetos de Datos​

Los Agreements pertenecen a un "Sujeto". Dependiendo de tu integración, este sujeto varía:

Agreements de Entidades (Entities)​

Son los más comunes en flujos de consentimiento web (formularios de suscripción, cotizaciones, registros simples).

  • Caso de uso: Un usuario completa un formulario de suscripción a comunicaciones comerciales.
  • Comportamiento: Se crea una Entity y un Agreement asociado. Si proporcionas un user_reference, podrás vincular este acuerdo a tu usuario logueado.

Agreements de Identidades (Identities)​

Ocurren cuando el usuario ha pasado por un proceso de verificación de identidad (Disclosure).

  • Caso de uso: Onboarding digital bancario donde verificas el RUT/DNI del usuario.
  • Comportamiento: El Agreement se asocia a la Identity verificada, ofreciendo el mayor nivel de certeza legal.

Consulta de Agreements​

Para consultar el estado actual de los permisos de un usuario, siempre debes buscar el Agreement marcado como latest asociado al user_reference o ID del sujeto.

GET /api/v1/agreements?user_reference=USER_123&latest=true

Revisa la referencia del API para Obtener todos los acuerdos para mas detalles.

Esto retornará el contrato vigente, ignorando el historial de versiones pasadas.