Manual del admin
Manual operativo para administradores en EMA Vault. Tu rol bypassea
todos los canRead/canWrite checks pero todas tus acciones quedan
auditadas vía SQL trigger SECURITY DEFINER.
Tu día típico
Sección titulada «Tu día típico»Tu vista al loguearte:
- Dashboard ejecutivo — KPIs MRR, clientes activos, pipeline value, alertas.
- Notifications — contratos por vencer, obligaciones pendientes, leads fríos.
- System health — documentos fiscales rechazados, conectores con errores, EMI alertas.
Gestionar staff EMA
Sección titulada «Gestionar staff EMA»Crear usuario nuevo
Sección titulada «Crear usuario nuevo»Equipo Vault → + Nuevo usuario.- Email
@emahealth.io+ nombre + rol. - Click
Crear→ INSERT vault_users. - Avisar al usuario que entre con Google.
Cambiar rol
Sección titulada «Cambiar rol»Equipo Vault → click usuario → Cambiar rol.- Nuevo rol del dropdown.
- Save → user re-loguea para refresh del sidebar.
Desactivar usuario
Sección titulada «Desactivar usuario»Equipo Vault → click usuario → Desactivar.is_active=false→ user pierde acceso inmediatamente.- Datos asociados (audit, contratos firmados, leads owned) se preservan.
Provisioning de clientes
Sección titulada «Provisioning de clientes»Workflow completo
Sección titulada «Workflow completo»- Verificar que el cliente esté creado como
organizationcon tipocliente(Pipeline lo crea al convertir, o crear manual enOrganizations). - Llenar el slug (subdominio único).
- Llenar fiscal_config (identificador tributario del país,
certificado digital
.p12, ambiente del organismo fiscal y tipos de documentos habilitados). - Click
Provisionar productos→ seleccionar Lab/Clinic/Well/etc. - Sistema:
- Crea Aidbox
Organizationraíz. - Crea OAuth client per-tenant.
- AES-GCM encrypt secret.
- INSERT
tenant_aidbox_credentials. - Loop POST X-Platform-Key a cada producto.
- INSERT en
emashared.tenants+tenant_productsen cada DB.
- Crea Aidbox
- Click
Invitar admin del cliente→ email + nombre.- Sistema crea user + user_roles
lab_admin(o equivalente). - Cliente recibe email Loops con link de activación.
- Sistema crea user + user_roles
- Verificar tab Productos → cada uno con status
active.
Re-provisionar (idempotente)
Sección titulada «Re-provisionar (idempotente)»Si algo falló, re-correr el provisioning no duplica recursos — el sistema verifica existencia antes de INSERT.
Suspender / reactivar tenant
Sección titulada «Suspender / reactivar tenant»Clientes → click tenant → Tab Productos.- Click
Suspenderen producto específico. - PATCH
/api/platform/tenants/:id/statuscon status=suspended. - Tenant pierde acceso a ese producto pero datos se preservan.
- Reactivar con click → status=active.
EMI access matrix
Sección titulada «EMI access matrix»- Ir a
EMI access admin. - Ver matriz tenants × apps EMI (clinic, lab, well, vault, landing).
- Toggle ON/OFF cada celda →
tenant_emi_access.is_active. - Cuando OFF → drawer EMI escondido en ese product, calls 403.
Audit log
Sección titulada «Audit log»Audit log te muestra toda mutación de 12 tablas críticas:
- contracts, finance_entries, mrr_entries, fiscal_config
- organizations, tenants, vault_users, vault_permissions
- products, releases, leads, invoices
Filtros:
- User: quién.
- Table: qué tabla.
- Action: INSERT/UPDATE/DELETE.
- Date range: cuándo.
Secrets sanitizados automáticamente (passwords, API keys, etc.).
Ejemplos útiles
Sección titulada «Ejemplos útiles»-- ¿Quién canceló contratos esta semana?WHERE table_name='contracts' AND action='UPDATE' AND after->>'status'='cancelled' AND created_at >= now() - interval '7 days'
-- ¿Cambios fiscales en el último mes?WHERE table_name='fiscal_config' AND created_at >= now() - interval '30 days'
-- ¿Quién activó/desactivó usuarios?WHERE table_name='vault_users' AND action='UPDATE'Permisos granulares
Sección titulada «Permisos granulares»Si un usuario reporta que no puede acceder a algo:
- Ver su rol en
Equipo Vault. - Ver
vault_permissionspara ese rol × módulo. - Si
can_read=falsepara módulo necesario:- Cambiar rol a uno más permisivo.
- O agregar fila granular:
INSERT vault_permissions (role='X', module='Y', can_read=true).
Configuración del sistema
Sección titulada «Configuración del sistema»Settings:
- Brand assets — logo, colors.
- CSP whitelist — agregar dominios al CSP (requiere deploy nuevo).
- Cron schedules — ver crons activos.
- Feature flags — toggle features experimentales.
Lo que SÍ puedes hacer (poder total)
Sección titulada «Lo que SÍ puedes hacer (poder total)»- Cualquier acción en el sistema.
- Provisionar tenants.
- Cambiar fiscal config.
- Anular documentos fiscales emitidos.
- Desactivar usuarios.
- Cambiar permisos.
- Acceder a audit log completo.
- Configurar EMI access.
Lo que NO debes hacer (aunque puedas)
Sección titulada «Lo que NO debes hacer (aunque puedas)»- Provisionar clientes sin contrato firmado — siempre confirmar.
- Cambiar fiscal_config sin aprobación del cliente — los cambios al organismo fiscal son legales.
- Eliminar rows — siempre soft-delete o desactivar.
- Compartir tu password — cada admin con su user, audit es por user_id.
- Skipping audit — el audit_trigger es defense-in-depth.
- Modificar audit_log directamente — es append-only por diseño.
Atajos útiles
Sección titulada «Atajos útiles»| Atajo | Acción |
|---|---|
g luego c | Clientes |
g luego e | Equipo Vault |
g luego a | Audit log |
g luego s | Settings |
Buenas prácticas
Sección titulada «Buenas prácticas»- Audit log review semanal — revisa eventos críticos.
- Provisioning con doble check — confirma slug + fiscal antes.
- Invitations a clientes — verifica email correcto antes.
- Monitor crons — GitHub sync, alertas contratos.
- Rotar secrets cada 6-12 meses (PLATFORM_API_KEY, EMI_API_KEY, etc.) coordinado con productos cliente.
- Backup restore drill — Supabase backups son automáticos pero practicar restore.
- Onboarding staff EMA — crear vault_user inmediatamente al contratarlos.
- Offboarding staff EMA — desactivar el mismo día que terminan.