186 lines
4.8 KiB
TypeScript
186 lines
4.8 KiB
TypeScript
// 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);
|