Jaime Gómez-Obregón Profile picture
Ingeniero hackeando para mejorar la Administración pública. Ayúdame a seguir 👉 https://t.co/QkIuB8saBA

Jan 28, 2022, 11 tweets

Hoy he dedicado mi día a perfeccionar el método de extracción del NIF de los contratistas que encuentro en los datos oficiales. A priori parece fácil. Basta con utilizar el dígito de control (o la letra) para comprobar la validez de cada NIF.

Chupado, ¿verdad? Pues no.

El problema es bastante más complejo. Y, algorítmicamente, muy interesante.

La primera vuelta de tuerca viene cuando el funcionario aplica la imaginación a la hora de escribir el NIF en el expediente. Pero tiene fácil solución 🎉.

Pero con tantísimos contratos públicos, tarde o temprano te encuentras con casos más exóticos, como estos de la imagen. Porque las herramientas informáticas de algunas administraciones no validan los datos al introducirlos, así que pueden escribir cualquier cosa…

Una fiesta.

Algunos contratos tienen lotes y varios adjudicatarios. ¡No problemo! Se añaden al expediente tantos como sea necesario, ¿no?

Pues tampoco. En la práctica, a veces encuentro que meten TODOS los adjudicatarios como si fueran uno solo. EN EL MISMO CAMPO. Y tengo que separarlos…

Lógicamente no hago nada manualmente. Sería imposible. He escrito un programa y lo aplico a los 3,2 millones de expedientes.

En uno me he topado con esto. Es un caso excepcional, muy extraño; y que puede inducir fácilmente a error. Por eso lleva tanto tiempo hacerlo bien™️.

Ahora viene la segunda derivada: los contratistas extranjeros. Si ya tiene tela detectar un NIF español, solo en la 🇪🇺UE hay 27 formatos más.

Una primera opción es hacer una detección formal. Es decir, detectarlos por su forma. Mediante expresiones regulares queda así. 👇

Un segundo paso es aplicar el algoritmo de cálculo del dígito de control. Pero… ¿dónde está definido el algoritmo oficial que usa cada país? 🔍

Spoiler: algunos países no utilizan algoritmo alguno… Y en otros hay dígitos que son simplemente aleatorios.

La cosa puede complicarse todo lo que queramos. Veamos, por ejemplo, este contrato del Ayuntamiento de Cullera.

¡Al NIF del contratista le falta un dígito! Podríamos darlo por perdido pero… ¿y si es justo la pyme del cuñado del alcalde? 🤣

Una solución es aplicar el algoritmo inverso y calcular el dígito faltante. Así podemos corregir unos cuantos miles de contratos que, si no, no podrían cruzarse con otras fuentes de datos.

🚫 B9699103 👈 Lo que publica el Estado… (incorrecto)
✅ B96991039 👈 El NIF corregido

Esto es solo una pincelada de la complejidad que puede alcanzar resolver un problema que no debería haberse creado. Porque si no se validan los datos en el momento de su introducción, arreglarlo luego puede ser imposible. Y al sistema llega todo tipo de chatarra inútil como esta.

Como siempre, muchísimas gracias a mis patronos ❤️, que es quienes hacen posible que pueda poner mis magulladas neuronas a resolver esto. Que servirá para que pronto todos tengamos una nueva herramienta digital que dará más transparencia a los concursos y al dinero público. 🙏

Share this Scrolly Tale with your friends.

A Scrolly Tale is a new way to read Twitter threads with a more visually immersive experience.
Discover more beautiful Scrolly Tales like this.

Keep scrolling