PruvaGuías

Habilitaciones

Si el espacio de trabajo ha pagado un módulo, y qué permite cada estado.

Una habilitación registra si un espacio de trabajo tiene un módulo. Hay una por módulo. Cada una registra el paquete con el que se compró (Essentials, Operations, Professional, Complete o Enterprise; un paquete sectorial registra el paquete que necesita su número de módulos Pro; Safety Vision es su propia línea, safety-vision, en el módulo de cámaras; los pedidos anteriores al 20 de octubre de 2026 conservan Lite, Base, Standard o Advanced), el SKU, un estado y un interruptor enabled que controla el propietario.

Estados

EstadoNivel más alto que obtiene cualquieraCuándo
lockednoneNunca comprado, o vencido después del día 30. Las habilitaciones nuevas empiezan aquí.
activesegún lo concedidoPagado y vigente.
gracesegún lo concedidoEl pago falló. Acceso completo durante 7 días mientras se corrige.
read_onlyviewDel día 8 al día 30 tras un pago fallido. Puede leer y exportar, no cambiar ni enviar.

Después del bloqueo, los datos se guardan 90 días.

Si el propietario apaga un módulo (enabled = false), todo el mundo obtiene none para él, sea cual sea el estado. Un módulo locked no se puede activar.

Quién puede cambiar qué

  • Solo la tienda puede cambiar el paquete, el SKU, el estado o el fin del periodo. En esta versión eso es el pago de demo del sitio, que envía un mensaje firmado a la aplicación.
  • El propietario solo puede cambiar enabled, y solo cuando el módulo no está bloqueado.
  • Ningún usuario, incluido el propietario, puede desbloquear un módulo editando la base de datos. Las columnas no se pueden escribir para los usuarios que han iniciado sesión.

El mensaje de la tienda

El pago de demo del sitio construye un cuerpo como este:

{ "orderId": "PV-…", "workspaceSlug": "aurora-marine", "sku": "tanker", "modules": ["noon", "emissions", "documents", "pms", "insurance"], "vessels": 4, "state": "active", "annualUsd": 57800, "oneOffUsd": 19944, "firstChargeUsd": 77744, "consent": { … }, "term": { … }, "trial": { … }, "chargeTodayUsd": 0, "payment": { "provider": "demo", "reference": "pm_demo_visa_4242", … } }

Firma timestamp.body con HMAC-SHA256 usando un secreto compartido y envía la marca de tiempo y la firma en las cabeceras x-pv-timestamp y x-pv-signature a /api/entitlements en la aplicación. La aplicación rechaza una firma incorrecta y cualquier cosa de más de 5 minutos.

El secreto es PRUVA_ENTITLEMENTS_SECRET. En el modo demo fuera de producción se usa un valor local fijo cuando no está definido. El modo de base de datos local escribe con el rol de servicio, así que ahí la aplicación exige un secreto real: defina el mismo PRUVA_ENTITLEMENTS_SECRET para la aplicación y el sitio. En producción el sitio se niega a firmar sin él.

En esta página