METODOLOGÍA

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 8,7M reg. · 2012-2026 · 780 MB

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
→ Ver empresas con contratos PLACSP en el screener
EUROPEA TED · Diario Oficial UE 591K reg. · 2010-2025 · 57 MB

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
→ Ver empresas con contratos TED en el screener
ENRIQUECIMIENTO BORME · Registro Mercantil 9,2M empresas · 17M cargos · 750 MB

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

  1. Scraper — descarga ~126K PDFs desde boe.es (~6 GB). Comando: borme_scraper.py --start 2009-01-01
  2. Parser — extrae actos mercantiles (constituciones, cargos, etc.) de los PDFs. Comando: borme_batch_parser.py --workers 8. Genera borme_empresas.parquet + borme_cargos.parquet (PRIVADOS, contienen nombres reales).
  3. Anonymize — convierte a versiones públicas con SHA-256 sobre persona. Comando: borme_anonymize.py. Resultado: borme_empresas_pub.parquet + borme_cargos_pub.parquet.
  4. 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 20,6M reg. · 2014-2025 · 180 MB

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.
→ Ver Catalunya en screener

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
Registre

Sin NIF en origen — no agregable por empresa.

PSCP
  1. dD BioLab, SLU 25.401 contratos
  2. VWR International Eurolab, S.L. 22.015 contratos
  3. SUDELAB SL 19.124 contratos
  4. Sekai Corporate Travel SLU 12.798 contratos
  5. Atlàntida Tours de Viatge S.A 11.561 contratos
PLACSP (ccaa=CT)
  1. servicios microinformaticos S.A 938 contratos
  2. Aparells ortopedics curto sl 893 contratos
  3. Moncobra, SA 888 contratos
  4. o ENDESA ENERGIA SAU 606 contratos
  5. SERVEIS INTEGRALS DE FINQUES URBANES, S. 585 contratos

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 8,5M reg. · 2000-2026 · 156 MB

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íaArchivosRegistros
Contratación (REGCON 2014-2025 + DANA)13246K
Subvenciones (Ayudas 2022-2025 + DANA)522,2M
Presupuestos (ejecución 2024-2025)4346K
Convenios (2018-2022)58K
Lobbies (REGIA) — único en España711K
Empleo (ERE/ERTE 2000-2025, DANA)42888K
Paro (estadísticas LABORA)2832,6M
Siniestralidad (accidentes 2015-2024)10570K
Patrimonio (inmuebles GVA)39K
Entidades (locales + asociaciones)294K
Territorio (centros docentes)14K
Turismo (hoteles, VUT, campings)16383K
Sanidad (mapa sanitario)8189K
Transporte (bus interurbano GTFS)7993K

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 screener
CCAA Madrid · Comunidad 2,56M reg. · 2017-2025 · 90 MB

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:

TipoRegistrosPresupuesto licitaciónImporte adjudicación
Contratos menores2.529.049487 M€487 M€
Convocatoria a licitación21.07039.551 M€
Adjudicados sin publicidad10.0358.466 M€
Encargos a medios propios2.178173 M€
Anuncio de información previa1.166327 M€
Consultas preliminares28
Total2.563.52749.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_hasta es incompatible con contratos menores, y fecha_desde no funciona combinado con entidad_adjudicadora. Solución: descargar por entidad sin filtro de fecha + subdivisión recursiva por rango de presupuesto para entidades grandes.
→ Ver Madrid CAM en screener
CCAA Galicia 1,7M reg. · 2007-2026 · 36 MB

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 --resume no rehace trabajo.
→ Ver Galicia en screener
CCAA Andalucía ~857K reg. · 2016-2026 · 47 MB

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).
→ Ver Andalucía en screener
CCAA País Vasco · Euskadi 704K reg. · 2005-2026 · 160 MB

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=N para paginación (no page, no HATEOAS). El parámetro _pageSize se 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).
→ Ver Euskadi en screener
CCAA Asturias 375K reg. · 2019-2024 · 21 MB

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
→ Ver Asturias en screener
LOCAL Madrid · Ayuntamiento 119K reg. · 2015-2025 · 40 MB

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íaRegistrosImporte
Contratos menores68.626407 M€
Contratos formalizados17.99116.606 M€
Acuerdo marco / sist. dinámico24.6212.549 M€
Prorrogados4.4412.967 M€
Modificados1.789718 M€
Cesiones3080 M€
Resoluciones22562 M€
Penalidades48313 M€
Homologación1.0471 M€
Total119.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.
Próximamente: Castilla y León (en evaluación). El resto de comunidades autónomas publica datos a través de PLACSP (vía adhesión) o no exponen datos abiertos suficientes para scraping.

2. Cobertura y huecos

~44 millones de registros agregados, ~2,3 GB de datos. Cobertura por fuente, periodo y volumen:

FuenteRegistrosPeriodoTamañoCobertura
PLACSP (estatal)8,7M2012-2026780 MBOperativa
Catalunya20,6M2014-2025180 MBOperativa (incluye subvenciones)
Valencia8,5M2000-2026156 MBOperativa
Madrid · Comunidad2,56M2017-202590 MBOperativa
Galicia1,7M2007-202636 MBOperativa
Andalucía857K2016-202647 MBOperativa
País Vasco704K2005-2026160 MBOperativa
TED (España)591K2010-202557 MBOperativa
Asturias375K2019-202421 MBOperativa
Madrid · Ayto.119K2015-202540 MBOperativa
BORME (enriquecimiento)9,2M empresas + 17M cargos2009-2026750 MBOperativa, anonimizado
Calidad (indicadores)8,7M × 20 indicadores2012-2026977 MBDataset 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.

Resto de cruces — disponibles como análisis publicado, no integrados en el sitio. Las secciones siguientes describen pipelines que se ejecutan offline y cuyos datasets se publican en el repo de GitHub. No se reflejan dentro del screener todavía. Es funcionalidad pendiente de integrar.

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.

442.835
SARAs identificados en PLACSP
177.892
Validados en TED · 40,2%
202.383
Missing alta confianza

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).

BienioObrasServicios (AGE)Servicios (resto)Sectores especiales
2016-20175.225.000 €135.000 €209.000 €418.000 €
2018-20195.548.000 €144.000 €221.000 €443.000 €
2020-20215.350.000 €139.000 €214.000 €428.000 €
2022-20235.382.000 €140.000 €215.000 €431.000 €
2024-20255.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:

#EstrategiaMatches% del total
E1NIF adjudicatario + importe ±10% + año ±143.0639,7%
E2Nº expediente + importe ±10%7.8911,8%
E3NIF del órgano contratante + importe77.81617,6%
E4Lotes agrupados (suma importes mismo órgano+año)31.3657,1%
E5Nombre órgano normalizado + importe17.7574,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ñoSARA identificadosValidados en TED% match
201610.9482.64324,1%
201717.3606.53237,6%
201832.60514.72045,1%
201942.95114.18233,0%
202040.6939.21422,6%
202147.9717.47215,6%
202256.64922.25039,3%
202360.51831.82952,6%
202459.11438.21664,6%
202548.27626.92055,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:

ÓrganoSARAs missing
Servicio Andaluz de Salud (SAS)4.833
FREMAP2.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.

1
Empresa recién creada — Constitución < 6 meses antes de la adjudicación
2
Capital ridículo — Capital social < 10 K€ ganando contratos > 100 K€
3
Administradores compartidos — Misma persona administra empresas competidoras
4
Disolución post-adjudicación — Disuelta < 12 meses después de cobrar
5
Adjudicación en concurso — Empresa en situación concursal recibiendo contratos

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

Esta sección describe un dataset publicado en GitHub Releases, no funcionalidad del screener. El sitio sirve los datos crudos sin score ni filtros de calidad. Aparte, el repo publica un análisis de calidad sobre PLACSP que aplica 14 indicadores (subset del marco Hay Derecho descrito en la sección 5). Si en el futuro se integra en el screener, lo indicaremos explícitamente.

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.

Marco metodológico: sistema de Hay Derecho (ver sección 5) con la metodología PPDS (Public Procurement Data Standard) como referencia técnica, y contribuciones de Jaime Gómez-Obregón (umbrales LCSP) y OIRESCON (benchmarks PBL).
IndicadorDescripción% fallo
INT-VAL-01Importe de licitación en formato válido22,6%
INT-VAL-02Importe de adjudicación en formato válido31,8%
INT-VAL-07Fecha de adjudicación válida39,2%
INT-VAL-09Código CPV válido23,3%
INT-VAL-12NIF/CIF adjudicatario válido (checksum)33,4%
INT-VAL-14Contrato menor coherente con cuantía (LCSP art. 118)1,3%
INT-CONS-01Si adjudicado, nº ofertas ≥ 11,1%
INT-CONS-08Importe adjudicación ≤ licitación (+5%)0,3%
INT-CONS-18Adjudicatario existe en BORME51,3%
INT-CONS-20Contrato SARA publicado en TED77,5%
INT-FIA-01Nº ofertas en rango razonable (P99 por CPV)0,6%
INT-FIA-04Plazo presentación ofertas razonable (0-365 días)21,3%
INT-FIA-08PBL no outlier (≤ 50 M€)0,4%
INT-FIA-09PA 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):

IndicadorMenoresRegularesDiferencia
NIF adjudicatario inválido2,7%52,1%−49,5pp
Sin CPV60,3%0,7%+59,6pp
Sin fecha adjudicación0,8%62,6%−61,9pp
Sin importe licitación53,1%4,1%+49,0pp
Score medio90,886,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:

50%
Criterio Legal · 48 indicadores
30%
Calidad del dato · 48 indicadores
20%
Buenas prácticas · 14 indicadores

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).

Estado actual en buscalicitaciones: el sitio publica los datos crudos tal y como vienen normalizados desde las plataformas oficiales — no aplica score de calidad ni evalúa estos indicadores en tiempo real. Esta sección identifica el marco Hay Derecho como referencia para futuras versiones del sitio.
Lo que sí existe hoy: el repositorio publica un dataset descargable (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 INT-COM-01 a INT-COM-48
IDIndicadorDescripció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 INT-VAL-01 a INT-VAL-14
IDIndicadorDescripció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 INT-CONS-01 a INT-CONS-22
IDIndicadorDescripció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 INT-FIA-01 a INT-FIA-12
IDIndicadorDescripció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 INT-BPP-01 a INT-BPP-14
IDIndicadorDescripció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.

Los outliers se pueden incluir activando el toggle 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_first y year_last ambos sin dato
Se muestra . Caso típico: CATALUNYA_MENORS, donde el 100% de los contratos carecen de fecha en origen.
year_last es el sentinela pero year_first tiene 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–YYYY tal 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:

FuenteFrecuenciaNotas
PLACSPMensualVolcado completo del feed ATOM/XML
TEDTrimestral (API) / Anual (CSV bulk)API v3 eForms desde 2020
AndalucíaTrimestralRe-ejecución del scraper completo
EuskadiTrimestralAPI + XLSX + consolidación
Madrid · ComunidadTrimestralAntibot bypass + subdivisión recursiva
Madrid · Ayto.AnualNuevos CSVs por año cuando se publican
CatalunyaVariablePor dataset (algunos semanales, otros anuales)
ValenciaDiaria/MensualPor dataset
GaliciaTrimestral~8h de scraping completo
AsturiasAnualSolo se publica anualmente
BORMETrimestralScraper + 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.parquet existe; 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.

⚠ Aviso sobre Git LFS: los ficheros .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:
  1. Recomendado: Descarga directa desde Releases (sin LFS)
  2. git clone + git lfs pull (requiere Git LFS instalado)
  3. Tras hacer fork, git lfs pull en tu copia

ZIPs disponibles (última release)

ArchivoContenidoTamaño
nacional.zipLicitaciones PLACSP1,34 GB
catalunya.zipDatos Catalunya (contratación, subvenciones, RRHH...)1,06 GB
borme.zipRegistro Mercantil — actos mercantiles + cargos (anonimizado)750 MB
ted.zipTenders Electronic Daily — España217 MB
valencia.zipDatos Valencia (14 categorías)120 MB
andalucia.zipContratación Junta de Andalucía114 MB
euskadi.zipContratación Euskadi109 MB
comunidad_madrid.zipContratación Comunidad de Madrid~90 MB
madrid_ayuntamiento.zipActividad contractual Ayuntamiento de Madrid~40 MB
galicia.zipContratación pública Xunta de Galicia (CM + LIC)~35 MB
asturias.zipContratación centralizada Principado de Asturias~21 MB

Licencias

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.