feriados.io ← Inicio
mexiconominarrhhdias-habilestutorial

Lunes flotantes en México: el error que arruina la nómina cada año

México tiene 3 feriados con fecha móvil que cambia cada año. Si tu sistema usa Feb 5, Mar 21 o Nov 20 hardcodeados, está marcando el día equivocado — con consecuencias reales en nómina y liquidaciones.

18 de abril de 2026

México tiene 7 feriados nacionales obligatorios según el Artículo 74 de la Ley Federal del Trabajo. Tres de ellos no tienen fecha fija: la ley los trasladó al lunes más cercano a la fecha histórica. El problema es que la mayoría de los sistemas de nómina siguen usando las fechas originales — y eso está mal casi todos los años.

3

feriados con fecha móvil

Feb · Mar · Nov

Feb 5, Mar 21, Nov 20

incorrectos en casi todos los años

LFT

Art. 74 reformado

Decreto de traslado a lunes

Los tres feriados flotantes

El decreto de traslado es claro: el primer lunes de febrero, el tercer lunes de marzo y el tercer lunes de noviembre. Las fechas históricas (5, 21 y 20) son solo el punto de referencia — no la fecha del feriado.

Feriados flotantes — comparación por año

Fecha hardcodeada vs. fecha real del lunes

Feriado Hardcodeado 2024 2025 2026 2027

Día de la Constitución

Primer lunes de febrero

Feb 5 Feb 5 ✓ Feb 3 Feb 2 Feb 1

Natalicio Benito Juárez

Tercer lunes de marzo

Mar 21 Mar 18 Mar 17 Mar 16 Mar 15

Día de la Revolución

Tercer lunes de noviembre

Nov 20 Nov 18 Nov 17 Nov 16 Nov 15

✓ coincidencia · ámbar = fecha real distinta al hardcodeado · 2026 en negrita = año actual

En 2024, Constitución coincidió por accidente con Feb 5. Los otros dos nunca coinciden. En 2026 los tres están desplazados.

Qué pasa en la nómina cuando falla

El impacto no es solo administrativo. Tiene consecuencias legales y económicas concretas:

El sistema dice que Feb 5 es feriado

  • → Empleado trabaja el 2 de febrero (feriado real) sin recibir pago por día festivo
  • → Sistema no genera alerta de hora extra en día festivo
  • → El 5 de febrero se registra como inasistencia si el empleado trabaja normalmente
  • → El recibo de nómina tiene la fecha de descanso incorrecta

El cálculo de plazos también falla

  • → "Entregar en 5 días hábiles desde Jan 28" da Feb 3 con el calendario correcto
  • → Con el hardcodeado (Feb 5 = feriado) da Feb 4 — un día de diferencia
  • → Finiquitos calculados sobre días incorrectos
  • → Plazos de respuesta a IMSS con margen equivocado

El error con un ejemplo concreto

Partamos del caso más claro: calcular la fecha de entrega de un finiquito contando desde el 28 de enero de 2026, con 5 días hábiles de plazo.

calendario Contar 5 días hábiles desde Jan 28, 2026

# Con calendario correcto (feriado = Feb 2)

Jan 28 → día 1

Jan 29 → día 2

Jan 30 → día 3

Feb 2 → FERIADO, se salta

Feb 3 → día 4

Feb 4 → día 5 → resultado: 4 de febrero ✓

# Con hardcodeado (feriado = Feb 5)

Jan 28 → día 1

Jan 29 → día 2

Jan 30 → día 3

Feb 2 → día 4 (no sabe que es feriado)

Feb 3 → día 5 → resultado: 3 de febrero ✗

# Un día de diferencia en el plazo legal

Un día de diferencia en un finiquito puede ser la diferencia entre cumplir o no cumplir con el plazo que marca la Ley Federal del Trabajo.

La solución: consultar el calendario real por API

En lugar de mantener un archivo de fechas, la API devuelve los feriados reales de México para el año que consultes — incluyendo la fecha exacta del lunes flotante.

python Obtener feriados reales de México por año
import os, requests

API_KEY = os.environ[“FERIADOS_API_KEY”] BASE = “https://api.feriados.io/v1” HDR = {“Authorization”: f”Bearer {API_KEY}“}

Obtener todos los feriados de México en 2026

r = requests.get(f”{BASE}/MX/holidays”, params={“year”: 2026}, headers=HDR) feriados = r.json()[“data”]

Imprimir los flotantes

flotantes = [“Constitución”, “Juárez”, “Revolución”] for f in feriados: if any(k in f[“name”] for k in flotantes): print(f”{f[‘date’]} {f[‘name’]}“)

2026-02-02 Día de la Constitución

2026-03-16 Natalicio de Benito Juárez

2026-11-16 Día de la Revolución Mexicana

Para calcular días hábiles descontando los feriados reales:

python Días hábiles en México — nómina mensual
import os, requests, calendar

API_KEY = os.environ[“FERIADOS_API_KEY”] BASE = “https://api.feriados.io/v1” HDR = {“Authorization”: f”Bearer {API_KEY}”}

def dias_habiles_mx(año, mes): ultimo = calendar.monthrange(año, mes)[1] r = requests.get( f”{BASE}/MX/business-days/between”, params={“from”: f”{año}-{mes:02d}-01”, “to”: f”{año}-{mes:02d}-{ultimo}”}, headers=HDR, ) return r.json()[“data”][“business_days”]

Meses con lunes flotante en 2026

print(f”Febrero : {dias_habiles_mx(2026, 2)} días hábiles”) # → 19 print(f”Marzo : {dias_habiles_mx(2026, 3)} días hábiles”) # → 22 print(f”Noviembre: {dias_habiles_mx(2026, 11)} días hábiles”) # → 20

Y para sumar días hábiles a una fecha — útil para plazos de finiquitos, respuestas al IMSS o fechas de entrega:

python Calcular fecha límite sumando días hábiles
def fecha_limite(desde, dias_habiles):
    r = requests.get(
        f"{BASE}/MX/business-days/add",
        params={"date": desde, "days": dias_habiles},
        headers=HDR,
    )
    return r.json()["data"]["result_date"]

Finiquito con 5 días hábiles desde el 28 de enero

plazo = fecha_limite(“2026-01-28”, 5) print(f”Fecha límite: {plazo}”)

→ 2026-02-04 (correcto, saltó el 2 de febrero)

Por qué no conviene calcular los lunes flotantes manualmente

Calcular el primer o tercer lunes de un mes no es complicado en código. El problema no es ese cálculo — es mantenerlo actualizado cuando el gobierno decreta un cambio. México agregó el Día de las Niñas y los Niños en 2022 como feriado obligatorio. En 2022 el Congreso discutió el Día del Maestro. Los decretos pueden llegar con días de aviso.

Con la API, cuando cambia un decreto, el dato se actualiza sin que toques tu código.

También aplica a estos casos

Sistemas de RRHH

  • • Cálculo de días trabajados para nómina variable
  • • Plazos para liquidaciones y finiquitos
  • • Control de ausencias en días festivos reales
  • • Reportes de productividad por días hábiles del mes

Sistemas de pagos y logística

  • • Fechas de corte y facturación mensual
  • • Plazos de entrega comprometidos al cliente
  • • Dispersiones de nómina y pagos a proveedores
  • • Plazos fiscales y declaraciones al SAT

Si tu sistema maneja nómina o plazos laborales en México, el plan Starter da acceso a business-days/between y business-days/add — los dos endpoints que resuelven este problema — con cobertura de los 11 países de LATAM.

Plan Starter — desde $9/mes

El calendario correcto, sin mantenerlo

Feriados reales de México y 10 países más. Los lunes flotantes calculados automáticamente cada año.

Integra feriados.io en tu proyecto

API key gratis en 30 segundos. Sin tarjeta. 11 países de Latinoamérica, siempre actualizada con los feriados oficiales.

← Ver todos los artículos