chore: catálogo obligaciones, cierre automático, fixes SAT y facturación
- Catálogo de obligaciones fiscales expandido a 30 entradas con campo requierePago. - Soporte de frecuencia cuatrimestral en obligaciones y declaraciones. - Automatización de cierre de obligaciones fiscales desde Documentos › Declaraciones. - Nuevas tablas obligacion_evidencias, obligacion_periodos estados y declaracion_obligaciones. - Nuevo servicio obligacion-evidencias.service.ts y endpoints REST. - Refactor de declaraciones.service.ts para vincular obligaciones y crear evidencias. - Notificaciones por email para evidencias de obligaciones. - Adjuntar PDFs en correo de declaración subida. - Fix drill-down de CFDIs: carga completa al visualizar. - Fix sincronización SAT: tipos P/N, UUID case-insensitive, no reutilizar requestId. - Fix suscripciones pending en /configuracion/planes-despacho. - Fix sugerencias de Clave Producto SAT: importar catálogo y robustecer autocomplete. - Quitar toggle manual de completado en Configuración › Obligaciones fiscales › Tareas. - Scripts de soporte para Demo Ventas y utilerías (change-user-email, resend-welcome, import-clave-prod-serv). - Documentación de cambios en docs/CAMBIOS-2026-05-04.md.
This commit is contained in:
47
apps/web/lib/api/obligaciones.ts
Normal file
47
apps/web/lib/api/obligaciones.ts
Normal file
@@ -0,0 +1,47 @@
|
||||
import { apiClient } from './client';
|
||||
|
||||
export interface DeclaracionLink {
|
||||
id: number;
|
||||
año: number;
|
||||
mes: number;
|
||||
tipo: 'normal' | 'complementaria';
|
||||
pdfFilename: string | null;
|
||||
}
|
||||
|
||||
export interface ObligacionPeriodo {
|
||||
id: string;
|
||||
nombre: string;
|
||||
frecuencia: string | null;
|
||||
fechaLimite: string | null;
|
||||
categoria: string | null;
|
||||
activa: boolean;
|
||||
esRecomendada: boolean;
|
||||
completada: boolean;
|
||||
completadaAt: string | null;
|
||||
completadaPor: string | null;
|
||||
periodoCompletado: string | null;
|
||||
periodStatus: 'pendiente' | 'completada' | 'atrasada';
|
||||
periodoAplica: string;
|
||||
declaracion: DeclaracionLink | null;
|
||||
declaracionPresentada: boolean;
|
||||
pagoPresentado: boolean;
|
||||
requierePago: boolean;
|
||||
}
|
||||
|
||||
export interface ObligacionesPorPeriodoResponse {
|
||||
data: ObligacionPeriodo[];
|
||||
periodo: string;
|
||||
}
|
||||
|
||||
export function getObligacionesPorPeriodo(
|
||||
contribuyenteId: string,
|
||||
periodo: string,
|
||||
atrasados = false,
|
||||
): Promise<ObligacionesPorPeriodoResponse> {
|
||||
const params = new URLSearchParams();
|
||||
params.set('periodo', periodo);
|
||||
params.set('atrasados', String(atrasados));
|
||||
return apiClient
|
||||
.get<ObligacionesPorPeriodoResponse>(`/contribuyentes/${contribuyenteId}/obligaciones/periodo?${params}`)
|
||||
.then((r) => r.data);
|
||||
}
|
||||
Reference in New Issue
Block a user