1120 lines
38 KiB
Markdown
1120 lines
38 KiB
Markdown
# 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`
|