Ir al contenido

Nóminas (`payroll/`)

Ruta: /owner/hr/payroll

Sistema de generación de nóminas con cálculo automático de cotizaciones.

Devengos:

  • Salario base
  • Complementos salariales
  • Horas extras
  • Bonus y incentivos
  • Plus de transporte
  • Plus de comida
  • Otros complementos

Deducciones:

  • Cotización a la Seguridad Social (empleado)
  • Retención IRPF
  • Anticipos
  • Otras deducciones

Cotizaciones Empresa:

  • Cotización SS empresa (separate)
  • Formación profesional
  • Desempleo
  • FOGASA
1. Acceso a módulo de nóminas
2. Click en "Nueva Nómina"
3. Seleccionar empleado
4. Indicar período (mes/año)
5. Rellenar conceptos salariales
6. Sistema calcula automáticamente:
- Cotización SS empleado (típico: 6.35%)
- Cotización SS empresa (típico: 30%)
- Retención IRPF (según % configurado)
- Líquido a percibir
7. Revisión de cálculos
8. Generar PDF de nómina
9. Enviar al empleado
10. Marcar como pagada

El sistema permite configurar plantillas de nómina recurrente para empleados con salario fijo.

1. Crear "Plantilla Recurrente"
2. Configurar:
- Empleado
- Conceptos fijos
- Periodicidad (mensual, quincenal)
- Fecha de generación automática
3. Sistema genera automáticamente:
- Edge Function ejecutada por CRON
- Nómina en estado "borrador"
- Notificación a RRHH
4. Revisión y aprobación
5. Envío al empleado
Detalles Técnicos - Edge Function de Nóminas

Edge Function: generate-recurring-payrolls

Ejecutada diariamente por CRON, genera nóminas de empleados con plantillas recurrentes:

interface RecurringPayroll {
id: string;
business_id: string;
employee_id: string;
interval: 'monthly' | 'biweekly' | 'weekly';
next_generation_date: string;
gross_salary: number;
ss_employee_contribution: number;
ss_company_contribution: number;
irpf_percentage: number;
overtime_pay: number;
bonus_pay: number;
transport_allowance: number;
meal_allowance: number;
other_allowances: number;
deductions: number;
}
// Cálculo automático de líquido
const irpfWithholding = (gross_salary * irpf_percentage) / 100;
const extras = overtime_pay + bonus_pay + transport_allowance +
meal_allowance + other_allowances;
const netSalary = gross_salary - ss_employee_contribution -
irpfWithholding + extras - deductions;

Intervalo de Generación:

  • daily: Cada día
  • weekly: Cada 7 días
  • biweekly: Cada 14 días
  • monthly: Cada mes (mismo día)
  • bimonthly: Cada 2 meses
  • quarterly: Cada 3 meses
  • semiannual: Cada 6 meses
  • annual: Cada año

Tablas:

  • recurring_payrolls - Plantillas configuradas
  • payrolls - Nóminas generadas
  • payroll_exports - Historial de exportaciones

Estados de Nómina:

  • draft - Borrador (editable)
  • approved - Aprobada (lista para pago)
  • paid - Pagada (marcada como pagada)
  • cancelled - Cancelada

El sistema permite exportar nóminas a formatos compatibles con A3 y Sage.

Edge Function: generate-payroll-export

A3 NÓMINAplus:

  • Archivo CSV con estructura específica
  • Campos: empleado, conceptos, importes
  • Importación directa en A3

Sage Despachos Conectados:

  • Formato XML estándar
  • Incluye todos los conceptos salariales
  • Validación de estructura
1. Seleccionar nóminas a exportar
2. Elegir formato (A3 o Sage)
3. Sistema genera archivo:
- Validación de datos completos
- Formato según especificación
- Inclusión de metadatos
4. Descargar archivo generado
5. Importar en software contable
Detalles Técnicos

Edge Function: generate-payroll-export

Ejemplo de Estructura A3:

"CIF/NIF","Nombre","Apellidos","SS","Concepto","Importe"
"12345678Z","Juan","Pérez García","123456789012","SALARIO_BASE","1500.00"
"12345678Z","Juan","Pérez García","123456789012","SS_EMPLEADO","-95.25"
"12345678Z","Juan","Pérez García","123456789012","IRPF","-180.00"
"12345678Z","Juan","Pérez García","123456789012","LIQUIDO","1224.75"

Ejemplo de Estructura Sage (XML):

<Nominas>
<Nomina>
<Empleado>
<NIF>12345678Z</NIF>
<Nombre>Juan Pérez García</Nombre>
<SS>123456789012</SS>
</Empleado>
<Periodo>
<Mes>1</Mes>
<Anio>2024</Anio>
</Periodo>
<Conceptos>
<Concepto codigo="001" descripcion="Salario Base">1500.00</Concepto>
<Concepto codigo="010" descripcion="SS Empleado">-95.25</Concepto>
<Concepto codigo="020" descripcion="IRPF">-180.00</Concepto>
</Conceptos>
<Liquido>1224.75</Liquido>
</Nomina>
</Nominas>

Tabla: payroll_exports

Registro de todas las exportaciones:

CREATE TABLE payroll_exports (
id UUID PRIMARY KEY,
business_id UUID NOT NULL,
export_format TEXT NOT NULL, -- 'a3' | 'sage'
payroll_ids UUID[] NOT NULL,
file_url TEXT,
created_at TIMESTAMP DEFAULT NOW(),
created_by UUID
);