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:
@@ -0,0 +1,7 @@
|
||||
-- Extender periodicidad para soportar declaraciones cuatrimestrales (ej. SISUB)
|
||||
ALTER TABLE declaraciones_provisionales
|
||||
DROP CONSTRAINT IF EXISTS declaraciones_provisionales_periodicidad_check;
|
||||
|
||||
ALTER TABLE declaraciones_provisionales
|
||||
ADD CONSTRAINT declaraciones_provisionales_periodicidad_check
|
||||
CHECK (periodicidad IN ('mensual', 'bimestral', 'trimestral', 'cuatrimestral', 'semestral', 'anual'));
|
||||
25
apps/api/src/migrations/tenant/053_obligacion_evidencias.sql
Normal file
25
apps/api/src/migrations/tenant/053_obligacion_evidencias.sql
Normal file
@@ -0,0 +1,25 @@
|
||||
-- Evidencias de cumplimiento para obligaciones fiscales.
|
||||
-- Permite subir cualquier documento (declaración, pago, acuse, complemento)
|
||||
-- vinculado a una obligación y periodo específicos.
|
||||
CREATE TABLE IF NOT EXISTS obligacion_evidencias (
|
||||
id serial PRIMARY KEY,
|
||||
obligacion_id uuid NOT NULL REFERENCES obligaciones_contribuyente(id) ON DELETE CASCADE,
|
||||
periodo varchar(7) NOT NULL, -- "2026-04"
|
||||
contribuyente_id uuid NOT NULL REFERENCES contribuyentes(entidad_id) ON DELETE CASCADE,
|
||||
tipo_documento varchar(30) NOT NULL CHECK (tipo_documento IN (
|
||||
'declaracion', 'pago', 'acuse', 'complemento'
|
||||
)),
|
||||
archivo bytea NOT NULL,
|
||||
archivo_filename varchar(255) NOT NULL,
|
||||
archivo_mime varchar(100) DEFAULT 'application/pdf',
|
||||
notas text,
|
||||
subido_por uuid, -- UUID del usuario en horux360 (sin FK local)
|
||||
subido_por_email varchar(255),
|
||||
created_at timestamptz DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_obligacion_evidencias_obligacion_periodo
|
||||
ON obligacion_evidencias (obligacion_id, periodo);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_obligacion_evidencias_contribuyente
|
||||
ON obligacion_evidencias (contribuyente_id);
|
||||
@@ -0,0 +1,16 @@
|
||||
-- Estados de declaración y pago por separado para obligaciones que requieren ambos.
|
||||
ALTER TABLE obligacion_periodos
|
||||
ADD COLUMN IF NOT EXISTS declaracion_presentada boolean DEFAULT false,
|
||||
ADD COLUMN IF NOT EXISTS pago_presentado boolean DEFAULT false;
|
||||
|
||||
-- Backfill: periodos ya completados se consideran con declaración y pago presentados.
|
||||
UPDATE obligacion_periodos
|
||||
SET declaracion_presentada = true,
|
||||
pago_presentado = true
|
||||
WHERE completada = true
|
||||
AND (declaracion_presentada IS NULL OR pago_presentado IS NULL);
|
||||
|
||||
-- Asegurar que declaracion_presentada y pago_presentado no sean NULL.
|
||||
ALTER TABLE obligacion_periodos
|
||||
ALTER COLUMN declaracion_presentada SET NOT NULL,
|
||||
ALTER COLUMN pago_presentado SET NOT NULL;
|
||||
@@ -0,0 +1,12 @@
|
||||
-- Relación entre declaraciones provisionales y obligaciones fiscales.
|
||||
-- Permite saber exactamente qué obligaciones cierra una declaración
|
||||
-- y aplicar el comprobante de pago a las mismas obligaciones.
|
||||
CREATE TABLE IF NOT EXISTS declaracion_obligaciones (
|
||||
declaracion_id INT NOT NULL REFERENCES declaraciones_provisionales(id) ON DELETE CASCADE,
|
||||
obligacion_id UUID NOT NULL REFERENCES obligaciones_contribuyente(id) ON DELETE CASCADE,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
PRIMARY KEY (declaracion_id, obligacion_id)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_declaracion_obligaciones_obligacion
|
||||
ON declaracion_obligaciones (obligacion_id);
|
||||
Reference in New Issue
Block a user