

-- ── 2. FOLIOS CAF POR EMPRESA Y TIPO DTE ─────────────────────
CREATE TABLE IF NOT EXISTS `sii_folios` (
    `id`          INT UNSIGNED     NOT NULL AUTO_INCREMENT,
    `empresa_id`  TINYINT UNSIGNED NOT NULL,
    `tipo_dte`    SMALLINT UNSIGNED NOT NULL COMMENT '33=Factura,34=Fact.Exenta,39=Boleta,41=Boleta Exenta,56=ND,61=NC',
    `rango_desde` INT UNSIGNED     NOT NULL,
    `rango_hasta` INT UNSIGNED     NOT NULL,
    `folio_actual` INT UNSIGNED    NOT NULL COMMENT 'Último folio usado',
    `caf_xml`     MEDIUMTEXT       NULL COMMENT 'XML del CAF completo del SII',
    `fecha_venc`  DATE             NULL,
    `activo`      TINYINT(1)       NOT NULL DEFAULT 1,
    `created_at`  TIMESTAMP        NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_empresa_tipo_activo` (`empresa_id`,`tipo_dte`,`activo`),
    KEY `idx_empresa_tipo` (`empresa_id`,`tipo_dte`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Folios de ejemplo para certificación (reemplazar con folios reales del SII)
INSERT INTO `sii_folios` (`empresa_id`,`tipo_dte`,`rango_desde`,`rango_hasta`,`folio_actual`) VALUES
(1,56,1,1000,0),   -- Club principal: nota de débito exenta
(2,39,1,5000,0),   -- Restaurant: boleta afecta
(2,33,1,1000,0),   -- Restaurant: factura afecta
(2,61,1,500,0),    -- Restaurant: nota de crédito
(3,34,1,2000,0),   -- Instalaciones: factura exenta
(3,41,1,2000,0),   -- Instalaciones: boleta exenta
(4,56,1,5000,0)    -- Membresías: nota de venta exenta
ON DUPLICATE KEY UPDATE rango_hasta=VALUES(rango_hasta);

-- ── 3. DOCUMENTOS TRIBUTARIOS EMITIDOS ───────────────────────
CREATE TABLE IF NOT EXISTS `dte_documentos` (
    `id`              INT UNSIGNED     NOT NULL AUTO_INCREMENT,
    `empresa_id`      TINYINT UNSIGNED NOT NULL,
    `tipo_dte`        SMALLINT UNSIGNED NOT NULL,
    `folio`           INT UNSIGNED     NOT NULL,
    `fecha_emision`   DATE             NOT NULL,
    -- Receptor
    `rut_receptor`    VARCHAR(12)      NULL COMMENT 'NULL para boletas a consumidor final',
    `razon_receptor`  VARCHAR(150)     NULL,
    `giro_receptor`   VARCHAR(200)     NULL,
    `dir_receptor`    VARCHAR(200)     NULL,
    `comuna_receptor` VARCHAR(60)      NULL,
    `email_receptor`  VARCHAR(100)     NULL,
    -- Montos
    `neto`            DECIMAL(14,2)    NOT NULL DEFAULT 0,
    `iva`             DECIMAL(14,2)    NOT NULL DEFAULT 0,
    `exento`          DECIMAL(14,2)    NOT NULL DEFAULT 0,
    `total`           DECIMAL(14,2)    NOT NULL,
    -- Referencias
    `referencia_tipo` VARCHAR(50)      NULL COMMENT 'comanda, membresia, arriendo, actividad',
    `referencia_id`   INT UNSIGNED     NULL,
    `socio_id`        INT UNSIGNED     NULL,
    -- SII
    `estado_sii`      ENUM('pendiente','enviando','enviado','aceptado','rechazado','anulado') NOT NULL DEFAULT 'pendiente',
    `track_id`        VARCHAR(50)      NULL COMMENT 'TrackID retornado por el SII',
    `glosa_rechazo`   TEXT             NULL,
    -- Archivos
    `xml_sin_firma`   MEDIUMTEXT       NULL,
    `xml_firmado`     MEDIUMTEXT       NULL,
    `xml_sobre`       MEDIUMTEXT       NULL COMMENT 'EnvioDTE',
    `pdf_path`        VARCHAR(300)     NULL,
    -- Contabilidad
    `asiento_id`      INT UNSIGNED     NULL,
    -- Control
    `enviado_email`   TINYINT(1)       NOT NULL DEFAULT 0,
    `enviado_whatsapp` TINYINT(1)      NOT NULL DEFAULT 0,
    `created_at`      TIMESTAMP        NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at`      TIMESTAMP        NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_empresa_tipo_folio` (`empresa_id`,`tipo_dte`,`folio`),
    KEY `idx_empresa_fecha`  (`empresa_id`,`fecha_emision`),
    KEY `idx_estado_sii`     (`estado_sii`),
    KEY `idx_socio_dte`      (`socio_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ── 4. ÍTEMS DE CADA DTE ─────────────────────────────────────
CREATE TABLE IF NOT EXISTS `dte_items` (
    `id`          INT UNSIGNED  NOT NULL AUTO_INCREMENT,
    `dte_id`      INT UNSIGNED  NOT NULL,
    `numero`      TINYINT       NOT NULL DEFAULT 1,
    `nombre`      VARCHAR(200)  NOT NULL,
    `descripcion` VARCHAR(500)  NULL,
    `cantidad`    DECIMAL(10,3) NOT NULL DEFAULT 1,
    `unidad`      VARCHAR(20)   NULL DEFAULT 'Un',
    `precio_unit` DECIMAL(14,2) NOT NULL,
    `descuento`   DECIMAL(10,2) NOT NULL DEFAULT 0,
    `es_exento`   TINYINT(1)    NOT NULL DEFAULT 0,
    `subtotal`    DECIMAL(14,2) NOT NULL,
    PRIMARY KEY (`id`),
    KEY `fk_item_dte` (`dte_id`),
    CONSTRAINT `fk_item_dte` FOREIGN KEY (`dte_id`) REFERENCES `dte_documentos`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ── 5. REFERENCIAS ENTRE DTE (NC/ND) ─────────────────────────
CREATE TABLE IF NOT EXISTS `dte_referencias` (
    `id`          INT UNSIGNED  NOT NULL AUTO_INCREMENT,
    `dte_id`      INT UNSIGNED  NOT NULL COMMENT 'DTE que referencia (NC o ND)',
    `tipo_ref`    SMALLINT      NOT NULL COMMENT 'Tipo del DTE referenciado',
    `folio_ref`   INT UNSIGNED  NOT NULL,
    `fecha_ref`   DATE          NOT NULL,
    `razon`       VARCHAR(90)   NULL COMMENT 'Motivo de la NC/ND',
    `tipo_uso`    TINYINT       NULL COMMENT '1=Anula,2=Corrige,3=Elimina',
    PRIMARY KEY (`id`),
    KEY `fk_ref_dte` (`dte_id`),
    CONSTRAINT `fk_ref_dte` FOREIGN KEY (`dte_id`) REFERENCES `dte_documentos`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ── 6. LIBRO DE VENTAS (resumen mensual SII) ─────────────────
CREATE TABLE IF NOT EXISTS `libro_ventas` (
    `id`          INT UNSIGNED     NOT NULL AUTO_INCREMENT,
    `empresa_id`  TINYINT UNSIGNED NOT NULL,
    `periodo`     CHAR(7)          NOT NULL COMMENT 'YYYY-MM',
    `tipo_dte`    SMALLINT UNSIGNED NOT NULL,
    `cantidad`    INT UNSIGNED     NOT NULL DEFAULT 0,
    `neto`        DECIMAL(14,2)    NOT NULL DEFAULT 0,
    `iva`         DECIMAL(14,2)    NOT NULL DEFAULT 0,
    `exento`      DECIMAL(14,2)    NOT NULL DEFAULT 0,
    `total`       DECIMAL(14,2)    NOT NULL DEFAULT 0,
    `generado_at` TIMESTAMP        NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_empresa_periodo_tipo` (`empresa_id`,`periodo`,`tipo_dte`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ── 7. LIBRO DE COMPRAS ───────────────────────────────────────
CREATE TABLE IF NOT EXISTS `libro_compras` (
    `id`              INT UNSIGNED     NOT NULL AUTO_INCREMENT,
    `empresa_id`      TINYINT UNSIGNED NOT NULL,
    `tipo_dte`        SMALLINT UNSIGNED NOT NULL,
    `folio`           INT UNSIGNED     NOT NULL,
    `fecha`           DATE             NOT NULL,
    `rut_emisor`      VARCHAR(12)      NOT NULL,
    `razon_emisor`    VARCHAR(150)     NULL,
    `neto`            DECIMAL(14,2)    NOT NULL DEFAULT 0,
    `iva`             DECIMAL(14,2)    NOT NULL DEFAULT 0,
    `exento`          DECIMAL(14,2)    NOT NULL DEFAULT 0,
    `total`           DECIMAL(14,2)    NOT NULL,
    `credito_fiscal`  DECIMAL(14,2)    NOT NULL DEFAULT 0,
    `periodo`         CHAR(7)          NOT NULL,
    PRIMARY KEY (`id`),
    KEY `idx_empresa_periodo` (`empresa_id`,`periodo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ── 8. LOG DE ENVÍOS AL SII ───────────────────────────────────
CREATE TABLE IF NOT EXISTS `sii_envios_log` (
    `id`          INT UNSIGNED     NOT NULL AUTO_INCREMENT,
    `empresa_id`  TINYINT UNSIGNED NOT NULL,
    `dte_id`      INT UNSIGNED     NULL,
    `accion`      VARCHAR(60)      NOT NULL COMMENT 'enviar_dte, consultar_estado, obtener_token',
    `endpoint`    VARCHAR(200)     NOT NULL,
    `request`     MEDIUMTEXT       NULL,
    `response`    MEDIUMTEXT       NULL,
    `http_code`   SMALLINT         NULL,
    `exitoso`     TINYINT(1)       NOT NULL DEFAULT 0,
    `created_at`  TIMESTAMP        NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `idx_dte_log` (`dte_id`),
    KEY `idx_empresa_log` (`empresa_id`,`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

