erp-core/docs/01-analisis-referencias/gamilit/database-architecture.md

1120 lines
38 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Arquitectura de Base de Datos Multi-Schema - GAMILIT
**Documento:** Analisis de Arquitectura de Base de Datos
**Proyecto de Referencia:** GAMILIT
**Fecha:** 2025-11-23
**Analista:** Architecture-Analyst Agent
---
## 1. VISION GENERAL
GAMILIT implementa una **arquitectura multi-schema en PostgreSQL 16+** que organiza objetos de base de datos por dominios de negocio, proporcionando separacion logica, permisos granulares y escalabilidad arquitectonica.
### 1.1 Principios Arquitectonicos
1. **Domain-Driven Design (DDD):** Cada schema representa un contexto delimitado (bounded context)
2. **Separation of Concerns:** Objetos agrupados por responsabilidad funcional
3. **Principle of Least Privilege:** Permisos granulares por schema
4. **Scalability First:** Facil agregar nuevos dominios sin afectar existentes
5. **Documentation as Code:** Sistema SIMCO de mapas _MAP.md jerarquicos
---
## 2. LOS 9 SCHEMAS DE GAMILIT
### 2.1 Resumen Comparativo
| Schema | Tablas | Indices | Funciones | Triggers | RLS Policies | Vistas | MViews | Total Objetos |
|--------|--------|---------|-----------|----------|--------------|--------|--------|---------------|
| **auth_management** | 15 | 11 | 6 | 6 | 1 archivo | - | - | **39** |
| **gamification_system** | 15 | 23 | 25 | 10 | 8 archivos | 4 | 4 | **93** |
| **educational_content** | 14 | 16 | 3 | 4 | 2 archivos | - | - | **42** |
| **progress_tracking** | ~8 | ~15 | ~5 | ~3 | ~2 archivos | - | - | **~35** |
| **social_features** | ~10 | ~12 | ~4 | ~2 | ~2 archivos | - | - | **~32** |
| **content_management** | ~6 | ~8 | ~2 | ~2 | ~1 archivo | - | - | **~20** |
| **audit_logging** | ~4 | ~6 | ~2 | ~1 | ~1 archivo | - | - | **~15** |
| **system_configuration** | ~3 | ~4 | ~2 | ~1 | ~1 archivo | - | - | **~12** |
| **public** | ~2 | ~3 | ~10 | - | - | - | - | **~15** |
| **TOTAL** | **~77** | **~98** | **~59** | **~29** | **~18** | **4** | **4** | **~303** |
**Nota:** Numeros exactos solo para auth_management, gamification_system y educational_content (documentados). Resto estimado.
### 2.2 Detalle por Schema
---
#### 2.2.1 auth_management - Autenticacion y Autorizacion
**Proposito:** Gestion completa de autenticacion, usuarios, roles, sesiones y seguridad.
**Tablas (15):**
```sql
01. tenants -- Multi-tenancy (organizaciones)
02. auth_attempts -- Intentos de autenticacion (tracking)
03. profiles -- Perfiles de usuario
04. roles -- Roles del sistema (RBAC)
05. auth_providers -- Proveedores OAuth (Google, GitHub, etc.)
06. email_verification_tokens -- Tokens de verificacion de email
07. password_reset_tokens -- Tokens de reset de password
08. security_events -- Eventos de seguridad (logs)
09. user_preferences -- Preferencias de usuario (theme, language)
10. memberships -- Membresias de usuarios en tenants
11. user_sessions -- Sesiones activas (JWT tracking)
12. user_suspensions -- Suspensiones de usuarios
14. parent_accounts -- Cuentas de padres (FUTURE - EXT-010)
15. parent_student_links -- Links padres-estudiantes (FUTURE)
16. parent_notifications -- Notificaciones a padres (FUTURE)
```
**Funciones (6):**
```sql
01. assign_role_to_user() -- Asignar rol a usuario
02. get_user_role() -- Obtener rol de usuario
03. verify_user_permission() -- Verificar permiso
04. remove_role_from_user() -- Remover rol
05. hash_token() -- Hash de tokens de seguridad
06. update_user_preferences() -- Actualizar preferencias
```
**Triggers (6):**
```sql
02. trg_memberships_updated_at -- Auto-actualizar updated_at
03. trg_audit_profile_changes -- Auditar cambios en profiles
04. trg_initialize_user_stats -- Inicializar stats de gamificacion
05. trg_profiles_updated_at -- Auto-actualizar updated_at
06. trg_tenants_updated_at -- Auto-actualizar updated_at
07. trg_user_roles_updated_at -- Auto-actualizar updated_at
```
**Indices (11):**
- Indices en user_roles (role, tenant_id, user_id)
- Indices en user_sessions (active, expires, tokens)
- Indices en user_preferences (theme)
- Indices GIN en permissions
**RLS Policies:** 1 archivo consolidado con politicas de acceso
**Patrones observados:**
- ✅ Multi-tenancy con tabla `tenants`
- ✅ RBAC (Role-Based Access Control) con `roles` y `user_roles`
- ✅ OAuth providers multiples
- ✅ Tokens con hash de seguridad
- ✅ Auditoria de eventos de seguridad
- ✅ Sesiones con JWT tracking
- ✅ Triggers para updated_at automatico
- ✅ RLS policies para multi-tenant isolation
**Aplicabilidad a ERP Generico:** ⭐⭐⭐⭐⭐ (MAXIMA)
**Decision:****ADOPTAR** estructura completa de autenticacion y RBAC
---
#### 2.2.2 gamification_system - Sistema de Gamificacion
**Proposito:** Sistema completo de gamificacion con logros, rangos mayas, monedas ML, comodines y notificaciones.
**Tablas (15):**
```sql
01. user_stats -- Estadisticas de usuario (XP, level, coins, streak)
02. user_ranks -- Historial de rangos mayas
03. achievements -- Logros disponibles
04. user_achievements -- Logros desbloqueados por usuarios
05. ml_coins_transactions -- Transacciones de ML Coins
06. missions -- Misiones disponibles
07. comodines_inventory -- Inventario de comodines (power-ups)
08. notifications -- Notificaciones del sistema
09. leaderboard_metadata -- Metadata de leaderboards
10. achievement_categories -- Categorias de logros
11. active_boosts -- Boosts activos temporales
12. inventory_transactions -- Transacciones de inventario
13. maya_ranks -- Definicion de rangos mayas
14. comodin_usage_log -- Log de uso de comodines
15. comodin_usage_tracking -- Tracking de uso de comodines
```
**ENUMs (4):**
```sql
maya_rank -- 5 rangos: Ajaw, Nacom, Ah K'in, Halach Uinic, K'uk'ulkan
notification_priority -- 4 niveles: low, medium, high, critical
notification_type -- 11 tipos: achievement_unlocked, rank_up, etc.
transaction_type -- 14 tipos: earned_exercise, spent_powerup, etc.
```
**Funciones (25):**
```sql
apply_xp_boost() -- Aplicar boost de XP
award_ml_coins() -- Otorgar ML Coins
calculate_level_from_xp() -- Calcular nivel desde XP
calculate_user_rank() -- Calcular rango maya
check_and_award_achievements() -- Verificar y otorgar logros
check_rank_promotion() -- Verificar promocion de rango (NUEVO)
claim_achievement_reward() -- Reclamar recompensa de logro
consume_comodin() -- Consumir comodin (power-up)
get_rank_benefits() -- Obtener beneficios de rango (NUEVO)
get_rank_multiplier() -- Obtener multiplicador de rango (NUEVO)
get_user_comodines() -- Obtener comodines de usuario
get_user_inventory_summary() -- Resumen de inventario
get_user_rank_progress() -- Progreso de rango
get_user_rank_requirements() -- Requisitos de siguiente rango
process_exercise_completion() -- Procesar completacion de ejercicio
promote_to_next_rank() -- Promocion a siguiente rango (NUEVO)
send_notification() -- Enviar notificacion
update_leaderboard_coins() -- Actualizar leaderboard de coins
update_leaderboard_global() -- Actualizar leaderboard global
update_leaderboard_streaks() -- Actualizar leaderboard de rachas
update_user_rank() -- Actualizar rango de usuario (REFACTORIZADO)
recalculate_level_on_xp_change() -- Recalcular nivel al cambiar XP
update_missions_updated_at() -- Auto-actualizar updated_at
update_notifications_updated_at() -- Auto-actualizar updated_at
```
**Triggers (10):**
```sql
01. trg_achievement_unlocked -- Trigger al desbloquear logro
02. trg_check_rank_promotion -- Verificar promocion de rango
15. trg_achievements_updated_at -- Auto-actualizar updated_at
16. trg_comodines_inventory_updated_at -- Auto-actualizar updated_at
17. missions_updated_at -- Auto-actualizar updated_at
18. notifications_updated_at -- Auto-actualizar updated_at
19. trg_user_ranks_updated_at -- Auto-actualizar updated_at
20. trg_user_stats_updated_at -- Auto-actualizar updated_at
21. trg_recalculate_level_on_xp_change -- Recalcular nivel automaticamente
trg_check_rank_promotion_on_xp_gain -- Promocion automatica (NUEVO)
```
**Vistas (4):**
```sql
01. leaderboard_coins -- Leaderboard por ML Coins
02. leaderboard_global -- Leaderboard global por XP
03. leaderboard_streaks -- Leaderboard por rachas
04. leaderboard_xp -- Leaderboard por XP puro
```
**Vistas Materializadas (4):**
```sql
01. mv_global_leaderboard -- Leaderboard global materializado
02. mv_classroom_leaderboard -- Leaderboard por aula
03. mv_weekly_leaderboard -- Leaderboard semanal
04. mv_mechanic_leaderboard -- Leaderboard por mecanica educativa
```
**Indices (23):** Indices optimizados en user_stats, achievements, transactions, etc.
**RLS Policies:** 8 archivos (ml-coins, achievements, user-stats, inventory, notifications, leaderboard)
**Patrones observados:**
- ✅ Sistema de XP y niveles con calculo automatico
- ✅ Rangos jerarquicos (mayas) con beneficios
- ✅ Moneda virtual (ML Coins) con transacciones
- ✅ Logros con condiciones y recompensas
- ✅ Comodines/Power-ups con inventario
- ✅ Notificaciones con prioridades
- ✅ Leaderboards con vistas materializadas (performance)
- ✅ Triggers automaticos para recalculo
- ✅ Funciones PL/pgSQL para logica compleja
**Aplicabilidad a ERP Generico:** ⭐⭐ (BAJA)
**Decision:****NO ADOPTAR** (especifico de gamificacion, no aplicable a ERP)
---
#### 2.2.3 educational_content - Contenido Educativo
**Proposito:** Modulos educativos, ejercicios, recursos multimedia y assignments.
**Tablas (14 activas):**
```sql
01. modules -- Modulos educativos (5 modulos)
02. exercises -- Ejercicios (33 tipos diferentes, 85 total)
03. assessment_rubrics -- Rubricas de evaluacion
04. media_resources -- Recursos multimedia
05. assignments -- Tareas asignadas por profesor
06. assignment_exercises -- Ejercicios en cada assignment
07. assignment_students -- Estudiantes asignados
08. assignment_submissions -- Envios de estudiantes
content_approvals -- Aprobaciones de contenido
content_metadata -- Metadata de contenido
content_tags -- Tags de contenido
module_dependencies -- Dependencias entre modulos
taxonomies -- Taxonomias educativas
20. difficulty_criteria -- Criterios de dificultad CEFR (NUEVO)
-- DEPRECATED (eliminadas):
-- exercise_answers.sql
-- exercise_options.sql
```
**ENUMs (3):**
```sql
bloom_taxonomy -- Taxonomia de Bloom educativa
difficulty_level -- 8 niveles CEFR: beginner (A1), elementary (A2), ..., native
exercise_mechanic -- 33 mecanicas educativas diferentes
```
**Funciones (3):**
```sql
calculate_learning_path() -- Calcular ruta de aprendizaje
get_recommended_missions() -- Recomendar misiones
validate_exercise_structure() -- Validar estructura de ejercicio
```
**Triggers (4):**
```sql
11. trg_assessment_rubrics_updated_at -- Auto-actualizar updated_at
12. trg_exercises_updated_at -- Auto-actualizar updated_at
13. trg_media_resources_updated_at -- Auto-actualizar updated_at
14. trg_modules_updated_at -- Auto-actualizar updated_at
```
**Indices (16):** Indices en assignments, submissions, exercises
**RLS Policies:** 2 archivos (enable-rls, modules-exercises-policies)
**Patrones observados:**
- ✅ Modulos con dependencias (prerequisitos)
- ✅ Ejercicios con config JSONB (modelo dual)
- ✅ Niveles de dificultad CEFR internacional
- ✅ Assignments con deadlines
- ✅ Sistema de submissions y grading
- ✅ Recursos multimedia con metadata
- ✅ Taxonomias educativas
- ❌ Modelo JSONB puro (eliminaron exercise_options y exercise_answers)
**Aplicabilidad a ERP Generico:** ⭐ (MUY BAJA)
**Decision:****NO ADOPTAR** (especifico de educacion, no aplicable a ERP)
**Aprendizajes trasladables:**
- ✅ Patron de assignments (podria ser ordenes de trabajo)
- ✅ Sistema de submissions (podria ser entregas/recepciones)
- ✅ Modelo JSONB para datos flexibles
---
#### 2.2.4 progress_tracking - Seguimiento de Progreso
**Proposito:** Tracking de progreso de estudiantes, sesiones de aprendizaje, attempts de ejercicios.
**Tablas (~8):**
```sql
module_progress -- Progreso en modulos
learning_sessions -- Sesiones de aprendizaje
exercise_attempts -- Intentos de ejercicios
exercise_submissions -- Envios de ejercicios
scheduled_missions -- Misiones programadas
teacher_notes -- Notas del profesor
engagement_metrics -- Metricas de engagement
learning_paths -- Rutas de aprendizaje
mastery_tracking -- Tracking de maestria
module_completion_tracking -- Tracking de completacion
progress_snapshots -- Snapshots de progreso
skill_assessments -- Evaluaciones de habilidades
user_learning_paths -- Rutas por usuario
```
**ENUMs:**
```sql
progress_status -- 6 estados: not_started, in_progress, completed, needs_review, mastered, abandoned
attempt_result -- 4 resultados: correct, incorrect, partial, skipped
```
**Patrones observados:**
- ✅ Tracking de progreso con porcentajes
- ✅ Sesiones de aprendizaje con tiempo
- ✅ Multiple attempts por ejercicio
- ✅ Snapshots para analytics historicos
- ✅ Notas del profesor (feedback)
**Aplicabilidad a ERP Generico:** ⭐⭐ (BAJA-MEDIA)
**Decision:** 🔧 **ADAPTAR** conceptos de tracking
**Aprendizajes trasladables:**
- ✅ Patron de "progreso" (aplicable a avance de obra)
- ✅ Snapshots para historico (aplicable a presupuestos)
- ✅ Notas/comentarios (aplicable a observaciones de obra)
---
#### 2.2.5 social_features - Caracteristicas Sociales
**Proposito:** Amistades, escuelas, aulas, equipos y desafios.
**Tablas (~10):**
```sql
friendships -- Amistades entre usuarios
schools -- Escuelas
classrooms -- Aulas/Salones
classroom_members -- Miembros de aulas
teams -- Equipos
team_members -- Miembros de equipos
team_challenges -- Desafios entre equipos
assignment_classrooms -- Assignments por aula
peer_challenges -- Desafios entre pares
challenge_participants -- Participantes en desafios
challenge_results -- Resultados de desafios
discussion_threads -- Hilos de discusion
social_interactions -- Interacciones sociales
teacher_classrooms -- Aulas por profesor
user_follows -- Seguidores
```
**ENUMs:**
```sql
friendship_status -- 4 estados: pending, accepted, rejected, blocked
classroom_member_status -- 4 estados: active, inactive, withdrawn, completed
enrollment_method -- 4 metodos: teacher_invite, self_enroll, admin_add, bulk_import
team_member_role -- 3 roles: owner, admin, member
team_challenge_status -- 5 estados: active, in_progress, completed, failed, cancelled
social_event_type -- 5 tipos: competition, collaboration, challenge, tournament, workshop
```
**Patrones observados:**
- ✅ Jerarquia: Escuelas → Aulas → Equipos
- ✅ Amistades con estados
- ✅ Enrollment con multiples metodos
- ✅ Desafios competitivos
- ✅ Roles en equipos
**Aplicabilidad a ERP Generico:** ⭐⭐⭐ (MEDIA)
**Decision:** 🔧 **ADAPTAR** jerarquias organizacionales
**Aprendizajes trasladables:**
- ✅ Jerarquia Empresa → Proyecto → Equipo
- ✅ Miembros con roles
- ✅ Estados de membresia
- ✅ Metodos de enrollment (aplicable a asignacion de personal)
---
#### 2.2.6 content_management - Gestion de Contenido
**Proposito:** Plantillas de contenido, contenido Marie Curie, archivos multimedia.
**Tablas (~6):**
```sql
content_templates -- Plantillas reutilizables
marie_curie_content -- Contenido especifico
media_files -- Archivos multimedia
content_authors -- Autores de contenido
content_categories -- Categorias
content_versions -- Versionado de contenido
flagged_content -- Contenido reportado
media_metadata -- Metadata de archivos
```
**ENUMs:**
```sql
content_status -- 4 estados: draft, published, archived, under_review
content_type -- 6 tipos: video, text, interactive, quiz, game, simulation
media_type -- 6 tipos: image, video, audio, document, interactive, animation
processing_status -- 5 estados: uploading, processing, ready, error, optimizing
```
**Patrones observados:**
- ✅ Plantillas reutilizables
- ✅ Versionado de contenido
- ✅ Estados de publicacion
- ✅ Processing status para multimedia
**Aplicabilidad a ERP Generico:** ⭐⭐⭐ (MEDIA)
**Decision:** 🔧 **ADAPTAR** gestion documental
**Aprendizajes trasladables:**
- ✅ Plantillas (aplicable a formatos de contratos)
- ✅ Versionado (aplicable a documentos de obra)
- ✅ Estados de publicacion (aplicable a aprobaciones)
- ✅ Metadata de archivos (aplicable a planos, documentos)
---
#### 2.2.7 audit_logging - Auditoria y Logs
**Proposito:** Logs de auditoria, actividad de usuarios, metricas de performance.
**Tablas (~4):**
```sql
audit_logs -- Logs de auditoria
system_logs -- Logs del sistema
user_activity_logs -- Actividad de usuarios
performance_metrics -- Metricas de performance
system_alerts -- Alertas del sistema
user_activity -- Actividad agregada
```
**ENUMs:**
```sql
aggregation_period -- 5 periodos: daily, weekly, monthly, quarterly, yearly
metric_type -- 7 tipos: engagement, performance, completion, time_spent, accuracy, streak, social_interaction
```
**Patrones observados:**
- ✅ Auditoria completa de cambios
- ✅ Logs de actividad de usuarios
- ✅ Metricas de performance
- ✅ Agregacion por periodos
**Aplicabilidad a ERP Generico:** ⭐⭐⭐⭐⭐ (MAXIMA)
**Decision:****ADOPTAR COMPLETAMENTE**
**Critico para ERP:**
- Auditoria de cambios en presupuestos
- Logs de compras y gastos
- Tracking de modificaciones
- Metricas de performance del sistema
---
#### 2.2.8 system_configuration - Configuracion del Sistema
**Proposito:** Configuracion dinamica del sistema, feature flags.
**Tablas (~3):**
```sql
system_settings -- Settings del sistema
feature_flags -- Feature flags (A/B testing)
notification_settings -- Configuracion de notificaciones
api_configuration -- Configuracion de APIs
environment_config -- Configuracion por ambiente
tenant_configurations -- Configuraciones por tenant
```
**Patrones observados:**
- ✅ Settings dinamicos sin redeploy
- ✅ Feature flags para A/B testing
- ✅ Configuracion multi-tenant
- ✅ Configuracion por ambiente
**Aplicabilidad a ERP Generico:** ⭐⭐⭐⭐⭐ (MAXIMA)
**Decision:****ADOPTAR COMPLETAMENTE**
**Critico para ERP:**
- Configuracion dinamica sin redeploy
- Feature flags para releases graduales
- Configuracion por empresa (multi-tenant)
---
#### 2.2.9 public - Schema Publico
**Proposito:** Funciones compartidas y utilidades generales.
**Objetos (~15):**
- Funciones de utilidad compartidas
- Extensiones PostgreSQL (uuid-ossp, pgcrypto, etc.)
- Tipos compartidos
**Patrones observados:**
- ✅ Funciones reutilizables
- ✅ Extensiones centralizadas
- ✅ Tipos compartidos
**Aplicabilidad a ERP Generico:** ⭐⭐⭐⭐ (ALTA)
**Decision:****ADOPTAR**
---
## 3. PATRON DE ORGANIZACION INTERNA DE SCHEMAS
Cada schema en GAMILIT sigue una **estructura de carpetas estandarizada**:
```
schema_name/
├── _MAP.md # Mapa completo del schema (SIMCO)
├── tables/ # Tablas principales
│ ├── _MAP.md
│ ├── 01-tabla1.sql # Prefijo numerico para orden
│ ├── 02-tabla2.sql
│ └── ...
├── indexes/ # Indices optimizados
│ ├── _MAP.md
│ ├── idx_tabla1_campo1.sql
│ └── ...
├── functions/ # Funciones PL/pgSQL
│ ├── _MAP.md
│ ├── 01-funcion1.sql
│ └── ...
├── triggers/ # Triggers
│ ├── _MAP.md
│ ├── 01-trg_tabla1_updated_at.sql
│ └── ...
├── views/ # Vistas (opcional)
│ ├── _MAP.md
│ └── ...
├── materialized-views/ # Vistas materializadas (opcional)
│ ├── _MAP.md
│ └── ...
├── enums/ # ENUMs PostgreSQL (opcional)
│ ├── _MAP.md
│ └── ...
├── rls-policies/ # Row Level Security (opcional)
│ ├── _MAP.md
│ ├── 01-enable-rls.sql
│ └── 02-policies.sql
└── seeds/ # Datos iniciales (opcional)
├── _MAP.md
└── ...
```
### 3.1 Ventajas de esta Organizacion
1. **Navegacion facil:** Estructura predecible
2. **Documentacion integrada:** Archivos _MAP.md en cada nivel
3. **Orden de ejecucion:** Prefijos numericos (01-, 02-, etc.)
4. **Separacion de responsabilidades:** Un archivo por objeto
5. **Git-friendly:** Merges mas faciles
6. **CI/CD-ready:** Facil automatizar ejecucion
---
## 4. ROW LEVEL SECURITY (RLS)
### 4.1 Implementacion en GAMILIT
**Politicas RLS totales:** 159 planeadas, 41 activas
**Schemas con RLS:**
- `auth_management` - 1 archivo de policies
- `gamification_system` - 8 archivos de policies
- `educational_content` - 2 archivos de policies
- `progress_tracking` - ~2 archivos de policies
- `social_features` - ~2 archivos de policies
- Otros schemas - ~3 archivos de policies
### 4.2 Patron de Implementacion
**Archivo 01-enable-rls.sql:**
```sql
-- Habilitar RLS en todas las tablas del schema
ALTER TABLE schema_name.tabla1 ENABLE ROW LEVEL SECURITY;
ALTER TABLE schema_name.tabla2 ENABLE ROW LEVEL SECURITY;
-- ...
```
**Archivo 02-policies.sql (ejemplo):**
```sql
-- Policy: Los usuarios solo ven sus propios datos
CREATE POLICY user_own_data ON schema_name.tabla1
FOR SELECT
USING (user_id = current_user_id());
-- Policy: Multi-tenant isolation
CREATE POLICY tenant_isolation ON schema_name.tabla1
FOR ALL
USING (tenant_id = current_tenant_id());
```
### 4.3 Funciones de Contexto
```sql
-- Obtener user_id del contexto actual (JWT)
CREATE FUNCTION current_user_id() RETURNS UUID AS $$
SELECT current_setting('app.current_user_id')::UUID;
$$ LANGUAGE SQL STABLE;
-- Obtener tenant_id del contexto actual
CREATE FUNCTION current_tenant_id() RETURNS UUID AS $$
SELECT current_setting('app.current_tenant_id')::UUID;
$$ LANGUAGE SQL STABLE;
```
### 4.4 Aplicabilidad a ERP Generico
⭐⭐⭐⭐⭐ (MAXIMA)
**Decision:****ADOPTAR COMPLETAMENTE**
**Usos en ERP:**
- Multi-tenant isolation (empresa por empresa)
- Permisos por rol (solo ver presupuestos asignados)
- Seguridad a nivel de fila (solo ver propias compras)
---
## 5. SISTEMA DE DOCUMENTACION _MAP.md (SIMCO)
### 5.1 Total de Archivos _MAP.md en GAMILIT
**85+ archivos _MAP.md** distribuidos jerarquicamente:
```
gamilit/
├── _MAP.md # Mapa raiz del proyecto
└── database/
└── ddl/
└── schemas/
├── auth_management/
│ ├── _MAP.md # Mapa del schema
│ ├── tables/_MAP.md # Lista de tablas
│ ├── indexes/_MAP.md # Lista de indices
│ ├── functions/_MAP.md # Lista de funciones
│ ├── triggers/_MAP.md # Lista de triggers
│ └── rls-policies/_MAP.md # Lista de policies
├── gamification_system/
│ ├── _MAP.md
│ ├── tables/_MAP.md
│ └── ... (7 _MAP.md por schema)
└── ... (9 schemas × ~9 _MAP.md = ~81 archivos)
```
### 5.2 Estructura de un _MAP.md
**Ejemplo:** `database/ddl/schemas/auth_management/_MAP.md`
```markdown
# Schema: auth_management
Gestion de autenticacion y autorizacion: usuarios, roles, perfiles, sesiones
## Estructura
- **tables/**: 15 archivos
- **functions/**: 6 archivos
- **triggers/**: 6 archivos
- **indexes/**: 11 archivos
- **rls-policies/**: 1 archivos
**Total:** 39 objetos
## Contenido Detallado
### tables/ (15 archivos)
```
01-tenants.sql
02-auth_attempts.sql
03-profiles.sql
...
```
### functions/ (6 archivos)
```
01-assign_role_to_user.sql
02-get_user_role.sql
...
```
---
**Ultima actualizacion:** 2025-11-09
**Reorganizacion:** 2025-11-09
```
### 5.3 Beneficios del Sistema SIMCO
1. **Navegacion rapida para AI agents**
2. **Documentacion estructurada y actualizable**
3. **Visibilidad de cambios en Git**
4. **Jerarquia clara de objetos**
5. **Mantenimiento incremental**
### 5.4 Aplicabilidad a ERP Generico
⭐⭐⭐⭐⭐ (MAXIMA)
**Decision:****ADOPTAR COMPLETAMENTE** (ya en uso)
---
## 6. INDICES Y OPTIMIZACION
### 6.1 Metricas de Indices en GAMILIT
**Total de indices:** 279+
**Distribucion:**
- `gamification_system`: 23 indices
- `educational_content`: 16 indices
- `auth_management`: 11 indices
- Otros schemas: ~229 indices
### 6.2 Patrones de Indexacion Observados
**1. Indices en Foreign Keys:**
```sql
CREATE INDEX idx_user_roles_user_id ON auth_management.user_roles(user_id);
CREATE INDEX idx_user_roles_tenant_id ON auth_management.user_roles(tenant_id);
```
**2. Indices en Campos de Busqueda Frecuente:**
```sql
CREATE INDEX idx_user_sessions_active ON auth_management.user_sessions(is_active);
CREATE INDEX idx_user_sessions_expires ON auth_management.user_sessions(expires_at);
```
**3. Indices GIN para JSONB y Arrays:**
```sql
CREATE INDEX idx_user_roles_permissions_gin
ON auth_management.user_roles
USING GIN (permissions);
CREATE INDEX idx_achievements_conditions_gin
ON gamification_system.achievements
USING GIN (unlock_conditions);
```
**4. Indices Compuestos:**
```sql
CREATE INDEX idx_user_stats_tenant_level
ON gamification_system.user_stats(tenant_id, level);
```
**5. Indices de Ordenamiento (Leaderboards):**
```sql
CREATE INDEX idx_user_stats_global_rank
ON gamification_system.user_stats(total_xp DESC);
```
### 6.3 Aplicabilidad a ERP Generico
⭐⭐⭐⭐⭐ (MAXIMA)
**Decision:****ADOPTAR** patrones de indexacion
**Indices criticos para ERP:**
- Foreign keys (empresa_id, proyecto_id, etc.)
- Campos de busqueda (fechas, estados, montos)
- Indices GIN para campos JSONB (metadata, configuraciones)
- Indices compuestos para consultas frecuentes
---
## 7. FUNCIONES PL/pgSQL
### 7.1 Metricas de Funciones en GAMILIT
**Total de funciones:** 50+
**Distribucion:**
- `gamification_system`: 25 funciones
- `auth_management`: 6 funciones
- `educational_content`: 3 funciones
- `public`: ~10 funciones
- Otros schemas: ~6 funciones
### 7.2 Categorias de Funciones
**1. Funciones de Calculo:**
```sql
-- Calcular nivel desde XP
CREATE FUNCTION gamification_system.calculate_level_from_xp(xp INTEGER)
RETURNS INTEGER AS $$
-- Logica de calculo
$$ LANGUAGE plpgsql IMMUTABLE;
```
**2. Funciones de Negocio:**
```sql
-- Procesar completacion de ejercicio
CREATE FUNCTION gamification_system.process_exercise_completion(
p_user_id UUID,
p_exercise_id UUID,
p_score INTEGER
) RETURNS VOID AS $$
-- Logica compleja: otorgar XP, coins, verificar logros, etc.
$$ LANGUAGE plpgsql;
```
**3. Funciones de Utilidad:**
```sql
-- Hash de tokens
CREATE FUNCTION auth_management.hash_token(token TEXT)
RETURNS TEXT AS $$
SELECT encode(digest(token, 'sha256'), 'hex');
$$ LANGUAGE SQL IMMUTABLE;
```
**4. Funciones de Contexto:**
```sql
-- Obtener user_id actual
CREATE FUNCTION current_user_id() RETURNS UUID AS $$
SELECT current_setting('app.current_user_id')::UUID;
$$ LANGUAGE SQL STABLE;
```
### 7.3 Aplicabilidad a ERP Generico
⭐⭐⭐⭐⭐ (MAXIMA)
**Decision:****ADOPTAR** uso de funciones PL/pgSQL
**Funciones criticas para ERP:**
- Calculos de presupuesto (aplicar porcentajes, descuentos)
- Validaciones de negocio (verificar disponibilidad de presupuesto)
- Agregaciones (totales por proyecto, empresa, periodo)
- Automatizaciones (generar asientos contables, actualizar inventario)
---
## 8. TRIGGERS
### 8.1 Metricas de Triggers en GAMILIT
**Total de triggers:** 35+
**Distribucion:**
- `gamification_system`: 10 triggers
- `auth_management`: 6 triggers
- `educational_content`: 4 triggers
- Otros schemas: ~15 triggers
### 8.2 Patrones de Triggers Observados
**1. Auto-actualizar updated_at:**
```sql
CREATE TRIGGER trg_users_updated_at
BEFORE UPDATE ON auth_management.users
FOR EACH ROW
EXECUTE FUNCTION update_updated_at_column();
```
**2. Auditoria de Cambios:**
```sql
CREATE TRIGGER trg_audit_profile_changes
AFTER UPDATE ON auth_management.profiles
FOR EACH ROW
EXECUTE FUNCTION log_profile_changes();
```
**3. Inicializacion Automatica:**
```sql
CREATE TRIGGER trg_initialize_user_stats
AFTER INSERT ON auth_management.profiles
FOR EACH ROW
EXECUTE FUNCTION gamification_system.initialize_user_stats();
```
**4. Validaciones de Negocio:**
```sql
CREATE TRIGGER trg_check_rank_promotion
AFTER UPDATE OF total_xp ON gamification_system.user_stats
FOR EACH ROW
WHEN (NEW.total_xp > OLD.total_xp)
EXECUTE FUNCTION gamification_system.check_rank_promotion();
```
**5. Recalculos Automaticos:**
```sql
CREATE TRIGGER trg_recalculate_level_on_xp_change
AFTER UPDATE OF total_xp ON gamification_system.user_stats
FOR EACH ROW
EXECUTE FUNCTION gamification_system.recalculate_level_on_xp_change();
```
### 8.3 Aplicabilidad a ERP Generico
⭐⭐⭐⭐⭐ (MAXIMA)
**Decision:****ADOPTAR** uso de triggers
**Triggers criticos para ERP:**
- Auto-actualizar updated_at en todas las tablas
- Auditoria de cambios en presupuestos y compras
- Validaciones de negocio (no exceder presupuesto)
- Recalculos automaticos (totales, saldos, inventario)
- Notificaciones automaticas (aprobaciones, vencimientos)
---
## 9. MATRIZ DE DECISION: ADOPTAR / ADAPTAR / EVITAR
### 9.1 ADOPTAR COMPLETAMENTE ✅
| Patron | Schema(s) | Justificacion | Prioridad |
|--------|-----------|---------------|-----------|
| **Arquitectura Multi-Schema** | Todos | Separacion logica por dominio | P0 |
| **Organizacion interna de schemas** | Todos | Estructura estandarizada | P0 |
| **Sistema SIMCO (_MAP.md)** | Todos | Documentacion jerarquica | P0 |
| **Row Level Security (RLS)** | auth, gamification, etc. | Multi-tenant isolation | P0 |
| **Triggers de updated_at** | Todos | Auditoria de cambios | P0 |
| **Funciones de contexto** | auth_management | current_user_id(), current_tenant_id() | P0 |
| **Indices en Foreign Keys** | Todos | Performance de JOINs | P0 |
| **Indices GIN en JSONB** | Varios | Busqueda en campos JSONB | P1 |
| **Auditoria completa** | audit_logging | Logs de cambios | P0 |
| **Configuracion dinamica** | system_configuration | Settings sin redeploy | P0 |
### 9.2 ADAPTAR A CONTEXTO ERP 🔧
| Patron | Schema Original | Adaptacion para ERP | Justificacion |
|--------|----------------|---------------------|---------------|
| **Jerarquia organizacional** | social_features | Empresa → Proyecto → Equipo | Estructura similar pero diferente contexto |
| **Sistema de assignments** | educational_content | Ordenes de trabajo | Concepto trasladable |
| **Sistema de submissions** | educational_content | Entregas/Recepciones | Concepto trasladable |
| **Tracking de progreso** | progress_tracking | Avance de obra | Concepto trasladable |
| **Snapshots** | progress_tracking | Snapshots de presupuestos | Historial de cambios |
| **Notas/Comentarios** | progress_tracking | Observaciones de obra | Feedback y seguimiento |
| **Plantillas** | content_management | Plantillas de contratos | Reutilizacion de documentos |
| **Versionado** | content_management | Versionado de documentos | Control de cambios |
### 9.3 EVITAR / NO APLICABLE ❌
| Patron | Schema Original | Razon |
|--------|----------------|-------|
| **Sistema de gamificacion completo** | gamification_system | No aplicable a ERP (XP, logros, rangos mayas) |
| **Contenido educativo** | educational_content | Especifico de educacion (modulos, ejercicios) |
| **Caracteristicas sociales** | social_features | No aplicable (amistades, equipos gaming) |
| **Leaderboards** | gamification_system | No aplicable a ERP |
| **Comodines/Power-ups** | gamification_system | Especifico de juegos |
---
## 10. PROPUESTA DE SCHEMAS PARA ERP GENERICO
Basado en el analisis de GAMILIT, se propone la siguiente arquitectura multi-schema para el ERP Generico:
```sql
-- 9 Schemas propuestos para ERP Generico
core_system -- Usuarios, empresas, monedas, configuracion base
├── companies -- Empresas (multi-tenant)
├── users -- Usuarios del sistema
├── roles -- Roles RBAC
├── permissions -- Permisos granulares
├── user_sessions -- Sesiones activas
├── currencies -- Monedas soportadas
├── exchange_rates -- Tasas de cambio
└── system_settings -- Configuracion dinamica
accounting -- Contabilidad completa
├── chart_of_accounts -- Catalogo de cuentas
├── journal_entries -- Asientos contables
├── account_balances -- Saldos de cuentas
├── fiscal_periods -- Periodos fiscales
├── tax_rates -- Impuestos
└── financial_reports -- Reportes financieros
budgets -- Presupuestos y control
├── budgets -- Presupuestos maestros
├── budget_items -- Partidas presupuestarias
├── budget_categories -- Categorias
├── budget_tracking -- Seguimiento de ejecucion
├── budget_snapshots -- Snapshots historicos
└── budget_approvals -- Flujo de aprobaciones
purchasing -- Compras y proveedores
├── suppliers -- Proveedores
├── purchase_orders -- Ordenes de compra
├── purchase_items -- Items de compra
├── receipts -- Recepciones
├── invoices -- Facturas de proveedores
└── payments -- Pagos a proveedores
inventory -- Inventario y almacenes
├── warehouses -- Almacenes
├── products -- Productos/Materiales
├── product_categories -- Categorias de productos
├── stock_movements -- Movimientos de inventario
├── stock_balances -- Saldos de inventario
└── inventory_snapshots -- Snapshots de inventario
projects -- Proyectos y obras
├── projects -- Proyectos/Obras
├── project_phases -- Fases de proyecto
├── work_orders -- Ordenes de trabajo
├── project_team -- Equipo del proyecto
├── project_progress -- Avance de obra
└── project_documents -- Documentos del proyecto
human_resources -- RRHH y nominas
├── employees -- Empleados
├── departments -- Departamentos
├── payrolls -- Nominas
├── payroll_items -- Conceptos de nomina
├── attendance -- Asistencia
└── employee_benefits -- Beneficios
audit_logging -- Auditoria completa
├── audit_logs -- Logs de auditoria
├── user_activity -- Actividad de usuarios
├── change_history -- Historial de cambios
├── system_logs -- Logs del sistema
└── performance_metrics -- Metricas de performance
system_notifications -- Notificaciones multi-canal
├── notifications -- Notificaciones
├── notification_preferences -- Preferencias
├── notification_templates -- Plantillas
├── notification_queue -- Cola de envios
└── user_devices -- Dispositivos para push
```
**Total schemas:** 9 (igual que GAMILIT)
**Beneficios:**
- Separacion logica clara por dominio
- Multi-tenancy (isolation por empresa)
- Permisos granulares por schema
- Escalabilidad (facil agregar nuevos schemas)
- Mantenibilidad (cambios aislados)
---
## 11. CONCLUSION Y RECOMENDACIONES
### 11.1 Hallazgos Clave
1. **Arquitectura Multi-Schema es excelente:** ⭐⭐⭐⭐⭐
- Separacion logica clara
- Escalabilidad comprobada
- Permisos granulares
- Documentacion estructurada
2. **Row Level Security es critico:** ⭐⭐⭐⭐⭐
- Multi-tenant isolation
- Seguridad a nivel de fila
- Implementacion con funciones de contexto
3. **Sistema SIMCO (_MAP.md) es invaluable:** ⭐⭐⭐⭐⭐
- 85+ archivos de documentacion jerarquica
- Navegacion rapida para AI agents
- Mantenimiento incremental
4. **Triggers y Funciones PL/pgSQL son potentes:** ⭐⭐⭐⭐⭐
- Automatizaciones
- Validaciones de negocio
- Recalculos automaticos
### 11.2 Recomendaciones Finales
#### ADOPTAR COMPLETAMENTE ✅ (Prioridad P0)
1. Arquitectura multi-schema (9 schemas para ERP)
2. Organizacion interna estandarizada de schemas
3. Sistema SIMCO de mapas _MAP.md
4. Row Level Security con funciones de contexto
5. Triggers de updated_at en todas las tablas
6. Indices en foreign keys y campos frecuentes
7. Auditoria completa (audit_logging schema)
8. Configuracion dinamica (system_configuration schema)
#### ADAPTAR A CONTEXTO ERP 🔧 (Prioridad P1)
1. Jerarquia organizacional (Empresa → Proyecto → Equipo)
2. Sistema de ordenes de trabajo (adaptado de assignments)
3. Tracking de progreso (adaptado a avance de obra)
4. Sistema de plantillas (contratos, documentos)
5. Versionado de documentos
#### EVITAR ❌
1. Sistema de gamificacion (no aplicable a ERP)
2. Contenido educativo (especifico de educacion)
3. Caracteristicas sociales de gaming
---
**Documento creado:** 2025-11-23
**Ultima actualizacion:** 2025-11-23
**Version:** 1.0
**Estado:** Completado
**Proximo documento:** `backend-patterns.md`