Análisis normativo

Como es tradicional en todos los proyectos de Civio, el trabajo arrancó zambulléndonos en normativas y análisis sobre el asunto a tratar. Ya llevábamos un tiempo estudiando la Ley de Contratos del Sector Público para El BOE nuestro de cada día, pero necesitábamos ir un paso más allá. Del estudio de la ley, su reglamento, las directivas europeas y el borrador de anteproyecto de ley que preparó el Gobierno de cara a la próxima reforma salieron la guía de la ley y el glosario. Y, más importante aún, plantamos los cimientos para poder extraer y tratar la información con conocimiento de causa.

En paralelo, estudiamos a fondo la Guía de la CNMC sobre contratación pública y competencia y, sobre todo, el Informe de la CNMC sobre contratación; y el Informe de la Comisión Europea sobre la lucha contra la corrupción en la UE, que tiene un apartado dedicado en exclusiva a la contratación pública. Además, nos encantó y nos ayudó mucho a entender el problema el estudio de Alejandro Ferrando Gamir, titulado Mapping high-level corruption risks in Spanish public procurement y realizado en el Corruption Research Center of Budapest. Sin esas bases, habría sido imposible entender todo lo que vendría después.

Fuentes de datos

Elegir si usábamos el BOE o Contratación del Estado fue clave. Después de analizar qué información tenía cada una de las dos fuentes, decidimos abarcar más tipos de administraciones y nos centramos en el BOE. La información que necesitábamos está en la publicidad de las formalizaciones de los contratos, que se publican una vez se ha firmado y que incluyen toda la información que íbamos a necesitar y que compondría la base de datos.

Extrayendo del BOE

De forma automática, descargamos años y años de BOE. Aprovechamos el hecho de que la contratación pública está en la sección 5A del BOE: pudimos ignorar todos los documentos que no pertenecen a esta subsección. Utilizamos la versión XML de los anuncios del BOE. Tradicionalmente, para otro tipo de investigaciones (como la de El Indultómetro), la versión XML no aporta nada especial, porque el cuerpo del anuncio aparece embebido sin más dentro de un nodo del XML, que solo añade unos pocos campos de metadatos, poco relevantes. Pero en el caso de los contratos aparece también la sección de ‘Análisis’, que sí nos interesa, y es más fácil sacarla de los campos del XML que parsear una tabla del HTML.

Adjudicaciones, formalizaciones, correcciones

Necesitamos separar las formalizaciones de contratos de obra del resto de anuncios que aparecen en esa sección. Así, descartamos licitaciones, anuncios previos y correcciones -las usaremos más tarde-, y otro tipo de anuncios, como subastas, por ejemplo.

Algunos anuncios acababan, tras esta separación automática, sin clasificar o clasificados como ‘otros’ por falta de información en el original. Los tuvimos que revisar a mano, para saber a qué categoría pertenecían. Utilizamos filtros de lenguaje tanto en Excel como en Refine, que nos permitieron avanzar de forma más efectiva. Aun así, a veces hubo que echar mano del análisis uno a uno para saber qué tipo de anuncio era y si nos interesaba incluirlo en la base de datos.

En todos los pasos el proceso era similar: se trataban los datos de forma automática para acercarse al resultado óptimo todo lo posible y, para las erratas o inconsistencias, que eran muchas, se pasaba a una limpieza manual.

¿Qué es un contrato de obra?

Una vez separadas las formalizaciones, necesitábamos saber cuáles eran contratos de obra y cuáles no. Al principio pensábamos que los datos del anuncio dejarían claro si se trata de un contrato de obra. No fue así en todos los casos: en muchos estaban mal clasificados o, simplemente, no estaban clasificados de ninguna forma. Luego pensamos que los CPV -_Common Procurement Vocabulary_, un sistema común para clasificar los objetos de contratación- nos ayudarían a dividirlos, pero tampoco funcionó: en algunos contratos no se incluyen, o se incluyen algunos que no se pueden clasificar de forma automática como obras. Conclusión: tuvimos que pasar por otra ronda de limpieza automática y manual.

Dejamos fuera los acuerdos marco y las concesiones de obra, que archivamos en un documento aparte para analizarlos por separado. En cuanto a los contratos mixtos, solo incluímos en el archivo final aquellos en los que el peso de la obra era relevante frente a otro tipo de contrato -servicios o suministros.

Y de esta forma, al fin, obtuvimos una base de datos de formalizaciones de obra por cada año analizado, sobre la que revisamos errores y pasamos al siguiente punto del proceso: añadir las correcciones de errores, esos anuncios del BOE en el que se enmiendan anuncios anteriores.

El parser es incapaz de entender a qué anuncio original se refiere una corrección, o qué ha cambiado exactamente. Así que tuvimos que analizarlas a mano para corregir los datos si fuera necesario. Necesitábamos saber qué correcciones no afectaban a los datos -porque simplemente añadían que estaba cofinanciado con Fondos Feder, por ejemplo; o corregían licitaciones- y cuáles sí. A través de filtros por palabras y lecturas filtramos aquellas que sí eran relevantes y, por tanto, que teníamos que usar para corregir las formalizaciones en nuestra base de datos.

Al final de esta fase conseguimos un documento con los datos que queríamos, ya corregidos. Pero aún faltaba un paso más: la limpieza de las columnas clave.

Columnas a tratar

La sección de ‘Análisis’ no incluye toda la información relevante. Excluye, por ejemplo, una pieza fundamental, el nombre del ganador. Pero tampoco debemos ignorarla completamente, porque añade algún campo potencialmente interesante, como ‘Ámbito geográfico’. Así, tuvimos que combinar información de esa sección y del texto base del anuncio.

Para una primera fase, era necesario limpiar y consolidar campos como contratista, importe de adjudicación, procedimiento, tramitación, administración, fecha… Como hasta el momento, limpiamos y consolidamos de forma primero automática y luego, para los errores más resistentes o dudosos, de forma manual. La variedad de formas en las que se puede escribir el nombre de una empresa o, incluso, una cifra, nos sigue asombrando.

Para poder dar información por grupo constructor, realizamos unas tablas en las que sacamos las empresas de los grandes grupos y las relacionamos con ellos. Durante todo el proceso, un documento de control de incidencias y seguimiento monitoreaba cada cambio para asegurarnos de que todo estaba controlado.

Los lotes

Para poder tratar los lotes, decidimos duplicar cada contrato en tantas líneas como lotes tuviera. Cada una de ellas contendría el importe de adjudicación de ese lote concreto. Esta es la razón por la que, aunque la base de datos contenga 8.058 contratos, haya bastantes más líneas. Esta, y las UTE, que veremos más adelante.

La información aparece agrupada sin una estructura clara o predecible, lo que hace que sea difícil extraer la información de cada lote de forma automática, así que tuvimos que hacerlo a mano. También tratamos como lotes algunos casos en los que un ayuntamiento decide usar un mismo anuncio para informar sobre varios contratos.

La fiesta de las UTE

Teniendo en cuenta la importancia de las UTE en el total, queríamos saber cómo dividir cada contrato entre las empresas que la forman. Esto es lo más difícil y, por culpa de la falta de datos públicos, lo que nos causó más problemas y más quebraderos de cabeza.

La Ley de UTE de 1982, con sus modificaciones posteriores recuerda que no tienen personalidad jurídica propia y que se tienen que registrar en Hacienda para acceder a los beneficios fiscales. Artículo 8: “Las Uniones Temporales de Empresas se formalizarán en escritura pública, que expresará el nombre, apellidos, razón social de los otorgantes, su nacionalidad y su domicilio; la voluntad de los otorgantes de constituir la Unión y los estatutos o pactos que han de regir el funcionamiento de la Unión en los que se hará constar: […] La proporción o método para determinar la participación de las distintas Empresas miembros en la distribución de los resultados o, en su caso, en los ingresos o gastos de la Unión”. Pero ese registro no es público. Y, aunque lo pedimos vía solicitud de información y hasta recurrimos al Consejo de Transparencia, no hubo manera de hacerse con los datos.

Ante este problema, nos planteamos varias opciones: intentar conseguir solo las UTE de las mayores empresas, solo las de los mayores contratos o solo las de un año, 2015. Lo intentamos con ese plan C y fue un fracaso: buscamos la información en decenas de fuentes y solo encontramos las participaciones en unos pocos casos. Hubo que volver a reconducir el enfoque.

Al final, decidimos sumar el total de los contratos con UTE, aunque de una forma distinta. Por un lado está el importe adjudicado directamente a una empresa; por otro, el importe en el que está presente vía UTE, aunque no se lo lleve todo. No es perfecto, pero no había otro camino posible. Al menos, por el momento.

Aunque nos rindiéramos en cuanto a los porcentajes de participación, contábamos con un problema extra: en algunas UTE el nombre no permite separar, ni de forma automática ni manual, qué empresas la forman. Así fue como nació la fiesta de las UTE, una sesión intensa en la que todo el equipo de Civio buscó las empresas que formaban las 77 UTE que no habíamos podido separar ni de forma automática ni mediante fórmulas. De las que no sabíamos ni siquiera qué empresas las formaban. Hubo pizza y cerveza.

Errores irremediables

En algunos casos, la imposibilidad de obtener la información necesaria para poder afirmar que una empresa se ha llevado una cantidad nos ha obligado a descartar algunos contratos. Pasó con algunos lotes que no podíamos dividir. Además, hemos encontrado, en 2011 y 2010: uno, dos, tres, cuatro y otros del mismo estilo, contratos de Endesa e Iberdrola que solo informan de las fechas de adjudicación, pero ni de adjudicatarios ni de precios. Pese a la búsqueda, no hemos hallado información sobre estos contratos, seguramente debido a que ya no son empresas con participación pública y que tenían, ya por entonces, menos obligaciones de publicidad. Así, hemos tenido que excluirlos de la muestra por falta de datos.

Investigaciones

Con toda esa información, y sobre todo a través de Refine, Excel y, en algunos casos, de preguntas a la base de datos vía desarrollo, sacamos las primeras conclusiones, que dieron forma a las investigaciones. A los datos, el análisis de las leyes y las entrevistas a expertos del sector añadimos visitas a zonas de obra y conversaciones con vecinos y cargos públicos. Y surgieron los primeros artículos. Los primeros, pero no los últimos. Ahora que hemos abierto el melón, con lo que ha costado, queremos sacarle mucho más jugo.

La web

Para el desarrollo de la aplicación web hemos utilizado PostgreSQL, Ruby on Rails y Bootstrap. Las visualizaciones han sido realizadas con D3.js. Puedes encontrar el código fuente de la aplicación en nuestro repositorio en GitHub.