Resultados y reportes

Esta guia describe el bloque vigente de v3.0 para resultados y reportes operativos: dashboard interno de resultados, reportes preelectorales, resultados publicos y auditoria final de resultados. El contenido fue contrastado contra las rutas montadas, StatsDashboard, PreElectionReportsDashboard, ElectionResultsPanel, CandidateCodesPanel, ResultPublicPage, AuditPublicResultsPage, los DAO/EJB que calculan votos y la vista de detalle de eleccion que publica los links.

Ubicacion en el flujo

  • Resultados internos: la administracion abre /stats para cada eleccion desde la lista y desde el menu contextual de la eleccion.
  • Reportes preelectorales: la administracion usa /admin/election/pre-reports mientras la eleccion siga abierta.
  • Resultados publicos: la publicacion externa usa /token/result con Election.resultToken.
  • Auditoria final de resultados: el flujo tokenizado de auditores usa /token/audit/result con Auditor.resultToken.
  • La vista administrativa de detalle de eleccion siempre puede construir y mostrar el link publico de resultados a partir del token, pero eso no implica que el acceso ya este abierto al publico.

Dashboard interno de resultados

  • La pagina interna de resultados se monta en /stats y no queda escondida por estado abierto/cerrado: el acceso administrativo existe tanto desde la lista de elecciones como desde el menu contextual.
  • El dashboard arma tres bloques: grafica de evolucion de votantes, tabla de resultados y tabla de codigos de verificacion.
  • La grafica intenta mostrarse siempre, pero los bloques de resultados y codigos solo se renderizan cuando election.isFinished() da verdadero, es decir, cuando ya paso el fin de N_16_PERIODO_VOTING.
  • Antes de ese momento, la pagina deja visible el mensaje Todavia no ha terminado el plazo de votacion y no muestra tablas finales.

Grafica de evolucion

  • La serie se calcula con getElectionVoteEvolutionData a partir de UserVoter que ya votaron, no a partir de filas Vote. Por eso la grafica representa evolucion de votantes participantes, no cantidad total de votos emitidos.
  • El backend agrupa por fecha dd/MM/yyyy, calcula cantidad diaria de participantes y acumulado total, y envia ambas series al panel.
  • Si no hay votantes con voto registrado, o si el payload no queda consistente, la grafica se oculta y la UI muestra No hay datos en este momento para mostrar.
  • El render usa Google Charts cargando https://www.gstatic.com/charts/loader.js. Si el navegador administrativo no puede llegar a ese recurso externo, la pagina conserva el contenedor pero la grafica no se dibuja.

Tabla interna de resultados

  • La tabla se arma con getElectionCandidates(electionId) y reordena los candidatos en tiempo real por getCandidateVotesAmount(candidateId), de mayor a menor.
  • No consume un snapshot congelado ni un cierre materializado: consulta candidatos y votos vivos al momento de render.
  • Cada fila muestra nombre del candidato y cantidad total de votos recibidos.
  • El pie resume totalVoters como cantidad de votantes que efectivamente votaron y totalVotes como cantidad de filas en Vote.
  • Cuando existen votantes con peso mayor a 1, totalVotes puede ser mayor que totalVoters porque cada voto ponderado genera varias filas Vote.

Codigos de verificacion

  • La tabla de codigos lista una fila por cada voto emitido.
  • Cada fila muestra numero secuencial en pantalla, nombre del candidato y codigo de verificacion del voto.
  • La consulta real sale de VoteDao.getElectionVotesCandidateAndCode y ordena por v.code, no por fecha, candidato ni orden de carga.
  • El panel interno y los resultados publicos reutilizan exactamente este mismo componente, por lo que el orden y el nivel de detalle son identicos en ambos contextos.

Reportes preelectorales

  • La pagina administrativa vive en /admin/election/pre-reports y solo opera sobre elecciones abiertas. Si la eleccion ya fue cerrada, redirige a ErrorElectionClosed.
  • No es un reporte descargable ni un PDF: es una vista HTML operativa con tablas en vivo y acciones laterales.
  • El bloque principal de links publicos cruza para cada flujo la bandera manual, el calendario efectivo, si esta accesible ahora, la regla aplicada y las fechas desde/hasta.
  • Para /token/nomination/tasks no usa un calendario fijo: consolida la ventana dinamica desde la tarea mas temprana hasta la tarea mas tardia configurada en esa eleccion.
  • Las fechas del pre-reporte se muestran ajustadas con diffUTC de la eleccion.

Tablas operativas del pre-reporte

  • Nominaciones aceptadas: muestra nominacion, organizacion, candidato asociado, estado del candidato, link de completitud y boton de recordatorio al candidato si existe candidato asociado.
  • Nominaciones pendientes: muestra nominaciones todavia sin candidato asociado, con el link de aceptacion y recordatorio manual de nominacion.
  • Apoyos de nominacion: muestra soporte, organizacion de apoyo, contacto, link tokenizado de apoyo y recordatorio manual.
  • Progreso por tareas: arma una matriz por nominacion/candidato y por tarea configurada, con estados NOT_STARTED, STARTED, COMPLETED u OMITTED.
  • Matriz de auditoria: arma por comisionado dos columnas por auditor, una para primera verificacion y otra para decision final, incluyendo fecha cuando existe.

Como consultar al candidato ganador

  1. Si esta en la administracion, cierre sesion para recorrer el sitio como visitante.
  2. Entre en Elecciones publicas, seleccione la eleccion y abra su detalle publico.
  3. Consulte el bloque de resultados: las tarjetas de ganadores muestran los candidatos marcados como ganadores en el sistema.

Cerrar sesion es una forma de acceder desde la navegacion inicial, no una condicion de publicacion: tambien puede abrir directamente /public-elections bajo el contexto de la aplicacion, o usar una ventana privada. La pagina de inicio redirige al listado administrativo cuando existe una sesion iniciada.

Para ver las tarjetas de ganadores, el acceso publico de la eleccion debe estar habilitado, el bloque de resultados debe estar disponible (resultLinkAvailable=true y fecha de inicio de N_17_SINGLE_PROVISIONAL_RESULTS_PUBLISHED alcanzada) y debe existir al menos un candidato marcado como ganador. Cerrar sesion no habilita resultados pendientes de publicacion.

Texto y carta de resultados oficiales

La administracion carga el texto por idioma y la carta en Resultados oficiales. Estos datos aparecen en la pagina publica de la eleccion, en el bloque Resultados oficiales de la eleccion, antes del resumen de resultados. Basta con que exista texto o una carta; si falta el idioma elegido, se utiliza otro disponible. Este bloque no comprueba las fechas N20/N22 ni el fin de la votacion, por lo que cargar contenido puede hacerlo visible antes de esas fechas. Es independiente de las tarjetas de candidatos ganadores.

Resultados publicos

  • La ruta publica es /token/result y valida Election.resultToken.
  • El acceso exige dos condiciones operativas: resultLinkAvailable=true y calendario N_17_SINGLE_PROVISIONAL_RESULTS_PUBLISHED con fecha de inicio configurada.
  • Antes de N_17 el sistema no responde 404 si el token existe: deriva a acceso denegado con countdown hacia el inicio de resultados.
  • La compuerta actual no define fecha de cierre para resultados publicos. Una vez superado N_17, el acceso sigue disponible mientras el switch manual no se desactive.
  • La pagina publica reutiliza PublicResultsPanel, que a su vez embebe la misma tabla de resultados y la misma tabla de codigos que usa el dashboard administrativo.
  • Ademas muestra titulo y descripcion de la eleccion en el idioma resuelto desde la locale activa.

Auditoria final de resultados

  • La ruta /token/audit/result valida Auditor.resultToken y requiere auditorLinkAvailable=true.
  • Su ventana de acceso si tiene inicio y fin: depende de N_18_PERIODO_CE_AUDIT y bloquea tanto antes del inicio como despues del cierre.
  • Cuando la eleccion no tiene revisionRequest, la pagina muestra titulo, descripcion, panel de conformidad, tabla de resultados, codigos y bloque adicional de informacion para auditoria.
  • El panel de conformidad solo es util para auditores comisionados que aun no hayan confirmado agreedConformity.
  • Si la eleccion entra en circuito de revision (revisionRequest=true), esta pagina deja oculto el bloque normal de resultados/conformidad y el proceso operativo se desplaza al dashboard de auditoria y luego a /review.

Informacion adicional para auditoria

  • El bloque adicional de auditoria consume ElectionsResultsData y agrupa el padron por voteAmount del votante.
  • Para cada peso muestra habilitados, participantes que votaron, porcentaje de participacion para ese peso y un total derivado de participants * weight.
  • El total general tambien se calcula agregando esos grupos por peso, por lo que sigue siendo un dato vivo consultado al abrir la pagina.
  • La columna visual Votos (1 - max) no renderiza un numero real hoy: el template deja un signo ? fijo. El dato util queda en la ultima columna de rango calculado.

Que no existe hoy como reporte

  • No existe en este bloque una exportacion CSV/XLS/PDF de resultados desde la UI administrativa.
  • Los pre-reportes no son documentos cerrados: son vistas operativas con datos y recordatorios accionables.
  • El archivo docs/auditReport-v2.3.pdf no describe una salida funcional nueva de v3.0; queda solo como documento de auditoria historica de la version 2.3.

Notas operativas

  • La publicacion de resultados al exterior depende del calendario y del switch manual; el dashboard interno de resultados depende solo de que el plazo de votacion ya haya terminado.
  • La vista administrativa de detalle de eleccion puede mostrar el URL de resultados aunque el link publico siga cerrado para terceros.
  • Como resultados y codigos salen de consultas directas, cualquier correccion administrativa sobre candidatos, flags o datos de la eleccion impacta en estas vistas sin esperar una regeneracion aparte.

Bloques relacionados

  • Auditoria previa y final: el circuito de comisionados y revision interna quedo detallado en esta guia.
  • Votacion y links publicos: la apertura de /token/result y el resto de rutas tokenizadas quedaron detalladas en esta guia.
  • Parametros, templates e i18n: la configuracion transversal de mails, personalizacion e idioma quedo documentada en esta guia.

Fuentes contrastadas

ElectionsManagerApp, AdminNavBarPanel, ElectionsListPanel, ViewElectionPanel, ElectionConfigurationDashboard, PreElectionReportsDashboard, PreElectionReportsPanel, StatsDashboard, VotersGraphPanel, ChartLines, ElectionResultsPanel, CandidateCodesPanel, PublicResultsPanel, ResultPublicPage, AuditPublicResultsPage, MoreInformationForAuditPanel, VoteDao, CandidateDao, ElectionsManagerEJBBean, ElectionsVoterEJBBean, Election, ElectionsResultsData, ResultDetailData y ElectionsManagerApp.properties.xml.