# Changelog - Versión 1.5.30

## 🔧 Fix: Múltiples Fechas en EMFA

**Fecha:** 24 de Enero, 2026  
**Tipo:** Corrección de Bug  
**Módulo:** EMFA (Estadísticas Monetarias y Financieras Armonizadas)

---

## 📋 Problema Identificado

Cuando los usuarios seleccionaban **múltiples años y meses** en el frontend de EMFA, el JavaScript concatenaba los valores con guiones (`-`) y los enviaba como:

```
?years=2004-2005-2006-2007-2008&mouths=1-2-3-4
```

El código PHP anterior construía URLs incorrectas como:

```
/public/v1/emfa/obtenerDatos/BALANCE_MATRIZ_BC/3?fechaInicio=01-1-2-3-4-2004-2005-2006-2007-2008&fechaFin=31-1-2-3-4-2004-2005-2006-2007-2008
```

**Resultado:** Error 400 en el API por formato de fecha incorrecto.

---

## ✅ Solución Implementada

Según la documentación del API v2, los endpoints EMFA solo aceptan:
- `fechaInicio=dd-mm-yyyy` (fecha de inicio)
- `fechaFin=dd-mm-yyyy` (fecha final)

**NO aceptan múltiples fechas concatenadas.**

### Cambios Realizados:

Se actualizaron **3 funciones** en `inc/api.php` para:

1. **Detectar múltiples años/meses** separados por `-`
2. **Extraer el año/mes MÍNIMO** → `fechaInicio`
3. **Extraer el año/mes MÁXIMO** → `fechaFin`
4. **Construir fechas válidas** en formato `dd-mm-yyyy`

#### Funciones Actualizadas:

##### 1. `emfa_allData()` (Líneas ~1295-1340)
```php
// Manejar múltiples años/meses (vienen como "2004-2005-2006" y "1-2-3-4")
$yearArray = explode('-', $years);
$monthArray = explode('-', $mouths);

// Si hay múltiples fechas, tomar la primera y la última
$firstYear = min($yearArray);
$lastYear = max($yearArray);
$firstMonth = str_pad(min($monthArray), 2, '0', STR_PAD_LEFT);
$lastMonth = str_pad(max($monthArray), 2, '0', STR_PAD_LEFT);

// Construir fechas en formato dd-mm-yyyy
$fechaInicio = "01-{$firstMonth}-{$firstYear}"; // Primer día del mes más antiguo
$ultimoDia = date('t', strtotime("{$lastYear}-{$lastMonth}-01"));
$fechaFin = "{$ultimoDia}-{$lastMonth}-{$lastYear}";
```

##### 2. `emfa_allData_matriz()` (Líneas ~1380-1432)
Matriz de Banco Central - Misma lógica aplicada.

##### 3. `emfa_allData_matriz2()` (Líneas ~1434-1495)
Matriz de OSD (Otras Sociedades de Depósito) - Misma lógica aplicada.

---

## 📊 Ejemplo de Transformación

### Entrada (desde frontend):
```
years=2004-2005-2006-2007-2008
mouths=1-2-3-4
```

### Procesamiento PHP:
```php
$yearArray = [2004, 2005, 2006, 2007, 2008]
$monthArray = [1, 2, 3, 4]

$firstYear = 2004
$lastYear = 2008
$firstMonth = "01" (padding)
$lastMonth = "04" (padding)

$fechaInicio = "01-01-2004"
$ultimoDia = 30 (días de abril 2008)
$fechaFin = "30-04-2008"
```

### URL Final Generada:
```
/public/v1/emfa/obtenerDatos/BALANCE_MATRIZ_BC/3?fechaInicio=01-01-2004&fechaFin=30-04-2008
```

✅ **Formato correcto según documentación del API v2**

---

## 🎯 Compatibilidad

- ✅ **Selección simple** (1 año/mes): Funciona igual que antes
- ✅ **Selección múltiple** (varios años/meses): Ahora calcula rango correctamente
- ✅ **Backward compatible**: No rompe funcionalidad existente
- ✅ **Debug Panel**: Muestra las fechas transformadas en el panel de depuración

---

## 🧪 Testing Recomendado

1. Navegar a página EMFA (Matriz BC o Matriz OSD)
2. Seleccionar **múltiples años** (ej: 2004, 2005, 2006)
3. Seleccionar **múltiples meses** (ej: Enero, Febrero, Marzo)
4. Verificar que los datos cargan correctamente
5. Abrir **Debug Panel** (burbuja morada) y verificar:
   - URL generada usa `fechaInicio` y `fechaFin`
   - Fechas en formato `dd-mm-yyyy`
   - HTTP Status 200 (éxito)

---

## 📦 Archivos Modificados

- `inc/api.php` (3 funciones actualizadas)
- `secmca-api.php` (versión bump a 1.5.30)

---

## 🔗 Referencias

- **Documentación API v2:** `api-endpoints-documentation.md`
- **Versión Anterior:** 1.5.29 (EMFA endpoints migration)
- **Issue Reportado:** "01-1-2-3-4-2004-2005-2006-2007-2008 formato incorrecto"
