--
-- Host: localhost    Database: saas_control
-- ------------------------------------------------------


--
-- Table structure for table `aplicaciones`
--

CREATE TABLE `aplicaciones` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'PK de la aplicación/plataforma comercial',
  `producto_id` int(11) NOT NULL COMMENT 'FK al producto principal',
  `plataforma_id` int(11) NOT NULL COMMENT 'FK a la plataforma soportada',
  `nombre_app` varchar(100) NOT NULL COMMENT 'Nombre visible de la aplicación',
  `precio_base` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT 'Precio base de la aplicación en esta plataforma',
  `descripcion` text DEFAULT NULL COMMENT 'Descripción de la aplicación',
  `activo` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'Indicador de vigencia',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_app_v2_producto_plataforma_nombre` (`producto_id`,`plataforma_id`,`nombre_app`),
  KEY `ix_app_v2_producto` (`producto_id`),
  KEY `ix_app_v2_plataforma` (`plataforma_id`),
  CONSTRAINT `fk_app_v2_plataforma` FOREIGN KEY (`plataforma_id`) REFERENCES `plataformas` (`id`),
  CONSTRAINT `fk_app_v2_producto` FOREIGN KEY (`producto_id`) REFERENCES `productos` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Aplicaciones SaaS normalizadas por producto y plataforma';

--
-- Dumping data for table `aplicaciones`
--

INSERT INTO `aplicaciones` VALUES (9,1,1,'WMS Core',2000.00,'Motor principal del WMS',1),(11,1,2,'WMS Mobile',800.00,'Aplicación handheld WMS',1),(12,1,1,'Portal Operativo',500.00,'Portal web operativo WMS',1),(13,2,1,'ER Core',1500.00,'Motor principal AssistPro ER',1),(14,2,1,'Manufactura',1200.00,'Módulo de producción',1);

--
-- Table structure for table `backups`
--

CREATE TABLE `backups` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `instancia_id` int(11) DEFAULT NULL,
  `servidor_id` int(11) DEFAULT NULL,
  `tipo` enum('db','files','snapshot') DEFAULT NULL,
  `archivo` varchar(255) DEFAULT NULL,
  `ruta_archivo` varchar(500) DEFAULT NULL,
  `tamaño_mb` int(11) DEFAULT NULL,
  `fecha` datetime DEFAULT current_timestamp(),
  `estado` enum('ok','error') DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_backup_instancia` (`instancia_id`),
  KEY `idx_backup_servidor` (`servidor_id`),
  KEY `idx_backup_fecha` (`fecha`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `backups`
--

INSERT INTO `backups` VALUES (1,7,1,'db','assistpro_etl_fc_dev_20260311.sql.gz',NULL,145,'2026-03-11 04:26:45','ok'),(2,7,1,'db','assistpro_etl_fc_dev_20260311.sql.gz',NULL,145,'2026-03-11 04:28:12','ok');

--
-- Table structure for table `clientes`
--

CREATE TABLE `clientes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre_cliente` varchar(255) NOT NULL,
  `direccion` text NOT NULL,
  `pais_id` int(11) DEFAULT NULL,
  `estado_id` int(11) DEFAULT NULL,
  `contacto` varchar(100) NOT NULL,
  `email` varchar(255) NOT NULL,
  `telefono` varchar(50) NOT NULL,
  `latitud` decimal(10,7) DEFAULT NULL,
  `longitud` decimal(10,7) DEFAULT NULL,
  `vendedor_id` int(11) NOT NULL,
  `created_at` datetime DEFAULT current_timestamp(),
  `updated_at` datetime DEFAULT NULL ON UPDATE current_timestamp(),
  `deleted_at` datetime DEFAULT NULL COMMENT 'Fecha de eliminación lógica',
  PRIMARY KEY (`id`),
  KEY `vendedor_id` (`vendedor_id`),
  KEY `pais_id` (`pais_id`),
  KEY `estado_id` (`estado_id`),
  CONSTRAINT `clientes_ibfk_1` FOREIGN KEY (`vendedor_id`) REFERENCES `vendedores` (`id`),
  CONSTRAINT `clientes_ibfk_2` FOREIGN KEY (`pais_id`) REFERENCES `paises` (`id`),
  CONSTRAINT `clientes_ibfk_3` FOREIGN KEY (`estado_id`) REFERENCES `estados` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `clientes`
--

INSERT INTO `clientes` (`id`,`nombre_cliente`,`direccion`,`pais_id`,`estado_id`,`contacto`,`email`,`telefono`,`latitud`,`longitud`,`vendedor_id`,`created_at`,`updated_at`,`deleted_at`) VALUES (1,'Empresa Alpha','Av. Principal 123',1,7,'Carlos Ruiz','contacto@alpha.com','+52 555-0001',19.4326080,-99.1332090,1,'2026-03-09 17:14:00',NULL,NULL),(2,'Soluciones Beta','Calle Secundaria 45',1,7,'Laura Gómez','contacto@beta.com','+56 987-0002',19.4270250,-99.1676650,1,'2026-03-09 17:14:00','2026-03-09 20:56:06',NULL),(5,'Jaime Kike Rodriguez','Av Ano de Juarez 157-22',1,21,'','aolivares@adventech-logistica.com','5559663351',19.0412970,-98.2062000,1,'2026-03-09 17:14:00',NULL,NULL),(6,'Sandra Garcia','',1,1,'','','',19.3573570,-99.2770370,1,'2026-03-09 17:14:00','2026-03-09 20:56:06',NULL),(7,'Dicoisa','Av Ano de Juarez 157',1,7,'','aolivares@adventech-logistica.com','5559663351',19.3605330,-99.1837410,1,'2026-03-09 17:14:00','2026-03-09 20:56:06',NULL),(8,'Caja Yanga','Av Ano de Juarez 157-22',1,15,'','aolivares@adventech-logistica.com','5559663351',19.2906950,-99.6532250,13,'2026-03-09 17:14:00','2026-03-09 20:58:05',NULL);

--
-- Table structure for table `dominios`
--

CREATE TABLE `dominios` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'PK del dominio asignado',
  `instancia_id` int(11) NOT NULL COMMENT 'FK a la instancia SaaS',
  `nombre_dominio` varchar(255) NOT NULL COMMENT 'Dominio o subdominio publicado',
  `tipo` enum('principal','subdominio','custom') DEFAULT 'subdominio' COMMENT 'Tipo de dominio: principal del SaaS, subdominio automático o dominio personalizado',
  `proveedor_dns` varchar(50) DEFAULT NULL COMMENT 'Proveedor DNS que gestiona el dominio (Cloudflare, Route53, OVH, etc)',
  `principal` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Indica si es el dominio principal de la instancia',
  `ssl_activo` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Indica si cuenta con SSL activo',
  `activo` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'Indica si el dominio está vigente',
  `created_at` datetime NOT NULL DEFAULT current_timestamp(),
  `updated_at` datetime DEFAULT NULL ON UPDATE current_timestamp(),
  `deleted_at` datetime DEFAULT NULL COMMENT 'Fecha de eliminación lógica',
  `ssl_proveedor` varchar(50) DEFAULT NULL COMMENT 'Proveedor del certificado SSL (LetsEncrypt, Cloudflare, comercial)',
  `ssl_inicio` date DEFAULT NULL COMMENT 'Fecha de inicio del certificado SSL',
  `ssl_vencimiento` date DEFAULT NULL COMMENT 'Fecha de expiración del certificado SSL',
  `destino_ip` varchar(50) DEFAULT NULL COMMENT 'IP o destino al que apunta el dominio',
  `destino_tipo` enum('A','CNAME','PROXY') DEFAULT 'A' COMMENT 'Tipo de registro DNS',
  `creado_automatico` tinyint(4) DEFAULT 1 COMMENT 'Indica si el dominio fue creado automáticamente por el sistema',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_dominios_v2_nombre` (`nombre_dominio`),
  UNIQUE KEY `nombre_dominio` (`nombre_dominio`),
  KEY `ix_dominios_v2_instancia` (`instancia_id`),
  CONSTRAINT `fk_dominios_v2_instancia` FOREIGN KEY (`instancia_id`) REFERENCES `instancias` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Dominios asociados a una instancia SaaS';

--
-- Dumping data for table `dominios`
--


--
-- Table structure for table `estados`
--

CREATE TABLE `estados` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(100) NOT NULL,
  `pais_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `pais_id` (`pais_id`),
  CONSTRAINT `estados_ibfk_1` FOREIGN KEY (`pais_id`) REFERENCES `paises` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=65 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `estados`
--

INSERT INTO `estados` VALUES (1,'Aguascalientes',1),(2,'Baja California',1),(3,'Baja California Sur',1),(4,'Campeche',1),(5,'Chiapas',1),(6,'Chihuahua',1),(7,'Ciudad de México',1),(8,'Coahuila',1),(9,'Colima',1),(10,'Durango',1),(11,'Guanajuato',1),(12,'Guerrero',1),(13,'Hidalgo',1),(14,'Jalisco',1),(15,'México',1),(16,'Michoacán',1),(17,'Morelos',1),(18,'Nayarit',1),(19,'Nuevo León',1),(20,'Oaxaca',1),(21,'Puebla',1),(22,'Querétaro',1),(23,'Quintana Roo',1),(24,'San Luis Potosí',1),(25,'Sinaloa',1),(26,'Sonora',1),(27,'Tabasco',1),(28,'Tamaulipas',1),(29,'Tlaxcala',1),(30,'Veracruz',1),(31,'Yucatán',1),(32,'Zacatecas',1);

--
-- Table structure for table `instancias`
--

CREATE TABLE `instancias` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'PK de la instancia SaaS del cliente',
  `cliente_id` int(11) NOT NULL COMMENT 'FK al cliente propietario de la instancia',
  `producto_id` int(11) NOT NULL COMMENT 'FK al producto principal instalado',
  `server_app_id` int(11) DEFAULT NULL COMMENT 'FK al servidor de aplicaciones',
  `server_db_id` int(11) DEFAULT NULL COMMENT 'FK al servidor de base de datos',
  `nombre_instancia` varchar(150) NOT NULL COMMENT 'Nombre interno de la instancia',
  `version_instalada` varchar(50) DEFAULT NULL COMMENT 'Versión instalada del producto',
  `fecha_registro` date NOT NULL COMMENT 'Fecha de alta de la instancia',
  `fecha_inicio_contrato` date DEFAULT NULL COMMENT 'Fecha de inicio del contrato SaaS',
  `fecha_vencimiento` date DEFAULT NULL COMMENT 'Fecha de vencimiento comercial o técnica',
  `tiene_contrato` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Indicador de contrato vigente',
  `tipo_contrato` enum('trial','mensual','anual','perpetuo') DEFAULT 'mensual' COMMENT 'Tipo de contrato SaaS de la instancia',
  `valor_contrato` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT 'Valor recurrente del contrato',
  `valor_producto_inicial` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT 'Valor inicial del proyecto/producto',
  `estado` enum('activo','vencido','pendiente','suspendido') NOT NULL DEFAULT 'activo' COMMENT 'Estado administrativo de la instancia',
  `observaciones` text DEFAULT NULL COMMENT 'Comentarios operativos o comerciales',
  `created_at` datetime NOT NULL DEFAULT current_timestamp(),
  `updated_at` datetime DEFAULT NULL ON UPDATE current_timestamp(),
  `deleted_at` datetime DEFAULT NULL COMMENT 'Fecha de eliminación lógica',
  `codigo_instancia` varchar(50) NOT NULL COMMENT 'Identificador técnico único de la instancia',
  `max_usuarios` int(11) DEFAULT 5 COMMENT 'Número máximo de usuarios permitidos en la instancia',
  `storage_gb` int(11) DEFAULT 10 COMMENT 'Capacidad de almacenamiento asignada a la instancia',
  `entorno` enum('prod','qa','dev') DEFAULT 'prod' COMMENT 'Ambiente de la instancia',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_instancias_nombre` (`nombre_instancia`),
  UNIQUE KEY `uk_codigo_instancia` (`codigo_instancia`),
  KEY `ix_instancias_cliente` (`cliente_id`),
  KEY `ix_instancias_producto` (`producto_id`),
  KEY `ix_instancias_server_app` (`server_app_id`),
  KEY `ix_instancias_server_db` (`server_db_id`),
  CONSTRAINT `fk_instancias_cliente` FOREIGN KEY (`cliente_id`) REFERENCES `clientes` (`id`),
  CONSTRAINT `fk_instancias_producto` FOREIGN KEY (`producto_id`) REFERENCES `productos` (`id`),
  CONSTRAINT `fk_instancias_server_app` FOREIGN KEY (`server_app_id`) REFERENCES `servidores` (`id`),
  CONSTRAINT `fk_instancias_server_db` FOREIGN KEY (`server_db_id`) REFERENCES `servidores` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Instancias SaaS por cliente, producto y servidores asociados';

--
-- Dumping data for table `instancias`
--

INSERT INTO `instancias` VALUES (4,1,1,1,1,'assistpro_fox','2.0','2026-01-01',NULL,NULL,1,'mensual',2500.00,15000.00,'activo',NULL,'2026-03-09 21:27:18','2026-03-10 21:57:32',NULL,'FOX01',5,10,'prod'),(5,2,1,1,1,'assistpro_nicelabel','2.0','2026-02-01',NULL,NULL,1,'mensual',2200.00,12000.00,'activo',NULL,'2026-03-09 21:27:41','2026-03-10 21:57:32',NULL,'NIC01',5,10,'prod'),(7,1,1,1,1,'assistpro_demo','2.0','2026-03-01',NULL,NULL,0,'mensual',0.00,0.00,'activo',NULL,'2026-03-09 21:32:24','2026-03-10 21:57:32',NULL,'DEMO01',5,10,'prod'),(8,2,1,1,1,'beta_wms','2.0','2026-03-02',NULL,NULL,1,'mensual',1200.00,5000.00,'activo',NULL,'2026-03-09 21:32:53','2026-03-10 21:57:32',NULL,'BETA01',5,10,'prod'),(9,7,2,3,1,'dicoisa_er','1.5','2026-03-03',NULL,NULL,1,'mensual',2500.00,10000.00,'activo',NULL,'2026-03-09 21:33:16','2026-03-10 21:57:32',NULL,'DICO01',5,10,'prod');

--
-- Table structure for table `instancias_db`
--

CREATE TABLE `instancias_db` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'PK del registro de base de datos',
  `instancia_id` int(11) NOT NULL COMMENT 'FK a la instancia SaaS',
  `server_id` int(11) NOT NULL COMMENT 'FK al servidor donde reside la base',
  `nombre_db` varchar(150) NOT NULL COMMENT 'Nombre físico de la base de datos',
  `charset_db` varchar(50) NOT NULL DEFAULT 'utf8mb4' COMMENT 'Charset configurado',
  `collation_db` varchar(100) NOT NULL DEFAULT 'utf8mb4_unicode_ci' COMMENT 'Collation configurado',
  `activo` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'Indicador de vigencia del registro',
  `created_at` datetime NOT NULL DEFAULT current_timestamp() COMMENT 'Fecha de creación del registro',
  `updated_at` datetime DEFAULT NULL ON UPDATE current_timestamp() COMMENT 'Última actualización del registro',
  `observaciones` text DEFAULT NULL COMMENT 'Notas operativas de la base de datos',
  `usuario_db` varchar(100) NOT NULL COMMENT 'Usuario MySQL asignado a la base de datos',
  `password_db` varchar(255) NOT NULL COMMENT 'Password cifrada del usuario MySQL',
  `host_acceso` varchar(100) DEFAULT '%' COMMENT 'Host permitido para conexión del usuario MySQL',
  `replica_server_id` int(11) DEFAULT NULL COMMENT 'Servidor donde reside la réplica de la base de datos',
  `subdominio` varchar(150) DEFAULT NULL COMMENT 'Subdominio principal que usa esta base o instancia',
  `ssl_activo` tinyint(4) DEFAULT 1 COMMENT 'Indica si el subdominio tiene SSL activo',
  `ssl_vencimiento` date DEFAULT NULL COMMENT 'Fecha de expiración del certificado SSL',
  `size_mb` int(11) DEFAULT 0 COMMENT 'Tamaño actual aproximado de la base de datos en MB',
  `max_conexiones` int(11) DEFAULT 50 COMMENT 'Número máximo de conexiones permitidas para esta base',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_instancia_db` (`instancia_id`,`nombre_db`),
  KEY `ix_instancias_db_instancia` (`instancia_id`),
  KEY `ix_instancias_db_server` (`server_id`),
  KEY `idx_instancias_db_instancia` (`instancia_id`),
  KEY `idx_instancias_db_server` (`server_id`),
  CONSTRAINT `fk_instancias_db_instancia` FOREIGN KEY (`instancia_id`) REFERENCES `instancias` (`id`),
  CONSTRAINT `fk_instancias_db_server` FOREIGN KEY (`server_id`) REFERENCES `servidores` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Bases de datos asociadas a instancias SaaS y a sus servidores';

--
-- Dumping data for table `instancias_db`
--

INSERT INTO `instancias_db` VALUES (1,7,1,'assistpro_etl_fc_dev','utf8mb4','utf8mb4_unicode_ci',1,'2026-03-10 22:23:38',NULL,NULL,'','','%',NULL,NULL,1,NULL,0,50);

--
-- Table structure for table `instancias_metricas`
--

CREATE TABLE `instancias_metricas` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `instancia_id` int(11) NOT NULL,
  `usuarios_activos` int(11) DEFAULT 0,
  `usuarios_totales` int(11) DEFAULT 0,
  `almacenamiento_gb` decimal(10,2) DEFAULT 0.00,
  `ultima_conexion` datetime DEFAULT NULL,
  `created_at` datetime DEFAULT current_timestamp(),
  `cpu_uso` decimal(5,2) DEFAULT NULL COMMENT 'Porcentaje de uso de CPU de la instancia',
  `ram_uso_gb` decimal(6,2) DEFAULT NULL COMMENT 'Memoria RAM usada por la instancia',
  `db_size_gb` decimal(6,2) DEFAULT NULL COMMENT 'Tamaño de la base de datos de la instancia',
  `response_ms` int(11) DEFAULT NULL COMMENT 'Tiempo promedio de respuesta de la aplicación en milisegundos',
  PRIMARY KEY (`id`),
  KEY `ix_metricas_instancia_fecha` (`instancia_id`,`created_at`),
  CONSTRAINT `instancias_metricas_ibfk_1` FOREIGN KEY (`instancia_id`) REFERENCES `instancias` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `instancias_metricas`
--


--
-- Table structure for table `licencias`
--

CREATE TABLE `licencias` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'PK de la licencia SaaS',
  `instancia_id` int(11) NOT NULL COMMENT 'FK a la instancia SaaS',
  `aplicacion_id` int(11) NOT NULL COMMENT 'FK a aplicaciones_v2',
  `tipo_licencia` enum('trial','mensual','anual','perpetua') DEFAULT 'mensual',
  `max_usuarios` int(11) NOT NULL DEFAULT 0 COMMENT 'Usuarios permitidos',
  `usuarios_en_uso` int(11) DEFAULT 0 COMMENT 'Usuarios actualmente activos',
  `costo` decimal(10,2) DEFAULT 0.00 COMMENT 'Costo del servicio',
  `fecha_inicio` date NOT NULL,
  `fecha_fin` date DEFAULT NULL,
  `activo` tinyint(1) DEFAULT 1,
  `observaciones` text DEFAULT NULL,
  `created_at` datetime DEFAULT current_timestamp(),
  `updated_at` datetime DEFAULT NULL ON UPDATE current_timestamp(),
  `deleted_at` datetime DEFAULT NULL COMMENT 'Eliminación lógica de licencia',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_instancia_app` (`instancia_id`,`aplicacion_id`),
  KEY `ix_licencias_instancia` (`instancia_id`),
  KEY `ix_licencias_app` (`aplicacion_id`),
  KEY `idx_licencias_instancia` (`instancia_id`),
  KEY `ix_licencias_activo` (`activo`),
  KEY `ix_licencias_fecha_fin` (`fecha_fin`),
  CONSTRAINT `fk_licencias_app` FOREIGN KEY (`aplicacion_id`) REFERENCES `aplicaciones` (`id`),
  CONSTRAINT `fk_licencias_instancia` FOREIGN KEY (`instancia_id`) REFERENCES `instancias` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Licencias SaaS activas por instancia y aplicación';

--
-- Dumping data for table `licencias`
--

INSERT INTO `licencias` VALUES (5,4,9,'mensual',20,15,2000.00,'2026-01-01',NULL,1,NULL,'2026-03-09 21:37:30',NULL,NULL),(6,4,11,'mensual',10,8,800.00,'2026-01-01',NULL,1,NULL,'2026-03-09 21:37:30',NULL,NULL),(7,5,9,'mensual',15,12,2000.00,'2026-02-01',NULL,1,NULL,'2026-03-09 21:37:30',NULL,NULL),(8,8,9,'mensual',12,6,2000.00,'2026-03-01',NULL,1,NULL,'2026-03-09 21:37:30',NULL,NULL),(9,9,13,'mensual',25,20,1500.00,'2026-03-03',NULL,1,NULL,'2026-03-09 21:37:30',NULL,NULL),(10,9,14,'mensual',10,7,1200.00,'2026-03-03',NULL,1,NULL,'2026-03-09 21:37:30',NULL,NULL);

--
-- Table structure for table `paises`
--

CREATE TABLE `paises` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(100) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `nombre` (`nombre`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `paises`
--

INSERT INTO `paises` VALUES (4,'Argentina'),(9,'Brasil'),(3,'Canadá'),(6,'Chile'),(5,'Colombia'),(7,'España'),(2,'Estados Unidos'),(1,'México'),(10,'Otro'),(8,'Perú');

--
-- Table structure for table `plataformas`
--

CREATE TABLE `plataformas` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'PK de la plataforma',
  `nombre` varchar(50) NOT NULL COMMENT 'Nombre de plataforma: Web, Android, iOS, Windows',
  `descripcion` varchar(255) DEFAULT NULL COMMENT 'Descripción opcional de la plataforma',
  `activo` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'Indicador de vigencia del catálogo',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_plataformas_nombre` (`nombre`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Catálogo de plataformas soportadas por las aplicaciones SaaS';

--
-- Dumping data for table `plataformas`
--

INSERT INTO `plataformas` VALUES (1,'Web',NULL,1),(2,'Mobile',NULL,1),(3,'API',NULL,1);

--
-- Table structure for table `productos`
--

CREATE TABLE `productos` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'PK del producto SaaS',
  `nombre` varchar(100) NOT NULL COMMENT 'Nombre comercial del producto: AssistPro WMS, ERP, CRM, Assets',
  `descripcion` text DEFAULT NULL COMMENT 'Descripción funcional del producto',
  `activo` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'Indicador de vigencia del producto',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_productos_nombre` (`nombre`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Catálogo de productos SaaS administrados por saas_control';

--
-- Dumping data for table `productos`
--

INSERT INTO `productos` VALUES (1,'AssistPro WMS','Sistema de gestión de almacenes',1),(2,'AssistPro ER','Gestión de inventarios y operaciones',1),(3,'AssistPro Control Tower','Plataforma de visibilidad logística',1);

--
-- Table structure for table `replicas_db`
--

CREATE TABLE `replicas_db` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `master_server_id` int(11) DEFAULT NULL,
  `replica_server_id` int(11) DEFAULT NULL,
  `estado` enum('activo','detenido') DEFAULT NULL,
  `ultimo_sync` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_master_replica` (`master_server_id`,`replica_server_id`),
  KEY `idx_replica_master` (`master_server_id`),
  KEY `idx_replica_slave` (`replica_server_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `replicas_db`
--

INSERT INTO `replicas_db` VALUES (1,1,3,'activo',NULL);

--
-- Table structure for table `servidores`
--

CREATE TABLE `servidores` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Identificador único del servidor',
  `nombre` varchar(100) NOT NULL COMMENT 'Nombre lógico del servidor dentro de la infraestructura SaaS',
  `ip_publica` varchar(50) NOT NULL COMMENT 'IP pública utilizada para conexión SSH o servicios externos',
  `ip_privada` varchar(50) DEFAULT NULL COMMENT 'IP privada dentro de la red interna del proveedor (usada para replicación o comunicación entre nodos)',
  `tipo` enum('app','db','replica','backup') NOT NULL COMMENT 'Rol del servidor dentro de la arquitectura SaaS: app=aplicaciones, db=base de datos primaria, replica=replicación, backup=servidor de copias',
  `proveedor` varchar(50) NOT NULL COMMENT 'Proveedor de infraestructura (OVH, AWS, Azure, Hetzner, etc)',
  `descripcion` varchar(255) DEFAULT NULL COMMENT 'Descripción técnica o propósito específico del servidor',
  `puerto_ssh` int(11) NOT NULL DEFAULT 22 COMMENT 'Puerto SSH utilizado para administración remota del servidor',
  `usuario_ssh` varchar(50) NOT NULL COMMENT 'Usuario SSH utilizado por el sistema para automatización y despliegues',
  `activo` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'Indica si el servidor está activo y disponible para asignación en nuevas instancias SaaS',
  `created_at` datetime DEFAULT current_timestamp() COMMENT 'Fecha de creación del registro del servidor en el sistema',
  `updated_at` datetime DEFAULT NULL ON UPDATE current_timestamp() COMMENT 'Fecha de última actualización del registro del servidor',
  `capacidad_instancias` int(11) DEFAULT 0 COMMENT 'Número máximo de instancias SaaS permitidas en este servidor',
  `instancias_actuales` int(11) DEFAULT 0 COMMENT 'Número actual de instancias desplegadas en este servidor',
  `puerto_mysql` int(11) DEFAULT NULL COMMENT 'Puerto MySQL en servidores tipo DB o replica',
  `ruta_backups` varchar(255) DEFAULT NULL COMMENT 'Ruta local donde se almacenan backups en servidores tipo backup',
  `sistema_operativo` varchar(50) DEFAULT NULL COMMENT 'Sistema operativo del servidor (Ubuntu, Debian, etc)',
  `datacenter` varchar(50) DEFAULT NULL COMMENT 'Ubicación del servidor o datacenter',
  `docker_host` tinyint(4) DEFAULT 0 COMMENT 'Indica si el servidor soporta despliegue de contenedores Docker',
  `mysql_host` tinyint(4) DEFAULT 0 COMMENT 'Indica si el servidor ejecuta MySQL',
  `monitoreo_activo` tinyint(4) DEFAULT 0 COMMENT 'Indica si el servidor está monitoreado por el sistema',
  `version_so` varchar(50) DEFAULT NULL COMMENT 'Versión del sistema operativo instalada',
  `version_db` varchar(50) DEFAULT NULL COMMENT 'Versión del motor de base de datos si aplica (MySQL, MariaDB, PostgreSQL)',
  `version_docker` varchar(50) DEFAULT NULL COMMENT 'Versión de Docker instalada si el servidor ejecuta contenedores',
  `tipo_contrato` enum('mensual','anual','propio') NOT NULL DEFAULT 'mensual' COMMENT 'Tipo de contrato del servidor con el proveedor',
  `costo_mensual` decimal(10,2) DEFAULT NULL COMMENT 'Costo mensual del servidor en USD o moneda base',
  `costo_anual` decimal(10,2) DEFAULT NULL COMMENT 'Costo anual del servidor si aplica',
  `fecha_inicio_contrato` date DEFAULT NULL COMMENT 'Fecha de inicio del contrato del servidor',
  `fecha_fin_contrato` date DEFAULT NULL COMMENT 'Fecha de vencimiento o renovación del contrato',
  `moneda` varchar(10) DEFAULT 'USD' COMMENT 'Moneda del costo del servidor',
  `alerta_renovacion_dias` int(11) DEFAULT 30 COMMENT 'Días antes del vencimiento para alertar renovación del servidor',
  `cpu_cores` int(11) DEFAULT NULL COMMENT 'Número de núcleos de CPU del servidor',
  `ram_gb` int(11) DEFAULT NULL COMMENT 'Memoria RAM total del servidor en GB',
  `disco_total_gb` int(11) DEFAULT NULL COMMENT 'Capacidad total de almacenamiento del servidor en GB',
  `disco_disponible_gb` int(11) DEFAULT NULL COMMENT 'Espacio disponible actual aproximado en GB',
  `metodo_acceso` enum('ssh_key','password','vault') DEFAULT 'ssh_key' COMMENT 'Método de autenticación para acceso SSH',
  `llave_ssh_nombre` varchar(100) DEFAULT NULL COMMENT 'Nombre o identificador de la llave SSH usada para acceso',
  `ssl_proveedor` varchar(50) DEFAULT NULL COMMENT 'Proveedor del certificado SSL (LetsEncrypt, Cloudflare, comercial)',
  `ssl_dominio` varchar(150) DEFAULT NULL COMMENT 'Dominio principal asociado al certificado SSL',
  `ssl_inicio` date DEFAULT NULL COMMENT 'Fecha de inicio de vigencia del certificado SSL',
  `ssl_vencimiento` date DEFAULT NULL COMMENT 'Fecha de expiración del certificado SSL',
  `firewall_activo` tinyint(4) DEFAULT 1 COMMENT 'Indica si el firewall del servidor está activo',
  `hostname` varchar(100) DEFAULT NULL COMMENT 'Hostname del servidor en el sistema operativo',
  `entorno` enum('produccion','staging','desarrollo') DEFAULT 'produccion' COMMENT 'Entorno del servidor dentro de la infraestructura',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_servidor_ip_puerto` (`ip_publica`,`puerto_ssh`),
  UNIQUE KEY `uk_servidor_nombre` (`nombre`),
  UNIQUE KEY `nombre` (`nombre`),
  KEY `idx_tipo` (`tipo`),
  KEY `idx_activo` (`activo`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `servidores`
--

INSERT INTO `servidores` VALUES (1,'VPS40_DB_MASTER','92.222.243.40',NULL,'db','OVH',NULL,2222,'ubuntu',1,'2026-03-11 06:17:26',NULL,0,0,NULL,NULL,NULL,NULL,0,0,0,NULL,NULL,NULL,'mensual',NULL,NULL,NULL,NULL,'USD',30,NULL,NULL,NULL,NULL,'ssh_key',NULL,NULL,NULL,NULL,NULL,1,NULL,'produccion'),(2,'VPS41_APP_NODE','92.222.243.41',NULL,'app','OVH',NULL,22,'ubuntu',1,'2026-03-11 06:17:26',NULL,0,0,NULL,NULL,NULL,NULL,0,0,0,NULL,NULL,NULL,'mensual',NULL,NULL,NULL,NULL,'USD',30,NULL,NULL,NULL,NULL,'ssh_key',NULL,NULL,NULL,NULL,NULL,1,NULL,'produccion'),(3,'VPS101_DB_REPLICA','54.38.109.101',NULL,'replica','OVH',NULL,22,'ubuntu',1,'2026-03-11 06:17:26',NULL,0,0,NULL,NULL,NULL,NULL,0,0,0,NULL,NULL,NULL,'mensual',NULL,NULL,NULL,NULL,'USD',30,NULL,NULL,NULL,NULL,'ssh_key',NULL,NULL,NULL,NULL,NULL,1,NULL,'produccion'),(7,'VPS117_DB_MASTER2','54.38.109.117',NULL,'db','OVH',NULL,22,'ubuntu',1,'2026-03-11 06:17:26',NULL,0,0,NULL,NULL,NULL,NULL,0,0,0,NULL,NULL,NULL,'mensual',NULL,NULL,NULL,NULL,'USD',30,NULL,NULL,NULL,NULL,'ssh_key',NULL,NULL,NULL,NULL,NULL,1,NULL,'produccion');

--
-- Table structure for table `subdominios_instancia`
--

CREATE TABLE `subdominios_instancia` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `instancia_id` int(11) NOT NULL,
  `dominio_id` int(11) NOT NULL,
  `subdominio` varchar(100) NOT NULL COMMENT 'Subdominio del cliente',
  `ssl_activo` tinyint(4) DEFAULT 1,
  `ssl_vencimiento` date DEFAULT NULL,
  `creado` datetime DEFAULT current_timestamp(),
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `subdominios_instancia`
--


--
-- Table structure for table `usuarios`
--

CREATE TABLE `usuarios` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `usuario` varchar(50) NOT NULL,
  `password` varchar(255) NOT NULL,
  `rol` enum('admin','usuario') DEFAULT 'usuario',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `usuarios`
--

INSERT INTO `usuarios` VALUES (1,'admin','0192023a7bbd73250516f069df18b500','admin');

--
-- Temporary view structure for view `v_saas_instancias`
--

/*!50001 DROP VIEW IF EXISTS `v_saas_instancias`*/;
/*!50001 CREATE VIEW `v_saas_instancias` AS SELECT 
 1 AS `id`,
 1 AS `codigo_instancia`,
 1 AS `cliente`,
 1 AS `servidor`,
 1 AS `ip_publica`,
 1 AS `total_licencias`,
 1 AS `valor_total_licencias`,
 1 AS `usuarios_contratados`,
 1 AS `usuarios_activos`*/;

--
-- Table structure for table `vendedores`
--

CREATE TABLE `vendedores` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre_vendedor` varchar(255) NOT NULL,
  `email` varchar(255) DEFAULT NULL,
  `telefono` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `vendedores`
--

INSERT INTO `vendedores` VALUES (1,'Alejandro Olivares','aolivares@adventech-logistica.com','+52 555-9663351'),(11,'Luis Garcia','luis@adventech-logistica.com','55 7574 0885'),(12,'Paola Olivares','paola.olivares@adventech-logistica.com','55 7574 0885'),(13,'Luis Mendez','lmendez@adventech-logistica.com','55 7574 0885'),(14,'Daniela Trejo','dtrejo@adventech-logistica.com','55 7574 0885');

--
-- Temporary view structure for view `vw_dominios_instancia`
--

/*!50001 DROP VIEW IF EXISTS `vw_dominios_instancia`*/;
/*!50001 CREATE VIEW `vw_dominios_instancia` AS SELECT 
 1 AS `id`,
 1 AS `nombre_instancia`,
 1 AS `nombre_cliente`,
 1 AS `nombre_dominio`,
 1 AS `principal`,
 1 AS `ssl_activo`,
 1 AS `activo`*/;

--
-- Temporary view structure for view `vw_instancia_infraestructura`
--

/*!50001 DROP VIEW IF EXISTS `vw_instancia_infraestructura`*/;
/*!50001 CREATE VIEW `vw_instancia_infraestructura` AS SELECT 
 1 AS `instancia_id`,
 1 AS `codigo_instancia`,
 1 AS `nombre_instancia`,
 1 AS `cliente`,
 1 AS `producto`,
 1 AS `servidor_app`,
 1 AS `ip_servidor_app`,
 1 AS `servidor_db`,
 1 AS `ip_servidor_db`,
 1 AS `nombre_db`,
 1 AS `charset_db`,
 1 AS `collation_db`,
 1 AS `dominio`,
 1 AS `ssl_activo`,
 1 AS `usuarios_activos`,
 1 AS `usuarios_totales`,
 1 AS `cpu_uso`,
 1 AS `ram_uso_gb`,
 1 AS `db_size_gb`,
 1 AS `response_ms`,
 1 AS `tiene_contrato`,
 1 AS `valor_contrato`,
 1 AS `fecha_registro`,
 1 AS `fecha_vencimiento`,
 1 AS `estado`*/;

--
-- Temporary view structure for view `vw_instancia_topologia`
--

/*!50001 DROP VIEW IF EXISTS `vw_instancia_topologia`*/;
/*!50001 CREATE VIEW `vw_instancia_topologia` AS SELECT 
 1 AS `instancia_id`,
 1 AS `codigo_instancia`,
 1 AS `nombre_instancia`,
 1 AS `cliente`,
 1 AS `producto`,
 1 AS `servidor_app`,
 1 AS `servidor_db`,
 1 AS `nombre_db`,
 1 AS `charset_db`,
 1 AS `collation_db`,
 1 AS `dominio_principal`,
 1 AS `usuarios_activos`,
 1 AS `usuarios_totales`,
 1 AS `cpu_uso`,
 1 AS `ram_uso_gb`,
 1 AS `db_size_gb`,
 1 AS `response_ms`,
 1 AS `valor_contrato`,
 1 AS `fecha_vencimiento`,
 1 AS `estado`*/;

--
-- Temporary view structure for view `vw_instancias_general`
--

/*!50001 DROP VIEW IF EXISTS `vw_instancias_general`*/;
/*!50001 CREATE VIEW `vw_instancias_general` AS SELECT 
 1 AS `id`,
 1 AS `codigo_instancia`,
 1 AS `nombre_instancia`,
 1 AS `cliente`,
 1 AS `producto`,
 1 AS `servidor_app`,
 1 AS `servidor_db`,
 1 AS `version_instalada`,
 1 AS `fecha_registro`,
 1 AS `fecha_vencimiento`,
 1 AS `estado`*/;

--
-- Temporary view structure for view `vw_instancias_metricas_actual`
--

/*!50001 DROP VIEW IF EXISTS `vw_instancias_metricas_actual`*/;
/*!50001 CREATE VIEW `vw_instancias_metricas_actual` AS SELECT 
 1 AS `instancia_id`,
 1 AS `nombre_instancia`,
 1 AS `nombre_cliente`,
 1 AS `producto`,
 1 AS `usuarios_activos`,
 1 AS `usuarios_totales`,
 1 AS `almacenamiento_gb`,
 1 AS `cpu_uso`,
 1 AS `ram_uso_gb`,
 1 AS `db_size_gb`,
 1 AS `response_ms`,
 1 AS `ultima_conexion`*/;

--
-- Temporary view structure for view `vw_provisionamiento_instancias`
--

/*!50001 DROP VIEW IF EXISTS `vw_provisionamiento_instancias`*/;
/*!50001 CREATE VIEW `vw_provisionamiento_instancias` AS SELECT 
 1 AS `instancia_id`,
 1 AS `codigo_instancia`,
 1 AS `nombre_instancia`,
 1 AS `nombre_cliente`,
 1 AS `producto`,
 1 AS `servidor_app`,
 1 AS `ip_app`,
 1 AS `servidor_db`,
 1 AS `ip_db`,
 1 AS `nombre_db`,
 1 AS `usuario_db`,
 1 AS `nombre_dominio`,
 1 AS `estado`*/;

--
-- Temporary view structure for view `vw_saas_control_center`
--

/*!50001 DROP VIEW IF EXISTS `vw_saas_control_center`*/;
/*!50001 CREATE VIEW `vw_saas_control_center` AS SELECT 
 1 AS `codigo_instancia`,
 1 AS `nombre_instancia`,
 1 AS `nombre_cliente`,
 1 AS `producto`,
 1 AS `servidor_app`,
 1 AS `servidor_db`,
 1 AS `usuarios_activos`,
 1 AS `cpu_uso`,
 1 AS `ram_uso_gb`,
 1 AS `db_size_gb`,
 1 AS `valor_contrato`,
 1 AS `fecha_vencimiento`,
 1 AS `estado`*/;

--
-- Temporary view structure for view `vw_saas_dashboard`
--

/*!50001 DROP VIEW IF EXISTS `vw_saas_dashboard`*/;
/*!50001 CREATE VIEW `vw_saas_dashboard` AS SELECT 
 1 AS `clientes_activos`,
 1 AS `instancias`,
 1 AS `usuarios_contratados`,
 1 AS `usuarios_en_uso`,
 1 AS `MRR`,
 1 AS `ARR`*/;

--
-- Temporary view structure for view `vw_saas_mrr`
--

/*!50001 DROP VIEW IF EXISTS `vw_saas_mrr`*/;
/*!50001 CREATE VIEW `vw_saas_mrr` AS SELECT 
 1 AS `id`,
 1 AS `codigo_instancia`,
 1 AS `nombre_cliente`,
 1 AS `producto`,
 1 AS `valor_contrato`,
 1 AS `fecha_vencimiento`,
 1 AS `estado`*/;

--
-- Table structure for table `whitelist_ips`
--

CREATE TABLE `whitelist_ips` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `servidor_id` int(11) DEFAULT NULL,
  `ip` varchar(50) DEFAULT NULL,
  `descripcion` varchar(255) DEFAULT NULL,
  `activo` tinyint(4) DEFAULT 1,
  `created_at` datetime DEFAULT current_timestamp(),
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_ip` (`ip`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Dumping data for table `whitelist_ips`
--


--
-- Final view structure for view `v_saas_instancias`
--

/*!50001 DROP VIEW IF EXISTS `v_saas_instancias`*/;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `v_saas_instancias` AS select `i`.`id` AS `id`,`i`.`codigo_instancia` AS `codigo_instancia`,`c`.`nombre_cliente` AS `cliente`,`s`.`nombre` AS `servidor`,`s`.`ip_publica` AS `ip_publica`,count(`l`.`id`) AS `total_licencias`,sum(`l`.`costo`) AS `valor_total_licencias`,sum(`l`.`max_usuarios`) AS `usuarios_contratados`,sum(`l`.`usuarios_en_uso`) AS `usuarios_activos` from ((((`instancias` `i` join `clientes` `c` on(`i`.`cliente_id` = `c`.`id`)) left join `instancias_db` `db` on(`db`.`instancia_id` = `i`.`id`)) left join `servidores` `s` on(`db`.`server_id` = `s`.`id`)) left join `licencias` `l` on(`l`.`instancia_id` = `i`.`id` and `l`.`activo` = 1)) where `c`.`deleted_at` is null group by `i`.`id` */;

--
-- Final view structure for view `vw_dominios_instancia`
--

/*!50001 DROP VIEW IF EXISTS `vw_dominios_instancia`*/;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `vw_dominios_instancia` AS select `d`.`id` AS `id`,`i`.`nombre_instancia` AS `nombre_instancia`,`c`.`nombre_cliente` AS `nombre_cliente`,`d`.`nombre_dominio` AS `nombre_dominio`,`d`.`principal` AS `principal`,`d`.`ssl_activo` AS `ssl_activo`,`d`.`activo` AS `activo` from ((`dominios` `d` join `instancias` `i` on(`i`.`id` = `d`.`instancia_id`)) join `clientes` `c` on(`c`.`id` = `i`.`cliente_id`)) where `d`.`deleted_at` is null */;

--
-- Final view structure for view `vw_instancia_infraestructura`
--

/*!50001 DROP VIEW IF EXISTS `vw_instancia_infraestructura`*/;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `vw_instancia_infraestructura` AS select `i`.`id` AS `instancia_id`,`i`.`codigo_instancia` AS `codigo_instancia`,`i`.`nombre_instancia` AS `nombre_instancia`,`c`.`nombre_cliente` AS `cliente`,`p`.`nombre` AS `producto`,`sa`.`nombre` AS `servidor_app`,`sa`.`ip_publica` AS `ip_servidor_app`,`sd`.`nombre` AS `servidor_db`,`sd`.`ip_publica` AS `ip_servidor_db`,`db`.`nombre_db` AS `nombre_db`,`db`.`charset_db` AS `charset_db`,`db`.`collation_db` AS `collation_db`,`d`.`nombre_dominio` AS `dominio`,`d`.`ssl_activo` AS `ssl_activo`,`m`.`usuarios_activos` AS `usuarios_activos`,`m`.`usuarios_totales` AS `usuarios_totales`,`m`.`cpu_uso` AS `cpu_uso`,`m`.`ram_uso_gb` AS `ram_uso_gb`,`m`.`db_size_gb` AS `db_size_gb`,`m`.`response_ms` AS `response_ms`,`i`.`tiene_contrato` AS `tiene_contrato`,`i`.`valor_contrato` AS `valor_contrato`,`i`.`fecha_registro` AS `fecha_registro`,`i`.`fecha_vencimiento` AS `fecha_vencimiento`,`i`.`estado` AS `estado` from (((((((`instancias` `i` left join `clientes` `c` on(`c`.`id` = `i`.`cliente_id`)) left join `productos` `p` on(`p`.`id` = `i`.`producto_id`)) left join `servidores` `sa` on(`sa`.`id` = `i`.`server_app_id`)) left join `servidores` `sd` on(`sd`.`id` = `i`.`server_db_id`)) left join `instancias_db` `db` on(`db`.`instancia_id` = `i`.`id` and `db`.`activo` = 1)) left join `dominios` `d` on(`d`.`instancia_id` = `i`.`id` and `d`.`principal` = 1 and `d`.`activo` = 1)) left join `instancias_metricas` `m` on(`m`.`instancia_id` = `i`.`id`)) where `i`.`deleted_at` is null */;

--
-- Final view structure for view `vw_instancia_topologia`
--

/*!50001 DROP VIEW IF EXISTS `vw_instancia_topologia`*/;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `vw_instancia_topologia` AS select `i`.`id` AS `instancia_id`,`i`.`codigo_instancia` AS `codigo_instancia`,`i`.`nombre_instancia` AS `nombre_instancia`,`c`.`nombre_cliente` AS `cliente`,`p`.`nombre` AS `producto`,`sa`.`nombre` AS `servidor_app`,`sd`.`nombre` AS `servidor_db`,`db`.`nombre_db` AS `nombre_db`,`db`.`charset_db` AS `charset_db`,`db`.`collation_db` AS `collation_db`,`d`.`nombre_dominio` AS `dominio_principal`,`m`.`usuarios_activos` AS `usuarios_activos`,`m`.`usuarios_totales` AS `usuarios_totales`,`m`.`cpu_uso` AS `cpu_uso`,`m`.`ram_uso_gb` AS `ram_uso_gb`,`m`.`db_size_gb` AS `db_size_gb`,`m`.`response_ms` AS `response_ms`,`i`.`valor_contrato` AS `valor_contrato`,`i`.`fecha_vencimiento` AS `fecha_vencimiento`,`i`.`estado` AS `estado` from (((((((`instancias` `i` left join `clientes` `c` on(`c`.`id` = `i`.`cliente_id`)) left join `productos` `p` on(`p`.`id` = `i`.`producto_id`)) left join `servidores` `sa` on(`sa`.`id` = `i`.`server_app_id`)) left join `servidores` `sd` on(`sd`.`id` = `i`.`server_db_id`)) left join `instancias_db` `db` on(`db`.`instancia_id` = `i`.`id` and `db`.`activo` = 1)) left join `dominios` `d` on(`d`.`instancia_id` = `i`.`id` and `d`.`principal` = 1 and `d`.`activo` = 1)) left join `instancias_metricas` `m` on(`m`.`instancia_id` = `i`.`id`)) where `i`.`deleted_at` is null */;

--
-- Final view structure for view `vw_instancias_general`
--

/*!50001 DROP VIEW IF EXISTS `vw_instancias_general`*/;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `vw_instancias_general` AS select `i`.`id` AS `id`,`i`.`codigo_instancia` AS `codigo_instancia`,`i`.`nombre_instancia` AS `nombre_instancia`,`c`.`nombre_cliente` AS `cliente`,`p`.`nombre` AS `producto`,`sa`.`nombre` AS `servidor_app`,`sd`.`nombre` AS `servidor_db`,`i`.`version_instalada` AS `version_instalada`,`i`.`fecha_registro` AS `fecha_registro`,`i`.`fecha_vencimiento` AS `fecha_vencimiento`,`i`.`estado` AS `estado` from ((((`instancias` `i` left join `clientes` `c` on(`c`.`id` = `i`.`cliente_id`)) left join `productos` `p` on(`p`.`id` = `i`.`producto_id`)) left join `servidores` `sa` on(`sa`.`id` = `i`.`server_app_id`)) left join `servidores` `sd` on(`sd`.`id` = `i`.`server_db_id`)) where `i`.`deleted_at` is null */;

--
-- Final view structure for view `vw_instancias_metricas_actual`
--

/*!50001 DROP VIEW IF EXISTS `vw_instancias_metricas_actual`*/;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `vw_instancias_metricas_actual` AS select `i`.`id` AS `instancia_id`,`i`.`nombre_instancia` AS `nombre_instancia`,`c`.`nombre_cliente` AS `nombre_cliente`,`p`.`nombre` AS `producto`,`m`.`usuarios_activos` AS `usuarios_activos`,`m`.`usuarios_totales` AS `usuarios_totales`,`m`.`almacenamiento_gb` AS `almacenamiento_gb`,`m`.`cpu_uso` AS `cpu_uso`,`m`.`ram_uso_gb` AS `ram_uso_gb`,`m`.`db_size_gb` AS `db_size_gb`,`m`.`response_ms` AS `response_ms`,`m`.`ultima_conexion` AS `ultima_conexion` from (((`instancias` `i` left join `clientes` `c` on(`c`.`id` = `i`.`cliente_id`)) left join `productos` `p` on(`p`.`id` = `i`.`producto_id`)) left join `instancias_metricas` `m` on(`m`.`instancia_id` = `i`.`id`)) where `i`.`deleted_at` is null */;

--
-- Final view structure for view `vw_provisionamiento_instancias`
--

/*!50001 DROP VIEW IF EXISTS `vw_provisionamiento_instancias`*/;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `vw_provisionamiento_instancias` AS select `i`.`id` AS `instancia_id`,`i`.`codigo_instancia` AS `codigo_instancia`,`i`.`nombre_instancia` AS `nombre_instancia`,`c`.`nombre_cliente` AS `nombre_cliente`,`p`.`nombre` AS `producto`,`sa`.`nombre` AS `servidor_app`,`sa`.`ip_publica` AS `ip_app`,`sd`.`nombre` AS `servidor_db`,`sd`.`ip_publica` AS `ip_db`,`db`.`nombre_db` AS `nombre_db`,`db`.`usuario_db` AS `usuario_db`,`d`.`nombre_dominio` AS `nombre_dominio`,`i`.`estado` AS `estado` from ((((((`instancias` `i` left join `clientes` `c` on(`c`.`id` = `i`.`cliente_id`)) left join `productos` `p` on(`p`.`id` = `i`.`producto_id`)) left join `servidores` `sa` on(`sa`.`id` = `i`.`server_app_id`)) left join `servidores` `sd` on(`sd`.`id` = `i`.`server_db_id`)) left join `instancias_db` `db` on(`db`.`instancia_id` = `i`.`id`)) left join `dominios` `d` on(`d`.`instancia_id` = `i`.`id`)) where `i`.`deleted_at` is null */;

--
-- Final view structure for view `vw_saas_control_center`
--

/*!50001 DROP VIEW IF EXISTS `vw_saas_control_center`*/;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `vw_saas_control_center` AS select `i`.`codigo_instancia` AS `codigo_instancia`,`i`.`nombre_instancia` AS `nombre_instancia`,`c`.`nombre_cliente` AS `nombre_cliente`,`p`.`nombre` AS `producto`,`sa`.`nombre` AS `servidor_app`,`sd`.`nombre` AS `servidor_db`,`m`.`usuarios_activos` AS `usuarios_activos`,`m`.`cpu_uso` AS `cpu_uso`,`m`.`ram_uso_gb` AS `ram_uso_gb`,`m`.`db_size_gb` AS `db_size_gb`,`i`.`valor_contrato` AS `valor_contrato`,`i`.`fecha_vencimiento` AS `fecha_vencimiento`,`i`.`estado` AS `estado` from (((((`instancias` `i` left join `clientes` `c` on(`c`.`id` = `i`.`cliente_id`)) left join `productos` `p` on(`p`.`id` = `i`.`producto_id`)) left join `servidores` `sa` on(`sa`.`id` = `i`.`server_app_id`)) left join `servidores` `sd` on(`sd`.`id` = `i`.`server_db_id`)) left join `instancias_metricas` `m` on(`m`.`instancia_id` = `i`.`id`)) where `i`.`deleted_at` is null */;

--
-- Final view structure for view `vw_saas_dashboard`
--

/*!50001 DROP VIEW IF EXISTS `vw_saas_dashboard`*/;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `vw_saas_dashboard` AS select count(distinct `c`.`id`) AS `clientes_activos`,count(distinct `i`.`id`) AS `instancias`,sum(`l`.`max_usuarios`) AS `usuarios_contratados`,sum(`l`.`usuarios_en_uso`) AS `usuarios_en_uso`,sum(`l`.`costo`) AS `MRR`,sum(`l`.`costo`) * 12 AS `ARR` from ((`licencias` `l` join `instancias` `i` on(`l`.`instancia_id` = `i`.`id`)) join `clientes` `c` on(`i`.`cliente_id` = `c`.`id`)) where `l`.`activo` = 1 */;

--
-- Final view structure for view `vw_saas_mrr`
--

/*!50001 DROP VIEW IF EXISTS `vw_saas_mrr`*/;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `vw_saas_mrr` AS select `i`.`id` AS `id`,`i`.`codigo_instancia` AS `codigo_instancia`,`c`.`nombre_cliente` AS `nombre_cliente`,`p`.`nombre` AS `producto`,`i`.`valor_contrato` AS `valor_contrato`,`i`.`fecha_vencimiento` AS `fecha_vencimiento`,`i`.`estado` AS `estado` from ((`instancias` `i` join `clientes` `c` on(`c`.`id` = `i`.`cliente_id`)) join `productos` `p` on(`p`.`id` = `i`.`producto_id`)) where `i`.`tiene_contrato` = 1 and `i`.`deleted_at` is null */;


