// Catálogo de eventos fiscales export const EVENTOS_FISCALES = [ { titulo: 'Declaración mensual ISR', tipo: 'declaracion', diaBase: 17, mesRelativo: 1, recurrencia: 'mensual', usaExtensionRfc: false, regimenes: 'todos', condicion: null, }, { titulo: 'Declaración mensual IVA', tipo: 'declaracion', diaBase: 17, mesRelativo: 1, recurrencia: 'mensual', usaExtensionRfc: false, regimenes: 'todos', condicion: null, }, { titulo: 'Declaración mensual IEPS', tipo: 'declaracion', diaBase: 17, mesRelativo: 1, recurrencia: 'mensual', usaExtensionRfc: false, regimenes: 'todos', condicion: null, }, { titulo: 'Declaración de sueldos y salarios', tipo: 'declaracion', diaBase: 17, mesRelativo: 1, recurrencia: 'mensual', usaExtensionRfc: false, regimenes: 'todos', condicion: 'tiene_nomina', }, { titulo: 'Pago provisional ISR', tipo: 'pago', diaBase: 17, mesRelativo: 1, recurrencia: 'mensual', usaExtensionRfc: true, regimenes: 'todos', condicion: null, }, { titulo: 'Pago provisional IVA', tipo: 'pago', diaBase: 17, mesRelativo: 1, recurrencia: 'mensual', usaExtensionRfc: true, regimenes: 'todos', condicion: null, }, { titulo: 'Pago provisional IEPS', tipo: 'pago', diaBase: 17, mesRelativo: 1, recurrencia: 'mensual', usaExtensionRfc: true, regimenes: 'todos', condicion: null, }, { titulo: 'DIOT', tipo: 'obligacion', diaBase: 17, mesRelativo: 1, recurrencia: 'mensual', usaExtensionRfc: false, regimenes: '601,603,607,608,610,611,612,614,615,620,622,623,624', condicion: null, // 612 aplica condición ingresos_4m, se valida en runtime }, { titulo: 'Contabilidad electrónica', tipo: 'obligacion', diaBase: 3, mesRelativo: 2, recurrencia: 'mensual', usaExtensionRfc: false, regimenes: '601,603,607,608,610,611,612,614,615,620,622,623,624', condicion: null, }, { titulo: 'Declaración anual PM', tipo: 'declaracion', diaBase: 31, mesRelativo: 0, mesFijo: 3, recurrencia: 'anual', usaExtensionRfc: false, regimenes: '601,603,620,622,623,624', condicion: null, }, { titulo: 'Declaración anual PF', tipo: 'declaracion', diaBase: 30, mesRelativo: 0, mesFijo: 4, recurrencia: 'anual', usaExtensionRfc: false, regimenes: '605,606,607,608,611,612,614,615,621,625,626', condicion: null, }, { titulo: 'Informativa Sueldos y Salarios', tipo: 'informativa', diaBase: 15, mesRelativo: 0, mesFijo: 2, recurrencia: 'anual', usaExtensionRfc: false, regimenes: 'todos', condicion: 'tiene_nomina', }, ]; // Días festivos oficiales de México (2020-2027) // Incluye: 1 ene, 5 feb, 21 mar, 1 may, 16 sep, 1 oct (cambio poder), 20 nov, 25 dic // + cambios de poder cada 6 años, semana santa variable export const DIAS_INHABILES: { fecha: string; nombre: string }[] = []; function addFestivos(año: number) { const fijos = [ { mes: 1, dia: 1, nombre: 'Año Nuevo' }, { mes: 5, dia: 1, nombre: 'Día del Trabajo' }, { mes: 9, dia: 16, nombre: 'Independencia de México' }, { mes: 12, dia: 25, nombre: 'Navidad' }, ]; // Primer lunes de febrero (Constitución) const feb1 = new Date(año, 1, 1); const primerLunesFeb = new Date(año, 1, 1 + ((8 - feb1.getDay()) % 7)); DIAS_INHABILES.push({ fecha: primerLunesFeb.toISOString().split('T')[0], nombre: 'Día de la Constitución', }); // Tercer lunes de marzo (Benito Juárez) const mar1 = new Date(año, 2, 1); const primerLunesMar = new Date(año, 2, 1 + ((8 - mar1.getDay()) % 7)); const tercerLunesMar = new Date(primerLunesMar); tercerLunesMar.setDate(tercerLunesMar.getDate() + 14); DIAS_INHABILES.push({ fecha: tercerLunesMar.toISOString().split('T')[0], nombre: 'Natalicio de Benito Juárez', }); // Tercer lunes de noviembre (Revolución) const nov1 = new Date(año, 10, 1); const primerLunesNov = new Date(año, 10, 1 + ((8 - nov1.getDay()) % 7)); const tercerLunesNov = new Date(primerLunesNov); tercerLunesNov.setDate(tercerLunesNov.getDate() + 14); DIAS_INHABILES.push({ fecha: tercerLunesNov.toISOString().split('T')[0], nombre: 'Día de la Revolución', }); for (const f of fijos) { DIAS_INHABILES.push({ fecha: `${año}-${String(f.mes).padStart(2, '0')}-${String(f.dia).padStart(2, '0')}`, nombre: f.nombre, }); } // Cambio de poder (1 oct cada 6 años: 2024, 2030...) if (año % 6 === 0 || (año - 2024) % 6 === 0) { DIAS_INHABILES.push({ fecha: `${año}-10-01`, nombre: 'Transmisión del Poder Ejecutivo Federal', }); } } for (let y = 2020; y <= 2027; y++) addFestivos(y);