@ssolis-ti/mcp-compra-agil 2.3.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -9
- package/dist/reports/templates/radar-oportunidades.d.ts +1 -1
- package/dist/reports/templates/radar-oportunidades.js +2 -2
- package/dist/reports/templates/radar-oportunidades.js.map +1 -1
- package/dist/resources/glosario.d.ts.map +1 -1
- package/dist/resources/glosario.js +6 -2
- package/dist/resources/glosario.js.map +1 -1
- package/dist/tools/radar-oportunidades.d.ts +4 -1
- package/dist/tools/radar-oportunidades.d.ts.map +1 -1
- package/dist/tools/radar-oportunidades.js +24 -2
- package/dist/tools/radar-oportunidades.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -341,16 +341,16 @@ const resources = await client.listResources();
|
|
|
341
341
|
| `obtener_detalle_compra` | Detalle exhaustivo de una cotización: descripción, ítems y cotizaciones recibidas (confidenciales hasta el estado *Cerrada*). |
|
|
342
342
|
| `monitorear_cambios_recientes` | Sincronización reactiva e incremental por ventana de cambios, con soporte para paginación. Dos modos excluyentes: **relativo** (`minutos`, máx 1440 / 24 h) o **absoluto** (`cambio_desde`/`cambio_hasta` en ISO-8601, sin techo de 24 h) para resincronizar un período arbitrario. |
|
|
343
343
|
| `verificar_orden_compra` | Informa si un proceso tiene OC emitida. **No consulta la API por su cuenta** (gastaba cuota para responder siempre "no puedo saberlo"): reutiliza el detalle si ya está en caché e indica cómo confirmarlo en la ficha pública — ver [Limitaciones](#-limitaciones-conocidas-de-la-api). |
|
|
344
|
-
| `obtener_detalle_orden_compra` |
|
|
345
|
-
| `obtener_estadisticas_uso` |
|
|
344
|
+
| `obtener_detalle_orden_compra` | Desglose de productos y facturación de una OC. ⚠ **El código debe venir de otra fuente** (la OC que te emitieron, un correo, la ficha pública): consulta la API legada de Órdenes de Compra, y la de Compra Ágil no entrega códigos de OC. |
|
|
345
|
+
| `obtener_estadisticas_uso` | Cuántas consultas lleva esta instalación en el día UTC y si ya recibió un 429. ⚠ Es un **conteo local**, no el saldo del ticket: la API no publica cuánta cuota queda. Persiste entre reinicios. |
|
|
346
346
|
| `verificar_ticket` | Comprueba que el ticket configurado funcione contra la API real **sin revelar su valor** (solo muestra `••••1234`). Primer diagnóstico recomendado. |
|
|
347
|
-
| `obtener_enlace_documento` |
|
|
348
|
-
| `descargar_y_leer_documento` |
|
|
349
|
-
| `consultar_documentos_locales` | Busca
|
|
347
|
+
| `obtener_enlace_documento` | Entrega el enlace a la **ficha pública** del proceso, que es donde el adjunto sí es accesible (en un navegador). El enlace heredado de descarga directa se ofrece advirtiendo que hoy responde 404. |
|
|
348
|
+
| `descargar_y_leer_documento` | ⚠ **Hoy no puede descargar los adjuntos de Compra Ágil**: el portal dejó de servirlos por enlace directo (404 verificado) y en la ficha el archivo lo genera JavaScript, sin URL que pedir. Para IDs numéricos responde de inmediato con el enlace a la ficha, sin gastar el intento. Los UUID sí se intentan. |
|
|
349
|
+
| `consultar_documentos_locales` | Busca dentro de los PDF/TXT/MD de `docs/`. Admite **preguntas en lenguaje natural** ("¿qué multas me pueden aplicar?"), no solo palabras sueltas: descompone la consulta en términos, ignora acentos y palabras vacías, y ordena por densidad de coincidencias. |
|
|
350
350
|
| `analizar_precios_mercado` | Analiza la distribución de precios **cotizados** por la competencia en procesos similares (mín/p25/mediana/promedio/máx) y sugiere un precio competitivo. Advierte cuando la muestra es demasiado dispersa. ⚠ Analiza precios cotizados, **no adjudicados** — ver [Limitaciones](#-limitaciones-conocidas-de-la-api). |
|
|
351
351
|
| `auditar_compras_desiertas` | Analiza por qué una convocatoria quedó desierta, cruzando su presupuesto y plazo contra los precios que el mercado cotizó en procesos del mismo rubro. Reporta el motivo oficial de deserción. |
|
|
352
352
|
| `generar_borrador_cotizacion` | Auto-completa propuestas JSON de cotización bajo el esquema oficial, calculando impuestos (19% IVA) y redactando la carta de presentación. Marca explícitamente los campos placeholder. |
|
|
353
|
-
| `radar_oportunidades_calientes` | Califica y ordena convocatorias publicadas
|
|
353
|
+
| `radar_oportunidades_calientes` | Califica y ordena convocatorias publicadas con un score ponderado (Hot Score, máx 115) de competencia, urgencia de cierre, presupuesto, simplicidad y **segundo llamado**. Cada resultado trae el desglose de factores y el campo `llamado`. Auto-pagina. |
|
|
354
354
|
| `generar_informe` | Genera un **informe profesional imprimible** (HTML autocontenido, diseño A4/Carta/Oficio) y devuelve la ruta del archivo. Ver [Informes](#-informes-imprimibles). |
|
|
355
355
|
|
|
356
356
|
### Recursos Disponibles (Resources)
|
|
@@ -372,7 +372,7 @@ const resources = await client.listResources();
|
|
|
372
372
|
|
|
373
373
|
## ⚠️ Limitaciones conocidas de la API
|
|
374
374
|
|
|
375
|
-
Estos hallazgos fueron **verificados empíricamente** contra el servicio real de Mercado Público (julio 2026, 45 procesos y 52 cotizaciones inspeccionados). La [Guía oficial API Compra Ágil v2](docs/api/) documenta un comportamiento distinto en cada uno de estos puntos.
|
|
375
|
+
Estos hallazgos fueron **verificados empíricamente** contra el servicio real de Mercado Público (julio 2026, 45 procesos y 52 cotizaciones inspeccionados; **re-confirmados en septiembre de 2026** junto a una auditoría de las 15 herramientas). La [Guía oficial API Compra Ágil v2](docs/api/) documenta un comportamiento distinto en cada uno de estos puntos.
|
|
376
376
|
|
|
377
377
|
### 🔴 La API no publica adjudicaciones
|
|
378
378
|
|
|
@@ -386,7 +386,7 @@ Estos hallazgos fueron **verificados empíricamente** contra el servicio real de
|
|
|
386
386
|
|
|
387
387
|
En la muestra, `proveedor_seleccionado` valió `0` en el **100 %** de las cotizaciones y **ningún** proceso traía `id_orden_compra`.
|
|
388
388
|
|
|
389
|
-
**Consecuencia práctica:** no es posible saber qué oferta ganó ni obtener precios adjudicados. `analizar_precios_mercado` se apoya en precios **cotizados**, que sí son señal de mercado real. `verificar_orden_compra`
|
|
389
|
+
**Consecuencia práctica:** no es posible saber qué oferta ganó ni obtener precios adjudicados. `analizar_precios_mercado` se apoya en precios **cotizados**, que sí son señal de mercado real. `verificar_orden_compra` **ya no consulta la API por su cuenta**: gastaba cuota para responder siempre "no puedo saberlo". Reutiliza el detalle si ya está en caché y, en cualquier caso, indica cómo confirmarlo en la ficha pública. Un "sin OC" **no prueba** que la OC no exista, solo que la API no la publica.
|
|
390
390
|
|
|
391
391
|
### 📊 Dónde viven los precios
|
|
392
392
|
|
|
@@ -394,11 +394,30 @@ Solo los procesos **`desierta`** publican sus cotizaciones (medido: `desierta` 5
|
|
|
394
394
|
|
|
395
395
|
Casi todas esas cotizaciones están declaradas *inadmisibles* — es justamente lo que dejó desierto al proceso. **Se incluyen igualmente** en las estadísticas: un precio ofertado es señal de mercado aunque le hayan rechazado el papeleo, y los motivos reales observados son mayoritariamente formales (*"no cumple con garantía"*, *"no cuenta con giro acorde"*), no de precio. La herramienta reporta los motivos para que puedas ponderarlos.
|
|
396
396
|
|
|
397
|
+
### 📎 Los adjuntos no se pueden descargar por programa
|
|
398
|
+
|
|
399
|
+
| La documentación dice | La realidad medida (septiembre 2026) |
|
|
400
|
+
| :--- | :--- |
|
|
401
|
+
| `documentos[].id` es un `string (UUID)` | La API devuelve **enteros** (observados `1855508`, `1854909`) |
|
|
402
|
+
| Los adjuntos se descargan por su ID | El endpoint heredado responde **404** para todos los adjuntos de Compra Ágil |
|
|
403
|
+
| — | En la ficha pública el enlace es un `<a>` con `href` vacío: la descarga la dispara **JavaScript**, sin URL que un programa pueda pedir |
|
|
404
|
+
|
|
405
|
+
Las **cotizaciones nunca expusieron adjuntos**: el array `documentos[]` existe solo a nivel del proceso, no dentro de `proveedores_cotizando[]`.
|
|
406
|
+
|
|
407
|
+
**Consecuencia práctica:** si un llamado dice *"ver características en adjunto"*, esas especificaciones solo se pueden leer abriendo la ficha en un navegador. Las herramientas de documentos llevan ahí directamente en vez de fallar.
|
|
408
|
+
|
|
409
|
+
### ⏱️ El 429 no es una cuota diaria: es un balde que se recarga
|
|
410
|
+
|
|
411
|
+
La guía se contradice a sí misma. Su §4 dice esperar *"hasta el inicio del siguiente día calendario"*, pero su §7 manda esperar el header **`Retry-After`** y el glosario define la cuota como un **token bucket** que *"se recarga automáticamente"*. **La medición respalda lo segundo: tras un 429, la API volvió a responder con normalidad 13 minutos después.**
|
|
412
|
+
|
|
413
|
+
Por eso este servidor **no bloquea hasta el día siguiente**: honra `Retry-After` y, si no viene, aplica una espera creciente (15 → 30 → 60 → 120 min) que la primera consulta exitosa reinicia. Si recibes un 429, reintenta en unos minutos antes de suponer que agotaste el día.
|
|
414
|
+
|
|
397
415
|
### 🐌 Otras restricciones medidas
|
|
398
416
|
|
|
399
417
|
* **Las consultas sin filtros devuelven HTTP 500.** Hay que enviar al menos un filtro.
|
|
400
418
|
* **`tamano_pagina` mínimo es 10** (valores `1` y `5` devuelven HTTP 400).
|
|
401
|
-
* **La API es lenta:** entre 1 y 14 segundos por consulta según el tamaño de página.
|
|
419
|
+
* **La API es lenta:** entre 1 y 14 segundos por consulta según el tamaño de página. La caché de respuestas mitiga esto en las herramientas de análisis, que reconsultan los mismos históricos.
|
|
420
|
+
* **El segundo llamado es poco frecuente:** 6% de los procesos cerrados/desiertos y 0,5% de los activos.
|
|
402
421
|
|
|
403
422
|
---
|
|
404
423
|
|
|
@@ -32,7 +32,7 @@ export interface RadarInformeData {
|
|
|
32
32
|
/** Tamaño de papel del informe. Por defecto Carta. */
|
|
33
33
|
formato?: FormatoPapel;
|
|
34
34
|
}
|
|
35
|
-
/** Clasifica el hot score en un tono semántico. Máximo teórico:
|
|
35
|
+
/** Clasifica el hot score en un tono semántico. Máximo teórico: 115 pts. */
|
|
36
36
|
export declare function tonoScore(score: number): {
|
|
37
37
|
tono: TonoBadge;
|
|
38
38
|
glosa: string;
|
|
@@ -8,7 +8,7 @@ import { renderDocumento } from '../render.js';
|
|
|
8
8
|
import { portada, kpiRow, tabla, badge, callout, barChartSVG, pieDoc, esc, } from '../components.js';
|
|
9
9
|
import { clp, numero, fecha, fechaLarga, horasRestantes } from '../format.js';
|
|
10
10
|
import { TOKENS, PAPEL, FORMATO_POR_DEFECTO } from '../theme.js';
|
|
11
|
-
/** Clasifica el hot score en un tono semántico. Máximo teórico:
|
|
11
|
+
/** Clasifica el hot score en un tono semántico. Máximo teórico: 115 pts. */
|
|
12
12
|
export function tonoScore(score) {
|
|
13
13
|
if (score >= 80)
|
|
14
14
|
return { tono: 'critico', glosa: 'Muy caliente' };
|
|
@@ -157,7 +157,7 @@ ${fichas ? `<h2>Oportunidades destacadas</h2>${fichas}` : ''}
|
|
|
157
157
|
|
|
158
158
|
${ops.length > 0 ? `<h2>Listado completo</h2>${tablaOps}` : ''}
|
|
159
159
|
|
|
160
|
-
${callout('Cómo se calcula la puntuación', `<p style="margin:0">Fórmula ponderada sobre
|
|
160
|
+
${callout('Cómo se calcula la puntuación', `<p style="margin:0">Fórmula ponderada sobre 115 puntos: baja competencia (hasta 50 pts) + urgencia de cierre (hasta 30 pts) + tamaño de presupuesto (hasta 20 pts) + ausencia de bases adjuntas (5 pts) + segundo llamado (10 pts). Una puntuación alta indica un proceso con pocos oferentes, cierre próximo y monto atractivo. El segundo llamado suma porque el comprador vuelve con urgencia tras no lograr adjudicar, pero no implica menos competencia: esa la mide el primer factor.</p>`)}
|
|
161
161
|
|
|
162
162
|
${pieDoc(`Informe generado automáticamente por mcp-compra-agil el ${fecha(data.generadoEn.toISOString())} a partir de datos públicos de la API Compra Ágil v2 de Mercado Público (ChileCompra). Los datos reflejan el estado al momento de la consulta y pueden variar. · Formato de impresión: ${PAPEL[formato].glosa}`)}
|
|
163
163
|
`.trim();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radar-oportunidades.js","sourceRoot":"","sources":["../../../src/reports/templates/radar-oportunidades.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"radar-oportunidades.js","sourceRoot":"","sources":["../../../src/reports/templates/radar-oportunidades.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glosario.d.ts","sourceRoot":"","sources":["../../src/resources/glosario.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"glosario.d.ts","sourceRoot":"","sources":["../../src/resources/glosario.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiEpE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgBhE"}
|
|
@@ -55,11 +55,15 @@ const GLOSARIO = [
|
|
|
55
55
|
},
|
|
56
56
|
{
|
|
57
57
|
termino: '429 Too Many Requests',
|
|
58
|
-
definicion: 'Código HTTP que indica que se
|
|
58
|
+
definicion: 'Código HTTP que indica que se agotaron temporalmente los tokens de cuota. NO implica esperar al día siguiente: verificado contra la API real (septiembre 2026), el servicio volvió a responder con normalidad 13 minutos después de un 429. La §4 de la guía oficial dice que el límite es por día calendario, pero su §7 y su glosario describen un token bucket que se recarga solo — y es esto último lo que hace el servicio. Reintenta en unos minutos antes de suponer que agotaste el día.',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
termino: 'Token Bucket',
|
|
62
|
+
definicion: 'Algoritmo de control de tasa: un "balde" de fichas se consume con cada solicitud y se recarga automáticamente con el tiempo. Es el modelo que sigue la cuota de esta API, por eso un 429 se supera esperando minutos y no horas. Las ráfagas son lo que lo vacía: las herramientas de análisis, que hacen varias consultas seguidas, son las que más lo agotan.',
|
|
59
63
|
},
|
|
60
64
|
{
|
|
61
65
|
termino: 'Retry-After',
|
|
62
|
-
definicion: 'Header HTTP que indica cuántos segundos esperar antes de volver a intentar una solicitud rechazada por exceso de cuota.',
|
|
66
|
+
definicion: 'Header HTTP que indica cuántos segundos esperar antes de volver a intentar una solicitud rechazada por exceso de cuota. Este servidor lo honra cuando la API lo envía; si no viene, aplica una espera creciente (15 → 30 → 60 → 120 min) que se reinicia con la primera consulta exitosa.',
|
|
63
67
|
},
|
|
64
68
|
];
|
|
65
69
|
export function registerGlosarioResource(server) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glosario.js","sourceRoot":"","sources":["../../src/resources/glosario.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,QAAQ,GAAG;IACf;QACE,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,2HAA2H;KACxI;IACD;QACE,OAAO,EAAE,aAAa;QACtB,UAAU,EAAE,6IAA6I;KAC1J;IACD;QACE,OAAO,EAAE,QAAQ;QACjB,UAAU,EAAE,yFAAyF;KACtG;IACD;QACE,OAAO,EAAE,cAAc;QACvB,UAAU,EAAE,8JAA8J;KAC3K;IACD;QACE,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,yIAAyI;KACtJ;IACD;QACE,OAAO,EAAE,sBAAsB;QAC/B,UAAU,EAAE,mGAAmG;KAChH;IACD;QACE,OAAO,EAAE,cAAc;QACvB,UAAU,EAAE,mJAAmJ;KAChK;IACD;QACE,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,wHAAwH;KACrI;IACD;QACE,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,+DAA+D;KAC5E;IACD;QACE,OAAO,EAAE,UAAU;QACnB,UAAU,EAAE,6HAA6H;KAC1I;IACD;QACE,OAAO,EAAE,4BAA4B;QACrC,UAAU,EAAE,wLAAwL;KACrM;IACD;QACE,OAAO,EAAE,YAAY;QACrB,UAAU,EAAE,6IAA6I;KAC1J;IACD;QACE,OAAO,EAAE,uBAAuB;QAChC,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"glosario.js","sourceRoot":"","sources":["../../src/resources/glosario.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,QAAQ,GAAG;IACf;QACE,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,2HAA2H;KACxI;IACD;QACE,OAAO,EAAE,aAAa;QACtB,UAAU,EAAE,6IAA6I;KAC1J;IACD;QACE,OAAO,EAAE,QAAQ;QACjB,UAAU,EAAE,yFAAyF;KACtG;IACD;QACE,OAAO,EAAE,cAAc;QACvB,UAAU,EAAE,8JAA8J;KAC3K;IACD;QACE,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,yIAAyI;KACtJ;IACD;QACE,OAAO,EAAE,sBAAsB;QAC/B,UAAU,EAAE,mGAAmG;KAChH;IACD;QACE,OAAO,EAAE,cAAc;QACvB,UAAU,EAAE,mJAAmJ;KAChK;IACD;QACE,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,wHAAwH;KACrI;IACD;QACE,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,+DAA+D;KAC5E;IACD;QACE,OAAO,EAAE,UAAU;QACnB,UAAU,EAAE,6HAA6H;KAC1I;IACD;QACE,OAAO,EAAE,4BAA4B;QACrC,UAAU,EAAE,wLAAwL;KACrM;IACD;QACE,OAAO,EAAE,YAAY;QACrB,UAAU,EAAE,6IAA6I;KAC1J;IACD;QACE,OAAO,EAAE,uBAAuB;QAChC,UAAU,EAAE,meAAme;KAChf;IACD;QACE,OAAO,EAAE,cAAc;QACvB,UAAU,EAAE,iWAAiW;KAC9W;IACD;QACE,OAAO,EAAE,aAAa;QACtB,UAAU,EAAE,2RAA2R;KACxS;CACF,CAAC;AAEF,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,gBAAgB,CACrB,UAAU,EACV,wBAAwB,EACxB;QACE,WAAW,EAAE,oLAAoL;QACjM,QAAQ,EAAE,kBAAkB;KAC7B,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;QACX,QAAQ,EAAE,CAAC;gBACT,GAAG,EAAE,wBAAwB;gBAC7B,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;aACxC,CAAC;KACH,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -9,13 +9,16 @@ export interface OportunidadRadar {
|
|
|
9
9
|
ofertas_recibidas: number;
|
|
10
10
|
horas_restantes: number;
|
|
11
11
|
fecha_cierre: string;
|
|
12
|
+
/** 1 = primer llamado · 2 = segundo llamado (el primero no recibió ofertas válidas). */
|
|
13
|
+
llamado: number;
|
|
12
14
|
puntuacion_caliente: number;
|
|
13
15
|
factores_calificacion: string[];
|
|
14
16
|
}
|
|
15
17
|
/**
|
|
16
18
|
* Calcula el "Hot Score" de una oportunidad de forma pura (sin efectos secundarios).
|
|
17
19
|
* Retorna null si el proceso debe omitirse (ya cerrado o bajo el presupuesto mínimo).
|
|
18
|
-
* Ponderación: baja competencia (máx 50) + urgencia (máx 30) + presupuesto (máx 20)
|
|
20
|
+
* Ponderación: baja competencia (máx 50) + urgencia (máx 30) + presupuesto (máx 20)
|
|
21
|
+
* + facilidad (máx 5) + segundo llamado (máx 10). Máximo teórico: 115 pts.
|
|
19
22
|
*/
|
|
20
23
|
export declare function evaluarOportunidad(item: CompraAgilItem, now: number, minBudget?: number): OportunidadRadar | null;
|
|
21
24
|
export interface RadarParams {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radar-oportunidades.d.ts","sourceRoot":"","sources":["../../src/tools/radar-oportunidades.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"radar-oportunidades.d.ts","sourceRoot":"","sources":["../../src/tools/radar-oportunidades.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAmBhF,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB,EAAE,MAAM,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,wFAAwF;IACxF,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qBAAqB,EAAE,MAAM,EAAE,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,cAAc,EACpB,GAAG,EAAE,MAAM,EACX,SAAS,SAAI,GACZ,gBAAgB,GAAG,IAAI,CA8FzB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,yEAAyE;IACzE,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,8EAA8E;IAC9E,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,WAAW,EACnB,GAAG,GAAE,MAAmB,GACvB,OAAO,CAAC,UAAU,CAAC,CA6BrB;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CA4C5F"}
|
|
@@ -4,7 +4,8 @@ import { logger } from '../utils/logger.js';
|
|
|
4
4
|
import { safeError } from '../utils/redact.js';
|
|
5
5
|
const TOOL_NAME = 'radar_oportunidades_calientes';
|
|
6
6
|
const TOOL_DESCRIPTION = `Escanea, califica y clasifica de forma priorizada los procesos de Compra Ágil activos (publicados).
|
|
7
|
-
Utiliza una fórmula ponderada (Hot Score) basada en la falta de oferentes, el presupuesto disponible
|
|
7
|
+
Utiliza una fórmula ponderada (Hot Score) basada en la falta de oferentes, el presupuesto disponible, las horas restantes de cierre y si el proceso va en segundo llamado, para destacar los llamados más convenientes y fáciles de ganar.
|
|
8
|
+
Cada resultado incluye "llamado" (1 = primero, 2 = segundo) y el desglose de factores que explican su puntuación.`;
|
|
8
9
|
const inputSchema = {
|
|
9
10
|
region: z.string().optional().describe('Código de la región para filtrar (1-16). Ej: "13" para Metropolitana.'),
|
|
10
11
|
q: z.string().optional().describe('Término de búsqueda opcional para acotar a un rubro o producto específico (ej: "licencias").'),
|
|
@@ -15,7 +16,8 @@ const inputSchema = {
|
|
|
15
16
|
/**
|
|
16
17
|
* Calcula el "Hot Score" de una oportunidad de forma pura (sin efectos secundarios).
|
|
17
18
|
* Retorna null si el proceso debe omitirse (ya cerrado o bajo el presupuesto mínimo).
|
|
18
|
-
* Ponderación: baja competencia (máx 50) + urgencia (máx 30) + presupuesto (máx 20)
|
|
19
|
+
* Ponderación: baja competencia (máx 50) + urgencia (máx 30) + presupuesto (máx 20)
|
|
20
|
+
* + facilidad (máx 5) + segundo llamado (máx 10). Máximo teórico: 115 pts.
|
|
19
21
|
*/
|
|
20
22
|
export function evaluarOportunidad(item, now, minBudget = 0) {
|
|
21
23
|
const budget = item.montos?.monto_disponible_clp || item.montos?.monto_disponible || 0;
|
|
@@ -80,6 +82,25 @@ export function evaluarOportunidad(item, now, minBudget = 0) {
|
|
|
80
82
|
score += 5;
|
|
81
83
|
factors.push('Sin documentos adjuntos (postulación rápida sin leer bases) (+5 pts)');
|
|
82
84
|
}
|
|
85
|
+
// Factor 5: Segundo Llamado — Máx 10 pts
|
|
86
|
+
//
|
|
87
|
+
// Un segundo llamado significa que el primero no logró adjudicar. Vale
|
|
88
|
+
// señalarlo por dos razones: el comprador vuelve con más urgencia, y existe
|
|
89
|
+
// un motivo de fracaso concreto que conviene averiguar —si sabes cumplir lo
|
|
90
|
+
// que otros no pudieron, es tu ventaja; si el presupuesto era corto, es una
|
|
91
|
+
// pérdida de tiempo—.
|
|
92
|
+
//
|
|
93
|
+
// ⚠ Lo que NO implica es menos competencia, aunque suene intuitivo. Medido
|
|
94
|
+
// contra la API real: de 200 procesos activos, el único en segundo llamado
|
|
95
|
+
// tenía 11 ofertas. Un primer llamado puede caerse porque todas las ofertas
|
|
96
|
+
// fueron inadmisibles por papeleo, y entonces el segundo atrae a los mismos
|
|
97
|
+
// interesados y más. Por eso el factor puntúa moderado y la competencia
|
|
98
|
+
// real la sigue reportando el Factor 1, que es quien la mide de verdad.
|
|
99
|
+
const llamado = item.convocatoria?.estado_convocatoria ?? 1;
|
|
100
|
+
if (llamado === 2) {
|
|
101
|
+
score += 10;
|
|
102
|
+
factors.push('Segundo llamado: el primero no logró adjudicar, así que el comprador vuelve con urgencia — averigua por qué falló antes de cotizar, ahí está la ventaja o la trampa (+10 pts)');
|
|
103
|
+
}
|
|
83
104
|
return {
|
|
84
105
|
codigo: item.codigo,
|
|
85
106
|
nombre: item.nombre,
|
|
@@ -89,6 +110,7 @@ export function evaluarOportunidad(item, now, minBudget = 0) {
|
|
|
89
110
|
ofertas_recibidas: bids,
|
|
90
111
|
horas_restantes: Math.round(hoursLeft * 10) / 10,
|
|
91
112
|
fecha_cierre: item.fechas?.fecha_cierre,
|
|
113
|
+
llamado,
|
|
92
114
|
puntuacion_caliente: score,
|
|
93
115
|
factores_calificacion: factors,
|
|
94
116
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"radar-oportunidades.js","sourceRoot":"","sources":["../../src/tools/radar-oportunidades.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,SAAS,GAAG,+BAA+B,CAAC;AAElD,MAAM,gBAAgB,GAAG
|
|
1
|
+
{"version":3,"file":"radar-oportunidades.js","sourceRoot":"","sources":["../../src/tools/radar-oportunidades.ts"],"names":[],"mappings":"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"}
|