# CHANGELOG - Version 1.5.43

## 🔧 CORRECCIÓN: Conversión ID → Código SDMX para EMFA

**Fecha**: 25 de enero de 2026  
**Tipo**: Bug Fix  
**Prioridad**: Media  
**Afectados**: Módulo EMFA

---

## 📋 PROBLEMA IDENTIFICADO

### **Descripción**
El API de EMFA requiere **códigos SDMX** (CR, SV, GT, etc.) para el parámetro de país, pero el plugin estaba enviando **IDs numéricos** (3, 13, 50, etc.) directamente desde los formularios.

### **URL Incorrecta (v1.5.42 y anteriores)**
```
❌ http://.../emfa/obtenerDatos/BALANCE_MATRIZ_BC/3?fechaInicio=01-03-2001&fechaFin=31-05-2003
                                                   ↑ ID numérico (incorrecto)
```

### **URL Correcta (v1.5.43)**
```
✅ http://.../emfa/obtenerDatos/BALANCE_MATRIZ_BC/CR?fechaInicio=01-03-2001&fechaFin=31-05-2003
                                                    ↑ Código SDMX (correcto)
```

### **Documentación del API**
Según `api-endpoints-documentation.md` línea 57:

> "Solo se debe enviar el identificador del cuadro y el **código SDMX del país**."

---

## ✅ SOLUCIÓN IMPLEMENTADA

### **1. Nueva Función Helper: `country_id_to_sdmx()`**

**Ubicación**: `inc/api.php` (después de `clean_url()`)

```php
/**
 * Convierte ID de país a código SDMX para el API
 * 
 * @param int|string $countryId ID numérico del país
 * @return string Código SDMX del país
 */
private function country_id_to_sdmx($countryId) {
    $mapping = array(
        '3'   => 'CR',  // Costa Rica
        '13'  => 'SV',  // El Salvador
        '50'  => 'GT',  // Guatemala
        '17'  => 'HN',  // Honduras
        '4'   => 'NI',  // Nicaragua
        '52'  => 'DO',  // República Dominicana
        '161' => 'PA'   // Panamá
    );
    
    $countryId = (string) $countryId;
    
    if (isset($mapping[$countryId])) {
        return $mapping[$countryId];
    }
    
    // Si ya es código SDMX, retornarlo tal cual
    if (preg_match('/^[A-Z]{2}$/', $countryId)) {
        return $countryId;
    }
    
    error_log("SECMCA API Warning: ID de país desconocido '{$countryId}'");
    return $countryId;
}
```

### **2. Funciones Actualizadas**

Se aplicó la conversión en **3 funciones EMFA**:

#### **a) `emfa_allData()`**
```php
// 🆕 CONVERTIR ID DE PAÍS A CÓDIGO SDMX
$countryOriginal = $country; // Guardar original para debug
$country = $this->country_id_to_sdmx($country);

// Debug panel muestra ambos valores:
'País ID Original' => $countryOriginal,  // ej: "3"
'País SDMX' => $country,                 // ej: "CR"
```

#### **b) `emfa_allData_matriz()`** (Matriz BC)
```php
// 🆕 CONVERTIR ID DE PAÍS A CÓDIGO SDMX
$countryOriginal = $country;
$country = $this->country_id_to_sdmx($country);

// URL final:
// .../emfa/obtenerDatos/BALANCE_MATRIZ_BC/CR?fechaInicio=...
```

#### **c) `emfa_allData_matriz2()`** (Matriz OSD)
```php
// 🆕 CONVERTIR ID DE PAÍS A CÓDIGO SDMX
$countryOriginal = $country;
$country = $this->country_id_to_sdmx($country);

// URL final:
// .../emfa/obtenerDatos/BALANCE_MATRIZ_OSD/CR?fechaInicio=...
```

---

## 📊 MAPEO ID → CÓDIGO SDMX

| ID  | País                  | Código SDMX | Ejemplo URL                              |
|-----|-----------------------|-------------|------------------------------------------|
| 3   | Costa Rica            | CR          | `.../obtenerDatos/CUADRO/CR?...`        |
| 13  | El Salvador           | SV          | `.../obtenerDatos/CUADRO/SV?...`        |
| 50  | Guatemala             | GT          | `.../obtenerDatos/CUADRO/GT?...`        |
| 17  | Honduras              | HN          | `.../obtenerDatos/CUADRO/HN?...`        |
| 4   | Nicaragua             | NI          | `.../obtenerDatos/CUADRO/NI?...`        |
| 52  | República Dominicana  | DO          | `.../obtenerDatos/CUADRO/DO?...`        |
| 161 | Panamá                | PA          | `.../obtenerDatos/CUADRO/PA?...`        |

---

## 🔍 CÓMO VALIDAR EL FIX

### **Test 1: Consulta EMFA Simple**

1. **Ir a**: Cualquier página EMFA (ej: Matriz BC)
2. **Seleccionar**: País = Costa Rica (ID: 3)
3. **Abrir**: DevTools (F12) → Network tab
4. **Buscar**: Request `obtenerDatos`
5. **Verificar URL**:
   ```
   ✅ CORRECTO: .../obtenerDatos/BALANCE_MATRIZ_BC/CR?fechaInicio=...
   ❌ INCORRECTO: .../obtenerDatos/BALANCE_MATRIZ_BC/3?fechaInicio=...
   ```

### **Test 2: Debug Panel (Usuario Logueado)**

1. **Abrir**: DevTools → Console
2. **Buscar**: Debug panel output
3. **Verificar**:
   ```json
   {
     "title": "📈 Consultar Datos EMFA",
     "params": {
       "País ID Original": "3",
       "País SDMX": "CR"  // ← Debe mostrar código SDMX
     }
   }
   ```

### **Test 3: Respuesta del API**

1. **Network tab** → Click en request `obtenerDatos`
2. **Preview/Response tab**
3. **Verificar**: API retorna 200 OK con datos JSON
4. **Si falla**: Verificar mensaje de error

---

## 🐛 TROUBLESHOOTING

### **Problema: País sigue apareciendo como ID numérico**

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

2. **Versión antigua instalada**
   - Verificar: WordPress Admin → Plugins
   - Debe mostrar: "secmca-api v1.5.43"
   - Si no: Desactivar, eliminar, reinstalar ZIP

3. **Otro módulo afectado**
   - Esta corrección SOLO aplica a EMFA
   - SIMAFIR usa su propio sistema (sin conversión)

### **Problema: Error en debug_log de PHP**

```
SECMCA API Warning: ID de país desconocido '999'
```

**Causa**: Se está usando un ID de país no mapeado  
**Solución**: Agregar el mapeo en `country_id_to_sdmx()`

```php
$mapping = array(
    // ...existing mappings...
    '999' => 'XX',  // Agregar nuevo país
);
```

---

## 📈 IMPACTO

### **Módulos Afectados**
- ✅ **EMFA**: Todas las consultas (`emfa_allData`, `emfa_allData_matriz`, `emfa_allData_matriz2`)

### **Módulos NO Afectados**
- ⏩ **SIMAFIR**: Usa su propia lógica (v1.5.41/v1.5.42)
- ⏩ **ESEA**: No modificado en esta versión
- ⏩ **EFPA**: No modificado en esta versión

### **Retrocompatibilidad**
- ✅ **Funciones existentes**: No se rompen
- ✅ **Códigos SDMX directos**: Siguen funcionando (ej: si alguien ya envía "CR")
- ✅ **Parámetros frontend**: No requieren cambios

---

## 📝 NOTAS TÉCNICAS

### **¿Por qué no convertir en JavaScript?**

**Opción descartada**: Convertir ID a SDMX en el frontend

**Razones**:
1. **Separación de responsabilidades**: El frontend solo envía IDs, el backend hace la traducción
2. **Mantenimiento**: Solo un lugar para actualizar el mapeo
3. **Consistencia**: Todos los módulos usan el mismo helper
4. **Debug**: Más fácil rastrear conversiones en logs PHP

### **¿Por qué `private function`?**

La función es `private` porque:
- Solo se usa internamente en la clase `SCM_api`
- No debe ser llamada desde shortcodes u otros plugins
- Previene uso incorrecto desde código externo

### **Futuras Mejoras**

1. **Base de datos**: Guardar mapeo en tabla WordPress
2. **API centralizado**: Obtener mapeo desde el API SIMAFIR
3. **Cache**: Almacenar conversiones en transients

---

## 🚀 INSTALACIÓN

### **Pasos**

1. **WordPress Admin** → Plugins
2. **Desactivar** "SECMCA API v1.5.42"
3. **Eliminar** plugin antiguo
4. **Subir** `secmca-api-v1.5.43-EMFA-SDMX-FIX.zip`
5. **Activar** plugin
6. **Limpiar cache** del navegador (Ctrl+Shift+Delete)
7. **Probar** consulta EMFA con Costa Rica

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

```bash
# En Network tab debe aparecer:
✅ .../obtenerDatos/BALANCE_MATRIZ_BC/CR?fechaInicio=...
✅ Response: 200 OK con datos JSON
✅ Debug panel muestra "País SDMX: CR"
```

---

## 📚 ARCHIVOS MODIFICADOS

```
inc/api.php
├── country_id_to_sdmx() [NUEVA FUNCIÓN]
├── emfa_allData() [ACTUALIZADA]
├── emfa_allData_matriz() [ACTUALIZADA]
└── emfa_allData_matriz2() [ACTUALIZADA]

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

---

## 🔗 REFERENCIAS

- **Documentación API**: `api-endpoints-documentation.md`
- **Línea relevante**: 57-63 (sección EMFA)
- **v1.5.42**: Fix separator "+" en SIMAFIR
- **v1.5.41**: Reordenamiento de parámetros SIMAFIR
- **v1.5.40**: jQuery loading order fix

---

## ✅ CHECKLIST DE VALIDACIÓN

Antes de marcar como completado, verificar:

- [ ] Plugin instalado correctamente (v1.5.43)
- [ ] URLs EMFA usan códigos SDMX (CR, SV, GT, etc.)
- [ ] API responde 200 OK
- [ ] Datos cargan en tabla/gráfico
- [ ] Debug panel muestra conversión
- [ ] No hay errores en Console
- [ ] Funciona con todos los 7 países
- [ ] Cache navegador limpiado
- [ ] Módulos SIMAFIR/ESEA/EFPA no afectados

---

**Versión anterior**: v1.5.42 (Fix separator SIMAFIR)  
**Versión actual**: v1.5.43 (EMFA SDMX conversion)  
**Próxima versión**: TBD
