# CHANGELOG v1.5.36 - ESEA: Usar chartID en lugar de subject para API

**Fecha**: 24 de enero de 2026  
**Versión**: 1.5.36  
**Tipo**: Fix - Corrección de parámetros API

---

## 📋 Resumen

Cambio en el módulo ESEA para usar el parámetro `chartID` (numérico) en lugar de `subject` (string) al realizar llamadas a la API v2. Este cambio asegura que la API reciba el identificador correcto del formulario.

---

## 🔍 Problema Detectado

### Síntoma Observado
API recibiendo identificadores de tipo string cuando debería recibir IDs numéricos:

```
URL Generada (Incorrecta):
/public/v1/esea/obtenerDatos/RAF/95?fechaInicio=01-01-2021&fechaFin=31-12-2021
                           ↑
                      String code

URL Esperada (Correcta):
/public/v1/esea/obtenerDatos/444/95?fechaInicio=01-01-2021&fechaFin=31-12-2021
                           ↑
                      Numeric ID
```

### Causa Raíz
El código estaba extrayendo el parámetro `subject` del URL en lugar de usar directamente el valor de `chartID`:

```php
// ANTES (Incorrecto):
$formulario = isset($_GET["subject"]) ? urldecode($_GET["subject"]) : '';
// Obtenía: "RAF", "BOPBPM6", "IIPBPM6", "EDTBPM6" (strings)

// DESPUÉS (Correcto):
$formulario = $chartID;
// Obtiene: 442, 444, 443, 440 (números)
```

---

## ✅ Cambios Realizados

### Archivo Modificado

**`secmca-api.php`**

### Ubicaciones Actualizadas (8 bloques de código)

#### 1. chartID 442 - Balanza de Pagos
- **Líneas**: ~2686-2710
- **Bloques**: if + else
- **Cambio**: De `$_GET["subject"]` → `$chartID` (442)
- **Formulario**: Balanza de Pagos (BOP)

#### 2. chartID 444 - Activos de Reserva
- **Líneas**: ~2766-2795
- **Bloques**: if + else (con 3 casos de epID: 0, 1, 2)
- **Cambio**: De `$_GET["subject"]` → `$chartID` (444)
- **Formulario**: Activos de Reserva y Liquidez (RAF/ARDLBPM6)
- **Comentarios actualizados**: "ej: ARDLBPM6" → "ej: 444"

#### 3. chartID 443 - Posición de Inversión Internacional
- **Líneas**: ~2848-2870
- **Bloques**: if solamente (con 3 casos de epID: 0, 1, 2)
- **Cambio**: De `$_GET["subject"]` → `$chartID` (443)
- **Formulario**: Posición de Inversión Internacional (IIPBPM6)
- **Comentarios actualizados**: "ej: IIPBPM6" → "ej: 443"

#### 4. chartID 440 - Deuda Externa
- **Líneas**: ~3527-3560
- **Bloques**: if + else (con 4 casos de epID: 0, 1, 2, 3)
- **Cambio**: De `$_GET["subject"]` → `$chartID` (440)
- **Formulario**: Saldo Bruto Deuda Externa (EDTBPM6)
- **Comentarios actualizados**: "ej: EDTBPM6" → "ej: 440"

---

## 📊 Mapeo chartID vs subject

| chartID | subject (anterior) | Formulario |
|---------|-------------------|------------|
| **442** | BOPBPM6 | Balanza de Pagos |
| **444** | RAF / ARDLBPM6 | Activos de Reserva y Liquidez |
| **443** | IIPBPM6 | Posición de Inversión Internacional |
| **440** | EDTBPM6 | Saldo Bruto Deuda Externa |

---

## 🔧 Ejemplo de Código

### Antes (v1.5.35)
```php
if(isset($_GET["finaldates"])){
    $country = urldecode($_GET["country"]);
    $finaldates = $_GET["finaldates"];
    
    // Extraía el parámetro "subject" del URL
    $formulario = isset($_GET["subject"]) ? urldecode($_GET["subject"]) : '';
    // Resultado: $formulario = "RAF" (string)
    
    if(isset($_GET["epID"]) && $_GET["epID"] == 0) {
        $all_data = $this->api->esea_allData2($country, $finaldates, $formulario);
    }
}
```

### Después (v1.5.36)
```php
if(isset($_GET["finaldates"])){
    $country = urldecode($_GET["country"]);
    $finaldates = $_GET["finaldates"];
    
    // Usa directamente el chartID numérico
    $formulario = $chartID; // Usar chartID directamente (ej: 444)
    // Resultado: $formulario = 444 (integer)
    
    if(isset($_GET["epID"]) && $_GET["epID"] == 0) {
        $all_data = $this->api->esea_allData2($country, $finaldates, $formulario);
    }
}
```

---

## 🎯 Resultados Esperados

### URLs Generadas a la API

#### chartID 442 (Balanza de Pagos)
```
Antes: /obtenerDatos/BOPBPM6/3?fechaInicio=...
Ahora: /obtenerDatos/442/3?fechaInicio=...
```

#### chartID 444 (Activos de Reserva)
```
Antes: /obtenerDatos/RAF/95?fechaInicio=...
Ahora: /obtenerDatos/444/95?fechaInicio=...
```

#### chartID 443 (Posición de Inversión)
```
Antes: /obtenerDatos/IIPBPM6/3?fechaInicio=...
Ahora: /obtenerDatos/443/3?fechaInicio=...
```

#### chartID 440 (Deuda Externa)
```
Antes: /obtenerDatos/EDTBPM6/95?fechaInicio=...
Ahora: /obtenerDatos/440/95?fechaInicio=...
```

---

## 🔄 Historial de Versiones ESEA

| Versión | Cambio | Descripción |
|---------|--------|-------------|
| **v1.5.32** | Fix dates | Pasar fechas directamente a `esea_allData2()` |
| **v1.5.33** | Fix field | `idDetalle` → `idFormulario` en 8 archivos shortcode |
| **v1.5.34** | Fix API | Usar `subject` dinámico en lugar de nombres hardcoded |
| **v1.5.35** | Fix else | Actualizar bloques legacy a API v2 |
| **v1.5.36** | **Fix param** | **Usar `chartID` numérico en lugar de `subject` string** |

---

## 📝 Notas Técnicas

### Endpoint API v2
```
/public/v1/esea/obtenerDatos/{formulario}/{pais}?fechaInicio=dd-mm-yyyy&fechaFin=dd-mm-yyyy
```

### Parámetro "formulario"
- **Documentación**: "nombre del formulario" (ambiguo: ¿nombre o ID?)
- **Decisión**: Usar chartID numérico basado en observación de URLs
- **Validación**: Pendiente confirmar con API en producción

### URLs Observados
```
https://www.secmca.org/esea-chart/?subject=RAF&chartid=444&epID=0
                                         ↑            ↑
                                    String code  Numeric ID
```

La API debe recibir el valor de `chartid` (444) en lugar de `subject` (RAF).

---

## ✅ Testing

### Checklist de Pruebas Pendientes

- [ ] **chartID 442**: Verificar que `/obtenerDatos/442/3` devuelve datos de Balanza de Pagos
- [ ] **chartID 444**: Verificar que `/obtenerDatos/444/95` devuelve Activos de Reserva
- [ ] **chartID 443**: Verificar que `/obtenerDatos/443/3` devuelve Posición de Inversión
- [ ] **chartID 440**: Verificar que `/obtenerDatos/440/95` devuelve Deuda Externa
- [ ] **epID cases**: Probar todos los casos de epID (0, 1, 2, 3) según corresponda
- [ ] **Error log**: Revisar `inc/errorlog.txt` para errores de API
- [ ] **Debug panel**: Confirmar que muestra chartID correctos

### Validación en Producción
```bash
# Verificar logs de API
tail -f inc/errorlog.txt

# Buscar llamadas a esea_allData2
grep -n "esea_allData2" secmca-api.php
```

---

## 🚀 Despliegue

### Pasos de Instalación

1. **Backup del plugin actual**
   ```bash
   cp -r wp-content/plugins/secmca-api wp-content/plugins/secmca-api-backup
   ```

2. **Descomprimir nueva versión**
   ```bash
   unzip secmca-api-v1.5.36-ESEA-USE-CHARTID.zip
   ```

3. **Reemplazar archivos**
   ```bash
   cp -r secmca-api/* wp-content/plugins/secmca-api/
   ```

4. **Verificar versión en WordPress**
   - Admin → Plugins → Verificar versión 1.5.36

5. **Probar URLs ESEA**
   - Acceder a páginas con chartID 442, 444, 443, 440
   - Verificar que muestren datos correctamente

---

## ⚠️ Rollback

Si la API rechaza los IDs numéricos:

```bash
# Restaurar versión anterior
cp -r wp-content/plugins/secmca-api-backup/* wp-content/plugins/secmca-api/
```

**Alternativa**: Puede ser necesario crear un mapeo chartID → subject si API requiere strings.

---

## 📞 Soporte

Si después del despliegue se observan:
- ❌ Páginas en blanco
- ❌ Errores en `inc/errorlog.txt`
- ❌ API devuelve errores 400/404

**Posible Causa**: API no acepta IDs numéricos, requiere códigos string.

**Solución**: Revertir a v1.5.35 o implementar mapeo chartID → subject.

---

## 👨‍💻 Desarrollador
**Cambios realizados por**: GitHub Copilot  
**Fecha**: 24 de enero de 2026  
**Contexto**: Corrección de parámetros API basada en observación de URLs y comportamiento de API v2
