Lambda Agregar e Exportar
Lambda acionada por EventBridge Schedule (ex.: a cada 5 minutos): lê os registros da tabela DynamoDB, agrupa por boletim e município, soma os votos por candidato/cargo e gera um arquivo JSON por cidade no S3.
Trigger
- EventBridge (CloudWatch Events) Schedule: regra em intervalo fixo (ex.:
rate(5 minutes)oucron(0/5 * * * ? *)). Não há payload de entrada além do evento de agendamento.
Entrada
- A Lambda não recebe parâmetros de negócio no evento; ela inicia uma varredura/consulta na tabela
boletim_urna_registros(por exemplo, Scan ou Query por índice, conforme modelo de chaves e GSI). Pode usar um cursor ou timestamp da “última agregação” para processamento incremental, ou fazer recálculo completo a cada execução, conforme decisão de implementação.
Responsabilidades
- Ler DynamoDB: obter os itens de
boletim_urna_registrosnecessários (todos ou apenas desde a última execução, se houver controle de cursor). - Agrupar por boletim: para cada
boletim_id, reunir os itens porposicao_atual(1 atéposicao_total) e, se a política for considerar apenas boletins completos, descartar boletins que ainda não tenham todos os N fragmentos. - Remontar e interpretar: para cada boletim completo, recompor a seção de conteúdo (incluindo o espaço em branco na quebra entre QRs, conforme manual TSE) e extrair votos por cargo/partido/candidato e totais (NOMI, LEGC, BRAN, NULO, TOTC, etc.).
- Somar por município: agregar os votos por código de município (e, se aplicável, por cargo e candidato), gerando totais por cidade.
- Gerar JSON por cidade: para cada município com dados, produzir um objeto JSON com os resultados (estrutura definida pelo projeto, ex.: totais por cargo e candidato).
- Escrever no S3: fazer PutObject de cada JSON em
resultados/{codigo_municipio}.jsonno bucket configurado, em escrita atômica (um arquivo completo por cidade por execução), para evitar sobrescrita concorrente.
Saída
- Arquivos no S3:
resultados/{codigo_municipio}.jsonatualizados naquele ciclo de agregação. - Logs: métricas ou logs com quantidade de boletins processados, municípios atualizados e eventuais erros.
Erros e idempotência
- Falha parcial (ex.: um PutObject falha): a Lambda pode registrar o erro e continuar com os demais municípios, ou falhar a execução inteira; em caso de falha, a próxima execução do schedule pode refazer o recálculo (idempotente se a leitura for determinística).
- Idempotência: cada execução lê o estado atual da tabela e recalcula os totais; múltiplas execuções seguidas produzem o mesmo resultado para o mesmo conjunto de dados, evitando inconsistência por concorrência.
- Timeout/memória: para muitos municípios ou grande volume de registros, considerar paginação na leitura do DynamoDB e, se necessário, mais de uma invocação (ex.: processar por partição de município) ou aumento de timeout/memória da Lambda.
Esta Lambda não é acionada por cada mensagem SQS; apenas pelo schedule, mantendo carga e escrita no S3 controladas.