# 🔧 Análisis: Remoción del Campo 'module' de Sie_Progress

> **Status:** Campo removido de BD. Código aún intenta accederlo en 11 archivos, 42 ocurrencias.

---

## 📊 Resumen Ejecutivo

| Métrica | Valor |
|---------|-------|
| Archivos afectados | 11 |
| Total de ocurrencias | 42 |
| Archivos sin riesgo | 3 (Progress views) |
| Archivos con riesgo medio | 4 (Preenrollment/Tools) |
| Archivos con riesgo bajo | 4 (Heredados) |
| Líneas a cambiar | ~42 |
| Tiempo estimado | 2-3 horas (incluye testing) |
| Complejidad | **Baja-Media** |
| Impacto en BD | **Ninguno** (corrección de código) |

---

## 🎯 El Problema en 30 Segundos

```php
// ❌ ANTES (actual - FALLA porque 'module' no existe en BD)
$progress = $mprogress->get_ProgressByEnrollment($eid);
$module = $mmodules->getModule($progress['module']); // Undefined field!

// ✅ DESPUÉS (correcto)
$progress = $mprogress->get_ProgressByEnrollment($eid);
$pensum = $mpensums->getPensum($progress['pensum']);
$module = $mmodules->getModule($pensum['module']); // Ahora existe!
```

**Relación Correcta:**
```
Progress → [pensum_id] → Pensum → [module_id] → Module
                                     ↑
                            Aquí está el 'module'
```

---

## 📁 Archivos por Lote de Refactoring

### 🟢 LOTE 1: Progress Views (SIN RIESGO - 3 archivos, 19 cambios)

Patrón simple: Find-Replace

```
Views/Progress/List/table.php       → 7 cambios (líneas: 118, 120, 155, 158, 161, 164, 167)
Views/Progress/Reader/table.php     → 6 cambios (líneas: 84, 122, 125, 128, 131, +1)
Views/Progress/Print/table.php      → 6 cambios (líneas: 89, 108, 111, 114, 117, +1)
```

**Cambio estándar:**
```diff
- $module = $mmodules->getModule($progress['module']);
+ $module = $mmodules->getModule($pensum['module']);

- alt=\"" . $progress['module'] . "\"
+ alt=\"" . $pensum['module'] . "\"
```

---

### 🟡 LOTE 2: Preenrollment/Tools (VALIDAR CONTEXTO - 4 archivos, 17 cambios)

Patrón mixto: queries + display + comentarios

```
Views/Tools/Preenrollment/preenrollment.php         → 6 cambios
  └─ Línea 85:   $module = $mmodules->getModule($progress['module'])
  └─ Línea 86:   .where("module", $progress['module'])
  └─ Línea 91:   (repetido)
  └─ Línea 97:   span display
  └─ Línea 102:  comentario
  └─ Línea 105:  .where("module", $progress['module'])

Views/Preenrollments/Edit/preenrollment.php        → 4 cambios
  └─ Línea 65:   $module = $mmodules->getModule($progress['module'])
  └─ Línea 68:   .where("module", $progress['module'])
  └─ Línea 74:   $module = (repetido)
  └─ Línea 78:   span display

Views/Preenrollments/Edit/Components/check.php    → 2 cambios
  └─ Línea 4:    comentario
  └─ Línea 8:    .where("module", $progress['module'])

Views/Tools/ProgressPensumModule/view.php         → 2 cambios
  └─ Línea 38:   .where("module", $progress['module'])
  └─ Línea 51:   display echo
```

**Cambios típicos:**
```diff
# Query pattern
- $pensums = $mpensums->where("module", $progress['module'])->findAll();
+ $pensums = $mpensums->where("module", $pensum['module'])->findAll();

# Comment pattern
- // $progress['module'] es el modulo real desde "sie_modules"
+ // $pensum['module'] es el modulo real desde "sie_modules"
```

---

### 🔵 LOTE 3: Heredados + Documentación (BAJA PRIORIDAD - 4 archivos, 6 cambios)

```
Views/Tools/Autoenrollment/view.php                → 1 cambio (línea 65)
Views/Reports/Preenrollments/view.php              → 2 cambios (líneas 116, 125)
Views/Excels/preenrollments-old.php               → 1 cambio (línea 64) ⚠️ DEPRECATED?
Views/Progress/List/readme.md                     → 1 cambio (línea 166, documentación)
```

---

## 🧪 Validación Post-Cambio

```bash
# 1. Verificar sintaxis PHP
php -l Views/Progress/List/table.php
php -l Views/Progress/Reader/table.php
php -l Views/Progress/Print/table.php
# ... etc para todos

# 2. Ejecutar tests
./vendor/bin/phpunit --stop-on-failure 2>&1 | tail -20

# 3. Verificar que no quedan rastros
grep -r "\$progress\['module'\]" app/Modules/Sie/Views/
# Debería retornar VACÍO (o solo comentarios explicativos si es necesario)

# 4. Revisar diff
git diff app/Modules/Sie/Views/
```

---

## 📋 Checklist de Ejecución

### Preparación
- [ ] Crear rama: `git checkout -b fix/progress-module-field`
- [ ] Backup actual: `git status` limpio

### Fase 1: Lote 1 (Progress Views)
- [ ] Editar Views/Progress/List/table.php
- [ ] Editar Views/Progress/Reader/table.php  
- [ ] Editar Views/Progress/Print/table.php
- [ ] `php -l` en cada archivo
- [ ] `./vendor/bin/phpunit --stop-on-failure`

### Fase 2: Lote 2 (Preenrollment/Tools)
- [ ] Editar Views/Tools/Preenrollment/preenrollment.php
- [ ] Editar Views/Preenrollments/Edit/preenrollment.php
- [ ] Editar Views/Preenrollments/Edit/Components/check.php
- [ ] Editar Views/Tools/ProgressPensumModule/view.php
- [ ] `php -l` en cada archivo
- [ ] `./vendor/bin/phpunit --stop-on-failure`

### Fase 3: Lote 3 (Heredados)
- [ ] Editar Views/Tools/Autoenrollment/view.php
- [ ] Editar Views/Reports/Preenrollments/view.php
- [ ] Editar Views/Excels/preenrollments-old.php (considerar deprecation)
- [ ] Actualizar Views/Progress/List/readme.md
- [ ] `php -l` en cada archivo
- [ ] `./vendor/bin/phpunit --stop-on-failure`

### Validación Final
- [ ] `grep -r "\$progress\['module'\]"` retorna vacío
- [ ] Revisar `git diff` completo
- [ ] Commit: `Fix: Use pensum['module'] instead of progress['module'] (removed field from Sie_Progress model)`

---

## 🔍 Matriz de Riesgo

| Lote | Archivos | Complejidad | Riesgo | Prioridad |
|------|----------|------------|--------|-----------|
| 1 | 3 | Baja | Bajo | 🔴 PRIMERO |
| 2 | 4 | Media | Medio | 🟠 SEGUNDO |
| 3 | 4 | Baja | Bajo | 🟡 TERCERO |

---

## 💡 Notas Técnicas

### No hay impacto en queries
```
ANTES: getPensum() + getModule(progress['module']) = 2 queries (una falla)
DESPUÉS: getPensum() + getModule(pensum['module']) = 2 queries (ambas OK)
```

### Archivos que tienen $pensum ya disponible
```
✅ Views/Progress/List/table.php       → pensum obtenido en línea 117
✅ Views/Progress/Reader/table.php     → pensum obtenido en línea 85
✅ Views/Progress/Print/table.php      → pensum obtenido en línea 90
✅ Todos en Lote 2                     → pensum disponible en contexto
```

### Archivos que deben obtener pensum
```
⚠️ Views/Tools/Autoenrollment/view.php    → Revisar línea 67
⚠️ Views/Tools/Preenrollment/preenrollment.php (línea 87) → ya obtiene
```

---

## 🚀 Recomendaciones

1. **Ejecutar en orden:** Lote 1 → Lote 2 → Lote 3
2. **Testing entre lotes:** Ejecutar phpunit después de cada lote
3. **Atomic commits:** Hacer commit por lote, no todo de una
4. **Deprecation check:** Considerar eliminar `preenrollments-old.php` si no se usa
5. **Documentation:** Actualizar cualquier doc interna que mencione `progress['module']`

---

## 📞 Puntos de Contacto

**Si falla algún archivo:**
1. Verificar que `$pensum` está disponible en el scope
2. Si no, obtener: `$pensum = $mpensums->getPensum($progress['pensum']);`
3. Si el archivo hace queries por module, cambiar a: `.where('module', $pensum['module'])`
4. Si es display/UI, cambiar a: `$pensum['module']` o usar `$module['name']` si se obtiene

---

**Documento generado:** 2026-05-13  
**Análisis completo:** [analysis_progress_module_field_removal.md](/home/oem/.claude/projects/-www-wwwroot--development-app-Modules-Sie/memory/analysis_progress_module_field_removal.md)
