Skip to the content.

Funcionalidades do urnaCIPA

Requisitos

Explicação do conceito

Problema a ser solucionado

Desenvolver um sistema que permita eleitores votar em candidatos na Eleição da CIPA de uma empresa qualquer e que forneça de forma automática ao término da votação ge emitir um relatório totalizador da contagem de votos de forma decrescente.

Abordagem escolhida

Pontos a serem alcançados

Pontos a serem respeitados

Tecnologias utilizadas

Estrutura dos Dados dos Arquivos Texto

Arquivo Texto de Eleitores

eleitores.csv

Nome,Codigo,CPF,Cargo,Departamento
ACACIA ALVES,666666,123.051.218/01,Auxiliar Técnico,Empresa de Teste Matriz
ACALANDRA CORREIA,777777,939.211.748/12,Caixa,Empresa de Teste Matriz
ADRIANA ALVES,888888,111.198.108/22,Gerente,Empresa de Teste Filial

Formato UTF-8 sem BOM

Arquivo Texto de Candidatos

candidatos.csv

Numero,Matricula,Nome,Funcao,Unidade
01,111111,José Pedro,Porteiro,Empresa de Teste Matriz
02,222222,Gisele Souza,Auxiliar Administrativo,Empresa de Teste Filial
03,333333,Patrícia Maria,Gerente,Empresa de Teste Matriz

Formato UTF-8 sem BOM

Arquivo Texto de Configuração

configuracao.ini

[Urna]
Banco de Dados da Urna        = cipa2020.db3
Senha para Iniciar Eleicao    = 9898
Senha para Terminar Eleicao   = 2121
Nome da Empresa               = Empresa de Teste
Ano da CIPA                   = 2020

Formato ANSI

Arquivos internos de apoio

eleitores.sql

drop table eleitores;
.separator ","
.import eleitores.csv eleitores

Formato UTF-8 sem BOM

candidatos.sql

drop table candidatos;
.separator ","
.import candidatos.csv candidatos

Formato UTF-8 sem BOM

votacao.sql

drop table votacao;
CREATE TABLE votacao (
    id     INTEGER  PRIMARY KEY
                    UNIQUE
                    NOT NULL,
    numero CHAR (2) NOT NULL
);

Formato UTF-8 sem BOM

votaram.sql

drop table votaram;
CREATE TABLE votaram (
    id     INTEGER  PRIMARY KEY
                    UNIQUE
                    NOT NULL,
    matricula TEXT NOT NULL
                    UNIQUE
);

Formato UTF-8 sem BOM

criaBanco.bat

@echo off

if "%1"=="" goto ops

sqlite3.exe %1 < candidatos.sql
sqlite3.exe %1 < eleitores.sql
sqlite3.exe %1 < votacao.sql
sqlite3.exe %1 < votaram.sql

goto fim

:ops

echo digite criaBanco.bat nomeBanco.db3

:fim

echo arquivos importados...

Formato UTF-8 sem BOM

Para criar o banco de dados na pasta urnaCIPA abra um prompt de comando do MS-DOS ou um prompt do powershell e digite criaBanco.bat cipa2020.db3

tela1.kxf tela2.kxf tela3.kxf

Esses arquivos são os arquivos utilizados pelo KODA para carregar cada tela para edição visual da interface gráfica.

Estrutura do Banco de Dados

cipa2020.db3

tabela candidatos

Coluna Tipo Explicação Não faz parte do banco de dados
Numero TEXT número do candidato que o eleitor irá digitar para votar com 2 dígitos
Matricula TEXT número de matrícula do candidato no departamento pessoal
Nome TEXT nome completo do candidato
Funcao TEXT Cargo ou função do candidato na empresa
Unidade TEXT Setor ou unidade da empresa

tabela eleitores

Coluna Tipo Explicação Não faz parte do banco de dados
Nome TEXT nome completo do eleitor
Codigo TEXT número de matrícula do eleitor no departamento pessoal
CPF TEXT CPF do eleitor pode ser no formato 999.999.999/99
Cargo TEXT Cargo ou função do eleitor na empresa
Departamento TEXT Departamento ou unidade do eleitor

tabela eleitores

Coluna Tipo Explicação Não faz parte do banco de dados
id INTEGER autoincremento da tabela
  PRIMARY KEY chave primária
  UNIQUE único
  NOT NULL não nulo
numero CHAR(2) número do candidato votado com 2 dígitos
  NOT NULL não nulo

tabela votaram

Coluna Tipo Explicação Não faz parte do banco de dados
id INTEGER autoincremento
  PRIMARY KEY chave primária
  UNIQUE único
  NOT NULL não nulo
matricula TEXT número de matrícula no departamento pessoal do eleitor que já votos
  NOT NULL não nulo
  UNIQUE único

Nota de esclarecimento sobre problema na modelagem do banco de dados

A modelagem do banco de dados utilizando esse formato, facilitou a programação da lógica da votação e contagem de votos, porém gera um problema de segurança da anonimização do votos uma vez que é possível com cruzamento de dados internos no banco de dados se exportados, verificar qual o eleitor votou em cada candidato.

Uma solução para essa questão é a mudança da lógica da inserção do votos, ao invés de ter o voto depositado individualmente na tabela votacao, deveria haver na tabela candidatos, um campo votos, onde a cada voto seria feita a pesquisa SQL pelo número do candidato, lido o valor do campo votos, somado 1 voto e atualizado o campo da tabela candidatos. Com isso não seria necessário ter a tabela votacao e ainda poderia ser mantida para critério de log e auditoria a tabela votaram.

Fluxo de Votação

graph TD
    A[Executa urnaCIPA] --> B[Digitou código válido de início ou término de votação?]
    B --> |sim| C[Código de terminar votação?]
    B --> |não| B
    B --> |sim| D[Código de iniciar votação?]

    C -->|sim| F[Excluir eleitores do banco de dados]
    C -->|não| B
 
    D -->|sim| E[Tela pesquisa de eleitor]
    D -->|não| B
 
    E --> J[Mostrar contagens de votos, eleitores e candidatos]

    F --> G[Fazer contagem de dados]
    G --> H[Abrir navegador e exibir Relatório]
    H --> I[Fechar urnaCIPA]

    J --> L[Consultar CPF eleitor]
    L -->|erro| L
    L --> M[Mostrar dados eleitor]
    M --> N[Liberar votação]
    N --> O[Tela pesquisar candidato]

    O --> P[Consultar número candidato]    
    P -->|erro| P
    P -->|ok| Q[Mostrar dados candidato]

    Q --> R[Votar no candidato]   
    R --> S[Excluir eleitor da tabela eleitores]
    S --> T[Inserir matrícula do eleitor na tabela votaram]
    T --> U[Inserir número do candidato na tabela votacao]
    U --> E

Orientações Finais

Verifique sempre os comentários no código-fonte para esclarecer dúvidas, o desenho da interface gráfica é feito no KODA depois copia-se e cola o código gerado pelo KODA dentro do arquivo do script AutoIt.