Cómo se construye este dataset
buscalicitaciones.com agrega y normaliza datos de contratación pública española desde fuentes oficiales. ~44 millones de registros de 11 fuentes distintas, agregados, deduplicados y servidos en un screener único.
Esta página explica qué cubre cada fuente, qué no cubre, qué transformaciones se aplican y qué calidad tiene cada campo. Cuando una funcionalidad está pendiente o cuando un análisis se ha hecho offline (sin reflejarse aún en el screener), se indica explícitamente. Todos los scrapers y pipelines son código abierto en GitHub.
1. Fuentes de datos
Son 11 fuentes de licitaciones (1 estatal, 1 europea, 9 autonómicas/locales) más BORME (Registro Mercantil) usado para enriquecer. Pulsa cada una para ver detalle, periodo, qué cubre y qué no.
ESTATAL PLACSP
Plataforma de Contratación del Sector Público. Sistema estatal regulado por la LCSP 9/2017. Cubre Administración General del Estado, organismos autónomos, comunidades adheridas y entidades locales adheridas.
- Portal oficial
- contrataciondelsectorpublico.gob.es
- Formato
- ATOM/XML
- Subconjuntos
- 3,6M licitaciones · 3,3M contratos menores · 1,7M agregación CCAA · 14,7K encargos a medios propios · 3,7K consultas preliminares
- Periodo
- 2012 — actualidad (mensual)
- Campos clave
- 48 columnas: identificación, órgano, importes, adjudicatario, NIF, CPV, NUTS, fechas, es_pyme
EUROPEA TED · Diario Oficial UE
Tenders Electronic Daily. Diario oficial de contratación de la UE. Solo recoge contratos por encima de los umbrales europeos (SARA): servicios > 215 K€, obras > 5,4 M€ aproximadamente (varían por bienio y tipo de comprador). Se incluye porque permite cruzar y verificar publicación obligatoria de SARAs españolas.
- Portal oficial
- ted.europa.eu
- API v3
- ted.europa.eu/api/docs/ (formato eForms desde 2020)
- CSV bulk
- data.europa.eu (2010-2019)
- Cobertura
- 339K vía CSV bulk (2010-2019) + 252K vía API eForms (2020-2025)
- Campos clave
- 57 columnas: ted_notice_id, comprador, contrato, importes, adjudicatario (win_*), competencia (n_offers), duración
ENRIQUECIMIENTO BORME · Registro Mercantil
BORME no es una fuente de licitaciones. No contiene contratos públicos. Son datos del Boletín Oficial del Registro Mercantil parseados desde ~126.000 PDFs originales. Se usan para cruzar con las licitaciones y detectar anomalías.
- Portal oficial
- boe.es/diario_borme
- Empresas
- 9,2M filas, 3,3M únicas (constituciones, disoluciones, fusiones, ampliaciones de capital)
- Cargos
- 17M filas, 3,8M personas (nombramientos, ceses, revocaciones)
- Privacidad
- Personas físicas anonimizadas con SHA-256 (cumplimiento RGPD). Los PDFs originales no se redistribuyen, solo el scraper para descargarlos.
Pipeline en 4 pasos
- Scraper — descarga ~126K PDFs desde boe.es (~6 GB). Comando:
borme_scraper.py --start 2009-01-01 - Parser — extrae actos mercantiles (constituciones, cargos, etc.) de los PDFs. Comando:
borme_batch_parser.py --workers 8. Generaborme_empresas.parquet+borme_cargos.parquet(PRIVADOS, contienen nombres reales). - Anonymize — convierte a versiones públicas con SHA-256 sobre persona. Comando:
borme_anonymize.py. Resultado:borme_empresas_pub.parquet+borme_cargos_pub.parquet. - Match — cruza con PLACSP para generar los 5 flags de anomalías. Comando:
borme_placsp_match.py.
Detalle de los 5 flags y resultados: ver sección 3. Cruces.
Plataformas autonómicas y locales
CCAA Catalunya
Datos del portal Transparència Catalunya (Socrata API). Generalitat + entes locales adheridos. Es la fuente con mayor volumen total — incluye contratación, subvenciones, presupuestos, convenios, RRHH y patrimonio.
- Contratación pública
- 4,3M registros: 1,3M contratos regulares + 3,0M contratos menores (43 columnas, histórico completo con todas las actualizaciones de estado por contrato).
- Subvenciones RAISC
- 9,6M registros 2014-2025
- Presupuestos
- 3,1M registros 2014-2025
- Convenios
- 62K registros 2014-2025
- RRHH
- 3,4M registros 2014-2025
- Patrimonio
- 112K registros 2020-2025
- Reto técnico
- 72K requests al API Socrata con paginación + sub-segmentación automática para extraer los 3M de contratos menores.
Cataluña: tres versiones complementarias del mismo dato
Por la Ley de Contratos del Sector Público (artículo 347.3), los órganos de contratación catalanes deben publicar su actividad en la Plataforma de Serveis de Contractació Pública (PSCP) de la Generalitat. Esta plataforma se sincroniza bidireccionalmente con la PLACSP estatal, por lo que muchos contratos aparecen en ambos sistemas.
En este sitio dispones de tres ángulos de los datos catalanes:
- Cataluña (Registre): Registre Públic de Contractes (1,66M filas). Sin NIF de adjudicatario en origen — visible en buscador, no agregable por empresa en el screener.
- Cataluña (PSCP): Plataforma PSCP (1,28M filas con NIF válido al 100%). Disponible también en el screener.
- PLACSP filtrado por CCAA=CT: 264K filas con NIF al 86%. Es la versión que la PSCP sincroniza al estatal.
Comparar cifras entre estas tres fuentes permite auditar la sincronización oficial entre administraciones. Discrepancias significativas pueden indicar problemas de cumplimiento del artículo 347.3 o lag temporal en la sincronización.
Comparativa cruzada en cifras
Datos en vivo. La duplicación intencional permite auditar la sincronización oficial entre administraciones (Generalitat ↔ Estado) prevista por LCSP art. 347.3.
| Métrica | Registre | PSCP | PLACSP (ccaa=CT) |
|---|---|---|---|
| Contratos totales | 1.663.275 | 1.286.851 | 264.220 |
| Con NIF de adjudicatario | 0 (0.0%) | 1.286.851 (100.0%) | 226.786 (85.8%) |
| Empresas únicas | — | 65.570 | 37.685 |
| Importe total (excl. outliers) | 29 B€ | 62 B€ | 58 B€ |
| Cobertura temporal | 19–2028 | 2002–presente* | 2011–presente* |
Top 5 adjudicatarios por fuente
Sin NIF en origen — no agregable por empresa.
- dD BioLab, SLU
- VWR International Eurolab, S.L.
- SUDELAB SL
- Sekai Corporate Travel SLU
- Atlàntida Tours de Viatge S.A
- servicios microinformaticos S.A
- Aparells ortopedics curto sl
- Moncobra, SA
- o ENDESA ENERGIA SAU
- SERVEIS INTEGRALS DE FINQUES URBANES, S.
Solapamiento PSCP ↔ PLACSP: 105.370 contratos coinciden en NIF + año + importe entre las 2 plataformas (match heurístico, aproxima la sincronización real).
CCAA Valencia
Datos de Dades Obertes GVA (CKAN API). El portal cubre 14 categorías de datos abiertos — único portal con registro de lobbies REGIA en España y dataset específico de la DANA.
14 categorías de datos:
| Categoría | Archivos | Registros |
|---|---|---|
| Contratación (REGCON 2014-2025 + DANA) | 13 | 246K |
| Subvenciones (Ayudas 2022-2025 + DANA) | 52 | 2,2M |
| Presupuestos (ejecución 2024-2025) | 4 | 346K |
| Convenios (2018-2022) | 5 | 8K |
| Lobbies (REGIA) — único en España | 7 | 11K |
| Empleo (ERE/ERTE 2000-2025, DANA) | 42 | 888K |
| Paro (estadísticas LABORA) | 283 | 2,6M |
| Siniestralidad (accidentes 2015-2024) | 10 | 570K |
| Patrimonio (inmuebles GVA) | 3 | 9K |
| Entidades (locales + asociaciones) | 2 | 94K |
| Territorio (centros docentes) | 1 | 4K |
| Turismo (hoteles, VUT, campings) | 16 | 383K |
| Sanidad (mapa sanitario) | 8 | 189K |
| Transporte (bus interurbano GTFS) | 7 | 993K |
El screener actual solo indexa los datos de contratación (246K registros REGCON). Las otras categorías están publicadas en Parquet y son consultables vía descarga directa.
→ Ver Valencia en screenerCCAA Madrid · Comunidad
Contratación pública completa de la Comunidad de Madrid. Incluye 125 entidades adjudicadoras: consejerías, hospitales del SERMAS (30+: Gregorio Marañón, La Paz, 12 de Octubre, Ramón y Cajal, etc.), Canal Isabel II y filiales, Fundaciones IMDEA (7), Fundaciones de investigación biomédica (12), consorcios urbanísticos. NO incluye Ayuntamiento de Madrid (es una fuente aparte).
Desglose por tipo de publicación:
| Tipo | Registros | Presupuesto licitación | Importe adjudicación |
|---|---|---|---|
| Contratos menores | 2.529.049 | 487 M€ | 487 M€ |
| Convocatoria a licitación | 21.070 | 39.551 M€ | — |
| Adjudicados sin publicidad | 10.035 | 8.466 M€ | — |
| Encargos a medios propios | 2.178 | 173 M€ | — |
| Anuncio de información previa | 1.166 | 327 M€ | — |
| Consultas preliminares | 28 | — | — |
| Total | 2.563.527 | 49.004 M€ | 487 M€ |
- Reto técnico
- El portal usa antibot Drupal: el JS invierte pares de 2 caracteres desde el final para generar la clave de sesión + CAPTCHA matemático en cada CSV. El scraper replica ambos. Adicionalmente: el filtro
fecha_hastaes incompatible con contratos menores, yfecha_desdeno funciona combinado conentidad_adjudicadora. Solución: descargar por entidad sin filtro de fecha + subdivisión recursiva por rango de presupuesto para entidades grandes.
CCAA Galicia
Datos de contratosdegalicia.gal (Xunta + 418 organismos dependientes descubiertos automáticamente).
- Contratos menores
- 1.635.407 (2018-2026)
- Licitaciones formales
- 50.382 (2007-2026)
- Pipeline en 2 fases
- Base (12 columnas: id, objeto, importe, estado, fechas, NIF, adjudicatario, duración) → Detail HTML (50+ columnas adicionales extraídas de cada ficha: tipo de procedimiento, presupuesto base, valor estimado, lotes, CPV, NUTS, documentos, adjudicaciones).
- Caché incremental
- SQLite que guarda HTML crudo de cada ficha. Permite reanudar (
--resume) tras 403/429 sin perder progreso. - Reto técnico
- API jQuery DataTables con server-side. Endpoints separados para licitaciones y menores. CM rechaza rangos >3 meses, requiere barrido temporal con ventanas y deduplicación. Discovery automático de organismos probando IDs 1-2000 contra ambos endpoints.
- Validación reciente
- Sobre organismo mixto (#33): 152/152 fichas HTML resueltas, base de 12 cols + dataset final de 62 cols.
detail --resumeno rehace trabajo.
CCAA Andalucía
Plataforma propia de la Junta de Andalucía. Incluye Servicio Andaluz de Salud (SAS, 290K contratos, organismo más grande), 8 diputaciones, 10 universidades, consejerías, agencias.
- Licitaciones regulares
- ~80,9K
- Contratos menores
- ~775,7K
- Reto técnico
- Proxy Elasticsearch limita a 10K resultados/query. Subdivisión recursiva en 8 dimensiones + multi-sort 12x para chunks que aún superan el límite (caso SAS).
CCAA País Vasco · Euskadi
Combinación de KontratazioA (API REST) + Open Data Euskadi (XLSX históricos) + portales municipales (Bilbao, Vitoria-Gasteiz). Arquitectura API-first con fallback a XLSX para series históricas.
- Contratos sector público
- 664K (2011-2026, 56 columnas, vía XLSX anuales + JSON fallback 2011-2013)
- REVASCON histórico
- 34K (2013-2018, formato más rico para ese periodo)
- Bilbao
- 4,8K contratos 2005-2026 (portal municipal, CSV por año + tipo)
- Vitoria-Gasteiz
- Contratos menores formalizados (Open Data Euskadi)
- Empresas licitadoras
- 9.042 registradas (catálogo, 905 páginas)
- Poderes adjudicadores
- 919 entidades (catálogo, 92 páginas)
- Notas técnicas
- La API de KontratazioA usa
?currentPage=Npara paginación (nopage, no HATEOAS). El parámetro_pageSizese ignora (fijo a 10 items/página). Bulk inviable: 655K items × 10/pág = 65K peticiones (~27h). Los XLSX de 2011-2013 se publican vacíos (solo cabeceras), pero los JSON del mismo endpoint sí contienen los datos completos (9.482 registros recuperados).
CCAA Asturias
Contratación centralizada del Principado de Asturias.
- Cobertura
- 2019-2024 (el portal no expone histórico anterior)
- Datos extra
- 99 columnas incluyendo cláusulas sociales, medioambientales, I+D, fondos europeos
LOCAL Madrid · Ayuntamiento
Actividad contractual del Ayuntamiento de Madrid. Distinta de la Comunidad. 67 ficheros CSV con 12 estructuras distintas unificados en un único dataset normalizado de 70+ columnas.
9 categorías cubiertas:
| Categoría | Registros | Importe |
|---|---|---|
| Contratos menores | 68.626 | 407 M€ |
| Contratos formalizados | 17.991 | 16.606 M€ |
| Acuerdo marco / sist. dinámico | 24.621 | 2.549 M€ |
| Prorrogados | 4.441 | 2.967 M€ |
| Modificados | 1.789 | 718 M€ |
| Cesiones | 30 | 80 M€ |
| Resoluciones | 225 | 62 M€ |
| Penalidades | 483 | 13 M€ |
| Homologación | 1.047 | 1 M€ |
| Total | 119.253 | ~23.400 M€ |
- Reto técnico
- Las 12 estructuras detectadas (A, B, C, D, E, F, AC_OLD, AC_OLD_MOD, AC_HOMOLOGACION, AC_NEW, AC_2025) se unifican automáticamente al detectar las cabeceras. Periodos: 2015-2020 estructuras antiguas, 2021-2025 estructuras nuevas.
2. Cobertura y huecos
~44 millones de registros agregados, ~2,3 GB de datos. Cobertura por fuente, periodo y volumen:
| Fuente | Registros | Periodo | Tamaño | Cobertura |
|---|---|---|---|---|
| PLACSP (estatal) | 8,7M | 2012-2026 | 780 MB | Operativa |
| Catalunya | 20,6M | 2014-2025 | 180 MB | Operativa (incluye subvenciones) |
| Valencia | 8,5M | 2000-2026 | 156 MB | Operativa |
| Madrid · Comunidad | 2,56M | 2017-2025 | 90 MB | Operativa |
| Galicia | 1,7M | 2007-2026 | 36 MB | Operativa |
| Andalucía | 857K | 2016-2026 | 47 MB | Operativa |
| País Vasco | 704K | 2005-2026 | 160 MB | Operativa |
| TED (España) | 591K | 2010-2025 | 57 MB | Operativa |
| Asturias | 375K | 2019-2024 | 21 MB | Operativa |
| Madrid · Ayto. | 119K | 2015-2025 | 40 MB | Operativa |
| BORME (enriquecimiento) | 9,2M empresas + 17M cargos | 2009-2026 | 750 MB | Operativa, anonimizado |
| Calidad (indicadores) | 8,7M × 20 indicadores | 2012-2026 | 977 MB | Dataset publicado |
Huecos conocidos
- Cobertura territorial parcial: 7 comunidades autónomas tienen plataforma propia integrada. El resto se cubre vía PLACSP por adhesión.
- Catalunya pre-2014: No hay datos antes porque el portal no los publica.
- Asturias pre-2019: Solo desde 2019 (cuando se centralizó la publicación).
- Madrid Ayuntamiento pre-2015: Solo desde 2015.
- TED pre-2010: Solo desde 2010 (CSV bulk de data.europa.eu).
- Contratos menores PLACSP pre-2018: Solo desde 2018 (cuando entró en vigor la obligación de publicar).
- Ayuntamientos no adheridos a PLACSP: Sus contratos no aparecen salvo que tengan plataforma autonómica que los recoja.
3. Cruces entre fuentes
Lo que hace el sitio actualmente
El único cruce que se aplica de forma activa en el screener es la deduplicación
por id_canonical. Cuando un mismo contrato aparece en dos fuentes
(típicamente: una autonómica y PLACSP por adhesión), se cuenta solo una vez para no
inflar las agregaciones.
No se aplica matching automático contra TED ni contra BORME en tiempo real. Los datos por fuente se sirven tal y como vienen normalizados — el screener no añade flags ni anotaciones derivadas.
PLACSP ↔ TED — pipeline de validación SARA análisis offline
Los contratos por encima de los umbrales europeos (SARA) deben publicarse obligatoriamente
en TED. Hay un pipeline que cruza ambas fuentes con 5 estrategias secuenciales para detectar
SARAs que no llegan a TED. Los resultados se publican como dataset descargable
(crossval_sara_v2.parquet) pero el sitio no los muestra todavía.
Reglas SARA (umbrales por bienio)
Los umbrales de publicación obligatoria no son fijos — varían por bienio, tipo de contrato y tipo de comprador (AGE / resto / sectores especiales).
| Bienio | Obras | Servicios (AGE) | Servicios (resto) | Sectores especiales |
|---|---|---|---|---|
| 2016-2017 | 5.225.000 € | 135.000 € | 209.000 € | 418.000 € |
| 2018-2019 | 5.548.000 € | 144.000 € | 221.000 € | 443.000 € |
| 2020-2021 | 5.350.000 € | 139.000 € | 214.000 € | 428.000 € |
| 2022-2023 | 5.382.000 € | 140.000 € | 215.000 € | 431.000 € |
| 2024-2025 | 5.538.000 € | 143.000 € | 221.000 € | 443.000 € |
5 estrategias de matching (secuenciales)
Cada estrategia actúa solo sobre los registros que las anteriores no encontraron — la más ambigua se reserva para el final:
| # | Estrategia | Matches | % del total |
|---|---|---|---|
E1 | NIF adjudicatario + importe ±10% + año ±1 | 43.063 | 9,7% |
E2 | Nº expediente + importe ±10% | 7.891 | 1,8% |
E3 | NIF del órgano contratante + importe | 77.816 | 17,6% |
E4 | Lotes agrupados (suma importes mismo órgano+año) | 31.365 | 7,1% |
E5 | Nombre órgano normalizado + importe | 17.757 | 4,0% |
Hallazgo clave del análisis: la estrategia E3 (NIF del órgano contratante) explica el 17,6% de matches por sí sola — más que las otras cuatro juntas. TED registra el NIF del comprador; PLACSP, el del adjudicatario. Sin cruzar ambos se pierde casi 1 de cada 5 matches.
Validación por año
La tasa de validación ha mejorado significativamente desde 2018, alcanzando un máximo del 64,6% en 2024:
| Año | SARA identificados | Validados en TED | % match |
|---|---|---|---|
| 2016 | 10.948 | 2.643 | 24,1% |
| 2017 | 17.360 | 6.532 | 37,6% |
| 2018 | 32.605 | 14.720 | 45,1% |
| 2019 | 42.951 | 14.182 | 33,0% |
| 2020 | 40.693 | 9.214 | 22,6% |
| 2021 | 47.971 | 7.472 | 15,6% |
| 2022 | 56.649 | 22.250 | 39,3% |
| 2023 | 60.518 | 31.829 | 52,6% |
| 2024 | 59.114 | 38.216 | 64,6% |
| 2025 | 48.276 | 26.920 | 55,8% |
Los años 2020-2021 muestran caídas significativas debido al efecto COVID (cambios en patrones de contratación) combinado con baja cobertura del CSV bulk de TED en ese periodo. La transición a la API v3 eForms desde 2020 también introdujo discrepancias temporales.
Análisis sectorial: Salud
El sector salud representa el 17% de contratos SARA con una tasa de validación del 42,3%. El 38% del missing se explica por patrones de lotes: un único anuncio TED corresponde a N adjudicaciones individuales en PLACSP. La cobertura real ajustada por lotes es ~54%.
Top órganos con más SARAs missing en el análisis:
| Órgano | SARAs missing |
|---|---|
| Servicio Andaluz de Salud (SAS) | 4.833 |
| FREMAP | 2.410 |
| IB-Salut (Baleares) | 1.957 |
| Institut Català de la Salut (ICS) | 1.316 |
| SERGAS (Galicia) | 1.291 |
PLACSP × BORME — detector de anomalías análisis offline
Otro pipeline cruza BORME (Registro Mercantil) con PLACSP para generar 5 flags de posibles irregularidades. Resultados publicados como dataset, no aplicados en el screener todavía.
Cobertura de NIF por fuente
Resumen del % de contratos con NIF de adjudicatario poblado en cada fuente. Las fuentes sin NIF en origen están disponibles en el buscador pero no se pueden agregar por empresa en el screener.
| Fuente | Contratos | Con NIF | % NIF | Visible en screener |
|---|---|---|---|---|
PLACSP |
4.727.478 | 4.464.072 | 94.4% | ✓ Sí |
MADRID_CAM |
2.563.527 | 2.563.527 | 100.0% | ✓ Sí |
CATALUNYA |
1.663.275 | 0 | 0.0% | ✗ No (sin NIF en origen) |
GALICIA |
1.660.196 | 1.609.814 | 97.0% | ✓ Sí |
CATALUNYA_PSCP |
1.286.851 | 1.286.851 | 100.0% | ✓ Sí |
ANDALUCIA |
808.441 | 808.441 | 100.0% | ✓ Sí |
EUSKADI |
651.122 | 0 | 0.0% | ✗ No (sin NIF en origen) |
TED |
591.047 | 218.678 | 37.0% | ✓ Sí |
ASTURIAS |
375.380 | 60.891 | 16.2% | ✓ Sí |
VALENCIA |
218.445 | 194.055 | 88.8% | ✓ Sí |
CATALUNYA_MENORS |
171.295 | 0 | 0.0% | ✗ No (sin NIF en origen) |
CATALUNYA_BCN_MENORS |
108.350 | 108.350 | 100.0% | ✓ Sí |
4. Calidad de los datos dataset descargable
El dataset calidad_licitaciones_resultado.parquet (977 MB, 8,7M filas × 70 cols)
aplica 14 indicadores sobre el subset Calidad del dato del marco Hay Derecho.
Los IDs (INT-VAL-XX, INT-CONS-XX, INT-FIA-XX) son los
mismos que aparecen en la sección 5.
Resultados agregados sobre los 8,69M contratos PLACSP: score medio 88,3 / 100,
mediana 89,5 / 100. Cada indicador es una columna booleana en el Parquet
y existe un score_calidad agregado por contrato.
| Indicador | Descripción | % fallo |
|---|---|---|
INT-VAL-01 | Importe de licitación en formato válido | 22,6% |
INT-VAL-02 | Importe de adjudicación en formato válido | 31,8% |
INT-VAL-07 | Fecha de adjudicación válida | 39,2% |
INT-VAL-09 | Código CPV válido | 23,3% |
INT-VAL-12 | NIF/CIF adjudicatario válido (checksum) | 33,4% |
INT-VAL-14 | Contrato menor coherente con cuantía (LCSP art. 118) | 1,3% |
INT-CONS-01 | Si adjudicado, nº ofertas ≥ 1 | 1,1% |
INT-CONS-08 | Importe adjudicación ≤ licitación (+5%) | 0,3% |
INT-CONS-18 | Adjudicatario existe en BORME | 51,3% |
INT-CONS-20 | Contrato SARA publicado en TED | 77,5% |
INT-FIA-01 | Nº ofertas en rango razonable (P99 por CPV) | 0,6% |
INT-FIA-04 | Plazo presentación ofertas razonable (0-365 días) | 21,3% |
INT-FIA-08 | PBL no outlier (≤ 50 M€) | 0,4% |
INT-FIA-09 | PA plausible por segmento CPV (P1-P99) | 0,8% |
Los 6 indicadores restantes (formato numérico, no negativos, NUTS, trazabilidad) dan 0,0% de fallo: checks de sanidad sin problemas detectados.
Menores vs regulares
Los contratos menores (3,3M) tienen perfil de calidad muy distinto a los regulares (5,4M):
| Indicador | Menores | Regulares | Diferencia |
|---|---|---|---|
| NIF adjudicatario inválido | 2,7% | 52,1% | −49,5pp |
| Sin CPV | 60,3% | 0,7% | +59,6pp |
| Sin fecha adjudicación | 0,8% | 62,6% | −61,9pp |
| Sin importe licitación | 53,1% | 4,1% | +49,0pp |
| Score medio | 90,8 | 86,7 | +4,1 |
5. Sistema de indicadores Hay Derecho marco de referencia
Hay Derecho publica un Sistema de Indicadores de Transparencia en Contratación Pública que evalúa el cumplimiento legal y la calidad de los datos publicados por las administraciones. Es el marco más completo y exigente que existe en España para medir transparencia en contratación pública. Define 110 indicadores agrupados en tres criterios con pesos ponderados:
Score total = 0,5 · Legal + 0,3 · Calidad + 0,2 · BPP. Cada indicador tiene una salida binaria por contrato (presente/ausente, válido/inválido) y una salida agregada por organismo (% de contratos que cumplen).
calidad_licitaciones_resultado.parquet, 977 MB) que calcula 14 indicadores
sobre los 48 de Calidad del dato aplicado a PLACSP. Ver
sección 4 para los resultados de ese análisis offline y
sección 10 para descargar el dataset.
5.1 Criterio Legal — 48 indicadores (peso 50%)
Indicadores derivados de la LCSP y la LTAIBG. Cada incumplimiento conlleva un desmérito del 10% en la puntuación final del organismo. La salida es siempre Presente / Ausente por contrato.
LEGAL Ver los 48 indicadores legales
| ID | Indicador | Descripción |
|---|---|---|
INT-COM-01 |
Objeto del contrato publicado en el perfil del contratante | Comprueba que se publique la descripción del objeto contractual en el perfil del contratante |
INT-COM-02 |
Duración / plazo de ejecución publicado en el perfil del contratante | Comprueba que se publique duración o fechas que permitan conocer el plazo de ejecución de un contrato en elk perfil del contratante |
INT-COM-03 |
Importe de licitación (PBL/valor estimado) publicado en el perfil del contratante | Comprueba que se publique el Presupuesto Base de Licitación o valor estimado (campo numérico) en el perfil del contratante |
INT-COM-04 |
Importe de adjudicación publicado, incluido el Impuesto sobre Valor Añadido, en el perfil del contratante | Comprueba que se publique el importe final adjudicado (cantidad numérica) en el perfil del contratante |
INT-COM-05 |
Procedimiento de contratación declarado en el anuncio de licitación | Comprueba que se indique el tipo de procedimiento (abierto, negociado, menor…) |
INT-COM-06 |
Instrumentos de publicidad / canal de difusión indicados en el perfil del contratante | Comprueba que se indique dónde se ha publicado (perfil de contratante / PLCSP / TED / BOE) |
INT-COM-07 |
Número e identidad de licitadores públicos en el perfil del contratante | Comprueba que se publica el número y la identidad de ofertas recibidas o licitadores |
INT-COM-08 |
Identidad del adjudicatario publicada | Comprueba que se publica la identidad del adjudicatario (nombre + NIF cuando proceda) |
INT-COM-09 |
Desistimientos y renuncias publicados en el perfil del contratante (si han ocurrido) | Comprueba que, si hay desistimientos/renuncias en el procedimiento, aparecen documentados |
INT-COM-10 |
Declaración de desierto presente en el perfil del contratante (si ha ocurrido) | Comprueba que, si un contrato ha sido declarado desierto, esta información esté publicada y accesible en el perfil del contratante |
INT-COM-11 |
Interposición de recursos presente en el perfil del contratante (cuando corresponda) | Comprueba que, si se han interpuesto recursos, estén publicados en el perfil del contratante |
INT-COM-12 |
Suspensión de contratos con motivo de la interposición de recursos presente en el perfil del contratante (cuando corresponda) | Comprueba que, si un contrato se ha suspendido por recursos, esa información esté publicada y sea accesible |
INT-COM-13 |
Procedimientos anulados anunciados en el perfil del contratante (cuando corresponda) | Comprueba que, si un procedimiento ha sido anulado, la información esté publicada y sea accesible en el perfil del contratante |
INT-COM-14 |
Composición de las mesas de contratación disponible en el perfil del contratante | Comprueba que la composición de la mesa de contratación esté publicada y permita identificar a los miembros que han intervenido |
INT-COM-15 |
Cargos específicos de los miembros de las mesas de contratación disponibles en el perfil del contratante | El perfil de contratante publica la composición de la mesa de contratación indicando el cargo específico de cada miembro. No se permiten alusiones genéricas o indeterminadas ni descripciones que se refieran únicamente a la Administración, organismo o entidad a la que representen o en la que prestan servicio. |
INT-COM-16 |
Designación de los miembros del comité de expertos o responsables de la aplicación de criterios de adjudicación disponible en el perfil del contratante (en los procedimientos en los que sean necesarios) | Comprueba que, en los procedimientos en los que se requiere comité de expertos o responsables de la aplicación de criterios de adjudicación, la designación de los miembros esté publicada y sea accesible en el perfil del contratante |
INT-COM-17 |
Formalización de los encargos a medios propios cuyo importe fuera mayor a 50.000 euros, IVA excluido, en el perfil del contratante | Comprueba que, si se formaliza un encargo a medios propios con importe superior a 50.000 € (IVA excluido), la formalización esté publicada y accesible en el perfil del contratante |
INT-COM-18 |
Publicación en formato abierto y reutilizable de la información contenida en los perfiles de contratante | Comprueba que los datos cuya publicación en el perfil del contratante está regida por el Art. 63 de la LCSP están disponibles en formatos abiertos o exportables (no sólo PDF) |
INT-COM-19 |
Accesibilidad temporal mínima (≥ 5 años) | Comprueba que la publicación declare/plausiblemente cumple la accesibilidad por al menos 5 años |
INT-COM-20 |
Memoria justificativa del contrato publicada en el perfil del contratante | Comprueba que la memoria justificativa del contrato esté publicada y accesible en el perfil del contratante |
INT-COM-21 |
Informe de insuficiencia de medios publicado en el perfil del contratante (en el caso de contratos de servicios) | Comprueba que, si el contrato es de servicios, se publique el informe de insuficiencia de medios |
INT-COM-22 |
Justificación del procedimiento utilizado para la adjudicación publicada en el perfil del contratante (cuando se utilice un procedimiento distinto del abierto o del restringido) | Comprueba que, si se utiliza un procedimiento distinto de abierto o restringido, se publique la justificación |
INT-COM-23 |
Pliegos administrativos y técnicos o documentos equivalentes que rijan el contrato publicados en el perfil del contratante | Comprueba que se publiquen pliegos y documentos esenciales |
INT-COM-24 |
Documento de aprobación del expediente publicado en el perfil del contratante (cuando sea necesario) | Comprueba que, cuando sea necesario, el documento de aprobación del expediente esté publicado y accesible |
INT-COM-25 |
Anuncios de convocatoria de las licitaciones publicados en el perfil del contratante | Comprueba que la convocatoria de licitación esté publicada y accesible |
INT-COM-26 |
Anuncios de adjudicación publicados en el perfil del contratante | Comprueba que el anuncio de adjudicación esté publicado y accesible |
INT-COM-27 |
Anuncios de formalización publicados en el perfil del contratante | Comprueba que el anuncio de formalización del contrato esté publicado y accesible |
INT-COM-28 |
Anuncios de modificación y su justificación publicados en el perfil del contratante (cuando corresponda) | Comprueba que las modificaciones del contrato y su justificación estén publicadas |
INT-COM-29 |
Anuncios de concursos de proyectos publicados en el perfil del contratante (cuando corresponda) | Comprueba que los anuncios de concursos de proyectos estén publicados |
INT-COM-30 |
Resultados de concursos de proyectos publicados en el perfil del contratante (cuando corresponda y con las excepciones establecidas en las normas de los negociados sin publicidad) | Comprueba que los resultados de los concursos de proyectos estén publicados, con excepciones legales de negociados sin publicidad |
INT-COM-31 |
Publicación del anuncio de formalización en el DOUE (cuando el contrato esté sujeto a regulación armonizada) | Comprueba que la formalización se publique en el DOUE si el contrato está sujeto a regulación armonizada |
INT-COM-32 |
Publicación del anuncio de formalización en el BOE (cuando el contrato esté celebrado por la AGE) | Comprueba que la formalización se publique en el BOE si el contrato lo celebra la AGE |
INT-COM-33 |
Exposición resumida de las razones de desestimación de candidatos descartados de una licitación en el perfil de contratante | Comprueba que se publiquen las razones de desestimación de candidatos descartados |
INT-COM-34 |
Publicación de motivos de exclusión y desglose de valoraciones de ofertas (incluyendo al adjudicatario) en el perfil del contratante | Comprueba que se publiquen los motivos de exclusión y el desglose de valoraciones de ofertas (incluyendo adjudicatario) |
INT-COM-35 |
Publicación de la identidad del adjudicatario y las ventajas de la oferta adjudicataria y desarrollo de negociaciones | Comprueba que se publique la identidad del adjudicatario y razones/ventajas de la oferta seleccionada |
INT-COM-36 |
Publicación del objeto, fecha de inicio y denominaciones de los terceros que vayan a participar en las CPM, así como las razones de su elección, en el perfil del contratante (cuando corresponda) | Comprueba que los datos clave de la CPM estén publicados cuando corresponda |
INT-COM-37 |
Publicación del informe de las actuaciones realizadas para una CPM en el perfil del contratante (cuando corresponda) | Comprueba que se publique el informe de actuaciones realizado para la CPM cuando corresponda |
INT-COM-38 |
Publicación de las subcontrataciones y adjudicatarios (cuando corresponda) | Comprueba que se publica la lista de subcontrataciones con adjudicatarios y montos |
INT-COM-39 |
Publicación del procedimiento seguido para la adjudicación de subcontrataciones (cuando corresponda) | Comprueba que se publique el procedimiento seguido para la adjudicación de la subcontratación |
INT-COM-40 |
Indicación del importe de subcontratación (cuando corresponda) | Comprueba que se publique el importe de subcontratación |
INT-COM-41 |
Identificación de la financiación con fondos europeos (cuando corresponda) | Comprueba que, si un contrato está financiado total o parcialmente con fondos europeos (p.ej. PRTR/ NextGenerationEU), esa financiación esté identificada y publicada |
INT-COM-42 |
Actas de la mesas de contratación relativas al proceso de adjudicación (o en el caso de no actuar la mesa, las resoluciones del órgano de contratación correspondiente) publicadas en el perfil del contratante | Comprueba que se publiquen las actas de la mesa de contratación (que recogen el desarrollo de las sesiones, incluyendo los licitadores participantes, las actuaciones realizadas como la apertura de sobres, revisión de documentación, las valoraciones de las ofertas y la propuesta de adjudicación) o las resoluciones del órgano de contratación correspondiente. |
INT-COM-43 |
Informe de valoración de los criterios de adjudicación cuantificables mediante un juicio de valor de cada una de las ofertas publicado en el perfil del contratante | Comprueba que se publique el informe donde se explica por qué ha dado ciertas puntuaciones subjetivas (las que dependen del juicio técnico) a cada empresa. |
INT-COM-44 |
Informes sobre las ofertas incursas en presunción de anormalidad (cuando corresponda) publicados en el perfil del contratante | Comprueba que se publique, cuando corresponda, el informe que justifica si una oferta anormalmente baja (es decir, aquella cuyo precio o condiciones resultan tan bajos o atípicos en comparación con el resto de ofertas o con el presupuesto del contrato que generan dudas sobre su viabilidad) es viable o no tras el análisis de las explicaciones del licitador. |
INT-COM-45 |
Publicación de la resolución de adjudicación del contrato en el perfil del contratante | Comprueba que se publique la resolución de adjudicación en el perfil del contratante |
INT-COM-46 |
Publicación de los nombres de los integrantes de una UTE así como la participación porcentual de cada uno de ellos (en el caso de que un contrato se adjudique a una UTE) | Comprueba que se publiquen los intehrantes de una Unión Temporal de Empresas así como su participación porcentual cuando corresponda |
INT-COM-47 |
Justificación de desistimientos o renuncias publicada en el expediente (cuando corresponda) | Comprueba que se publiquen la justificación de desistimientos o renuncias cuando corresponda |
INT-COM-48 |
Programación de la actividad contractual como anuncio de información previa en el perfil del contratante | Comprueba que los entidades del sector público den a conocer, a través de un anuncio de información previa, su plan de contratación anual anticipadamente |
5.2 Calidad del dato — 48 indicadores (peso 30%)
Subdividido en tres dimensiones: Validez (formato y plausibilidad de los campos), Consistencia (coherencia entre campos relacionados) y Fiabilidad (rangos razonables y deduplicación).
VALIDEZ 14 indicadores de formato y validez
| ID | Indicador | Descripción |
|---|---|---|
INT-VAL-01 |
Importe de licitación en formato válido | Comprueba que el importe de licitación sea un número interpretable |
INT-VAL-02 |
Importe de adjudicación en formato válido | Comprueba que el importe adjudicado esté expresado como cantidad numérica |
INT-VAL-03 |
Importe mínimo plausible | Comprueba que el importe no sea 0, negativo o absurdamente bajo para ser interpretable |
INT-VAL-04 |
Número de licitadores es entero | Comprueba que el número de licitadores sea un entero y no texto libre |
INT-VAL-05 |
Número de licitadores no negativo | Comprueba que el número de licitadores sea ≥ 0 |
INT-VAL-06 |
Fecha de publicación en formato válido | Comprueba que la fecha exista y tenga formato de fecha correcto |
INT-VAL-07 |
Fecha de adjudicación en formato válido | Comprueba que la fecha de adjudicación sea interpretable como fecha real |
INT-VAL-08 |
Fecha de formalización en formato válido | Comprueba que la fecha de formalización sea interpretable como fecha real |
INT-VAL-09 |
Código CPV válido | Comprueba que el código CPV exista y pertenezca al vocabulario oficial |
INT-VAL-10 |
Código territorial válido | Comprueba que la localización territorial esté correctamente codificada |
INT-VAL-11 |
Información de subcontratación normalizada | Comprueba que el campo de subcontratación use códigos/categorías válidas |
INT-VAL-12 |
Identificación válida del adjudicatario (NIF/NIE) | Comprueba que el adjudicatario esté identificado con un identificador válido y no con un email, texto libre o dato informal |
INT-VAL-13 |
Clasificación correcta del procedimiento según cuantía | Comprueba que el procedimiento declarado sea compatible con la cuantía y naturaleza del contrato |
INT-VAL-14 |
Identificación válida de financiación PTRT (Plan de Recuperación, Transformación y Resiliencia) | Comprueba que, cuando un contrato declare financiación PTRT/PRTR, los campos asociados estén presentes y sigan un formato/catálogo válido (evitando valores libres, erróneos o inconsistentes) |
CONSISTENCIA 22 indicadores de coherencia
| ID | Indicador | Descripción |
|---|---|---|
INT-CONS-01 |
Si hay adjudicación, nº de ofertas ≥ 1 | Comprueba que no exista adjudicación sin al menos 1 oferta registrada |
INT-CONS-02 |
Nº ofertas totales ≥ nº ofertas PYME | Comprueba que el subconjunto PYME no supere al total |
INT-CONS-03 |
Si adjudicatario es PYME, nº ofertas PYME ≥ 1 | Comprueba que no se marque ganador PYME si el conteo PYME es 0 |
INT-CONS-04 |
Coherencia cronológica mínima del expediente | Comprueba el orden lógico de hitos |
INT-CONS-05 |
Coherencia de “fecha de envío” / publicación | Comprueba que la fecha de envío (p. ej., a DOUE/TED) no sea posterior a la publicación si el modelo lo exige |
INT-CONS-06 |
CPV coherente con tipo de contrato | Comprueba que el CPV principal sea compatible con obras/servicios/suministros (regla de mapeo) |
INT-CONS-07 |
Objeto coherente entre pestañas/secciones (PLCSP) | Comprueba que el objeto no cambie materialmente entre secciones del mismo expediente |
INT-CONS-08 |
Importe coherente entre licitación y adjudicación | Comprueba que no haya imposibles (p. ej., adjudicación > licitación sin explicación o variables de IVA mal definidas) |
INT-CONS-09 |
Suma de lotes coherente con total del expediente | Comprueba que el total coincida (con tolerancia) con suma de lotes |
INT-CONS-10 |
Adjudicatario consistente dentro del expediente | Comprueba que NIF/nombre no cambie entre pestañas o documentos |
INT-CONS-11 |
Estado del expediente coherente con eventos publicados | Comprueba que el estado no contradiga eventos (p. ej. “en licitación” pero con formalización) |
INT-CONS-12 |
Consistencia entre PLCSP y pliegos | Comprueba que los atributos esenciales del contrato coincidan (o sean compatibles) entre lo publicado como campos en PLCSP y lo declarado en pliegos (documentos oficiales del expediente) |
INT-CONS-13 |
Coherencia de importes clave (PBL–VEC–PA) | Comprueba que el PBL, VEC y PA estén tratados de forma coherente (sin contradicciones por bases IVA/sin IVA o mezclas de conceptos) y no presenten incompatibilidades económicas graves |
INT-CONS-14 |
Coincidencia de ID/expediente entre PLCSP y portal autonómico | Comprueba que el expediente sea el “mismo” en ambas fuentes (matching) |
INT-CONS-15 |
Coincidencia de objeto entre PLCSP y autonómico | Comprueba que el objeto no diverja materialmente entre fuentes |
INT-CONS-16 |
Coincidencia de importes entre PLCSP y autonómico | Comprueba que los importes clave coincidan (con tolerancia) |
INT-CONS-17 |
Coincidencia de adjudicatario (NIF) entre PLCSP y autonómico | Comprueba que el adjudicatario sea el mismo en ambas fuentes |
INT-CONS-18 |
Consistencia NIF/razón social del contratista: PLCSP vs BORME | Comprueba que el NIF del contratista apunte a una entidad existente y el nombre sea compatible |
INT-CONS-19 |
Consistencia NIF: PLCSP vs ROLECE | Comprueba que el proveedor esté registrado (si aplica) y el ID sea coherente |
INT-CONS-20 |
Consistencia de clasificación: tipo/procedimiento PLCSP vs autonómico | Comprueba que no haya divergencias de clasificación entre fuentes |
INT-CONS-21 |
Consistencia de fechas (hitos) PLCSP vs autonómico | Comprueba que no haya cronologías incompatibles entre fuentes |
INT-CONS-22 |
Consistencia de entidad compradora (órgano) PLCSP vs TED | Comprueba que la entidad compradora coincida (o se mapee) |
FIABILIDAD 12 indicadores de rangos y plausibilidad
| ID | Indicador | Descripción |
|---|---|---|
INT-FIA-01 |
Nº de ofertas dentro de un rango razonable | Que el nº de ofertas no sea inverosímil (p.ej. 10.000) dado el contexto |
INT-FIA-02 |
Nº de ofertas PYME dentro de rango razonable | Que el nº de ofertas PYME sea plausible (y compatible con el total) |
INT-FIA-03 |
Nº de lotes en rango razonable | Que el nº de lotes no sea atípico extremo sin justificación |
INT-FIA-04 |
Plazo de presentación de ofertas razonable | Que el plazo no sea imposible (negativo) ni absurdo (años) |
INT-FIA-05 |
Formato razonable de ID de lote | Que el ID de lote no sea vacío, ilegible o incoherente (p.ej. texto largo) |
INT-FIA-06 |
Plausibilidad temporal del plazo de ejecución | Que el plazo de ejecución sea posible y no absurdo (ej. año 1919) |
INT-FIA-07 |
Fiabilidad IVA: total coherente con base e IVA | Que el desglose IVA no sea inverosímil y permita confiar en el total |
INT-FIA-08 |
PBL atípico/inverosímil (outlier) | Detectar PBL desorbitados que suelen ser errores de registro (p.ej. basados en acuerdo marco) |
INT-FIA-09 |
PA (precio adjudicación) plausible respecto a comparables | Que el PA no sea atípico extremo para su CPV/órgano (posible error de carga) |
INT-FIA-10 |
“Actualización” del expediente: hitos completos | Que el expediente no esté “congelado” de forma inverosímil (p.ej. adjudicado sin formalizar tras meses) |
INT-FIA-11 |
Trazabilidad mínima del expediente (IDs y enlaces) | Que el expediente sea verificable: IDs estables + enlaces que permiten reconstruir el ciclo de vida |
INT-FIA-12 |
Trazabilidad de las CPM | Comprueba que una CPM sea verificable y pueda trazarse hasta el procedimiento de contratación asociado (licitación posterior); o, si no lo hay, que exista constancia pública de resultados/cierre |
5.3 Buenas prácticas de publicidad — 14 indicadores (peso 20%)
Indicadores que no son obligación legal, pero reflejan compromiso con la transparencia: anuncio de fiscalización, datos en formato reutilizable, conservación a 5 años, publicación de penalidades y prórrogas, etc. Aquí está el verdadero diferencial entre organismos que cumplen el mínimo y los que van más allá.
BPP Ver los 14 indicadores de buenas prácticas
| ID | Indicador | Descripción |
|---|---|---|
INT-BPP-01 |
Publicación anuncio de finalización en PLCSP | Comprueba si se publica el anuncio de fiscalización en la PLCSP, una práctica voluntaria, desde 01/2024 con fechas reales, importes finales, prórrogas, suspensiones, causa de resolución |
INT-BPP-02 |
Tiempo en las plataformas de contratación mayor a 5 años | Comprueba que la información contractual permanezca accesible al menos 5 años |
INT-BPP-03 |
Formato abierto y reutilizable de la información en materia de contratación pública más allá de aquella en el perfil del contratante (p. ej., informes de ofertas anormalmente bajas; composición de mesas de contratación) | Comprueba que la información relevante (incluyendo informes de ofertas anormalmente bajas, composición de mesas, etc.) esté publicada en formato abierto y reutilizable |
INT-BPP-04 |
Publicación de las penalidades de un contrato y su resolución | Comprueba que las penalidades de un contrato y su resolución estén publicadas |
INT-BPP-05 |
Publicación de las prórrogas contractuales y su resolución | Comprueba que las prórrogas y su resolución estén publicadas |
INT-BPP-06 |
Publicación de los recursos especiales en los portales públicos de contratación | Comprueba que los recursos especiales estén publicados y accesibles en portales oficiales |
INT-BPP-07 |
Inclusión del objeto, causa y sentido de la resolución de un recurso especial como dato estructurado. | Comprueba que cada recurso especial incluya objeto, causa y sentido de la resolución como dato estructurado |
INT-BPP-08 |
Incorporación del enlace con la publicación del tribunal administrativo competente en materia de recursos especiales | Comprueba que cada recurso especial tenga enlace a la publicación oficial en el tribunal competente |
INT-BPP-09 |
Inclusión del estado del expediente como "suspenso" en los portales oficiales de contratación pública cuando un contrato queda temporalmente detenido debido a la interposición de un recurso especial. | Comprueba que los expedientes afectados por recursos estén marcados como “Suspenso” |
INT-BPP-10 |
Publicación de la forma de presentación de oferta | Comprueba que la información sobre cómo presentar ofertas esté publicada |
INT-BPP-11 |
Seguimiento público de la planificación del contrato (p. ej a través de un breve informe de seguimiento de la programación anual en el perfil de contratante). | Comrpueba si los órganos de contratación publican el grado de cumplimiento de sus programas y justifiquen desvíos o retrasos en su ejecución |
INT-BPP-12 |
Publicación de la justificación económica del contrato junto los pliegos | Comprueba si se publica la justificación económica del contrato junto a los pliegos. |
INT-BPP-13 |
Anuncios de información previa publicados en el perfil del contratante o en el DOUE | Comprueba que, si se realiza anuncio previo, este esté publicado y accesible |
INT-BPP-14 |
Identificador único del expediente (ID) | Comprueba que existe un identificador trazable y recuperable que permite referenciar el expediente |
¿Por qué este marco importa?
- Es la referencia más exigente que existe en España. Combina la base legal (LCSP, LTAIBG) con buenas prácticas observadas en países con mejores prácticas.
- Permite comparar organismos de manera estandarizada. Hoy es muy difícil decir si el SAS publica peor o mejor que el SERMAS — con un score Hay Derecho sería un número directamente comparable.
- Identifica patrones estructurales de opacidad: los indicadores BPP miden lo que no es obligatorio pero se podría hacer. Ahí se ve quién tiene voluntad real de transparencia.
- Es metodológicamente sólido: cada indicador tiene fuente legal, descripción, fase del ciclo de vida, y salidas micro/agregada definidas formalmente.
6. Política de outliers
Por defecto se excluyen los contratos con importe > 1.000 M€ de las agregaciones del screener. Esto afecta a 27 registros con importes hasta 3,4 billones de euros (sí, billones — claramente errores de carga: importes con decimales mal interpretados, sumas de acuerdos marco no segregadas, o lotes mal estructurados).
Caso típico: un acuerdo marco de Sanofi en Andalucía aparece con un importe acumulado de 568 mil millones de euros. Sumar eso en cualquier ranking lo convierte en ruido. La política de exclusión es la misma que aplica la home del sitio.
incluir_outliers en
el sidebar del screener. Cuando se incluyen, aparece un chip INC. outliers >1B€ en la barra de filtros activos.
Fechas y el sentinela year=9999
El campo year del dataset unificado es la clave de partición usada
por el ETL para distribuir los contratos en el almacén columnar. Cuando un contrato no trae
fecha de adjudicación en origen — o trae una fuera de un rango razonable (años pre-2000 o
post-2030) — el ETL lo deposita en la partición year=9999 para mantener la
integridad del particionado.
El sentinela 9999 no es un dato: es el equivalente a un
NULL que el formato Parquet no puede almacenar como clave de partición.
Lo exponemos crudo en el dataset descargable para que cualquier auditor pueda
identificar qué contratos no traen año en origen y de qué fuente proceden.
En la interfaz, el sentinela se traduce a etiquetas legibles:
year_firstyyear_lastambos sin dato- Se muestra
—. Caso típico:CATALUNYA_MENORS, donde el 100% de los contratos carecen de fecha en origen. year_lastes el sentinela peroyear_firsttiene fecha real- Se muestra
YYYY–presente*. El asterisco indica que el grupo incluye algún contrato sin fecha; "presente" no implica actividad reciente confirmada, solo que no se puede acotar el extremo superior del rango. - Ambos extremos con fecha real
- Se muestra
YYYY–YYYYtal cual. Caso normal.
Volumen del sentinela (a fecha de la última construcción del dataset):
CATALUNYA_MENORS: 171.295 contratos (100% de la fuente)MADRID_CAM: 24.304 contratos (0,95% de la fuente)PLACSP: 5.254 contratos (0,11%)EUSKADI: 859 contratos (0,13%)CATALUNYA_PSCP: 248 contratos (0,02%)
En todos los casos verificados, los contratos con year=9999 también tienen
fecha_adj IS NULL. Es decir, el sentinela no oculta información:
cuando aparece, la fuente original tampoco trae fecha. Si en el futuro detectamos casos
donde la fecha sí esté disponible en otro campo (por ejemplo, parseable desde el código
de expediente), el ETL extraerá esa fecha y reasignará la partición correctamente.
7. Deduplicación e identificadores
Los datos se procesan generando claves canónicas para que no haya duplicados al cruzar fuentes:
id_canonical- Identificador único por contrato. Evita duplicados entre fuentes (ejemplo típico: un contrato del Servicio Vasco de Salud aparece en EUSKADI y en PLACSP por adhesión).
- NIF normalizado
- Validado con checksum LCSP. Se mantiene también el NIF "raw" para trazabilidad.
- Nombres normalizados
- Razón social pasada por normalización (uppercase, sin acentos, sin "S.L." trailing) para deduplicar variantes ortográficas del mismo NIF.
- CPV con división pre-computada
- Cada CPV se trunca a 2 dígitos (división) para agregaciones rápidas. El código completo se mantiene.
- Lotes
- Un anuncio TED puede corresponder a N adjudicaciones individuales en PLACSP. El cross-validation aplica matching por lotes agrupados (estrategia E4) con tolerancia de importe ±10%.
8. Actualización
Frecuencia con la que se ejecutan los scrapers contra cada fuente:
| Fuente | Frecuencia | Notas |
|---|---|---|
| PLACSP | Mensual | Volcado completo del feed ATOM/XML |
| TED | Trimestral (API) / Anual (CSV bulk) | API v3 eForms desde 2020 |
| Andalucía | Trimestral | Re-ejecución del scraper completo |
| Euskadi | Trimestral | API + XLSX + consolidación |
| Madrid · Comunidad | Trimestral | Antibot bypass + subdivisión recursiva |
| Madrid · Ayto. | Anual | Nuevos CSVs por año cuando se publican |
| Catalunya | Variable | Por dataset (algunos semanales, otros anuales) |
| Valencia | Diaria/Mensual | Por dataset |
| Galicia | Trimestral | ~8h de scraping completo |
| Asturias | Anual | Solo se publica anualmente |
| BORME | Trimestral | Scraper + parser + anonymize completo |
La fecha de la última actualización se indica en el pie de cada página. Para detalle por fuente, consultar el último Release en GitHub.
9. Limitaciones conocidas
Para mantener auditabilidad, lo que no está cubierto se enumera explícitamente:
Funcionalidad pendiente de integrar en el sitio
Estos análisis existen como pipelines y datasets descargables en el repo, pero todavía no se reflejan dentro del screener:
- Cruce automático PLACSP↔TED por contrato: el dataset
crossval_sara_v2.parquetexiste; el screener no muestra todavía un flag tipo "este SARA no está en TED" en cada contrato. - Detección BORME×PLACSP de anomalías: los 5 flags (empresa recién creada, capital ridículo, etc.) están calculados offline pero no aparecen en las fichas del adjudicatario.
- Score de calidad por contrato: los 20 indicadores existen como columnas en
calidad_licitaciones_resultado.parquet, pero el screener no permite filtrar por score ni mostrar el indicador junto a cada fila. - Cobertura BORME en el screener: los datos de Registro Mercantil están descargables, pero el sitio no expone fichas de empresa con su histórico mercantil (constituciones, ampliaciones, administradores).
Limitaciones inherentes a las fuentes
- Calidad heredada: 31,8% de los importes de adjudicación en PLACSP están en formato inválido. 33,4% de los NIFs no pasan checksum. No es un defecto del agregador, son los datos tal y como los publican los organismos.
- Cobertura territorial parcial: 7 comunidades autónomas tienen plataforma propia integrada. El resto se cubre vía PLACSP por adhesión.
- Cobertura temporal por fuente: Catalunya pre-2014, Asturias pre-2019, Madrid Ayuntamiento pre-2015, TED pre-2010 — no hay datos.
- Acuerdos marco con importe agregado: Algunos contratos consolidan licitaciones de varios años en una sola entrada, distorsionando rankings por importe (de ahí la política de outliers >1B€).
- Datos en lengua cooficial: Los nombres de organismos y objetos de contrato pueden aparecer en aragonés, catalán, euskera o gallego. No se traducen automáticamente.
Limitaciones del motor
- Búsqueda full-text: el motor está indexado con Meilisearch sobre los 13M+ contratos. Es typo-tolerant pero no entiende sinónimos ni contexto semántico.
- Drawer de detalle: el panel lateral del screener excluye outliers >1B€ siempre, independientemente del toggle del sidebar — para mostrar el perfil real de la entidad sin distorsiones de acuerdos marco mal cargados.
10. Descarga de los datos
Todos los datasets están publicados en formato Parquet en GitHub Releases . Los scripts de scraping y procesamiento son código abierto.
.parquet y .csv
del repo usan Git LFS. Si haces fork o descargas el ZIP del repo desde el botón
"Code" verde, solo obtienes punteros (~130 bytes), no los datos reales. La forma
correcta es:
- Recomendado: Descarga directa desde Releases (sin LFS)
git clone+git lfs pull(requiere Git LFS instalado)- Tras hacer fork,
git lfs pullen tu copia
ZIPs disponibles (última release)
| Archivo | Contenido | Tamaño |
|---|---|---|
nacional.zip | Licitaciones PLACSP | 1,34 GB |
catalunya.zip | Datos Catalunya (contratación, subvenciones, RRHH...) | 1,06 GB |
borme.zip | Registro Mercantil — actos mercantiles + cargos (anonimizado) | 750 MB |
ted.zip | Tenders Electronic Daily — España | 217 MB |
valencia.zip | Datos Valencia (14 categorías) | 120 MB |
andalucia.zip | Contratación Junta de Andalucía | 114 MB |
euskadi.zip | Contratación Euskadi | 109 MB |
comunidad_madrid.zip | Contratación Comunidad de Madrid | ~90 MB |
madrid_ayuntamiento.zip | Actividad contractual Ayuntamiento de Madrid | ~40 MB |
galicia.zip | Contratación pública Xunta de Galicia (CM + LIC) | ~35 MB |
asturias.zip | Contratación centralizada Principado de Asturias | ~21 MB |
Licencias
- España (PLACSP, autonomías): Licencia de Reutilización del Sector Público
- Galicia: Ley 1/2016 de transparencia y buen gobierno de Galicia
- Asturias: Portal de Transparencia del Principado de Asturias
- TED (UE): EU Open Data Licence
- BORME: Condiciones de Reutilización BOE — Fuente: Agencia Estatal Boletín Oficial del Estado
Cómo usar los datos descargados (pandas)
Una vez descargado el ZIP correspondiente, los Parquet se leen con pandas en una línea:
# Nacional (PLACSP)
df_nacional = pd.read_parquet('nacional/licitaciones_espana.parquet')
# TED España
df_ted = pd.read_parquet('ted/ted_es_can.parquet')
# Catalunya — contratos menores (3M registros)
df_cat = pd.read_parquet('catalunya/contratacion/contractacio_menors.parquet')
# BORME — actos mercantiles anonimizados
df_borme = pd.read_parquet('borme/data/borme_empresas_pub.parquet')
# Calidad — 8.7M contratos × 70 columnas
df_q = pd.read_parquet('calidad/calidad_licitaciones_resultado.parquet')
Ejemplos de análisis típicos:
# Top 10 adjudicatarios nacionales por importe
df_nacional.groupby('adjudicatario')['importe_sin_iva'].sum().nlargest(10)
# Contratos SARA no publicados en TED
df_q[df_q['INT-CONS-20'] == False].groupby('organo_contratante').size().nlargest(10)
# Score medio de calidad por órgano
df_q.groupby('organo_contratante')['score_calidad'].mean().nlargest(20)
# Constituciones de empresas en BORME por año
constit = df_borme[df_borme['actos'].str.contains('Constitución', na=False)]
constit.groupby(constit['fecha_borme'].dt.year).size()
# BORME: administradores en más de una empresa (red de cargos)
df_cargos = pd.read_parquet('borme/data/borme_cargos_pub.parquet')
multi = df_cargos.groupby('persona_hash')['empresa_norm'].nunique()
print(f"Personas en >1 empresa: {(multi > 1).sum():,}")
Más ejemplos y rutas de archivos en el README del repo.