ptn-mcp 1.3.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/LICENSE +19 -0
- package/README.md +195 -0
- package/TOOLS.md +373 -0
- package/build/index.js +1563 -0
- package/build/ptn-http.js +72 -0
- package/package.json +51 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
5
|
+
in the Software without restriction, including without limitation the rights
|
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
8
|
+
furnished to do so, subject to the following conditions:
|
|
9
|
+
|
|
10
|
+
The above copyright notice and this permission notice shall be included in all
|
|
11
|
+
copies or substantial portions of the Software.
|
|
12
|
+
|
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
19
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# Argentina PTN - MCP Server Suite
|
|
2
|
+
|
|
3
|
+
[](https://www.typescriptlang.org/)
|
|
4
|
+
[](https://modelcontextprotocol.io/)
|
|
5
|
+
[](https://ptn-mcp.vercel.app)
|
|
6
|
+
[](https://www.npmjs.com/package/ptn-mcp)
|
|
7
|
+
|
|
8
|
+
MCP Server Oficial para buscar y extraer dictámenes de la Procuración del Tesoro de la Nación (PTN). Conector para consultar dictámenes, opiniones técnicas y asesoramientos desde busquedadictamenes.ptn.gob.ar.
|
|
9
|
+
|
|
10
|
+
Paquete npm: [`ptn-mcp`](https://www.npmjs.com/package/ptn-mcp) · Repositorio: [github.com/voftec/ptn-mcp](https://github.com/voftec/ptn-mcp)
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Novedades v1.3.0
|
|
15
|
+
|
|
16
|
+
* **Insights del portal PTN**: Aplicación de análisis detallado del portal de búsqueda y Novedades para nuevas funcionalidades.
|
|
17
|
+
* **+4 herramientas nuevas basadas en investigación del portal**:
|
|
18
|
+
* `buscar_por_doctrina` - Búsqueda restringida al campo doctrina (evita ruido de boilerplate procedimental)
|
|
19
|
+
* `obtener_facetas_completas` - Facetas de navegación combinadas (organismos + voces) con conteos
|
|
20
|
+
* `buscar_por_ley_enriquecido` - Búsqueda de leyes con contexto de citación (integración Infoleg)
|
|
21
|
+
* `localizar_por_coordenadas_archivisticas` - Búsqueda por Tomo + Página exacta (útil para OCR deficiente)
|
|
22
|
+
* **Mejora en `obtener_novedades`**: Ahora incluye facetas con conteos como el portal Novedades
|
|
23
|
+
* **Mejora en `buscar_dictamenes`**: Parámetro `soloDoctrina` para búsqueda específica en doctrina
|
|
24
|
+
|
|
25
|
+
## Novedades v1.2.0
|
|
26
|
+
|
|
27
|
+
* **Patrones de implementación mejorados**: Aplicación de patrones arquitectónicos de InfoLeg, JUBA, BORA y NormativaPBA para mayor robustez.
|
|
28
|
+
* **+2 herramientas de agregación concurrente**: `obtener_resumen_multiple_organismos` y `obtener_resumen_multiple_voces` (BORA pattern: Promise.all).
|
|
29
|
+
* **Parsing de fechas sofisticado**: Soporte para fechas en lenguaje natural español ("15 de febrero de 2026"), DD/MM/YYYY, ISO YYYY-MM-DD, y compacto YYYYMMDD (BORA pattern).
|
|
30
|
+
* **Auto-resolución de dictámenes**: `localizar_dictamen_automatico` permite buscar con información parcial y devuelve el dictamen más probable (NormativaPBA pattern).
|
|
31
|
+
* **Detección de plazos mejorada**: `detector_plazos_dictamenes` con +70 patrones legales/administrativos adicionales (InfoLeg pattern).
|
|
32
|
+
* **Validadores Zod personalizados**: Helpers reutilizables para validación de fechas, arrays y números (common pattern).
|
|
33
|
+
* **Mejoras en herramientas existentes**: Integración de nuevas funciones de parsing y validación en todas las herramientas de búsqueda.
|
|
34
|
+
|
|
35
|
+
## Novedades v1.1.0
|
|
36
|
+
|
|
37
|
+
* **+6 herramientas nuevas** pensadas para flujos de abogados: shortcuts por **organismo**, **voz temática**, **ley citada**, y **localización por cita** (Tomo / Página / Nº / Año).
|
|
38
|
+
* **Catálogos descubribles**: `listar_organismos` y `listar_voces` exponen los facets oficiales con conteo (basados en agregaciones de Elasticsearch).
|
|
39
|
+
* **`obtener_novedades` con filtros** por organismo y voz.
|
|
40
|
+
* **2 nuevos prompts**: `comparar_dictamenes` y `resumen_por_organismo`.
|
|
41
|
+
* **+5 herramientas cognitivas y forenses**: detección de plazos, certificación forense, búsqueda semántica, relación de dictámenes, exportación estructurada.
|
|
42
|
+
* Diseño "una tool por eje" para mejorar la precisión cuando lo usa una IA.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Características principales
|
|
47
|
+
|
|
48
|
+
* **Búsquedas especializadas** (la IA elige la tool por nombre):
|
|
49
|
+
* `buscar_por_organismo` — `"¿qué dictó CONICET / AFIP / Ministerio X?"`
|
|
50
|
+
* `buscar_por_voz` — por materia (`designación transitoria`, `apoderamiento`, `contratación`, ...).
|
|
51
|
+
* `buscar_por_ley` — dictámenes que citan una ley.
|
|
52
|
+
* `localizar_por_cita` — lookup directo por Tomo + Página o N° + Año.
|
|
53
|
+
* `localizar_dictamen_automatico` — auto-resolución con información parcial (NormativaPBA pattern).
|
|
54
|
+
* `buscar_dictamenes` — búsqueda avanzada multi-filtro (power user).
|
|
55
|
+
* **Agregación Concurrente** (BORA pattern: Promise.all):
|
|
56
|
+
* `obtener_resumen_multiple_organismos` — resumen comparativo de múltiples organismos en paralelo.
|
|
57
|
+
* `obtener_resumen_multiple_voces` — resumen comparativo de múltiples voces temáticas en paralelo.
|
|
58
|
+
* **Texto íntegro** (`obtener_dictamen_texto`): cuerpo completo por `_id`.
|
|
59
|
+
* **Novedades** (`obtener_novedades`): últimos dictámenes, filtrables por organismo y voz.
|
|
60
|
+
* **Catálogos** (`listar_organismos`, `listar_voces`): facets oficiales con conteo.
|
|
61
|
+
* **Análisis y Relación**:
|
|
62
|
+
* `detector_plazos_dictamenes` — detecta plazos y fechas límite con +70 patrones legales (InfoLeg pattern).
|
|
63
|
+
* `relacionar_dictamenes` — busca dictámenes relacionados.
|
|
64
|
+
* `buscar_por_semantica` — búsqueda con expansión de términos.
|
|
65
|
+
* **Exportación y Certificación**:
|
|
66
|
+
* `generar_certificacion_forense` — certificación con hash SHA-256.
|
|
67
|
+
* `exportar_dictamen` — exportación a Markdown con frontmatter YAML.
|
|
68
|
+
* **Alcance** (`alcance_fuente`): metadatos y disclaimer.
|
|
69
|
+
* **Prompts asistidos**: `auditar_dictamen`, `comparar_dictamenes`, `resumen_por_organismo`.
|
|
70
|
+
|
|
71
|
+
> La PTN no expone HTML scrapeable: este MCP usa `POST /search` y `POST /search_news` contra `https://api.ptn.gob.ar`, no Cheerio ni Playwright.
|
|
72
|
+
|
|
73
|
+
**TLS:** por defecto verifica certificados. Si tu red/OS no puede validar la cadena de `api.ptn.gob.ar`, el servidor reintenta una vez sin verificación y avisa por stderr. Para forzar ese modo desde el inicio: `PTN_TLS_INSECURE=1`.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Instalación y configuración rápida
|
|
78
|
+
|
|
79
|
+
Requiere [Node.js](https://nodejs.org/) 18 o superior.
|
|
80
|
+
|
|
81
|
+
### 1. Cursor IDE / Windsurf
|
|
82
|
+
|
|
83
|
+
1. Abre **Settings** → **MCP** → **Add New MCP Server**.
|
|
84
|
+
2. Completa:
|
|
85
|
+
* **Name:** `ptn-mcp`
|
|
86
|
+
* **Type:** `command`
|
|
87
|
+
* **Command:** `npx -y ptn-mcp`
|
|
88
|
+
|
|
89
|
+
### 2. Claude Desktop
|
|
90
|
+
|
|
91
|
+
Edita `claude_desktop_config.json` (en Windows suele estar en `C:\Users\<TuUsuario>\AppData\Roaming\Claude\claude_desktop_config.json`):
|
|
92
|
+
|
|
93
|
+
```json
|
|
94
|
+
{
|
|
95
|
+
"mcpServers": {
|
|
96
|
+
"ptn-mcp": {
|
|
97
|
+
"command": "npx",
|
|
98
|
+
"args": ["-y", "ptn-mcp"]
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### 3. Antigravity / Codex (stdio local)
|
|
105
|
+
|
|
106
|
+
En `mcp_config.json`:
|
|
107
|
+
|
|
108
|
+
```json
|
|
109
|
+
{
|
|
110
|
+
"mcpServers": {
|
|
111
|
+
"ptn-mcp": {
|
|
112
|
+
"command": "npx",
|
|
113
|
+
"args": ["-y", "ptn-mcp"]
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
> Para conexión **SSE remota** (Claude Web, sin Node.js local), usa el despliegue **PTN-MCP** en Vercel.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Instalación manual (desarrolladores)
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
git clone https://github.com/voftec/ptn-mcp.git
|
|
127
|
+
cd ptn-mcp
|
|
128
|
+
npm install
|
|
129
|
+
npm run build
|
|
130
|
+
npm test # unit tests (sin red)
|
|
131
|
+
npm run test:smoke # humo contra api.ptn.gob.ar (requiere red)
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Ejecutar el servidor compilado:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
node build/index.js
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Configuración local en Cursor o Claude Desktop apuntando a la build:
|
|
141
|
+
|
|
142
|
+
```json
|
|
143
|
+
"ptn-mcp": {
|
|
144
|
+
"command": "node",
|
|
145
|
+
"args": ["D:/ruta-a-tu-carpeta/ptn-mcp/build/index.js"]
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Catálogo de herramientas (Tools)
|
|
152
|
+
|
|
153
|
+
| Herramienta | Descripción | Parámetro principal |
|
|
154
|
+
|---|---|---|
|
|
155
|
+
| `buscar_dictamenes` | Búsqueda avanzada multi-filtro (power user). | combinación libre |
|
|
156
|
+
| `buscar_por_organismo` | Dictámenes de un organismo. | `organismo` |
|
|
157
|
+
| `buscar_por_voz` | Dictámenes por voz temática / materia. | `voz` |
|
|
158
|
+
| `buscar_por_ley` | Dictámenes que citan una ley. | `ley` |
|
|
159
|
+
| `localizar_por_cita` | Lookup por Tomo+Página o Nº+Año. | `tomo`/`paginaRef`/`numero`/`anio` |
|
|
160
|
+
| `localizar_dictamen_automatico` | Auto-resolución con información parcial (NormativaPBA pattern). | combinación libre |
|
|
161
|
+
| `obtener_dictamen_texto` | Texto íntegro por `_id`. | `idDictamen` |
|
|
162
|
+
| `obtener_novedades` | Últimas publicaciones, con filtros opcionales. | `cantidad`, `organismo`, `voz` |
|
|
163
|
+
| `listar_organismos` | Catálogo de organismos con conteo (facets). | `top`, `criterio` |
|
|
164
|
+
| `listar_voces` | Catálogo de voces temáticas con conteo (facets). | `top`, `criterio` |
|
|
165
|
+
| `obtener_facetas_completas` | Facetas de navegación combinadas (organismos + voces) con conteos. | `top`, `criterio` |
|
|
166
|
+
| `detector_plazos_dictamenes` | Detecta plazos y fechas límite en dictámenes. | `texto_dictamen` |
|
|
167
|
+
| `relacionar_dictamenes` | Busca dictámenes relacionados. | `criterio_base`, `terminos_relacionados` |
|
|
168
|
+
| `buscar_por_semantica` | Búsqueda con expansión de términos. | `concepto`, `terminos_equivalentes` |
|
|
169
|
+
| `generar_certificacion_forense` | Certificación forense con hash SHA-256. | `idDictamen` |
|
|
170
|
+
| `exportar_dictamen` | Exportación a Markdown con frontmatter YAML. | `idDictamen` |
|
|
171
|
+
| `alcance_fuente` | Alcance, fuentes y disclaimer. | *(ninguno)* |
|
|
172
|
+
| `buscar_por_doctrina` | Búsqueda restringida al campo doctrina (evita ruido procedimental). | `criterio` |
|
|
173
|
+
| `buscar_por_ley_enriquecido` | Búsqueda de leyes con contexto de citación (integración Infoleg). | `ley` |
|
|
174
|
+
| `localizar_por_coordenadas_archivisticas` | Búsqueda por Tomo + Página exacta (útil para OCR deficiente). | `tomo`, `pagina` |
|
|
175
|
+
| `obtener_resumen_multiple_organismos` | Resumen comparativo de múltiples organismos en paralelo. | `organismos` |
|
|
176
|
+
| `obtener_resumen_multiple_voces` | Resumen comparativo de múltiples voces temáticas en paralelo. | `voces` |
|
|
177
|
+
|
|
178
|
+
Parámetros detallados: [TOOLS.md](./TOOLS.md).
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Diseño "una tool por eje"
|
|
183
|
+
|
|
184
|
+
La base PTN tiene 3 ejes naturales de búsqueda (los que el portal expone como filtros): **organismo**, **voz temática** y **ley citada**, más la **cita bibliográfica** (Tomo + Página). En vez de obligar al LLM a combinar 13 parámetros opcionales en una sola tool, ofrecemos una tool especializada por eje. Esto mejora dramáticamente la precisión cuando una IA decide qué llamar.
|
|
185
|
+
|
|
186
|
+
Cuando la pregunta mezcla ejes (ej. `"dictámenes de CONICET sobre contratación en 2025"`), la IA puede:
|
|
187
|
+
|
|
188
|
+
1. Usar `buscar_dictamenes` con `dependencia="CONICET"`, `materia="contratación"`, `anio="2025"`, o
|
|
189
|
+
2. Usar `buscar_por_organismo` y luego refinar con `buscar_por_voz`.
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## Licencia
|
|
194
|
+
|
|
195
|
+
Este proyecto se distribuye bajo la **Licencia MIT**. Consulta el archivo [LICENSE](./LICENSE).
|
package/TOOLS.md
ADDED
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
# Herramientas del servidor MCP PTN-MCP (Tools)
|
|
2
|
+
|
|
3
|
+
Este servidor expone **22 herramientas (tools)** contra la API oficial de dictámenes (`https://api.ptn.gob.ar`).
|
|
4
|
+
|
|
5
|
+
El diseño sigue un principio simple: **una tool por eje de búsqueda** para que el LLM acierte sin tener que combinar parámetros. La tool genérica `buscar_dictamenes` queda como "power user" para consultas multi-filtro.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Búsqueda
|
|
10
|
+
|
|
11
|
+
### 1. `buscar_dictamenes` (avanzada / multi-filtro)
|
|
12
|
+
|
|
13
|
+
Búsqueda combinando varios criterios. Usar cuando la pregunta mezcla 2 o más ejes.
|
|
14
|
+
|
|
15
|
+
**Parámetros:**
|
|
16
|
+
- `criterio` (string, opcional): Texto libre, frase, ley o concepto.
|
|
17
|
+
- `numero` (string, opcional): Número de dictamen.
|
|
18
|
+
- `anio` (string, opcional): Año (filtra por campo `fecha`).
|
|
19
|
+
- `tomo` / `paginaRef` (string, opcional): Localización en publicación.
|
|
20
|
+
- `ley` (string, opcional): Ley citada (ej. `24156`).
|
|
21
|
+
- `fechaDesde` / `fechaHasta` (string, opcional): Rango `DD/MM/YYYY`.
|
|
22
|
+
- `materia` (string, opcional): Voz temática (`voces`).
|
|
23
|
+
- `expediente` (string, opcional): Número de expediente.
|
|
24
|
+
- `dependencia` (string, opcional): Organismo.
|
|
25
|
+
- `historico` (boolean, opcional): Incluir índice histórico.
|
|
26
|
+
- `pagina` (number, opcional): Paginación (10 por página).
|
|
27
|
+
|
|
28
|
+
**Respuesta:**
|
|
29
|
+
- `total`: Total estimado de resultados
|
|
30
|
+
- `page`: Página actual
|
|
31
|
+
- `pageSize`: Resultados por página
|
|
32
|
+
- `data`: Array de dictámenes con ID, número, fecha, organismo, voces, extracto
|
|
33
|
+
|
|
34
|
+
### 2. `buscar_por_organismo`
|
|
35
|
+
|
|
36
|
+
Shortcut directo para "¿qué dictó el organismo X?". Refleja el filtro **Organismo** del portal.
|
|
37
|
+
|
|
38
|
+
**Parámetros:**
|
|
39
|
+
- `organismo` (string, **requerido**): Nombre o fragmento (`CONICET`, `Ministerio de Economía`, `AFIP`, ...).
|
|
40
|
+
- `criterio` (string, opcional)
|
|
41
|
+
- `anio` (string, opcional)
|
|
42
|
+
- `fechaDesde` / `fechaHasta` (opcional)
|
|
43
|
+
- `pagina` (number, opcional)
|
|
44
|
+
|
|
45
|
+
**Respuesta:**
|
|
46
|
+
- `total`: Total estimado de resultados
|
|
47
|
+
- `page`: Página actual
|
|
48
|
+
- `pageSize`: Resultados por página
|
|
49
|
+
- `data`: Array de dictámenes del organismo con ID, número, fecha, voces, extracto
|
|
50
|
+
|
|
51
|
+
### 3. `buscar_por_voz`
|
|
52
|
+
|
|
53
|
+
Shortcut por **voz temática / materia**. Refleja el filtro **Voces** del portal.
|
|
54
|
+
|
|
55
|
+
**Parámetros:**
|
|
56
|
+
- `voz` (string, **requerido**): Voz o materia (`designación`, `apoderamiento`, `contratación`, `subsecretaría legal`, ...).
|
|
57
|
+
- `criterio` (string, opcional)
|
|
58
|
+
- `organismo` (string, opcional)
|
|
59
|
+
- `anio` (string, opcional)
|
|
60
|
+
- `pagina` (number, opcional)
|
|
61
|
+
|
|
62
|
+
**Respuesta:**
|
|
63
|
+
- `total`: Total estimado de resultados
|
|
64
|
+
- `page`: Página actual
|
|
65
|
+
- `pageSize`: Resultados por página
|
|
66
|
+
- `data`: Array de dictámenes de la voz con ID, número, fecha, organismo, extracto
|
|
67
|
+
|
|
68
|
+
### 4. `buscar_por_ley`
|
|
69
|
+
|
|
70
|
+
Dictámenes que **citan una ley**. Indispensable para investigación jurisprudencial.
|
|
71
|
+
|
|
72
|
+
**Parámetros:**
|
|
73
|
+
- `ley` (string, **requerido**): Número o referencia (`24156`, `Ley 26076`).
|
|
74
|
+
- `criterio` (string, opcional)
|
|
75
|
+
- `organismo` (string, opcional)
|
|
76
|
+
- `anio` (string, opcional)
|
|
77
|
+
- `pagina` (number, opcional)
|
|
78
|
+
|
|
79
|
+
**Respuesta:**
|
|
80
|
+
- `total`: Total estimado de resultados
|
|
81
|
+
- `page`: Página actual
|
|
82
|
+
- `pageSize`: Resultados por página
|
|
83
|
+
- `data`: Array de dictámenes que citan la ley con ID, número, fecha, organismo, extracto
|
|
84
|
+
|
|
85
|
+
### 5. `localizar_por_cita`
|
|
86
|
+
|
|
87
|
+
Lookup por **Tomo + Página** o **Número + Año** (la cita clásica del abogado). Equivalente al modal "Búsqueda Avanzada" del portal.
|
|
88
|
+
|
|
89
|
+
**Parámetros:** (al menos uno)
|
|
90
|
+
- `tomo` (string)
|
|
91
|
+
- `paginaRef` (string)
|
|
92
|
+
- `numero` (string)
|
|
93
|
+
- `anio` (string)
|
|
94
|
+
|
|
95
|
+
**Respuesta:**
|
|
96
|
+
- `total`: Total estimado de resultados
|
|
97
|
+
- `page`: Página actual
|
|
98
|
+
- `pageSize`: Resultados por página
|
|
99
|
+
- `data`: Array de dictámenes con la cita bibliográfica especificada
|
|
100
|
+
|
|
101
|
+
### 6. `localizar_dictamen_automatico`
|
|
102
|
+
|
|
103
|
+
Localiza automáticamente un dictamen con información parcial (NormativaPBA pattern: auto-resolution). Permite buscar por combinación de numero, anio, organismo, o voz y devuelve el dictamen más probable. Útil cuando el usuario no tiene el ID exacto.
|
|
104
|
+
|
|
105
|
+
**Parámetros:** (al menos uno)
|
|
106
|
+
- `numero` (string, opcional): Número del dictamen
|
|
107
|
+
- `anio` (string, opcional): Año del dictamen
|
|
108
|
+
- `organismo` (string, opcional): Organismo
|
|
109
|
+
- `voz` (string, opcional): Voz temática
|
|
110
|
+
- `expediente` (string, opcional): Expediente
|
|
111
|
+
- `criterio` (string, opcional): Criterio de texto libre
|
|
112
|
+
|
|
113
|
+
**Respuesta:**
|
|
114
|
+
- Si encuentra una coincidencia única: dictamen resuelto con ID y recomendación de acción
|
|
115
|
+
- Si encuentra múltiples coincidencias: lista de resultados para que el usuario seleccione
|
|
116
|
+
- Si no encuentra resultados: sugerencias para mejorar la búsqueda
|
|
117
|
+
|
|
118
|
+
### 7. `buscar_por_doctrina`
|
|
119
|
+
|
|
120
|
+
Busca dictámenes restringiendo la búsqueda al campo 'doctrina' (resumen de principios legales) en lugar del texto completo. Evita ruido de boilerplate procedimental. Basado en insights del portal PTN (campo 'Tema / Palabras en la doctrina').
|
|
121
|
+
|
|
122
|
+
**Parámetros:**
|
|
123
|
+
- `criterio` (string, **requerido**): Concepto legal o término a buscar en la doctrina
|
|
124
|
+
- `organismo` (string, opcional): Organismo opcional para acotar
|
|
125
|
+
- `voz` (string, opcional): Voz temática opcional para acotar
|
|
126
|
+
- `anio` (string, opcional): Año opcional para acotar
|
|
127
|
+
- `pagina` (number, opcional, default 1): Página (10 por página)
|
|
128
|
+
|
|
129
|
+
**Respuesta:**
|
|
130
|
+
- Resultados de búsqueda en doctrina (resumen de principios legales)
|
|
131
|
+
- Filtrado de boilerplate procedimental
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Detalle
|
|
136
|
+
|
|
137
|
+
### 8. `obtener_dictamen_texto`
|
|
138
|
+
|
|
139
|
+
Texto íntegro por `_id` Elasticsearch.
|
|
140
|
+
|
|
141
|
+
**Parámetros:**
|
|
142
|
+
- `idDictamen` (string, **requerido**)
|
|
143
|
+
|
|
144
|
+
**Respuesta:**
|
|
145
|
+
- `id`: ID del dictamen
|
|
146
|
+
- `numero`: Número de dictamen
|
|
147
|
+
- `fecha`: Fecha
|
|
148
|
+
- `tomo` / `pagina`: Ubicación
|
|
149
|
+
- `expediente`: Número de expediente
|
|
150
|
+
- `organismo`: Organismo
|
|
151
|
+
- `voces`: Voces temáticas
|
|
152
|
+
- `leyes`: Leyes citadas
|
|
153
|
+
- `texto`: Texto completo del dictamen
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Agregación Concurrente (BORA pattern: Promise.all)
|
|
158
|
+
|
|
159
|
+
### 9. `obtener_resumen_multiple_organismos`
|
|
160
|
+
|
|
161
|
+
Obtiene un resumen concurrente de dictámenes de múltiples organismos en paralelo (BORA pattern: Promise.all aggregation). Útil para análisis comparativos entre organismos.
|
|
162
|
+
|
|
163
|
+
**Parámetros:**
|
|
164
|
+
- `organismos` (array of strings, **requerido**): Lista de organismos a consultar (ej. `['CONICET', 'AFIP', 'ANSES']`)
|
|
165
|
+
- `criterio` (string, opcional): Criterio opcional para acotar la búsqueda en cada organismo
|
|
166
|
+
- `anio` (string, opcional): Año opcional para filtrar
|
|
167
|
+
- `max_por_organismo` (number, opcional, default 5): Máximo de resultados por organismo
|
|
168
|
+
|
|
169
|
+
**Respuesta:**
|
|
170
|
+
- Resumen concurrente con resultados por organismo
|
|
171
|
+
- Total global de dictámenes
|
|
172
|
+
- Manejo de errores por organismo individual
|
|
173
|
+
|
|
174
|
+
### 10. `obtener_resumen_multiple_voces`
|
|
175
|
+
|
|
176
|
+
Obtiene un resumen concurrente de dictámenes de múltiples voces temáticas en paralelo (BORA pattern: Promise.all aggregation). Útil para análisis comparativos entre materias.
|
|
177
|
+
|
|
178
|
+
**Parámetros:**
|
|
179
|
+
- `voces` (array of strings, **requerido**): Lista de voces temáticas a consultar (ej. `['designación', 'apoderamiento', 'contratación']`)
|
|
180
|
+
- `criterio` (string, opcional): Criterio opcional para acotar la búsqueda en cada voz
|
|
181
|
+
- `organismo` (string, opcional): Organismo opcional para filtrar
|
|
182
|
+
- `anio` (string, opcional): Año opcional para filtrar
|
|
183
|
+
- `max_por_voz` (number, opcional, default 5): Máximo de resultados por voz
|
|
184
|
+
|
|
185
|
+
**Respuesta:**
|
|
186
|
+
- Resumen concurrente con resultados por voz temática
|
|
187
|
+
- Total global de dictámenes
|
|
188
|
+
- Manejo de errores por voz individual
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## Facetas y Navegación (Portal Insights)
|
|
193
|
+
|
|
194
|
+
### 11. `obtener_facetas_completas`
|
|
195
|
+
|
|
196
|
+
Obtiene las facetas de navegación completas (organismos y voces) con sus conteos, similar al panel lateral del portal Novedades. Útil para entender la distribución temática y por organismo de los dictámenes recientes.
|
|
197
|
+
|
|
198
|
+
**Parámetros:**
|
|
199
|
+
- `top` (number, opcional, default 30, máx. 200): Cantidad de resultados por faceta
|
|
200
|
+
- `criterio` (string, opcional): Criterio opcional para acotar las facetas a dictámenes que matcheen este texto
|
|
201
|
+
|
|
202
|
+
**Respuesta:**
|
|
203
|
+
- Distribución por organismo con conteos
|
|
204
|
+
- Distribución por voz temática con conteos
|
|
205
|
+
- Similar al panel lateral del portal Novedades
|
|
206
|
+
|
|
207
|
+
### 12. `buscar_por_ley_enriquecido`
|
|
208
|
+
|
|
209
|
+
Busca dictámenes que citan una ley específica y retorna información enriquecida con contexto de citación. Basado en la integración Infoleg del portal PTN que detecta referencias a leyes nacionales.
|
|
210
|
+
|
|
211
|
+
**Parámetros:**
|
|
212
|
+
- `ley` (string, **requerido**): Número de ley (ej. '26076', '19.549', '24156')
|
|
213
|
+
- `organismo` (string, opcional): Organismo opcional para acotar
|
|
214
|
+
- `anio` (string, opcional): Año opcional para acotar
|
|
215
|
+
- `pagina` (number, opcional, default 1): Página (10 por página)
|
|
216
|
+
|
|
217
|
+
**Respuesta:**
|
|
218
|
+
- Dictámenes que citan la ley específica
|
|
219
|
+
- Leyes citadas en cada dictamen
|
|
220
|
+
- Contexto de citación
|
|
221
|
+
|
|
222
|
+
### 13. `localizar_por_coordenadas_archivisticas`
|
|
223
|
+
|
|
224
|
+
Localiza un dictamen por sus coordenadas archivísticas exactas (Tomo + Página). Basado en el sistema de archivo físico de la PTN donde los dictámenes están encuadernados en volúmenes cronológicos. Útil para recuperar documentos con OCR deficiente.
|
|
225
|
+
|
|
226
|
+
**Parámetros:**
|
|
227
|
+
- `tomo` (string, **requerido**): Número de tomo (ej. '251', '336')
|
|
228
|
+
- `pagina` (string, **requerido**): Número de página dentro del tomo (ej. '787', '149')
|
|
229
|
+
|
|
230
|
+
**Respuesta:**
|
|
231
|
+
- Dictamen exacto por coordenadas físicas
|
|
232
|
+
- Útil para documentos con OCR deficiente
|
|
233
|
+
- Coordenadas más confiables que búsqueda de texto en documentos históricos
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## Novedades y catálogos
|
|
238
|
+
|
|
239
|
+
### 14. `obtener_novedades`
|
|
240
|
+
|
|
241
|
+
Últimos dictámenes publicados, con filtros opcionales. Incluye facetas con conteos como el portal Novedades.
|
|
242
|
+
|
|
243
|
+
**Parámetros:**
|
|
244
|
+
- `cantidad` (number, opcional, default 10, máx. 50)
|
|
245
|
+
- `organismo` (string, opcional): substring case-insensitive sobre el campo organismo.
|
|
246
|
+
- `voz` (string, opcional): substring case-insensitive sobre el campo voces.
|
|
247
|
+
- `incluir_facetas` (boolean, opcional, default true): Incluir facetas con conteos (organismos y voces).
|
|
248
|
+
|
|
249
|
+
**Respuesta:**
|
|
250
|
+
- `total`: Total en índice de novedades
|
|
251
|
+
- `filtrados`: Cantidad filtrada por organismos/voz
|
|
252
|
+
- `data`: Array de dictámenes recientes con ID, número, fecha, organismo, voces, extracto
|
|
253
|
+
- Facetas con distribución por organismo y voz (si `incluir_facetas`)
|
|
254
|
+
|
|
255
|
+
### 15. `listar_organismos`
|
|
256
|
+
|
|
257
|
+
**Facets** de Elasticsearch: catálogo de organismos con conteo de dictámenes. Útil para descubrir el nombre exacto antes de usar `buscar_por_organismo`.
|
|
258
|
+
|
|
259
|
+
**Parámetros:**
|
|
260
|
+
- `top` (number, opcional, default 30, máx. 200)
|
|
261
|
+
- `criterio` (string, opcional): restringir el conteo a dictámenes que matcheen un texto.
|
|
262
|
+
|
|
263
|
+
**Respuesta:**
|
|
264
|
+
- Tabla con organismos y conteo de dictámenes
|
|
265
|
+
- Ordenado por cantidad descendente
|
|
266
|
+
|
|
267
|
+
### 16. `listar_voces`
|
|
268
|
+
|
|
269
|
+
**Facets** de voces temáticas con conteo. Para descubrir voces exactas antes de usar `buscar_por_voz`.
|
|
270
|
+
|
|
271
|
+
**Parámetros:**
|
|
272
|
+
- `top` (number, opcional, default 30, máx. 200)
|
|
273
|
+
- `criterio` (string, opcional)
|
|
274
|
+
|
|
275
|
+
**Respuesta:**
|
|
276
|
+
- Tabla con voces temáticas y conteo de dictámenes
|
|
277
|
+
- Ordenado por cantidad descendente
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## Análisis y Relación
|
|
282
|
+
|
|
283
|
+
### 17. `detector_plazos_dictamenes`
|
|
284
|
+
|
|
285
|
+
Audita el texto de dictámenes para detectar e indexar plazos, fechas límite y hitos temporales relevantes (plazos administrativos, vencimientos, prescripciones). Enhanced with InfoLeg pattern with +70 legal/administrative patterns.
|
|
286
|
+
|
|
287
|
+
**Parámetros:**
|
|
288
|
+
- `texto_dictamen` (string, **requerido**): Texto del dictamen a analizar.
|
|
289
|
+
|
|
290
|
+
**Respuesta:**
|
|
291
|
+
- Auditoría de plazos y hitos temporales
|
|
292
|
+
- Cláusulas temporales detectadas con indicadores
|
|
293
|
+
- Patrones de búsqueda utilizados (+70 patrones legales)
|
|
294
|
+
|
|
295
|
+
### 18. `relacionar_dictamenes`
|
|
296
|
+
|
|
297
|
+
Busca dictámenes relacionados con un dictamen específico (mismo organismo, temas similares, misma voz temática).
|
|
298
|
+
|
|
299
|
+
**Parámetros:**
|
|
300
|
+
- `criterio_base` (string, **requerido**): Criterio base del dictamen de referencia.
|
|
301
|
+
- `terminos_relacionados` (array of strings, opcional): Términos relacionados.
|
|
302
|
+
- `organismo` (string, opcional): Acotar por organismo.
|
|
303
|
+
- `voz` (string, opcional): Acotar por voz temática.
|
|
304
|
+
- `pagina` (number, opcional): Página (10 por página).
|
|
305
|
+
|
|
306
|
+
**Respuesta:**
|
|
307
|
+
- Dictamen de referencia con criterios
|
|
308
|
+
- Criterio de búsqueda utilizado
|
|
309
|
+
- Dictámenes relacionados encontrados con ID, número, fecha, organismo, extracto
|
|
310
|
+
|
|
311
|
+
### 19. `buscar_por_semantica`
|
|
312
|
+
|
|
313
|
+
Busca dictámenes en la PTN utilizando expansión semántica de términos. El LLM debe generar sinónimos y términos equivalentes antes de llamar esta herramienta.
|
|
314
|
+
|
|
315
|
+
**Parámetros:**
|
|
316
|
+
- `concepto` (string, **requerido**): Concepto central a buscar.
|
|
317
|
+
- `terminos_equivalentes` (array of strings, **requerido**): Lista de sinónimos o términos relacionados.
|
|
318
|
+
- `organismo` (string, opcional): Acotar por organismo.
|
|
319
|
+
- `anio` (string, opcional): Acotar por año.
|
|
320
|
+
- `pagina` (number, opcional): Página (10 por página).
|
|
321
|
+
|
|
322
|
+
**Respuesta:**
|
|
323
|
+
- Términos de búsqueda utilizados (concepto + equivalentes)
|
|
324
|
+
- Resultados de búsqueda con dictámenes que matchean cualquiera de los términos
|
|
325
|
+
- Total estimado de resultados
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
## Exportación y Certificación
|
|
330
|
+
|
|
331
|
+
### 20. `generar_certificacion_forense`
|
|
332
|
+
|
|
333
|
+
Genera una certificación forense de autenticidad para un dictamen de la PTN con hash SHA-256, timestamp y metadatos de integridad.
|
|
334
|
+
|
|
335
|
+
**Parámetros:**
|
|
336
|
+
- `idDictamen` (string, **requerido**): ID del dictamen a certificar.
|
|
337
|
+
|
|
338
|
+
**Respuesta:**
|
|
339
|
+
- Acta de certificación forense
|
|
340
|
+
- Hash SHA-256 del documento
|
|
341
|
+
- Timestamp UTC
|
|
342
|
+
- Metadatos de integridad
|
|
343
|
+
|
|
344
|
+
### 21. `exportar_dictamen`
|
|
345
|
+
|
|
346
|
+
Exporta la información de un dictamen a formato Markdown estructurado con frontmatter YAML para sistemas de gestión del conocimiento (Notion, Obsidian, etc.).
|
|
347
|
+
|
|
348
|
+
**Parámetros:**
|
|
349
|
+
- `idDictamen` (string, **requerido**): ID del dictamen a exportar.
|
|
350
|
+
- `incluir_texto` (boolean, opcional): Incluir texto completo del dictamen.
|
|
351
|
+
|
|
352
|
+
**Respuesta:**
|
|
353
|
+
- Documento Markdown con frontmatter YAML
|
|
354
|
+
- Metadatos estructurados
|
|
355
|
+
|
|
356
|
+
---
|
|
357
|
+
|
|
358
|
+
## Metadata
|
|
359
|
+
|
|
360
|
+
### 22. `alcance_fuente`
|
|
361
|
+
|
|
362
|
+
Capacidades, fuentes, limitaciones y disclaimer del conector.
|
|
363
|
+
|
|
364
|
+
**Parámetros:** ninguno.
|
|
365
|
+
|
|
366
|
+
**Respuesta:**
|
|
367
|
+
- Datos del conector (versión, fuente, portal, API)
|
|
368
|
+
- Lista de herramientas de búsqueda
|
|
369
|
+
- Lista de herramientas de detalle
|
|
370
|
+
- Lista de herramientas de novedades y catálogo
|
|
371
|
+
- Lista de herramientas de metadata
|
|
372
|
+
- Limitaciones y aviso legal
|
|
373
|
+
|