bacontest/ted-portal-licitaciones.md

202 lines
5.4 KiB
Markdown
Raw Permalink Normal View History

# Portal de Licitaciones de la Unión Europea — TED (Tenders Electronic Daily)
*Informe técnico — 2026-07-20*
---
## ¿Qué es TED?
**Tenders Electronic Daily (TED)** es el portal oficial de contratación pública de la Unión Europea. Contiene todas las licitaciones y contratos publicados en el Suplemento del Diario Oficial de la UE.
- **URL:** https://ted.europa.eu
- **Cobertura:** 27 países miembros + Islandia, Liechtenstein y Noruega (EEE)
- **Volumen:** ~700.000 licitaciones/año
- **Coste:** Gratuito
---
## API de TED (Sin Autenticación)
**La API de TED no requiere cuenta ni API key.** Es completamente abierta.
### Endpoints
| Servidor | URL |
|----------|-----|
| **Producción** | `https://api.ted.europa.eu/` |
| **Alternativo** | `https://tedweb.api.ted.europa.eu/` |
### Búsqueda de Avisos
```
POST https://api.ted.europa.eu/v3/notices/search
Content-Type: application/json
```
**Ejemplo — Avisos de hoy:**
```json
{
"query": "publication-date >= 20260720",
"fields": ["BT-21-Procedure", "publication-date"],
"limit": 10
}
```
**Formato de fecha:** `YYYYMMDD` (ej: `20260720`)
**Formato de consulta:** Expert search query
- `publication-date >= 20260720`
- `publication-date = today(0)` (hoy)
- `publication-date = today(-7)` (última semana)
### Campos Disponibles (ejemplos)
| Campo | Descripción |
|-------|-------------|
| `BT-21-Procedure` | Nombre del procedimiento |
| `publication-date` | Fecha de publicación |
| `notice-type` | Tipo de aviso |
| `country` | País |
| `cpv-code` | Código CPV |
### Respuesta
```json
{
"notices": [
{
"publication-number": "497792-2026",
"publication-date": "2026-07-20+02:00",
"links": {
"xml": {"MUL": "https://ted.europa.eu/en/notice/497792-2026/xml"},
"html": {"ENG": "https://ted.europa.eu/en/notice/-/detail/497792-2026"}
}
}
],
"total": 1234
}
```
### Prueba Rápida
```bash
curl -X POST "https://api.ted.europa.eu/v3/notices/search" \
-H "Content-Type: application/json" \
-d '{"query":"publication-date >= 20260720","fields":["BT-21-Procedure"],"limit":2}'
```
**Documentación Swagger:** https://ted.europa.eu/api/documentation/index.html
---
## RSS Feeds (Requiere Cuenta)
| Característica | Detalle |
|---------------|---------|
| **Página** | https://ted.europa.eu/en/simap/rss-feed |
| **Requisito** | Cuenta TED (gratuita) |
| **Funcionamiento** | Guardar búsqueda → activar RSS → URL generada |
---
## Descarga Masiva XML
| Tipo | URL |
|------|-----|
| **Diario** | `https://ted.europa.eu/packages/daily/{YYYYMMDD}` |
| **Mensual** | `https://ted.europa.eu/packages/monthly/{YYYY-MM}` |
| **Datos abiertos** | https://data.europa.eu |
---
## Opciones de Monitorización Diaria
### Opción 1: Script Python + crontab
```bash
# Script que consulta la API TED y guarda en SQLite
ted_monitor.py --cpv 72000000 --country ES --days 1
# crontab: ejecutar todos los días a las 8:00
0 8 * * * /usr/bin/python3 /home/user/ted_monitor.py
```
| Aspecto | Detalle |
|---------|---------|
| **Dependencias** | Python 3, requests, SQLite |
| **Control** | Total — tú defines filtros, formato, destino |
| **Notificación** | Email, Telegram bot, ntfy, archivo |
| **IA para resumir** | Opcional (llamar a LLM tras obtener resultados) |
| **Mantenimiento** | Tú lo mantienes |
| **Ideal para** | Control total, sin infraestructura adicional |
### Opción 2: Bot Hermes (cron job)
```bash
# Hermes cron ejecuta un prompt diariamente
hermes cron create "0 8 * * *" "Consulta API TED, filtra por CPV 72000000, resume licitaciones relevantes, envía por Telegram"
```
| Aspecto | Detalle |
|---------|---------|
| **Dependencias** | Hermes activo |
| **Control** | Medio — configuras vía cron job |
| **Notificación** | Telegram, XMPP, Discord (ya configurados) |
| **IA para resumir** | ✅ Incluido — LLM resume y destaca |
| **Mantenimiento** | Hermes lo gestiona |
| **Ideal para** | Si ya usas Hermes, resumen inteligente |
### Opción 3: n8n / Node-RED (self-hosted)
```
Trigger diario → HTTP Request API TED → filtra → envía
```
| Aspecto | Detalle |
|---------|---------|
| **Dependencias** | Docker (n8n o Node-RED) |
| **Control** | Visual, sin código |
| **Ideal para** | Flujos complejos, múltiples destinos |
### Opción 4: PWA + Service Worker
```
Navegador → fetch API TED → notificaciones push
```
| Aspecto | Detalle |
|---------|---------|
| **Dependencias** | Solo navegador |
| **Control** | Limitado |
| **Ideal para** | Sin servidor, uso personal |
### Opción 5: RSS → IFTTT / Zapier
```
RSS TED → filtro → email/Telegram
```
| Aspecto | Detalle |
|---------|---------|
| **Dependencias** | Cuenta TED + cuenta IFTTT/Zapier |
| **Control** | Limitado por la plataforma |
| **Ideal para** | Sin código, uso casual |
---
## Conclusión
| Método | Autenticación | Ideal para |
|--------|--------------|------------|
| **API de búsqueda** | ❌ No necesaria | Integración programática, monitorización |
| **RSS Feeds** | ✅ Cuenta TED | Notificaciones automáticas |
| **Descarga XML** | ❌ No necesaria | Análisis de datos completos |
**La API de búsqueda es la opción más práctica:** no requiere cuenta, es RESTful, y devuelve resultados en JSON listos para procesar.
**Para monitorización diaria:** Script Python + crontab (control total) o Hermes cron (resumen inteligente con IA).
---
*Informe generado por Hermes Agent — 2026-07-20*