-- ============================================================
-- Migración 36: Correcciones al calendario tributario DIAN
-- Análisis técnico SIE Asesorías — 18 abril 2026
-- ============================================================
-- Cambios:
-- 1. Tabla colombian_holidays — festivos Ley Emiliani + Pascua 2024-2030
-- 2. Tabla uvt_history — UVT anual DIAN
-- 3. Columna category en tax_obligations — distingue nacional/territorial/camara/continua
-- 4. Config de zona horaria Colombia
-- 5. Seeds: obligaciones faltantes (GC cuotas, patrimonio, consumo, RST, PILA, etc.)
-- 6. Seeds: festivos colombianos 2024-2030
-- 7. Seeds: UVT histórica y proyectada
-- ============================================================

-- 1. Tabla de festivos colombianos (Ley 51/1983 — Ley Emiliani + Pascua)
CREATE TABLE IF NOT EXISTS colombian_holidays (
    id        INTEGER PRIMARY KEY AUTOINCREMENT,
    date      DATE    NOT NULL,
    name      TEXT    NOT NULL,
    type      TEXT    NOT NULL DEFAULT 'fixed',  -- fixed|emiliani|easter
    notes     TEXT,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    UNIQUE(date, name)
);

CREATE INDEX IF NOT EXISTS colombian_holidays_ix_date
    ON colombian_holidays (date);

-- 2. Tabla UVT anual
CREATE TABLE IF NOT EXISTS uvt_history (
    year       INTEGER PRIMARY KEY,
    value      INTEGER NOT NULL,   -- valor en pesos colombianos
    resolution TEXT,               -- resolución DIAN que lo establece
    notes      TEXT,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- 3. Columna category en tax_obligations
--    Valores: nacional | territorial | camara_comercio | seguridad_social | continua
ALTER TABLE tax_obligations ADD COLUMN category TEXT NOT NULL DEFAULT 'nacional';

-- 4. Config: zona horaria del sistema
INSERT OR IGNORE INTO tax_calendar_config (key, value, description)
    VALUES ('timezone', 'America/Bogota', 'Zona horaria para cálculo de fechas tributarias');

INSERT OR IGNORE INTO tax_calendar_config (key, value, description)
    VALUES ('holiday_adjust_deadlines', '1', 'Correr vencimientos que caen en festivo al siguiente día hábil');

-- ============================================================
-- 5. SEEDS — Obligaciones tributarias faltantes
-- ============================================================

-- Renta Grandes Contribuyentes: 3 cuotas separadas (E5)
INSERT OR IGNORE INTO tax_obligations
    (code, name, description, frequency, taxpayer_type, digit_scheme, display_order, category)
VALUES
    ('RENTA_GC_CUOTA1', 'Renta GC — 1ª Cuota (Anticipo)',
     'Primera cuota de anticipo Renta Grandes Contribuyentes — febrero. Art. 11 Dec. 2229/2025',
     'annual', 'gran_contribuyente', 'last_two_digits', 56, 'nacional'),

    ('RENTA_GC_CUOTA2', 'Renta GC — 2ª Cuota (Declaración + saldo)',
     'Segunda cuota: declaración y pago saldo Renta GC — abril. Art. 11 Dec. 2229/2025',
     'annual', 'gran_contribuyente', 'last_two_digits', 57, 'nacional'),

    ('RENTA_GC_CUOTA3', 'Renta GC — 3ª Cuota (Saldo final)',
     'Tercera cuota: saldo final Renta GC — junio. Art. 11 Dec. 2229/2025',
     'annual', 'gran_contribuyente', 'last_two_digits', 58, 'nacional');

-- Impuesto al Patrimonio (E2)
INSERT OR IGNORE INTO tax_obligations
    (code, name, description, frequency, taxpayer_type, digit_scheme, display_order, category)
VALUES
    ('PATRIMONIO', 'Impuesto al Patrimonio',
     'Declaración anual patrimonio — 4 cuotas. Art. 292-2 E.T. Form. 420',
     'annual', 'todos', 'last_digit', 91, 'nacional');

-- Impuesto Nacional al Consumo (E2)
INSERT OR IGNORE INTO tax_obligations
    (code, name, description, frequency, taxpayer_type, digit_scheme, display_order, category)
VALUES
    ('CONSUMO', 'Impuesto Nacional al Consumo',
     'Declaración bimestral — restaurantes, telefonía, vehículos. Form. 310',
     'bimonthly', 'todos', 'last_digit', 100, 'nacional');

-- Activos en el Exterior (E2)
INSERT OR IGNORE INTO tax_obligations
    (code, name, description, frequency, taxpayer_type, digit_scheme, display_order, category)
VALUES
    ('ACTIVOS_EXTERIOR', 'Activos en el Exterior',
     'Declaración anual activos poseídos en el exterior. Art. 607 E.T. Form. 160',
     'annual', 'todos', 'last_digit', 110, 'nacional');

-- Precios de Transferencia (E2)
INSERT OR IGNORE INTO tax_obligations
    (code, name, description, frequency, taxpayer_type, digit_scheme, display_order, category)
VALUES
    ('PRECIO_TRANSFERENCIA', 'Precios de Transferencia',
     'Declaración anual — vinculados económicos en el exterior. Form. 120/130',
     'annual', 'persona_juridica', 'last_two_digits', 115, 'nacional');

-- Autorretención especial (E2)
INSERT OR IGNORE INTO tax_obligations
    (code, name, description, frequency, taxpayer_type, digit_scheme, display_order, category)
VALUES
    ('AUTORRETENCION', 'Autorretención Especial Renta',
     'Autorretención mensual a título de Renta — Dec. 2201/2016. Form. 350',
     'monthly', 'agente_retencion', 'last_digit', 25, 'nacional');

-- Información Exógena (12 formatos individuales — E2)
INSERT OR IGNORE INTO tax_obligations
    (code, name, description, frequency, taxpayer_type, digit_scheme, display_order, category)
VALUES
    ('EXOGENA_1001', 'Exógena — Formato 1001 (Pagos y abonos)',
     'Personas o entidades a quienes se hicieron pagos. Res. 162/2023',
     'annual', 'todos', 'last_two_digits', 81, 'nacional'),

    ('EXOGENA_1003', 'Exógena — Formato 1003 (Retenciones practicadas)',
     'Retenciones en la fuente practicadas. Res. 162/2023',
     'annual', 'todos', 'last_two_digits', 82, 'nacional'),

    ('EXOGENA_1005', 'Exógena — Formato 1005 (IVA descontable)',
     'IVA llevado como descontable. Res. 162/2023',
     'annual', 'todos', 'last_two_digits', 83, 'nacional'),

    ('EXOGENA_1006', 'Exógena — Formato 1006 (IVA generado)',
     'IVA generado en operaciones. Res. 162/2023',
     'annual', 'todos', 'last_two_digits', 84, 'nacional'),

    ('EXOGENA_1007', 'Exógena — Formato 1007 (Ingresos recibidos)',
     'Ingresos recibidos en el año. Res. 162/2023',
     'annual', 'todos', 'last_two_digits', 85, 'nacional'),

    ('EXOGENA_1008', 'Exógena — Formato 1008 (Cuentas por cobrar)',
     'Deudores — saldos al 31 de diciembre. Res. 162/2023',
     'annual', 'todos', 'last_two_digits', 86, 'nacional'),

    ('EXOGENA_1009', 'Exógena — Formato 1009 (Cuentas por pagar)',
     'Acreedores — saldos al 31 de diciembre. Res. 162/2023',
     'annual', 'todos', 'last_two_digits', 87, 'nacional'),

    ('EXOGENA_1010', 'Exógena — Formato 1010 (Socios y accionistas)',
     'Información de socios, accionistas y cooperados. Res. 162/2023',
     'annual', 'todos', 'last_two_digits', 88, 'nacional'),

    ('EXOGENA_1011', 'Exógena — Formato 1011 (Información declaraciones)',
     'Información de declaraciones tributarias propias. Res. 162/2023',
     'annual', 'todos', 'last_two_digits', 89, 'nacional'),

    ('EXOGENA_1012', 'Exógena — Formato 1012 (Saldos cuentas e inversiones)',
     'Saldos de cuentas e instrumentos financieros. Res. 162/2023',
     'annual', 'todos', 'last_two_digits', 90, 'nacional');

-- Régimen Simple de Tributación — RST (E7)
INSERT OR IGNORE INTO tax_obligations
    (code, name, description, frequency, taxpayer_type, digit_scheme, display_order, category)
VALUES
    ('RST_BIMESTRAL', 'RST — Anticipo Bimestral',
     'Anticipo bimestral SIMPLE — Ley 2010/2019. Form. 2593',
     'bimonthly', 'regimen_simple', 'last_digit', 120, 'nacional'),

    ('RST_ANUAL', 'RST — Declaración Anual Consolidada',
     'Declaración anual consolidada Régimen Simple. Form. 260',
     'annual', 'regimen_simple', 'last_digit', 121, 'nacional');

-- Certificados de retención a terceros (E15)
INSERT OR IGNORE INTO tax_obligations
    (code, name, description, frequency, taxpayer_type, digit_scheme, display_order, category)
VALUES
    ('CERT_RETENCION', 'Certificados de Retención en la Fuente',
     'Expedición a terceros — antes del 31 de marzo. Art. 381 E.T. Form. 220',
     'annual', 'agente_retencion', 'last_digit', 45, 'nacional');

-- Conciliación fiscal (E16)
INSERT OR IGNORE INTO tax_obligations
    (code, name, description, frequency, taxpayer_type, digit_scheme, display_order, category)
VALUES
    ('CONCILIACION_FISCAL', 'Conciliación Fiscal (Anexo Form. 110)',
     'Reporte diferencias entre contabilidad y declaración de renta. Art. 772-1 E.T.',
     'annual', 'persona_juridica', 'last_digit', 51, 'nacional');

-- Matrícula mercantil — Renovación anual (E18)
INSERT OR IGNORE INTO tax_obligations
    (code, name, description, frequency, taxpayer_type, digit_scheme, display_order, category)
VALUES
    ('MATRICULA_MERCANTIL', 'Renovación Matrícula Mercantil',
     'Renovación anual ante Cámara de Comercio — hasta 31 de marzo.',
     'annual', 'todos', 'last_digit', 200, 'camara_comercio');

-- PILA / Seguridad Social (E20)
INSERT OR IGNORE INTO tax_obligations
    (code, name, description, frequency, taxpayer_type, digit_scheme, display_order, category)
VALUES
    ('PILA', 'Seguridad Social — PILA',
     'Planilla Integrada de Liquidación de Aportes. Plazos por último dígito NIT según operador.',
     'monthly', 'todos', 'last_digit', 210, 'seguridad_social');

-- Factura Electrónica (obligación continua — E14)
INSERT OR IGNORE INTO tax_obligations
    (code, name, description, frequency, taxpayer_type, digit_scheme, display_order, category)
VALUES
    ('FACTELECTRONICA', 'Factura Electrónica',
     'Transmisión inmediata a la DIAN — Res. 042/2020. Obligación continua por operación.',
     'continuous', 'todos', 'last_digit', 220, 'continua'),

    ('NOMINA_ELECTRONICA', 'Documento Soporte Nómina Electrónica',
     'Reporte mensual de nómina — Res. 013/2021.',
     'monthly', 'todos', 'last_digit', 221, 'continua'),

    ('DOC_SOPORTE_ADQUI', 'Documento Soporte en Adquisiciones',
     'Para compras a no obligados a facturar — Res. 167/2021. Por operación.',
     'continuous', 'todos', 'last_digit', 222, 'continua'),

    ('RUB', 'Registro Único de Beneficiarios Finales',
     'Actualización ante cambios. Res. 37/2022 DIAN. Obligación permanente.',
     'continuous', 'persona_juridica', 'last_digit', 223, 'continua');

-- Actualizar categoría del ICA (es territorial, no nacional)
UPDATE tax_obligations SET category = 'territorial' WHERE code = 'ICA';

-- ICA principales ciudades (E6 — parcial)
INSERT OR IGNORE INTO tax_obligations
    (code, name, description, frequency, taxpayer_type, digit_scheme, display_order, category)
VALUES
    ('ICA_BOGOTA', 'ICA — Bogotá D.C.',
     'Bimestral — último dígito NIT Bogotá. Decreto Distrital.',
     'bimonthly', 'todos', 'last_digit', 131, 'territorial'),

    ('ICA_MEDELLIN', 'ICA — Medellín',
     'Bimestral — Acuerdo 54/2011 Medellín.',
     'bimonthly', 'todos', 'last_digit', 132, 'territorial'),

    ('ICA_CALI', 'ICA — Cali',
     'Bimestral — Acuerdo Municipal Cali.',
     'bimonthly', 'todos', 'last_digit', 133, 'territorial'),

    ('ICA_BARRANQUILLA', 'ICA — Barranquilla',
     'Bimestral — Acuerdo Municipal Barranquilla.',
     'bimonthly', 'todos', 'last_digit', 134, 'territorial'),

    ('RIT_BOGOTA', 'RIT — Bogotá (Registro Información Tributaria)',
     'Registro anual de información tributaria Bogotá — marzo.',
     'annual', 'todos', 'last_digit', 135, 'territorial');

-- ============================================================
-- 6. SEEDS — UVT histórica (DIAN Res. anual)
-- ============================================================
INSERT OR IGNORE INTO uvt_history (year, value, resolution, notes) VALUES
    (2020, 35607, 'Res. DIAN 000084/2019', 'UVT vigencia 2020'),
    (2021, 36308, 'Res. DIAN 000111/2020', 'UVT vigencia 2021'),
    (2022, 38004, 'Res. DIAN 000140/2021', 'UVT vigencia 2022'),
    (2023, 42412, 'Res. DIAN 000178/2022', 'UVT vigencia 2023'),
    (2024, 47065, 'Res. DIAN 000187/2023', 'UVT vigencia 2024'),
    (2025, 49799, 'Res. DIAN 000226/2024', 'UVT vigencia 2025'),
    (2026, 53206, 'Res. DIAN pendiente',   'UVT vigencia 2026 — actualizar con resolución oficial');

-- ============================================================
-- 7. SEEDS — Festivos colombianos 2024-2030
--    Fuentes: Ley 51/1983 (Emiliani), E.T., cálculo Pascua
-- ============================================================

-- 2024 (Pascua: 31 marzo)
INSERT OR IGNORE INTO colombian_holidays (date, name, type) VALUES
    ('2024-01-01', 'Año Nuevo', 'fixed'),
    ('2024-01-08', 'Reyes Magos', 'emiliani'),
    ('2024-03-25', 'San José', 'emiliani'),
    ('2024-03-28', 'Jueves Santo', 'easter'),
    ('2024-03-29', 'Viernes Santo', 'easter'),
    ('2024-05-01', 'Día del Trabajo', 'fixed'),
    ('2024-05-13', 'Ascensión del Señor', 'easter'),
    ('2024-06-03', 'Corpus Christi', 'easter'),
    ('2024-06-10', 'Sagrado Corazón de Jesús', 'easter'),
    ('2024-07-01', 'San Pedro y San Pablo', 'emiliani'),
    ('2024-07-20', 'Día de la Independencia', 'fixed'),
    ('2024-08-07', 'Batalla de Boyacá', 'fixed'),
    ('2024-08-19', 'Asunción de la Virgen', 'emiliani'),
    ('2024-10-14', 'Día de la Raza', 'emiliani'),
    ('2024-11-04', 'Todos los Santos', 'emiliani'),
    ('2024-11-11', 'Independencia de Cartagena', 'emiliani'),
    ('2024-12-08', 'Inmaculada Concepción', 'fixed'),
    ('2024-12-25', 'Navidad', 'fixed');

-- 2025 (Pascua: 20 abril)
INSERT OR IGNORE INTO colombian_holidays (date, name, type) VALUES
    ('2025-01-01', 'Año Nuevo', 'fixed'),
    ('2025-01-06', 'Reyes Magos', 'emiliani'),
    ('2025-03-24', 'San José', 'emiliani'),
    ('2025-04-17', 'Jueves Santo', 'easter'),
    ('2025-04-18', 'Viernes Santo', 'easter'),
    ('2025-05-01', 'Día del Trabajo', 'fixed'),
    ('2025-06-02', 'Ascensión del Señor', 'easter'),
    ('2025-06-23', 'Corpus Christi', 'easter'),
    ('2025-06-30', 'San Pedro y San Pablo', 'emiliani'),
    ('2025-06-30', 'Sagrado Corazón de Jesús', 'easter'),
    ('2025-07-20', 'Día de la Independencia', 'fixed'),
    ('2025-08-07', 'Batalla de Boyacá', 'fixed'),
    ('2025-08-18', 'Asunción de la Virgen', 'emiliani'),
    ('2025-10-13', 'Día de la Raza', 'emiliani'),
    ('2025-11-03', 'Todos los Santos', 'emiliani'),
    ('2025-11-17', 'Independencia de Cartagena', 'emiliani'),
    ('2025-12-08', 'Inmaculada Concepción', 'fixed'),
    ('2025-12-25', 'Navidad', 'fixed');

-- 2026 (Pascua: 5 abril)
INSERT OR IGNORE INTO colombian_holidays (date, name, type) VALUES
    ('2026-01-01', 'Año Nuevo', 'fixed'),
    ('2026-01-12', 'Reyes Magos', 'emiliani'),
    ('2026-03-23', 'San José', 'emiliani'),
    ('2026-04-02', 'Jueves Santo', 'easter'),
    ('2026-04-03', 'Viernes Santo', 'easter'),
    ('2026-05-01', 'Día del Trabajo', 'fixed'),
    ('2026-05-18', 'Ascensión del Señor', 'easter'),
    ('2026-06-08', 'Corpus Christi', 'easter'),
    ('2026-06-15', 'Sagrado Corazón de Jesús', 'easter'),
    ('2026-06-29', 'San Pedro y San Pablo', 'emiliani'),
    ('2026-07-20', 'Día de la Independencia', 'fixed'),
    ('2026-08-07', 'Batalla de Boyacá', 'fixed'),
    ('2026-08-17', 'Asunción de la Virgen', 'emiliani'),
    ('2026-10-12', 'Día de la Raza', 'emiliani'),
    ('2026-11-02', 'Todos los Santos', 'emiliani'),
    ('2026-11-16', 'Independencia de Cartagena', 'emiliani'),
    ('2026-12-08', 'Inmaculada Concepción', 'fixed'),
    ('2026-12-25', 'Navidad', 'fixed');

-- 2027 (Pascua: 28 marzo)
INSERT OR IGNORE INTO colombian_holidays (date, name, type) VALUES
    ('2027-01-01', 'Año Nuevo', 'fixed'),
    ('2027-01-11', 'Reyes Magos', 'emiliani'),
    ('2027-03-22', 'San José', 'emiliani'),
    ('2027-03-25', 'Jueves Santo', 'easter'),
    ('2027-03-26', 'Viernes Santo', 'easter'),
    ('2027-05-01', 'Día del Trabajo', 'fixed'),
    ('2027-05-10', 'Ascensión del Señor', 'easter'),
    ('2027-05-31', 'Corpus Christi', 'easter'),
    ('2027-06-07', 'Sagrado Corazón de Jesús', 'easter'),
    ('2027-07-05', 'San Pedro y San Pablo', 'emiliani'),
    ('2027-07-20', 'Día de la Independencia', 'fixed'),
    ('2027-08-07', 'Batalla de Boyacá', 'fixed'),
    ('2027-08-16', 'Asunción de la Virgen', 'emiliani'),
    ('2027-10-18', 'Día de la Raza', 'emiliani'),
    ('2027-11-01', 'Todos los Santos', 'emiliani'),
    ('2027-11-15', 'Independencia de Cartagena', 'emiliani'),
    ('2027-12-08', 'Inmaculada Concepción', 'fixed'),
    ('2027-12-25', 'Navidad', 'fixed');

-- 2028 (Pascua: 16 abril)
INSERT OR IGNORE INTO colombian_holidays (date, name, type) VALUES
    ('2028-01-01', 'Año Nuevo', 'fixed'),
    ('2028-01-10', 'Reyes Magos', 'emiliani'),
    ('2028-03-20', 'San José', 'emiliani'),
    ('2028-04-13', 'Jueves Santo', 'easter'),
    ('2028-04-14', 'Viernes Santo', 'easter'),
    ('2028-05-01', 'Día del Trabajo', 'fixed'),
    ('2028-05-29', 'Ascensión del Señor', 'easter'),
    ('2028-06-19', 'Corpus Christi', 'easter'),
    ('2028-06-26', 'Sagrado Corazón de Jesús', 'easter'),
    ('2028-07-03', 'San Pedro y San Pablo', 'emiliani'),
    ('2028-07-20', 'Día de la Independencia', 'fixed'),
    ('2028-08-07', 'Batalla de Boyacá', 'fixed'),
    ('2028-08-21', 'Asunción de la Virgen', 'emiliani'),
    ('2028-10-16', 'Día de la Raza', 'emiliani'),
    ('2028-11-06', 'Todos los Santos', 'emiliani'),
    ('2028-11-13', 'Independencia de Cartagena', 'emiliani'),
    ('2028-12-08', 'Inmaculada Concepción', 'fixed'),
    ('2028-12-25', 'Navidad', 'fixed');

-- 2029 (Pascua: 1 abril)
INSERT OR IGNORE INTO colombian_holidays (date, name, type) VALUES
    ('2029-01-01', 'Año Nuevo', 'fixed'),
    ('2029-01-08', 'Reyes Magos', 'emiliani'),
    ('2029-03-19', 'San José', 'emiliani'),
    ('2029-03-29', 'Jueves Santo', 'easter'),
    ('2029-03-30', 'Viernes Santo', 'easter'),
    ('2029-05-01', 'Día del Trabajo', 'fixed'),
    ('2029-05-14', 'Ascensión del Señor', 'easter'),
    ('2029-06-04', 'Corpus Christi', 'easter'),
    ('2029-06-11', 'Sagrado Corazón de Jesús', 'easter'),
    ('2029-07-02', 'San Pedro y San Pablo', 'emiliani'),
    ('2029-07-20', 'Día de la Independencia', 'fixed'),
    ('2029-08-07', 'Batalla de Boyacá', 'fixed'),
    ('2029-08-20', 'Asunción de la Virgen', 'emiliani'),
    ('2029-10-15', 'Día de la Raza', 'emiliani'),
    ('2029-11-05', 'Todos los Santos', 'emiliani'),
    ('2029-11-12', 'Independencia de Cartagena', 'emiliani'),
    ('2029-12-08', 'Inmaculada Concepción', 'fixed'),
    ('2029-12-25', 'Navidad', 'fixed');

-- 2030 (Pascua: 21 abril)
INSERT OR IGNORE INTO colombian_holidays (date, name, type) VALUES
    ('2030-01-01', 'Año Nuevo', 'fixed'),
    ('2030-01-07', 'Reyes Magos', 'emiliani'),
    ('2030-03-25', 'San José', 'emiliani'),
    ('2030-04-18', 'Jueves Santo', 'easter'),
    ('2030-04-19', 'Viernes Santo', 'easter'),
    ('2030-05-01', 'Día del Trabajo', 'fixed'),
    ('2030-06-03', 'Ascensión del Señor', 'easter'),
    ('2030-06-24', 'Corpus Christi', 'easter'),
    ('2030-07-01', 'San Pedro y San Pablo', 'emiliani'),
    ('2030-07-01', 'Sagrado Corazón de Jesús', 'easter'),
    ('2030-07-20', 'Día de la Independencia', 'fixed'),
    ('2030-08-07', 'Batalla de Boyacá', 'fixed'),
    ('2030-08-19', 'Asunción de la Virgen', 'emiliani'),
    ('2030-10-14', 'Día de la Raza', 'emiliani'),
    ('2030-11-04', 'Todos los Santos', 'emiliani'),
    ('2030-11-11', 'Independencia de Cartagena', 'emiliani'),
    ('2030-12-08', 'Inmaculada Concepción', 'fixed'),
    ('2030-12-25', 'Navidad', 'fixed');

-- ============================================================
-- 8. E12 — Log de notificaciones email por vencimiento tributario
-- ============================================================

CREATE TABLE IF NOT EXISTS tax_deadline_notification_log (
    id               INTEGER PRIMARY KEY AUTOINCREMENT,
    client_id        INTEGER NOT NULL,
    obligation_code  TEXT    NOT NULL,
    year             INTEGER NOT NULL,
    period           TEXT    NOT NULL,
    deadline_date    DATE    NOT NULL,
    days_before      INTEGER NOT NULL,  -- con cuántos días de anticipación se envió
    recipient        TEXT    NOT NULL,  -- usuario DokuWiki destinatario
    sent_at          DATETIME DEFAULT CURRENT_TIMESTAMP,
    UNIQUE(client_id, obligation_code, year, period, days_before, recipient)
);

CREATE INDEX IF NOT EXISTS tax_deadline_notif_ix_client
    ON tax_deadline_notification_log (client_id, deadline_date);

-- Config: días de anticipación para notificar (separados por coma)
INSERT OR IGNORE INTO tax_calendar_config (key, value, description)
    VALUES ('deadline_alert_days', '5,3,1',
            'Días de anticipación para enviar alerta por email. Separados por coma.');

-- Config: intervalo mínimo entre ejecuciones del CRON (segundos)
INSERT OR IGNORE INTO tax_calendar_config (key, value, description)
    VALUES ('notification_cron_interval', '14400',
            'Segundos mínimos entre ejecuciones del job de notificaciones (default: 4 horas).');

INSERT OR IGNORE INTO tax_calendar_config (key, value, description)
    VALUES ('notification_last_run', '',
            'Timestamp de la última ejecución del job de notificaciones.');

-- ============================================================
-- 9. E19 — No Responsable de IVA (Ley 1943/2018)
--    Reemplazó al antiguo "régimen simplificado". Tiene obligaciones
--    distintas: NO presenta IVA ni RETEIVA, pero SÍ Renta y Retefuente.
-- ============================================================

-- Config para documentar el tipo (no afecta datos existentes)
INSERT OR IGNORE INTO tax_calendar_config (key, value, description)
    VALUES ('taxpayer_type_no_responsable_iva_since', '2019', 'Vigente desde Ley 1943/2018 — reemplaza régimen simplificado');

-- Obligaciones aplicables al No Responsable de IVA
-- (Renta PN ya existe con taxpayer_type='persona_natural' — aplica también)
-- Solo agregamos las específicas que difieren del responsable de IVA:
-- Nota: RENTA_PN existente con taxpayer_type='persona_natural' aplica también,
-- no se duplica. Solo se agregan las obligaciones propias de este tipo.

-- Impuesto de timbre (específico en algunos contratos)
INSERT OR IGNORE INTO tax_obligations
    (code, name, description, frequency, taxpayer_type, digit_scheme, display_order, category)
VALUES
    ('TIMBRE', 'Impuesto de Timbre Nacional',
     'Aplica en contratos o instrumentos públicos. Art. 514 E.T. Form. 350.',
     'custom', 'todos', 'last_digit', 300, 'nacional');

-- Retención practicada sobre honorarios a no responsables de IVA
INSERT OR IGNORE INTO tax_obligations
    (code, name, description, frequency, taxpayer_type, digit_scheme, display_order, category)
VALUES
    ('CERT_HONORARIOS', 'Certificado Retención sobre Honorarios',
     'Certificado a profesionales no responsables de IVA — Art. 381 E.T.',
     'annual', 'agente_retencion', 'last_digit', 46, 'nacional');

-- Nota en config: el tipo no_responsable_iva usa RETEFUENTE + RENTA_PN pero NO IVA_BIM/CUATRIM
INSERT OR IGNORE INTO tax_calendar_config (key, value, description)
    VALUES ('no_responsable_iva_excluded_obligations', 'IVA_BIM,IVA_CUATRIM,RETEIVA',
            'Obligaciones que NO aplican al No Responsable de IVA — se excluyen automáticamente');

-- ============================================================
-- 10. CORRECCIONES DE FECHAS — Festivos calculados erróneamente
--     (UPDATE idempotente: sólo actualiza si el dato incorrecto existe)
--     Verificación matemática con Ley 51/1983 (Emiliani).
-- ============================================================

-- 2025: Independencia de Cartagena — Nov 11 es MARTES → lunes siguiente = Nov 17 (no Nov 10)
UPDATE colombian_holidays
    SET date = '2025-11-17'
    WHERE date = '2025-11-10' AND name = 'Independencia de Cartagena';

-- 2028: San José — Mar 19 es DOMINGO → lunes siguiente = Mar 20 (no Mar 19)
UPDATE colombian_holidays
    SET date = '2028-03-20'
    WHERE date = '2028-03-19' AND name = 'San José';

-- 2029: San José — Mar 19 es LUNES → permanece Mar 19 (el seed tenía Mar 24 erróneamente)
UPDATE colombian_holidays
    SET date = '2029-03-19'
    WHERE date = '2029-03-24' AND name = 'San José';

-- 2029: Independencia de Cartagena — Nov 11 es DOMINGO → lunes siguiente = Nov 12 (no Nov 13)
UPDATE colombian_holidays
    SET date = '2029-11-12'
    WHERE date = '2029-11-13' AND name = 'Independencia de Cartagena';

-- 2029: Todos los Santos — Nov 1 es JUEVES → lunes siguiente = Nov 5 (no Nov 6)
UPDATE colombian_holidays
    SET date = '2029-11-05'
    WHERE date = '2029-11-06' AND name = 'Todos los Santos';
