-- ============================================================
-- quoERP — Notas de Crédito y Débito (Ecuador)
-- Migración: 020_credit_debit_notes.sql
-- Versión: 1.0.0 | Fecha: 2026-06-06
-- ============================================================
-- Cubre:
--   Nota de Crédito de Venta  (emitida a cliente)
--   Nota de Débito de Venta   (emitida a cliente)
--   Nota de Crédito de Compra (recibida de proveedor)
--   Nota de Débito de Compra  (recibida de proveedor)
-- ============================================================

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ─────────────────────────────────────────────────────────────
-- TABLA: credit_debit_notes — Encabezado del comprobante
-- ─────────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS credit_debit_notes (
    id               INT UNSIGNED                      NOT NULL AUTO_INCREMENT,
    company_id       INT UNSIGNED                      NOT NULL,
    note_type        ENUM('credit','debit')            NOT NULL
        COMMENT 'credit = Nota de Crédito | debit = Nota de Débito',
    direction        ENUM('issued','received')         NOT NULL
        COMMENT 'issued = emitida (ventas) | received = recibida (compras)',
    number           VARCHAR(20)                       DEFAULT NULL
        COMMENT 'Número secuencial 001-001-000000001',
    date             DATE                              NOT NULL,
    -- Entidad
    entity_type      ENUM('customer','supplier')       NOT NULL,
    entity_id        INT UNSIGNED                      NOT NULL,
    entity_name      VARCHAR(200)                      NOT NULL  COMMENT 'Snapshot',
    entity_ruc       VARCHAR(20)                       DEFAULT NULL COMMENT 'Snapshot',
    -- Documento origen (factura de venta/compra)
    source_type      VARCHAR(30)                       DEFAULT NULL
        COMMENT 'sale_invoice | purchase_order',
    source_id        INT UNSIGNED                      DEFAULT NULL,
    source_number    VARCHAR(50)                       DEFAULT NULL COMMENT 'Número de la factura/OC original',
    source_date      DATE                              DEFAULT NULL,
    -- Motivo
    reason           VARCHAR(255)                      NOT NULL,
    -- Totales
    subtotal         DECIMAL(12,4)                     NOT NULL DEFAULT 0.0000,
    tax              DECIMAL(12,4)                     NOT NULL DEFAULT 0.0000,
    total            DECIMAL(12,4)                     NOT NULL DEFAULT 0.0000,
    -- Estado y trazabilidad
    status           ENUM('draft','issued','cancelled') NOT NULL DEFAULT 'draft',
    notes            TEXT                              DEFAULT NULL,
    journal_entry_id INT UNSIGNED                      DEFAULT NULL,
    created_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),
    INDEX idx_company   (company_id),
    INDEX idx_type      (note_type),
    INDEX idx_direction (direction),
    INDEX idx_status    (status),
    INDEX idx_source    (source_type, source_id),
    INDEX idx_entity    (entity_type, entity_id),
    INDEX idx_date      (date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ─────────────────────────────────────────────────────────────
-- TABLA: credit_debit_note_lines — Líneas del comprobante
-- ─────────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS credit_debit_note_lines (
    id           INT UNSIGNED  NOT NULL AUTO_INCREMENT,
    note_id      INT UNSIGNED  NOT NULL,
    description  VARCHAR(300)  NOT NULL,
    quantity     DECIMAL(12,4) NOT NULL DEFAULT 1.0000,
    unit_price   DECIMAL(12,4) NOT NULL DEFAULT 0.0000,
    tax_rate     DECIMAL(5,2)  NOT NULL DEFAULT 0.00  COMMENT 'Tasa IVA aplicada (0 o 15/12)',
    subtotal     DECIMAL(12,4) NOT NULL DEFAULT 0.0000,
    tax_amount   DECIMAL(12,4) NOT NULL DEFAULT 0.0000,
    total        DECIMAL(12,4) NOT NULL DEFAULT 0.0000,
    PRIMARY KEY (id),
    INDEX idx_note (note_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ─────────────────────────────────────────────────────────────
-- Secuencias para NC y ND en sri_invoice_config
-- ─────────────────────────────────────────────────────────────
ALTER TABLE sri_invoice_config
    ADD COLUMN IF NOT EXISTS credit_note_seq INT UNSIGNED NOT NULL DEFAULT 0
        COMMENT 'Secuencia para Notas de Crédito',
    ADD COLUMN IF NOT EXISTS debit_note_seq  INT UNSIGNED NOT NULL DEFAULT 0
        COMMENT 'Secuencia para Notas de Débito';

SET FOREIGN_KEY_CHECKS = 1;

-- ─────────────────────────────────────────────────────────────
-- FIN DE MIGRACIÓN
-- Tablas nuevas: credit_debit_notes, credit_debit_note_lines
-- ALTER: sri_invoice_config (credit_note_seq, debit_note_seq)
-- ─────────────────────────────────────────────────────────────
