# Cambios Implementados - Sistema de Alerta de Deuda del Cliente

## Resumen
Se implementó un sistema de alerta visual que permite a los usuarios identificar rápidamente si un cliente tiene deuda registrada en el BCRA (Banco Central de la República Argentina) en el momento de seleccionar una obra.

## Archivos Modificados

### 1. BcraRepository.php
**Ubicación:** `app/Infrastructure/Persistence/BcraRepository.php`

#### Cambios realizados:

**a) Cambio de tipo de retorno:**
- **Antes:** `public function getDeudasByCuit(string $cuit): array`
- **Ahora:** `public function getDeudasByCuit(string $cuit): JsonResponse`
- **Razón:** Devolver respuestas HTTP estructuradas con códigos de estado apropiados

**b) Implementación de Try-Catch:**
```php
try {
    // Lógica de consulta
} catch (\Exception $e) {
    return response()->json([
        'message' => 'Error al consultar deudas',
        'data' => $e->getMessage(),
        'has_debt' => false,
        'situacion' => 0
    ], 500);
}
```
- Captura cualquier excepción durante la consulta a la API del BCRA
- Retorna respuesta JSON con código 500 si hay error
- Mantiene estructura coherente con datos predeterminados

**c) Mejorar la lógica de detección de deudas:**
- Ahora filtra entidades con `situacion > 1` (deudas relevantes)
- Usa `collect($response['results']['periodos'][0]['entidades'])->filter(...)`
- Solo marca `has_debt: true` si hay deudas significativas
- Devuelve datos de deudas en `situacion` para mostrar en UI

**d) Manejo de errores de API:**
```php
if ($response->json('errorMessages.periodos')) {
    return response()->json([...], 500);
}
```

---

### 2. StepObras.vue
**Ubicación:** `resources/js/components/layoutParts/CartMenu/StepObras.vue`

#### Cambios realizados:

**a) Nueva variable reactiva:**
```javascript
const deudas = ref(null)
```
- Almacena los datos de deuda retornados por la API del BCRA
- Se actualiza cuando el usuario selecciona una obra

**b) Actualización de `obraUpdate()`:**
```javascript
const obraUpdate = async () => {
    loading.value = true
    try {
        cartStore.setObra(obraBusqueda.value)
        const result = await BcraService.getDeudas(obraBusqueda.value?.cliente?.A1_CGC)
        deudas.value = result  // Guardar resultado
    } catch (error) {
        console.error('Error al consultar deudas:', error)
        deudas.value = null
    } finally {
        loading.value = false
    }
}
```
- Captura el resultado de la consulta de deudas
- Maneja errores gracefully sin interferir con la selección de obra
- Limpia datos de deuda si hay error

**c) Indicador visual en el Template:**
```html
<!-- Alerta de deuda -->
<div v-if="deudas && deudas.has_debt" class="col-auto">
    <q-btn
        flat
        dense
        round
        color="negative"
        icon="warning"
        size="md"
    >
        <q-tooltip>Cliente tiene deuda. Haga click para más información</q-tooltip>
```
- Ícono de advertencia rojo (warning) aparece solo si `has_debt === true`
- Posicionado a la derecha del nombre de la obra
- Tooltip informativo al pasar mouse

**d) Menú emergente con detalles de deudas:**
```html
<q-menu anchor="bottom right" self="top right">
    <q-card flat bordered style="width: 350px">
        <!-- Encabezado rojo con advertencia -->
        <q-card-section class="bg-negative text-white">
            <q-icon name="warning" size="24px" />
            <div class="text-subtitle2 text-weight-bold">
                Cliente con Deuda
            </div>
        </q-card-section>
        
        <!-- Contenido con scroll -->
        <q-card-section class="q-pa-md">
            <!-- Contador de entidades -->
            <!-- Lista de deudores con detalles -->
        </q-card-section>
    </q-card>
</q-menu>
```

**e) Información mostrada por deuda:**
Para cada entidad con deuda se muestra:
- **Nombre de la entidad:** (ej: "BANCO BBVA ARGENTINA S.A.")
- **Situación:** (código numérico, con color rojo si > 1, amarillo si ≤ 1)
- **Monto:** (en formato moneda con separador de miles)
- **Días de atraso:** (número de días vencidos)
- **Refinanciaciones:** (ícono check/cancel)
- **Advertencia de Proceso Judicial:** (resaltado en rojo si aplica)

**f) Mensaje en loading:**
```html
<q-inner-loading :showing="loading" class="bg-white opacity-75">
    <q-spinner-hourglass size="50px" color="primary" />
    <p>Verificando deudas...</p>
</q-inner-loading>
```
- Feedback visual claro que se está consultando estado de deudas

---

## Flujo de Uso

1. **Usuario selecciona obra** → Dispara `obraUpdate()`
2. **Consulta BCRA** → `BcraService.getDeudas()` llama al backend
3. **Backend verifica** → `BcraRepository.getDeudasByCuit()` consulta API del BCRA
4. **Respuesta** → JSON con `has_debt` y detalles de deudas
5. **UI se actualiza** → Muestra ícono rojo si hay deuda
6. **Usuario hace click** → Se abre menú con detalles completos

---

## Beneficios

✅ **Prevención de fraude:** Alerta sobre clientes con deudas registradas
✅ **Información centralizada:** Todo en un solo ícono/menú
✅ **UX no invasivo:** No bloquea flujo, es informativo
✅ **Manejo de errores:** Graceful degradation si API falla
✅ **Transparencia:** Usuario siempre sabe estado de recaudación

---

## Formato de Datos

### Request
```
BcraService.getDeudas(cuit: string)
```

### Response exitosa
```json
{
    "has_debt": true,
    "situacion": {
        "0": {
            "entidad": "BANCO BBVA ARGENTINA S.A.",
            "situacion": 3,
            "monto": 81842,
            "diasAtrasoPago": 0,
            "refinanciaciones": false,
            "procesoJud": false
        }
    }
}
```

### Response sin deudas
```json
{
    "has_debt": false,
    "situacion": []
}
```

### Response error
```json
{
    "message": "Error al consultar deudas",
    "data": "mensaje de error",
    "has_debt": false,
    "situacion": 0
}
```
