# CHANGELOG - Version 1.5.44

## 🔧 CORRECCIÓN: Usar Código Variable en lugar de ID Variable (SIMAFIR)

**Fecha**: 27 de enero de 2026  
**Tipo**: Bug Fix  
**Prioridad**: Alta  
**Afectados**: Módulo SIMAFIR - Parámetros de Variables

---

## 📋 PROBLEMA IDENTIFICADO

### **Descripción**
Los checkboxes de variables en SIMAFIR estaban enviando `idVariable` (78, 313, 314, etc.) en el atributo `value`, pero el API requiere el **`codigoVariable`** (CPI_T, etc.) para identificar correctamente las variables.

### **Ejemplo de Respuesta del API**
```json
{
  "idTema": 1,
  "variables": [
    {
      "idVariable": 78,
      "codigoVariable": "CPI_T",     ← Este es el que debe usarse
      "variable": "IPC general"
    },
    {
      "idVariable": 313,
      "codigoVariable": "CPI_T",
      "variable": "IPC variación mensual"
    },
    {
      "idVariable": 314,
      "codigoVariable": "CPI_T",
      "variable": "IPC variación interanual"
    }
  ]
}
```

### **HTML Generado INCORRECTO (v1.5.43 y anteriores)**
```html
<div class="custom-control custom-checkbox">
  <input type="checkbox" 
         class="custom-control-input radio-variables" 
         id="var0" 
         name="var[]" 
         data-varname="1|IPC general" 
         value="78">  ❌ Usando idVariable
  <label class="custom-control-label" for="var0">IPC general</label>
</div>
```

### **HTML Generado CORRECTO (v1.5.44)**
```html
<div class="custom-control custom-checkbox">
  <input type="checkbox" 
         class="custom-control-input radio-variables" 
         id="var0" 
         name="var[]" 
         data-varname="1|IPC general" 
         value="CPI_T">  ✅ Usando codigoVariable
  <label class="custom-control-label" for="var0">IPC general</label>
</div>
```

---

## ✅ SOLUCIÓN IMPLEMENTADA

### **Archivo Modificado: `shortcodes/SIMAFIR/params-shortcode.php`**

Se actualizaron **3 instancias** donde se usaba `$value["idVariable"]` para cambiarlo a `$value["codigoVariable"]`:

#### **1. Variables con Múltiples Opciones (Línea ~347)**

**ANTES (v1.5.43)**:
```php
<input type="checkbox" 
       class="custom-control-input radio-variables" 
       id="var<?php echo $x; ?>" 
       name="var[]" 
       data-varname="<?php echo $value["orden"] . "|" . $value["nombreEsp"]; ?>" 
       value="<?php echo $value["idVariable"]; ?>"
       readonly>
```

**AHORA (v1.5.44)**:
```php
<input type="checkbox" 
       class="custom-control-input radio-variables" 
       id="var<?php echo $x; ?>" 
       name="var[]" 
       data-varname="<?php echo $value["orden"] . "|" . $value["nombreEsp"]; ?>" 
       value="<?php echo $value["codigoVariable"]; ?>"
       readonly>
```

#### **2. Variables Normales (Línea ~352)**

**ANTES (v1.5.43)**:
```php
<input type="checkbox" 
       class="custom-control-input radio-variables" 
       id="var<?php echo $x; ?>" 
       name="var[]" 
       data-varname="<?php echo $value["orden"] . "|" . $value["nombreEsp"]; ?>" 
       value="<?php echo $value["idVariable"]; ?>">
```

**AHORA (v1.5.44)**:
```php
<input type="checkbox" 
       class="custom-control-input radio-variables" 
       id="var<?php echo $x; ?>" 
       name="var[]" 
       data-varname="<?php echo $value["orden"] . "|" . $value["nombreEsp"]; ?>" 
       value="<?php echo $value["codigoVariable"]; ?>">
```

#### **3. Variable Única (Solo una opción - Línea ~373)**

**ANTES (v1.5.43)**:
```php
<input type="checkbox" 
       class="custom-control-input radio-aju" 
       id="var<?php echo 0; ?>" 
       name="var[]" 
       data-varname="<?php echo $all[0]["variables"][0]["orden"] . "|" . $all[0]["variables"][0]["nombreEsp"]; ?>" 
       value="<?php echo $all[0]["variables"][0]["idVariable"]; ?>" 
       checked readonly>
```

**AHORA (v1.5.44)**:
```php
<input type="checkbox" 
       class="custom-control-input radio-aju" 
       id="var<?php echo 0; ?>" 
       name="var[]" 
       data-varname="<?php echo $all[0]["variables"][0]["orden"] . "|" . $all[0]["variables"][0]["nombreEsp"]; ?>" 
       value="<?php echo $all[0]["variables"][0]["codigoVariable"]; ?>" 
       checked readonly>
```

---

## 🔄 FLUJO DE DATOS ACTUALIZADO

### **Antes (v1.5.43 - INCORRECTO)**
```
1. API responde:
   {
     "idVariable": 78,
     "codigoVariable": "CPI_T",
     "variable": "IPC general"
   }

2. HTML genera:
   <input value="78">  ❌

3. JavaScript envía:
   var[] = [78, 313, 314]  ❌

4. Backend recibe:
   $vars = "78+313+314"  ❌

5. URL final:
   /porCriterio/.../78+313+314/...  ❌ (API podría rechazar IDs)
```

### **Ahora (v1.5.44 - CORRECTO)**
```
1. API responde:
   {
     "idVariable": 78,
     "codigoVariable": "CPI_T",
     "variable": "IPC general"
   }

2. HTML genera:
   <input value="CPI_T">  ✅

3. JavaScript envía:
   var[] = ["CPI_T", "CPI_T", "CPI_T"]  ✅

4. Backend recibe:
   $vars = "CPI_T+CPI_T+CPI_T"  ✅

5. URL final:
   /porCriterio/.../CPI_T+CPI_T+CPI_T/...  ✅ (API acepta códigos)
```

---

## 🔍 CÓMO VALIDAR EL FIX

### **Test 1: Inspeccionar HTML Generado**

1. **Ir a**: Página de parámetros SIMAFIR
2. **Abrir**: DevTools (F12) → Elements tab
3. **Buscar**: Checkbox de variables
4. **Verificar**:
   ```html
   <!-- CORRECTO (v1.5.44) -->
   <input type="checkbox" name="var[]" value="CPI_T">
   
   <!-- INCORRECTO (v1.5.43) -->
   <input type="checkbox" name="var[]" value="78">
   ```

### **Test 2: Verificar Valor en Console**

1. **Abrir**: DevTools (F12) → Console
2. **Ejecutar**:
   ```javascript
   document.querySelectorAll('input[name="var[]"]').forEach(input => {
     console.log('Variable:', input.value);
   });
   ```
3. **Resultado esperado**:
   ```
   Variable: CPI_T
   Variable: CPI_T
   Variable: CPI_T
   ```

### **Test 3: Verificar URL Generada**

1. **Seleccionar**: Variables en el formulario
2. **Hacer clic**: "Generar Consulta"
3. **Network tab**: Buscar request `obtenerDatos`
4. **Verificar URL contiene**:
   ```
   ✅ /porCriterio/.../CPI_T+CPI_T+.../...
   ❌ /porCriterio/.../78+313+.../...
   ```

### **Test 4: Respuesta del API**

1. **Verificar**: API responde 200 OK
2. **Verificar**: Datos cargan correctamente en tabla
3. **Verificar**: Gráfico se renderiza con series correctas

---

## 📊 MAPEO DE VARIABLES EJEMPLO

| idVariable | codigoVariable | Variable                  | Uso en v1.5.43 | Uso en v1.5.44 |
|------------|----------------|---------------------------|----------------|----------------|
| 78         | CPI_T          | IPC general               | value="78"     | value="CPI_T"  |
| 313        | CPI_T          | IPC variación mensual     | value="313"    | value="CPI_T"  |
| 314        | CPI_T          | IPC variación interanual  | value="314"    | value="CPI_T"  |
| 315        | CPI_T          | IPC variación acumulada   | value="315"    | value="CPI_T"  |

**Nota**: Varias variables pueden compartir el mismo `codigoVariable` (ej: todas las variables de IPC usan "CPI_T").

---

## 🐛 TROUBLESHOOTING

### **Problema: Checkboxes siguen mostrando números como value**

**Posibles causas**:
1. **Cache del navegador**
   - Solución: Ctrl+Shift+Delete → Limpiar cache
   - Hard refresh: Ctrl+F5

2. **Cache de WordPress**
   - Si usas plugin de cache (WP Super Cache, W3 Total Cache, etc.)
   - Limpiar cache desde WordPress Admin

3. **Versión antigua**
   - Verificar: WordPress Admin → Plugins
   - Debe mostrar: "secmca-api v1.5.44"

### **Problema: API rechaza códigos de variables**

```
Error: Variable code not found
```

**Causa**: El API no reconoce el `codigoVariable` enviado

**Verificar**:
1. El API realmente requiere códigos (no IDs)
2. El campo correcto en la respuesta es `codigoVariable`
3. No hay errores de tipeo en los códigos

**Solución temporal** (si API necesita IDs):
- Revertir a v1.5.43 mientras se confirma el formato correcto con el equipo del API

### **Problema: Variables duplicadas en URL**

```
URL: /porCriterio/.../CPI_T+CPI_T+CPI_T/...
```

**Causa**: Múltiples variables comparten el mismo `codigoVariable`

**Esto es CORRECTO** si:
- El API acepta códigos repetidos
- El API diferencia por contexto o parámetros adicionales

**Esto es INCORRECTO** si:
- El API espera códigos únicos por variable
- En ese caso, consultar documentación del API

---

## 📈 IMPACTO

### **Módulos Afectados**
- ✅ **SIMAFIR**: Formulario de parámetros (variables)

### **Módulos NO Afectados**
- ⏩ **SIMAFIR**: Países, unidades, frecuencias (siguen usando IDs)
- ⏩ **EMFA**: Usa sistema propio con conversión ID→SDMX (v1.5.43)
- ⏩ **ESEA**: No modificado
- ⏩ **EFPA**: No modificado

### **Retrocompatibilidad**
- ⚠️ **BREAKING CHANGE**: Si hay URLs guardadas con IDs de variables
- ✅ **Formulario**: Genera URLs nuevas con códigos correctos
- ⚠️ **Bookmarks**: URLs antiguas con IDs podrían fallar

---

## 📝 NOTAS TÉCNICAS

### **¿Por qué usar codigoVariable?**

**Razones**:
1. **Estándar del API**: El API está diseñado para recibir códigos, no IDs
2. **Independencia de BD**: Los IDs pueden cambiar, los códigos son estables
3. **Semántica**: Los códigos tienen significado (CPI_T = Consumer Price Index Total)
4. **Interoperabilidad**: Otros sistemas pueden entender códigos estándar

### **¿Afecta al backend PHP?**

**NO directamente**:
- El backend (`inc/api.php`) solo transforma separadores (`-` → `+`)
- No valida ni procesa los valores específicos de las variables
- Simplemente pasa los códigos al API tal cual

**Flujo**:
```
Frontend: value="CPI_T"
    ↓
JavaScript: var[] = ["CPI_T", "CPI_T"]
    ↓
Backend PHP: CPI_T-CPI_T → CPI_T+CPI_T
    ↓
API: /porCriterio/.../CPI_T+CPI_T/...
```

### **¿Qué pasa con variables que comparten código?**

Según la respuesta del API ejemplo:
```json
{
  "idVariable": 78,
  "codigoVariable": "CPI_T",
  "variable": "IPC general"
},
{
  "idVariable": 313,
  "codigoVariable": "CPI_T",
  "variable": "IPC variación mensual"
}
```

**Observación**: Ambas variables usan `"CPI_T"`

**Implicaciones**:
- Si seleccionas ambas, la URL será: `.../CPI_T+CPI_T/...`
- El API debe ser capaz de distinguirlas por otros parámetros (frecuencia, unidad, etc.)
- Si el API necesita diferenciarlas, podría requerir un formato diferente

**Acción recomendada**: Validar con el equipo del API que este comportamiento es correcto

---

## 🚀 INSTALACIÓN

### **Pasos**

1. **WordPress Admin** → Plugins
2. **Desactivar** "SECMCA API v1.5.43"
3. **Eliminar** plugin antiguo
4. **Subir** `secmca-api-v1.5.44-SIMAFIR-CODIGO-VARIABLE.zip`
5. **Activar** plugin
6. **Limpiar cache** del navegador (Ctrl+Shift+Delete)
7. **Probar** consulta SIMAFIR seleccionando variables

### **Validación Post-Instalación**

```bash
# Inspeccionar HTML:
<input type="checkbox" name="var[]" value="CPI_T">  ✅

# En Network tab debe aparecer:
✅ /porCriterio/.../CPI_T+.../...  (códigos de variables)
❌ /porCriterio/.../78+313+.../...  (IDs de variables)

# API responde:
✅ 200 OK con datos JSON
```

---

## 📚 ARCHIVOS MODIFICADOS

```
shortcodes/SIMAFIR/params-shortcode.php
├── Línea ~347: idVariable → codigoVariable (checkbox readonly)
├── Línea ~352: idVariable → codigoVariable (checkbox normal)
└── Línea ~373: idVariable → codigoVariable (checkbox único)

secmca-api.php
└── Version: 1.5.43 → 1.5.44
```

---

## 🔗 REFERENCIAS

- **API Response**: Estructura JSON con `idVariable` y `codigoVariable`
- **v1.5.43**: EMFA SDMX conversion (ID → código país)
- **v1.5.42**: Fix separator "+" en SIMAFIR
- **v1.5.41**: Reordenamiento de parámetros SIMAFIR

---

## ✅ CHECKLIST DE VALIDACIÓN

Antes de marcar como completado, verificar:

- [ ] Plugin instalado correctamente (v1.5.44)
- [ ] Checkboxes de variables usan `codigoVariable` como value
- [ ] HTML generado contiene códigos (ej: CPI_T) no IDs (ej: 78)
- [ ] JavaScript envía códigos al backend
- [ ] URL generada contiene códigos de variables
- [ ] API responde 200 OK
- [ ] Datos cargan en tabla/gráfico
- [ ] No hay errores en Console
- [ ] Cache navegador limpiado
- [ ] Validar con equipo de API si formato es correcto

---

## ⚠️ ADVERTENCIA IMPORTANTE

**ANTES DE IMPLEMENTAR**, confirmar con el equipo del API:

1. ¿El API realmente requiere `codigoVariable` en lugar de `idVariable`?
2. ¿Cómo maneja el API variables con el mismo `codigoVariable`?
3. ¿Hay casos donde múltiples códigos iguales son válidos?

Si el API espera IDs numéricos, **NO INSTALAR** esta versión y reportar al equipo de desarrollo.

---

**Versión anterior**: v1.5.43 (EMFA SDMX conversion)  
**Versión actual**: v1.5.44 (SIMAFIR código variable)  
**Próxima versión**: TBD
