erp-construccion/docs/02-definicion-modulos/MAI-007-rrhh-asistencias/requerimientos/RF-HR-005-integracion-infonavit.md

315 lines
9.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# RF-HR-005: Integración con INFONAVIT
**Epic:** MAI-007 - RRHH, Asistencias y Nómina
**Tipo:** Requerimiento Funcional
**Prioridad:** Crítica (Cumplimiento Legal)
**Estado:** 🚧 En Definición
**Última actualización:** 2025-11-17
---
## 📋 Descripción
El sistema debe integrarse con el Instituto del Fondo Nacional de la Vivienda para los Trabajadores (INFONAVIT) para cumplir con obligaciones patronales: registro patronal, cálculo y pago de aportaciones (5% del SBC), consulta de trabajadores con crédito, y aplicación de descuentos por crédito INFONAVIT.
---
## 🎯 Objetivo Legal
**Obligación Legal:** Ley del INFONAVIT
- Art. 29: Obligación de aportación del 5% del SBC
- Art. 29 Bis: Pago bimestral de aportaciones
- Art. 30: Descuento de mensualidades de crédito
**Sanciones por incumplimiento:**
- Multas de 250 a 5,000 veces la UMA (~$26K a $520K MXN)
- Actualización de adeudos con recargos del 2% mensual
- Embargo de cuentas bancarias
---
## ✅ Casos de Uso Principales
### UC-INF-001: Registro Patronal en INFONAVIT
**Pre-requisito:** Primera vez que constructora usa el sistema
**Proceso:**
1. HR accede a "Configuración" → "INFONAVIT" → "Registrar Patrón"
2. Ingresa datos:
- RFC de la constructora
- Razón social
- Domicilio fiscal
- Actividad económica (construcción)
- Número de trabajadores
3. Sistema genera solicitud de registro
4. Envía a API INFONAVIT
5. Obtiene **Número de Registro Patronal INFONAVIT**
6. Guarda en `constructoras.infonavit_reg_number`
**Resultado:** Constructora registrada ante INFONAVIT
---
### UC-INF-002: Cálculo de Aportaciones Bimestrales
**Periodo:** Bimestral (Ene-Feb, Mar-Abr, May-Jun, Jul-Ago, Sep-Oct, Nov-Dic)
**Fecha límite:** Día 17 del mes siguiente al bimestre
**Proceso:**
1. Sistema determina período bimestral actual
2. Para cada empleado activo en el período:
- Obtiene Salario Base de Cotización (SBC)
- Calcula días cotizados en el bimestre
- Calcula aportación:
```
Aportación INFONAVIT = SBC × Días Cotizados × 0.05
```
3. Suma aportaciones de todos los empleados
4. Genera archivo de pago (.txt o XML según formato INFONAVIT)
5. Muestra total a pagar
**Ejemplo:**
```
Empleado: Juan Pérez
SBC: $350/día
Días cotizados: 60 días (bimestre completo)
Aportación = $350 × 60 × 0.05 = $1,050 MXN
```
---
### UC-INF-003: Consulta de Trabajadores con Crédito
**Trigger:** Mensual (antes de calcular nómina)
**Proceso:**
1. Sistema consulta API INFONAVIT
2. Request:
```json
{
"registro_patronal": "1234567890",
"rfc_patron": "CON123456ABC"
}
```
3. Obtiene lista de empleados con crédito:
```json
{
"acreditados": [
{
"nss": "12345678901",
"numero_credito": "9876543210",
"descuento_mensual": 1500.00,
"saldo_pendiente": 150000.00,
"tipo_descuento": "VSM" // Veces Salario Mínimo
}
]
}
```
4. Actualiza tabla `infonavit_credits` con descuentos vigentes
5. Marca empleados con crédito activo
---
### UC-INF-004: Aplicar Descuento por Crédito en Nómina
**Trigger:** Cálculo de nómina
**Proceso:**
1. Al calcular nómina del empleado
2. Verifica si tiene crédito INFONAVIT activo
3. Calcula descuento:
- **VSM (Veces Salario Mínimo):** Descuento = X veces el salario mínimo
- **Porcentaje:** Descuento = X% del salario bruto
- **Cuota fija:** Descuento = $X MXN
4. Aplica descuento en nómina
5. Registra en tabla `payroll_deductions`
6. Al pagar INFONAVIT, incluye estos descuentos en archivo de pago
**Ejemplo VSM:**
```
Empleado: María López
Salario Mínimo General: $248.93/día (2025)
Descuento: 2.5 VSM
Descuento mensual = $248.93 × 2.5 × 30 = $18,669.75 MXN
```
---
### UC-INF-005: Generación de Archivo de Pago
**Trigger:** Cierre de bimestre (antes del día 17)
**Proceso:**
1. HR accede a "INFONAVIT" → "Generar Archivo de Pago"
2. Selecciona bimestre
3. Sistema genera archivo con:
- Aportaciones patronales (5% del SBC)
- Descuentos de créditos de empleados
4. Formato del archivo:
```
HEADER|1234567890|CON123456ABC|BIMESTRE 01-2025
APORTACION|12345678901|1050.00|60
DESCUENTO|12345678901|9876543210|1500.00
TOTAL|250|350000.00|185000.00
```
- `250`: Total de empleados
- `350000.00`: Total aportaciones
- `185000.00`: Total descuentos
5. Permite descargar archivo .txt
6. Genera línea de captura para pago en banco
---
## 📊 Modelo de Datos
```sql
-- Créditos INFONAVIT de empleados
CREATE TABLE hr.infonavit_credits (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
employee_id UUID NOT NULL REFERENCES hr.employees(id),
credit_number VARCHAR(20) UNIQUE NOT NULL,
discount_type VARCHAR(20) CHECK (discount_type IN ('VSM', 'percentage', 'fixed')),
discount_value DECIMAL(10, 2) NOT NULL, -- VSM: número de veces, Percentage: %, Fixed: monto
outstanding_balance DECIMAL(12, 2),
start_date DATE NOT NULL,
estimated_end_date DATE,
is_active BOOLEAN DEFAULT true,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX idx_infonavit_credits_employee ON hr.infonavit_credits(employee_id);
CREATE INDEX idx_infonavit_credits_active ON hr.infonavit_credits(is_active) WHERE is_active = true;
-- Log de integración INFONAVIT
CREATE TABLE hr.infonavit_integration_log (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
constructora_id UUID NOT NULL REFERENCES auth_management.constructoras(id),
operation_type VARCHAR(50) NOT NULL, -- registro, aportaciones, consulta_creditos, pago
request_payload JSONB NOT NULL,
response_payload JSONB,
status VARCHAR(20), -- pending, success, failed
infonavit_folio VARCHAR(50),
error_message TEXT,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- Archivos de pago generados
CREATE TABLE hr.infonavit_payment_files (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
constructora_id UUID NOT NULL REFERENCES auth_management.constructoras(id),
period_number INTEGER NOT NULL CHECK (period_number BETWEEN 1 AND 6), -- Bimestre
period_year INTEGER NOT NULL CHECK (period_year >= 2025),
file_content TEXT NOT NULL,
file_hash VARCHAR(64) NOT NULL,
total_employees INTEGER NOT NULL,
total_contributions DECIMAL(12, 2) NOT NULL, -- Aportaciones 5%
total_discounts DECIMAL(12, 2) NOT NULL, -- Descuentos por crédito
total_payment DECIMAL(12, 2) GENERATED ALWAYS AS (total_contributions + total_discounts) STORED,
payment_reference VARCHAR(50), -- Línea de captura bancaria
payment_status VARCHAR(20) DEFAULT 'pending', -- pending, paid
generated_by UUID REFERENCES auth_management.profiles(id),
generated_at TIMESTAMPTZ DEFAULT NOW(),
UNIQUE(constructora_id, period_number, period_year)
);
-- Agregar campo a constructoras
ALTER TABLE auth_management.constructoras
ADD COLUMN IF NOT EXISTS infonavit_reg_number VARCHAR(20) UNIQUE;
```
---
## 🔐 Reglas de Negocio
### RN-INF-001: Aportación Obligatoria
- 5% del Salario Base de Cotización (SBC)
- Mismo SBC que se usa para IMSS
- Pago bimestral obligatorio
### RN-INF-002: Descuento por Crédito
- Descuento máximo: 30% del salario bruto
- Se descuenta en nómina quincenal/semanal
- Se paga bimestralmente a INFONAVIT junto con aportaciones
### RN-INF-003: Trabajadores Acreditados
- Empleados con crédito INFONAVIT vigente
- Descuento obligatorio (ley protege al trabajador)
- Patrón no puede no descontar
### RN-INF-004: Plazos de Pago
- Bimestre 1 (Ene-Feb): Pago antes del 17 de marzo
- Bimestre 2 (Mar-Abr): Pago antes del 17 de mayo
- Bimestre 3 (May-Jun): Pago antes del 17 de julio
- Bimestre 4 (Jul-Ago): Pago antes del 17 de septiembre
- Bimestre 5 (Sep-Oct): Pago antes del 17 de noviembre
- Bimestre 6 (Nov-Dic): Pago antes del 17 de enero (año siguiente)
### RN-INF-005: Actualización
- Recargos del 2% mensual sobre saldo vencido
- Actualización con INPC (inflación)
---
## 🧪 Criterios de Aceptación
- ✅ Permite registrar número patronal INFONAVIT de constructora
- ✅ Calcula aportaciones del 5% correctamente
- ✅ Consulta trabajadores con crédito mensualmente
- ✅ Aplica descuentos por crédito en nómina
- ✅ Descuento no excede 30% del salario bruto
- ✅ Genera archivo de pago con formato correcto
- ✅ Archivo incluye aportaciones + descuentos
- ✅ Genera línea de captura para pago en banco
- ✅ Logs de integración registran operaciones
- ✅ Alertas si pago no se realiza antes del día 17
---
## 📐 Dependencias
- ✅ RF-HR-001: Empleados (requiere NSS, SBC)
- ✅ RF-HR-004: IMSS (usa mismo SBC)
- 🔜 RF-HR-004: Nómina (aplica descuentos)
---
## 📝 Notas Adicionales
### Tipos de Descuento VSM
- **VSM (Veces Salario Mínimo):** Más común
- Ejemplo: 2.5 VSM = $248.93 × 2.5 × 30 = $18,669.75/mes
- **Porcentaje:** Poco común
- Ejemplo: 15% del salario bruto
- **Cuota Fija:** Raro
- Ejemplo: $2,000 MXN/mes
### API INFONAVIT
- Entorno de pruebas (sandbox) disponible
- Producción requiere certificado digital
- OAuth 2.0 para autenticación
- Rate limiting: 100 requests/minuto
---
**Fecha de creación:** 2025-11-17
**Versión:** 1.0