workspace/projects/gamilit/orchestration/agentes/architecture-analyst/audit-database-2025-12-14/08C-SEEDS-P1-RECOMENDACIONES.md
rckrdmrd 608e1e2a2e
Some checks are pending
CI Pipeline / changes (push) Waiting to run
CI Pipeline / core (push) Blocked by required conditions
CI Pipeline / trading-backend (push) Blocked by required conditions
CI Pipeline / trading-data-service (push) Blocked by required conditions
CI Pipeline / trading-frontend (push) Blocked by required conditions
CI Pipeline / erp-core (push) Blocked by required conditions
CI Pipeline / erp-mecanicas (push) Blocked by required conditions
CI Pipeline / gamilit-backend (push) Blocked by required conditions
CI Pipeline / gamilit-frontend (push) Blocked by required conditions
Multi-project update: gamilit, orchestration, trading-platform
Gamilit:
- Backend: Teacher services, assignments, gamification, exercise submissions
- Frontend: Admin/Teacher/Student portals, module 4-5 mechanics, monitoring
- Database: DDL functions, seeds for dev/prod, auth/gamification schemas
- Docs: Architecture, features, guides cleanup and reorganization

Core/Orchestration:
- New workspace directives index
- Documentation directive

Trading-platform:
- Database seeds and inventory updates
- Tech leader validation report

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 07:17:46 -06:00

19 KiB

RECOMENDACIONES SEEDS P1 - ALTA PRIORIDAD

Fecha: 2025-12-14 Prioridad: P1 - ALTA Fase: 2 (Semana 2-3)


SEEDS ALTA PRIORIDAD A IMPLEMENTAR (10 tablas)

RESUMEN

Schema Tabla Archivo Recomendado Registros Est. Impacto
auth_management user_preferences 08-user_preferences_defaults.sql 5-10 Preferencias por defecto
content_management content_categories 03-content_categories.sql 8-12 Categorización contenido
content_management moderation_rules 04-moderation_rules.sql 10-15 Moderación automática
educational_content content_tags 13-content_tags.sql 30-50 Sistema de etiquetado
educational_content media_resources 14-media_resources.sql 15-25 Recursos multimedia
progress_tracking learning_paths 02-learning_paths.sql 5-8 Rutas de aprendizaje
system_configuration api_configuration 05-api_configuration.sql 5-10 APIs externas
system_configuration environment_config 06-environment_config.sql 15-20 Config por ambiente

1. auth_management/08-user_preferences_defaults.sql

Tabla: auth_management.user_preferences Impacto: Preferencias por defecto faltantes Registros: 5-10 configuraciones base

Contenido Sugerido

-- =====================================================
-- SEED: User Preferences Defaults
-- Schema: auth_management
-- Tabla: user_preferences
-- Prioridad: P1 - ALTA
-- =====================================================

TRUNCATE TABLE auth_management.user_preferences RESTART IDENTITY CASCADE;

-- Preferencias por defecto para nuevos usuarios STUDENT
INSERT INTO auth_management.user_preferences (
    user_id,
    preferences,
    created_at,
    updated_at
)
SELECT
    u.id,
    jsonb_build_object(
        'theme', 'light',
        'language', 'es',
        'timezone', 'America/Mexico_City',
        'notifications', jsonb_build_object(
            'email', true,
            'push', true,
            'in_app', true,
            'digest_frequency', 'daily'
        ),
        'accessibility', jsonb_build_object(
            'high_contrast', false,
            'font_size', 'medium',
            'screen_reader', false
        ),
        'privacy', jsonb_build_object(
            'show_profile', true,
            'show_progress', true,
            'allow_friend_requests', true
        )
    ),
    now(),
    now()
FROM auth.users u
WHERE NOT EXISTS (
    SELECT 1 FROM auth_management.user_preferences up
    WHERE up.user_id = u.id
);

Valores por Rol

  • Student: notificaciones habilitadas, perfil público
  • Teacher: notificaciones digest semanal, perfil público
  • Admin: notificaciones críticas only, perfil privado
  • Parent: notificaciones de hijos habilitadas, perfil privado

2. content_management/03-content_categories.sql

Tabla: content_management.content_categories Impacto: Categorización de contenido faltante Registros: 8-12 categorías principales

Contenido Sugerido

-- =====================================================
-- SEED: Content Categories
-- Schema: content_management
-- Tabla: content_categories
-- Prioridad: P1 - ALTA
-- =====================================================

TRUNCATE TABLE content_management.content_categories RESTART IDENTITY CASCADE;

INSERT INTO content_management.content_categories (
    category_code,
    category_name,
    category_description,
    parent_category_id,
    metadata,
    created_at
) VALUES
    ('BIO', 'Biografía', 'Contenido biográfico de Marie Curie', NULL,
     jsonb_build_object('icon', 'person', 'color', '#4CAF50'), now()),

    ('SCI', 'Ciencia', 'Conceptos y descubrimientos científicos', NULL,
     jsonb_build_object('icon', 'science', 'color', '#2196F3'), now()),

    ('HIS', 'Historia', 'Contexto histórico y eventos', NULL,
     jsonb_build_object('icon', 'history_edu', 'color', '#FF9800'), now()),

    ('EXP', 'Experimentos', 'Experimentos y metodología científica', NULL,
     jsonb_build_object('icon', 'biotech', 'color', '#9C27B0'), now()),

    ('SOC', 'Impacto Social', 'Impacto en sociedad y género', NULL,
     jsonb_build_object('icon', 'groups', 'color', '#E91E63'), now()),

    ('EDU', 'Educación', 'Contenido educativo y didáctico', NULL,
     jsonb_build_object('icon', 'school', 'color', '#00BCD4'), now()),

    ('MED', 'Medicina', 'Aplicaciones médicas de la radiactividad', NULL,
     jsonb_build_object('icon', 'medical_services', 'color', '#F44336'), now()),

    ('PHY', 'Física', 'Conceptos de física y radiactividad', 'SCI',
     jsonb_build_object('icon', 'energy_savings_leaf', 'color', '#3F51B5'), now()),

    ('CHE', 'Química', 'Elementos químicos y reacciones', 'SCI',
     jsonb_build_object('icon', 'science', 'color', '#009688'), now()),

    ('AWA', 'Premios', 'Reconocimientos y galardones', NULL,
     jsonb_build_object('icon', 'emoji_events', 'color', '#FFC107'), now());

3. content_management/04-moderation_rules.sql

Tabla: content_management.moderation_rules Impacto: Moderación automática deshabilitada Registros: 10-15 reglas de moderación

Contenido Sugerido

-- =====================================================
-- SEED: Moderation Rules
-- Schema: content_management
-- Tabla: moderation_rules
-- Prioridad: P1 - ALTA
-- =====================================================

TRUNCATE TABLE content_management.moderation_rules RESTART IDENTITY CASCADE;

INSERT INTO content_management.moderation_rules (
    rule_name,
    rule_type,
    rule_config,
    action,
    severity,
    is_active,
    created_at
) VALUES
    ('Palabras prohibidas básicas', 'keyword_blacklist',
     jsonb_build_object('keywords', jsonb_build_array('spam', 'phishing', 'scam')),
     'flag', 'high', true, now()),

    ('Lenguaje ofensivo', 'keyword_blacklist',
     jsonb_build_object('keywords', jsonb_build_array('offensive1', 'offensive2')),
     'block', 'critical', true, now()),

    ('URLs sospechosas', 'pattern',
     jsonb_build_object('pattern', 'http[s]?://(?!gamilit\\.com).*'),
     'flag', 'medium', true, now()),

    ('Emails no autorizados', 'pattern',
     jsonb_build_object('pattern', '[a-zA-Z0-9._%+-]+@(?!gamilit\\.com)'),
     'flag', 'low', true, now()),

    ('Contenido muy largo', 'length_limit',
     jsonb_build_object('max_length', 5000),
     'warn', 'low', true, now());

4. educational_content/13-content_tags.sql

Tabla: educational_content.content_tags Impacto: Sistema de etiquetado faltante Registros: 30-50 tags principales

Contenido Sugerido

-- =====================================================
-- SEED: Content Tags
-- Schema: educational_content
-- Tabla: content_tags
-- Prioridad: P1 - ALTA
-- =====================================================

TRUNCATE TABLE educational_content.content_tags RESTART IDENTITY CASCADE;

INSERT INTO educational_content.content_tags (
    tag_code,
    tag_name,
    tag_category,
    usage_count,
    metadata,
    created_at
) VALUES
    -- Tags Marie Curie
    ('marie-curie', 'Marie Curie', 'person', 0,
     jsonb_build_object('related_modules', jsonb_build_array('MOD-01', 'MOD-02', 'MOD-03', 'MOD-04', 'MOD-05')), now()),

    ('pierre-curie', 'Pierre Curie', 'person', 0,
     jsonb_build_object('related_modules', jsonb_build_array('MOD-03')), now()),

    -- Tags Científicos
    ('radiactividad', 'Radiactividad', 'concept', 0,
     jsonb_build_object('difficulty', 'medium', 'grade_levels', jsonb_build_array('7', '8', '9')), now()),

    ('polonio', 'Polonio', 'element', 0,
     jsonb_build_object('atomic_number', 84), now()),

    ('radio', 'Radio', 'element', 0,
     jsonb_build_object('atomic_number', 88), now()),

    ('nobel', 'Premio Nobel', 'award', 0,
     jsonb_build_object('years', jsonb_build_array(1903, 1911)), now()),

    -- Tags Temáticos
    ('ciencia', 'Ciencia', 'theme', 0,
     jsonb_build_object('related_modules', jsonb_build_array('MOD-02', 'MOD-03')), now()),

    ('mujer-ciencia', 'Mujer en Ciencia', 'theme', 0,
     jsonb_build_object('related_modules', jsonb_build_array('MOD-03', 'MOD-05')), now()),

    ('perseverancia', 'Perseverancia', 'value', 0,
     jsonb_build_object('related_modules', jsonb_build_array('MOD-01', 'MOD-05')), now()),

    ('innovación', 'Innovación', 'value', 0,
     jsonb_build_object('related_modules', jsonb_build_array('MOD-04', 'MOD-05')), now());

5. educational_content/14-media_resources.sql

Tabla: educational_content.media_resources Impacto: Recursos multimedia base faltantes Registros: 15-25 recursos

Contenido Sugerido

-- =====================================================
-- SEED: Media Resources
-- Schema: educational_content
-- Tabla: media_resources
-- Prioridad: P1 - ALTA
-- =====================================================

TRUNCATE TABLE educational_content.media_resources RESTART IDENTITY CASCADE;

INSERT INTO educational_content.media_resources (
    resource_code,
    resource_name,
    resource_type,
    resource_url,
    thumbnail_url,
    metadata,
    created_at
) VALUES
    ('marie-portrait-1', 'Retrato de Marie Curie (1903)', 'image',
     'https://cdn.gamilit.com/media/marie-curie-portrait-1903.jpg',
     'https://cdn.gamilit.com/media/thumbs/marie-curie-portrait-1903.jpg',
     jsonb_build_object('year', 1903, 'source', 'Public Domain', 'related_content', 'marie-nobel-physics-1903'),
     now()),

    ('lab-radium', 'Laboratorio de Investigación del Radio', 'image',
     'https://cdn.gamilit.com/media/lab-radium.jpg',
     'https://cdn.gamilit.com/media/thumbs/lab-radium.jpg',
     jsonb_build_object('year', 1902, 'location', 'París', 'related_content', 'marie-radioactivity-research'),
     now()),

    ('nobel-certificate-1903', 'Certificado Nobel Física 1903', 'document',
     'https://cdn.gamilit.com/media/nobel-certificate-1903.pdf',
     'https://cdn.gamilit.com/media/thumbs/nobel-certificate-1903.jpg',
     jsonb_build_object('year', 1903, 'award', 'Nobel Physics'),
     now());

6. progress_tracking/02-learning_paths.sql

Tabla: progress_tracking.learning_paths Impacto: Rutas de aprendizaje predefinidas necesarias Registros: 5-8 rutas predefinidas

Contenido Sugerido

-- =====================================================
-- SEED: Learning Paths
-- Schema: progress_tracking
-- Tabla: learning_paths
-- Prioridad: P1 - ALTA
-- =====================================================

TRUNCATE TABLE progress_tracking.learning_paths RESTART IDENTITY CASCADE;

INSERT INTO progress_tracking.learning_paths (
    path_code,
    path_name,
    path_description,
    difficulty_level,
    estimated_hours,
    path_structure,
    is_active,
    created_at
) VALUES
    ('PATH-BEGINNER', 'Ruta del Principiante',
     'Introducción a la comprensión lectora con Marie Curie',
     'beginner',
     8,
     jsonb_build_object(
         'modules', jsonb_build_array(
             jsonb_build_object('module_code', 'MOD-01-LITERAL', 'order', 1, 'required', true),
             jsonb_build_object('module_code', 'MOD-02-INFERENCIAL', 'order', 2, 'required', true)
         ),
         'milestones', jsonb_build_array(
             jsonb_build_object('at_module', 'MOD-01-LITERAL', 'achievement', 'FIRST-MODULE-COMPLETE'),
             jsonb_build_object('at_module', 'MOD-02-INFERENCIAL', 'achievement', 'BEGINNER-PATH-COMPLETE')
         )
     ),
     true,
     now()),

    ('PATH-INTERMEDIATE', 'Ruta Intermedia',
     'Desarrolla pensamiento crítico',
     'intermediate',
     12,
     jsonb_build_object(
         'modules', jsonb_build_array(
             jsonb_build_object('module_code', 'MOD-02-INFERENCIAL', 'order', 1, 'required', true),
             jsonb_build_object('module_code', 'MOD-03-CRITICA', 'order', 2, 'required', true),
             jsonb_build_object('module_code', 'MOD-04-DIGITAL', 'order', 3, 'required', true)
         )
     ),
     true,
     now()),

    ('PATH-ADVANCED', 'Ruta Avanzada',
     'Domina todos los niveles de comprensión lectora',
     'advanced',
     20,
     jsonb_build_object(
         'modules', jsonb_build_array(
             jsonb_build_object('module_code', 'MOD-01-LITERAL', 'order', 1, 'required', true),
             jsonb_build_object('module_code', 'MOD-02-INFERENCIAL', 'order', 2, 'required', true),
             jsonb_build_object('module_code', 'MOD-03-CRITICA', 'order', 3, 'required', true),
             jsonb_build_object('module_code', 'MOD-04-DIGITAL', 'order', 4, 'required', true),
             jsonb_build_object('module_code', 'MOD-05-CREATIVO', 'order', 5, 'required', true)
         )
     ),
     true,
     now());

7. system_configuration/05-api_configuration.sql

Tabla: system_configuration.api_configuration Impacto: APIs externas sin configuración Registros: 5-10 configuraciones de APIs

Contenido Sugerido

-- =====================================================
-- SEED: API Configuration
-- Schema: system_configuration
-- Tabla: api_configuration
-- Prioridad: P1 - ALTA
-- =====================================================

TRUNCATE TABLE system_configuration.api_configuration RESTART IDENTITY CASCADE;

INSERT INTO system_configuration.api_configuration (
    api_name,
    api_endpoint,
    api_version,
    auth_config,
    rate_limit_config,
    is_active,
    created_at
) VALUES
    ('OpenAI', 'https://api.openai.com/v1',
     'v1',
     jsonb_build_object('type', 'bearer', 'env_var', 'OPENAI_API_KEY'),
     jsonb_build_object('requests_per_minute', 60, 'tokens_per_minute', 90000),
     true,
     now()),

    ('Storage compatible', 'https://storage.gamilit.com/storage/v1',
     'v1',
     jsonb_build_object('type', 'service_role', 'env_var', 'STORAGE_SERVICE_KEY'),
     jsonb_build_object('requests_per_second', 100),
     true,
     now()),

    ('SendGrid Email', 'https://api.sendgrid.com/v3',
     'v3',
     jsonb_build_object('type', 'api_key', 'env_var', 'SENDGRID_API_KEY'),
     jsonb_build_object('emails_per_day', 100),
     true,
     now());

8. system_configuration/06-environment_config.sql

Tabla: system_configuration.environment_config Impacto: Configuración por ambiente faltante Registros: 15-20 configuraciones (DEV/STAGING/PROD)

Contenido Sugerido

-- =====================================================
-- SEED: Environment Configuration
-- Schema: system_configuration
-- Tabla: environment_config
-- Prioridad: P1 - ALTA
-- =====================================================

TRUNCATE TABLE system_configuration.environment_config RESTART IDENTITY CASCADE;

-- DEV Environment
INSERT INTO system_configuration.environment_config (
    environment,
    config_key,
    config_value,
    config_type,
    is_sensitive,
    created_at
) VALUES
    ('development', 'debug_mode', 'true', 'boolean', false, now()),
    ('development', 'log_level', 'debug', 'string', false, now()),
    ('development', 'api_timeout_ms', '30000', 'number', false, now()),
    ('development', 'enable_mock_data', 'true', 'boolean', false, now()),
    ('development', 'cors_origins', '["http://localhost:3000", "http://localhost:5173"]', 'json', false, now());

-- STAGING Environment
INSERT INTO system_configuration.environment_config (
    environment,
    config_key,
    config_value,
    config_type,
    is_sensitive,
    created_at
) VALUES
    ('staging', 'debug_mode', 'false', 'boolean', false, now()),
    ('staging', 'log_level', 'info', 'string', false, now()),
    ('staging', 'api_timeout_ms', '15000', 'number', false, now()),
    ('staging', 'enable_mock_data', 'false', 'boolean', false, now()),
    ('staging', 'cors_origins', '["https://staging.gamilit.com"]', 'json', false, now());

-- PRODUCTION Environment
INSERT INTO system_configuration.environment_config (
    environment,
    config_key,
    config_value,
    config_type,
    is_sensitive,
    created_at
) VALUES
    ('production', 'debug_mode', 'false', 'boolean', false, now()),
    ('production', 'log_level', 'warn', 'string', false, now()),
    ('production', 'api_timeout_ms', '10000', 'number', false, now()),
    ('production', 'enable_mock_data', 'false', 'boolean', false, now()),
    ('production', 'cors_origins', '["https://app.gamilit.com"]', 'json', false, now());

ORDEN DE EJECUCIÓN FASE 2

Ejecutar después de completar seeds P0:

  1. system_configuration/05-api_configuration.sql
  2. system_configuration/06-environment_config.sql
  3. auth_management/08-user_preferences_defaults.sql
  4. content_management/03-content_categories.sql
  5. content_management/04-moderation_rules.sql
  6. educational_content/13-content_tags.sql
  7. educational_content/14-media_resources.sql
  8. progress_tracking/02-learning_paths.sql

CRITERIOS DE ACEPTACIÓN

Para cada seed P1:

Archivo SQL creado en ruta correcta TRUNCATE con CASCADE para idempotencia Al menos N registros insertados (según tabla) Valores JSONB correctamente formateados Comentarios descriptivos Query de verificación incluida Probado en DEV sin errores Documentado en SEEDS_INVENTORY.yml

Validación General:

-- Verificar todos los seeds P1
SELECT 'user_preferences' as seed, COUNT(*) FROM auth_management.user_preferences
UNION ALL
SELECT 'content_categories', COUNT(*) FROM content_management.content_categories
UNION ALL
SELECT 'moderation_rules', COUNT(*) FROM content_management.moderation_rules
UNION ALL
SELECT 'content_tags', COUNT(*) FROM educational_content.content_tags
UNION ALL
SELECT 'media_resources', COUNT(*) FROM educational_content.media_resources
UNION ALL
SELECT 'learning_paths', COUNT(*) FROM progress_tracking.learning_paths
UNION ALL
SELECT 'api_configuration', COUNT(*) FROM system_configuration.api_configuration
UNION ALL
SELECT 'environment_config', COUNT(*) FROM system_configuration.environment_config;

Resultado Esperado:

  • user_preferences: 5-10
  • content_categories: 8-12
  • moderation_rules: 10-15
  • content_tags: 30-50
  • media_resources: 15-25
  • learning_paths: 5-8
  • api_configuration: 5-10
  • environment_config: 15-20

IMPACTO EN FUNCIONALIDADES

Con Seeds P1 Implementados:

Sistema de Preferencias: Usuarios tienen defaults coherentes Categorización: Contenido organizado y filtrable Moderación: Contenido inapropiado detectado automáticamente Etiquetado: Búsqueda y discovery mejorados Multimedia: Contenido enriquecido visualmente Rutas de Aprendizaje: Progresión guiada para estudiantes APIs Configuradas: Integraciones funcionando correctamente Multi-ambiente: Configuraciones específicas DEV/STAGING/PROD


ESTIMACIÓN

Tiempo estimado: 5-7 días (Semana 2-3) Complejidad: Media Dependencias: Seeds P0 completados Riesgo: Bajo


Próximos Pasos:

  1. Completar seeds P0 (Fase 1)
  2. Implementar seeds P1 según orden de ejecución
  3. Validar en DEV
  4. Migrar a STAGING
  5. Actualizar SEEDS_INVENTORY.yml

Fecha Estimada: 2025-12-21 a 2025-12-30