# Guía de Integración: Bot de WhatsApp + Power BI (Talento Humano)

Esta guía explica cómo configurar tu bot en Python para que las respuestas de WhatsApp coincidan siempre con los datos oficiales del tablero **Talento Humano Agrt**.

## 1. El Problema del "Contexto"
El bot suele fallar porque no aplica filtros de tiempo. Si preguntas "¿Cuál es la eficiencia?", el bot suma toda la historia (2024-2026). 
**Solución**: El bot debe inyectar siempre una fecha por defecto (Año actual = 2026).

## 2. System Prompt para tu IA (GPT)
Si usas una IA para generar el DAX, cópiale estas instrucciones exactas:

> Eres un experto en DAX para el tablero de "Talento Humano". 
> 1. Usa siempre la tabla `Calendario` para filtrar. 
> 2. Si el usuario no menciona un año, asume `Calendario[Año] = 2026`.
> 3. Las métricas principales son:
>    - Eficiencia: `[%pesoEmpleado/UB]`
>    - Costo Total: `[CostoTotalEmpleados]`
>    - Headcount: `[Cant_Empl]`
> 4. Usa siempre `SUMMARIZECOLUMNS` para las consultas.

## 3. Plantillas de Consultas DAX (Patrones)

### A. Consultar Eficiencia (%Costo/UB) de un Mes
**Pregunta**: "¿Cual fue el % de costo de febrero?"
**DAX Sugerido**:
```dax
EVALUATE
  SUMMARIZECOLUMNS(
    FILTER(ALL('Calendario'[Año]), 'Calendario'[Año] = 2026),
    FILTER(ALL('Calendario'[Mes]), 'Calendario'[Mes] = "febrero"),
    "Resultado", [%pesoEmpleado/UB]
  )
```

### B. Consultar el Top 5 de Áreas por Gasto
**Pregunta**: "¿Cuales son las 5 áreas que más gastan?"
**DAX Sugerido**:
```dax
EVALUATE
  TOPN(5, 
    SUMMARIZECOLUMNS(
      'Empleados_historico'[area],
      FILTER(ALL('Calendario'[Año]), 'Calendario'[Año] = 2026),
      "Gasto Total", [CostoTotalEmpleado-Historico]
    ),
    [Gasto Total], DESC
  )
```

## 4. Código Python de Integración (Referencia)

Usa esta función en tu bot para procesar las preguntas. Este código ya maneja la autenticación y la ejecución segura.

```python
import msal, requests, json

# Configuración (Usa el archivo .env)
TENANT_ID = "..."
CLIENT_ID = "..."
CLIENT_SECRET = "..."
DATASET_ID = "9edae597-a604-46fa-80f8-a6969033666c"

def get_pbi_data(dax_query):
    # 1. Obtener Token
    authority = f"https://login.microsoftonline.com/{TENANT_ID}"
    app = msal.ConfidentialClientApplication(CLIENT_ID, authority=authority, client_credential=CLIENT_SECRET)
    token = app.acquire_token_for_client(scopes=["https://analysis.windows.net/powerbi/api/.default"])["access_token"]
    
    # 2. Ejecutar Query
    url = f"https://api.powerbi.com/v1.0/myorg/datasets/{DATASET_ID}/executeQueries"
    headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"}
    body = {"queries": [{"query": dax_query}]}
    
    response = requests.post(url, headers=headers, json=body)
    return response.json()

# Ejemplo de uso para el bot
# query_marzo = "EVALUATE SUMMARIZECOLUMNS(FILTER(...))"
# data = get_pbi_data(query_marzo)
```

---
> [!IMPORTANT]
> Nunca permitas que el bot devuelva un valor sin antes verificar que el resultado del DAX tenga datos. Si devuelve `0.56` en lugar de `0.48`, revisa que el filtro de `Calendario[Año]` se esté aplicando correctamente.
