# 📚 REFERENCE - Código de Referencia

**Propósito:** Esta carpeta contiene proyectos y código de referencia para análisis, comparación y mejora del desarrollo actual.

---

## 🎯 USO

### Para Architecture-Analyst
- Analizar implementaciones de referencia de Odoo y OCA
- Comparar patrones arquitectónicos
- Documentar mejores prácticas observadas
- Proponer mejoras basadas en referencias

### Para Agentes de Desarrollo
- Consultar implementaciones de funcionalidades similares
- Comparar enfoques de diseño en módulos Odoo
- Reutilizar patrones probados
- Entender mejores prácticas de desarrollo Python/Odoo

### Para Claude Code Cloud
- Acceso a código de referencia desde cualquier instancia
- Comparaciones automáticas con código actual
- Análisis de implementaciones

---

## 📂 ESTRUCTURA

```
reference/
├── README.md                     # Este archivo
├── odoo/                         # Código Odoo de referencia
│   └── README.md
├── gamilit/                      # Proyecto GAMILIT (arquitectura educativa)
│   ├── README.md
│   ├── _MAP.md                   # Mapa completo del proyecto
│   ├── backend/                  # Backend Node.js + TypeScript
│   ├── frontend/                 # Frontend React + TypeScript
│   ├── database/                 # PostgreSQL schemas y DDL
│   └── devops/                   # Scripts DevOps y validación
├── odoo-modules/                 # Módulos Odoo de referencia (futuro)
│   ├── oca-account/              # Módulos contables de OCA
│   │   ├── __manifest__.py
│   │   ├── models/
│   │   └── README.md
│   └── custom-modules/           # Módulos personalizados de ejemplo
├── python-patterns/              # Patrones Python de referencia (futuro)
│   ├── design-patterns/
│   └── best-practices/
└── integrations/                 # Integraciones de referencia (futuro)
    ├── api-examples/
    └── external-services/
```

---

## ⚠️ IMPORTANTE - Qué Versionar

### ✅ SÍ versionar (INCLUIR):
- Código fuente Python (.py)
- Archivos de manifiesto (__manifest__.py, __init__.py)
- Archivos de configuración (requirements.txt, setup.py)
- Documentación (.md files, .rst files)
- Esquemas de base de datos (.sql files, .xml files)
- Archivos de vista (.xml)
- Archivos de datos (.csv, .xml para datos)
- README y documentación

### ❌ NO versionar (IGNORADO automáticamente):
- __pycache__/
- *.pyc
- *.pyo
- .eggs/
- venv/
- env/
- .venv/
- node_modules/ (si hay frontend)
- dist/
- build/
- .next/ (si hay Next.js)
- coverage/
- *.log
- *.tmp
- *.cache
- .DS_Store

**Razón:** Solo versionamos código fuente. Las dependencias Python se pueden regenerar con `pip install -r requirements.txt`.

---

## 📋 DIRECTRICES

### Al Agregar Proyectos de Referencia

1. **Limpiar antes de agregar:**
   ```bash
   # Eliminar cache Python y virtual environments
   cd reference/nuevo-proyecto
   find . -name "__pycache__" -type d -exec rm -rf {} + 2>/dev/null
   find . -name "*.pyc" -delete
   find . -name "*.pyo" -delete
   rm -rf venv env .venv
   ```

2. **Verificar que está limpio:**
   ```bash
   # No debe mostrar carpetas de cache o virtual environments
   du -sh reference/nuevo-proyecto/*
   ```

3. **Agregar README del proyecto:**
   ```markdown
   # Proyecto: {nombre}

   **Fuente:** {URL o descripción}
   **Propósito:** ¿Por qué se incluye como referencia?
   **Aspectos relevantes:** ¿Qué podemos aprender?

   ## Instalación (para probar localmente)
   ```bash
   cd reference/{nombre}
   python3 -m venv venv
   source venv/bin/activate
   pip install -r requirements.txt
   ```

   ## Aspectos destacables
   - Feature 1: Descripción
   - Pattern 2: Descripción
   ```

4. **Commit con mensaje descriptivo:**
   ```bash
   git add reference/nuevo-proyecto
   git commit -m "ref: agregar proyecto {nombre} como referencia para {propósito}"
   ```

---

## 🔍 VALIDACIÓN

### Verificar que reference/ está en el repo:
```bash
# Debe devolver vacío (no ignorado)
git check-ignore reference/

# Debe mostrar archivos de reference/
git ls-files reference/
```

### Verificar que __pycache__ está ignorado dentro de reference/:
```bash
# Debe devolver: reference/proyecto/__pycache__/
git check-ignore reference/proyecto/__pycache__/
```

### Verificar que venv está ignorado dentro de reference/:
```bash
# Debe devolver: reference/proyecto/venv/
git check-ignore reference/proyecto/venv/
```

### Ejecutar validación automática:
```bash
bash orchestration/scripts/validate-gitignore.sh
```

Debe mostrar:
```
✅ reference/ NO está ignorado (correcto)
✅ reference/**/__pycache__/ está ignorado (correcto)
✅ reference/**/venv/ está ignorado (correcto)
```

---

## 📊 TAMAÑO RECOMENDADO

**Máximo recomendado:** ~100MB por proyecto (solo código fuente)

Si un proyecto excede este tamaño:
- Considerar incluir solo las partes relevantes
- Crear subcarpeta con implementaciones específicas
- Documentar ubicación del proyecto completo (URL)

---

## 🎓 EJEMPLOS DE USO

### Ejemplo 1: Analizar Módulo Contable de OCA

```markdown
**Tarea:** Implementar gestión de ejercicios fiscales

**Agente:** Architecture-Analyst

**Proceso:**
1. Revisar `reference/odoo-modules/oca-account/account_fiscal_year/`
2. Analizar modelos de datos y vistas
3. Comparar con implementación actual
4. Documentar mejoras en `docs/adr/ADR-XXX.md`
```

### Ejemplo 2: Implementar Feature Similar

```markdown
**Tarea:** Implementar templates de asientos contables

**Agente:** Backend-Agent

**Proceso:**
1. Consultar `reference/odoo-modules/oca-account/account_move_template/`
2. Revisar modelos de datos y lógica de negocio
3. Adaptar patrones al proyecto actual
4. Implementar con mejores prácticas observadas
```

### Ejemplo 3: Comparar Arquitectura

```markdown
**Tarea:** Refactorizar estructura de módulos Odoo

**Agente:** Architecture-Analyst

**Proceso:**
1. Analizar `reference/odoo-modules/best-practices/`
2. Comparar con estructura actual
3. Proponer mejoras arquitectónicas
4. Crear plan de refactorización
```

---

## 🎯 CASOS DE USO ESPECÍFICOS

### Proyecto GAMILIT (Referencia Arquitectónica)

**Relevancia:** Sistema educativo gamificado con arquitectura moderna y prácticas recomendadas

**Aspectos destacables:**
- Monorepo TypeScript con backend (Node.js/Express) y frontend (React/Vite)
- Arquitectura de base de datos multi-schema (9 schemas, 44 tablas)
- Sistema de constantes SSOT (Single Source of Truth)
- Feature-Sliced Design en frontend
- Path aliases consistentes
- Scripts de validación y sincronización automática

**Aplicable para:**
- Patrones de arquitectura de software
- Estructura de monorepo
- Sincronización Backend ↔ Frontend
- Organización de base de datos PostgreSQL
- Testing y validación automática

**Ver:** `reference/gamilit/README.md` y `reference/gamilit/_MAP.md`

---

### Proyectos Odoo de Referencia

```markdown
Tipos de proyectos a incluir:
- Módulos OCA (Odoo Community Association)
- Módulos core de Odoo con implementaciones ejemplares
- Módulos personalizados con patrones útiles
- Integraciones con servicios externos
- Implementaciones de reportes complejos
```

### Patrones Python

```markdown
Tipos de patrones a incluir:
- Design patterns (Singleton, Factory, etc.)
- Patrones de testing
- Patrones de API design
- Patrones de manejo de datos
```

---

## 📚 REFERENCIAS

- [DIRECTIVA-GESTION-BACKUPS-GITIGNORE.md](../orchestration/directivas/DIRECTIVA-GESTION-BACKUPS-GITIGNORE.md) - Sección 1.5
- [PROMPT-ARCHITECTURE-ANALYST.md](../orchestration/prompts/PROMPT-ARCHITECTURE-ANALYST.md)
- `.gitignore` - Sección REFERENCE

---

## ✅ CHECKLIST ANTES DE COMMIT

Antes de agregar un nuevo proyecto de referencia:

- [ ] Eliminar __pycache__/, *.pyc, *.pyo
- [ ] Eliminar venv/, env/, .venv/
- [ ] Eliminar node_modules/ (si aplica)
- [ ] Verificar que solo hay código fuente
- [ ] Agregar README del proyecto explicando propósito
- [ ] Verificar tamaño total (< 100MB recomendado)
- [ ] Documentar aspectos relevantes del proyecto
- [ ] Commit con mensaje descriptivo

---

## 🔗 RECURSOS ÚTILES

### Repositorios OCA

- [OCA Account Financial Tools](https://github.com/OCA/account-financial-tools)
- [OCA Account Invoicing](https://github.com/OCA/account-invoicing)
- [OCA Server Tools](https://github.com/OCA/server-tools)
- [OCA Web Tools](https://github.com/OCA/web)

### Documentación Odoo

- [Odoo Developer Documentation](https://www.odoo.com/documentation/master/developer.html)
- [Odoo ORM Guide](https://www.odoo.com/documentation/master/developer/reference/backend/orm.html)

---

**Última actualización:** 2025-11-23
**Mantenido por:** Architecture-Analyst, Workspace-Manager
**Directiva:** DIRECTIVA-GESTION-BACKUPS-GITIGNORE.md sección 1.5
