-- ============================================================
-- Club Palestino CRM v2.0 — MÓDULO CONTABILIDAD MULTIEMPRESA
-- Fase 7 — F29 / F50 / Libro diario / Cuentas corrientes
-- empresa_id en TODAS las tablas
-- ============================================================

-- ── 1. PLAN DE CUENTAS (por empresa) ─────────────────────────
CREATE TABLE IF NOT EXISTS `conta_plan_cuentas` (
    `id`          INT UNSIGNED     NOT NULL AUTO_INCREMENT,
    `empresa_id`  TINYINT UNSIGNED NOT NULL,
    `codigo`      VARCHAR(20)      NOT NULL COMMENT 'Ej: 1.1.01.001',
    `nombre`      VARCHAR(150)     NOT NULL,
    `tipo`        ENUM('activo','pasivo','patrimonio','ingreso','gasto','resultado') NOT NULL,
    `subtipo`     VARCHAR(60)      NULL COMMENT 'Ej: activo_circulante, pasivo_largo_plazo',
    `nivel`       TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1=Clase, 2=Grupo, 3=Cuenta, 4=Subcuenta',
    `padre_id`    INT UNSIGNED     NULL,
    `es_imputable` TINYINT(1)      NOT NULL DEFAULT 1 COMMENT '1=acepta movimientos directos',
    `moneda`      ENUM('CLP','UF','USD') NOT NULL DEFAULT 'CLP',
    `activo`      TINYINT(1)       NOT NULL DEFAULT 1,
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_empresa_codigo` (`empresa_id`,`codigo`),
    KEY `idx_empresa_tipo` (`empresa_id`,`tipo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Plan de cuentas base para TODAS las empresas
-- Clase 1: Activos
INSERT INTO `conta_plan_cuentas` (`empresa_id`,`codigo`,`nombre`,`tipo`,`subtipo`,`nivel`,`es_imputable`) VALUES
-- EMPRESA 1: Club Principal
(1,'1','ACTIVOS','activo',NULL,1,0),
(1,'1.1','Activo Circulante','activo','activo_circulante',2,0),
(1,'1.1.01','Caja y Bancos','activo','activo_circulante',3,0),
(1,'1.1.01.001','Caja','activo','activo_circulante',4,1),
(1,'1.1.01.002','Banco BCI Cta. Cte. Club','activo','activo_circulante',4,1),
(1,'1.1.02','Cuentas por Cobrar','activo','activo_circulante',3,0),
(1,'1.1.02.001','Socios - Cuotas por cobrar','activo','activo_circulante',4,1),
(1,'1.1.03','Otros Activos Circulantes','activo','activo_circulante',3,0),
(1,'1.1.03.001','IVA Crédito Fiscal','activo','activo_circulante',4,1),
(1,'2','PASIVOS','pasivo',NULL,1,0),
(1,'2.1','Pasivo Circulante','pasivo','pasivo_circulante',2,0),
(1,'2.1.01','Cuentas por Pagar','pasivo','pasivo_circulante',3,0),
(1,'2.1.01.001','Proveedores','pasivo','pasivo_circulante',4,1),
(1,'2.1.01.002','IVA Débito Fiscal','pasivo','pasivo_circulante',4,1),
(1,'2.1.02','Remuneraciones por Pagar','pasivo','pasivo_circulante',3,0),
(1,'2.1.02.001','Sueldos por Pagar','pasivo','pasivo_circulante',4,1),
(1,'2.1.02.002','AFP por Pagar','pasivo','pasivo_circulante',4,1),
(1,'2.1.02.003','Salud por Pagar','pasivo','pasivo_circulante',4,1),
(1,'3','PATRIMONIO','patrimonio',NULL,1,0),
(1,'3.1.001','Capital','patrimonio',NULL,4,1),
(1,'3.1.002','Resultado del Ejercicio','patrimonio',NULL,4,1),
(1,'4','INGRESOS','ingreso',NULL,1,0),
(1,'4.1.001','Ingresos por Membresías','ingreso',NULL,4,1),
(1,'4.1.002','Ingresos por Actividades','ingreso',NULL,4,1),
(1,'4.1.003','Ingresos por Donaciones','ingreso',NULL,4,1),
(1,'5','GASTOS','gasto',NULL,1,0),
(1,'5.1.001','Remuneraciones','gasto',NULL,4,1),
(1,'5.1.002','Gastos de Administración','gasto',NULL,4,1),
(1,'5.1.003','Servicios Básicos','gasto',NULL,4,1),
(1,'5.1.004','Mantención y Reparaciones','gasto',NULL,4,1),
-- EMPRESA 2: Restaurant
(2,'1.1.01.001','Caja Restaurant','activo','activo_circulante',4,1),
(2,'1.1.01.002','Banco Restaurant','activo','activo_circulante',4,1),
(2,'1.1.03.001','IVA Crédito Fiscal','activo','activo_circulante',4,1),
(2,'2.1.01.001','Proveedores Restaurant','pasivo','pasivo_circulante',4,1),
(2,'2.1.01.002','IVA Débito Fiscal','pasivo','pasivo_circulante',4,1),
(2,'4.1.001','Ventas Afectas Restaurant','ingreso',NULL,4,1),
(2,'4.1.002','Ventas Exentas','ingreso',NULL,4,1),
(2,'5.1.001','Costo de Ventas','gasto',NULL,4,1),
(2,'5.1.002','Remuneraciones Restaurant','gasto',NULL,4,1),
(2,'5.1.003','Gastos Generales Restaurant','gasto',NULL,4,1),
-- EMPRESA 3: Instalaciones
(3,'1.1.01.001','Banco Instalaciones','activo','activo_circulante',4,1),
(3,'4.1.001','Ingresos Arriendos Canchas','ingreso',NULL,4,1),
(3,'4.1.002','Ingresos Arriendos Espacios','ingreso',NULL,4,1),
(3,'5.1.001','Gastos Mantención Canchas','gasto',NULL,4,1),
(3,'5.1.002','Remuneraciones Instalaciones','gasto',NULL,4,1),
-- EMPRESA 4: Membresías
(4,'1.1.01.001','Banco Membresías','activo','activo_circulante',4,1),
(4,'4.1.001','Cuotas Socios Anuales','ingreso',NULL,4,1),
(4,'4.1.002','Cuotas de Incorporación','ingreso',NULL,4,1),
(4,'5.1.001','Gastos Administración','gasto',NULL,4,1);

-- ── 2. LIBRO DIARIO ───────────────────────────────────────────
CREATE TABLE IF NOT EXISTS `conta_asientos` (
    `id`          INT UNSIGNED     NOT NULL AUTO_INCREMENT,
    `empresa_id`  TINYINT UNSIGNED NOT NULL,
    `numero`      INT UNSIGNED     NOT NULL COMMENT 'Número correlativo por empresa',
    `fecha`       DATE             NOT NULL,
    `glosa`       VARCHAR(300)     NOT NULL,
    `tipo`        ENUM('manual','automatico_venta','automatico_compra','automatico_pago','automatico_nomina','apertura','cierre','ajuste') NOT NULL DEFAULT 'manual',
    `referencia`  VARCHAR(100)     NULL COMMENT 'Ej: DTE-39-1234, PAGO-PROV-456',
    `total_debe`  DECIMAL(14,2)    NOT NULL DEFAULT 0,
    `total_haber` DECIMAL(14,2)    NOT NULL DEFAULT 0,
    `usuario_id`  INT UNSIGNED     NULL,
    `bloqueado`   TINYINT(1)       NOT NULL DEFAULT 0 COMMENT '1=no editable (período cerrado)',
    `created_at`  TIMESTAMP        NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_empresa_numero` (`empresa_id`,`numero`),
    KEY `idx_empresa_fecha` (`empresa_id`,`fecha`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ── 3. DETALLE DE ASIENTOS ────────────────────────────────────
CREATE TABLE IF NOT EXISTS `conta_asiento_items` (
    `id`          INT UNSIGNED  NOT NULL AUTO_INCREMENT,
    `asiento_id`  INT UNSIGNED  NOT NULL,
    `cuenta_id`   INT UNSIGNED  NOT NULL,
    `descripcion` VARCHAR(200)  NULL,
    `debe`        DECIMAL(14,2) NOT NULL DEFAULT 0,
    `haber`       DECIMAL(14,2) NOT NULL DEFAULT 0,
    `moneda`      ENUM('CLP','UF') NOT NULL DEFAULT 'CLP',
    `valor_uf`    DECIMAL(14,4) NULL COMMENT 'Valor en UF si moneda=UF',
    PRIMARY KEY (`id`),
    KEY `fk_ai_asiento` (`asiento_id`),
    KEY `fk_ai_cuenta`  (`cuenta_id`),
    CONSTRAINT `fk_ai_asiento` FOREIGN KEY (`asiento_id`) REFERENCES `conta_asientos`(`id`) ON DELETE CASCADE,
    CONSTRAINT `fk_ai_cuenta`  FOREIGN KEY (`cuenta_id`)  REFERENCES `conta_plan_cuentas`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ── 4. CUENTAS CORRIENTES BANCARIAS ──────────────────────────
CREATE TABLE IF NOT EXISTS `cuentas_corrientes` (
    `id`          INT UNSIGNED     NOT NULL AUTO_INCREMENT,
    `empresa_id`  TINYINT UNSIGNED NOT NULL,
    `banco`       VARCHAR(80)      NOT NULL,
    `tipo`        ENUM('corriente','ahorro','vista','credito') NOT NULL DEFAULT 'corriente',
    `numero`      VARCHAR(30)      NOT NULL,
    `nombre_titular` VARCHAR(150)  NOT NULL,
    `rut_titular` VARCHAR(12)      NOT NULL,
    `moneda`      ENUM('CLP','UF','USD') NOT NULL DEFAULT 'CLP',
    `saldo`       DECIMAL(14,2)    NOT NULL DEFAULT 0,
    `saldo_contable` DECIMAL(14,2) NOT NULL DEFAULT 0,
    `cuenta_contable_id` INT UNSIGNED NULL COMMENT 'FK conta_plan_cuentas',
    `es_principal` TINYINT(1)      NOT NULL DEFAULT 0,
    `activo`      TINYINT(1)       NOT NULL DEFAULT 1,
    `updated_at`  TIMESTAMP        NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `idx_empresa_cta` (`empresa_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `cuentas_corrientes` (`empresa_id`,`banco`,`numero`,`nombre_titular`,`rut_titular`,`es_principal`) VALUES
(1,'Banco de Chile','000-00000-00','Corporación Club Palestino','76.XXX.XXX-X',1),
(2,'Banco de Chile','000-00000-01','Palestino Restaurant SpA',  'XX.XXX.XXX-X',1),
(3,'Banco BCI',     '000-00000-02','Palestino Instalaciones SpA','XX.XXX.XXX-X',1),
(4,'Banco Santander','000-00000-03','Club Palestino Membresías', 'XX.XXX.XXX-X',1);

-- ── 5. MOVIMIENTOS DE CUENTAS CORRIENTES ─────────────────────
CREATE TABLE IF NOT EXISTS `movimientos_cta_cte` (
    `id`          BIGINT UNSIGNED  NOT NULL AUTO_INCREMENT,
    `cuenta_id`   INT UNSIGNED     NOT NULL,
    `empresa_id`  TINYINT UNSIGNED NOT NULL,
    `fecha`       DATE             NOT NULL,
    `tipo`        ENUM('ingreso','egreso') NOT NULL,
    `monto`       DECIMAL(14,2)    NOT NULL,
    `saldo`       DECIMAL(14,2)    NOT NULL COMMENT 'Saldo tras este movimiento',
    `glosa`       VARCHAR(300)     NOT NULL,
    `origen`      ENUM('venta','pago_proveedor','nomina','transferencia_interna','deposito','cheque','cargo_banco','otro') NOT NULL DEFAULT 'otro',
    `referencia`  VARCHAR(100)     NULL,
    `numero_doc`  VARCHAR(50)      NULL COMMENT 'N° cheque, transferencia, etc.',
    `asiento_id`  INT UNSIGNED     NULL,
    `conciliado`  TINYINT(1)       NOT NULL DEFAULT 0,
    `created_at`  TIMESTAMP        NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `idx_cuenta_fecha`  (`cuenta_id`,`fecha`),
    KEY `idx_empresa_mov`   (`empresa_id`,`fecha`),
    KEY `idx_conciliacion`  (`conciliado`,`fecha`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ── 6. PROVEEDORES ────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS `proveedores` (
    `id`          INT UNSIGNED     NOT NULL AUTO_INCREMENT,
    `empresa_id`  TINYINT UNSIGNED NOT NULL,
    `rut`         VARCHAR(12)      NOT NULL,
    `razon_social` VARCHAR(150)    NOT NULL,
    `fantasia`    VARCHAR(100)     NULL,
    `giro`        VARCHAR(200)     NULL,
    `direccion`   VARCHAR(200)     NULL,
    `comuna`      VARCHAR(60)      NULL,
    `email`       VARCHAR(100)     NULL,
    `telefono`    VARCHAR(20)      NULL,
    `contacto`    VARCHAR(100)     NULL,
    `banco`       VARCHAR(80)      NULL,
    `tipo_cuenta` ENUM('corriente','ahorro','vista') NULL,
    `numero_cuenta` VARCHAR(30)    NULL,
    `dias_credito` TINYINT UNSIGNED NOT NULL DEFAULT 30,
    `cuenta_gasto_id` INT UNSIGNED NULL COMMENT 'Cuenta contable de gasto por defecto',
    `activo`      TINYINT(1)       NOT NULL DEFAULT 1,
    `created_at`  TIMESTAMP        NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_empresa_rut` (`empresa_id`,`rut`),
    KEY `idx_empresa_prov` (`empresa_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ── 7. DOCUMENTOS DE COMPRA ───────────────────────────────────
CREATE TABLE IF NOT EXISTS `compras_documentos` (
    `id`            INT UNSIGNED     NOT NULL AUTO_INCREMENT,
    `empresa_id`    TINYINT UNSIGNED NOT NULL,
    `proveedor_id`  INT UNSIGNED     NOT NULL,
    `tipo_dte`      SMALLINT UNSIGNED NOT NULL DEFAULT 33,
    `folio`         VARCHAR(20)      NOT NULL,
    `fecha_emision` DATE             NOT NULL,
    `fecha_venc`    DATE             NULL,
    `periodo`       CHAR(7)          NOT NULL COMMENT 'YYYY-MM para libro compras',
    `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,
    `glosa`         VARCHAR(300)     NULL,
    `estado`        ENUM('pendiente','parcial','pagado','vencido','anulado') NOT NULL DEFAULT 'pendiente',
    `saldo`         DECIMAL(14,2)    NOT NULL COMMENT 'Monto pendiente de pago',
    `asiento_id`    INT UNSIGNED     NULL,
    `created_at`    TIMESTAMP        NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `fk_doc_prov`       (`proveedor_id`),
    KEY `idx_empresa_compra` (`empresa_id`,`estado`,`fecha_venc`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `compras_items` (
    `id`          INT UNSIGNED  NOT NULL AUTO_INCREMENT,
    `compra_id`   INT UNSIGNED  NOT NULL,
    `descripcion` VARCHAR(200)  NOT NULL,
    `cantidad`    DECIMAL(10,3) NOT NULL DEFAULT 1,
    `precio_unit` DECIMAL(14,2) NOT NULL,
    `es_exento`   TINYINT(1)    NOT NULL DEFAULT 0,
    `subtotal`    DECIMAL(14,2) NOT NULL,
    `cuenta_id`   INT UNSIGNED  NULL COMMENT 'Cuenta de gasto/activo',
    PRIMARY KEY (`id`),
    KEY `fk_ci_compra` (`compra_id`),
    CONSTRAINT `fk_ci_comp` FOREIGN KEY (`compra_id`) REFERENCES `compras_documentos`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ── 8. PAGOS A PROVEEDORES ────────────────────────────────────
CREATE TABLE IF NOT EXISTS `pagos_proveedores` (
    `id`             INT UNSIGNED     NOT NULL AUTO_INCREMENT,
    `empresa_id`     TINYINT UNSIGNED NOT NULL,
    `proveedor_id`   INT UNSIGNED     NOT NULL,
    `compra_id`      INT UNSIGNED     NULL COMMENT 'NULL = pago a cuenta',
    `cuenta_banco_id` INT UNSIGNED    NOT NULL COMMENT 'Cuenta corriente desde la que se paga',
    `monto`          DECIMAL(14,2)    NOT NULL,
    `fecha`          DATE             NOT NULL,
    `medio`          ENUM('transferencia','cheque','efectivo','tarjeta','cargo_automatico') NOT NULL DEFAULT 'transferencia',
    `numero_doc`     VARCHAR(50)      NULL COMMENT 'N° transferencia, N° cheque',
    `glosa`          VARCHAR(200)     NULL,
    `asiento_id`     INT UNSIGNED     NULL,
    `usuario_id`     INT UNSIGNED     NULL,
    `created_at`     TIMESTAMP        NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `idx_empresa_pago`  (`empresa_id`,`fecha`),
    KEY `idx_prov_pago`     (`proveedor_id`,`fecha`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ── 9. PERÍODOS CONTABLES ─────────────────────────────────────
CREATE TABLE IF NOT EXISTS `conta_periodos` (
    `id`          INT UNSIGNED     NOT NULL AUTO_INCREMENT,
    `empresa_id`  TINYINT UNSIGNED NOT NULL,
    `periodo`     CHAR(7)          NOT NULL COMMENT 'YYYY-MM',
    `estado`      ENUM('abierto','cerrado') NOT NULL DEFAULT 'abierto',
    `fecha_cierre` DATE            NULL,
    `usuario_cierre` INT UNSIGNED  NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_empresa_periodo` (`empresa_id`,`periodo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ── 10. CENTROS DE COSTO ──────────────────────────────────────
CREATE TABLE IF NOT EXISTS `conta_centros_costo` (
    `id`          INT UNSIGNED     NOT NULL AUTO_INCREMENT,
    `empresa_id`  TINYINT UNSIGNED NOT NULL,
    `codigo`      VARCHAR(20)      NOT NULL,
    `nombre`      VARCHAR(100)     NOT NULL,
    `activo`      TINYINT(1)       NOT NULL DEFAULT 1,
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_empresa_cc` (`empresa_id`,`codigo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `conta_centros_costo` (`empresa_id`,`codigo`,`nombre`) VALUES
(1,'ADM','Administración General'),
(1,'DEP','Deportes y Actividades'),
(1,'CUL','Cultura y Eventos'),
(2,'REST','Restaurant'),
(2,'PERG','Pérgola'),
(3,'CANC','Canchas Deportivas'),
(3,'ESP','Espacios y Salones'),
(4,'MEM','Membresías');

-- ── 11. CONCILIACIÓN BANCARIA ─────────────────────────────────
CREATE TABLE IF NOT EXISTS `conciliacion_bancaria` (
    `id`          INT UNSIGNED  NOT NULL AUTO_INCREMENT,
    `cuenta_id`   INT UNSIGNED  NOT NULL,
    `empresa_id`  TINYINT UNSIGNED NOT NULL,
    `periodo`     CHAR(7)       NOT NULL,
    `saldo_banco` DECIMAL(14,2) NOT NULL COMMENT 'Saldo según cartola bancaria',
    `saldo_libro` DECIMAL(14,2) NOT NULL COMMENT 'Saldo según libro contable',
    `diferencia`  DECIMAL(14,2) NOT NULL,
    `estado`      ENUM('pendiente','conciliado','con_diferencias') NOT NULL DEFAULT 'pendiente',
    `fecha`       DATE          NOT NULL,
    `notas`       TEXT          NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_cuenta_periodo` (`cuenta_id`,`periodo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

