-- phpMyAdmin SQL Dump
-- version 5.2.2
-- https://www.phpmyadmin.net/
--
-- Servidor: localhost:3306
-- Tiempo de generación: 01-07-2026 a las 20:15:05
-- Versión del servidor: 10.6.27-MariaDB
-- Versión de PHP: 8.4.22

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Base de datos: `fasicat_cukpos`
--

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

--
-- Estructura de tabla para la tabla `api_keys`
--

CREATE TABLE `api_keys` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED NOT NULL,
  `sucursal_id` bigint(20) UNSIGNED NOT NULL,
  `caja_id` bigint(20) UNSIGNED NOT NULL,
  `terminal_fiscal_id` bigint(20) UNSIGNED DEFAULT NULL,
  `key_hash` char(64) NOT NULL,
  `key_prefix` varchar(16) NOT NULL,
  `permisos_json` longtext DEFAULT NULL,
  `rate_limit_minuto` int(10) UNSIGNED NOT NULL DEFAULT 120,
  `ultimo_uso_at` datetime DEFAULT NULL,
  `estado` enum('activa','suspendida','revocada') NOT NULL DEFAULT 'activa',
  `creado_at` datetime NOT NULL DEFAULT current_timestamp(),
  `actualizado_at` datetime DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `areas_produccion`
--

CREATE TABLE `areas_produccion` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED NOT NULL,
  `sucursal_id` bigint(20) UNSIGNED DEFAULT NULL,
  `nombre` varchar(100) NOT NULL,
  `impresora_nombre` varchar(120) DEFAULT NULL,
  `estado` enum('activa','inactiva') NOT NULL DEFAULT 'activa'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `areas_restaurante`
--

CREATE TABLE `areas_restaurante` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED NOT NULL,
  `sucursal_id` bigint(20) UNSIGNED NOT NULL,
  `nombre` varchar(100) NOT NULL,
  `orden` smallint(5) UNSIGNED NOT NULL DEFAULT 1,
  `estado` enum('activa','inactiva') NOT NULL DEFAULT 'activa'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `auditoria`
--

CREATE TABLE `auditoria` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED DEFAULT NULL,
  `sucursal_id` bigint(20) UNSIGNED DEFAULT NULL,
  `usuario_id` bigint(20) UNSIGNED DEFAULT NULL,
  `accion` varchar(120) NOT NULL,
  `modulo` varchar(120) DEFAULT NULL,
  `referencia_tipo` varchar(80) DEFAULT NULL,
  `referencia_id` bigint(20) UNSIGNED DEFAULT NULL,
  `detalle` longtext DEFAULT NULL,
  `ip` varchar(45) DEFAULT NULL,
  `user_agent` varchar(255) DEFAULT NULL,
  `creado_at` datetime NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

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

CREATE TABLE `cajas` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED NOT NULL,
  `sucursal_id` bigint(20) UNSIGNED NOT NULL,
  `nombre` varchar(120) NOT NULL,
  `codigo_terminal` char(5) DEFAULT NULL,
  `licencia_codigo` varchar(80) DEFAULT NULL,
  `emite_factura` tinyint(1) NOT NULL DEFAULT 0,
  `estado` enum('activa','inactiva','bloqueada') NOT NULL DEFAULT 'activa',
  `creado_at` datetime NOT NULL DEFAULT current_timestamp(),
  `actualizado_at` datetime DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `caja_sesiones`
--

CREATE TABLE `caja_sesiones` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED NOT NULL,
  `sucursal_id` bigint(20) UNSIGNED NOT NULL,
  `caja_id` bigint(20) UNSIGNED NOT NULL,
  `usuario_id` bigint(20) UNSIGNED NOT NULL,
  `monto_inicial` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `monto_efectivo_sistema` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `monto_efectivo_contado` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `diferencia_cierre` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `total_ventas` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `estado` enum('abierta','cerrada','anulada') NOT NULL DEFAULT 'abierta',
  `abierta_at` datetime NOT NULL DEFAULT current_timestamp(),
  `cerrada_at` datetime DEFAULT NULL,
  `observacion` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `categorias_gastronomicas`
--

CREATE TABLE `categorias_gastronomicas` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `codigo` varchar(60) NOT NULL,
  `nombre` varchar(120) NOT NULL,
  `configuracion_json` longtext NOT NULL,
  `estado` enum('activo','inactivo') NOT NULL DEFAULT 'activo',
  `creado_at` datetime NOT NULL DEFAULT current_timestamp(),
  `actualizado_at` datetime DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

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

CREATE TABLE `clientes` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED NOT NULL,
  `sucursal_id` bigint(20) UNSIGNED DEFAULT NULL,
  `nombre` varchar(160) NOT NULL,
  `nombre_comercial` varchar(100) DEFAULT NULL,
  `tipo_identificacion` char(2) DEFAULT NULL,
  `identificacion` varchar(20) DEFAULT NULL,
  `codigo_actividad` varchar(6) DEFAULT NULL,
  `correo` varchar(160) DEFAULT NULL,
  `telefono_codigo_pais` varchar(3) NOT NULL DEFAULT '506',
  `telefono` varchar(20) DEFAULT NULL,
  `provincia` char(1) DEFAULT NULL,
  `canton` char(2) DEFAULT NULL,
  `distrito` char(2) DEFAULT NULL,
  `barrio` varchar(50) DEFAULT NULL,
  `otras_sennas` varchar(160) DEFAULT NULL,
  `estado` enum('activo','inactivo') NOT NULL DEFAULT 'activo',
  `creado_at` datetime NOT NULL DEFAULT current_timestamp(),
  `actualizado_at` datetime DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `comandas`
--

CREATE TABLE `comandas` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED NOT NULL,
  `sucursal_id` bigint(20) UNSIGNED NOT NULL,
  `cuenta_id` bigint(20) UNSIGNED DEFAULT NULL,
  `venta_id` bigint(20) UNSIGNED DEFAULT NULL,
  `area_produccion_id` bigint(20) UNSIGNED NOT NULL,
  `estado` enum('PENDIENTE','ENVIADA','PREPARANDO','LISTA','ENTREGADA','CANCELADA') NOT NULL DEFAULT 'PENDIENTE',
  `enviada_at` datetime DEFAULT NULL,
  `lista_at` datetime DEFAULT NULL,
  `entregada_at` datetime DEFAULT NULL,
  `creada_at` datetime NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `comanda_lineas`
--

CREATE TABLE `comanda_lineas` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `comanda_id` bigint(20) UNSIGNED NOT NULL,
  `producto_id` bigint(20) UNSIGNED NOT NULL,
  `cantidad` decimal(18,3) NOT NULL,
  `notas` varchar(255) DEFAULT NULL,
  `modificadores_json` longtext DEFAULT NULL,
  `estado` enum('PENDIENTE','PREPARANDO','LISTA','ENTREGADA','CANCELADA') NOT NULL DEFAULT 'PENDIENTE'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `consecutivos_fiscales`
--

CREATE TABLE `consecutivos_fiscales` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED NOT NULL,
  `sucursal_id` bigint(20) UNSIGNED NOT NULL,
  `terminal_fiscal_id` bigint(20) UNSIGNED NOT NULL,
  `cod_sucursal` char(3) NOT NULL,
  `cod_terminal` char(5) NOT NULL,
  `tipo_documento` char(2) NOT NULL,
  `ambiente` enum('sandbox','production') NOT NULL DEFAULT 'sandbox',
  `ultimo_numero` bigint(20) UNSIGNED NOT NULL DEFAULT 0,
  `actualizado_at` datetime DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `documentos_detalle`
--

CREATE TABLE `documentos_detalle` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `documento_id` bigint(20) UNSIGNED NOT NULL,
  `numero_linea` int(10) UNSIGNED NOT NULL,
  `producto_id` bigint(20) UNSIGNED DEFAULT NULL,
  `codigo_cabys` varchar(13) NOT NULL,
  `codigo_comercial_tipo` char(2) DEFAULT NULL,
  `codigo_comercial` varchar(20) DEFAULT NULL,
  `unidad_medida` varchar(15) NOT NULL,
  `unidad_medida_comercial` varchar(20) DEFAULT NULL,
  `partida_arancelaria` varchar(12) DEFAULT NULL,
  `tipo_transaccion` char(2) DEFAULT NULL,
  `detalle` varchar(200) NOT NULL,
  `registro_medicamento` varchar(100) DEFAULT NULL,
  `forma_farmaceutica` varchar(3) DEFAULT NULL,
  `numero_vin_serie` varchar(17) DEFAULT NULL,
  `cantidad` decimal(18,3) NOT NULL,
  `precio_unitario` decimal(18,5) NOT NULL,
  `monto_total` decimal(18,5) NOT NULL,
  `sub_total` decimal(18,5) NOT NULL,
  `base_imponible` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `monto_total_linea` decimal(18,5) NOT NULL,
  `creado_at` datetime NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `documentos_detalle_descuentos`
--

CREATE TABLE `documentos_detalle_descuentos` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `documento_detalle_id` bigint(20) UNSIGNED NOT NULL,
  `codigo_descuento` char(2) NOT NULL,
  `codigo_descuento_otros` varchar(100) DEFAULT NULL,
  `naturaleza_descuento` varchar(80) DEFAULT NULL,
  `monto_descuento` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `creado_at` datetime NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `documentos_detalle_impuestos`
--

CREATE TABLE `documentos_detalle_impuestos` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `documento_detalle_id` bigint(20) UNSIGNED NOT NULL,
  `codigo` char(2) NOT NULL,
  `codigo_otros` varchar(100) DEFAULT NULL,
  `codigo_tarifa_iva` char(2) DEFAULT NULL,
  `tarifa` decimal(5,2) DEFAULT NULL,
  `factor_calculo_iva` decimal(10,5) DEFAULT NULL,
  `monto` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `monto_exoneracion` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `impuesto_asumido_emisor_fabrica` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `impuesto_neto` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `exoneracion_tipo_documento_ex` varchar(4) DEFAULT NULL,
  `exoneracion_tipo_documento_ex_otros` varchar(100) DEFAULT NULL,
  `exoneracion_numero_documento` varchar(40) DEFAULT NULL,
  `exoneracion_articulo` varchar(6) DEFAULT NULL,
  `exoneracion_inciso` varchar(6) DEFAULT NULL,
  `exoneracion_nombre_institucion` varchar(4) DEFAULT NULL,
  `exoneracion_nombre_institucion_otros` varchar(160) DEFAULT NULL,
  `exoneracion_fecha_emision` varchar(35) DEFAULT NULL,
  `exoneracion_tarifa` decimal(8,5) NOT NULL DEFAULT 0.00000,
  `exoneracion_json` longtext DEFAULT NULL,
  `datos_especificos_json` longtext DEFAULT NULL,
  `creado_at` datetime NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `documentos_electronicos`
--

CREATE TABLE `documentos_electronicos` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED NOT NULL,
  `sucursal_id` bigint(20) UNSIGNED NOT NULL,
  `caja_id` bigint(20) UNSIGNED DEFAULT NULL,
  `terminal_fiscal_id` bigint(20) UNSIGNED DEFAULT NULL,
  `venta_id` bigint(20) UNSIGNED DEFAULT NULL,
  `usuario_id` bigint(20) UNSIGNED DEFAULT NULL,
  `tipo_documento` char(2) NOT NULL,
  `xml_schema_version` varchar(10) NOT NULL DEFAULT '4.4',
  `ambiente` enum('sandbox','production') NOT NULL DEFAULT 'sandbox',
  `clave` char(50) DEFAULT NULL,
  `consecutivo` char(20) DEFAULT NULL,
  `proveedor_sistemas` varchar(20) DEFAULT NULL,
  `situacion` char(2) NOT NULL DEFAULT '1',
  `fecha_emision` varchar(35) DEFAULT NULL,
  `condicion_venta` char(2) NOT NULL DEFAULT '01',
  `condicion_venta_otros` varchar(100) DEFAULT NULL,
  `plazo_credito` int(10) UNSIGNED DEFAULT NULL,
  `moneda` char(3) NOT NULL DEFAULT 'CRC',
  `tipo_cambio` decimal(18,5) NOT NULL DEFAULT 1.00000,
  `receptor_nombre` varchar(100) DEFAULT NULL,
  `receptor_nombre_comercial` varchar(80) DEFAULT NULL,
  `receptor_tipo_identificacion` char(2) DEFAULT NULL,
  `receptor_identificacion` varchar(20) DEFAULT NULL,
  `receptor_codigo_actividad` varchar(6) DEFAULT NULL,
  `receptor_correo` varchar(160) DEFAULT NULL,
  `receptor_provincia` char(1) DEFAULT NULL,
  `receptor_canton` char(2) DEFAULT NULL,
  `receptor_distrito` char(2) DEFAULT NULL,
  `receptor_barrio` varchar(50) DEFAULT NULL,
  `receptor_otras_sennas` varchar(160) DEFAULT NULL,
  `total_serv_gravados` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `total_serv_exentos` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `total_serv_exonerados` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `total_serv_no_sujetos` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `total_merc_gravadas` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `total_merc_exentas` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `total_merc_exoneradas` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `total_merc_no_sujetas` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `total_gravado` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `total_exento` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `total_exonerado` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `total_no_sujeto` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `total_venta` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `total_descuentos` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `total_venta_neta` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `total_impuesto` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `total_imp_asum_emi` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `total_iva_devuelto` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `servicio_10` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `total_comprobante` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `total_desglose_impuestos_json` longtext DEFAULT NULL,
  `idempotency_key` varchar(120) DEFAULT NULL,
  `estado` enum('BORRADOR','GENERADO','FIRMADO','ENVIADO','ACEPTADO','RECHAZADO','PENDIENTE','ERROR','ANULADO_POR_NC') NOT NULL DEFAULT 'BORRADOR',
  `respuesta_hacienda` varchar(30) DEFAULT NULL,
  `respuesta_error_hacienda` text DEFAULT NULL,
  `xml_firmado_path` varchar(255) DEFAULT NULL,
  `xml_respuesta_path` varchar(255) DEFAULT NULL,
  `pdf_path` varchar(255) DEFAULT NULL,
  `xml_firmado` longtext DEFAULT NULL,
  `xml_respuesta` longtext DEFAULT NULL,
  `webhook_url` varchar(500) DEFAULT NULL,
  `webhook_token` varchar(180) DEFAULT NULL,
  `correo_enviado_at` datetime DEFAULT NULL,
  `correo_error` varchar(255) DEFAULT NULL,
  `creado_at` datetime NOT NULL DEFAULT current_timestamp(),
  `actualizado_at` datetime DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `documentos_medios_pago`
--

CREATE TABLE `documentos_medios_pago` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `documento_id` bigint(20) UNSIGNED NOT NULL,
  `tipo_medio_pago` char(2) NOT NULL,
  `medio_pago_otro` varchar(100) DEFAULT NULL,
  `total_medio_pago` decimal(18,5) DEFAULT NULL,
  `orden` smallint(5) UNSIGNED NOT NULL DEFAULT 1,
  `creado_at` datetime NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `documentos_referencias`
--

CREATE TABLE `documentos_referencias` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `documento_id` bigint(20) UNSIGNED NOT NULL,
  `tipo_doc_ir` char(2) NOT NULL,
  `tipo_doc_ref_otro` varchar(100) DEFAULT NULL,
  `numero` varchar(50) NOT NULL,
  `fecha_emision_ir` varchar(35) NOT NULL,
  `codigo` char(2) NOT NULL,
  `codigo_referencia_otro` varchar(100) DEFAULT NULL,
  `razon` varchar(180) NOT NULL,
  `orden` smallint(5) UNSIGNED NOT NULL DEFAULT 1,
  `creado_at` datetime NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `documentos_xml`
--

CREATE TABLE `documentos_xml` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `documento_id` bigint(20) UNSIGNED NOT NULL,
  `tipo` enum('generado','firmado','respuesta','mensaje_receptor') NOT NULL,
  `path` varchar(255) DEFAULT NULL,
  `contenido` longtext DEFAULT NULL,
  `hash_sha256` char(64) DEFAULT NULL,
  `creado_at` datetime NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `inventario`
--

CREATE TABLE `inventario` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED NOT NULL,
  `sucursal_id` bigint(20) UNSIGNED NOT NULL,
  `materia_prima_id` bigint(20) UNSIGNED NOT NULL,
  `stock_actual` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `stock_minimo` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `costo_promedio` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `actualizado_at` datetime DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `kardex`
--

CREATE TABLE `kardex` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED NOT NULL,
  `sucursal_id` bigint(20) UNSIGNED NOT NULL,
  `materia_prima_id` bigint(20) UNSIGNED NOT NULL,
  `tipo_movimiento` enum('COMPRA','VENTA','COMANDA_CONSUMO_PENDIENTE','VENTA_CONFIRMADA','AJUSTE_POSITIVO','AJUSTE_NEGATIVO','MERMA','TRASLADO_SALIDA','TRASLADO_ENTRADA','PRODUCCION','REVERSA') NOT NULL,
  `cantidad` decimal(18,5) NOT NULL,
  `costo` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `referencia_tipo` varchar(60) DEFAULT NULL,
  `referencia_id` bigint(20) UNSIGNED DEFAULT NULL,
  `usuario_id` bigint(20) UNSIGNED DEFAULT NULL,
  `motivo` varchar(255) DEFAULT NULL,
  `creado_at` datetime NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `materias_primas`
--

CREATE TABLE `materias_primas` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED NOT NULL,
  `nombre` varchar(180) NOT NULL,
  `unidad_base` varchar(15) NOT NULL,
  `costo_promedio` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `estado` enum('activo','inactivo') NOT NULL DEFAULT 'activo',
  `creado_at` datetime NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `mensajes_receptor`
--

CREATE TABLE `mensajes_receptor` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED NOT NULL,
  `sucursal_id` bigint(20) UNSIGNED NOT NULL,
  `terminal_fiscal_id` bigint(20) UNSIGNED DEFAULT NULL,
  `tipo_documento` char(2) NOT NULL DEFAULT '05',
  `clave` char(50) NOT NULL,
  `numero_consecutivo_receptor` char(20) NOT NULL,
  `fecha_emision_doc` varchar(35) NOT NULL,
  `mensaje` char(1) NOT NULL,
  `detalle_mensaje` varchar(160) DEFAULT NULL,
  `numero_cedula_emisor` varchar(20) NOT NULL,
  `tipo_identificacion_emisor` char(2) NOT NULL,
  `numero_cedula_receptor` varchar(20) NOT NULL,
  `tipo_identificacion_receptor` char(2) NOT NULL,
  `monto_total_impuesto` decimal(18,5) DEFAULT NULL,
  `total_factura` decimal(18,5) NOT NULL,
  `codigo_actividad` varchar(6) DEFAULT NULL,
  `condicion_impuesto` char(2) DEFAULT NULL,
  `monto_total_impuesto_acreditar` decimal(18,5) DEFAULT NULL,
  `monto_total_de_gasto_aplicable` decimal(18,5) DEFAULT NULL,
  `estado` enum('BORRADOR','FIRMADO','ENVIADO','ACEPTADO','RECHAZADO','ERROR') NOT NULL DEFAULT 'BORRADOR',
  `xml_firmado` longtext DEFAULT NULL,
  `xml_respuesta` longtext DEFAULT NULL,
  `respuesta_hacienda` varchar(30) DEFAULT NULL,
  `respuesta_error_hacienda` text DEFAULT NULL,
  `creado_at` datetime NOT NULL DEFAULT current_timestamp(),
  `actualizado_at` datetime DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `mesas`
--

CREATE TABLE `mesas` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED NOT NULL,
  `sucursal_id` bigint(20) UNSIGNED NOT NULL,
  `area_id` bigint(20) UNSIGNED NOT NULL,
  `nombre` varchar(40) NOT NULL,
  `capacidad` smallint(5) UNSIGNED NOT NULL DEFAULT 4,
  `estado` enum('LIBRE','OCUPADA','EN_COCINA','LISTA','EN_COBRO','RESERVADA','CERRADA','BLOQUEADA') NOT NULL DEFAULT 'LIBRE',
  `orden` smallint(5) UNSIGNED NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `mesa_cuentas`
--

CREATE TABLE `mesa_cuentas` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED NOT NULL,
  `sucursal_id` bigint(20) UNSIGNED NOT NULL,
  `mesa_id` bigint(20) UNSIGNED NOT NULL,
  `mesero_id` bigint(20) UNSIGNED DEFAULT NULL,
  `venta_id` bigint(20) UNSIGNED DEFAULT NULL,
  `estado` enum('abierta','en_cocina','lista','en_cobro','cerrada','anulada') NOT NULL DEFAULT 'abierta',
  `comensales` smallint(5) UNSIGNED NOT NULL DEFAULT 1,
  `total_actual` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `abierta_at` datetime NOT NULL DEFAULT current_timestamp(),
  `cerrada_at` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `mesa_cuenta_lineas`
--

CREATE TABLE `mesa_cuenta_lineas` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `cuenta_id` bigint(20) UNSIGNED NOT NULL,
  `producto_id` bigint(20) UNSIGNED NOT NULL,
  `cantidad` decimal(18,3) NOT NULL,
  `precio_unitario` decimal(18,5) NOT NULL,
  `impuesto` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `total` decimal(18,5) NOT NULL,
  `comensal_numero` smallint(5) UNSIGNED DEFAULT NULL,
  `estado_comanda` enum('pendiente','enviada','preparando','lista','entregada','cancelada') NOT NULL DEFAULT 'pendiente',
  `notas` varchar(255) DEFAULT NULL,
  `modificadores_json` longtext DEFAULT NULL,
  `creado_at` datetime NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `mh_credenciales`
--

CREATE TABLE `mh_credenciales` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED NOT NULL,
  `ambiente` enum('sandbox','production') NOT NULL DEFAULT 'sandbox',
  `mh_username` varchar(120) NOT NULL,
  `mh_password_cipher` text NOT NULL,
  `cert_path` varchar(255) NOT NULL,
  `cert_pin_cipher` text NOT NULL,
  `cert_vigente_hasta` datetime DEFAULT NULL,
  `estado` enum('activa','inactiva','vencida') NOT NULL DEFAULT 'activa',
  `actualizado_at` datetime DEFAULT NULL ON UPDATE current_timestamp(),
  `creado_at` datetime NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `negocios`
--

CREATE TABLE `negocios` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `plan_id` bigint(20) UNSIGNED DEFAULT NULL,
  `categoria_gastronomica_id` bigint(20) UNSIGNED NOT NULL,
  `nombre` varchar(180) NOT NULL,
  `nombre_comercial` varchar(120) DEFAULT NULL,
  `tipo_identificacion` char(2) DEFAULT NULL,
  `identificacion` varchar(20) DEFAULT NULL,
  `codigo_actividad` varchar(6) DEFAULT NULL,
  `correo` varchar(160) DEFAULT NULL,
  `telefono_codigo_pais` varchar(3) NOT NULL DEFAULT '506',
  `telefono` varchar(20) DEFAULT NULL,
  `moneda_base` char(3) NOT NULL DEFAULT 'CRC',
  `usa_facturacion` tinyint(1) NOT NULL DEFAULT 0,
  `estado` enum('activo','suspendido','inactivo') NOT NULL DEFAULT 'activo',
  `creado_at` datetime NOT NULL DEFAULT current_timestamp(),
  `actualizado_at` datetime DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

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

CREATE TABLE `permisos` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `codigo` varchar(100) NOT NULL,
  `nombre` varchar(140) NOT NULL,
  `modulo` varchar(80) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `planes`
--

CREATE TABLE `planes` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `codigo` varchar(60) NOT NULL,
  `nombre` varchar(120) NOT NULL,
  `max_sucursales` int(10) UNSIGNED NOT NULL DEFAULT 1,
  `max_cajas` int(10) UNSIGNED NOT NULL DEFAULT 1,
  `configuracion_json` longtext DEFAULT NULL,
  `estado` enum('activo','inactivo') NOT NULL DEFAULT 'activo',
  `creado_at` datetime NOT NULL DEFAULT current_timestamp(),
  `actualizado_at` datetime DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

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

CREATE TABLE `productos` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED NOT NULL,
  `sucursal_id` bigint(20) UNSIGNED DEFAULT NULL,
  `categoria_id` bigint(20) UNSIGNED DEFAULT NULL,
  `area_produccion_id` bigint(20) UNSIGNED DEFAULT NULL,
  `tipo` enum('producto_final','materia_prima','insumo_consumo','combo','servicio','reventa','preparado') NOT NULL DEFAULT 'producto_final',
  `nombre` varchar(180) NOT NULL,
  `codigo_interno` varchar(60) DEFAULT NULL,
  `codigo_barras` varchar(80) DEFAULT NULL,
  `codigo_cabys` varchar(13) DEFAULT NULL,
  `unidad_medida` varchar(15) NOT NULL DEFAULT 'Unid',
  `precio` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `costo_promedio` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `codigo_impuesto` char(2) NOT NULL DEFAULT '01',
  `codigo_tarifa_iva` char(2) DEFAULT '08',
  `tarifa_iva` decimal(5,2) NOT NULL DEFAULT 13.00,
  `permite_modificadores` tinyint(1) NOT NULL DEFAULT 0,
  `permite_notas` tinyint(1) NOT NULL DEFAULT 1,
  `afecta_inventario` tinyint(1) NOT NULL DEFAULT 1,
  `imagen_path` varchar(255) DEFAULT NULL,
  `estado` enum('activo','inactivo') NOT NULL DEFAULT 'activo',
  `creado_at` datetime NOT NULL DEFAULT current_timestamp(),
  `actualizado_at` datetime DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `productos_categorias`
--

CREATE TABLE `productos_categorias` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED NOT NULL,
  `sucursal_id` bigint(20) UNSIGNED DEFAULT NULL,
  `nombre` varchar(120) NOT NULL,
  `orden` smallint(5) UNSIGNED NOT NULL DEFAULT 1,
  `estado` enum('activa','inactiva') NOT NULL DEFAULT 'activa'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `rate_limits`
--

CREATE TABLE `rate_limits` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `ip_hash` char(64) NOT NULL,
  `accion` varchar(80) NOT NULL,
  `window_start` datetime NOT NULL,
  `attempts` int(10) UNSIGNED NOT NULL DEFAULT 1,
  `blocked_until` datetime DEFAULT NULL,
  `creado_at` datetime NOT NULL DEFAULT current_timestamp(),
  `actualizado_at` datetime DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `recetas`
--

CREATE TABLE `recetas` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED NOT NULL,
  `producto_id` bigint(20) UNSIGNED NOT NULL,
  `nombre` varchar(180) NOT NULL,
  `rendimiento` decimal(18,5) NOT NULL DEFAULT 1.00000,
  `estado` enum('activa','inactiva') NOT NULL DEFAULT 'activa',
  `creado_at` datetime NOT NULL DEFAULT current_timestamp(),
  `actualizado_at` datetime DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `receta_detalles`
--

CREATE TABLE `receta_detalles` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `receta_id` bigint(20) UNSIGNED NOT NULL,
  `materia_prima_id` bigint(20) UNSIGNED NOT NULL,
  `cantidad` decimal(18,5) NOT NULL,
  `unidad_base` varchar(15) NOT NULL,
  `merma_porcentaje` decimal(8,5) NOT NULL DEFAULT 0.00000,
  `afecta_inventario` tinyint(1) NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

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

CREATE TABLE `roles` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `codigo` varchar(60) NOT NULL,
  `nombre` varchar(120) NOT NULL,
  `alcance` enum('plataforma','negocio','sucursal') NOT NULL DEFAULT 'negocio',
  `estado` enum('activo','inactivo') NOT NULL DEFAULT 'activo'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

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

CREATE TABLE `rol_permisos` (
  `rol_id` bigint(20) UNSIGNED NOT NULL,
  `permiso_id` bigint(20) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `seguridad_eventos`
--

CREATE TABLE `seguridad_eventos` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED DEFAULT NULL,
  `usuario_id` bigint(20) UNSIGNED DEFAULT NULL,
  `tipo` varchar(80) NOT NULL,
  `severidad` enum('baja','media','alta','critica') NOT NULL DEFAULT 'media',
  `ip_hash` char(64) DEFAULT NULL,
  `detalle` longtext DEFAULT NULL,
  `creado_at` datetime NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `sucursales`
--

CREATE TABLE `sucursales` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED NOT NULL,
  `nombre` varchar(120) NOT NULL,
  `codigo_interno` varchar(20) NOT NULL DEFAULT 'principal',
  `codigo_fiscal` char(3) NOT NULL DEFAULT '001',
  `provincia` char(1) DEFAULT NULL,
  `canton` char(2) DEFAULT NULL,
  `distrito` char(2) DEFAULT NULL,
  `barrio` varchar(50) DEFAULT NULL,
  `otras_sennas` varchar(250) DEFAULT NULL,
  `correo` varchar(160) DEFAULT NULL,
  `telefono_codigo_pais` varchar(3) NOT NULL DEFAULT '506',
  `telefono` varchar(20) DEFAULT NULL,
  `es_principal` tinyint(1) NOT NULL DEFAULT 0,
  `estado` enum('activa','inactiva','suspendida') NOT NULL DEFAULT 'activa',
  `creado_at` datetime NOT NULL DEFAULT current_timestamp(),
  `actualizado_at` datetime DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `terminales_fiscales`
--

CREATE TABLE `terminales_fiscales` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED NOT NULL,
  `sucursal_id` bigint(20) UNSIGNED NOT NULL,
  `caja_id` bigint(20) UNSIGNED NOT NULL,
  `cod_sucursal` char(3) NOT NULL,
  `cod_terminal` char(5) NOT NULL,
  `ambiente` enum('sandbox','production') NOT NULL DEFAULT 'sandbox',
  `estado` enum('activa','inactiva','suspendida') NOT NULL DEFAULT 'activa',
  `creado_at` datetime NOT NULL DEFAULT current_timestamp(),
  `actualizado_at` datetime DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `tipo_cambio_cache`
--

CREATE TABLE `tipo_cambio_cache` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `moneda` char(3) NOT NULL DEFAULT 'USD',
  `fecha` date NOT NULL,
  `compra` decimal(18,5) DEFAULT NULL,
  `venta` decimal(18,5) DEFAULT NULL,
  `fuente` varchar(60) NOT NULL DEFAULT 'hacienda',
  `raw_response` longtext DEFAULT NULL,
  `actualizado_at` datetime DEFAULT NULL ON UPDATE current_timestamp(),
  `creado_at` datetime NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

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

CREATE TABLE `usuarios` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED DEFAULT NULL,
  `sucursal_id` bigint(20) UNSIGNED DEFAULT NULL,
  `rol_id` bigint(20) UNSIGNED NOT NULL,
  `nombre` varchar(160) NOT NULL,
  `correo` varchar(180) NOT NULL,
  `password_hash` varchar(255) NOT NULL,
  `estado` enum('activo','suspendido','inactivo') NOT NULL DEFAULT 'activo',
  `ultimo_acceso_at` datetime DEFAULT NULL,
  `creado_at` datetime NOT NULL DEFAULT current_timestamp(),
  `actualizado_at` datetime DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

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

CREATE TABLE `ventas` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED NOT NULL,
  `sucursal_id` bigint(20) UNSIGNED NOT NULL,
  `caja_id` bigint(20) UNSIGNED DEFAULT NULL,
  `caja_sesion_id` bigint(20) UNSIGNED DEFAULT NULL,
  `usuario_id` bigint(20) UNSIGNED NOT NULL,
  `cliente_id` bigint(20) UNSIGNED DEFAULT NULL,
  `origen` enum('pos','mesa','barra','delivery','para_llevar','catalogo') NOT NULL DEFAULT 'pos',
  `numero` varchar(40) NOT NULL,
  `moneda` char(3) NOT NULL DEFAULT 'CRC',
  `tipo_cambio` decimal(18,5) NOT NULL DEFAULT 1.00000,
  `subtotal` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `descuento_total` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `servicio_10` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `impuesto_total` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `total` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `estado` enum('borrador','abierta','cobrada','facturada','anulada') NOT NULL DEFAULT 'borrador',
  `idempotency_key` varchar(120) DEFAULT NULL,
  `creada_at` datetime NOT NULL DEFAULT current_timestamp(),
  `cobrada_at` datetime DEFAULT NULL,
  `facturada_at` datetime DEFAULT NULL,
  `actualizada_at` datetime DEFAULT NULL ON UPDATE current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `venta_lineas`
--

CREATE TABLE `venta_lineas` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `venta_id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED NOT NULL,
  `producto_id` bigint(20) UNSIGNED NOT NULL,
  `numero_linea` int(10) UNSIGNED NOT NULL,
  `cantidad` decimal(18,3) NOT NULL,
  `detalle` varchar(200) NOT NULL,
  `precio_unitario` decimal(18,5) NOT NULL,
  `descuento` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `sub_total` decimal(18,5) NOT NULL,
  `impuesto` decimal(18,5) NOT NULL DEFAULT 0.00000,
  `total_linea` decimal(18,5) NOT NULL,
  `notas` varchar(255) DEFAULT NULL,
  `modificadores_json` longtext DEFAULT NULL,
  `creado_at` datetime NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

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

CREATE TABLE `venta_pagos` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `venta_id` bigint(20) UNSIGNED NOT NULL,
  `negocio_id` bigint(20) UNSIGNED NOT NULL,
  `medio_pago` char(2) NOT NULL,
  `medio_pago_otro` varchar(100) DEFAULT NULL,
  `moneda` char(3) NOT NULL DEFAULT 'CRC',
  `monto` decimal(18,5) NOT NULL,
  `referencia` varchar(120) DEFAULT NULL,
  `creado_at` datetime NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Índices para tablas volcadas
--

--
-- Indices de la tabla `api_keys`
--
ALTER TABLE `api_keys`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uq_api_key_hash` (`key_hash`),
  ADD KEY `idx_api_keys_terminal` (`terminal_fiscal_id`,`estado`),
  ADD KEY `idx_api_keys_contexto` (`negocio_id`,`sucursal_id`,`caja_id`,`estado`),
  ADD KEY `fk_ak_sucursal` (`sucursal_id`),
  ADD KEY `fk_ak_caja` (`caja_id`);

--
-- Indices de la tabla `areas_produccion`
--
ALTER TABLE `areas_produccion`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_area_prod_negocio` (`negocio_id`,`sucursal_id`,`estado`),
  ADD KEY `fk_area_prod_sucursal` (`sucursal_id`);

--
-- Indices de la tabla `areas_restaurante`
--
ALTER TABLE `areas_restaurante`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_areas_sucursal` (`negocio_id`,`sucursal_id`,`estado`,`orden`),
  ADD KEY `fk_areas_sucursal` (`sucursal_id`);

--
-- Indices de la tabla `auditoria`
--
ALTER TABLE `auditoria`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_auditoria_negocio_fecha` (`negocio_id`,`creado_at`),
  ADD KEY `idx_auditoria_referencia` (`referencia_tipo`,`referencia_id`),
  ADD KEY `idx_auditoria_usuario` (`usuario_id`,`creado_at`);

--
-- Indices de la tabla `cajas`
--
ALTER TABLE `cajas`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_cajas_sucursal_estado` (`negocio_id`,`sucursal_id`,`estado`),
  ADD KEY `idx_cajas_terminal` (`negocio_id`,`sucursal_id`,`codigo_terminal`),
  ADD KEY `fk_cajas_sucursal` (`sucursal_id`);

--
-- Indices de la tabla `caja_sesiones`
--
ALTER TABLE `caja_sesiones`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_caja_sesiones_abierta` (`negocio_id`,`sucursal_id`,`caja_id`,`estado`),
  ADD KEY `idx_caja_sesiones_usuario` (`usuario_id`,`estado`),
  ADD KEY `fk_cs_sucursal` (`sucursal_id`),
  ADD KEY `fk_cs_caja` (`caja_id`);

--
-- Indices de la tabla `categorias_gastronomicas`
--
ALTER TABLE `categorias_gastronomicas`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uq_categoria_codigo` (`codigo`),
  ADD KEY `idx_categoria_estado` (`estado`);

--
-- Indices de la tabla `clientes`
--
ALTER TABLE `clientes`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_clientes_negocio_nombre` (`negocio_id`,`nombre`),
  ADD KEY `idx_clientes_identificacion` (`negocio_id`,`tipo_identificacion`,`identificacion`),
  ADD KEY `idx_clientes_correo` (`negocio_id`,`correo`),
  ADD KEY `fk_clientes_sucursal` (`sucursal_id`);

--
-- Indices de la tabla `comandas`
--
ALTER TABLE `comandas`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_comandas_estado` (`negocio_id`,`sucursal_id`,`estado`,`creada_at`),
  ADD KEY `idx_comandas_area` (`negocio_id`,`sucursal_id`,`area_produccion_id`,`estado`),
  ADD KEY `fk_comandas_sucursal` (`sucursal_id`),
  ADD KEY `fk_comandas_cuenta` (`cuenta_id`),
  ADD KEY `fk_comandas_venta` (`venta_id`),
  ADD KEY `fk_comandas_area` (`area_produccion_id`);

--
-- Indices de la tabla `comanda_lineas`
--
ALTER TABLE `comanda_lineas`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_cl_comanda` (`comanda_id`),
  ADD KEY `idx_cl_producto` (`producto_id`);

--
-- Indices de la tabla `consecutivos_fiscales`
--
ALTER TABLE `consecutivos_fiscales`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uq_consecutivo_fiscal` (`negocio_id`,`cod_sucursal`,`cod_terminal`,`tipo_documento`,`ambiente`),
  ADD KEY `idx_consecutivo_terminal` (`terminal_fiscal_id`,`tipo_documento`),
  ADD KEY `fk_cf_sucursal` (`sucursal_id`);

--
-- Indices de la tabla `documentos_detalle`
--
ALTER TABLE `documentos_detalle`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_doc_detalle_documento` (`documento_id`),
  ADD KEY `idx_doc_detalle_cabys` (`codigo_cabys`),
  ADD KEY `fk_dd_producto` (`producto_id`);

--
-- Indices de la tabla `documentos_detalle_descuentos`
--
ALTER TABLE `documentos_detalle_descuentos`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_doc_desc_detalle` (`documento_detalle_id`);

--
-- Indices de la tabla `documentos_detalle_impuestos`
--
ALTER TABLE `documentos_detalle_impuestos`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_doc_imp_detalle` (`documento_detalle_id`),
  ADD KEY `idx_doc_imp_codigo` (`codigo`,`codigo_tarifa_iva`);

--
-- Indices de la tabla `documentos_electronicos`
--
ALTER TABLE `documentos_electronicos`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uq_documento_clave` (`clave`),
  ADD UNIQUE KEY `uq_documento_consecutivo` (`negocio_id`,`sucursal_id`,`caja_id`,`tipo_documento`,`consecutivo`),
  ADD UNIQUE KEY `uq_documento_idempotency` (`negocio_id`,`idempotency_key`),
  ADD KEY `idx_documentos_estado` (`negocio_id`,`estado`,`creado_at`),
  ADD KEY `idx_documentos_venta` (`venta_id`),
  ADD KEY `idx_documentos_fecha` (`negocio_id`,`sucursal_id`,`creado_at`),
  ADD KEY `idx_documentos_receptor` (`negocio_id`,`receptor_identificacion`),
  ADD KEY `fk_de_sucursal` (`sucursal_id`),
  ADD KEY `fk_de_caja` (`caja_id`),
  ADD KEY `fk_de_tf` (`terminal_fiscal_id`),
  ADD KEY `fk_de_usuario` (`usuario_id`);

--
-- Indices de la tabla `documentos_medios_pago`
--
ALTER TABLE `documentos_medios_pago`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_dmp_documento` (`documento_id`),
  ADD KEY `idx_dmp_tipo` (`tipo_medio_pago`);

--
-- Indices de la tabla `documentos_referencias`
--
ALTER TABLE `documentos_referencias`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_doc_ref_documento` (`documento_id`),
  ADD KEY `idx_doc_ref_numero` (`numero`);

--
-- Indices de la tabla `documentos_xml`
--
ALTER TABLE `documentos_xml`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_doc_xml_documento` (`documento_id`,`tipo`),
  ADD KEY `idx_doc_xml_hash` (`hash_sha256`);

--
-- Indices de la tabla `inventario`
--
ALTER TABLE `inventario`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uq_inventario_insumo_sucursal` (`negocio_id`,`sucursal_id`,`materia_prima_id`),
  ADD KEY `idx_inventario_stock` (`negocio_id`,`sucursal_id`,`stock_actual`),
  ADD KEY `fk_inv_sucursal` (`sucursal_id`),
  ADD KEY `fk_inv_materia` (`materia_prima_id`);

--
-- Indices de la tabla `kardex`
--
ALTER TABLE `kardex`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_kardex_item_fecha` (`negocio_id`,`sucursal_id`,`materia_prima_id`,`creado_at`),
  ADD KEY `idx_kardex_referencia` (`referencia_tipo`,`referencia_id`),
  ADD KEY `fk_kardex_sucursal` (`sucursal_id`),
  ADD KEY `fk_kardex_materia` (`materia_prima_id`),
  ADD KEY `fk_kardex_usuario` (`usuario_id`);

--
-- Indices de la tabla `materias_primas`
--
ALTER TABLE `materias_primas`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_materias_negocio` (`negocio_id`,`estado`,`nombre`);

--
-- Indices de la tabla `mensajes_receptor`
--
ALTER TABLE `mensajes_receptor`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uq_mr_clave_consecutivo` (`clave`,`numero_consecutivo_receptor`),
  ADD KEY `idx_mr_negocio_fecha` (`negocio_id`,`creado_at`),
  ADD KEY `idx_mr_estado` (`negocio_id`,`estado`,`creado_at`),
  ADD KEY `fk_mr_sucursal` (`sucursal_id`),
  ADD KEY `fk_mr_tf` (`terminal_fiscal_id`);

--
-- Indices de la tabla `mesas`
--
ALTER TABLE `mesas`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_mesas_mapa` (`negocio_id`,`sucursal_id`,`area_id`,`estado`,`orden`),
  ADD KEY `fk_mesas_sucursal` (`sucursal_id`),
  ADD KEY `fk_mesas_area` (`area_id`);

--
-- Indices de la tabla `mesa_cuentas`
--
ALTER TABLE `mesa_cuentas`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_mesa_cuentas_abiertas` (`negocio_id`,`sucursal_id`,`estado`,`mesa_id`),
  ADD KEY `idx_mesa_cuentas_mesero` (`negocio_id`,`sucursal_id`,`mesero_id`,`estado`),
  ADD KEY `fk_mc_sucursal` (`sucursal_id`),
  ADD KEY `fk_mc_mesa` (`mesa_id`),
  ADD KEY `fk_mc_mesero` (`mesero_id`),
  ADD KEY `fk_mc_venta` (`venta_id`);

--
-- Indices de la tabla `mesa_cuenta_lineas`
--
ALTER TABLE `mesa_cuenta_lineas`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_mcl_cuenta` (`cuenta_id`),
  ADD KEY `idx_mcl_producto` (`producto_id`),
  ADD KEY `idx_mcl_estado_comanda` (`estado_comanda`);

--
-- Indices de la tabla `mh_credenciales`
--
ALTER TABLE `mh_credenciales`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uq_mh_cred_negocio_ambiente` (`negocio_id`,`ambiente`);

--
-- Indices de la tabla `negocios`
--
ALTER TABLE `negocios`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_negocios_plan` (`plan_id`),
  ADD KEY `idx_negocios_categoria` (`categoria_gastronomica_id`),
  ADD KEY `idx_negocios_identificacion` (`tipo_identificacion`,`identificacion`),
  ADD KEY `idx_negocios_estado` (`estado`);

--
-- Indices de la tabla `permisos`
--
ALTER TABLE `permisos`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uq_permisos_codigo` (`codigo`),
  ADD KEY `idx_permisos_modulo` (`modulo`);

--
-- Indices de la tabla `planes`
--
ALTER TABLE `planes`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uq_planes_codigo` (`codigo`),
  ADD KEY `idx_planes_estado` (`estado`);

--
-- Indices de la tabla `productos`
--
ALTER TABLE `productos`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_productos_busqueda` (`negocio_id`,`sucursal_id`,`estado`,`nombre`),
  ADD KEY `idx_productos_categoria` (`negocio_id`,`categoria_id`,`estado`),
  ADD KEY `idx_productos_cabys` (`codigo_cabys`),
  ADD KEY `idx_productos_codigo_barras` (`negocio_id`,`codigo_barras`),
  ADD KEY `fk_productos_sucursal` (`sucursal_id`),
  ADD KEY `fk_productos_categoria` (`categoria_id`),
  ADD KEY `fk_productos_area_prod` (`area_produccion_id`);

--
-- Indices de la tabla `productos_categorias`
--
ALTER TABLE `productos_categorias`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_prod_cat_negocio` (`negocio_id`,`sucursal_id`,`estado`,`orden`),
  ADD KEY `fk_prod_cat_sucursal` (`sucursal_id`);

--
-- Indices de la tabla `rate_limits`
--
ALTER TABLE `rate_limits`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uq_rate_window` (`ip_hash`,`accion`,`window_start`),
  ADD KEY `idx_rate_blocked` (`blocked_until`);

--
-- Indices de la tabla `recetas`
--
ALTER TABLE `recetas`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uq_receta_producto` (`negocio_id`,`producto_id`),
  ADD KEY `fk_recetas_producto` (`producto_id`);

--
-- Indices de la tabla `receta_detalles`
--
ALTER TABLE `receta_detalles`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_rd_receta` (`receta_id`),
  ADD KEY `idx_rd_materia` (`materia_prima_id`);

--
-- Indices de la tabla `roles`
--
ALTER TABLE `roles`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uq_roles_codigo` (`codigo`);

--
-- Indices de la tabla `rol_permisos`
--
ALTER TABLE `rol_permisos`
  ADD PRIMARY KEY (`rol_id`,`permiso_id`),
  ADD KEY `fk_rp_permiso` (`permiso_id`);

--
-- Indices de la tabla `seguridad_eventos`
--
ALTER TABLE `seguridad_eventos`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_seguridad_tipo_fecha` (`tipo`,`creado_at`),
  ADD KEY `idx_seguridad_ip` (`ip_hash`,`creado_at`),
  ADD KEY `idx_seguridad_negocio` (`negocio_id`,`creado_at`);

--
-- Indices de la tabla `sucursales`
--
ALTER TABLE `sucursales`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uq_sucursal_codigo_fiscal` (`negocio_id`,`codigo_fiscal`),
  ADD KEY `idx_sucursales_negocio_estado` (`negocio_id`,`estado`),
  ADD KEY `idx_sucursales_ubicacion` (`provincia`,`canton`,`distrito`);

--
-- Indices de la tabla `terminales_fiscales`
--
ALTER TABLE `terminales_fiscales`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uq_terminal_fiscal` (`negocio_id`,`cod_sucursal`,`cod_terminal`,`ambiente`),
  ADD KEY `idx_tf_caja` (`negocio_id`,`sucursal_id`,`caja_id`,`estado`),
  ADD KEY `fk_tf_sucursal` (`sucursal_id`),
  ADD KEY `fk_tf_caja` (`caja_id`);

--
-- Indices de la tabla `tipo_cambio_cache`
--
ALTER TABLE `tipo_cambio_cache`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uq_tc_moneda_fecha` (`moneda`,`fecha`);

--
-- Indices de la tabla `usuarios`
--
ALTER TABLE `usuarios`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uq_usuarios_correo` (`correo`),
  ADD KEY `idx_usuarios_negocio_estado` (`negocio_id`,`estado`),
  ADD KEY `idx_usuarios_sucursal` (`negocio_id`,`sucursal_id`),
  ADD KEY `idx_usuarios_rol` (`rol_id`),
  ADD KEY `fk_usuarios_sucursal` (`sucursal_id`);

--
-- Indices de la tabla `ventas`
--
ALTER TABLE `ventas`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uq_ventas_numero` (`negocio_id`,`numero`),
  ADD UNIQUE KEY `uq_ventas_idempotency` (`negocio_id`,`idempotency_key`),
  ADD KEY `idx_ventas_negocio_fecha` (`negocio_id`,`creada_at`),
  ADD KEY `idx_ventas_sucursal_fecha` (`negocio_id`,`sucursal_id`,`creada_at`),
  ADD KEY `idx_ventas_estado` (`negocio_id`,`estado`,`creada_at`),
  ADD KEY `idx_ventas_caja` (`negocio_id`,`sucursal_id`,`caja_id`,`creada_at`),
  ADD KEY `fk_ventas_sucursal` (`sucursal_id`),
  ADD KEY `fk_ventas_caja` (`caja_id`),
  ADD KEY `fk_ventas_sesion` (`caja_sesion_id`),
  ADD KEY `fk_ventas_usuario` (`usuario_id`),
  ADD KEY `fk_ventas_cliente` (`cliente_id`);

--
-- Indices de la tabla `venta_lineas`
--
ALTER TABLE `venta_lineas`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_venta_lineas_venta` (`venta_id`),
  ADD KEY `idx_venta_lineas_producto` (`negocio_id`,`producto_id`,`creado_at`),
  ADD KEY `fk_vl_producto` (`producto_id`);

--
-- 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_medio` (`negocio_id`,`medio_pago`,`creado_at`);

--
-- AUTO_INCREMENT de las tablas volcadas
--

--
-- AUTO_INCREMENT de la tabla `api_keys`
--
ALTER TABLE `api_keys`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `areas_produccion`
--
ALTER TABLE `areas_produccion`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `areas_restaurante`
--
ALTER TABLE `areas_restaurante`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `auditoria`
--
ALTER TABLE `auditoria`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `cajas`
--
ALTER TABLE `cajas`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `caja_sesiones`
--
ALTER TABLE `caja_sesiones`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `categorias_gastronomicas`
--
ALTER TABLE `categorias_gastronomicas`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `clientes`
--
ALTER TABLE `clientes`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `comandas`
--
ALTER TABLE `comandas`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `comanda_lineas`
--
ALTER TABLE `comanda_lineas`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `consecutivos_fiscales`
--
ALTER TABLE `consecutivos_fiscales`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `documentos_detalle`
--
ALTER TABLE `documentos_detalle`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `documentos_detalle_descuentos`
--
ALTER TABLE `documentos_detalle_descuentos`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `documentos_detalle_impuestos`
--
ALTER TABLE `documentos_detalle_impuestos`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `documentos_electronicos`
--
ALTER TABLE `documentos_electronicos`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `documentos_medios_pago`
--
ALTER TABLE `documentos_medios_pago`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `documentos_referencias`
--
ALTER TABLE `documentos_referencias`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `documentos_xml`
--
ALTER TABLE `documentos_xml`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `inventario`
--
ALTER TABLE `inventario`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `kardex`
--
ALTER TABLE `kardex`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `materias_primas`
--
ALTER TABLE `materias_primas`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `mensajes_receptor`
--
ALTER TABLE `mensajes_receptor`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `mesas`
--
ALTER TABLE `mesas`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `mesa_cuentas`
--
ALTER TABLE `mesa_cuentas`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `mesa_cuenta_lineas`
--
ALTER TABLE `mesa_cuenta_lineas`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `mh_credenciales`
--
ALTER TABLE `mh_credenciales`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `negocios`
--
ALTER TABLE `negocios`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `permisos`
--
ALTER TABLE `permisos`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `planes`
--
ALTER TABLE `planes`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `productos`
--
ALTER TABLE `productos`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `productos_categorias`
--
ALTER TABLE `productos_categorias`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `rate_limits`
--
ALTER TABLE `rate_limits`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `recetas`
--
ALTER TABLE `recetas`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `receta_detalles`
--
ALTER TABLE `receta_detalles`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `roles`
--
ALTER TABLE `roles`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `seguridad_eventos`
--
ALTER TABLE `seguridad_eventos`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `sucursales`
--
ALTER TABLE `sucursales`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `terminales_fiscales`
--
ALTER TABLE `terminales_fiscales`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `tipo_cambio_cache`
--
ALTER TABLE `tipo_cambio_cache`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `usuarios`
--
ALTER TABLE `usuarios`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `ventas`
--
ALTER TABLE `ventas`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `venta_lineas`
--
ALTER TABLE `venta_lineas`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- AUTO_INCREMENT de la tabla `venta_pagos`
--
ALTER TABLE `venta_pagos`
  MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT;

--
-- Restricciones para tablas volcadas
--

--
-- Filtros para la tabla `api_keys`
--
ALTER TABLE `api_keys`
  ADD CONSTRAINT `fk_ak_caja` FOREIGN KEY (`caja_id`) REFERENCES `cajas` (`id`),
  ADD CONSTRAINT `fk_ak_negocio` FOREIGN KEY (`negocio_id`) REFERENCES `negocios` (`id`),
  ADD CONSTRAINT `fk_ak_sucursal` FOREIGN KEY (`sucursal_id`) REFERENCES `sucursales` (`id`),
  ADD CONSTRAINT `fk_ak_tf` FOREIGN KEY (`terminal_fiscal_id`) REFERENCES `terminales_fiscales` (`id`);

--
-- Filtros para la tabla `areas_produccion`
--
ALTER TABLE `areas_produccion`
  ADD CONSTRAINT `fk_area_prod_negocio` FOREIGN KEY (`negocio_id`) REFERENCES `negocios` (`id`),
  ADD CONSTRAINT `fk_area_prod_sucursal` FOREIGN KEY (`sucursal_id`) REFERENCES `sucursales` (`id`);

--
-- Filtros para la tabla `areas_restaurante`
--
ALTER TABLE `areas_restaurante`
  ADD CONSTRAINT `fk_areas_negocio` FOREIGN KEY (`negocio_id`) REFERENCES `negocios` (`id`),
  ADD CONSTRAINT `fk_areas_sucursal` FOREIGN KEY (`sucursal_id`) REFERENCES `sucursales` (`id`);

--
-- Filtros para la tabla `cajas`
--
ALTER TABLE `cajas`
  ADD CONSTRAINT `fk_cajas_negocio` FOREIGN KEY (`negocio_id`) REFERENCES `negocios` (`id`),
  ADD CONSTRAINT `fk_cajas_sucursal` FOREIGN KEY (`sucursal_id`) REFERENCES `sucursales` (`id`);

--
-- Filtros para la tabla `caja_sesiones`
--
ALTER TABLE `caja_sesiones`
  ADD CONSTRAINT `fk_cs_caja` FOREIGN KEY (`caja_id`) REFERENCES `cajas` (`id`),
  ADD CONSTRAINT `fk_cs_negocio` FOREIGN KEY (`negocio_id`) REFERENCES `negocios` (`id`),
  ADD CONSTRAINT `fk_cs_sucursal` FOREIGN KEY (`sucursal_id`) REFERENCES `sucursales` (`id`),
  ADD CONSTRAINT `fk_cs_usuario` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`);

--
-- Filtros para la tabla `clientes`
--
ALTER TABLE `clientes`
  ADD CONSTRAINT `fk_clientes_negocio` FOREIGN KEY (`negocio_id`) REFERENCES `negocios` (`id`),
  ADD CONSTRAINT `fk_clientes_sucursal` FOREIGN KEY (`sucursal_id`) REFERENCES `sucursales` (`id`);

--
-- Filtros para la tabla `comandas`
--
ALTER TABLE `comandas`
  ADD CONSTRAINT `fk_comandas_area` FOREIGN KEY (`area_produccion_id`) REFERENCES `areas_produccion` (`id`),
  ADD CONSTRAINT `fk_comandas_cuenta` FOREIGN KEY (`cuenta_id`) REFERENCES `mesa_cuentas` (`id`),
  ADD CONSTRAINT `fk_comandas_negocio` FOREIGN KEY (`negocio_id`) REFERENCES `negocios` (`id`),
  ADD CONSTRAINT `fk_comandas_sucursal` FOREIGN KEY (`sucursal_id`) REFERENCES `sucursales` (`id`),
  ADD CONSTRAINT `fk_comandas_venta` FOREIGN KEY (`venta_id`) REFERENCES `ventas` (`id`);

--
-- Filtros para la tabla `comanda_lineas`
--
ALTER TABLE `comanda_lineas`
  ADD CONSTRAINT `fk_cl_comanda` FOREIGN KEY (`comanda_id`) REFERENCES `comandas` (`id`),
  ADD CONSTRAINT `fk_cl_producto` FOREIGN KEY (`producto_id`) REFERENCES `productos` (`id`);

--
-- Filtros para la tabla `consecutivos_fiscales`
--
ALTER TABLE `consecutivos_fiscales`
  ADD CONSTRAINT `fk_cf_negocio` FOREIGN KEY (`negocio_id`) REFERENCES `negocios` (`id`),
  ADD CONSTRAINT `fk_cf_sucursal` FOREIGN KEY (`sucursal_id`) REFERENCES `sucursales` (`id`),
  ADD CONSTRAINT `fk_cf_tf` FOREIGN KEY (`terminal_fiscal_id`) REFERENCES `terminales_fiscales` (`id`);

--
-- Filtros para la tabla `documentos_detalle`
--
ALTER TABLE `documentos_detalle`
  ADD CONSTRAINT `fk_dd_documento` FOREIGN KEY (`documento_id`) REFERENCES `documentos_electronicos` (`id`),
  ADD CONSTRAINT `fk_dd_producto` FOREIGN KEY (`producto_id`) REFERENCES `productos` (`id`);

--
-- Filtros para la tabla `documentos_detalle_descuentos`
--
ALTER TABLE `documentos_detalle_descuentos`
  ADD CONSTRAINT `fk_ddd_detalle` FOREIGN KEY (`documento_detalle_id`) REFERENCES `documentos_detalle` (`id`);

--
-- Filtros para la tabla `documentos_detalle_impuestos`
--
ALTER TABLE `documentos_detalle_impuestos`
  ADD CONSTRAINT `fk_ddi_detalle` FOREIGN KEY (`documento_detalle_id`) REFERENCES `documentos_detalle` (`id`);

--
-- Filtros para la tabla `documentos_electronicos`
--
ALTER TABLE `documentos_electronicos`
  ADD CONSTRAINT `fk_de_caja` FOREIGN KEY (`caja_id`) REFERENCES `cajas` (`id`),
  ADD CONSTRAINT `fk_de_negocio` FOREIGN KEY (`negocio_id`) REFERENCES `negocios` (`id`),
  ADD CONSTRAINT `fk_de_sucursal` FOREIGN KEY (`sucursal_id`) REFERENCES `sucursales` (`id`),
  ADD CONSTRAINT `fk_de_tf` FOREIGN KEY (`terminal_fiscal_id`) REFERENCES `terminales_fiscales` (`id`),
  ADD CONSTRAINT `fk_de_usuario` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`),
  ADD CONSTRAINT `fk_de_venta` FOREIGN KEY (`venta_id`) REFERENCES `ventas` (`id`);

--
-- Filtros para la tabla `documentos_medios_pago`
--
ALTER TABLE `documentos_medios_pago`
  ADD CONSTRAINT `fk_dmp_documento` FOREIGN KEY (`documento_id`) REFERENCES `documentos_electronicos` (`id`);

--
-- Filtros para la tabla `documentos_referencias`
--
ALTER TABLE `documentos_referencias`
  ADD CONSTRAINT `fk_dr_documento` FOREIGN KEY (`documento_id`) REFERENCES `documentos_electronicos` (`id`);

--
-- Filtros para la tabla `documentos_xml`
--
ALTER TABLE `documentos_xml`
  ADD CONSTRAINT `fk_dx_documento` FOREIGN KEY (`documento_id`) REFERENCES `documentos_electronicos` (`id`);

--
-- Filtros para la tabla `inventario`
--
ALTER TABLE `inventario`
  ADD CONSTRAINT `fk_inv_materia` FOREIGN KEY (`materia_prima_id`) REFERENCES `materias_primas` (`id`),
  ADD CONSTRAINT `fk_inv_negocio` FOREIGN KEY (`negocio_id`) REFERENCES `negocios` (`id`),
  ADD CONSTRAINT `fk_inv_sucursal` FOREIGN KEY (`sucursal_id`) REFERENCES `sucursales` (`id`);

--
-- Filtros para la tabla `kardex`
--
ALTER TABLE `kardex`
  ADD CONSTRAINT `fk_kardex_materia` FOREIGN KEY (`materia_prima_id`) REFERENCES `materias_primas` (`id`),
  ADD CONSTRAINT `fk_kardex_negocio` FOREIGN KEY (`negocio_id`) REFERENCES `negocios` (`id`),
  ADD CONSTRAINT `fk_kardex_sucursal` FOREIGN KEY (`sucursal_id`) REFERENCES `sucursales` (`id`),
  ADD CONSTRAINT `fk_kardex_usuario` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`);

--
-- Filtros para la tabla `materias_primas`
--
ALTER TABLE `materias_primas`
  ADD CONSTRAINT `fk_mp_negocio` FOREIGN KEY (`negocio_id`) REFERENCES `negocios` (`id`);

--
-- Filtros para la tabla `mensajes_receptor`
--
ALTER TABLE `mensajes_receptor`
  ADD CONSTRAINT `fk_mr_negocio` FOREIGN KEY (`negocio_id`) REFERENCES `negocios` (`id`),
  ADD CONSTRAINT `fk_mr_sucursal` FOREIGN KEY (`sucursal_id`) REFERENCES `sucursales` (`id`),
  ADD CONSTRAINT `fk_mr_tf` FOREIGN KEY (`terminal_fiscal_id`) REFERENCES `terminales_fiscales` (`id`);

--
-- Filtros para la tabla `mesas`
--
ALTER TABLE `mesas`
  ADD CONSTRAINT `fk_mesas_area` FOREIGN KEY (`area_id`) REFERENCES `areas_restaurante` (`id`),
  ADD CONSTRAINT `fk_mesas_negocio` FOREIGN KEY (`negocio_id`) REFERENCES `negocios` (`id`),
  ADD CONSTRAINT `fk_mesas_sucursal` FOREIGN KEY (`sucursal_id`) REFERENCES `sucursales` (`id`);

--
-- Filtros para la tabla `mesa_cuentas`
--
ALTER TABLE `mesa_cuentas`
  ADD CONSTRAINT `fk_mc_mesa` FOREIGN KEY (`mesa_id`) REFERENCES `mesas` (`id`),
  ADD CONSTRAINT `fk_mc_mesero` FOREIGN KEY (`mesero_id`) REFERENCES `usuarios` (`id`),
  ADD CONSTRAINT `fk_mc_negocio` FOREIGN KEY (`negocio_id`) REFERENCES `negocios` (`id`),
  ADD CONSTRAINT `fk_mc_sucursal` FOREIGN KEY (`sucursal_id`) REFERENCES `sucursales` (`id`),
  ADD CONSTRAINT `fk_mc_venta` FOREIGN KEY (`venta_id`) REFERENCES `ventas` (`id`);

--
-- Filtros para la tabla `mesa_cuenta_lineas`
--
ALTER TABLE `mesa_cuenta_lineas`
  ADD CONSTRAINT `fk_mcl_cuenta` FOREIGN KEY (`cuenta_id`) REFERENCES `mesa_cuentas` (`id`),
  ADD CONSTRAINT `fk_mcl_producto` FOREIGN KEY (`producto_id`) REFERENCES `productos` (`id`);

--
-- Filtros para la tabla `mh_credenciales`
--
ALTER TABLE `mh_credenciales`
  ADD CONSTRAINT `fk_mh_negocio` FOREIGN KEY (`negocio_id`) REFERENCES `negocios` (`id`);

--
-- Filtros para la tabla `negocios`
--
ALTER TABLE `negocios`
  ADD CONSTRAINT `fk_negocios_categoria` FOREIGN KEY (`categoria_gastronomica_id`) REFERENCES `categorias_gastronomicas` (`id`),
  ADD CONSTRAINT `fk_negocios_plan` FOREIGN KEY (`plan_id`) REFERENCES `planes` (`id`);

--
-- Filtros para la tabla `productos`
--
ALTER TABLE `productos`
  ADD CONSTRAINT `fk_productos_area_prod` FOREIGN KEY (`area_produccion_id`) REFERENCES `areas_produccion` (`id`),
  ADD CONSTRAINT `fk_productos_categoria` FOREIGN KEY (`categoria_id`) REFERENCES `productos_categorias` (`id`),
  ADD CONSTRAINT `fk_productos_negocio` FOREIGN KEY (`negocio_id`) REFERENCES `negocios` (`id`),
  ADD CONSTRAINT `fk_productos_sucursal` FOREIGN KEY (`sucursal_id`) REFERENCES `sucursales` (`id`);

--
-- Filtros para la tabla `productos_categorias`
--
ALTER TABLE `productos_categorias`
  ADD CONSTRAINT `fk_prod_cat_negocio` FOREIGN KEY (`negocio_id`) REFERENCES `negocios` (`id`),
  ADD CONSTRAINT `fk_prod_cat_sucursal` FOREIGN KEY (`sucursal_id`) REFERENCES `sucursales` (`id`);

--
-- Filtros para la tabla `recetas`
--
ALTER TABLE `recetas`
  ADD CONSTRAINT `fk_recetas_negocio` FOREIGN KEY (`negocio_id`) REFERENCES `negocios` (`id`),
  ADD CONSTRAINT `fk_recetas_producto` FOREIGN KEY (`producto_id`) REFERENCES `productos` (`id`);

--
-- Filtros para la tabla `receta_detalles`
--
ALTER TABLE `receta_detalles`
  ADD CONSTRAINT `fk_rd_materia` FOREIGN KEY (`materia_prima_id`) REFERENCES `materias_primas` (`id`),
  ADD CONSTRAINT `fk_rd_receta` FOREIGN KEY (`receta_id`) REFERENCES `recetas` (`id`);

--
-- Filtros para la tabla `rol_permisos`
--
ALTER TABLE `rol_permisos`
  ADD CONSTRAINT `fk_rp_permiso` FOREIGN KEY (`permiso_id`) REFERENCES `permisos` (`id`),
  ADD CONSTRAINT `fk_rp_rol` FOREIGN KEY (`rol_id`) REFERENCES `roles` (`id`);

--
-- Filtros para la tabla `sucursales`
--
ALTER TABLE `sucursales`
  ADD CONSTRAINT `fk_sucursales_negocio` FOREIGN KEY (`negocio_id`) REFERENCES `negocios` (`id`);

--
-- Filtros para la tabla `terminales_fiscales`
--
ALTER TABLE `terminales_fiscales`
  ADD CONSTRAINT `fk_tf_caja` FOREIGN KEY (`caja_id`) REFERENCES `cajas` (`id`),
  ADD CONSTRAINT `fk_tf_negocio` FOREIGN KEY (`negocio_id`) REFERENCES `negocios` (`id`),
  ADD CONSTRAINT `fk_tf_sucursal` FOREIGN KEY (`sucursal_id`) REFERENCES `sucursales` (`id`);

--
-- Filtros para la tabla `usuarios`
--
ALTER TABLE `usuarios`
  ADD CONSTRAINT `fk_usuarios_negocio` FOREIGN KEY (`negocio_id`) REFERENCES `negocios` (`id`),
  ADD CONSTRAINT `fk_usuarios_rol` FOREIGN KEY (`rol_id`) REFERENCES `roles` (`id`),
  ADD CONSTRAINT `fk_usuarios_sucursal` FOREIGN KEY (`sucursal_id`) REFERENCES `sucursales` (`id`);

--
-- Filtros para la tabla `ventas`
--
ALTER TABLE `ventas`
  ADD CONSTRAINT `fk_ventas_caja` FOREIGN KEY (`caja_id`) REFERENCES `cajas` (`id`),
  ADD CONSTRAINT `fk_ventas_cliente` FOREIGN KEY (`cliente_id`) REFERENCES `clientes` (`id`),
  ADD CONSTRAINT `fk_ventas_negocio` FOREIGN KEY (`negocio_id`) REFERENCES `negocios` (`id`),
  ADD CONSTRAINT `fk_ventas_sesion` FOREIGN KEY (`caja_sesion_id`) REFERENCES `caja_sesiones` (`id`),
  ADD CONSTRAINT `fk_ventas_sucursal` FOREIGN KEY (`sucursal_id`) REFERENCES `sucursales` (`id`),
  ADD CONSTRAINT `fk_ventas_usuario` FOREIGN KEY (`usuario_id`) REFERENCES `usuarios` (`id`);

--
-- Filtros para la tabla `venta_lineas`
--
ALTER TABLE `venta_lineas`
  ADD CONSTRAINT `fk_vl_negocio` FOREIGN KEY (`negocio_id`) REFERENCES `negocios` (`id`),
  ADD CONSTRAINT `fk_vl_producto` FOREIGN KEY (`producto_id`) REFERENCES `productos` (`id`),
  ADD CONSTRAINT `fk_vl_venta` FOREIGN KEY (`venta_id`) REFERENCES `ventas` (`id`);

--
-- Filtros para la tabla `venta_pagos`
--
ALTER TABLE `venta_pagos`
  ADD CONSTRAINT `fk_vp_negocio` FOREIGN KEY (`negocio_id`) REFERENCES `negocios` (`id`),
  ADD CONSTRAINT `fk_vp_venta` FOREIGN KEY (`venta_id`) REFERENCES `ventas` (`id`);
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
