-- ============================================================
-- quoERP — Conciliacion de Retenciones (Declaracion Form. 103)
-- Migracion: 027_retention_declarations.sql
-- ============================================================
-- Registra el estado de cada declaracion mensual de retenciones
-- en la fuente (IR) e IVA al SRI. Permite verificar que lo
-- retenido en el mes fue efectivamente declarado y pagado.
-- ============================================================

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

CREATE TABLE IF NOT EXISTS retention_declarations (
    id                 INT UNSIGNED    NOT NULL AUTO_INCREMENT,
    company_id         INT UNSIGNED    NOT NULL,
    year               SMALLINT UNSIGNED NOT NULL,
    month              TINYINT UNSIGNED  NOT NULL,
    period_label       VARCHAR(40)     NOT NULL      COMMENT 'Ej: Enero 2025',
    -- Totales del periodo (calculados desde retention_vouchers)
    total_ir           DECIMAL(12,4)   NOT NULL DEFAULT 0
        COMMENT 'Total IR retenido en el periodo',
    total_iva_ret      DECIMAL(12,4)   NOT NULL DEFAULT 0
        COMMENT 'Total IVA retenido en el periodo',
    total_to_declare   DECIMAL(12,4)   NOT NULL DEFAULT 0
        COMMENT 'Total a declarar y pagar al SRI',
    -- Estado de la declaracion
    status             ENUM('pending','declared','paid','reconciled')
                       NOT NULL DEFAULT 'pending'
        COMMENT 'pending=sin declarar, declared=declarado sin pagar, paid=pagado al SRI, reconciled=conciliado',
    -- Datos de la declaracion
    declaration_date   DATE            DEFAULT NULL  COMMENT 'Fecha en que se presento el Form. 103',
    form103_number     VARCHAR(30)     DEFAULT NULL  COMMENT 'Numero o referencia del formulario 103',
    -- Datos del pago al SRI
    payment_date       DATE            DEFAULT NULL,
    payment_amount     DECIMAL(12,4)   DEFAULT NULL,
    payment_reference  VARCHAR(100)    DEFAULT NULL  COMMENT 'Numero de comprobante de pago SRI',
    -- Diferencia (debe ser cero si esta bien conciliado)
    difference         DECIMAL(12,4)   GENERATED ALWAYS AS
                       (total_to_declare - COALESCE(payment_amount, 0)) STORED,
    notes              TEXT            DEFAULT NULL,
    updated_by         INT UNSIGNED    DEFAULT NULL,
    created_at         DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at         DATETIME        DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY uk_period (company_id, year, month),
    INDEX idx_company (company_id),
    INDEX idx_status  (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

SET FOREIGN_KEY_CHECKS = 1;
