-- 1. Tabla de Productos (Stock) CREATE TABLE `productos` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `codigo` VARCHAR(50) UNIQUE NOT NULL, `nombre` VARCHAR(150) NOT NULL, `precio_venta` DECIMAL(10,2) NOT NULL, `costo` DECIMAL(10,2) NOT NULL, `stock` INT NOT NULL DEFAULT 0, `tasa_iva` INT DEFAULT 10 COMMENT '10 o 5', `activo` TINYINT(1) DEFAULT 1 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 2. Tabla de Ventas (Cabecera) CREATE TABLE `ventas` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `fecha` DATETIME DEFAULT CURRENT_TIMESTAMP, `cliente_nombre` VARCHAR(150) DEFAULT 'Consumidor Final', `cliente_ruc` VARCHAR(20) DEFAULT '00000000-0', `total_gravado` DECIMAL(10,2) DEFAULT 0.00, `total_iva` DECIMAL(10,2) DEFAULT 0.00, `total_pagar` DECIMAL(10,2) NOT NULL, `estado` ENUM('PENDIENTE', 'PAGADO', 'ANULADO') DEFAULT 'PAGADO' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 3. Tabla de Detalle de Venta (Items) CREATE TABLE `ventas_detalle` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `venta_id` INT NOT NULL, `producto_id` INT NOT NULL, `cantidad` INT NOT NULL, `precio_unitario` DECIMAL(10,2) NOT NULL, `subtotal` DECIMAL(10,2) NOT NULL, FOREIGN KEY (`venta_id`) REFERENCES `ventas`(`id`) ON DELETE CASCADE, FOREIGN KEY (`producto_id`) REFERENCES `productos`(`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 4. Tabla de Gastos CREATE TABLE `gastos` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `fecha` DATETIME DEFAULT CURRENT_TIMESTAMP, `descripcion` VARCHAR(255) NOT NULL, `monto` DECIMAL(10,2) NOT NULL, `categoria` VARCHAR(50) DEFAULT 'General' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 5. Tabla de Auditoría SIFEN (El puente con SifenD) CREATE TABLE `sifen_logs` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `venta_id` INT NOT NULL, `cdc` VARCHAR(44) DEFAULT NULL, `qr_url` VARCHAR(255) DEFAULT NULL, `estado_sifen` ENUM('PENDIENTE', 'APROBADO', 'RECHAZADO', 'ERROR_API') DEFAULT 'PENDIENTE', `respuesta_json` TEXT DEFAULT NULL COMMENT 'Respuesta cruda de SifenD para auditoría', `fecha_envio` DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (`venta_id`) REFERENCES `ventas`(`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- DATOS DE PRUEBA (Para que no empieces vacío) INSERT INTO `productos` (`codigo`, `nombre`, `precio_venta`, `costo`, `stock`, `tasa_iva`) VALUES ('PROD-001', 'Coca Cola 500ml', 5000, 3500, 100, 10), ('PROD-002', 'Pan Flauta', 2000, 1200, 50, 10), ('PROD-003', 'Agua Mineral 1L', 4000, 2500, 80, 10); -- Agregar columna de código de barras e indexarla para búsquedas instantáneas ALTER TABLE `productos` ADD COLUMN `codigo_barras` VARCHAR(50) NULL AFTER `id`; ALTER TABLE `productos` ADD INDEX `idx_codigo_barras` (`codigo_barras`); ALTER TABLE `productos` ADD INDEX `idx_codigo` (`codigo`); -- Actualizar productos de prueba con códigos de barras ficticios (tipo EAN-13) UPDATE `productos` SET `codigo_barras` = '7891234567890' WHERE `codigo` = 'PROD-001'; UPDATE `productos` SET `codigo_barras` = '7891234567891' WHERE `codigo` = 'PROD-002'; UPDATE `productos` SET `codigo_barras` = '7891234567892' WHERE `codigo` = 'PROD-003';