Version: 1.0
Fecha: 1 de Julio, 2026
Arquitecto: Carlos Alberto Torres Camargo
Fuente de verdad del modelo de autorizacion de Nebula ERP: el catalogo canonico de acciones, el catalogo de roles del ERP financiero (publico/privado) y como se relacionan. Base de configuracion extensible para todo el equipo.
Simappe/Nebula separa la autorizacion en dos contextos sobre el mismo recurso:
| Contexto | Que responde | Donde vive |
|---|---|---|
| Accesos | Que opciones/recursos alcanza un rol | Vista v_menu / admin.customer_role_option; viaja en el rol del JWT |
| Comportamientos (acciones) | Que acciones puede ejecutar el rol sobre cada recurso | admin.action + admin.role_action + admin.role_option_action |
Regla clave: el JWT NO transporta acciones. Los accesos (roles/opciones) van en el token; las acciones se resuelven bajo demanda en el endpoint POST /api/v1/menu-with-actions/by-roles, que devuelve el menu agrupado con cada opcion enriquecida con su mapa actionCode -> isGranted (campo OptionMenuDto.actions).
Resolucion de acciones (cuando un usuario tiene varios roles):
(opcion, accion) se considera cualquier rol del usuario que la defina (role_option_action, o role_action como fallback general).customer_role.precedence mas baja (menor = mayor prioridad). Empate: gana el customer_role.id menor.
admin.role_permissionyPermissionTypequedaron DEPRECATED (migracion V4.4.0). No agregar nuevos consumidores.
admin.action — code unico en MAYUSCULAS, is_system=TRUE (base, no eliminable). Codigos custom con prefijo CUSTOM_.
| # | code | nombre | categoria | descripcion |
|---|---|---|---|---|
| 1 | LIST |
Listar | Lectura | Ver el listado de registros |
| 2 | SEARCH |
Buscar | Lectura | Busqueda/filtrado |
| 3 | VIEW |
Ver detalle | Lectura | Abrir el detalle de un registro |
| 4 | CREATE |
Crear | CRUD | Crear un nuevo registro |
| 5 | EDIT |
Editar | CRUD | Abrir en modo edicion |
| 6 | SAVE |
Guardar | CRUD | Persistir cambios |
| 7 | UPDATE |
Actualizar | CRUD | Actualizar/refrescar |
| 8 | DELETE |
Eliminar | CRUD | Eliminar |
| 9 | ACTIVATE |
Activar | Estado | Activar/habilitar |
| 10 | DEACTIVATE |
Inactivar | Estado | Inactivar (soft-delete por estado) |
| 11 | EXPORT |
Exportar | Datos/salida | Exportar (CSV/Excel/PDF) |
| 12 | IMPORT |
Importar | Datos/salida | Importar/cargar masivo |
| 13 | PRINT |
Imprimir | Datos/salida | Imprimir/generar PDF |
| 14 | DOWNLOAD |
Descargar | Datos/salida | Descargar archivo/documento |
| 15 | DUPLICATE |
Duplicar | Datos/salida | Duplicar/clonar |
| 16 | APPROVE |
Aprobar | Transaccional | Aprobar registro/solicitud |
| 17 | REJECT |
Rechazar | Transaccional | Rechazar registro/solicitud |
| 18 | ANNUL |
Anular | Transaccional | Anular registro/transaccion |
| 19 | POST |
Contabilizar | Transaccional | Contabilizar/mayorizar |
| 20 | REVERSE |
Reversar | Transaccional | Reversar movimiento contabilizado |
| 21 | RECONCILE |
Conciliar | Transaccional | Conciliacion (bancaria) |
| 22 | CLOSE |
Cerrar periodo | Transaccional | Cerrar periodo contable |
| 23 | REOPEN |
Reabrir periodo | Transaccional | Reabrir periodo contable |
| 24 | GENERATE |
Generar | Transaccional | Generar formato/reporte o proceso (diferido/amortizacion/depreciacion) |
| 25 | VALIDATE |
Validar | Auxiliar | Validar datos/reglas antes de una operacion |
| 26 | CONFIGURE |
Configurar | Auxiliar | Configurar parametros/opciones de pantalla |
Derivadas de las 12 HU_CON entregadas (verbos de botones/CAs) y del front nebula-erp implementado (can*, AUTHORITIES, estados y flujos aprobar/anular/rechazar/contabilizar/reversar/conciliar/cierre).
Bloques que se combinan para formar el perfil de cada rol (role_action):
| Perfil | Acciones incluidas |
|---|---|
| L Lectura | LIST, SEARCH, VIEW, EXPORT, PRINT, DOWNLOAD |
| O Operacion | L + CREATE, EDIT, SAVE, UPDATE, DELETE, ACTIVATE, DEACTIVATE, IMPORT, DUPLICATE, VALIDATE, GENERATE |
| T Transaccional | O + POST, RECONCILE |
| A Aprobacion | L + APPROVE, REJECT |
| N Anulacion | L + ANNUL, REVERSE |
| KC Cierre | CLOSE |
| KO Reapertura | REOPEN |
| CFG Configuracion | CONFIGURE |
| ALL | las 26 |
Modelo: rol por cargo (acceso + accion) + roles de accion componibles (APROBADOR/ANULADOR). Set completo para ERP publico/privado, configurable por tenant.
Modulos: CON contabilidad · PRE presupuesto · TES tesoreria · NOM nomina · RRHH · AF activos fijos · IMP impuestos · CTR contratistas · CRM · PRY proyectos · FAC facturacion
| # | code (authority) | nombre | tier | perfil | modulos | sector |
|---|---|---|---|---|---|---|
| 1 | ROOT |
Superadministrador | Sistema | ALL | todos | Ambos |
| 2 | ADMIN |
Administrador de empresa | Sistema | O+CFG | todos | Ambos |
| 3 | USER |
Usuario consulta | Lectura | L | asignados | Ambos |
| 4 | AUDITOR |
Auditor | Lectura | L | todos | Ambos |
| 5 | REVISOR_FISCAL |
Revisor fiscal | Lectura | L | CON,PRE,TES,IMP,FAC | Ambos* |
| 6 | OPERADOR |
Operador / digitador | Operativo | O | asignados | Ambos |
| 7 | SECRETARIA |
Secretaria | Operativo | O | CTR,PRY,CRM | Ambos |
| 8 | AUXILIAR_CONTABLE |
Auxiliar contable | Operativo | O | CON | Ambos |
| 9 | CAJERO |
Cajero / pagador | Operativo | O | TES | Ambos |
| 10 | FACTURADOR |
Facturador | Operativo | O | FAC | Ambos |
| 11 | LIQUIDADOR_NOMINA |
Liquidador de nomina | Operativo | O | NOM | Ambos |
| 12 | ACCOUNTANT |
Contador | Jefatura | T+KC | CON | Ambos |
| 13 | TESORERO |
Tesorero | Jefatura | T+A | TES | Ambos |
| 14 | JEFE_PRESUPUESTO |
Jefe de presupuesto | Jefatura | T+A | PRE | Ambos** |
| 15 | JEFE_NOMINA |
Jefe de nomina | Jefatura | T+A | NOM | Ambos |
| 16 | JEFE_RRHH |
Jefe de RRHH | Jefatura | O+A | RRHH | Ambos |
| 17 | ADMIN_ACTIVOS |
Administrador de activos fijos | Jefatura | T | AF | Ambos |
| 18 | JEFE_IMPUESTOS |
Jefe de impuestos | Jefatura | T | IMP | Ambos |
| 19 | SUPERVISOR_CONTRATOS |
Supervisor de contratos | Jefatura | O+A | CTR,PRY | Ambos |
| 20 | GERENTE_COMERCIAL |
Gerente comercial | Jefatura | O+A | CRM | Ambos |
| 21 | GERENTE_PROYECTO |
Gerente de proyecto | Jefatura | O+A | PRY | Ambos |
| 22 | SECRETARIA_GENERAL |
Secretaria general | Direccion | A | CTR,PRY (L: todos) | Ambos* |
| 23 | GERENTE_FINANCIERO |
Gerente financiero (CFO) | Direccion | A+KC+KO | CON,PRE,TES,NOM,AF,IMP,FAC | Ambos |
| 24 | ORDENADOR_GASTO |
Ordenador del gasto | Direccion | A | PRE,TES,CTR | Publico |
| 25 | APROBADOR |
Aprobador (componible) | Accion | A | — | Ambos |
| 26 | ANULADOR |
Anulador (componible) | Accion | N | — | Ambos |
* REVISOR_FISCAL y SECRETARIA_GENERAL: obligatorios en publico, opcionales en privado.
** JEFE_PRESUPUESTO: ciclo CDP/RP en publico; aprobacion por centro de costo en privado.
ORDENADOR_GASTO se crea INACTIVE (se activa en tenants del sector publico).
Segregacion de funciones: quien captura (OPERADOR/AUXILIAR/CAJERO/FACTURADOR/LIQUIDADOR) no aprueba; quien aprueba (TESORERO/JEFE_/GERENTE_/ORDENADOR) no captura; anulacion/reversion aparte (ANULADOR); fiscalizacion solo lectura (AUDITOR/REVISOR_FISCAL).
role_action, perfil general)X = is_granted=TRUE. REOPEN reservado a ROOT y GERENTE_FINANCIERO.
| Accion \ Rol | ROOT | ADMIN | CONSULTA/AUDITOR/REV.FISCAL | OPERADOR y operativos | CONTADOR | TESORERO/JEFES-T | O+A (RRHH/Superv./Gtes) | ADMIN_ACTIVOS/JEFE_IMP | APROBADOR/ORDENADOR/SECR.GRAL | ANULADOR | GTE_FINANCIERO |
|---|---|---|---|---|---|---|---|---|---|---|---|
| LIST/SEARCH/VIEW/EXPORT/PRINT/DOWNLOAD | X | X | X | X | X | X | X | X | X | X | X |
| CREATE/EDIT/SAVE/UPDATE/DELETE/ACTIVATE/DEACTIVATE/IMPORT/DUPLICATE/VALIDATE/GENERATE | X | X | X | X | X | X | X | ||||
| POST / RECONCILE | X | X | X | X | |||||||
| APPROVE / REJECT | X | X | X | X | X | ||||||
| ANNUL / REVERSE | X | X | |||||||||
| CLOSE | X | X | X | ||||||||
| REOPEN | X | X | |||||||||
| CONFIGURE | X | X |
role_actiones el perfil general (aplica a todas las opciones del rol). El afinamiento por opcion se hace conrole_option_action. En el front (camino B), cada vista consume solo las acciones de sus propios botones.
X acceso operativo · L solo lectura · vacio sin acceso. Referencia para customer_role_option por tenant.
| Rol \ Modulo | CON | PRE | TES | NOM | RRHH | AF | IMP | CTR | CRM | PRY | FAC |
|---|---|---|---|---|---|---|---|---|---|---|---|
| ROOT / ADMIN | X | X | X | X | X | X | X | X | X | X | X |
| CONSULTA / AUDITOR | L | L | L | L | L | L | L | L | L | L | L |
| REVISOR_FISCAL | L | L | L | L | L | ||||||
| OPERADOR | X | X | X | X | X | X | X | X | X | X | X |
| SECRETARIA | X | X | X | ||||||||
| AUXILIAR_CONTABLE | X | ||||||||||
| CAJERO | X | ||||||||||
| FACTURADOR | X | ||||||||||
| LIQUIDADOR_NOMINA | X | ||||||||||
| CONTADOR | X | L | L | L | L | ||||||
| TESORERO | X | ||||||||||
| JEFE_PRESUPUESTO | X | ||||||||||
| JEFE_NOMINA | X | ||||||||||
| JEFE_RRHH | L | X | |||||||||
| ADMIN_ACTIVOS | X | ||||||||||
| JEFE_IMPUESTOS | L | X | L | ||||||||
| SUPERVISOR_CONTRATOS | X | X | |||||||||
| GERENTE_COMERCIAL | X | L | |||||||||
| GERENTE_PROYECTO | X | X | |||||||||
| SECRETARIA_GENERAL | L | L | L | L | L | L | L | X | L | X | L |
| GERENTE_FINANCIERO | X | X | X | X | X | X | X | ||||
| ORDENADOR_GASTO | X | X | X |
admin.action (codigo UPPERCASE, CUSTOM_ si es de cliente); actualizar seccion 2 y los perfiles (seccion 3) que la incluyan.admin.role (id libre), definir su perfil (bloques) en seccion 4, expandir en role_action; documentar modulos (seccion 6).role_option_action (override por rol+opcion); no altera el perfil general.customer_role (con precedence) + customer_role_option (accesos) por empresa.| Componente | Estado |
|---|---|
Modelo de datos (action, role_action, role_option_action, precedence) |
Implementado (migracion V4.4.0) |
Endpoint menu-with-actions/by-roles + OptionMenuDto.actions |
Implementado (SimappeAdmin, desde 3.3.0) |
Catalogo de 26 acciones + 26 roles + perfiles role_action |
Cargado en DEV |
role_option_action por opcion (dominio fino) |
Cargado: dominio de los 12 maestros de contabilidad |
precedence unica por cliente + UK (customer_id, precedence) |
Aplicado en DEV (migracion V4.5.0) |
| Consumo en el front (camino B: leer acciones al abrir la vista) | Pendiente |
Ver tambien: Matriz Roles y Permisos Core.
Tenant de desarrollo Nebula, customer_id = 7. Estado cargado (2026-07-01):
customer_role (catalogo completo instanciado) con precedence unica por cliente (UK uq_customer_role_customer_id_precedence; menor = mayor prioridad).admin.action) + perfiles role_action de los 26 roles.role_option_action de los 12 maestros de contabilidad bajo ROOT/ACCOUNTANT/DEVELOPER.Todos pertenecen a customer 7 y conservan DEVELOPER como rol base.
| Usuario | Roles asignados (orden por precedence) |
|---|---|
| dev001@nebula | APROBADOR, DEVELOPER |
| dev002@nebula | ANULADOR, DEVELOPER |
| dev003@nebula | ACCOUNTANT, APROBADOR, DEVELOPER |
| front001@nebula | OPERADOR, DEVELOPER |
| front002@nebula | AUDITOR, DEVELOPER |
| front003@nebula | ACCOUNTANT, DEVELOPER |
Sobre la opcion opt_accrual_approval (148) se cargo ACCOUNTANT.APPROVE=false (override por opcion) mientras APROBADOR.APPROVE=true (general). Resultado verificado en datos:
| Usuario | Roles que definen APPROVE | Rol ganador (menor precedence) | APPROVE efectivo |
|---|---|---|---|
| dev001 | APROBADOR(220) | APROBADOR | true |
| dev003 | ACCOUNTANT(120), APROBADOR(220) | ACCOUNTANT | false |
Demuestra la regla: en colision gana el valor del rol con menor precedence (mayor prioridad). No es deny-override.
customer_role_option por rol (matriz de la seccion 6) + vinculo APPROVE/ANNUL a las opciones transaccionales. Parcialmente bloqueado: faltan opciones de varios modulos (nomina, activos, etc.) en DEV.Entregable Arquitectura - Modelo de Autorizacion Nebula ERP
Version 1.1 - Proyecto Nebula ERP