# MCP Knowledge Base: Crédito y Cartera (Agrota)

## 1. Lista de Tablas y Campos
Este modelo de datos para la gestión de crédito y cartera se compone de 20 tablas:

- **Calendario**: Dimensiones temporales. Campos confirmados: `Date`, `Año`, `Mes`. (Usar `Date` para cálculos de inteligencia de tiempo).
- **Vista_Cheques / ChequesXcliente**: Información de cheques. Campos confirmados: `Valor_pago_cheque`, `ValorDocumentoPagoDetalle`, `EstadoDocumentoPagoDetalle` (`FAC`, `POS`, `PRO`), `Fecha_pago_cheque`, `FechaDocumentoPagoDetalle`.
- **Clientes_BI**: Maestro de clientes. Campos confirmados: `CodigoCliente`, `ApellidosNombres_Cliente`, `NombreComercialCliente`, `identificacion`, `Ciudad`, `Grupo_Economico`.
- **Cupo_Saldo_clientes**: Datos financieros. Campos: `Cupo_Aprobado`, `Saldo`, `Cheques`, `Pagares`.
- **Empleados**: Datos del personal. Campos confirmados: `CodigoEmpleado`, `Apellidos_Nombres_Empleado`.
- **Historico_NominaRol**: Dimensiones de departamento. Campos: `Departamento` (o `departamento`). Valores: `"MAQUINARIA"`, `"AGROQUIMICOS"`.
- **Saldo_clientes**: Saldos por cliente. Campos confirmados: `Saldo`, `CodigoFacturaCabecera`, `VendedoresFacturaCabecera`, `RCC`, `FechaVecimientoCreditoDetalle`.
- **Saldo_vencido**: Morosidad (FOTO ACTUAL, SIN FECHAS). Campos confirmados: `Saldo_Vencido`. (Métrica recomendada: `SUMX(Saldo_vencido, Saldo_vencido[Saldo_Vencido])`).
- **Ventas**: Transacciones de venta. Campos confirmados: `CodigoCliente`, `CodigoEmpleado`, `FechaFactura`, `NumeroFactura`, `precio`, `Utilidad`, `NombreCategoria`, `NombreGrupo`, `NombreLinea`, `RCC`, `Llenado de Buffer`.

> [!NOTE]
> Las tablas con prefijos `$`, `LocalDateTable_` o `DateTableTemplate_` son tablas de sistema o internas y deben ser ignoradas.

## 1.1 Abreviaturas Communes (Diccionario)
| Término | Abreviatura | Campo/Métrica | Tabla Sugerida |
|---------|-------------|---------------|----------------|
| Utilidad Bruta | **ub** | `[Utilidad]` | `'Ventas'` |
| Riesgo Central / RCC | **rcc** | `[RCC]` | `'Saldo_clientes'` o `'Ventas'` |
| Ventas Último Año | **ventas 365** | `[Ventas 365]` | `'ventas_365_historico'` o `'Ventas'` |
| Por Documentar | **x doc** | `[X_documentar]` | `'Ventas'` |
| Llenado de Buffer | **buffer** | `[Llenado de Buffer]` | `'Ventas'` |

### 1.2 Lógica de Cálculo de Indicadores Críticos
Para reportes de cartera se deben utilizar las medidas precalculadas de la versión **v2**, las cuales manejan la lógica de saldos vigentes y segmentación por unidad de negocio.

#### A. Cartera Total (V2)
Es el indicador macro que suma el saldo en libros más los cheques documentados activos.
**Fórmula:** `[Cartera Total] = [Saldo_total2] + [Cartera_documentada_v2]`

**Componentes:**
1. **Saldo_total2:** `SUM(Saldo_clientes[Saldo])` (Foto actual de deuda).
2. **Cartera_documentada_v2:** `[Cartera_documentada_MAQ_v2] + [Cartera_documentada_QUIMI_v2]`
   - Se refiere a los cheques que aún no han sido cobrados (fecha de cobro >= HOY).

#### B. Desglose por Unidad de Negocio (Documentada V2)
- **Maquinaria (MAQ):**
  - `[Cartera_documentada_MAQ_v2] = CALCULATE([Total_Cheq_maquinas_Fac_v2] + [Total_Cheq_Maq_Posfechados_v2], 'ConsultaCheques'[FechaDocumentoPagoDetalle] >= TODAY())`
  - *Métricas Base (MAQ):*
    - **Total_Cheq_maquinas_Fac_v2:** `CALCULATE(SUM(ConsultaCheques[ValorPagoDetalle]), FILTER('Historico_NominaRol', 'Historico_NominaRol'[departamento]="MAQUINARIA"), FILTER(ConsultaCheques, ConsultaCheques[EstadoDocumentoPagoDetalle]="FAC"))`
    - **Total_Cheq_maquinas_Pos_v2:** `CALCULATE(SUM(ConsultaCheques[ValorPagoDetalle]), FILTER('Historico_NominaRol', 'Historico_NominaRol'[departamento]="MAQUINARIA"), FILTER(ConsultaCheques, ConsultaCheques[EstadoDocumentoPagoDetalle]="POS"))`

- **Agroquímicos (QUIMI):**
  - `[Cartera_documentada_QUIMI_v2] = CALCULATE([Total_Cheq_Qui_Posfechados_v2] + [Total_Cheq_quimicos_Fac_v2], 'ConsultaCheques'[FechaDocumentoPagoDetalle] >= TODAY())`
  - *Métricas Base (QUIMI):*
    - **Total_Cheq_quimicos_Fac_v2:** `CALCULATE(SUM(ConsultaCheques[ValorPagoDetalle]), FILTER('Historico_NominaRol', 'Historico_NominaRol'[departamento]="AGROQUIMICOS"), FILTER(ConsultaCheques, ConsultaCheques[EstadoDocumentoPagoDetalle]="FAC"))`
    - **Total_Cheq_Qui_Posfechados_v2:** `CALCULATE(SUM(ConsultaCheques[ValorPagoDetalle]), FILTER('Historico_NominaRol', 'Historico_NominaRol'[departamento]="AGROQUIMICOS"), FILTER(ConsultaCheques, ConsultaCheques[EstadoDocumentoPagoDetalle] IN {"POS"}))`

### 1.3 RCC (Rotación de Cartera en Días)
**Fórmula Recomendada:** `[RCC2] = DIVIDE([Cartera Total] * 365, [Ventas 365 Dias], 0)`
- **Ventas 365 Días:** `CALCULATE(SUM('Ventas'[precio]), DATESINPERIOD('Calendario'[Date], TODAY(), -365, DAY))`
- **IMPORTANTE:** El RCC no tiene historial. Solo existe el dato actual (Snapshot). Si se consulta por meses anteriores, informar que no hay datos históricos.

#### 1.4 Guía de Comparaciones, Filtros y Crecimiento
Para responder sobre crecimientos o comparativas entre periodos (YoY, MoM):
1. **Identificar Periodos:** Usar `'Calendario'[Año]`, `'Calendario'[Mes]` o `'Ventas'[FechaFactura]`. *(Atención: Las tablas de Saldo o Cartera son fotos actuales y NO deben filtrarse por fecha. El RCC específicamente NO tiene historial)*.
2. **Filtros de Negocio:** Si mencionan **Maqmotores** o **Sukampo**, filtrar por `'Ventas'[NombreGrupo]` o `'Ventas'[NombreCategoria]`.
3. **Cálculo de Variación:** Usar `DIVIDE([Valor Actual] - [Valor Pasado], [Valor Pasado], 0)`.
4. **Representación:** El resultado será un decimal (ej. 0.15) que LHIA debe interpretar como porcentaje (15%).

## 2. Matriz de Relaciones (Muchos a Uno)
El modelo sigue una estructura donde las tablas transaccionales (Muchos) se vinculan a maestros o dimensiones (Uno).

| Tabla Origen (Muchos *) | Columna Origen | Tabla Destino (Uno 1) | Columna Destino |
|-------------------------|----------------|-----------------------|-----------------|
| `ChequesXcliente` | `VendedoresFacturaCabecera` | `Ventas / Empleados` | `CodigoEmpleado` |
| `ChequesXcliente` | `CodigoCliente` | `Clientes_BI` | `CodigoCliente` |
| `ConsultaCheques` | `CodigoCliente` | `Clientes_BI` | `CodigoCliente` |
| `Cliente_Vendedor` | `Codigo_cliente` | `Clientes_BI` | `CodigoCliente` |
| `Cliente_Vendedor` | `Codigo_Vendedor` | `Empleados` | `CodigoEmpleado` |
| `Cupo_Saldo_clientes` | `Codigo_cliente` | `Clientes_BI` | `CodigoCliente` |
| `Pagos_cliente_factura` | `Codigo_Cliente` | `Clientes_BI` | `CodigoCliente` |
| `Pagos_cliente_factura` | `CodigoFacturaCabecera` | `Ventas` | `CodigoFactura` |
| `Pagares_clientes` | `ClientesPagareCliente` | `Clientes_BI` | `CodigoCliente` |
| `Saldo_clientes` | `Codigo_cliente` | `Clientes_BI` | `CodigoCliente` |
| `Ventas` | `CodigoCliente` | `Clientes_BI` | `CodigoCliente` |
| `Ventas` | `CodigoEmpleado` | `Empleados` | `CodigoEmpleado` |
| `Ventas` | `Fecha_Factura` | `Calendario` | `Fecha` |
| `ConsultaCheques` | `Fecha_Emision` | `Calendario` | `Fecha` |
| `Pagos_cliente_factura` | `Codigo_Cliente` | `Clientes_BI` | `CodigoCliente` |
| `Saldo_vencido` | `ClientesFacturaCabecera` | `Clientes_BI` | `CodigoCliente` |

## 3. Sintaxis DAX Recomendada
- Usar siempre comillas simples para tablas: `'Tabla'[Columna]`.
- Estructura base: `EVALUATE SUMMARIZECOLUMNS(...)`
- Para filtros de tiempo, usar la tabla `'Calendario'`.

## 4. Ejemplo de Consulta
EVALUATE 
TOPN(
    10, 
    SUMMARIZECOLUMNS(
        'Clientes_BI'[ApellidosNombres_Cliente], 
        "Saldo Total", SUM('Saldo_clientes'[Saldo])
    ), 
    [Saldo Total], DESC
)
```

## 5. Reglas Estrictas para Generación de DAX (Crédito y Cartera)
Para evitar que el LLM confunda este modelo con balances de otros tableros, cumple de manera estricta lo siguiente:
1. **Límites de Tablero:** Este tablero NO contiene presupuestos, nóminas, horas extras ni Rentabilidad o Utilidad Bruta como medida central. Si preguntan por variables de Talento Humano o Presupuesto, **RECHAZA** la solicitud explicando que esos datos no aplican aquí y sugiere el tablero correspondiente.
2. **Tablas Vivas (FOTO):** Las tablas `Saldo_clientes` y `Saldo_vencido` reflejan el estado ACTUAL. **NUNCA utilices funciones de tiempo (como `DATESYTD`, `MONTH()`, o uniones con `Calendario`)** sobre ellas, porque no son datos históricos diarios sino la foto del momento (Carecen de columna de fecha).
3. **Uso de Columnas y Medidas:** No inventes nombres de campo (por ejemplo, NO uses `SUM('Cartera'[SaldoVencido])` si la tabla se llama `'Saldo_vencido'` y la columna `'Saldo_vencido'[Saldo_Vencido]`). No uses medidas entre corchetes `[Medida]` si no están explícitamente listadas en la sección 1.1 y 1.2. Manten las sumatorias manuales sobre las columnas existentes si no hay medida listada.
