-- https://www.phpmyadmin.net/
--
-- Servidor: 127.0.0.1
-- Tiempo de generación: 03-04-2026 a las 22:46:09
-- Versión del servidor: 10.4.14-MariaDB
-- Versión de PHP: 7.2.34

START TRANSACTION;



--
-- Base de datos: `pos_abarrotes`
--

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `almacenes`
--

CREATE TABLE `almacenes` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `cajas`
--

CREATE TABLE `cajas` (
  `id` int(11) NOT NULL,
  `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` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `categorias`
--

CREATE TABLE `categorias` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `cat_forma_pago`
--

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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `cat_metodo_pago`
--

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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `cat_regimen_fiscal`
--

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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `cat_uso_cfdi`
--

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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `clientes`
--

CREATE TABLE `clientes` (
  `id` int(11) NOT NULL,
  `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',
  `porcentaje_envio` decimal(5,2) NOT NULL 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(),
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `cliente_datos_fiscales`
--

CREATE TABLE `cliente_datos_fiscales` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `cliente_direcciones`
--

CREATE TABLE `cliente_direcciones` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `cliente_horarios_entrega`
--

CREATE TABLE `cliente_horarios_entrega` (
  `id` int(11) NOT NULL,
  `cliente_id` int(11) NOT NULL,
  `dia` enum('lunes','martes','miercoles','jueves','viernes','sabad  o','domingo') COLLATE utf8mb4_unicode_ci NOT NULL,
  `hora_inicio` time NOT NULL,
  `hora_fin` time NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `cliente_telefonos`
--

CREATE TABLE `cliente_telefonos` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `configuraciones`
--

CREATE TABLE `configuraciones` (
  `id` int(11) NOT NULL,
  `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` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `configuracion_rangos`
--

CREATE TABLE `configuracion_rangos` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `cortes_caja`
--

CREATE TABLE `cortes_caja` (
  `id` int(11) NOT NULL,
  `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,
  `total_devoluciones` decimal(12,2) DEFAULT 0.00,
  `cantidad_devoluciones` int(11) DEFAULT 0,
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `descuentos_volumen`
--

CREATE TABLE `descuentos_volumen` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `devoluciones`
--

CREATE TABLE `devoluciones` (
  `id` int(11) NOT NULL,
  `folio` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL,
  `venta_id` int(11) NOT NULL,
  `tipo_comprobante` enum('ticket_factura','solo_ticket') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'solo_ticket',
  `metodo_pago` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'efectivo',
  `alcance` enum('total','parcial') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'parcial',
  `tipo_nota_credito` enum('fiscal','interna') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'interna',
  `codigo_escenario` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `total_devolucion` decimal(12,2) NOT NULL DEFAULT 0.00,
  `usuario_id` int(11) NOT NULL,
  `usuario_autorizador_id` int(11) DEFAULT NULL,
  `nombre_pc` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `tipo_venta` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT 'mostrador',
  `estatus_pago` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT 'pagado',
  `requiere_reembolso` tinyint(1) DEFAULT 1,
  `observaciones` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `fecha_creacion` datetime DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `devoluciones_detalle`
--

CREATE TABLE `devoluciones_detalle` (
  `id` int(11) NOT NULL,
  `devolucion_id` int(11) NOT NULL,
  `detalle_venta_id` int(11) NOT NULL,
  `producto_id` int(11) NOT NULL,
  `cantidad` decimal(12,3) NOT NULL,
  `precio_unitario` decimal(12,2) NOT NULL,
  `precio_reembolso` decimal(12,2) NOT NULL,
  `subtotal` decimal(12,2) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `diferencia_costos`
--

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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `emisores_cfdi`
--

CREATE TABLE `emisores_cfdi` (
  `id` int(11) NOT NULL,
  `llave` varchar(500) NOT NULL,
  `rfc` varchar(13) NOT NULL,
  `razon_social` varchar(300) NOT NULL,
  `lugar_expedicion` varchar(10) DEFAULT '',
  `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()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `facturas`
--

CREATE TABLE `facturas` (
  `id` int(11) NOT NULL,
  `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` varchar(250) 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),
  `xml_timbrado` longtext COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `emisor_id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `factura_conceptos`
--

CREATE TABLE `factura_conceptos` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `factura_ventas`
--

CREATE TABLE `factura_ventas` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `factura_ventas_mostrador`
--

CREATE TABLE `factura_ventas_mostrador` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `ingresos_efectivo`
--

CREATE TABLE `ingresos_efectivo` (
  `id` int(11) NOT NULL,
  `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(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `log_actividad`
--

CREATE TABLE `log_actividad` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `log_seguridad`
--

CREATE TABLE `log_seguridad` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `ordenes_compra`
--

CREATE TABLE `ordenes_compra` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `orden_compra_detalle`
--

CREATE TABLE `orden_compra_detalle` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `pagos_clientes`
--

CREATE TABLE `pagos_clientes` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `permisos`
--

CREATE TABLE `permisos` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `precio_rangos`
--

CREATE TABLE `precio_rangos` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `productos`
--

CREATE TABLE `productos` (
  `id` int(11) NOT NULL,
  `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',
  `imagen_url` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `producto_equivalencias`
--

CREATE TABLE `producto_equivalencias` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Tabla para manejar equivalencias entre productos';

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `proveedores`
--

CREATE TABLE `proveedores` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `rangos_flete`
--

CREATE TABLE `rangos_flete` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `retiros_efectivo`
--

CREATE TABLE `retiros_efectivo` (
  `id` int(11) NOT NULL,
  `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(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `roles`
--

CREATE TABLE `roles` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `rol_permisos`
--

CREATE TABLE `rol_permisos` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `rutas_entrega`
--

CREATE TABLE `rutas_entrega` (
  `id` int(11) NOT NULL,
  `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` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `ruta_pedidos`
--

CREATE TABLE `ruta_pedidos` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `sesiones`
--

CREATE TABLE `sesiones` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `sesiones_app`
--

CREATE TABLE `sesiones_app` (
  `id` int(11) NOT NULL,
  `usuario_id` int(11) NOT NULL,
  `token` varchar(128) NOT NULL,
  `created_at` datetime DEFAULT current_timestamp(),
  `expires_at` datetime NOT NULL,
  `activo` tinyint(1) DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `sync_control`
--

CREATE TABLE `sync_control` (
  `id` int(11) NOT NULL,
  `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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `sync_id_map`
--

CREATE TABLE `sync_id_map` (
  `id` int(11) NOT NULL,
  `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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `sync_log`
--

CREATE TABLE `sync_log` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `usuarios`
--

CREATE TABLE `usuarios` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `usuario_almacenes`
--

CREATE TABLE `usuario_almacenes` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Tabla de relaci├│n entre usuarios y almacenes asignados';

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `usuario_huellas`
--

CREATE TABLE `usuario_huellas` (
  `id` int(11) NOT NULL,
  `usuario_id` int(11) NOT NULL,
  `dedo` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `fingerprint_base64` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
  `fecha_registro` timestamp NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `usuario_permisos_app`
--

CREATE TABLE `usuario_permisos_app` (
  `id` int(11) NOT NULL,
  `usuario_id` int(11) NOT NULL,
  `permiso` varchar(50) NOT NULL COMMENT 'Key del m├│dulo: pedidos, entregas, pedidos_guardados, embarques, clientes, catalogo, reportes',
  `fecha_asignacion` timestamp NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `vehiculos`
--

CREATE TABLE `vehiculos` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `vehiculo_rangos`
--

CREATE TABLE `vehiculo_rangos` (
  `id` int(11) NOT NULL,
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Asignación de vehículos a rangos específicos';

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `ventas`
--

CREATE TABLE `ventas` (
  `id` int(11) NOT NULL,
  `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` varchar(250) 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,
  `latitud` decimal(10,8) DEFAULT NULL,
  `longitud` decimal(11,8) DEFAULT NULL,
  `precision_gps` decimal(6,2) DEFAULT NULL,
  `requiere_factura` tinyint(1) NOT NULL DEFAULT 0,
  `factura_rfc` varchar(13) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `factura_razon_social` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `factura_cp` varchar(5) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `factura_email` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `dato_fiscal_id` int(11) 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),
  `emisor_id` int(11) DEFAULT NULL,
  `codigo_facturacion` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `ventas_mostrador`
--

CREATE TABLE `ventas_mostrador` (
  `id` int(11) NOT NULL,
  `folio` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL,
  `codigo_facturacion` varchar(8) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `emisor_id` int(11) DEFAULT 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,
  `saldo_pendiente` decimal(10,2) DEFAULT 0.00,
  `metodo_pago` enum('efectivo','tarjeta','tarjeta_credit\r\n  o','tarjeta_debito','transferencia','credito','mixto') COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `estatus_pago` varchar(50) 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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `ventas_mostrador_detalles`
--

CREATE TABLE `ventas_mostrador_detalles` (
  `id` int(11) NOT NULL,
  `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',
  `costo` decimal(12,4) DEFAULT 0.0000,
  `costo_tipo` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Tipo de  \r\n  costo usado: precio_compra o costo_precios',
  `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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `ventas_mostrador_pagos`
--

CREATE TABLE `ventas_mostrador_pagos` (
  `id` int(11) NOT NULL,
  `venta_mostrador_id` int(11) NOT NULL,
  `metodo_pago` varchar(250) COLLATE utf8mb4_unicode_ci NOT NULL,
  `monto` decimal(10,2) NOT NULL,
  `es_abono_cxc` tinyint(1) DEFAULT 0,
  `registrado_por` int(11) DEFAULT NULL,
  `notas` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `referencia` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `fecha_creacion` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `venta_detalles`
--

CREATE TABLE `venta_detalles` (
  `id` int(11) NOT NULL,
  `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',
  `costo` decimal(12,4) DEFAULT 0.0000,
  `costo_tipo` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Tipo de costo usado: precio_compra o costo_precios',
  `aplica_comision` tinyint(1) DEFAULT 0,
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `venta_pagos`
--

CREATE TABLE `venta_pagos` (
  `id` int(11) NOT NULL,
  `venta_id` int(11) NOT NULL COMMENT 'Referencia a la venta',
  `tipo_venta` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT '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)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Historial de pagos/abonos de ventas a cr├®dito';

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `visitas_sin_compra`
--

CREATE TABLE `visitas_sin_compra` (
  `id` int(11) NOT NULL,
  `app_visita_id` varchar(100) DEFAULT NULL,
  `cliente_id` int(11) NOT NULL,
  `cliente_nombre` varchar(255) NOT NULL,
  `usuario_id` int(11) NOT NULL,
  `usuario_nombre` varchar(255) NOT NULL,
  `motivo` varchar(255) NOT NULL,
  `notas` text DEFAULT NULL,
  `latitud` decimal(10,8) DEFAULT NULL,
  `longitud` decimal(11,8) DEFAULT NULL,
  `precision_gps` decimal(6,2) DEFAULT NULL,
  `fecha_visita` datetime NOT NULL DEFAULT current_timestamp(),
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` datetime(6) DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- --------------------------------------------------------

--
-- Estructura Stand-in para la vista `vista_categorias`
-- (Véase abajo para la vista actual)
--
CREATE TABLE `vista_categorias` (
`id` int(11)
,`nombre` varchar(50)
,`descripcion` text
,`activo` tinyint(1)
,`fecha_creacion` timestamp
,`fecha_actualizacion` timestamp
,`productos_count` bigint(21)
);

-- --------------------------------------------------------

--
-- Estructura para la vista `vista_categorias`
--

CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER 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` ;

--
-- Índices para tablas volcadas
--

--
-- Indices de la tabla `almacenes`
--
ALTER TABLE `almacenes`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `codigo` (`codigo`),
  ADD KEY `idx_nombre` (`nombre`),
  ADD KEY `idx_codigo` (`codigo`),
  ADD KEY `idx_activo` (`activo`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `cajas`
--
ALTER TABLE `cajas`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `identificador` (`identificador`),
  ADD UNIQUE KEY `idx_nombre_pc` (`nombre_pc`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `categorias`
--
ALTER TABLE `categorias`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uk_categoria_nombre` (`nombre`),
  ADD KEY `idx_categorias_activo` (`activo`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `cat_forma_pago`
--
ALTER TABLE `cat_forma_pago`
  ADD PRIMARY KEY (`clave`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `cat_metodo_pago`
--
ALTER TABLE `cat_metodo_pago`
  ADD PRIMARY KEY (`clave`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `cat_regimen_fiscal`
--
ALTER TABLE `cat_regimen_fiscal`
  ADD PRIMARY KEY (`clave`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `cat_uso_cfdi`
--
ALTER TABLE `cat_uso_cfdi`
  ADD PRIMARY KEY (`clave`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `clientes`
--
ALTER TABLE `clientes`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_nombre` (`nombre`),
  ADD KEY `idx_activo` (`activo`),
  ADD KEY `idx_clientes_credito` (`tiene_credito`),
  ADD KEY `idx_rfc` (`rfc`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `cliente_datos_fiscales`
--
ALTER TABLE `cliente_datos_fiscales`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_cliente_datos_fiscales_cliente` (`cliente_id`),
  ADD KEY `idx_cliente_datos_fiscales_rfc` (`rfc`),
  ADD KEY `idx_cliente_datos_fiscales_activo` (`activo`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `cliente_direcciones`
--
ALTER TABLE `cliente_direcciones`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_cliente_direccion` (`cliente_id`,`activo`),
  ADD KEY `idx_coordenadas` (`latitud`,`longitud`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `cliente_horarios_entrega`
--
ALTER TABLE `cliente_horarios_entrega`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_cliente` (`cliente_id`);

--
-- Indices de la tabla `cliente_telefonos`
--
ALTER TABLE `cliente_telefonos`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `unique_cliente_telefono` (`cliente_id`,`telefono`),
  ADD KEY `idx_cliente_telefono` (`cliente_id`,`activo`),
  ADD KEY `idx_telefono` (`telefono`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `configuraciones`
--
ALTER TABLE `configuraciones`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `unique_clave_caja_id` (`clave`,`caja_id`),
  ADD KEY `idx_configuraciones_categoria` (`categoria`),
  ADD KEY `idx_caja` (`caja_id`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `configuracion_rangos`
--
ALTER TABLE `configuracion_rangos`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_precio_tipo` (`precio_tipo`),
  ADD KEY `idx_activo` (`activo`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `cortes_caja`
--
ALTER TABLE `cortes_caja`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_caja` (`caja_id`),
  ADD KEY `idx_fecha` (`fecha_creacion`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `descuentos_volumen`
--
ALTER TABLE `descuentos_volumen`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uk_producto_cantidad` (`producto_id`,`cantidad_minima`),
  ADD KEY `idx_producto_activo` (`producto_id`,`activo`),
  ADD KEY `idx_cantidad` (`cantidad_minima`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `devoluciones`
--
ALTER TABLE `devoluciones`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_venta_id` (`venta_id`),
  ADD KEY `idx_folio` (`folio`),
  ADD KEY `idx_fecha` (`fecha_creacion`);

--
-- Indices de la tabla `devoluciones_detalle`
--
ALTER TABLE `devoluciones_detalle`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_devolucion_id` (`devolucion_id`);

--
-- Indices de la tabla `diferencia_costos`
--
ALTER TABLE `diferencia_costos`
  ADD PRIMARY KEY (`producto_id`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `emisores_cfdi`
--
ALTER TABLE `emisores_cfdi`
  ADD PRIMARY KEY (`id`);

--
-- Indices de la tabla `facturas`
--
ALTER TABLE `facturas`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_uuid` (`uuid`),
  ADD KEY `idx_folio` (`folio`),
  ADD KEY `idx_serie_folio` (`serie`,`folio`),
  ADD KEY `idx_cliente` (`cliente_id`),
  ADD KEY `idx_estado` (`estado`),
  ADD KEY `idx_fecha_emision` (`fecha_emision`),
  ADD KEY `idx_receptor_rfc` (`receptor_rfc`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `factura_conceptos`
--
ALTER TABLE `factura_conceptos`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_factura` (`factura_id`),
  ADD KEY `idx_producto` (`producto_id`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `factura_ventas`
--
ALTER TABLE `factura_ventas`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `unique_factura_venta` (`factura_id`,`venta_id`),
  ADD KEY `idx_factura` (`factura_id`),
  ADD KEY `idx_venta` (`venta_id`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `factura_ventas_mostrador`
--
ALTER TABLE `factura_ventas_mostrador`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uk_factura_venta_mostrador` (`factura_id`,`venta_mostrador_id`),
  ADD KEY `idx_venta_mostrador` (`venta_mostrador_id`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `ingresos_efectivo`
--
ALTER TABLE `ingresos_efectivo`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_caja_fecha` (`caja_id`,`fecha_ingreso`),
  ADD KEY `idx_usuario` (`usuario_id`),
  ADD KEY `idx_nombre_pc` (`nombre_pc`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `log_actividad`
--
ALTER TABLE `log_actividad`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_log_actividad_usuario` (`usuario_id`),
  ADD KEY `idx_log_actividad_fecha` (`fecha`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `log_seguridad`
--
ALTER TABLE `log_seguridad`
  ADD PRIMARY KEY (`id`),
  ADD KEY `usuario_id` (`usuario_id`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `ordenes_compra`
--
ALTER TABLE `ordenes_compra`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `folio` (`folio`),
  ADD KEY `usuario_id` (`usuario_id`),
  ADD KEY `aprobado_por` (`aprobado_por`),
  ADD KEY `idx_folio` (`folio`),
  ADD KEY `idx_proveedor` (`proveedor_id`),
  ADD KEY `idx_estado` (`estado`),
  ADD KEY `idx_fecha` (`fecha_creacion`),
  ADD KEY `idx_estado_pago` (`estado_pago`),
  ADD KEY `recibido_por` (`recibido_por`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `orden_compra_detalle`
--
ALTER TABLE `orden_compra_detalle`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_orden` (`orden_compra_id`),
  ADD KEY `idx_producto` (`producto_id`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `pagos_clientes`
--
ALTER TABLE `pagos_clientes`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_cliente` (`cliente_id`),
  ADD KEY `idx_fecha` (`fecha_pago`),
  ADD KEY `idx_facturado` (`facturado`),
  ADD KEY `idx_folio` (`folio`),
  ADD KEY `fk_pago_usuario` (`registrado_por`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `permisos`
--
ALTER TABLE `permisos`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `nombre` (`nombre`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `precio_rangos`
--
ALTER TABLE `precio_rangos`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_producto_tipo` (`producto_id`,`precio_tipo`),
  ADD KEY `idx_cantidad` (`cantidad_minima`,`cantidad_maxima`),
  ADD KEY `idx_activo` (`activo`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `productos`
--
ALTER TABLE `productos`
  ADD PRIMARY KEY (`id`),
  ADD KEY `fk_producto_categoria` (`categoria_id`),
  ADD KEY `idx_productos_activo` (`activo`),
  ADD KEY `idx_productos_stock` (`stock`),
  ADD KEY `idx_productos_categoria_activo` (`categoria_id`,`activo`),
  ADD KEY `idx_almacen_id` (`almacen_id`),
  ADD KEY `idx_codigo_corto` (`codigo_corto`),
  ADD KEY `idx_codigo_barras` (`codigo_barras`),
  ADD KEY `idx_productos_cve_cfdi` (`cve_cfdi`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `producto_equivalencias`
--
ALTER TABLE `producto_equivalencias`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `unique_equivalencia` (`producto_id`,`producto_equivalente_id`),
  ADD KEY `idx_producto_id` (`producto_id`),
  ADD KEY `idx_producto_equivalente_id` (`producto_equivalente_id`),
  ADD KEY `idx_activo` (`activo`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `proveedores`
--
ALTER TABLE `proveedores`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_nombre` (`nombre`),
  ADD KEY `idx_activo` (`activo`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `rangos_flete`
--
ALTER TABLE `rangos_flete`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_distancia` (`distancia_desde`,`distancia_hasta`),
  ADD KEY `idx_vehiculo` (`vehiculo_id`),
  ADD KEY `idx_activo` (`activo`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `retiros_efectivo`
--
ALTER TABLE `retiros_efectivo`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_caja_fecha` (`caja_id`,`fecha_retiro`),
  ADD KEY `idx_usuario` (`usuario_id`),
  ADD KEY `idx_nombre_pc` (`nombre_pc`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `roles`
--
ALTER TABLE `roles`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `nombre` (`nombre`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `rol_permisos`
--
ALTER TABLE `rol_permisos`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `unique_rol_permiso` (`rol_id`,`permiso_id`),
  ADD KEY `permiso_id` (`permiso_id`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `rutas_entrega`
--
ALTER TABLE `rutas_entrega`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_fecha` (`fecha`),
  ADD KEY `idx_estado` (`estado`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `ruta_pedidos`
--
ALTER TABLE `ruta_pedidos`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `unique_venta_ruta` (`venta_id`),
  ADD KEY `idx_ruta_orden` (`ruta_id`,`orden`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `sesiones`
--
ALTER TABLE `sesiones`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `session_token` (`session_token`),
  ADD KEY `usuario_id` (`usuario_id`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `sesiones_app`
--
ALTER TABLE `sesiones_app`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `token` (`token`),
  ADD KEY `idx_token` (`token`),
  ADD KEY `idx_usuario` (`usuario_id`);

--
-- Indices de la tabla `sync_control`
--
ALTER TABLE `sync_control`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uk_tabla_sucursal` (`tabla`,`sucursal`);

--
-- Indices de la tabla `sync_id_map`
--
ALTER TABLE `sync_id_map`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uk_mapping` (`tabla`,`sucursal_origen`,`id_remoto`),
  ADD KEY `idx_local` (`tabla`,`id_local`);

--
-- Indices de la tabla `sync_log`
--
ALTER TABLE `sync_log`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_tabla` (`tabla`),
  ADD KEY `idx_sucursal` (`sucursal`),
  ADD KEY `idx_estado` (`estado`),
  ADD KEY `idx_created` (`created_at`);

--
-- Indices de la tabla `usuarios`
--
ALTER TABLE `usuarios`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `usuario` (`usuario`),
  ADD UNIQUE KEY `email` (`email`),
  ADD UNIQUE KEY `biometric_id` (`biometric_id`),
  ADD KEY `idx_usuarios_rol` (`rol_id`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `usuario_almacenes`
--
ALTER TABLE `usuario_almacenes`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `unique_usuario_almacen` (`usuario_id`,`almacen_id`),
  ADD KEY `idx_usuario_id` (`usuario_id`),
  ADD KEY `idx_almacen_id` (`almacen_id`),
  ADD KEY `idx_usuario_almacenes_lookup` (`usuario_id`,`almacen_id`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `usuario_huellas`
--
ALTER TABLE `usuario_huellas`
  ADD PRIMARY KEY (`id`),
  ADD KEY `usuario_id` (`usuario_id`);

--
-- Indices de la tabla `usuario_permisos_app`
--
ALTER TABLE `usuario_permisos_app`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `unique_usuario_permiso_app` (`usuario_id`,`permiso`),
  ADD KEY `idx_usuario_id` (`usuario_id`);

--
-- Indices de la tabla `vehiculos`
--
ALTER TABLE `vehiculos`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `idx_placa` (`placa`),
  ADD KEY `idx_nombre` (`nombre`),
  ADD KEY `idx_activo` (`activo`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `vehiculo_rangos`
--
ALTER TABLE `vehiculo_rangos`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `idx_vehiculo_rango` (`vehiculo_id`,`rango_id`),
  ADD KEY `rango_id` (`rango_id`),
  ADD KEY `idx_activo` (`activo`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `ventas`
--
ALTER TABLE `ventas`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `unique_folio` (`folio`),
  ADD KEY `idx_cliente` (`cliente_id`),
  ADD KEY `idx_usuario` (`usuario_id`),
  ADD KEY `idx_estado` (`estado`),
  ADD KEY `idx_fecha` (`fecha_creacion`),
  ADD KEY `idx_estatus_pago` (`estatus_pago`),
  ADD KEY `idx_caja_id` (`caja_id`),
  ADD KEY `idx_ventas_cxc` (`cliente_id`,`estatus_pago`,`metodo_pago`),
  ADD KEY `idx_ventas_saldo` (`saldo_pendiente`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `ventas_mostrador`
--
ALTER TABLE `ventas_mostrador`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `folio` (`folio`),
  ADD UNIQUE KEY `codigo_facturacion` (`codigo_facturacion`),
  ADD KEY `idx_usuario_id` (`usuario_id`),
  ADD KEY `idx_fecha_creacion` (`fecha_creacion`),
  ADD KEY `idx_metodo_pago` (`metodo_pago`),
  ADD KEY `idx_estatus_pago` (`estatus_pago`),
  ADD KEY `idx_ventas_mostrador_fecha_usuario` (`fecha_creacion`,`usuario_id`),
  ADD KEY `idx_ventas_mostrador_total` (`total`),
  ADD KEY `idx_vm_caja_id` (`caja_id`),
  ADD KEY `idx_corte` (`corte_id`),
  ADD KEY `idx_ventas_mostrador_facturado` (`facturado`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `ventas_mostrador_detalles`
--
ALTER TABLE `ventas_mostrador_detalles`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_venta_mostrador_id` (`venta_mostrador_id`),
  ADD KEY `idx_producto_id` (`producto_id`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `ventas_mostrador_pagos`
--
ALTER TABLE `ventas_mostrador_pagos`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_venta_mostrador_id` (`venta_mostrador_id`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `venta_detalles`
--
ALTER TABLE `venta_detalles`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_venta` (`venta_id`),
  ADD KEY `idx_producto` (`producto_id`),
  ADD KEY `idx_estatus_preparacion` (`estatus_preparacion`),
  ADD KEY `idx_cantidad_escaneada` (`cantidad_escaneada`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `venta_pagos`
--
ALTER TABLE `venta_pagos`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_venta_pagos_venta` (`venta_id`),
  ADD KEY `idx_venta_pagos_fecha` (`fecha_pago`),
  ADD KEY `idx_venta_pagos_usuario` (`registrado_por`),
  ADD KEY `idx_pago_cliente` (`pago_cliente_id`),
  ADD KEY `idx_updated_at` (`updated_at`);

--
-- Indices de la tabla `visitas_sin_compra`
--
ALTER TABLE `visitas_sin_compra`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_cliente` (`cliente_id`),
  ADD KEY `idx_usuario` (`usuario_id`),
  ADD KEY `idx_fecha` (`fecha_visita`),
  ADD KEY `idx_app_id` (`app_visita_id`);

--
-- AUTO_INCREMENT de las tablas volcadas
--

--
-- AUTO_INCREMENT de la tabla `almacenes`
--
ALTER TABLE `almacenes`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `cajas`
--
ALTER TABLE `cajas`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `categorias`
--
ALTER TABLE `categorias`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `clientes`
--
ALTER TABLE `clientes`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `cliente_datos_fiscales`
--
ALTER TABLE `cliente_datos_fiscales`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `cliente_direcciones`
--
ALTER TABLE `cliente_direcciones`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `cliente_horarios_entrega`
--
ALTER TABLE `cliente_horarios_entrega`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `cliente_telefonos`
--
ALTER TABLE `cliente_telefonos`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `configuraciones`
--
ALTER TABLE `configuraciones`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `configuracion_rangos`
--
ALTER TABLE `configuracion_rangos`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `cortes_caja`
--
ALTER TABLE `cortes_caja`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `descuentos_volumen`
--
ALTER TABLE `descuentos_volumen`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `devoluciones`
--
ALTER TABLE `devoluciones`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `devoluciones_detalle`
--
ALTER TABLE `devoluciones_detalle`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `emisores_cfdi`
--
ALTER TABLE `emisores_cfdi`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `facturas`
--
ALTER TABLE `facturas`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `factura_conceptos`
--
ALTER TABLE `factura_conceptos`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `factura_ventas`
--
ALTER TABLE `factura_ventas`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `factura_ventas_mostrador`
--
ALTER TABLE `factura_ventas_mostrador`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `ingresos_efectivo`
--
ALTER TABLE `ingresos_efectivo`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `log_actividad`
--
ALTER TABLE `log_actividad`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `log_seguridad`
--
ALTER TABLE `log_seguridad`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `ordenes_compra`
--
ALTER TABLE `ordenes_compra`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `orden_compra_detalle`
--
ALTER TABLE `orden_compra_detalle`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `pagos_clientes`
--
ALTER TABLE `pagos_clientes`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `permisos`
--
ALTER TABLE `permisos`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `precio_rangos`
--
ALTER TABLE `precio_rangos`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `productos`
--
ALTER TABLE `productos`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `producto_equivalencias`
--
ALTER TABLE `producto_equivalencias`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `proveedores`
--
ALTER TABLE `proveedores`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `rangos_flete`
--
ALTER TABLE `rangos_flete`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `retiros_efectivo`
--
ALTER TABLE `retiros_efectivo`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `roles`
--
ALTER TABLE `roles`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `rol_permisos`
--
ALTER TABLE `rol_permisos`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `rutas_entrega`
--
ALTER TABLE `rutas_entrega`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `ruta_pedidos`
--
ALTER TABLE `ruta_pedidos`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `sesiones`
--
ALTER TABLE `sesiones`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `sesiones_app`
--
ALTER TABLE `sesiones_app`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `sync_control`
--
ALTER TABLE `sync_control`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `sync_id_map`
--
ALTER TABLE `sync_id_map`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `sync_log`
--
ALTER TABLE `sync_log`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `usuarios`
--
ALTER TABLE `usuarios`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `usuario_almacenes`
--
ALTER TABLE `usuario_almacenes`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `usuario_huellas`
--
ALTER TABLE `usuario_huellas`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `usuario_permisos_app`
--
ALTER TABLE `usuario_permisos_app`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `vehiculos`
--
ALTER TABLE `vehiculos`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `vehiculo_rangos`
--
ALTER TABLE `vehiculo_rangos`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `ventas`
--
ALTER TABLE `ventas`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `ventas_mostrador`
--
ALTER TABLE `ventas_mostrador`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `ventas_mostrador_detalles`
--
ALTER TABLE `ventas_mostrador_detalles`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `ventas_mostrador_pagos`
--
ALTER TABLE `ventas_mostrador_pagos`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `venta_detalles`
--
ALTER TABLE `venta_detalles`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `venta_pagos`
--
ALTER TABLE `venta_pagos`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `visitas_sin_compra`
--
ALTER TABLE `visitas_sin_compra`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

--
-- Restricciones para tablas volcadas
--

--
-- Filtros para la tabla `cliente_datos_fiscales`
--
ALTER TABLE `cliente_datos_fiscales`
  ADD CONSTRAINT `cliente_datos_fiscales_ibfk_1` FOREIGN KEY (`cliente_id`) REFERENCES `clientes` (`id`) ON DELETE CASCADE;

--
-- Filtros para la tabla `cliente_direcciones`
--
ALTER TABLE `cliente_direcciones`
  ADD CONSTRAINT `cliente_direcciones_ibfk_1` FOREIGN KEY (`cliente_id`) REFERENCES `clientes` (`id`) ON DELETE CASCADE;

--
-- Filtros para la tabla `cliente_horarios_entrega`
--
ALTER TABLE `cliente_horarios_entrega`
  ADD CONSTRAINT `fk_horarios_cliente` FOREIGN KEY (`cliente_id`) REFERENCES `clientes` (`id`) ON DELETE CASCADE;

--
-- Filtros para la tabla `cliente_telefonos`
--
ALTER TABLE `cliente_telefonos`
  ADD CONSTRAINT `cliente_telefonos_ibfk_1` FOREIGN KEY (`cliente_id`) REFERENCES `clientes` (`id`) ON DELETE CASCADE;

--
-- Filtros para la tabla `configuraciones`
--
ALTER TABLE `configuraciones`
  ADD CONSTRAINT `fk_configuraciones_caja` FOREIGN KEY (`caja_id`) REFERENCES `cajas` (`id`) ON DELETE CASCADE;

--
-- Filtros para la tabla `cortes_caja`
--
ALTER TABLE `cortes_caja`
  ADD CONSTRAINT `cortes_caja_ibfk_1` FOREIGN KEY (`caja_id`) REFERENCES `cajas` (`id`);

--
-- Filtros para la tabla `descuentos_volumen`
--
ALTER TABLE `descuentos_volumen`
  ADD CONSTRAINT `descuentos_volumen_ibfk_1` FOREIGN KEY (`producto_id`) REFERENCES `productos` (`id`) ON DELETE CASCADE;

--
-- Filtros para la tabla `log_actividad`
--
ALTER TABLE `log_actividad`
  ADD CONSTRAINT `log_actividad_ibfk_1` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`);

--
-- Filtros para la tabla `log_seguridad`
--
ALTER TABLE `log_seguridad`
  ADD CONSTRAINT `log_seguridad_ibfk_1` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`);

--
-- Filtros para la tabla `ordenes_compra`
--
ALTER TABLE `ordenes_compra`
  ADD CONSTRAINT `ordenes_compra_ibfk_1` FOREIGN KEY (`proveedor_id`) REFERENCES `proveedores` (`id`),
  ADD CONSTRAINT `ordenes_compra_ibfk_2` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`),
  ADD CONSTRAINT `ordenes_compra_ibfk_3` FOREIGN KEY (`aprobado_por`) REFERENCES `usuarios` (`id`),
  ADD CONSTRAINT `ordenes_compra_ibfk_4` FOREIGN KEY (`recibido_por`) REFERENCES `usuarios` (`id`);

--
-- Filtros para la tabla `orden_compra_detalle`
--
ALTER TABLE `orden_compra_detalle`
  ADD CONSTRAINT `orden_compra_detalle_ibfk_1` FOREIGN KEY (`orden_compra_id`) REFERENCES `ordenes_compra` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `orden_compra_detalle_ibfk_2` FOREIGN KEY (`producto_id`) REFERENCES `productos` (`id`);

--
-- Filtros para la tabla `pagos_clientes`
--
ALTER TABLE `pagos_clientes`
  ADD CONSTRAINT `fk_pago_cliente` FOREIGN KEY (`cliente_id`) REFERENCES `clientes` (`id`),
  ADD CONSTRAINT `fk_pago_usuario` FOREIGN KEY (`registrado_por`) REFERENCES `usuarios` (`id`);

--
-- Filtros para la tabla `precio_rangos`
--
ALTER TABLE `precio_rangos`
  ADD CONSTRAINT `precio_rangos_ibfk_1` FOREIGN KEY (`producto_id`) REFERENCES `productos` (`id`) ON DELETE CASCADE;

--
-- Filtros para la tabla `productos`
--
ALTER TABLE `productos`
  ADD CONSTRAINT `fk_producto_categoria` FOREIGN KEY (`categoria_id`) REFERENCES `categorias` (`id`) ON DELETE SET NULL;

--
-- Filtros para la tabla `producto_equivalencias`
--
ALTER TABLE `producto_equivalencias`
  ADD CONSTRAINT `producto_equivalencias_ibfk_1` FOREIGN KEY (`producto_id`) REFERENCES `productos` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `producto_equivalencias_ibfk_2` FOREIGN KEY (`producto_equivalente_id`) REFERENCES `productos` (`id`) ON DELETE CASCADE;

--
-- Filtros para la tabla `rangos_flete`
--
ALTER TABLE `rangos_flete`
  ADD CONSTRAINT `rangos_flete_ibfk_1` FOREIGN KEY (`vehiculo_id`) REFERENCES `vehiculos` (`id`) ON DELETE SET NULL;

--
-- Filtros para la tabla `retiros_efectivo`
--
ALTER TABLE `retiros_efectivo`
  ADD CONSTRAINT `retiros_efectivo_ibfk_1` FOREIGN KEY (`caja_id`) REFERENCES `cajas` (`id`),
  ADD CONSTRAINT `retiros_efectivo_ibfk_2` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`);

--
-- Filtros para la tabla `rol_permisos`
--
ALTER TABLE `rol_permisos`
  ADD CONSTRAINT `rol_permisos_ibfk_1` FOREIGN KEY (`rol_id`) REFERENCES `roles` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `rol_permisos_ibfk_2` FOREIGN KEY (`permiso_id`) REFERENCES `permisos` (`id`) ON DELETE CASCADE;

--
-- Filtros para la tabla `ruta_pedidos`
--
ALTER TABLE `ruta_pedidos`
  ADD CONSTRAINT `ruta_pedidos_ibfk_1` FOREIGN KEY (`ruta_id`) REFERENCES `rutas_entrega` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `ruta_pedidos_ibfk_2` FOREIGN KEY (`venta_id`) REFERENCES `ventas` (`id`) ON DELETE CASCADE;

--
-- Filtros para la tabla `sesiones`
--
ALTER TABLE `sesiones`
  ADD CONSTRAINT `sesiones_ibfk_1` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`);

--
-- Filtros para la tabla `sesiones_app`
--
ALTER TABLE `sesiones_app`
  ADD CONSTRAINT `sesiones_app_ibfk_1` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`) ON DELETE CASCADE;

--
-- Filtros para la tabla `usuarios`
--
ALTER TABLE `usuarios`
  ADD CONSTRAINT `usuarios_ibfk_1` FOREIGN KEY (`rol_id`) REFERENCES `roles` (`id`);

--
-- Filtros para la tabla `usuario_almacenes`
--
ALTER TABLE `usuario_almacenes`
  ADD CONSTRAINT `fk_usuario_almacenes_almacen` FOREIGN KEY (`almacen_id`) REFERENCES `almacenes` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `fk_usuario_almacenes_usuario` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

--
-- Filtros para la tabla `usuario_huellas`
--
ALTER TABLE `usuario_huellas`
  ADD CONSTRAINT `usuario_huellas_ibfk_1` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`) ON DELETE CASCADE;

--
-- Filtros para la tabla `usuario_permisos_app`
--
ALTER TABLE `usuario_permisos_app`
  ADD CONSTRAINT `fk_upa_usuario` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`) ON DELETE CASCADE;

--
-- Filtros para la tabla `vehiculo_rangos`
--
ALTER TABLE `vehiculo_rangos`
  ADD CONSTRAINT `vehiculo_rangos_ibfk_1` FOREIGN KEY (`vehiculo_id`) REFERENCES `vehiculos` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `vehiculo_rangos_ibfk_2` FOREIGN KEY (`rango_id`) REFERENCES `rangos_flete` (`id`) ON DELETE CASCADE;

--
-- Filtros para la tabla `ventas`
--
ALTER TABLE `ventas`
  ADD CONSTRAINT `fk_ventas_caja` FOREIGN KEY (`caja_id`) REFERENCES `cajas` (`id`) ON DELETE SET NULL,
  ADD CONSTRAINT `ventas_ibfk_1` FOREIGN KEY (`cliente_id`) REFERENCES `clientes` (`id`) ON DELETE SET NULL,
  ADD CONSTRAINT `ventas_ibfk_2` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`);

--
-- Filtros para la tabla `ventas_mostrador`
--
ALTER TABLE `ventas_mostrador`
  ADD CONSTRAINT `fk_ventas_mostrador_caja` FOREIGN KEY (`caja_id`) REFERENCES `cajas` (`id`) ON DELETE SET NULL;

--
-- Filtros para la tabla `ventas_mostrador_detalles`
--
ALTER TABLE `ventas_mostrador_detalles`
  ADD CONSTRAINT `fk_ventas_mostrador_detalles_producto` FOREIGN KEY (`producto_id`) REFERENCES `productos` (`id`),
  ADD CONSTRAINT `fk_ventas_mostrador_detalles_venta` FOREIGN KEY (`venta_mostrador_id`) REFERENCES `ventas_mostrador` (`id`) ON DELETE CASCADE;

--
-- Filtros para la tabla `ventas_mostrador_pagos`
--
ALTER TABLE `ventas_mostrador_pagos`
  ADD CONSTRAINT `fk_ventas_mostrador_pagos_venta` FOREIGN KEY (`venta_mostrador_id`) REFERENCES `ventas_mostrador` (`id`) ON DELETE CASCADE;

--
-- Filtros para la tabla `venta_detalles`
--
ALTER TABLE `venta_detalles`
  ADD CONSTRAINT `venta_detalles_ibfk_1` FOREIGN KEY (`venta_id`) REFERENCES `ventas` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `venta_detalles_ibfk_2` FOREIGN KEY (`producto_id`) REFERENCES `productos` (`id`);

--
-- Filtros para la tabla `venta_pagos`
--
ALTER TABLE `venta_pagos`
  ADD CONSTRAINT `fk_venta_pago_cliente` FOREIGN KEY (`pago_cliente_id`) REFERENCES `pagos_clientes` (`id`) ON DELETE SET NULL,
  ADD CONSTRAINT `fk_venta_pagos_usuario` FOREIGN KEY (`registrado_por`) REFERENCES `usuarios` (`id`) ON UPDATE CASCADE,
  ADD CONSTRAINT `fk_venta_pagos_venta` FOREIGN KEY (`venta_id`) REFERENCES `ventas` (`id`) ON UPDATE CASCADE;
COMMIT;

