-- https://www.phpmyadmin.net/
--
-- Servidor: 127.0.0.1
-- Tiempo de generación: 24-07-2025 a las 01:03:31
-- Versión del servidor: 10.1.29-MariaDB
-- Versión de PHP: 7.2.0

START TRANSACTION;



--
-- Base de datos: `eneagrama`
--

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

--
-- Estructura de tabla para la tabla `activity_logs`
--

CREATE TABLE `activity_logs` (
  `id` int(11) NOT NULL,
  `user_id` int(11) DEFAULT NULL,
  `action` varchar(100) NOT NULL,
  `details` text,
  `ip_address` varchar(45) DEFAULT NULL,
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

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

--
-- Estructura de tabla para la tabla `admin_activity_logs`
--

CREATE TABLE `admin_activity_logs` (
  `id` int(11) NOT NULL,
  `admin_user_id` int(11) NOT NULL,
  `accion` varchar(100) NOT NULL,
  `descripcion` text,
  `ip_address` varchar(45) DEFAULT NULL,
  `user_agent` text,
  `datos_adicionales` text,
  `fecha_creacion` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

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

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

CREATE TABLE `clientes` (
  `id` int(11) NOT NULL,
  `razon_social` varchar(200) NOT NULL,
  `rfc` varchar(20) DEFAULT NULL,
  `calle` varchar(200) NOT NULL,
  `numero_exterior` varchar(20) NOT NULL,
  `numero_interior` varchar(20) DEFAULT '',
  `colonia` varchar(100) NOT NULL,
  `municipio` varchar(100) NOT NULL,
  `estado_direccion` varchar(100) DEFAULT 'Quintana Roo',
  `codigo_postal` varchar(5) DEFAULT '',
  `telefono` varchar(20) DEFAULT '',
  `email` varchar(150) DEFAULT '',
  `contacto_principal` varchar(100) DEFAULT '',
  `estado` enum('activo','inactivo') DEFAULT 'activo',
  `notas` text,
  `usuario_creacion` int(11) DEFAULT NULL,
  `usuario_actualizacion` int(11) DEFAULT NULL,
  `fecha_creacion` datetime DEFAULT CURRENT_TIMESTAMP,
  `fecha_actualizacion` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

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

--
-- Estructura Stand-in para la vista `dashboard_stats`
-- (Véase abajo para la vista actual)
--
CREATE TABLE `dashboard_stats` (
`total_test_requests` bigint(21)
,`completed_tests` bigint(21)
,`requests_last_week` bigint(21)
,`completed_last_week` bigint(21)
,`active_clients` bigint(21)
,`active_admins` bigint(21)
);

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

--
-- Estructura de tabla para la tabla `enneagram_subtypes`
--

CREATE TABLE `enneagram_subtypes` (
  `id` int(11) NOT NULL,
  `nombre` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL,
  `codigo` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
  `descripcion` text COLLATE utf8mb4_unicode_ci,
  `activo` tinyint(1) DEFAULT '1'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `enneagram_types`
--

CREATE TABLE `enneagram_types` (
  `id` int(11) NOT NULL,
  `numero` tinyint(4) NOT NULL,
  `nombre` varchar(50) NOT NULL,
  `descripcion_corta` text,
  `descripcion_larga` text,
  `motivaciones` text,
  `miedos` text,
  `fortalezas` text,
  `areas_crecimiento` text,
  `color_hex` varchar(7) DEFAULT '#000000',
  `activo` tinyint(1) DEFAULT '1',
  `fecha_creacion` datetime DEFAULT CURRENT_TIMESTAMP,
  `fecha_actualizacion` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Disparadores `group_accounts`
--
DELIMITER $$
END
$$
DELIMITER ;
DELIMITER $$
    DECLARE max_accounts INT;
    
    -- Obtener límite máximo de cuentas para el grupo
    SELECT max_cuentas INTO max_accounts 
    FROM test_groups 
    WHERE id = NEW.group_id AND activo = 1;
    
    -- Validar límite
    IF account_count >= max_accounts THEN
        SIGNAL SQLSTATE '45000' 
        SET MESSAGE_TEXT = 'Se ha alcanzado el límite máximo de cuentas para este grupo';
    END IF;
END
$$
DELIMITER ;

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

--
-- Estructura de tabla para la tabla `group_activity_logs`
--

CREATE TABLE `group_activity_logs` (
  `id` int(11) NOT NULL,
  `group_id` int(11) NOT NULL,
  `group_account_id` int(11) DEFAULT NULL,
  `admin_user_id` int(11) DEFAULT NULL,
  `accion` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `descripcion` text COLLATE utf8mb4_unicode_ci,
  `datos_adicionales` text COLLATE utf8mb4_unicode_ci,
  `ip_address` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `user_agent` text COLLATE utf8mb4_unicode_ci,
  `fecha_creacion` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `group_invitations`
--

CREATE TABLE `group_invitations` (
  `id` int(11) NOT NULL,
  `group_id` int(11) NOT NULL,
  `email` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL,
  `nombre_invitado` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `token_invitacion` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `estado` enum('pendiente','aceptada','expirada','cancelada') COLLATE utf8mb4_unicode_ci DEFAULT 'pendiente',
  `fecha_expiracion` datetime NOT NULL,
  `fecha_aceptada` datetime DEFAULT NULL,
  `group_account_id` int(11) DEFAULT NULL,
  `creado_por` int(11) NOT NULL,
  `fecha_creacion` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `fecha_actualizacion` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `grupos`
--

CREATE TABLE `grupos` (
  `id` int(11) NOT NULL,
  `nombre` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
  `descripcion` text COLLATE utf8mb4_unicode_ci,
  `tipo_test_asignado` enum('personal','student','business') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'personal',
  `max_cuentas` int(11) DEFAULT '50' COMMENT 'Máximo de cuentas permitidas en el grupo',
  `max_tests_por_cuenta` int(11) DEFAULT '1' COMMENT 'Máximo de tests por cuenta',
  `fecha_expiracion` datetime DEFAULT NULL COMMENT 'Fecha de expiración del grupo',
  `codigo_acceso` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Código opcional para unirse al grupo',
  `admin_user_id` int(11) NOT NULL COMMENT 'Admin que creó el grupo',
  `activo` tinyint(1) DEFAULT '1',
  `configuracion` text COLLATE utf8mb4_unicode_ci COMMENT 'Configuraciones adicionales en JSON',
  `fecha_creacion` datetime DEFAULT CURRENT_TIMESTAMP,
  `fecha_actualizacion` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `grupo_invitaciones`
--

CREATE TABLE `grupo_invitaciones` (
  `id` int(11) NOT NULL,
  `grupo_id` int(11) NOT NULL,
  `email` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL,
  `token_invitacion` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `nombre_invitado` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `mensaje_personalizado` text COLLATE utf8mb4_unicode_ci,
  `enviado_por` int(11) NOT NULL COMMENT 'Admin que envió la invitación',
  `fecha_envio` datetime DEFAULT CURRENT_TIMESTAMP,
  `fecha_expiracion` datetime NOT NULL,
  `fecha_aceptada` datetime DEFAULT NULL,
  `cuenta_creada_id` int(11) DEFAULT NULL COMMENT 'ID de cuenta creada al aceptar',
  `estado` enum('pendiente','aceptada','expirada','cancelada') COLLATE utf8mb4_unicode_ci DEFAULT 'pendiente'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `grupo_test_resultados`
--

CREATE TABLE `grupo_test_resultados` (
  `id` int(11) NOT NULL,
  `grupo_cuenta_id` int(11) NOT NULL,
  `grupo_id` int(11) NOT NULL,
  `tipo_test` enum('personal','student','business') COLLATE utf8mb4_unicode_ci NOT NULL,
  `resultado_tipo` tinyint(4) DEFAULT NULL COMMENT 'Tipo de enneagrama resultante (1-9)',
  `puntuaciones` text COLLATE utf8mb4_unicode_ci COMMENT 'Puntuaciones detalladas en JSON',
  `respuestas` text COLLATE utf8mb4_unicode_ci COMMENT 'Respuestas del test en JSON',
  `tiempo_invertido` int(11) DEFAULT NULL COMMENT 'Tiempo en minutos',
  `ip_address` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `user_agent` text COLLATE utf8mb4_unicode_ci,
  `fecha_inicio` datetime DEFAULT CURRENT_TIMESTAMP,
  `fecha_completado` datetime DEFAULT NULL,
  `estado` enum('iniciado','completado','abandonado') COLLATE utf8mb4_unicode_ci DEFAULT 'iniciado'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Disparadores `grupo_test_resultados`
--
DELIMITER $$
    END IF;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `tr_validate_test_limits_before_insert` BEFORE INSERT ON `grupo_test_resultados` FOR EACH ROW BEGIN
    DECLARE max_tests INT DEFAULT 1;
    DECLARE current_tests INT DEFAULT 0;
    DECLARE grupo_activo TINYINT DEFAULT 0;
    DECLARE cuenta_activa TINYINT DEFAULT 0;
    
    -- Validar que grupo y cuenta estén activos
    IF grupo_activo = 0 THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'El grupo no está activo';
    END IF;
    
    IF cuenta_activa = 0 THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'La cuenta no está activa';
    END IF;
    
    -- Validar límite de tests
    IF current_tests >= max_tests THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Se ha alcanzado el límite máximo de tests para esta cuenta';
    END IF;
END
$$
DELIMITER ;

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

--
-- Estructura de tabla para la tabla `result_configurations`
--

CREATE TABLE `result_configurations` (
  `id` int(11) NOT NULL,
  `tipo_test` enum('personal','student','business') COLLATE utf8mb4_unicode_ci NOT NULL,
  `idioma` enum('es','en') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'es',
  `eneatipo` int(1) NOT NULL COMMENT 'Número del eneatipo (1-9)',
  `subtipo_id` int(11) DEFAULT NULL COMMENT 'ID del subtipo específico (opcional)',
  `is_for_students` tinyint(1) NOT NULL DEFAULT '0' COMMENT '1 para alumnos, 0 para general/negocios',
  `titulo_principal` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Título principal del resultado',
  `descripcion_corta` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Descripción breve del tipo',
  `descripcion_extendida` longtext COLLATE utf8mb4_unicode_ci COMMENT 'Descripción completa y detallada',
  `caracteristicas_json` longtext COLLATE utf8mb4_unicode_ci COMMENT 'Array JSON de características principales',
  `fortalezas_json` longtext COLLATE utf8mb4_unicode_ci COMMENT 'Array JSON de fortalezas',
  `areas_desarrollo_json` longtext COLLATE utf8mb4_unicode_ci COMMENT 'Array JSON de áreas de desarrollo',
  `consejos_json` longtext COLLATE utf8mb4_unicode_ci COMMENT 'Array JSON de consejos específicos',
  `descripcion_opcional` text COLLATE utf8mb4_unicode_ci COMMENT 'Descripción adicional opcional',
  `activo` tinyint(1) NOT NULL DEFAULT '1',
  `creado_por` int(11) DEFAULT NULL COMMENT 'ID del admin que creó',
  `fecha_creacion` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `fecha_actualizacion` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Configuraciones personalizables de resultados de test';

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

--
-- Estructura de tabla para la tabla `subtype_content`
--

CREATE TABLE `subtype_content` (
  `id` int(11) NOT NULL,
  `result_config_id` int(11) NOT NULL COMMENT 'FK a result_configurations',
  `subtipo_id` int(11) NOT NULL COMMENT 'ID del subtipo',
  `titulo_subtipo` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Título del subtipo',
  `descripcion_subtipo` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Descripción específica del subtipo',
  `caracteristicas_subtipo_json` longtext COLLATE utf8mb4_unicode_ci COMMENT 'Características específicas del subtipo',
  `consejos_subtipo_json` longtext COLLATE utf8mb4_unicode_ci COMMENT 'Consejos específicos para el subtipo',
  `activo` tinyint(1) NOT NULL DEFAULT '1',
  `fecha_creacion` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `fecha_actualizacion` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Contenido adicional específico por subtipo';

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

--
-- Estructura de tabla para la tabla `system_config`
--

CREATE TABLE `system_config` (
  `id` int(11) NOT NULL,
  `config_key` varchar(100) NOT NULL,
  `config_value` text,
  `descripcion` text,
  `tipo` enum('string','number','boolean','json') DEFAULT 'string',
  `fecha_actualizacion` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

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

--
-- Estructura Stand-in para la vista `tests_by_type`
-- (Véase abajo para la vista actual)
--
CREATE TABLE `tests_by_type` (
`tipo_test` enum('personal','student','business')
,`total_requests` bigint(21)
,`completed` bigint(21)
,`completion_rate` decimal(26,2)
);

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

--
-- Estructura de tabla para la tabla `test_groups`
--

CREATE TABLE `test_groups` (
  `id` int(11) NOT NULL,
  `nombre` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `descripcion` text COLLATE utf8mb4_unicode_ci,
  `tipo_test_asignado` enum('personal','student','business') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'personal',
  `max_cuentas` int(11) NOT NULL DEFAULT '50',
  `max_tests_por_cuenta` int(11) NOT NULL DEFAULT '1',
  `codigo_acceso` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `fecha_expiracion` datetime NOT NULL,
  `activo` tinyint(1) DEFAULT '1',
  `fecha_creacion` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `fecha_actualizacion` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `creado_por` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

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

--
-- Estructura de tabla para la tabla `test_options`
--

CREATE TABLE `test_options` (
  `id` int(11) NOT NULL,
  `question_id` int(11) NOT NULL,
  `opcion_texto` text NOT NULL,
  `valor_tipo1` tinyint(4) DEFAULT '0',
  `valor_tipo2` tinyint(4) DEFAULT '0',
  `valor_tipo3` tinyint(4) DEFAULT '0',
  `valor_tipo4` tinyint(4) DEFAULT '0',
  `valor_tipo5` tinyint(4) DEFAULT '0',
  `valor_tipo6` tinyint(4) DEFAULT '0',
  `valor_tipo7` tinyint(4) DEFAULT '0',
  `valor_tipo8` tinyint(4) DEFAULT '0',
  `valor_tipo9` tinyint(4) DEFAULT '0',
  `orden_opcion` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

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

--
-- Estructura de tabla para la tabla `test_questions`
--

CREATE TABLE `test_questions` (
  `id` int(11) NOT NULL,
  `pregunta` text NOT NULL,
  `tipo_test` enum('personal','student','business') NOT NULL,
  `orden_pregunta` int(11) NOT NULL,
  `activa` tinyint(1) DEFAULT '1',
  `fecha_creacion` datetime DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

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

--
-- Estructura de tabla para la tabla `test_questions_base`
--

CREATE TABLE `test_questions_base` (
  `id` int(11) NOT NULL,
  `codigo_pregunta` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Código único ej: P001, P002',
  `concepto_clave` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Concepto que evalúa la pregunta',
  `eneatipo` tinyint(4) NOT NULL COMMENT 'Eneatipo al que pertenece (1-9)',
  `subtipo_id` int(11) NOT NULL COMMENT 'ID del subtipo',
  `categoria` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Categoría de la pregunta',
  `orden_global` int(11) NOT NULL COMMENT 'Orden global en el test',
  `activa` tinyint(1) DEFAULT '1',
  `fecha_creacion` datetime DEFAULT CURRENT_TIMESTAMP,
  `fecha_actualizacion` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `creado_por` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Preguntas base del sistema';

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

--
-- Estructura de tabla para la tabla `test_questions_variants`
--

CREATE TABLE `test_questions_variants` (
  `id` int(11) NOT NULL,
  `question_base_id` int(11) NOT NULL COMMENT 'ID de la pregunta base',
  `tipo_test` enum('personal','student','business') COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Tipo de test',
  `idioma` enum('es','en') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'es' COMMENT 'Idioma de la pregunta',
  `texto_pregunta` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Texto de la pregunta',
  `notas_redaccion` text COLLATE utf8mb4_unicode_ci COMMENT 'Notas sobre la redacción',
  `activa` tinyint(1) DEFAULT '1',
  `fecha_creacion` datetime DEFAULT CURRENT_TIMESTAMP,
  `fecha_actualizacion` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `creado_por` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Variaciones de redacción por tipo e idioma';

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

--
-- Estructura de tabla para la tabla `test_question_responses`
--

CREATE TABLE `test_question_responses` (
  `id` int(11) NOT NULL,
  `question_base_id` int(11) NOT NULL,
  `scale_id` int(11) NOT NULL DEFAULT '1',
  `valor_respuesta` tinyint(4) NOT NULL COMMENT 'Valor de la respuesta (1-5)',
  `etiqueta_es` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Etiqueta en español',
  `etiqueta_en` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Etiqueta en inglés',
  `valor_tipo1` tinyint(4) DEFAULT '0',
  `valor_tipo2` tinyint(4) DEFAULT '0',
  `valor_tipo3` tinyint(4) DEFAULT '0',
  `valor_tipo4` tinyint(4) DEFAULT '0',
  `valor_tipo5` tinyint(4) DEFAULT '0',
  `valor_tipo6` tinyint(4) DEFAULT '0',
  `valor_tipo7` tinyint(4) DEFAULT '0',
  `valor_tipo8` tinyint(4) DEFAULT '0',
  `valor_tipo9` tinyint(4) DEFAULT '0',
  `orden_respuesta` tinyint(4) NOT NULL,
  `activa` tinyint(1) DEFAULT '1',
  `fecha_creacion` datetime DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Opciones de respuesta para preguntas base';

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

--
-- Estructura de tabla para la tabla `test_question_scales`
--

CREATE TABLE `test_question_scales` (
  `id` int(11) NOT NULL,
  `nombre` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Nombre de la escala',
  `descripcion` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `tipo` enum('likert','custom') COLLATE utf8mb4_unicode_ci DEFAULT 'likert',
  `valores_json` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'JSON con valores y etiquetas',
  `activa` tinyint(1) DEFAULT '1',
  `fecha_creacion` datetime DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Escalas de respuesta para preguntas';

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

--
-- Estructura de tabla para la tabla `user_tests`
--

CREATE TABLE `user_tests` (
  `id` int(11) NOT NULL,
  `user_id` int(11) DEFAULT NULL,
  `group_account_id` int(11) DEFAULT NULL,
  `request_id` int(11) DEFAULT NULL,
  `email_guest` varchar(150) DEFAULT NULL,
  `tipo_test` enum('personal','student','business') NOT NULL,
  `resultado_tipo` tinyint(4) DEFAULT NULL,
  `puntuaciones` text,
  `respuestas` text,
  `fecha_inicio` datetime DEFAULT CURRENT_TIMESTAMP,
  `fecha_completado` datetime DEFAULT NULL,
  `pagado` tinyint(1) DEFAULT '0',
  `precio` decimal(10,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Disparadores `user_tests`
--
DELIMITER $$
    END IF;
END
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `validate_tests_per_account_limit` BEFORE INSERT ON `user_tests` FOR EACH ROW BEGIN
    DECLARE test_count INT;
    DECLARE max_tests INT;
        
        -- Contar tests actuales de la cuenta
        SELECT COUNT(*) INTO test_count
        FROM user_tests
        WHERE group_account_id = NEW.group_account_id;
        
        -- Validar límite
        IF test_count >= max_tests THEN
            SIGNAL SQLSTATE '45000' 
            SET MESSAGE_TEXT = 'Se ha alcanzado el límite máximo de tests para esta cuenta';
        END IF;
    END IF;
END
$$
DELIMITER ;



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

--
-- Estructura Stand-in para la vista `vista_estadisticas_grupos`
-- (Véase abajo para la vista actual)
--
CREATE TABLE `vista_estadisticas_grupos` (
`id` int(11)
,`nombre` varchar(100)
,`descripcion` text
,`tipo_test_asignado` enum('personal','student','business')
,`max_cuentas` int(11)
,`max_tests_por_cuenta` int(11)
,`codigo_acceso` varchar(20)
,`fecha_expiracion` datetime
,`activo` tinyint(1)
,`fecha_creacion` timestamp
,`creado_por_nombre` varchar(100)
,`total_cuentas` bigint(21)
,`cuentas_activas` bigint(21)
,`tests_realizados` bigint(21)
,`tests_completados` bigint(21)
,`porcentaje_completados` decimal(26,2)
,`tiempo_promedio_minutos` decimal(23,2)
);

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

--
-- Estructura Stand-in para la vista `vista_estadisticas_preguntas`
-- (Véase abajo para la vista actual)
--
CREATE TABLE `vista_estadisticas_preguntas` (
`eneatipo` tinyint(4)
,`subtipo_nombre` varchar(20)
,`subtipo_codigo` varchar(10)
,`total_preguntas` bigint(21)
,`tipos_test_disponibles` bigint(21)
,`variaciones_espanol` bigint(21)
,`variaciones_ingles` bigint(21)
);

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

--
-- Estructura Stand-in para la vista `vista_grupos_estadisticas`
-- (Véase abajo para la vista actual)
--
CREATE TABLE `vista_grupos_estadisticas` (
`id` int(11)
,`nombre` varchar(200)
,`tipo_test_asignado` enum('personal','student','business')
,`max_cuentas` int(11)
,`fecha_expiracion` datetime
,`activo` tinyint(1)
,`total_cuentas` bigint(21)
,`cuentas_activas` bigint(21)
,`total_tests_realizados` bigint(21)
,`tests_completados` bigint(21)
,`tiempo_promedio_minutos` decimal(13,2)
,`fecha_creacion` datetime
);

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

--
-- Estructura Stand-in para la vista `vista_grupos_resultados_tipos`
-- (Véase abajo para la vista actual)
--
CREATE TABLE `vista_grupos_resultados_tipos` (
`grupo_id` int(11)
,`grupo_nombre` varchar(200)
,`tipo_numero` tinyint(4)
,`tipo_nombre` varchar(50)
,`cantidad_resultados` bigint(21)
,`porcentaje` decimal(26,2)
);

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

--
-- Estructura Stand-in para la vista `vista_preguntas_completas`
-- (Véase abajo para la vista actual)
--
CREATE TABLE `vista_preguntas_completas` (
`question_base_id` int(11)
,`codigo_pregunta` varchar(20)
,`concepto_clave` varchar(100)
,`categoria` varchar(50)
,`orden_global` int(11)
,`variant_id` int(11)
,`tipo_test` enum('personal','student','business')
,`idioma` enum('es','en')
,`texto_pregunta` text
,`notas_redaccion` text
,`base_activa` tinyint(1)
,`variant_activa` tinyint(1)
,`fecha_creacion_base` datetime
,`fecha_creacion_variant` datetime
);

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

--
-- Estructura Stand-in para la vista `vista_preguntas_con_respuestas`
-- (Véase abajo para la vista actual)
--
CREATE TABLE `vista_preguntas_con_respuestas` (
`question_base_id` int(11)
,`codigo_pregunta` varchar(20)
,`concepto_clave` varchar(100)
,`orden_global` int(11)
,`tipo_test` enum('personal','student','business')
,`idioma` enum('es','en')
,`texto_pregunta` text
,`response_id` int(11)
,`valor_respuesta` tinyint(4)
,`etiqueta_es` varchar(50)
,`etiqueta_en` varchar(50)
,`valor_tipo1` tinyint(4)
,`valor_tipo2` tinyint(4)
,`valor_tipo3` tinyint(4)
,`valor_tipo4` tinyint(4)
,`valor_tipo5` tinyint(4)
,`valor_tipo6` tinyint(4)
,`valor_tipo7` tinyint(4)
,`valor_tipo8` tinyint(4)
,`valor_tipo9` tinyint(4)
,`orden_respuesta` tinyint(4)
);

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

--
-- Estructura para la vista `dashboard_stats`
--

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

--
-- Estructura para la vista `tests_by_type`
--

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

--
-- Estructura para la vista `vista_cuentas_grupos`
--

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

--
-- Estructura para la vista `vista_estadisticas_grupos`
--

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

--
-- Estructura para la vista `vista_estadisticas_preguntas`
--

CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `vista_estadisticas_preguntas`  AS  select `qb`.`eneatipo` AS `eneatipo`,`st`.`nombre` AS `subtipo_nombre`,`st`.`codigo` AS `subtipo_codigo`,count(0) AS `total_preguntas`,count(distinct `qv`.`tipo_test`) AS `tipos_test_disponibles`,count((case when (`qv`.`idioma` = 'es') then 1 end)) AS `variaciones_espanol`,count((case when (`qv`.`idioma` = 'en') then 1 end)) AS `variaciones_ingles` from ((`test_questions_base` `qb` left join `enneagram_subtypes` `st` on((`qb`.`subtipo_id` = `st`.`id`))) left join `test_questions_variants` `qv` on((`qb`.`id` = `qv`.`question_base_id`))) where (`qb`.`activa` = 1) group by `qb`.`eneatipo`,`st`.`id` order by `qb`.`eneatipo`,`st`.`id` ;

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

--
-- Estructura para la vista `vista_grupos_estadisticas`
--

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

--
-- Estructura para la vista `vista_grupos_resultados_tipos`
--

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

--
-- Estructura para la vista `vista_preguntas_completas`
--

CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `vista_preguntas_completas`  AS  select `qb`.`id` AS `question_base_id`,`qb`.`codigo_pregunta` AS `codigo_pregunta`,`qb`.`concepto_clave` AS `concepto_clave`,`qb`.`categoria` AS `categoria`,`qb`.`orden_global` AS `orden_global`,`qv`.`id` AS `variant_id`,`qv`.`tipo_test` AS `tipo_test`,`qv`.`idioma` AS `idioma`,`qv`.`texto_pregunta` AS `texto_pregunta`,`qv`.`notas_redaccion` AS `notas_redaccion`,`qb`.`activa` AS `base_activa`,`qv`.`activa` AS `variant_activa`,`qb`.`fecha_creacion` AS `fecha_creacion_base`,`qv`.`fecha_creacion` AS `fecha_creacion_variant` from (`test_questions_base` `qb` left join `test_questions_variants` `qv` on((`qb`.`id` = `qv`.`question_base_id`))) where (`qb`.`activa` = 1) order by `qb`.`orden_global`,`qv`.`tipo_test`,`qv`.`idioma` ;

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

--
-- Estructura para la vista `vista_preguntas_con_respuestas`
--

CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `vista_preguntas_con_respuestas`  AS  select `qb`.`id` AS `question_base_id`,`qb`.`codigo_pregunta` AS `codigo_pregunta`,`qb`.`concepto_clave` AS `concepto_clave`,`qb`.`orden_global` AS `orden_global`,`qv`.`tipo_test` AS `tipo_test`,`qv`.`idioma` AS `idioma`,`qv`.`texto_pregunta` AS `texto_pregunta`,`qr`.`id` AS `response_id`,`qr`.`valor_respuesta` AS `valor_respuesta`,`qr`.`etiqueta_es` AS `etiqueta_es`,`qr`.`etiqueta_en` AS `etiqueta_en`,`qr`.`valor_tipo1` AS `valor_tipo1`,`qr`.`valor_tipo2` AS `valor_tipo2`,`qr`.`valor_tipo3` AS `valor_tipo3`,`qr`.`valor_tipo4` AS `valor_tipo4`,`qr`.`valor_tipo5` AS `valor_tipo5`,`qr`.`valor_tipo6` AS `valor_tipo6`,`qr`.`valor_tipo7` AS `valor_tipo7`,`qr`.`valor_tipo8` AS `valor_tipo8`,`qr`.`valor_tipo9` AS `valor_tipo9`,`qr`.`orden_respuesta` AS `orden_respuesta` from ((`test_questions_base` `qb` join `test_questions_variants` `qv` on((`qb`.`id` = `qv`.`question_base_id`))) join `test_question_responses` `qr` on((`qb`.`id` = `qr`.`question_base_id`))) where ((`qb`.`activa` = 1) and (`qv`.`activa` = 1) and (`qr`.`activa` = 1)) order by `qb`.`orden_global`,`qr`.`orden_respuesta` ;

--
-- Índices para tablas volcadas
--

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

--
-- Indices de la tabla `admin_activity_logs`
--
ALTER TABLE `admin_activity_logs`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_admin_user` (`admin_user_id`),
  ADD KEY `idx_accion` (`accion`),
  ADD KEY `idx_fecha` (`fecha_creacion`);

--
-- Indices de la tabla `clientes`
--
ALTER TABLE `clientes`
  ADD PRIMARY KEY (`id`),
  ADD KEY `usuario_creacion` (`usuario_creacion`),
  ADD KEY `usuario_actualizacion` (`usuario_actualizacion`),
  ADD KEY `idx_rfc` (`rfc`),
  ADD KEY `idx_estado` (`estado`),
  ADD KEY `idx_municipio` (`municipio`);

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

--
-- Indices de la tabla `enneagram_types`
--
ALTER TABLE `enneagram_types`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `numero` (`numero`);

--
-- Indices de la tabla `group_activity_logs`
--
ALTER TABLE `group_activity_logs`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_group_id` (`group_id`),
  ADD KEY `idx_group_account_id` (`group_account_id`),
  ADD KEY `idx_admin_user_id` (`admin_user_id`),
  ADD KEY `idx_accion` (`accion`),
  ADD KEY `idx_fecha_creacion` (`fecha_creacion`),
  ADD KEY `idx_group_activity_group_date` (`group_id`,`fecha_creacion`);

--
-- Indices de la tabla `group_invitations`
--
ALTER TABLE `group_invitations`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_group_id` (`group_id`),
  ADD KEY `idx_email` (`email`),
  ADD KEY `idx_estado` (`estado`),
  ADD KEY `idx_fecha_expiracion` (`fecha_expiracion`),
  ADD KEY `idx_creado_por` (`creado_por`),
  ADD KEY `fk_invitations_account` (`group_account_id`);

--
-- Indices de la tabla `grupos`
--
ALTER TABLE `grupos`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `codigo_acceso` (`codigo_acceso`),
  ADD KEY `idx_admin_user` (`admin_user_id`),
  ADD KEY `idx_tipo_test` (`tipo_test_asignado`),
  ADD KEY `idx_activo` (`activo`),
  ADD KEY `idx_codigo` (`codigo_acceso`),
  ADD KEY `idx_grupos_admin_activo` (`admin_user_id`,`activo`);

--
-- Indices de la tabla `grupo_invitaciones`
--
ALTER TABLE `grupo_invitaciones`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_grupo` (`grupo_id`),
  ADD KEY `idx_email` (`email`),
  ADD KEY `idx_token` (`token_invitacion`(191)),
  ADD KEY `idx_estado` (`estado`),
  ADD KEY `idx_enviado_por` (`enviado_por`),
  ADD KEY `idx_cuenta_creada` (`cuenta_creada_id`);

--
-- Indices de la tabla `grupo_test_resultados`
--
ALTER TABLE `grupo_test_resultados`
  ADD PRIMARY KEY (`id`),
  ADD KEY `idx_cuenta` (`grupo_cuenta_id`),
  ADD KEY `idx_grupo` (`grupo_id`),
  ADD KEY `idx_resultado` (`resultado_tipo`),
  ADD KEY `idx_estado` (`estado`),
  ADD KEY `idx_fecha_completado` (`fecha_completado`),
  ADD KEY `idx_resultados_cuenta_estado` (`grupo_cuenta_id`,`estado`),
  ADD KEY `idx_resultados_grupo_completado` (`grupo_id`,`estado`,`fecha_completado`);

--
-- Indices de la tabla `result_configurations`
--
ALTER TABLE `result_configurations`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `unique_config` (`tipo_test`,`idioma`,`eneatipo`,`subtipo_id`,`is_for_students`),
  ADD KEY `idx_tipo_test` (`tipo_test`),
  ADD KEY `idx_idioma` (`idioma`),
  ADD KEY `idx_eneatipo` (`eneatipo`),
  ADD KEY `idx_subtipo` (`subtipo_id`),
  ADD KEY `idx_activo` (`activo`),
  ADD KEY `fk_result_config_admin` (`creado_por`);

--
-- Indices de la tabla `subtype_content`
--
ALTER TABLE `subtype_content`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `unique_subtype_content` (`result_config_id`,`subtipo_id`),
  ADD KEY `idx_subtipo_id` (`subtipo_id`);

--
-- Indices de la tabla `system_config`
--
ALTER TABLE `system_config`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `config_key` (`config_key`),
  ADD KEY `idx_key` (`config_key`);

--
-- Indices de la tabla `test_groups`
--
ALTER TABLE `test_groups`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uk_nombre` (`nombre`),
  ADD UNIQUE KEY `uk_codigo_acceso` (`codigo_acceso`),
  ADD KEY `idx_tipo_test` (`tipo_test_asignado`),
  ADD KEY `idx_activo` (`activo`),
  ADD KEY `idx_fecha_expiracion` (`fecha_expiracion`),
  ADD KEY `idx_creado_por` (`creado_por`),
  ADD KEY `idx_test_groups_active_expiration` (`activo`,`fecha_expiracion`),
  ADD KEY `idx_test_groups_search` (`nombre`,`descripcion`(100));

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

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

--
-- Indices de la tabla `test_questions_base`
--
ALTER TABLE `test_questions_base`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uk_codigo_pregunta` (`codigo_pregunta`),
  ADD KEY `idx_orden_global` (`orden_global`),
  ADD KEY `idx_activa` (`activa`),
  ADD KEY `idx_categoria` (`categoria`),
  ADD KEY `idx_creado_por` (`creado_por`),
  ADD KEY `idx_eneatipo` (`eneatipo`),
  ADD KEY `idx_subtipo` (`subtipo_id`);

--
-- Indices de la tabla `test_questions_variants`
--
ALTER TABLE `test_questions_variants`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uk_question_type_lang` (`question_base_id`,`tipo_test`,`idioma`),
  ADD KEY `idx_question_base` (`question_base_id`),
  ADD KEY `idx_tipo_test` (`tipo_test`),
  ADD KEY `idx_idioma` (`idioma`),
  ADD KEY `idx_activa` (`activa`),
  ADD KEY `idx_creado_por` (`creado_por`);

--
-- Indices de la tabla `test_question_responses`
--
ALTER TABLE `test_question_responses`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uk_question_valor` (`question_base_id`,`valor_respuesta`),
  ADD KEY `idx_question_base` (`question_base_id`),
  ADD KEY `idx_scale` (`scale_id`),
  ADD KEY `idx_valor_respuesta` (`valor_respuesta`),
  ADD KEY `idx_activa` (`activa`);

--
-- Indices de la tabla `test_question_scales`
--
ALTER TABLE `test_question_scales`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `uk_nombre_escala` (`nombre`),
  ADD KEY `idx_activa` (`activa`);

--
-- Indices de la tabla `user_tests`
--
ALTER TABLE `user_tests`
  ADD PRIMARY KEY (`id`),
  ADD KEY `user_id` (`user_id`),
  ADD KEY `request_id` (`request_id`),
  ADD KEY `resultado_tipo` (`resultado_tipo`),
  ADD KEY `idx_group_account_id` (`group_account_id`),
  ADD KEY `idx_user_tests_group_account_completed` (`group_account_id`,`fecha_completado`);

--
-- AUTO_INCREMENT de las tablas volcadas
--

--
-- AUTO_INCREMENT de la tabla `activity_logs`
--
ALTER TABLE `activity_logs`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;

--
-- AUTO_INCREMENT de la tabla `admin_activity_logs`
--
ALTER TABLE `admin_activity_logs`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10;

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

--
-- AUTO_INCREMENT de la tabla `enneagram_subtypes`
--
ALTER TABLE `enneagram_subtypes`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;

--
-- AUTO_INCREMENT de la tabla `enneagram_types`
--
ALTER TABLE `enneagram_types`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10;

--
-- AUTO_INCREMENT de la tabla `group_activity_logs`
--
ALTER TABLE `group_activity_logs`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;

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

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

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

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

--
-- AUTO_INCREMENT de la tabla `result_configurations`
--
ALTER TABLE `result_configurations`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=13;

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

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

--
-- AUTO_INCREMENT de la tabla `test_groups`
--
ALTER TABLE `test_groups`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;

--
-- AUTO_INCREMENT de la tabla `test_options`
--
ALTER TABLE `test_options`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6;

--
-- AUTO_INCREMENT de la tabla `test_questions`
--
ALTER TABLE `test_questions`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6;

--
-- AUTO_INCREMENT de la tabla `test_questions_base`
--
ALTER TABLE `test_questions_base`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=181;

--
-- AUTO_INCREMENT de la tabla `test_questions_variants`
--
ALTER TABLE `test_questions_variants`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=461;

--
-- AUTO_INCREMENT de la tabla `test_question_responses`
--
ALTER TABLE `test_question_responses`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=931;

--
-- AUTO_INCREMENT de la tabla `test_question_scales`
--
ALTER TABLE `test_question_scales`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;

--
-- AUTO_INCREMENT de la tabla `user_tests`
--
ALTER TABLE `user_tests`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=16;

--
-- Restricciones para tablas volcadas
--

--
-- Filtros para la tabla `activity_logs`
--
ALTER TABLE `activity_logs`
  ADD CONSTRAINT `activity_logs_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `usuarios` (`id`) ON DELETE SET NULL;

--
-- Filtros para la tabla `admin_activity_logs`
--
ALTER TABLE `admin_activity_logs`
  ADD CONSTRAINT `admin_activity_logs_ibfk_1` FOREIGN KEY (`admin_user_id`) REFERENCES `admin_users` (`id`) ON DELETE CASCADE;

--
-- Filtros para la tabla `clientes`
--
ALTER TABLE `clientes`
  ADD CONSTRAINT `clientes_ibfk_1` FOREIGN KEY (`usuario_creacion`) REFERENCES `usuarios` (`id`),
  ADD CONSTRAINT `clientes_ibfk_2` FOREIGN KEY (`usuario_actualizacion`) REFERENCES `usuarios` (`id`);

--
-- Filtros para la tabla `group_activity_logs`
--
ALTER TABLE `group_activity_logs`
  ADD CONSTRAINT `fk_group_logs_account` FOREIGN KEY (`group_account_id`) REFERENCES `group_accounts` (`id`) ON DELETE SET NULL,
  ADD CONSTRAINT `fk_group_logs_admin` FOREIGN KEY (`admin_user_id`) REFERENCES `admin_users` (`id`) ON DELETE SET NULL,
  ADD CONSTRAINT `fk_group_logs_group` FOREIGN KEY (`group_id`) REFERENCES `test_groups` (`id`) ON DELETE CASCADE;

--
-- Filtros para la tabla `group_invitations`
--
ALTER TABLE `group_invitations`
  ADD CONSTRAINT `fk_invitations_account` FOREIGN KEY (`group_account_id`) REFERENCES `group_accounts` (`id`) ON DELETE SET NULL,
  ADD CONSTRAINT `fk_invitations_creado_por` FOREIGN KEY (`creado_por`) REFERENCES `admin_users` (`id`),
  ADD CONSTRAINT `fk_invitations_group` FOREIGN KEY (`group_id`) REFERENCES `test_groups` (`id`) ON DELETE CASCADE;

--
-- Filtros para la tabla `grupos`
--
ALTER TABLE `grupos`
  ADD CONSTRAINT `fk_grupos_admin` FOREIGN KEY (`admin_user_id`) REFERENCES `admin_users` (`id`) ON DELETE CASCADE;

--
-- Filtros para la tabla `grupo_invitaciones`
--
ALTER TABLE `grupo_invitaciones`
  ADD CONSTRAINT `fk_invitaciones_admin` FOREIGN KEY (`enviado_por`) REFERENCES `admin_users` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `fk_invitaciones_cuenta` FOREIGN KEY (`cuenta_creada_id`) REFERENCES `grupo_cuentas` (`id`) ON DELETE SET NULL,
  ADD CONSTRAINT `fk_invitaciones_grupo` FOREIGN KEY (`grupo_id`) REFERENCES `grupos` (`id`) ON DELETE CASCADE;

--
-- Filtros para la tabla `grupo_test_resultados`
--
ALTER TABLE `grupo_test_resultados`
  ADD CONSTRAINT `fk_resultados_cuenta` FOREIGN KEY (`grupo_cuenta_id`) REFERENCES `grupo_cuentas` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `fk_resultados_grupo` FOREIGN KEY (`grupo_id`) REFERENCES `grupos` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `fk_resultados_tipo` FOREIGN KEY (`resultado_tipo`) REFERENCES `enneagram_types` (`numero`) ON DELETE SET NULL;

--
-- Filtros para la tabla `result_configurations`
--
ALTER TABLE `result_configurations`
  ADD CONSTRAINT `fk_result_config_admin` FOREIGN KEY (`creado_por`) REFERENCES `admin_users` (`id`) ON DELETE SET NULL,
  ADD CONSTRAINT `fk_result_config_subtipo` FOREIGN KEY (`subtipo_id`) REFERENCES `enneagram_subtypes` (`id`) ON DELETE SET NULL;

--
-- Filtros para la tabla `subtype_content`
--
ALTER TABLE `subtype_content`
  ADD CONSTRAINT `fk_subtype_content_config` FOREIGN KEY (`result_config_id`) REFERENCES `result_configurations` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `fk_subtype_content_subtipo` FOREIGN KEY (`subtipo_id`) REFERENCES `enneagram_subtypes` (`id`) ON DELETE CASCADE;

--
-- Filtros para la tabla `test_groups`
--
ALTER TABLE `test_groups`
  ADD CONSTRAINT `fk_test_groups_creado_por` FOREIGN KEY (`creado_por`) REFERENCES `admin_users` (`id`);

--
-- Filtros para la tabla `test_options`
--
ALTER TABLE `test_options`
  ADD CONSTRAINT `test_options_ibfk_1` FOREIGN KEY (`question_id`) REFERENCES `test_questions` (`id`) ON DELETE CASCADE;

--
-- Filtros para la tabla `test_questions_base`
--
ALTER TABLE `test_questions_base`
  ADD CONSTRAINT `fk_questions_subtipo` FOREIGN KEY (`subtipo_id`) REFERENCES `enneagram_subtypes` (`id`);

--
-- Filtros para la tabla `test_questions_variants`
--
ALTER TABLE `test_questions_variants`
  ADD CONSTRAINT `fk_variants_base` FOREIGN KEY (`question_base_id`) REFERENCES `test_questions_base` (`id`) ON DELETE CASCADE;

--
-- Filtros para la tabla `test_question_responses`
--
ALTER TABLE `test_question_responses`
  ADD CONSTRAINT `fk_responses_base` FOREIGN KEY (`question_base_id`) REFERENCES `test_questions_base` (`id`) ON DELETE CASCADE,
  ADD CONSTRAINT `fk_responses_scale` FOREIGN KEY (`scale_id`) REFERENCES `test_question_scales` (`id`);

--
-- Filtros para la tabla `user_tests`
--
ALTER TABLE `user_tests`
  ADD CONSTRAINT `fk_user_tests_group_account` FOREIGN KEY (`group_account_id`) REFERENCES `group_accounts` (`id`) ON DELETE SET NULL,
  ADD CONSTRAINT `user_tests_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `usuarios` (`id`) ON DELETE SET NULL,
  ADD CONSTRAINT `user_tests_ibfk_2` FOREIGN KEY (`request_id`) REFERENCES `test_requests` (`id`) ON DELETE SET NULL,
  ADD CONSTRAINT `user_tests_ibfk_3` FOREIGN KEY (`resultado_tipo`) REFERENCES `enneagram_types` (`numero`);
COMMIT;

