-- Catalogo de tipos de movimiento y normalizacion de movimientos de facturacion

CREATE TABLE IF NOT EXISTS catalogo_tipo_movimiento (
    id TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    codigo VARCHAR(20) NOT NULL,
    descripcion VARCHAR(80) NOT NULL,
    estado TINYINT(1) NOT NULL DEFAULT 1,
    created_at DATETIME NOT NULL,
    updated_at DATETIME NULL,
    deleted_at DATETIME NULL,
    UNIQUE KEY uq_catalogo_tipo_movimiento_codigo (codigo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT IGNORE INTO catalogo_tipo_movimiento (id, codigo, descripcion, estado, created_at) VALUES
(1, 'PAGO', 'Pago', 1, NOW()),
(2, 'CUOTA', 'Cuota', 1, NOW());

CREATE TABLE IF NOT EXISTS facturacion_comprobante_movimientos (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    comprobante_id BIGINT UNSIGNED NOT NULL,
    tipo_movimiento_id TINYINT UNSIGNED NOT NULL,
    numero_cuota INT UNSIGNED NULL,
    medio_pago_id BIGINT UNSIGNED NULL,
    fecha_movimiento DATE NULL,
    monto DECIMAL(14,2) NOT NULL DEFAULT 0,
    estado TINYINT(1) NOT NULL DEFAULT 1,
    referencia VARCHAR(150) NULL,
    observacion VARCHAR(255) NULL,
    created_by BIGINT UNSIGNED NULL,
    updated_by BIGINT UNSIGNED NULL,
    created_at DATETIME NOT NULL,
    updated_at DATETIME NULL,
    deleted_at DATETIME NULL,
    KEY idx_fact_mov_comprobante (comprobante_id),
    KEY idx_fact_mov_tipo (tipo_movimiento_id),
    KEY idx_fact_mov_estado (estado),
    KEY idx_fact_mov_medio (medio_pago_id),
    KEY idx_fact_mov_fecha (fecha_movimiento),
    UNIQUE KEY uq_fact_mov_comprobante_cuota (comprobante_id, tipo_movimiento_id, numero_cuota),
    CONSTRAINT fk_fact_mov_comprobante FOREIGN KEY (comprobante_id) REFERENCES facturacion_comprobantes(id),
    CONSTRAINT fk_fact_mov_medio FOREIGN KEY (medio_pago_id) REFERENCES catalogo_medios_pago(id),
    CONSTRAINT fk_fact_mov_tipo FOREIGN KEY (tipo_movimiento_id) REFERENCES catalogo_tipo_movimiento(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
