05 marzo 2015

Reto Electoral para Desarrolladores V2

Viene otro año y se viene un nuevo reto electoral. Para los que siguen mi blog recordarán como el año pasado elaboramos el Reto Electoral para Desarrolladores que permitió desarrollar contemosnosotros.org un sistema completamente abierto y anónimo que funcionó para validar los cerrados resultados electorales de las elecciones presidenciales de El Salvador en el año 2014

Para este año el reto electoral tiene un par de niveles extra de complejidad:

El primer nivel de complejidad es el hecho de que se congregan tres tipos de elecciones en una sola votación:

  1. Elecciones de consejos municipales que se eligen de manera similar a las presidenciales.
  2. Elecciones de diputados de la asamblea legislativa.
  3. Elecciones del PARLACEN.

Las últimas dos representan el segundo nivel de complejidad ya que se implementa el voto por rostro no-partidario (o voto cruzado) por lo que las actas no solo incluyen el total de votos por partido sino el total de votos individuales para cada uno de los candidatos que los partidos han propuesto.

Habiendo explicado lo anterior, me alegra presentarles "El Reto Electoral v2.0":

¿Es posible crear un sistema abierto, anónimo y participativo que permita validar los resultados de las elecciones 2015?

Habiendo dicho esto: ¡Comencemos!



Sistemas requeridos


El sistema a desarrollar en este reto se compone de tres grandes aplicativos:
  1. Sistema de corte de imágenes de las actas: Este sistema recibirá las imágenes de las actas escaneadas y deberá cortar las casillas correspondientes a los conteos ingresados por las juntas. El sistema codificará cada imagen de tal manera que se pueda identificar a que mesa y acta corresponden. Este sistema puede ser offline ya que solo es necesario correrlo una vez.
  2. Sistema de validación de conteos en línea: Este sistema se encargará de presentar a los usuarios varias imágenes al azar que el usuario deberá ingresar. El sistema se deberá de encargar de guardar las digitaciones y las imágenes deberán ser mostradas al azar de tal manera que el usuario del sistema no tenga forma de saber a que acta o partido pertenece. El sistema deberá de enmascarar el nombre imagen para evitar que el usuario pueda conocer por el nombre de archivo a que acta pertenece. Se considerará que una digitación es válida en tanto coincidan 2 o más digitaciones iguales para una casilla particular.
  3. Sistema de conteo final y despliegue de resultados: Este es el web front-end para la base de datos que genera #2. Este sistema deberá tomar los datos validados y calcular los siguientes resultados:
    • A nivel municipal que partido gana la alcaldía y consejos municipales.
    • A nivel departamental que partidos han obtenido la mayor cantidad de votos para escaños legislativos y diputados del PARLACEN.

Información de ayuda

Sistema de Corte de Actas

Las actas se guardan actualmente en la siguiente carpeta en línea de página del TSE (http://elecciones2015.tse.gob.sv/actas/actas/), el primer objetivo es descargar todas las actas que se encuentren disponibles para comenzar con el corte. Lastimosamente las actas escaneadas no están completas por lo que habrá que esperar que el formato de las mismas no cambie demasiado.

La nomenclatura utilizada actualmente es la siguiente:

http://elecciones2015.tse.gob.sv/actas/actas/<dia de recepción>/<departamento>/<municipio>/<centro de votacion>/jrv_<# de JRV>_<ACTA>.png

Por ejemplo:

http://elecciones2015.tse.gob.sv/actas/actas/3/ahuachapan/ahuachapan/centro_escolar__isid/jrv_09194_A.png

Resultado esperado

Lastimosamente a diferencia del año pasado las actas no están completamente codificadas por lo que el sistema de corte deberá también re-codificar y re-nombrar las actas. Esperaríamos que las actas tengan el siguiente formato:

<cdpto>/<cmun>/<cvot>/<#jrv>_<tipo_acta>.png

Los tipos de actas son los siguientes:
  • A: Acta de cierre y escrutinio.
  • A[1-8]: conteo de votos por papeleta.
  • B-F: Detalle de votos por candidato y partido, esto varía en función de cuantos partidos estuvieron participando por departamento.
Los formatos de corte de salida para cada uno de los anteriores serán de la siguiente manera:

<#jrv>_consolidado_<partido>.png

Para el detalle de conteo de votos por papeleta:

<#jrv>_votos_<#papeleta>_<partido>.png

Y para el detalle de conteo de votos por candidato:

<#jrv>_individual_<#diputado>_<partido>.png

Sistema de validación de conteos

Este sistema se encarga de validar las digitaciones. Al usuario se le muestran distintos cortes a digitar y proporciona un input para ingresar el valor. Pueden revisar la implementación en CakePHP en la siguiente dirección https://github.com/mxgxw/crowdvalidation/ 

El codex

Actualmente solo conocemos las actas por el nombre, será necesario codificar todas las digitaciones de tal manera que se pueda colocar un ID numérico unico a cada casilla en el acta. La ventaja es que el número de JRV es único así que no es necesario un código largo, cada digitación estará compuesta de los siguientes campos

Almacenamiento de digitaciones.

Las digitaciones deberán ser almacenadas de la siguiente manera en la base de datos:

<código jrv>,<tipo_conteo>,<posicion>,<partido>,<valor digitado>,<fecha/hora digitación>,<dirección ip>

La llave principal es una llave compuesta por (código_jrv,tipo_conteo,posicion,partido).

Donde tipo conteo puede ser:

0-Acta Cierre
1-Conteo de voto
2-Votos individuales

Cuando el tipo es 0 "acta de cierre", la posición siempre será 0.

Para el tipo 1, posición corresponde al # de papeleta.
Para el tipo 2, posición corresponde al diputado individual. 

Verificación de digitaciones

El sistema deberá mostrar las imágenes cortadas enmascarando el nombre de archivo real (se recomienda generar una tabla de IDs aleatorios únicos para ocultar el ID real en la BD). Se recomienda que se muestren varias imágenes a la vez, estas deberán ser seleccionadas al azar y se guardará la digitación correspondiente.

Se considerará una digitación válida a todas las digitaciones sque cumplan con la siguiente condición:

SELECT
  jrv,
  tipo_conteo,
  posicion,
  partido,
  valor_digitado,
  count(*)
FROM digitaciones
GROUP BY
  jrv,
  tipo_conteo,
  posicion,
  partido,
  valor_digitado
HAVING count(*) > 2

En caso de que hayan dos digitaciones con > 2 se tomará la que tenga más digitaciones coincidentes, por ejemplo si 234 tiene 3 digitaciones coincidentes y 235 tiene 5 digitaciones coincidentes se elegirá 235 como el valor REAL.

Sistema de Despliegue de Resultados


... pendiente de detallar).

Herramientas de Coordinación:


     

    El premio:

    1.  Ninguno. Simplemente irse a casa pensando que se hizo algo diferente y divertido el día de hoy.

    Excepción de responsabilidades:

    • Yo, Mario Enrique Gómez Argueta de Nacionalidad Salvadoreña, lanzo este reto con fines única y exclusivamente "educativos" los datos proporcionados mediante este blog son datos públicos, disponibles mediante acceso libre a través de la página del Tribunal Supremo Electoral y amparados bajo la ley de Acceso a la Información Pública y el Código Electoral vigente de El Salvador. Proporciono los datos obtenidos de dicha institución tal y como fueron publicados a través de su página web por medio de un "backup" estático de la página web a la hora que se especifica. No puedo hacerme responsable de que los datos estén completos o que cuenten con toda la información necesaria, sin embargo se proporcionan los métodos para crear un "backup similar" y verificar la validez de la información.
    • Declaro que no estoy afiliado a NINGÚN PARTIDO POLÍTICO y los resultados obtenidos de este ejercicio NO PRETENDEN ni DEBERÁN SER UTILIZADOS para poner en duda la validez de los resultados oficiales. El único ente colegiado con atribuciones legales para validar resultados oficiales es el Tribunal Supremo Electoral por lo que cualquier resultado obtenido de este ejercicio NO TIENE NI TENDRÁ NINGUNA VALIDEZ LEGAL y deberá ser tratado como información poco confiable y secundaria, para participar de este reto usted se compromete a NO UTILIZAR LOS RESULTADOS PARA FINES POLÍTICOS.

    1 comentario:

    Ernesto Castillo dijo...

    Incluso seria bueno incluir el calculo de cuanto dinero recibirá cada partido al final, pues, supongo se mantiene, que se la paga a cada partido, por voto obtenido, en mi saber y entender. Gracias.