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

9.0 KiB
Raw Permalink Blame History

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.


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:
    {
      "registro_patronal": "1234567890",
      "rfc_patron": "CON123456ABC"
    }
    
  3. Obtiene lista de empleados con crédito:
    {
      "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

-- 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