{
  "scale": "VAAS-1.0",
  "product": {
    "name": "Hubents",
    "agentName": "SofIA",
    "url": "https://app.hubents.com"
  },
  "statementVersion": "1.0",
  "date": "2026-08-12",
  "maxLevelOffered": 4,
  "vendorReservedLevels": [
    5,
    6
  ],
  "defaultLevel": 0,
  "whoMayChange": {
    "roles": [
      "owner",
      "admin"
    ],
    "vendorMayChangeUnilaterally": false,
    "notes": "La organización se autogestiona hasta V4. Hubents no sube el nivel de nadie por su cuenta; bajar puede hacerlo el propietario o un administrador cuando quiera. En el alta y en el panel se OFRECE V2 preseleccionado y explicado —el nivel más alto que no ejecuta nada sin aprobación humana—, pero concederlo es un acto explícito del propietario: la organización se provisiona en V0 y sin ese clic ahí se queda."
  },
  "riskCriteria": {
    "low": "Interna, reversible desde la propia auditoría y sin salir de Hubents.",
    "medium": "Interna y reversible, pero con efecto sobre datos que ve todo el equipo (altas en CRM y agenda, datos operativos del evento).",
    "high": "Dinero, documentos fiscales o cualquier cosa que salga hacia el cliente.",
    "uncataloguedAction": "high"
  },
  "actionCatalogue": [
    {
      "action": "addScheduleItem",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Borrar el punto del orden del día"
    },
    {
      "action": "addTag",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Quitar la etiqueta"
    },
    {
      "action": "createContact",
      "risk": "medium",
      "reversible": "yes",
      "undoMechanism": "Borrar el contacto"
    },
    {
      "action": "createDocument",
      "risk": "high",
      "reversible": "no",
      "undoMechanism": "Un documento fiscal emitido no se borra: se rectifica con otro"
    },
    {
      "action": "createEmailDraft",
      "risk": "medium",
      "reversible": "yes",
      "undoMechanism": "Borrar el borrador (no sale de Gmail hasta que se envía)"
    },
    {
      "action": "createEvent",
      "risk": "medium",
      "reversible": "yes",
      "undoMechanism": "Borrar el evento"
    },
    {
      "action": "createReminder",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Cancelar el recordatorio"
    },
    {
      "action": "createSupportTicket",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Cerrar el ticket desde /dashboard/support (o /admin/support)"
    },
    {
      "action": "createTask",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Borrar la tarea"
    },
    {
      "action": "createTaskFromConversation",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Borrar la tarea"
    },
    {
      "action": "enrollLeadInSequence",
      "risk": "high",
      "reversible": "with-effort",
      "undoMechanism": "Sacar al lead de la secuencia (lo ya enviado no se recoge)"
    },
    {
      "action": "markNotificationsRead",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Marcar como no leídas"
    },
    {
      "action": "organizeCompanyContacts",
      "risk": "medium",
      "reversible": "with-effort",
      "undoMechanism": "Borrar las relaciones creadas en la tanda"
    },
    {
      "action": "postTaskMessage",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Borrar el mensaje"
    },
    {
      "action": "reconcileBankTransaction",
      "risk": "high",
      "reversible": "with-effort",
      "undoMechanism": "Deshacer la conciliación a mano"
    },
    {
      "action": "registerPayment",
      "risk": "high",
      "reversible": "with-effort",
      "undoMechanism": "Anular el cobro registrado"
    },
    {
      "action": "relateContacts",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Borrar la relación"
    },
    {
      "action": "replyLeadConversation",
      "risk": "high",
      "reversible": "no",
      "undoMechanism": "Un mensaje enviado no se recoge"
    },
    {
      "action": "replyToEmail",
      "risk": "high",
      "reversible": "no",
      "undoMechanism": "Un correo enviado no se recoge"
    },
    {
      "action": "saveAgentMemory",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Borrar el recuerdo"
    },
    {
      "action": "scheduleFollowup",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Borrar la tarea de seguimiento"
    },
    {
      "action": "scheduleMeeting",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Borrar la cita"
    },
    {
      "action": "sendDocument",
      "risk": "high",
      "reversible": "no",
      "undoMechanism": "Un correo enviado no se recoge"
    },
    {
      "action": "sendEmail",
      "risk": "high",
      "reversible": "no",
      "undoMechanism": "Un correo enviado no se recoge"
    },
    {
      "action": "sendGallery",
      "risk": "high",
      "reversible": "no",
      "undoMechanism": "Un correo enviado no se recoge"
    },
    {
      "action": "sendPaymentReminder",
      "risk": "high",
      "reversible": "no",
      "undoMechanism": "Un correo enviado no se recoge"
    },
    {
      "action": "sendWhatsAppMessage",
      "risk": "high",
      "reversible": "no",
      "undoMechanism": "Un WhatsApp enviado no se recoge (borrarlo en Meta no garantiza que no se haya leído)"
    },
    {
      "action": "setEventVendorStatus",
      "risk": "medium",
      "reversible": "yes",
      "undoMechanism": "Devolver el estado anterior"
    },
    {
      "action": "setRsvp",
      "risk": "medium",
      "reversible": "yes",
      "undoMechanism": "Devolver el estado anterior"
    },
    {
      "action": "toggleChecklistItem",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Volver a marcarlo como estaba"
    },
    {
      "action": "updateTask",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Restaurar los valores previos guardados en la auditoría"
    }
  ],
  "invariantCeiling": [
    {
      "action": "createDocument",
      "reason": "Emitir un presupuesto o una factura es un hecho fiscal (VeriFactu): no se borra, se rectifica."
    },
    {
      "action": "enrollLeadInSequence",
      "reason": "Inscribir en una secuencia son mensajes automáticos al lead en diferido."
    },
    {
      "action": "reconcileBankTransaction",
      "reason": "Casar un movimiento bancario con una factura decide qué está cobrado."
    },
    {
      "action": "registerPayment",
      "reason": "Dinero. Además del riesgo alto, lleva candado explícito: SofIA no apunta un cobro por su cuenta en ningún nivel."
    },
    {
      "action": "replyLeadConversation",
      "reason": "Contestar a un lead sale hacia fuera y en su nombre."
    },
    {
      "action": "replyToEmail",
      "reason": "Responder un correo sale hacia fuera en nombre del usuario."
    },
    {
      "action": "sendDocument",
      "reason": "Sale hacia el cliente con un documento fiscal adjunto."
    },
    {
      "action": "sendEmail",
      "reason": "Sale desde el correo del usuario, con su nombre, y no se recoge."
    },
    {
      "action": "sendGallery",
      "reason": "El enlace de la galería sale hacia el cliente."
    },
    {
      "action": "sendPaymentReminder",
      "reason": "Una reclamación de cobro no se puede des-enviar."
    },
    {
      "action": "sendWhatsAppMessage",
      "reason": "Riesgo alto: ningún nivel lo ejecuta sin una persona delante."
    }
  ],
  "undoWindowDays": 7,
  "irreversibleActions": [
    "createDocument",
    "replyLeadConversation",
    "replyToEmail",
    "sendDocument",
    "sendEmail",
    "sendGallery",
    "sendPaymentReminder",
    "sendWhatsAppMessage"
  ],
  "auditRecord": {
    "fields": [
      "toolName",
      "args",
      "title",
      "reasoning",
      "riskLevel",
      "autoExecuted",
      "status",
      "result",
      "undoData",
      "reviewedBy",
      "reviewedAt",
      "createdAt"
    ],
    "location": "Tabla `proposed_actions`, visible en la bandeja de propuestas de SofIA.",
    "retention": "Mientras viva la organización: no se purga.",
    "readableBy": [
      "owner",
      "admin",
      "equipo de Hubents"
    ]
  },
  "gates": {
    "locations": [
      "src/lib/ai/action-risk.ts (clasificación, candado explícito y ventana de deshacer)",
      "src/lib/ai/autonomy.ts (niveles ofrecidos y reservados)",
      "src/lib/ai/missions.ts (nivel mínimo para encargar misiones)",
      "src/app/api/agent/autonomy/route.ts (quién puede cambiar el nivel)"
    ],
    "classificationTest": "src/lib/ai/action-risk.test.ts",
    "ladderVsGatesTest": "src/lib/ai/autonomy-statement.test.ts"
  },
  "descent": {
    "latency": "Inmediata: el nivel se lee de la base en cada ejecución, no se cachea. La siguiente acción ya se decide con el nivel nuevo.",
    "workInFlight": "Las misiones en curso se paran con el botón de pánico; las propuestas ya generadas se quedan en la bandeja, que es donde no ejecutan nada.",
    "killSwitch": "Bajar a V0 desde Ajustes › Autonomía de SofIA deja el agente en solo consulta. Además, por debajo de V3 no se auto-ejecuta nada, y el techo invariante no se automatiza en ningún nivel."
  },
  "conformsToProperties": [
    "P1",
    "P2",
    "P3",
    "P4",
    "P5",
    "P6",
    "P7"
  ],
  "deployedDistribution": {
    "V0": 219,
    "V1": 1,
    "V4": 1,
    "V2": 20
  },
  "exercisedAutonomy": {
    "asOf": "2026-09-22",
    "autonomousActionsCommitted": 61,
    "byAction": {
      "updateTask": 37,
      "createTask": 24
    },
    "window": "2026-07-28 to 2026-09-22",
    "undoExercised": 1,
    "missionsRun": 0,
    "proposals": {
      "total": 469,
      "dismissed": 168,
      "pending": 236,
      "autoExecuted": 61,
      "dismissalsWithRecordedReason": 1
    },
    "note": "Un nivel concedido no es un nivel ejercido: esto es lo que SofIA ha comprometido de verdad, no lo que la configuración permite."
  }
}