---
audiencia: usuario
screen_key: rrhh
aliases: [rrhh, recursos humanos, empleados, legajos, legajo, presentismo, marcaciones, reloj, turnos, asignacion de turnos, asignación de turnos, permisos rrhh, tolerancias, novedades, liquidacion, liquidación, sueldos, salarios, planilla, recibo, recibos de sueldo, ips, reop, acreditacion bancaria, acreditación bancaria, vacaciones, anticipo, prestamo, préstamo, desvinculacion, desvinculación, finiquito, organigrama, cargos, departamentos, centros de costo, aguinaldo, subsidio familiar]
titulo: Recursos Humanos (RRHH)
---

# Recursos Humanos (RRHH) — Guía para el Usuario

Esta guía cubre el módulo **RRHH**: legajos, empleados, presentismo (relojes, turnos, marcaciones, permisos, tolerancias y novedades), liquidación de sueldos (mensual, quincenal, aguinaldo, vacaciones, finiquito), IPS / REOP, acreditaciones bancarias, vacaciones, anticipos, préstamos, planillas externas y desvinculaciones, con sus impactos contables y reportes.

---

## ¿Dónde encuentro esto en el menú?

Módulo **RRHH** con pestañas internas. Las pestañas críticas son:

- **Empleados** — alta, edición, accesos directos al legajo.
- **Liquidaciones** (mensual / quincenal / aguinaldo / vacaciones).
- **Comisiones** — pool de comisiones de vendedores/cobradores vinculados a un empleado RRHH, con aprobación/rechazo antes de incluirlas en la liquidación.
- **IPS / REOP**.
- **Acreditaciones bancarias**.
- **Desvinculaciones** (finiquito).
- **Vacaciones**.
- **Novedades de Presentismo** — pestaña única (no un sub-tab de Presentismo) donde se cargan novedades manuales y también se dispara el motor M19 de procesamiento del período.
- **Anticipos**.
- **Viáticos** — rendiciones y adelantos de viáticos (pestaña visible solo con el permiso `RH_VIA_RENDICION_VER`).
- **Préstamos**.
- **Planillas externas** (importación CSV/XLSX).
- **Presentismo** (sub-tabs: Relojes, Turnos, Asignación turnos, Marcaciones, Permisos, Tolerancias, Log de correcciones — la pestaña "Novedades" NO está acá, es una pestaña propia del módulo).
- **Legajos** (Por Funcionario, Dashboard de vencimientos, Consulta avanzada, Catálogo de tipos de documento).
- **Configuración** (Cargos, Departamentos, Centros de Costo, Tipos de empleado, Conceptos de liquidación, Parámetros del sistema, Formatos bancarios).

Reportes: viven dentro del propio módulo RRHH (pestaña IPS/REOP, Dashboard de vencimientos de Legajos, Consulta de Presentismo, etc.) — no hay una sección "RRHH" dentro de Reportes general; ese módulo agrupa Ventas, Administrativos y Financieros, Inventario, Traslados, Fiscal, Contabilidad, Cobranzas y Auditoría, sin RRHH.

---

## Conceptos generales

### Tipos de empleado

Cada empleado tiene un **Tipo** (catálogo configurable) que define dos flags clave:

- **Aporta IPS** (sí / no).
- **Recibe aguinaldo** (sí / no).

Estos flags se respetan en los motores de liquidación y de IPS/REOP.

### Estados clave

| Entidad | Estados |
|---------|---------|
| **Liquidación** | BORRADOR → PRE_LIQUIDACIÓN → CERRADA (inmutable). |
| **Asignación de turno** | PERPETUA (vigencia abierta) / OCASIONAL (rango cerrado). OCASIONAL tiene prioridad sobre PERPETUA. |
| **Permiso de presentismo** | PENDIENTE → APROBADO / RECHAZADO. |
| **Novedad de presentismo** | CONFIRMADA / ANULADA. Si tiene `liquidacion_id`, no se anula sin anular antes la liquidación. |
| **Documento de legajo** | ACTIVO / REEMPLAZADO / ANULADO. |
| **IPS / REOP** | GENERADO → DECLARADO → PAGADO. |
| **Acreditación bancaria** | GENERADO → ENVIADO → CONFIRMADO. |
| **Préstamo** | ACTIVO / CANCELADO / SUSPENDIDO. |
| **Anticipo** | PENDIENTE / APROBADO / ANULADO. |
| **Desvinculación** | CALCULADO → APROBADO → PAGADO. |

### Permisos del módulo

Los submódulos usan el prefijo `RRHH_<NOMBRE>` (ej. `RRHH_EMPLEADOS`, `RRHH_LIQUIDACIONES`); los privilegios individuales dentro de cada submódulo usan el formato `RH_<SUB3>_<RECURSO>_<ACCION>` (prefijo `RH_`, no `RRHH_`):

| Grupo (submódulo) | Privilegios |
|-------|---------|
| **Empleados** (`RRHH_EMPLEADOS`) | `RH_EMP_EMPLEADO_CREAR/EDITAR/ELIMINAR/EXPORTAR/VER`. |
| **Estructura y parámetros** (`RRHH_CONFIG`) | `RH_CFG_CATALOGO_EDITAR/VER` (cargos, departamentos, centros de costo, tipos de documento), `RH_CFG_PARAMETRO_EDITAR/VER`. |
| **Conceptos de liquidación** (`RRHH_CONCEPTOS`) | `RH_CON_CONCEPTO_CREAR/EDITAR/ELIMINAR/VER`. |
| **Liquidación** (`RRHH_LIQUIDACIONES`) | `RH_LIQ_LIQUIDACION_CREAR` (calcular), `RH_LIQ_LIQUIDACION_APROBAR` (cerrar: PRE_LIQUIDACIÓN → CERRADA), `RH_LIQ_LIQUIDACION_PAGAR`, `RH_LIQ_LIQUIDACION_ANULAR`, `RH_LIQ_LIQUIDACION_VER`. |
| **IPS** (`RRHH_IPS`) | `RH_IPS_IPS_GENERAR`, `RH_IPS_IPS_EXPORTAR`, `RH_IPS_IPS_VER`. |
| **Acreditación bancaria** (`RRHH_BANCARIO`) | `RH_BAN_ACREDITACION_GENERAR/VER`, `RH_BAN_FORMATO_EDITAR`. |
| **Comisiones** (`RRHH_COMISIONES`) | `RH_COM_COMISION_VER`, `RH_COM_COMISION_IMPORTAR`, `RH_COM_COMISION_REVISAR`. |
| **Desvinculaciones** (`RRHH_DESVINCULACIONES`) | `RH_DES_DESVINCULACION_CREAR/EDITAR/PROCESAR/VER`. |
| **Reportes** (`RRHH_REPORTES`) | `RH_REP_REPORTE_VER`, `RH_REP_REPORTE_EXPORTAR`. |
| **Vacaciones** (`RRHH_VACACIONES`) | `RH_VAC_VACACION_APROBAR/CREAR/EDITAR/ELIMINAR/VER`. |
| **Anticipos y Préstamos** (`RRHH_ANTICIPOS`) | `RH_ANT_ANTICIPO_CREAR/EDITAR/ELIMINAR/VER`, `RH_ANT_PRESTAMO_CREAR/EDITAR/ELIMINAR/VER`. |
| **Viáticos** (`RRHH_VIATICOS`) | `RH_VIA_RENDICION_VER/CREAR/APROBAR/ANULAR`, `RH_VIA_GASTO_CARGAR`, `RH_VIA_CIERRE_EJECUTAR`, `RH_VIA_CXP_PAGAR`, `RH_VIA_CONFIG_EDITAR`. |
| **Presentismo — marcaciones** (`RRHH_MARCACIONES`) | `RH_MAR_MARCACION_CREAR/EDITAR/ELIMINAR/EXPORTAR/VER`. |
| **Presentismo — turnos** (`RRHH_TURNOS`) | `RH_TUR_TURNO_CREAR/EDITAR/ELIMINAR/VER`. |
| **Presentismo — permisos** (`RRHH_PERMISOS`) | `RH_PER_PERMISO_APROBAR/CREAR/EDITAR/ELIMINAR/VER`. |
| **Novedades** (`RRHH_NOVEDADES`) | `RH_NOV_NOVEDAD_CREAR/EDITAR/ELIMINAR/VER`. |
| **Planillas externas / MTESS** (`RRHH_PLANILLAS`) | `RH_PLA_PLANILLA_GENERAR/EXPORTAR/VER`. |
| **Legajos** (`RRHH_LEGAJOS`) | `RH_LEG_LEGAJO_CREAR/EDITAR/ELIMINAR/VER`, `RH_LEG_DOCUMENTO_CREAR/ELIMINAR/VER`. |
| **Vencimientos** (`RRHH_VENCIMIENTOS`) | `RH_VEN_VENCIMIENTO_VER`. |
| **Liquidaciones IA** (`RRHH_LIQUIDACIONES_IA`, addon) | `RH_LIA_LIQ_IA_PROCESAR/VER`. |

---

## Configuración del módulo (paso obligatorio antes de operar)

### Catálogos

- **Cargos**: con rango salarial sugerido (mín / máx).
- **Departamentos**: con responsable asignado.
- **Centros de Costo**: cada uno con cuenta contable destino (para imputar gasto de sueldos).
- **Tipos de empleado**: flags `aporta_ips`, `recibe_aguinaldo`.
- **Conceptos de liquidación**: catálogo de haberes / descuentos. Cada concepto define: tipo (INGRESO / EGRESO), monto fijo o porcentaje, si **afecta base IPS**, si **afecta aguinaldo**, si impacta liquidación.
- **Tipos de documento del legajo** (14 del sistema + propios): CI, CONTRATO, ALTA_IPS, FOTO_PERFIL, CERTIFICADO_MED, TITULO_HABILITANTE, ANTECEDENTE_POL, ANTECEDENTE_JUD, RUC, MODIF_CONTRATO, RECIBO_SUELDO, CERT_BANCARIO, DESVINCULACION, OTRO. Cada tipo define: vencimiento obligatorio sí/no, admite múltiples versiones sí/no.
- **Formatos bancarios**: plantillas TXT por banco (separadores, posicionamiento, headers/footers) para acreditaciones.

### Parámetros del sistema (versionados por vigencia)

| Parámetro | Default | Uso |
|-----------|---------|-----|
| `IPS_PORCENTAJE_OBRERO` | 9 % | Aporte del trabajador. |
| `IPS_PORCENTAJE_PATRONAL` | 16,5 % | Aporte del empleador. |
| `IPS_PORCENTAJE_ADMIN` | 1 % | Aporte administrativo IPS. |
| `SMLV_MENSUAL` / `SMLV_DIARIO` | (vigente Paraguay) | Base mínima de cálculo. |
| `HORAS_LABORALES_MES` | 200 | Para descuentos por hora. |
| `LIMITE_DESCUENTO_SALARIO` | 30 % | Tope total descuentos (Art. 240 CT). |
| `LIMITE_EMBARGO_JUDICIAL` | 50 % | Tope embargo. |
| `SUBSIDIO_FAMILIAR_PORCENTAJE` | 5 % | Si aplica al cargo. |
| `PORCENTAJE_MICROEMPRESA_BASE_IPS` | 0,80 | Piso de base IPS para régimen MICROEMPRESA_80. |
| `PERMITIR_NETO_NEGATIVO_EXCEPCION` | false | Habilita cerrar con neto negativo, con motivo y auditoría. |
| `DIAS_BASE_LIQUIDACION` | 0 | Días base del mes (0 = días reales del mes). |
| `HEREDAR_DESCUENTOS_MANUALES_MES_CERRADO` | false | Arrastra descuentos manuales al período siguiente. |
| `PRESENTISMO_TOLERANCIA_ENTRADA_MIN` | 5 | Minutos tolerados a la entrada. |
| `PRESENTISMO_TOLERANCIA_SALIDA_MIN` | 5 | Minutos tolerados a la salida. |
| `PRESENTISMO_GENERAR_NOVEDAD_AUTOMATICA` | true | El motor M19 genera novedades sin intervención. |
| `PRESENTISMO_HORAS_AUSENCIA_MEDIA_JORNADA` | 4 | Umbral para considerar media jornada. |
| `LEGAJO_DIAS_ALERTA_VENCIMIENTO` | 30 | Días antes del vencimiento para alertar. |
| `LEGAJO_TAMANIO_MAX_ARCHIVO_MB` | 20 | Tamaño máximo por documento (tope duro 25 MB). |
| `LEGAJO_MIME_HABILITADOS` | (lista) | Tipos de archivo aceptados. |
| `LEGAJO_ALERTAS_EMAIL_HABILITADO` | true | Envío diario de alertas de vencimiento. |
| `LEGAJO_DIAS_ANTICIPACION_EMAIL` | 30,15,7 | Días de anticipación de cada aviso. |
| `LEGAJO_COMPLETITUD_OBLIGATORIO_BLOQUEA` | false | Si bloquea finiquito sin docs obligatorios. |
| `LEGAJO_PRESIGNED_URL_EXPIRY_SEC` | 900 | Vida útil de URL para descargar documento. |

Son 24 parámetros sembrados por defecto. Los porcentajes se guardan como fracción (0,09 = 9 %).

### Conceptos seed del sistema

Vienen precargados y no se eliminan (17): `SALARIO_BASE`, `SALARIO_PROPORCIONAL`, `HORAS_EXTRA_50`, `HORAS_EXTRA_100`, `SUBSIDIO_FAMILIAR`, `COMISION_VENTAS`, `BONO_DESEMPENO`, `AGUINALDO`, `PAGO_VACACIONES`, `ANTICIPO_QUINCENAL`, `IPS_OBRERO`, `IPS_PATRONAL`, `IPS_ADMIN`, `CUOTA_PRESTAMO`, `PAGO_QUINCENAL`, `DESCUENTO_AUSENCIA`, `DESCUENTO_TARDANZA`.

---

## Empleados

ABM con datos personales (CI, nombre, fecha de ingreso, tipo, cargo, departamento, sucursal, centro de costo) + datos de liquidación (salario base, banco / CBU, régimen IPS — GENERAL o MICROEMPRESA_80).

- `aporta_ips` y `recibe_aguinaldo` se heredan del **Tipo de empleado**.
- Empleado **desvinculado** queda bloqueado para nuevas liquidaciones y no procesa novedades de presentismo.
- Botón **"Ver legajo"** navega al tab Legajos del funcionario.

---

## Legajos (gestión documental)

Sub-tabs:

1. **Por Funcionario** — visor con completitud visual (qué documentos obligatorios faltan), botones para subir, reemplazar, anular versión.
2. **Dashboard de vencimientos** — 3 vistas (vencidos / por vencer ≤ N días / vigentes) + envío diario por email 9:00.
3. **Consulta avanzada** — filtros múltiples (funcionario, tipo, estado, rango fechas, vencimiento) + exportación Excel.
4. **Catálogo de tipos** — ABM. Los del sistema son solo lectura.

### Reglas operativas

- Validación de archivos por **magic bytes**, no por extensión (PDF, DOCX, JPG/PNG, etc.).
- **Tamaño** validado antes del stream (interceptor) → si excede → HTTP 413.
- Documentos descargables vía **presigned URL** con expiración de 15 min — nunca públicas.
- Documento marcado como **REEMPLAZADO** o **ANULADO** queda en el historial. ⚠️ Hoy el historial lo ve **cualquier usuario con `RH_LEG_DOCUMENTO_VER`**, el mismo permiso que el listado normal: no hay restricción a perfiles de auditoría. Si se necesita acotarlo, hay que crear un privilegio propio.
- Si `LEGAJO_COMPLETITUD_OBLIGATORIO_BLOQUEA = true` → no se calcula finiquito hasta tener todos los obligatorios.
- **Purga física** del cloud (DO Spaces) es manual; el ERP marca lógicamente pero no borra el archivo automáticamente.

---

## Presentismo

Motor unificado (M16–M22) que toma marcaciones, las cruza con turnos y permisos y genera **novedades** que después la liquidación consume como descuentos.

### Relojes (origen de marcaciones)

- Conexión por **API** (auth NONE / BASIC / BEARER / API_KEY) o carga manual **CSV / Excel**.
- **Polling automático** vía BullMQ; intervalo mínimo 5 min (para no saturar al reloj).
- Parser valida formato de CI (5–9 dígitos). Marcación con CI inexistente queda en estado **ERROR**.

### Marcaciones (3 vistas)

- **Raw**: lo que llegó del reloj (auditoría).
- **Limpias**: 1 entrada + 1 salida por empleado / día / bloque (deduplicación idempotente).
- **Log de correcciones**: cada PATCH manual queda inmutable.

### Turnos

- **SIMPLE** (un solo bloque, ej. 08:00–17:00) o **CORTADO** (múltiples bloques, ej. 08:00–12:00 y 13:30–17:30).
- Bloques **no se pueden solapar**.

### Asignación de Turnos

- **PERPETUA**: vigencia abierta.
- **OCASIONAL**: rango cerrado, **prevalece** sobre la perpetua durante el rango.
- Dos asignaciones OCASIONAL solapadas con misma prioridad → conflicto (HTTP 409).

### Permisos de presentismo

Tipos:

| Tipo | Efecto |
|------|--------|
| `JORNADA_COMPLETA` | Prevalece sobre todo. Genera AUSENCIA_JUSTIFICADA. |
| `LLEGADA_TARDIA` | Con `minutos_tolerados` (tardanza justificada). |
| `SALIDA_ANTICIPADA` | Permite salir antes sin descuento. |
| `AUSENCIA_TURNO` | Ausencia justificada de un **bloque** del turno cortado. |
| `TURNO` (cobertura) | Cubre un horario fuera de turno habitual. |

Aprobación: PENDIENTE → APROBADO / RECHAZADO. Solo permisos APROBADOS evitan el descuento.

### Tolerancias

- **Global**: parámetro del sistema (5 min entrada / 5 min salida).
- **Especial por fecha** (TODOS / SUCURSAL / DEPARTAMENTO): prevalece sobre la global.

### Motor M19 (procesamiento de novedades)

Por período, para cada empleado activo con turno vigente:

- **AUSENCIA_JORNADA**: no hay entrada en el primer bloque.
- **AUSENCIA_BLOQUE**: falta entrada en bloque 2+ (turno cortado).
- **TARDANZA**: entrada > tolerancia.
- **SALIDA_ANTICIPADA**: salida con anticipación > tolerancia.
- Versiones **_JUSTIFICADAS** si hay permiso aprobado que las cubre.

Reglas duras:

- Si la **liquidación mensual está CERRADA**, el motor rechaza procesar (HTTP 409).
- Empleado **desvinculado** o **sin turno vigente** → no se generan novedades.
- Novedades CONFIRMADAS con `liquidacion_id` → no se anulan sin anular antes la liquidación.

---

## Liquidación de sueldos

### Tipos de liquidación

| Tipo | Cuándo |
|------|--------|
| **Mensual** | Cierre del mes. Base. |
| **Quincenal** | Adelanto a mitad de mes. Se descuenta en la mensual. |
| **Aguinaldo** | Anual (Dic) o proporcional al cese. |
| **Vacaciones** | Por solicitud aprobada. |
| **Finiquito** | Por desvinculación (ver sección). |

> Una **quincenal sin cerrar** **bloquea** el cierre de la mensual del mismo período.

### Conceptos típicos

- **Ingresos**: SALARIO_BASE (proporcional si ingreso/egreso en el mes), HORAS_EXTRA_50, HORAS_EXTRA_100, SUBSIDIO_FAMILIAR, BONO_DESEMPENO, COMISION_VENTAS.
- **Descuentos del trabajador**: IPS_OBRERO (sobre base ≥ SMLV), DESCUENTO_AUSENCIA (proporcional a días ausentes desde novedades), DESCUENTO_TARDANZA (minutos × valor/hora), CUOTA_PRESTAMO (préstamos ACTIVOS con cuota PENDIENTE del período), ANTICIPO_QUINCENAL (anticipos APROBADOS del período).
- **Aportes patronales** (no descuentan al empleado): IPS_PATRONAL 16,5 %, IPS_ADMIN 1 %.

### Reglas duras del cálculo

- **Base IPS nunca < SMLV** vigente.
- Régimen **MICROEMPRESA_80** → base mínima 80 % SMLV.
- **Descuentos totales ≤ 30 %** del salario (Art. 240 CT). Embargos judiciales hasta 50 %.
- **Aguinaldo** (liquidación tipo AGUINALDO) = suma de las remuneraciones del año que afectan base de aguinaldo, tomadas de las liquidaciones **cerradas**, dividido 12.
- **Aguinaldo proporcional al cese** (finiquito): se calcula distinto — `salario_base × meses del año / 12`. Es una aproximación: no toma las remuneraciones reales del año sino el salario base vigente.
- **Vacaciones** = días × (salario_base / 30). El valor del día de vacaciones es el jornal diario, mismo criterio que usa el finiquito.
- Escalas por antigüedad (Art. 219), contadas en **días corridos**:
  - < 5 años → 12 días.
  - 5 a 10 años → 18 días.
  - > 10 años → 30 días.

### Flujo

```
BORRADOR  ──▶  PRE_LIQUIDACIÓN  ──▶  CERRADA (inmutable)
```

- En **BORRADOR** se editan parámetros y se ejecuta el motor cuantas veces sea necesario.
- En **PRE_LIQUIDACIÓN** se ven los netos por empleado y se ajusta antes de cerrar.
- Al **CERRAR**, la liquidación queda inmutable; cualquier ajuste posterior exige anularla y rehacerla.

### Integración con presentismo

Antes de pre-liquidar, ejecutar el motor M19 → genera novedades → se aplican como DESCUENTO_TARDANZA / DESCUENTO_AUSENCIA. Las justificadas **no descuentan**.

### Integración contable

Al **cerrar** la liquidación, si la empresa tiene el módulo Contabilidad activo, se genera automáticamente el **asiento de devengamiento**:

- **Debe** (distribuido por el centro de costo de cada empleado): `SUELDOS_JORNALES`, `APORTE_PATRONAL_IPS`, `APORTE_ADMIN_IPS`.
- **Haber**: `SUELDOS_A_PAGAR`, `IPS_A_DEPOSITAR`, `DESCUENTOS_VARIOS_RRHH`.

El asiento se imputa al **último día del período liquidado**, no al día del cierre. Es idempotente: cerrar o reintegrar dos veces no duplica el asiento. Se consulta con el botón correspondiente en la pestaña Liquidaciones (`GET /rrhh/liquidaciones/:id/asiento-contable`) y se puede regenerar si falló.

Requisito: los conceptos contables de RRHH tienen que estar mapeados. Si falta alguno, el asiento no se genera y queda registrado el motivo. Se cargan desde **Contabilidad → Mapeo de Cuentas → "Crear cuentas y mapeos faltantes"**.

El **pago** genera su propio asiento por otra vía: al confirmar la acreditación bancaria se crea un egreso de Tesorería (Debe `SUELDOS_A_PAGAR` / Haber la cuenta del banco).

---

## IPS / REOP

Se genera **sobre liquidación mensual cerrada**.

- Calcula: base aportable (≥ SMLV), 9 % obrero, 16,5 % patronal, 1 % admin.
- Regímenes: **GENERAL** o **MICROEMPRESA_80** (base mínima 80 % SMLV).
- Estados: GENERADO → DECLARADO → PAGADO. Cada paso registra fecha y usuario.
- Genera **archivo REOP** descargable para declarar en el portal de IPS.

---

## Acreditación bancaria

Genera el **TXT multi-banco** desde una liquidación mensual cerrada.

- Plantilla por banco (configurada en Recursos Humanos → pestaña Configuración → Formatos bancarios).
- Estados: GENERADO → ENVIADO → CONFIRMADO.
- El TXT incluye CBU del empleado, monto neto y datos del lote.

---

## Vacaciones

- **Saldo por año** según antigüedad (Art. 219).
- Solicitud: rango de fechas + sustituto opcional. Estados: SOLICITADO → APROBADO / RECHAZADO.
- Aprobada → bloquea las fechas para liquidación tipo VACACIONES.

---

## Anticipos y Préstamos

### Anticipo

- Alta + aprobación. Estado: PENDIENTE → APROBADO → ANULADO.
- **Anticipos APROBADOS** se descuentan automáticamente en la mensual del período.
- Anular un anticipo aprobado **revierte** el descuento si la liquidación no está cerrada.

### Préstamo

- Alta con plan de cuotas. Estado: ACTIVO / SUSPENDIDO / CANCELADO.
- Cada mensual descuenta la **cuota PENDIENTE** del período.
- Suspender un préstamo pausa el descuento hasta reactivar.

---

## Planillas externas (importación)

Para cargar movimientos masivos desde Excel / CSV:

- Subida del archivo.
- Validación por fila (CI existe, formato monto, concepto válido).
- Errores listados en un banner con anclas a la fila correspondiente.
- Aplicación al período seleccionado.

---

## Desvinculaciones (finiquito)

Calcula automáticamente:

- **Antigüedad** (mes / año de ingreso vs. egreso).
- **Vacaciones proporcionales / no gozadas**.
- **Aguinaldo proporcional** al cese.
- **Indemnización** (Art. 87 / 91 / 94 CT) según causa (renuncia, despido sin causa, justa causa).
- **Preaviso**.

Flujo: CALCULADO → APROBADO → PAGADO. Una vez **PAGADO** bloquea reincorporación a nómina **y ya no se puede anular** (HTTP 409). Si `LEGAJO_COMPLETITUD_OBLIGATORIO_BLOQUEA = true` y faltan documentos → no se aprueba el finiquito.

El cálculo se previsualiza sin persistir antes de crearlo. Si la empresa tiene Contabilidad, al procesarlo genera su asiento (`INDEMNIZACION`, `PREAVISO`, `VACACIONES_FINIQUITO`, `AGUINALDO_FINIQUITO`) y, con Tesorería activa, el egreso del pago.

Anular una desvinculación en estado CALCULADO o APROBADO solo cambia el estado: **no revierte montos ya devengados**.

---

## Novedades (manuales)

Para registros que no surgen del motor de presentismo (permisos médicos, ausencias justificadas registradas a mano, ajustes administrativos):

- Cada novedad tiene flag `impacta_liquidacion`. Si está prendido, alimenta el cálculo.
- Permisos médicos pueden **vincularse a un documento de legajo** (CERTIFICADO_MED).

---

## Reportes

| Reporte | Qué muestra | Formato |
|---------|-------------|---------|
| **Planilla mensual** | Resumen + detalle por empleado (salario, descuentos, neto) | XLSX / PDF / JSON. |
| **Recibos de sueldo** | PDF por empleado de una liquidación cerrada | PDF. |
| **Libro IPS** | Aportes obrero / patronal / admin y base aportable por empleado | XLSX / PDF. |
| **Acreditación bancaria** | TXT por banco con CBU, monto y lote | TXT. |
| **REOP** | Archivo para declarar a IPS | TXT. |
| **Consulta de Presentismo** | 3 vistas (resumen día, detalle raw, novedades) | Excel / PDF. |
| **Dashboard de vencimientos del legajo** | Documentos vencidos / por vencer / vigentes | UI + Excel. |

---

## Componentes UX estándar

- **RRHHGuia**: acordeón colapsable en cada pestaña con pasos y notas legales (`Art. CT` referenciados).
- **RRHHPrereqChecklist**: chequea dependencias antes de operar (ej. para liquidar: tipos de empleado, conceptos, parámetros, empleados activos). Botón "Ir a configurar" navega al tab origen.
- **RRHHEmptyState**: icono + CTA + "Ver guía" en tabs vacías.
- **FieldHint**: TextField con helperText, ícono info y tooltip ampliado para campos no obvios (CI, salario, fecha de ingreso).
- **InlineValidationBanner**: lista de errores con anchor scroll a la fila / campo afectado.
- **ConfirmDialog** / **PromptDialog**: nunca `window.alert/confirm/prompt`.
- Selectores buscables (`Autocomplete` MUI) para empleado, turno, reloj, sucursal, departamento.
- Tablas virtualizadas para listados > 1k filas; vista compacta en móvil < 600 px.
- Onboarding: diálogo de bienvenida de 5 slides (Configurá los catálogos → Cargá empleados y registrá novedades → Liquidá, declará y pagá → Automatizá el presentismo (opcional) → Ordená documentos en Legajos) + tour guiado por pasos (Navegación → Empleados y legajos → Liquidaciones → IPS/REOP → Acreditaciones → Configuración y catálogos → Presentismo).

---

## Validaciones del backend (mensajes que pueden aparecer)

### Liquidación

Errores que cortan la operación:

- **"Liquidación cerrada no se puede editar"** (HTTP 409). Vale para calcular, agregar/eliminar líneas manuales, cerrar y anular.
- **Neto a pagar negativo** (HTTP 400). Se puede continuar solo si el parámetro `PERMITIR_NETO_NEGATIVO_EXCEPCION` está activo, se confirma la excepción y se escribe un motivo de al menos 10 caracteres. Queda auditado.
- **Tope de descuentos**: no se cierra si los descuentos no-embargo superan el 30 % del ingreso de algún empleado, ni si los embargos superan el 50 %. El mensaje lista los empleados afectados con el monto y el tope.
- **"No se puede cerrar la mensual: existe quincenal del período sin cerrar"** (HTTP 409).

Comportamientos automáticos del motor (no muestran mensaje, pero explican diferencias en los números):

- IPS se calcula solo si el **tipo de empleado** tiene `aporta_ips`.
- La base de IPS tiene piso en el SMLV vigente, **prorrateado por días trabajados**: para un alta o egreso a mitad de mes la base queda por debajo del SMLV mensual, y es correcto.
- Régimen MICROEMPRESA_80 → el piso baja al 80 % del SMLV.
- Los anticipos **APROBADOS** del período se descuentan solos y pasan a DESCONTADO al cerrar.
- Las cuotas de préstamo **PENDIENTE** de préstamos **ACTIVOS** se descuentan solas; al cerrar se marcan DESCONTADO y, si era la última, el préstamo pasa a CANCELADO.
- El empleado desvinculado no entra en liquidaciones nuevas, y tampoco entra en la del mes de su egreso si su finiquito sigue vigente (para no pagarle dos veces los mismos días).

### Presentismo

- **"Motor de novedades no corre si liquidación CERRADA"** (HTTP 409).
- **"Novedad CONFIRMADA con liquidacion_id no anulable sin anular antes la liquidación"**.
- **"Bloques de turno CORTADO no pueden solaparse"** (HTTP 400). Un turno CORTADO exige mínimo 2 bloques.
- **"Dos asignaciones OCASIONAL solapadas con misma prioridad"** (HTTP 409).
- **"CI no matchea con empleado de la empresa — marcación queda en ERROR"**. También queda en ERROR si el empleado existe pero no está ACTIVO.
- **"Intervalo de polling debe ser ≥ 5 min"**.
- **"Sin turno vigente no se genera novedad"**.

### Legajos

- **"Tipos de documento del sistema no se eliminan ni renombran"** (HTTP 403).
- **"Tipo MIME no permitido (validación por magic bytes)"** (HTTP 415).
- **"Tamaño del archivo excede el máximo configurado"** (HTTP 413).
- **"Presigned URL expirada — solicitar nueva descarga"**. El error lo devuelve el storage (S3/Spaces), no el backend; la respuesta de descarga incluye `expira_en_segundos`.
- **"Documento ANULADO no se reactiva ni se reemplaza"** (HTTP 409).

---

## Lo que NO se puede hacer

- Editar una liquidación CERRADA (hay que anular y rehacer).
- Cerrar una mensual con quincenal abierta.
- Liquidar a un empleado desvinculado.
- Procesar novedades de presentismo sobre un período ya liquidado y cerrado.
- Anular una novedad que ya impactó una liquidación cerrada.
- Eliminar o renombrar tipos de documento del sistema (los 14 seed).
- Subir documentos disfrazando la extensión (la validación es por magic bytes).
- Solapar bloques de un turno cortado.
- Solapar dos asignaciones de turno OCASIONAL.
- Generar IPS o acreditación bancaria desde una liquidación que no esté CERRADA.
- Reincorporar a nómina a un desvinculado con finiquito PAGADO.

---

## Problemas frecuentes

- **"El motor no genera novedades para un empleado"**: no tiene turno vigente, está desvinculado, o el período ya fue liquidado y cerrado.
- **"Una tardanza aparece sin descuento"**: hay un permiso APROBADO LLEGADA_TARDIA que la cubre, o entró dentro de tolerancia (global o especial por fecha).
- **"El neto del empleado dio negativo"**: descuentos superan el 30 %. Revisar anticipos + cuotas de préstamo + descuentos por presentismo del período.
- **"La quincenal no me deja cerrar la mensual"**: hay que cerrar primero la quincenal (es la regla — la quincenal se imputa como anticipo en la mensual).
- **"El TXT de acreditación falla"**: el banco usa un formato distinto al cargado en Recursos Humanos → pestaña Configuración → Formatos bancarios. Cargar la plantilla correcta.
- **"No me deja calcular finiquito"**: falta documento obligatorio del legajo y el parámetro `LEGAJO_COMPLETITUD_OBLIGATORIO_BLOQUEA` está en true. Completar el legajo o desactivar el parámetro.
- **"Las marcaciones del reloj no entran"**: revisar Log de correcciones y vista Raw. CI inválida (formato 5–9 dígitos) o CI no asociada a empleado → estado ERROR.
- **"La foto del empleado no aparece"**: la foto migró de `foto_url` al documento FOTO_PERFIL del legajo. El campo viejo se mantiene como espejo; cargar la nueva versión desde Legajos.
- **"Generé IPS pero no veo los aportes"**: la liquidación origen no estaba cerrada o el empleado tiene `aporta_ips = false`.

---

## Limitaciones actuales

- **Comisiones liquidadas por nómina**: entran dentro de `SUELDOS_JORNALES` del asiento de devengamiento, sin asiento propio. Las comisiones liquidadas por el módulo de vendedores/cobradores sí tienen asiento separado — ojo con liquidar la misma comisión por los dos caminos.
- **Foto de perfil**: migración de `foto_url` → documento FOTO_PERFIL en proceso; el campo viejo se conserva como espejo.
- **Purga física** de documentos en DigitalOcean Spaces: manual, no automática.
- **Emisión SIFEN** desde RRHH: no integrada (RRHH no factura).
- **AI Dashboard sobre RRHH**: cobertura parcial (algunos ejemplos SQL, no analítica completa).
- **Aguinaldo proporcional al cese**: implementado, pero **sin algoritmo de reversión** automática si se anula la desvinculación.
- **Editor visual de fórmulas** para conceptos personalizados: no hay UI — la fórmula se carga manualmente.

---

## Documentos relacionados

- `guia-contabilidad.md` — qué cuentas impacta la planilla (sueldos, IPS, anticipos).
- `guia-tesoreria-bancos.md` — pago de planilla y acreditación bancaria.
- `guia-contactos.md` — vendedores / cobradores como funcionarios cuando aplica comisión.
- `plan-rrhh.md` — diseño funcional del módulo completo.
- `plan-rrhh-legajos.md` — gestión documental, tipos seed, alertas y purga.
- `plan-rrhh-presentismo.md` — relojes, turnos, permisos, tolerancias y motor M19.
- `plan-rrhh-ux.md` — componentes estándar y guion de pantallas.
- `plan-prueba-usuario-rrhh.md` — pruebas paso a paso.
- `qa-plan-rrhh-presentismo-f2.md` / `f3.md` / `f4.md` — fases de QA del presentismo.
- `qa-presentismo-f4-evidencia-2026-05-18.md` — evidencia técnica de la fase 4.
