Nómina
Requisitos previos de acceso
- Permiso (módulo):
processPayroll(controla los botones en la UI) +manageCompanyCharges(crear/editar/eliminar) oviewCompanyCharges(solo listar) — exigidos por el backend - Licencia/Feature: Ninguna específica.
- Contenedor del menú: GENERAL → grupo Cobros (ruta
/manage-payroll)
Qué es / cuándo usar
La Nómina agenda pagos mensuales recurrentes de la empresa a un usuario/empleado — es la operación inversa de los cobros al usuario: aquí el dinero sale de la cuenta del propietario de la empresa (userIdFrom) y entra en la del empleado (userIdTo), cada mes, en el día configurado, hasta la competencia final.
Úsela para salarios, pro-labore, becas, traspasos fijos y cualquier pago periódico a colaboradores. Cada entrada genera un agendamiento mensual; un scheduler en el CustomerProfileService (CPM) se ejecuta periódicamente y procesa cada cuota pendiente — vía cuenta digital (cuando la moneda es BRL y el recurso DIGITAL_BANKING_CHARGES está habilitado) o vía transacción de billetera (token, o BRL sin el recurso de banking).
Requisitos previos
- Permiso:
processPayrollregistrado para el rol (habilita los botones Agregar pago, editar y eliminar en la UI). El backend validamanageCompanyChargespara mutaciones yviewCompanyCharges/manageCompanyChargespara listar. Permiso doble — enum CPM + módulo dinámico en la BD. - Licencia/Feature: Ninguna específica. El comportamiento de pago en
BRLdepende de que el recursoDIGITAL_BANKING_CHARGESesté activado en el tenant. - Dependencias de otras pantallas: el empleado debe existir y tener billetera/cuenta válidas; el propietario de la empresa (owner) es resuelto automáticamente por el backend como pagador. El usuario destino debe estar
APPROVED.
Paso a paso
- Acceda a Cobros → Nómina (ruta
/manage-payroll). - Use la búsqueda para filtrar la lista por nombre o correo electrónico (filtro local).
- Haga clic en Agregar pago para abrir el modal.
- Ingrese el Correo electrónico del empleado, Descripción, Día (1–31), Mes y año del último pago y Monto.
- Confirme. El sistema valida el correo (busca al usuario por la billetera), calcula la fecha del primer pago y la fecha de vencimiento, y guarda el agendamiento.
- Para modificar, use el ícono de lápiz; para eliminar, el de papelera (abre una confirmación en bottom-sheet).
Campos (modal de agendamiento)
| Campo | Qué es | ¿Obligatorio? | Efecto en el sistema/backend |
|---|---|---|---|
| Correo electrónico | Correo del empleado a pagar | Sí (correo válido) | La pantalla busca al usuario mediante getUserByEmailWallet. Si no existe, muestra error y no guarda. El id retornado se convierte en el userIdTo del agendamiento. |
| Descripción | Identificación del pago (ej.: "Salario Junio") | Sí (alfanumérico) | Guarda description; aparece en el extracto/transacción. |
| Día | Día del mes en que ocurre el pago | Sí (1–31) | Define el día de recurrencia. Regla: si el día elegido ya pasó en el mes actual, el primer pago se agenda para el mes siguiente; días inexistentes (ej.: 31 en mes corto) se ajustan al último día del mes. |
| Mes / Año del último pago | Competencia final de la nómina | Sí | Compone la expirationDate. El sistema impide fechas en el pasado (validación errorInLastDate). |
| Monto | Cantidad pagada por mes | Sí | Guarda amountRequested. Tratado como BigNumber en el procesamiento. Mostrado en el listado con la moneda fiduciaria del tenant. |
La moneda predeterminada de las llamadas de nómina es
BRL. El agendamiento hereda los campos de inicio (creationDate, calculada a partir del Día) y fin (expirationDate, a partir de Mes/Año).
Acciones y modales
- Agregar pago: abre el
UserPaymentScheduleModalComponent. Solo habilita confirmar con formulario válido, correo existente y fecha final no pasada →POST /v1/company-charges/createAdmin. El backend define el pagador (userIdFrom) como el owner de la empresa. - Editar (lápiz): abre el mismo modal prellenado →
POST /v1/company-charges/updateAdmin. - Eliminar (papelera): abre un bottom-sheet de confirmación; al confirmar, llama a
POST /v1/company-charges/deleteAdminy recarga la página.
Step-up / MFA
Las operaciones de nómina son movimientos financieros sensibles. Según la configuración del tenant, las acciones de pago pueden exigir step-up (re-autenticación contraseña + MFA, header X-Step-Up-Token, ventana de 5 min). Si se solicita, complete el re-login antes de que la operación sea enviada.
Reglas de negocio / consideraciones
Atención
- El correo electrónico debe corresponder a un usuario existente — de lo contrario la pantalla bloquea el guardado.
- La fecha final no puede estar en el pasado; la pantalla valida e impide confirmar.
- El Día define la primera competencia: días ya vencidos en el mes mueven el primer pago al mes siguiente; 29/30/31 en meses cortos se ajustan al último día.
- La nómina paga al empleado (sale del owner). No la confunda con cobros que debitan al usuario.
Movimiento financiero recurrente
Cada cuota de la nómina transfiere dinero real del owner al empleado. Revise el monto, el día y la competencia final antes de guardar — las cuotas ya pagadas no son revertidas por la eliminación.
- Valores financieros: tratados como BigNumber en el scheduler — sin redondeo; verifique los decimales de la moneda/token.
- Idempotencia: cada cuota usa
externalIdigual aliddel agendamiento de pago. En reprocesamiento tras un crash, FinLib retornaE00021("already processed") — éxito, no error: el monto ya fue pagado y la cuota se marca como aplicada. - Estado APPROVED: el empleado debe estar aprobado para recibir (billetera o cuenta digital).
Ejemplos
Escenario 1 — Salario mensual en BRL vía cuenta digital
Empresa con DIGITAL_BANKING_CHARGES habilitado registra al empleado joao@empresa.com, descripción "Salario", día 5, último pago Diciembre/2026, monto R$ 4.500,00. Si hoy es día 10, el primer pago cae en julio (el día 5 ya pasó). Cada mes hasta diciembre, el scheduler (CPM) acredita R$ 4.500,00 de la cuenta del owner a la cuenta digital de João vía BMS giveUserBalance.
Escenario 2 — Pro-labore en token
El empleado recibe en token (moneda distinta de BRL, o con DIGITAL_BANKING_CHARGES desactivado). Cada cuota se convierte en una transacción de billetera del owner a la billetera del colaborador, por el monto y descripción definidos. Útil cuando el pago se realiza en activo digital y no por cuenta bancaria.
Escenario 3 — Ajuste del monto de un colaborador
RR.HH. aumentó el salario. El operador abre la entrada mediante el lápiz, ajusta el Monto y confirma. El agendamiento se actualiza (updateAdmin) y las próximas cuotas usan el nuevo monto; las cuotas ya pagadas permanecen tal como estaban.