Ayer domingo 22 de junio, por esas vueltas de la vida, terminé como fiscal informático del proceso de “escrutinio electrónico” de las elecciones a Intendente de Río Cuarto, para el cual el titular del Poder Ejecutivo saliente, Cdor. Benigno Antonio Rins, contrató a la empresa Magic Software Argentina (MSA).
A media hora de comenzada la carga de los resultados de las mesas de votación, pasó lo siguiente:
La empresa MSA fue contratada a través de un cuestionado proceso por la suma de $520.000 para realizar el traslado de las urnas y el escrutinio provisorio (el definitivo lo hace posteriormente la Junta Electoral). La elección anterior, en la cual el escrutinio se hizo e forma “tradicional”, costó $60.000; por lo que los riocuartenses desembolsamos $460.000 para disponer de los resultados provisorios 3 horas antes, sin contar otros gastos, como los honorarios de los dos peritos del Consejo Profesional de Ciencias Informáticas de la Provincia de Córdoba ($80 a $120 por hora cada uno, según las tarifas de dicho Consejo).
Cabe aclarar que dicho costo no incluyó la adquisición de software ni hardware, sino el servicio provisto por dicha empresa.
“Se cayó el sistema”
El evento al que hace referencia el video ocurrió a las 19:25, a media hora de comenzada la carga de datos desde las escuelas, y duró unos 10 minutos. Durante ese tiempo, tanto la interfaz de carga de resultados, como la interfaz de consulta del estado de la misma, devolvían el mensaje “Internal Server Error“. En el recinto se escuchaba todo tipo de justificaciones, apuntando sobre todo a un problema de conectividad (”se cayó la red“). En las escuelas, el proceso electoral estaba paralizado. En el palacio municipal (donde estábamos los fiscales, peritos y la Junta Electoral) reinaba la incertidumbre.

Menos mal que en el momento de la caída había una diferencia de más de 10 puntos entre el primero y el segundo. No quiero imaginar lo que hubiera sido si la disputa hubiera sido más reñida.
Quienes tenemos cierta experiencia en el desarrollo de aplicaciones web, sabemos a qué se debe realmente: la conexión con el servidor no tenía problemas, era la aplicación que estaba reportando un error interno. De nada pareció servir la “redundancia” que había prometido Sergio Angelini, presidente de MSA, en la reunión previa con la Junta Electoral y los fiscales informáticos (supuestamente, debería haber 3 servidores redundantes, para salvar este tipo de circunstancias).
Software crackeado
En la citada reunión, Angelini había aclarado que todo el sistema estaba montado “sobre Linux”. Grande fue mi sorpresa al observar que tres de las seis terminales dispuestas para los fiscales, corrían Windows XP. Mirando un poco más de cerca, ví lo siguiente:

¿Qué es esto? Ni más ni menos que un Windows UE (Unattended Edition), una versión crackeada de Windows XP, que incluye Microsoft Office y varios otros programas privativos, obviamente, sin licencia.
Pero esto no termina aquí:

Esta vez se trata de un Windows CE (Colossus Edition), otra versión crackeada de Windows XP, MS Office y demás…
En resumen, había al menos 3 computadoras corriendo software privativo crackeado. Las excusas esta vez fueron del tipo: “Se rompió una PC y un proveedor local la reemplazó” (luego “una” fue reemplazada por “dos” y más tarde por “tres”). Realmente, parecían ancianitas que compraron una computadora para su nieto y no tenían idea de qué les instaló el proveedor de hardware.
Inconsistencias en los resultados
En el acto se elegían Intendente (y Concejales, en la misma boleta) y los integrantes del Tribunal de Cuentas, participando del comicio 6 partidos políticos.
Por curiosidad, uno de los fiscales tuvo la idea de consultar el acta electrónica de la mesa en la que había votado. Se encontró con esto:

Sumar los votos a Intendente (incluidos los no atribuidos a ningún partido) debería dar como resultado la misma cantidad que sumar los votos a Tribunal de Cuentas, pero… aquí la diferencia es de nada menos que ¡232 votos!
El error fue cometido por el presidente de la mesa y los fiscales, que llenaron mal la planilla (no tuvo nada que ver con el sistema). Aunque es evidente que el sistema podría controlar al menos la consistencia de los resultados, no lo hace porque así lo acordaron con la Junta Electoral (para no demorar el escrutinio provisorio, aunque no me parece muy razonable).
Mi planteo en ese momento fue: “Entiendo que el sistema no verifica eso, pero… quisiera saber en qué mesas se da esa situación” (con poco más que una consulta en la base de datos debería poder extraerse esa información). Se me respondió que el sistema tampoco proveía esa función y que en algún momento se iba a enviar a la Junta Electoral.
Al llegar a mi casa, poco después de las 22hs. y al cabo de unos minutos, pude generar el listado de todas las mesas que presentaban esa irregularidad. Resultaron ser 95 mesas, con una diferencia de ¡1996 votos! (sobre un total de 75245 votantes). En un artículo futuro escribiré sobre el diseño de la base de datos, que realmente deja mucho que desear.
Algunas conclusiones
Caídas del sistema, software sin licencias y crackeado, información relevante que no puede ser obtenida en tiempo y forma, un diseño deficiente de la base de datos, excusas ante la detección de problemas…
Me parece demasiado para un sistema que, según Angelini es utilizado por cientos de clientes en el gobierno. Y, sin dudas, demasiado para obtener resultados provisorios 2 horas antes pagando más de $400.000 que lo habitual.
Actualización: Tal lo prometido, he publicado un breve análisis de la base de datos del sistema de MSA.
Actualización 2: El vocero de la Junta Electoral, Jorge Salguero, insiste en que la caída del sistema se debió a una sobrecarga debido a la gran afluencia de consultas. Aducen que se recibieron unas 200 conexiones por segundo, cosa bastante extraña pero que de todas formas el sistema debería haber soportado sin problemas (en caso contrario, que fácil hubiera sido realizar un ataque de denegación de servicio).
Esto es totalmente inexacto, ya que la interfaz pública accesible desde Internet no dejó de funcionar en ningún momento. El sistema que colapsó fue el de carga y consulta de planillas, que tenía una cantidad de usuarios fija (de hecho, los navegadores debían autenticarse usando claves públicas previamente autorizadas por MSA). Merecería un párrafo aparte la excusa de que MSA no capacitó adecuadamente a sus operadores, pero dejo las conclusiones al lector.
Actualización 3: Como bien informa Gabriel en uno de los comentarios, el sitio web con los resultados provisorios de la elección se encuentra fuera de servicio (al menos desde el 24 de junio a las 23hs y hasta este momento, 25 de junio a las 16:05hs), aunque todavía está el enlace desde el sitio de la municipalidad/a>.

No te puedo creer! no me habías contado mucho, pero bue, me interesa lo de la base de datos. De donde sacaste los registros de la base de datos?
Saludos
Maxi