Multiconsentimiento
Procesa 1..N consentimientos con decisiones explícitas y commit atómico.
Una misma Embed Session puede resolver uno o varios consentimientos, según la versión publicada de la configuración. Cada tarjeta conserva la regla 1 ConsentBox = 1 ConsentTemplateVersion.
Antes de materializar el runtime, Consensa evalúa cumplimiento por ConsentTemplate estable. El multiconsentimiento presenta únicamente consentimientos pendientes o con nuevos requisitos; los ya satisfechos no se incluyen. Si todos están satisfechos, POST /v1/embed/sessions responde presentation.required: false.
Semántica de decisión
Todo consentimiento incluido en la interacción recibe una decisión explícita: grant o deny.
optionalno significa omitido ni denegación implícita.requiredno significa aceptación forzada.- El usuario siempre puede denegar.
- El backend confirma el conjunto de decisiones mediante un commit atómico.
Evento público
Cuando la interacción contiene dos o más consentimientos, el componente emite consensa:completed con resultados sanitizados por templateKey. Con un solo consentimiento se emite consensa:granted o consensa:denied, nunca consensa:completed.
consent.addEventListener('consensa:completed', ({ detail }) => {
// {
// interactionReference: "interaction-public",
// outcome: "completed",
// consents: [
// { templateKey: "privacy", decision: "granted" },
// { templateKey: "marketing", decision: "denied" }
// ]
// }
renderNextStep(detail.consents);
});El payload público no incluye tickets ni credenciales de sesión, sessionId, identificadores personales ni IDs internos.
Confirmación canónica
Consulta GET /v1/consent-interactions/{interactionId} desde el backend para confirmar el resultado. La lista consents trae una entrada por consentimiento, con su decision, su status y su consentActionId.
{
"interactionId": "int_9a3f",
"status": "completed",
"committedAt": 1787702455200,
"consents": [
{ "templateKey": "privacy", "kind": "general", "decision": "grant", "status": "granted", "consentActionId": "consent-action-8e0" },
{ "templateKey": "marketing", "kind": "general", "decision": "deny", "status": "denied", "consentActionId": "consent-action-8e1" }
]
}El commit es atómico: o se registran todas las decisiones de la interacción, o ninguna. No existe un estado intermedio en el que parte del conjunto quedó guardado.
Si la interacción incluye un consentimiento REDEC, su entrada trae además redecConsentId y artifactStatus. Ver flujo REDEC.