
CREATE TABLE `almacenes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `codigo` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `activo` tinyint(4) DEFAULT 1,
  `fecha_creacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `fecha_actualizacion` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  UNIQUE KEY `codigo` (`codigo`),
  KEY `idx_nombre` (`nombre`),
  KEY `idx_codigo` (`codigo`),
  KEY `idx_activo` (`activo`),
  KEY `idx_updated_at` (`updated_at`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `cajas` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `identificador` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `nombre_pc` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `ip` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `activo` tinyint(1) DEFAULT 1,
  `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 `identificador` (`identificador`),
  UNIQUE KEY `idx_nombre_pc` (`nombre_pc`),
  KEY `idx_updated_at` (`updated_at`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `cat_forma_pago` (
  `clave` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
  `descripcion` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `activo` tinyint(1) DEFAULT 1,
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`clave`),
  KEY `idx_updated_at` (`updated_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `cat_metodo_pago` (
  `clave` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
  `descripcion` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `activo` tinyint(1) DEFAULT 1,
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`clave`),
  KEY `idx_updated_at` (`updated_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `cat_regimen_fiscal` (
  `clave` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
  `descripcion` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `persona_fisica` tinyint(1) DEFAULT 0,
  `persona_moral` tinyint(1) DEFAULT 0,
  `activo` tinyint(1) DEFAULT 1,
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`clave`),
  KEY `idx_updated_at` (`updated_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `cat_uso_cfdi` (
  `clave` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
  `descripcion` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `persona_fisica` tinyint(1) DEFAULT 0,
  `persona_moral` tinyint(1) DEFAULT 0,
  `activo` tinyint(1) DEFAULT 1,
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`clave`),
  KEY `idx_updated_at` (`updated_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `categorias` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `descripcion` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `activo` tinyint(1) DEFAULT 1,
  `fecha_creacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `fecha_actualizacion` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_categoria_nombre` (`nombre`),
  KEY `idx_categorias_activo` (`activo`),
  KEY `idx_updated_at` (`updated_at`)
) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `cliente_datos_fiscales` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cliente_id` int(11) NOT NULL,
  `rfc` varchar(13) COLLATE utf8mb4_unicode_ci NOT NULL,
  `razon_social` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `regimen_fiscal` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
  `uso_cfdi` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `codigo_postal_fiscal` varchar(5) COLLATE utf8mb4_unicode_ci NOT NULL,
  `email_facturacion` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `es_principal` tinyint(1) DEFAULT 0,
  `activo` tinyint(1) DEFAULT 1,
  `fecha_creacion` datetime DEFAULT current_timestamp(),
  `fecha_actualizacion` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  KEY `idx_cliente_datos_fiscales_cliente` (`cliente_id`),
  KEY `idx_cliente_datos_fiscales_rfc` (`rfc`),
  KEY `idx_cliente_datos_fiscales_activo` (`activo`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `cliente_datos_fiscales_ibfk_1` FOREIGN KEY (`cliente_id`) REFERENCES `clientes` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `cliente_direcciones` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cliente_id` int(11) NOT NULL,
  `direccion` text COLLATE utf8mb4_unicode_ci NOT NULL,
  `tipo` enum('principal','entrega','facturacion','otro') COLLATE utf8mb4_unicode_ci DEFAULT 'principal',
  `activo` tinyint(4) DEFAULT 1,
  `fecha_creacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `fecha_actualizacion` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `latitud` decimal(10,8) DEFAULT NULL COMMENT 'Latitud de la direcci¾n para Google Maps',
  `longitud` decimal(11,8) DEFAULT NULL COMMENT 'Longitud de la direcci¾n para Google Maps',
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  KEY `idx_cliente_direccion` (`cliente_id`,`activo`),
  KEY `idx_coordenadas` (`latitud`,`longitud`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `cliente_direcciones_ibfk_1` FOREIGN KEY (`cliente_id`) REFERENCES `clientes` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `cliente_telefonos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cliente_id` int(11) NOT NULL,
  `telefono` varchar(15) COLLATE utf8mb4_unicode_ci NOT NULL,
  `tipo` enum('principal','casa','trabajo','otro') COLLATE utf8mb4_unicode_ci DEFAULT 'principal',
  `whatsapp` tinyint(1) DEFAULT 0,
  `activo` tinyint(4) DEFAULT 1,
  `fecha_creacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `fecha_actualizacion` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_cliente_telefono` (`cliente_id`,`telefono`),
  KEY `idx_cliente_telefono` (`cliente_id`,`activo`),
  KEY `idx_telefono` (`telefono`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `cliente_telefonos_ibfk_1` FOREIGN KEY (`cliente_id`) REFERENCES `clientes` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `clientes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `nombre_comercial` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `precio_venta` varchar(15) COLLATE utf8mb4_unicode_ci DEFAULT 'precio_lista',
  `activo` tinyint(1) DEFAULT 1,
  `fecha_creacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `fecha_actualizacion` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `tiene_credito` tinyint(1) DEFAULT 0 COMMENT 'Indica si el cliente tiene cr├®dito habilitado',
  `monto_credito_maximo` decimal(10,2) DEFAULT 0.00 COMMENT 'Monto m├íximo de cr├®dito autorizado',
  `dias_credito` int(11) DEFAULT 0 COMMENT 'D├¡as de cr├®dito (15, 30 o 45)',
  `saldo_credito_usado` decimal(10,2) DEFAULT 0.00 COMMENT 'Saldo actual de cr├®dito utilizado',
  `razon_social` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Raz├│n social para facturaci├│n',
  `regimen_fiscal` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Clave r├®gimen fiscal SAT',
  `uso_cfdi` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Clave uso CFDI SAT',
  `codigo_postal_fiscal` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'CP del domicilio fiscal',
  `email_facturacion` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Email para env├¡o de CFDI',
  `requiere_factura` tinyint(1) DEFAULT 0 COMMENT 'Si generalmente requiere factura',
  `rfc` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'RFC del cliente',
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  KEY `idx_nombre` (`nombre`),
  KEY `idx_activo` (`activo`),
  KEY `idx_clientes_credito` (`tiene_credito`),
  KEY `idx_rfc` (`rfc`),
  KEY `idx_updated_at` (`updated_at`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `configuracion_rangos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `descripcion` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `precio_tipo` enum('precio1','precio2','precio3','precio4') COLLATE utf8mb4_unicode_ci NOT NULL,
  `cantidad_minima` decimal(10,2) NOT NULL,
  `cantidad_maxima` decimal(10,2) DEFAULT NULL,
  `porcentaje_descuento` decimal(5,2) DEFAULT 0.00,
  `activo` tinyint(1) DEFAULT 1,
  `fecha_creacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `fecha_actualizacion` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  KEY `idx_precio_tipo` (`precio_tipo`),
  KEY `idx_activo` (`activo`),
  KEY `idx_updated_at` (`updated_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `configuraciones` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `clave` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `valor` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `tipo` enum('string','number','boolean','json') COLLATE utf8mb4_unicode_ci DEFAULT 'string',
  `categoria` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT 'general',
  `caja_id` int(11) DEFAULT NULL,
  `descripcion` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `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 `unique_clave_caja_id` (`clave`,`caja_id`),
  KEY `idx_configuraciones_categoria` (`categoria`),
  KEY `idx_caja` (`caja_id`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `fk_configuraciones_caja` FOREIGN KEY (`caja_id`) REFERENCES `cajas` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=63 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `cortes_caja` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `caja_id` int(11) NOT NULL,
  `usuario_id` int(11) NOT NULL,
  `usuario_nombre` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `fondo_inicial` decimal(12,2) DEFAULT 0.00,
  `total_efectivo` decimal(12,2) DEFAULT 0.00,
  `total_tarjeta` decimal(12,2) DEFAULT 0.00,
  `total_tarjeta_credito` decimal(12,2) DEFAULT 0.00,
  `total_tarjeta_debito` decimal(12,2) DEFAULT 0.00,
  `total_transferencia` decimal(12,2) DEFAULT 0.00,
  `total_ventas` decimal(12,2) DEFAULT 0.00,
  `cantidad_ventas` int(11) DEFAULT 0,
  `efectivo_contado` decimal(12,2) DEFAULT 0.00,
  `efectivo_esperado` decimal(12,2) DEFAULT 0.00,
  `diferencia` decimal(12,2) DEFAULT 0.00,
  `observaciones` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `fecha_creacion` datetime DEFAULT current_timestamp(),
  `total_ingresos` decimal(12,2) DEFAULT 0.00,
  `total_retiros` decimal(12,2) DEFAULT 0.00,
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  KEY `idx_caja` (`caja_id`),
  KEY `idx_fecha` (`fecha_creacion`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `cortes_caja_ibfk_1` FOREIGN KEY (`caja_id`) REFERENCES `cajas` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `descuentos_volumen` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `producto_id` int(11) NOT NULL,
  `cantidad_minima` decimal(10,2) NOT NULL COMMENT 'Cantidad mÝnima para aplicar descuento',
  `descuento_porcentaje` decimal(5,2) NOT NULL COMMENT 'Porcentaje de descuento a aplicar',
  `activo` tinyint(1) DEFAULT 1,
  `fecha_creacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `fecha_actualizacion` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_producto_cantidad` (`producto_id`,`cantidad_minima`),
  KEY `idx_producto_activo` (`producto_id`,`activo`),
  KEY `idx_cantidad` (`cantidad_minima`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `descuentos_volumen_ibfk_1` FOREIGN KEY (`producto_id`) REFERENCES `productos` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=4682 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `diferencia_costos` (
  `producto_id` varchar(50) NOT NULL,
  `descripcion` varchar(255) NOT NULL,
  `costo_para_calculo` decimal(10,3) DEFAULT 0.000 COMMENT 'costo_precios del producto',
  `costo_pacific_soft` decimal(10,3) DEFAULT 0.000 COMMENT 'precio_compra del producto',
  `costo_mayor` decimal(10,3) DEFAULT 0.000 COMMENT 'El mayor de ambos costos',
  `importe_diferencia` decimal(10,3) DEFAULT 0.000 COMMENT 'costo_para_calculo - costo_pacific_soft',
  `fecha_registro` datetime DEFAULT current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`producto_id`),
  KEY `idx_updated_at` (`updated_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `factura_conceptos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `factura_id` int(11) NOT NULL,
  `clave_prod_serv` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT '01010101',
  `clave_unidad` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT 'H87',
  `descripcion` varchar(1000) COLLATE utf8mb4_unicode_ci NOT NULL,
  `producto_id` int(11) DEFAULT NULL,
  `no_identificacion` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `cantidad` decimal(12,3) NOT NULL,
  `unidad` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `valor_unitario` decimal(12,4) NOT NULL,
  `importe` decimal(12,2) NOT NULL,
  `descuento` decimal(12,2) DEFAULT 0.00,
  `objeto_imp` varchar(5) COLLATE utf8mb4_unicode_ci DEFAULT '02',
  `base_iva` decimal(12,2) DEFAULT 0.00,
  `tasa_iva` decimal(10,6) DEFAULT 0.160000,
  `importe_iva` decimal(12,2) DEFAULT 0.00,
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  KEY `idx_factura` (`factura_id`),
  KEY `idx_producto` (`producto_id`),
  KEY `idx_updated_at` (`updated_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `factura_ventas` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `factura_id` int(11) NOT NULL,
  `venta_id` int(11) NOT NULL,
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_factura_venta` (`factura_id`,`venta_id`),
  KEY `idx_factura` (`factura_id`),
  KEY `idx_venta` (`venta_id`),
  KEY `idx_updated_at` (`updated_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `factura_ventas_mostrador` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `factura_id` int(11) NOT NULL,
  `venta_mostrador_id` int(11) NOT NULL,
  `fecha_creacion` datetime DEFAULT current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_factura_venta_mostrador` (`factura_id`,`venta_mostrador_id`),
  KEY `idx_venta_mostrador` (`venta_mostrador_id`),
  KEY `idx_updated_at` (`updated_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `facturas` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `uuid` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `folio` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `serie` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT 'A',
  `cliente_id` int(11) NOT NULL,
  `usuario_id` int(11) NOT NULL,
  `receptor_rfc` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL,
  `receptor_razon_social` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `receptor_regimen_fiscal` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
  `receptor_uso_cfdi` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
  `receptor_codigo_postal` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
  `receptor_email` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `emisor_rfc` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL,
  `emisor_razon_social` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `emisor_regimen_fiscal` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
  `emisor_codigo_postal` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `subtotal` decimal(12,2) NOT NULL DEFAULT 0.00,
  `descuento` decimal(12,2) DEFAULT 0.00,
  `total_impuestos` decimal(12,2) NOT NULL DEFAULT 0.00,
  `total` decimal(12,2) NOT NULL DEFAULT 0.00,
  `forma_pago` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
  `metodo_pago` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
  `moneda` varchar(5) COLLATE utf8mb4_unicode_ci DEFAULT 'MXN',
  `tipo_cambio` decimal(10,4) DEFAULT 1.0000,
  `ruta_xml` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `ruta_pdf` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `estado` enum('pendiente_timbrado','vigente','cancelada','pendiente_cancelacion') COLLATE utf8mb4_unicode_ci DEFAULT 'pendiente_timbrado',
  `fecha_emision` datetime NOT NULL,
  `fecha_timbrado` datetime DEFAULT NULL,
  `fecha_cancelacion` datetime DEFAULT NULL,
  `motivo_cancelacion` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `fecha_creacion` datetime DEFAULT current_timestamp(),
  `fecha_actualizacion` datetime DEFAULT NULL ON UPDATE current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  KEY `idx_uuid` (`uuid`),
  KEY `idx_folio` (`folio`),
  KEY `idx_serie_folio` (`serie`,`folio`),
  KEY `idx_cliente` (`cliente_id`),
  KEY `idx_estado` (`estado`),
  KEY `idx_fecha_emision` (`fecha_emision`),
  KEY `idx_receptor_rfc` (`receptor_rfc`),
  KEY `idx_updated_at` (`updated_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `ingresos_efectivo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `caja_id` int(11) NOT NULL,
  `usuario_id` int(11) NOT NULL,
  `monto` decimal(12,2) NOT NULL,
  `concepto` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `descripcion` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `nombre_pc` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `fecha_ingreso` datetime DEFAULT current_timestamp(),
  `created_at` datetime DEFAULT current_timestamp(),
  `updated_at` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`id`),
  KEY `idx_caja_fecha` (`caja_id`,`fecha_ingreso`),
  KEY `idx_usuario` (`usuario_id`),
  KEY `idx_nombre_pc` (`nombre_pc`),
  KEY `idx_updated_at` (`updated_at`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `log_actividad` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `usuario_id` int(11) DEFAULT NULL,
  `accion` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `modulo` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `detalles` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `ip_address` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `user_agent` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `fecha` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  KEY `idx_log_actividad_usuario` (`usuario_id`),
  KEY `idx_log_actividad_fecha` (`fecha`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `log_actividad_ibfk_1` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `log_seguridad` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `evento` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `usuario_id` int(11) DEFAULT NULL,
  `ip_address` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `user_agent` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `detalles` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `fecha` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  KEY `usuario_id` (`usuario_id`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `log_seguridad_ibfk_1` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `orden_compra_detalle` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `orden_compra_id` int(11) NOT NULL,
  `producto_id` int(11) NOT NULL,
  `cantidad` decimal(12,3) NOT NULL DEFAULT 0.000,
  `cantidad_recibida` decimal(12,3) DEFAULT 0.000,
  `precio_unitario` decimal(12,2) NOT NULL DEFAULT 0.00,
  `subtotal` decimal(12,2) NOT NULL DEFAULT 0.00,
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  KEY `idx_orden` (`orden_compra_id`),
  KEY `idx_producto` (`producto_id`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `orden_compra_detalle_ibfk_1` FOREIGN KEY (`orden_compra_id`) REFERENCES `ordenes_compra` (`id`) ON DELETE CASCADE,
  CONSTRAINT `orden_compra_detalle_ibfk_2` FOREIGN KEY (`producto_id`) REFERENCES `productos` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `ordenes_compra` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `folio` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `proveedor_id` int(11) NOT NULL,
  `usuario_id` int(11) DEFAULT NULL,
  `subtotal` decimal(12,2) DEFAULT 0.00,
  `impuesto` decimal(12,2) DEFAULT 0.00,
  `total` decimal(12,2) DEFAULT 0.00,
  `estado` enum('borrador','pendiente','aprobada','recibida_parcial','recibida','cancelada') COLLATE utf8mb4_unicode_ci DEFAULT 'borrador',
  `estado_pago` enum('pendiente','pagada') COLLATE utf8mb4_unicode_ci DEFAULT 'pendiente',
  `notas` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `aprobado_por` int(11) DEFAULT NULL,
  `recibido_por` int(11) DEFAULT NULL,
  `fecha_aprobacion` datetime DEFAULT NULL,
  `fecha_recepcion` datetime DEFAULT NULL,
  `fecha_pago` datetime DEFAULT NULL,
  `fecha_creacion` datetime DEFAULT current_timestamp(),
  `fecha_actualizacion` datetime DEFAULT NULL ON UPDATE current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  UNIQUE KEY `folio` (`folio`),
  KEY `usuario_id` (`usuario_id`),
  KEY `aprobado_por` (`aprobado_por`),
  KEY `idx_folio` (`folio`),
  KEY `idx_proveedor` (`proveedor_id`),
  KEY `idx_estado` (`estado`),
  KEY `idx_fecha` (`fecha_creacion`),
  KEY `idx_estado_pago` (`estado_pago`),
  KEY `recibido_por` (`recibido_por`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `ordenes_compra_ibfk_1` FOREIGN KEY (`proveedor_id`) REFERENCES `proveedores` (`id`),
  CONSTRAINT `ordenes_compra_ibfk_2` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`),
  CONSTRAINT `ordenes_compra_ibfk_3` FOREIGN KEY (`aprobado_por`) REFERENCES `usuarios` (`id`),
  CONSTRAINT `ordenes_compra_ibfk_4` FOREIGN KEY (`recibido_por`) REFERENCES `usuarios` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `pagos_clientes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `folio` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `cliente_id` int(11) NOT NULL,
  `monto_recibido` decimal(12,2) NOT NULL,
  `monto_aplicado` decimal(12,2) NOT NULL DEFAULT 0.00,
  `monto_sobrante` decimal(12,2) NOT NULL DEFAULT 0.00,
  `metodo_pago` enum('efectivo','tarjeta','transferencia','cheque') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'efectivo',
  `referencia` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `notas` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `cuentas_afectadas` int(11) NOT NULL DEFAULT 0,
  `cuentas_liquidadas` int(11) NOT NULL DEFAULT 0,
  `registrado_por` int(11) NOT NULL,
  `fecha_pago` datetime NOT NULL DEFAULT current_timestamp(),
  `facturado` tinyint(1) NOT NULL DEFAULT 0,
  `factura_id` int(11) DEFAULT NULL,
  `fecha_facturacion` datetime DEFAULT NULL,
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  KEY `idx_cliente` (`cliente_id`),
  KEY `idx_fecha` (`fecha_pago`),
  KEY `idx_facturado` (`facturado`),
  KEY `idx_folio` (`folio`),
  KEY `fk_pago_usuario` (`registrado_por`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `fk_pago_cliente` FOREIGN KEY (`cliente_id`) REFERENCES `clientes` (`id`),
  CONSTRAINT `fk_pago_usuario` FOREIGN KEY (`registrado_por`) REFERENCES `usuarios` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `permisos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `descripcion` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `modulo` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `accion` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `activo` tinyint(4) DEFAULT 1,
  `fecha_creacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  UNIQUE KEY `nombre` (`nombre`),
  KEY `idx_updated_at` (`updated_at`)
) ENGINE=InnoDB AUTO_INCREMENT=89 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `precio_rangos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `producto_id` int(11) NOT NULL,
  `precio_tipo` enum('precio1','precio2','precio3','precio4') COLLATE utf8mb4_unicode_ci NOT NULL,
  `cantidad_minima` decimal(10,2) NOT NULL,
  `cantidad_maxima` decimal(10,2) DEFAULT NULL,
  `precio` decimal(10,2) NOT NULL,
  `activo` tinyint(1) DEFAULT 1,
  `fecha_creacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `fecha_actualizacion` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  KEY `idx_producto_tipo` (`producto_id`,`precio_tipo`),
  KEY `idx_cantidad` (`cantidad_minima`,`cantidad_maxima`),
  KEY `idx_activo` (`activo`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `precio_rangos_ibfk_1` FOREIGN KEY (`producto_id`) REFERENCES `productos` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `producto_equivalencias` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `producto_id` int(11) NOT NULL COMMENT 'Producto principal (ej: Caja)',
  `producto_equivalente_id` int(11) NOT NULL COMMENT 'Producto que lo conforma (ej: Unidad)',
  `cantidad` decimal(10,3) NOT NULL DEFAULT 1.000 COMMENT 'Cantidad del producto equivalente',
  `activo` tinyint(1) DEFAULT 1,
  `fecha_creacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `fecha_actualizacion` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_equivalencia` (`producto_id`,`producto_equivalente_id`),
  KEY `idx_producto_id` (`producto_id`),
  KEY `idx_producto_equivalente_id` (`producto_equivalente_id`),
  KEY `idx_activo` (`activo`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `producto_equivalencias_ibfk_1` FOREIGN KEY (`producto_id`) REFERENCES `productos` (`id`) ON DELETE CASCADE,
  CONSTRAINT `producto_equivalencias_ibfk_2` FOREIGN KEY (`producto_equivalente_id`) REFERENCES `productos` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=2032 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Tabla para manejar equivalencias entre productos';
CREATE TABLE `productos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `descripcion` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `codigo_corto` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `codigo_barras` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `cve_cfdi` varchar(8) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Clave de producto/servicio SAT',
  `categoria_id` int(11) DEFAULT NULL,
  `almacen_id` int(11) DEFAULT NULL,
  `precio_compra` decimal(10,2) NOT NULL DEFAULT 0.00,
  `costo_precios` decimal(10,3) DEFAULT 0.000,
  `precio_lista` decimal(10,2) DEFAULT 0.00 COMMENT 'Precio de lista base',
  `precio1` decimal(10,2) DEFAULT 0.00,
  `precio2` decimal(10,2) DEFAULT 0.00,
  `precio3` decimal(10,2) DEFAULT 0.00,
  `precio4` decimal(10,2) DEFAULT 0.00,
  `precio5` decimal(10,2) DEFAULT 0.00 COMMENT 'Precio nivel 5',
  `precio6` decimal(10,2) DEFAULT 0.00 COMMENT 'Precio nivel 6',
  `stock` int(11) DEFAULT 0,
  `stock_minimo` int(11) DEFAULT 5,
  `unidad_medida` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT 'pz',
  `impresora` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Nombre de la impresora asignada al producto',
  `es_base` tinyint(1) DEFAULT 1,
  `activo` tinyint(1) DEFAULT 1,
  `fecha_creacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `fecha_actualizacion` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `objeto_imp` varchar(5) COLLATE utf8mb4_unicode_ci DEFAULT '02' COMMENT 'Objeto de impuesto SAT: 01=No objeto, 02=Sí objeto,     \r\n     03=Sí y no objeto',
  `tipo_factor_iva` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT 'Tasa' COMMENT 'Tipo de factor IVA: Tasa o Exento',
  `tasa_iva` decimal(10,6) DEFAULT 0.160000 COMMENT 'Tasa de IVA: 0.160000=16%, 0.080000=8%, 0.000000=0%',
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  KEY `fk_producto_categoria` (`categoria_id`),
  KEY `idx_productos_activo` (`activo`),
  KEY `idx_productos_stock` (`stock`),
  KEY `idx_productos_categoria_activo` (`categoria_id`,`activo`),
  KEY `idx_almacen_id` (`almacen_id`),
  KEY `idx_codigo_corto` (`codigo_corto`),
  KEY `idx_codigo_barras` (`codigo_barras`),
  KEY `idx_productos_cve_cfdi` (`cve_cfdi`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `fk_producto_categoria` FOREIGN KEY (`categoria_id`) REFERENCES `categorias` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB AUTO_INCREMENT=5832 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `proveedores` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `contacto` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `telefono` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `email` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `direccion` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `rfc` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `activo` tinyint(1) DEFAULT 1,
  `fecha_creacion` datetime DEFAULT current_timestamp(),
  `fecha_actualizacion` datetime DEFAULT NULL ON UPDATE current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  KEY `idx_nombre` (`nombre`),
  KEY `idx_activo` (`activo`),
  KEY `idx_updated_at` (`updated_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `rangos_flete` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `distancia_desde` decimal(8,2) NOT NULL DEFAULT 0.00 COMMENT 'Distancia m├¡nima en km',
  `distancia_hasta` decimal(8,2) NOT NULL COMMENT 'Distancia m├íxima en km',
  `vehiculo_id` int(11) DEFAULT NULL COMMENT 'ID del veh├¡culo asignado',
  `costo` decimal(10,2) NOT NULL COMMENT 'Costo del flete',
  `activo` tinyint(4) DEFAULT 1 COMMENT 'Estado: 1=Activo, 0=Inactivo',
  `fecha_creacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `fecha_actualizacion` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  KEY `idx_distancia` (`distancia_desde`,`distancia_hasta`),
  KEY `idx_vehiculo` (`vehiculo_id`),
  KEY `idx_activo` (`activo`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `rangos_flete_ibfk_1` FOREIGN KEY (`vehiculo_id`) REFERENCES `vehiculos` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `retiros_efectivo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `caja_id` int(11) NOT NULL,
  `usuario_id` int(11) NOT NULL,
  `monto` decimal(12,2) NOT NULL,
  `motivo` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `nombre_pc` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `fecha_retiro` datetime DEFAULT current_timestamp(),
  `created_at` datetime DEFAULT current_timestamp(),
  `updated_at` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`id`),
  KEY `idx_caja_fecha` (`caja_id`,`fecha_retiro`),
  KEY `idx_usuario` (`usuario_id`),
  KEY `idx_nombre_pc` (`nombre_pc`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `retiros_efectivo_ibfk_1` FOREIGN KEY (`caja_id`) REFERENCES `cajas` (`id`),
  CONSTRAINT `retiros_efectivo_ibfk_2` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `rol_permisos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `rol_id` int(11) NOT NULL,
  `permiso_id` int(11) NOT NULL,
  `fecha_asignacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_rol_permiso` (`rol_id`,`permiso_id`),
  KEY `permiso_id` (`permiso_id`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `rol_permisos_ibfk_1` FOREIGN KEY (`rol_id`) REFERENCES `roles` (`id`) ON DELETE CASCADE,
  CONSTRAINT `rol_permisos_ibfk_2` FOREIGN KEY (`permiso_id`) REFERENCES `permisos` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=802 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `roles` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `descripcion` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `nivel` int(11) DEFAULT 1,
  `activo` tinyint(4) DEFAULT 1,
  `necesita_almacen` tinyint(1) DEFAULT 0,
  `fecha_creacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `fecha_actualizacion` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  UNIQUE KEY `nombre` (`nombre`),
  KEY `idx_updated_at` (`updated_at`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `ruta_pedidos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ruta_id` int(11) NOT NULL,
  `venta_id` int(11) NOT NULL,
  `orden` int(11) NOT NULL DEFAULT 0,
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_venta_ruta` (`venta_id`),
  KEY `idx_ruta_orden` (`ruta_id`,`orden`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `ruta_pedidos_ibfk_1` FOREIGN KEY (`ruta_id`) REFERENCES `rutas_entrega` (`id`) ON DELETE CASCADE,
  CONSTRAINT `ruta_pedidos_ibfk_2` FOREIGN KEY (`venta_id`) REFERENCES `ventas` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `rutas_entrega` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `fecha` date NOT NULL,
  `estado` enum('pendiente','en_curso','completada') COLLATE utf8mb4_unicode_ci DEFAULT 'pendiente',
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`id`),
  KEY `idx_fecha` (`fecha`),
  KEY `idx_estado` (`estado`),
  KEY `idx_updated_at` (`updated_at`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `sesiones` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `usuario_id` int(11) NOT NULL,
  `session_token` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `ip_address` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `user_agent` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `fecha_inicio` timestamp NOT NULL DEFAULT current_timestamp(),
  `fecha_actividad` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `activa` tinyint(4) DEFAULT 1,
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  UNIQUE KEY `session_token` (`session_token`),
  KEY `usuario_id` (`usuario_id`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `sesiones_ibfk_1` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `sync_control` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `tabla` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `sucursal` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `last_push_at` datetime(6) DEFAULT NULL,
  `last_pull_at` datetime(6) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tabla_sucursal` (`tabla`,`sucursal`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `sync_id_map` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `tabla` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `sucursal_origen` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `id_remoto` int(11) NOT NULL,
  `id_local` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_mapping` (`tabla`,`sucursal_origen`,`id_remoto`),
  KEY `idx_local` (`tabla`,`id_local`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `sync_log` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `tabla` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `sucursal` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `direccion` enum('push','pull') COLLATE utf8mb4_unicode_ci NOT NULL,
  `registros_enviados` int(11) DEFAULT 0,
  `registros_recibidos` int(11) DEFAULT 0,
  `registros_conflictos` int(11) DEFAULT 0,
  `ultimo_sync_timestamp` datetime(6) DEFAULT NULL,
  `estado` enum('iniciado','completado','error') COLLATE utf8mb4_unicode_ci DEFAULT 'iniciado',
  `error_mensaje` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `duracion_ms` int(11) DEFAULT 0,
  `created_at` datetime(6) DEFAULT current_timestamp(6),
  PRIMARY KEY (`id`),
  KEY `idx_tabla` (`tabla`),
  KEY `idx_sucursal` (`sucursal`),
  KEY `idx_estado` (`estado`),
  KEY `idx_created` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `usuario_almacenes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `usuario_id` int(11) NOT NULL,
  `almacen_id` int(11) NOT NULL,
  `fecha_asignacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_usuario_almacen` (`usuario_id`,`almacen_id`),
  KEY `idx_usuario_id` (`usuario_id`),
  KEY `idx_almacen_id` (`almacen_id`),
  KEY `idx_usuario_almacenes_lookup` (`usuario_id`,`almacen_id`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `fk_usuario_almacenes_almacen` FOREIGN KEY (`almacen_id`) REFERENCES `almacenes` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `fk_usuario_almacenes_usuario` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Tabla de relaci├│n entre usuarios y almacenes asignados';
CREATE TABLE `usuarios` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `usuario` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `nombre` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `email` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `telefono` varchar(15) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `rol_id` int(11) NOT NULL,
  `biometric_id` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `activo` tinyint(4) DEFAULT 1,
  `ultimo_acceso` timestamp NULL DEFAULT NULL,
  `fecha_creacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  UNIQUE KEY `usuario` (`usuario`),
  UNIQUE KEY `email` (`email`),
  UNIQUE KEY `biometric_id` (`biometric_id`),
  KEY `idx_usuarios_rol` (`rol_id`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `usuarios_ibfk_1` FOREIGN KEY (`rol_id`) REFERENCES `roles` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `vehiculo_rangos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `vehiculo_id` int(11) NOT NULL,
  `rango_id` int(11) NOT NULL,
  `precio_especial` decimal(10,2) DEFAULT NULL COMMENT 'Precio especial para este vehículo en este rango',
  `activo` tinyint(4) DEFAULT 1,
  `fecha_creacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_vehiculo_rango` (`vehiculo_id`,`rango_id`),
  KEY `rango_id` (`rango_id`),
  KEY `idx_activo` (`activo`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `vehiculo_rangos_ibfk_1` FOREIGN KEY (`vehiculo_id`) REFERENCES `vehiculos` (`id`) ON DELETE CASCADE,
  CONSTRAINT `vehiculo_rangos_ibfk_2` FOREIGN KEY (`rango_id`) REFERENCES `rangos_flete` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Asignación de vehículos a rangos específicos';
CREATE TABLE `vehiculos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Nombre descriptivo del veh├¡culo',
  `placa` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Placa del veh├¡culo',
  `activo` tinyint(4) DEFAULT 1 COMMENT 'Estado: 1=Activo, 0=Inactivo',
  `fecha_creacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `fecha_actualizacion` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_placa` (`placa`),
  KEY `idx_nombre` (`nombre`),
  KEY `idx_activo` (`activo`),
  KEY `idx_updated_at` (`updated_at`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `venta_detalles` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `venta_id` int(11) NOT NULL,
  `producto_id` int(11) NOT NULL,
  `producto_nombre` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `cantidad` decimal(10,2) NOT NULL,
  `estatus_preparacion` enum('pendiente','preparado') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'pendiente',
  `cantidad_escaneada` int(11) NOT NULL DEFAULT 0,
  `precio_unitario` decimal(10,2) NOT NULL,
  `subtotal` decimal(10,2) NOT NULL,
  `impuesto` decimal(10,2) NOT NULL DEFAULT 0.00,
  `descuento` decimal(10,2) NOT NULL DEFAULT 0.00,
  `total` decimal(10,2) NOT NULL,
  `fecha_creacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `precio_tipo` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT 'precio_lista',
  `aplica_comision` tinyint(1) DEFAULT 0,
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  KEY `idx_venta` (`venta_id`),
  KEY `idx_producto` (`producto_id`),
  KEY `idx_estatus_preparacion` (`estatus_preparacion`),
  KEY `idx_cantidad_escaneada` (`cantidad_escaneada`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `venta_detalles_ibfk_1` FOREIGN KEY (`venta_id`) REFERENCES `ventas` (`id`) ON DELETE CASCADE,
  CONSTRAINT `venta_detalles_ibfk_2` FOREIGN KEY (`producto_id`) REFERENCES `productos` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `venta_pagos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `venta_id` int(11) NOT NULL COMMENT 'Referencia a la venta',
  `monto` decimal(10,2) NOT NULL COMMENT 'Monto del pago/abono',
  `metodo_pago` enum('efectivo','tarjeta','transferencia') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'efectivo',
  `referencia` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'N├║mero de referencia/transacci├│n',
  `notas` text COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Notas adicionales del pago',
  `registrado_por` int(11) NOT NULL COMMENT 'Usuario que registr├│ el pago',
  `pago_cliente_id` int(11) DEFAULT NULL,
  `fecha_pago` datetime NOT NULL DEFAULT current_timestamp() COMMENT 'Fecha y hora del pago',
  `fecha_creacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  KEY `idx_venta_pagos_venta` (`venta_id`),
  KEY `idx_venta_pagos_fecha` (`fecha_pago`),
  KEY `idx_venta_pagos_usuario` (`registrado_por`),
  KEY `idx_pago_cliente` (`pago_cliente_id`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `fk_venta_pago_cliente` FOREIGN KEY (`pago_cliente_id`) REFERENCES `pagos_clientes` (`id`) ON DELETE SET NULL,
  CONSTRAINT `fk_venta_pagos_usuario` FOREIGN KEY (`registrado_por`) REFERENCES `usuarios` (`id`) ON UPDATE CASCADE,
  CONSTRAINT `fk_venta_pagos_venta` FOREIGN KEY (`venta_id`) REFERENCES `ventas` (`id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Historial de pagos/abonos de ventas a cr├®dito';
CREATE TABLE `ventas` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `folio` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `cliente_id` int(11) DEFAULT NULL,
  `cliente_nombre` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `usuario_id` int(11) NOT NULL,
  `usuario_nombre` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `caja_id` int(11) DEFAULT NULL,
  `subtotal` decimal(10,2) NOT NULL DEFAULT 0.00,
  `impuesto` decimal(10,2) NOT NULL DEFAULT 0.00,
  `descuento` decimal(10,2) NOT NULL DEFAULT 0.00,
  `total` decimal(10,2) NOT NULL DEFAULT 0.00,
  `metodo_pago` enum('efectivo','tarjeta','transferencia','credito','mixto') COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `estatus_pago` enum('pagado','pendiente') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'pendiente',
  `saldo_pendiente` decimal(10,2) DEFAULT NULL COMMENT 'Saldo restante por cobrar (NULL si no es cr├®dito)',
  `tipo_entrega` enum('domicilio','pickup') COLLATE utf8mb4_unicode_ci DEFAULT 'pickup',
  `direccion_entrega` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `estado` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `observaciones` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `fecha_creacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `fecha_actualizacion` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `facturado` tinyint(1) DEFAULT 0,
  `aplica_comision` tinyint(1) DEFAULT 0,
  `comision_porcentaje` decimal(5,2) DEFAULT 0.00,
  `comision_monto` decimal(10,2) DEFAULT 0.00,
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_folio` (`folio`),
  KEY `idx_cliente` (`cliente_id`),
  KEY `idx_usuario` (`usuario_id`),
  KEY `idx_estado` (`estado`),
  KEY `idx_fecha` (`fecha_creacion`),
  KEY `idx_estatus_pago` (`estatus_pago`),
  KEY `idx_caja_id` (`caja_id`),
  KEY `idx_ventas_cxc` (`cliente_id`,`estatus_pago`,`metodo_pago`),
  KEY `idx_ventas_saldo` (`saldo_pendiente`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `fk_ventas_caja` FOREIGN KEY (`caja_id`) REFERENCES `cajas` (`id`) ON DELETE SET NULL,
  CONSTRAINT `ventas_ibfk_1` FOREIGN KEY (`cliente_id`) REFERENCES `clientes` (`id`) ON DELETE SET NULL,
  CONSTRAINT `ventas_ibfk_2` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `ventas_mostrador` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `folio` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL,
  `usuario_id` int(11) NOT NULL,
  `usuario_nombre` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `caja_id` int(11) DEFAULT NULL,
  `subtotal` decimal(10,2) NOT NULL DEFAULT 0.00,
  `impuesto` decimal(10,2) DEFAULT 0.00,
  `descuento` decimal(10,2) DEFAULT 0.00,
  `total` decimal(10,2) NOT NULL,
  `metodo_pago` enum('efectivo','tarjeta','tarjeta_credito','tarjeta_debito','transferencia','mixto') COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `estatus_pago` enum('pendiente','pagado') COLLATE utf8mb4_unicode_ci DEFAULT 'pagado',
  `facturado` tinyint(1) DEFAULT 0,
  `observaciones` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `fecha_creacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `fecha_actualizacion` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp(),
  `cliente_id` int(11) DEFAULT NULL,
  `corte_id` int(11) DEFAULT NULL,
  `aplica_comision` tinyint(1) DEFAULT 0 COMMENT 'Si la venta aplica comision por tarjeta',
  `comision_porcentaje` decimal(5,2) DEFAULT 0.00 COMMENT 'Porcentaje de comision aplicado',
  `comision_monto` decimal(10,2) DEFAULT 0.00 COMMENT 'Monto de la comision',
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  UNIQUE KEY `folio` (`folio`),
  KEY `idx_usuario_id` (`usuario_id`),
  KEY `idx_fecha_creacion` (`fecha_creacion`),
  KEY `idx_metodo_pago` (`metodo_pago`),
  KEY `idx_estatus_pago` (`estatus_pago`),
  KEY `idx_ventas_mostrador_fecha_usuario` (`fecha_creacion`,`usuario_id`),
  KEY `idx_ventas_mostrador_total` (`total`),
  KEY `idx_vm_caja_id` (`caja_id`),
  KEY `idx_corte` (`corte_id`),
  KEY `idx_ventas_mostrador_facturado` (`facturado`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `fk_ventas_mostrador_caja` FOREIGN KEY (`caja_id`) REFERENCES `cajas` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `ventas_mostrador_detalles` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `venta_mostrador_id` int(11) NOT NULL,
  `producto_id` int(11) NOT NULL,
  `producto_nombre` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `cantidad` decimal(10,2) NOT NULL,
  `precio_unitario` decimal(10,2) NOT NULL,
  `subtotal` decimal(10,2) NOT NULL,
  `impuesto` decimal(10,2) DEFAULT 0.00,
  `descuento` decimal(10,2) DEFAULT 0.00,
  `total` decimal(10,2) NOT NULL,
  `fecha_creacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `cantidad_devuelta` decimal(10,2) DEFAULT 0.00,
  `precio_tipo` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT 'precio_lista' COMMENT 'Tipo de precio usado',
  `aplica_comision` tinyint(1) DEFAULT 0 COMMENT 'Si este producto aplica comision',
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  KEY `idx_venta_mostrador_id` (`venta_mostrador_id`),
  KEY `idx_producto_id` (`producto_id`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `fk_ventas_mostrador_detalles_producto` FOREIGN KEY (`producto_id`) REFERENCES `productos` (`id`),
  CONSTRAINT `fk_ventas_mostrador_detalles_venta` FOREIGN KEY (`venta_mostrador_id`) REFERENCES `ventas_mostrador` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `ventas_mostrador_pagos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `venta_mostrador_id` int(11) NOT NULL,
  `metodo_pago` enum('efectivo','tarjeta','tarjeta_credito\r\n','tarjeta_debito','transferencia') COLLATE utf8mb4_unicode_ci NOT NULL,
  `monto` decimal(10,2) NOT NULL,
  `fecha_creacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6),
  PRIMARY KEY (`id`),
  KEY `idx_venta_mostrador_id` (`venta_mostrador_id`),
  KEY `idx_updated_at` (`updated_at`),
  CONSTRAINT `fk_ventas_mostrador_pagos_venta` FOREIGN KEY (`venta_mostrador_id`) REFERENCES `ventas_mostrador` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!50001 DROP VIEW IF EXISTS `vista_categorias`*/;
/*!50001 CREATE TABLE `vista_categorias` (
  `id` tinyint NOT NULL,
  `nombre` tinyint NOT NULL,
  `descripcion` tinyint NOT NULL,
  `activo` tinyint NOT NULL,
  `fecha_creacion` tinyint NOT NULL,
  `fecha_actualizacion` tinyint NOT NULL,
  `productos_count` tinyint NOT NULL
) ENGINE=MyISAM */;
/*!50001 DROP TABLE IF EXISTS `vista_categorias`*/;
/*!50001 DROP VIEW IF EXISTS `vista_categorias`*/;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `vista_categorias` AS select `c`.`id` AS `id`,`c`.`nombre` AS `nombre`,`c`.`descripcion` AS `descripcion`,`c`.`activo` AS `activo`,`c`.`fecha_creacion` AS `fecha_creacion`,`c`.`fecha_actualizacion` AS `fecha_actualizacion`,count(`p`.`id`) AS `productos_count` from (`categorias` `c` left join `productos` `p` on(`c`.`id` = `p`.`categoria_id`)) group by `c`.`id`,`c`.`nombre`,`c`.`descripcion`,`c`.`activo`,`c`.`fecha_creacion`,`c`.`fecha_actualizacion` */;


