← Volver

Normalización — Recursos Humanos y Sueldos

Objetivo

Normalizar un sistema de RRHH y liquidación de sueldos típico de pyme: empleados, puestos, jornadas, horas extras, ausencias, liquidaciones mensuales, anticipos y movimientos bancarios. Se muestran 1FN → 3FN y consultas útiles.

Qué cubre el ejercicio

  • Separar datos maestros (empleado, puesto, área) de datos transaccionales (liquidaciones).
  • Modelar conceptos salariales (haberes, deducciones) como maestro.
  • Registrar histórico de sueldos, movimientos de préstamo/anticipo, y auditoría.

Tabla original (sin normalizar)

Ejemplo de exportación desde Excel con listas y datos mezclados.

LegajoNombreÁreaPuestoSueldoBaseFechaIngresoMes HorasTrabHorasExtraAusenciasConceptosMontosBancoCBUEstado
232Juan PérezVentasVendedor Sr4200002018-03-012024-11 160121HEXT50,HEXT100,PRESENTISMO54000,12000,35000Nación011002233Activo
455María SotoRRHHAnalista Jr3800002022-01-152024-11 16002DESCUENTO_OBRA_SOCIAL15200Santander990012200Activo
522Carlos RíosVentasVendedor Jr3300002020-11-052024-11 16050HEXT50,PREMIO_OBJETIVOS18500,45000Nación011000123Suspendido

Problemas

  • Listas en Conceptos y Montos → violación de 1FN.
  • Datos maestros repetidos en cada mes (sueldo base, puesto).
  • Falta de historial de sueldos y de registros detallados para horas extras y ausencias.

1FN — Datos atómicos

Cada fila representa una línea de liquidación por empleado y mes.

DetalleIDLegajoPeriodoConceptoMontoHorasTrabHorasExtraAusencias
D12322024-11HEXT5054000160121
D22322024-11HEXT10012000160121
D32322024-11PRESENTISMO35000160121
D44552024-11DESC_OBRA_SOCIAL1520016002
D55222024-11HEXT501850016050
D65222024-11PREMIO_OBJ4500016050

Comentarios

  • Ahora los conceptos y montos son atómicos y se pueden agregar/sumar fácilmente por periodo.
  • Se requiere separar maestro de conceptos y empleados para 2FN/3FN.

2FN — Separación de maestros y transaccionales

Creación de tablas: Empleados, Puestos, Areas, Liquidaciones y Detalle.

Empleados
Legajo, Nombre, FechaIngreso, Estado
232, Juan Pérez, 2018-03-01, Activo
455, María Soto, 2022-01-15, Activo
522, Carlos Ríos, 2020-11-05, Suspendido
Puestos
PuestoID, Puesto, Categoria, SueldoBase
PST01, Vendedor Sr, B, 420000
PST02, Analista Jr, C, 380000
PST03, Vendedor Jr, D, 330000

Liquidación (cabecera) y Detalle

Liquidación por mes (cabecera) y detalle por concepto (líneas).

3FN — Modelo final y entidades independientes

Se introducen maestros: Conceptos, Bancos, Historico de Sueldos, Anticipos, HorasExtras y Ausencias como tablas propias.

Conceptos (maestro)
ConceptoID, Descripción, Tipo (Haber/Deducción), BaseCálculo
HEXT50, Hora extra 50%, Haber, HorasExtra
HEXT100, Hora extra 100%, Haber, HorasExtra
PRESENTISMO, Presentismo, Haber, Fijo
DESC_OBRA_SOCIAL, Obra Social, Deducción, SueldoBase

Otras tablas

  • Bancos (BancoID, Nombre)
  • CBU / Cuenta Bancaria por empleado
  • Anticipos / Préstamos (registro y plan de cuotas)
  • Stock de vacaciones / ausencias y registros de licencias
  • AuditLogs para cambios en liquidaciones

Modelo final (resumen)

Tablas principales

  • Empleados (Legajo PK, Nombre, FechaIngreso, Estado)
  • Puestos (PuestoID PK, Nombre, Categoria, SueldoBase)
  • Areas (AreaID, Nombre)
  • Liquidaciones (LiquidacionID PK, Legajo FK, Periodo, HorasTrab, HorasExtra, Ausencias, TotalBruto, TotalDeducciones, Neto)
  • LiquidacionDetalle (DetalleID PK, LiquidacionID FK, ConceptoID FK, Monto)
  • Conceptos (ConceptoID PK, Descripcion, Tipo, BaseCalculo)
  • Bancos (BancoID, Nombre) y CuentasEmpleado (Legajo, BancoID, CBU)
  • Anticipos (AnticipoID, Legajo, Fecha, Monto, Cuotas)
  • HorasExtras y Ausencias (detalle por fecha)
  • AuditLogs (LogID, Entidad, EntidadID, Acción, Usuario, Fecha, Metadata)

SQL de ejemplo

1) Sueldo bruto por empleado y mes

SELECT l.Legajo, e.Nombre, l.Periodo, SUM(d.Monto) AS SueldoBruto FROM Liquidacion l JOIN LiquidacionDetalle d ON l.LiquidacionID = d.LiquidacionID JOIN Empleados e ON l.Legajo = e.Legajo GROUP BY l.Legajo, e.Nombre, l.Periodo;

2) Total deducciones por empleado

SELECT l.Legajo, e.Nombre, SUM(d.Monto) AS TotalDeducciones FROM LiquidacionDetalle d JOIN Conceptos c ON d.ConceptoID = c.ConceptoID JOIN Liquidacion l ON d.LiquidacionID = l.LiquidacionID JOIN Empleados e ON l.Legajo = e.Legajo WHERE c.Tipo = 'Deducción' GROUP BY l.Legajo, e.Nombre;

Procesos y recomendaciones

Proceso de liquidación mensual

  1. Recopilar movimientos: horas trabajadas, horas extra, ausencias, anticipos y préstamos.
  2. Generar cabecera de liquidación por legajo y periodo.
  3. Insertar líneas en LiquidacionDetalle por cada concepto aplicable.
  4. Calcular totales, aplicar deducciones y generar archivo bancario para pagos.
  5. Registrar en AuditLogs; conservar versión para auditoría.

Recomendaciones técnicas

  • Usar transacciones para operaciones críticas (pago de nómina).
  • Auditar cambios y mantener histórico de sueldos y puestos.
  • Separar lógica salarial compleja en capas: reglas de negocio (calculo salarial) vs almacenamiento.
whatsapp