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 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
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.4-blue.svg)](https://www.typescriptlang.org/)
4
+ [![MCP](https://img.shields.io/badge/Model_Context_Protocol-1.5.0-green.svg)](https://modelcontextprotocol.io/)
5
+ [![Vercel](https://img.shields.io/badge/Deployed_on-Vercel-black.svg?logo=vercel)](https://ptn-mcp.vercel.app)
6
+ [![NPM Version](https://img.shields.io/npm/v/ptn-mcp?color=cb3837&logo=npm)](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
+