Data Validate é um validador e processador de planilhas robusto e multilíngue, desenvolvido especificamente para automatizar a checagem de integridade e estrutura de arquivos de dados da plataforma AdaptaBrasil. É especialmente útil para projetos que exigem padronização e validação rigorosa de dados tabulares, como pesquisas científicas, bancos de dados ambientais e sistemas de indicadores.
- Características
- Arquitetura
- Instalação
- Uso
- Validações Implementadas
- Estrutura do Projeto
- Testes
- Desenvolvimento
- Documentação
- Contribuição
- Licença
O Data Validate implementa a especificação detalhada no protocolo de validação versão 1.13, que define regras claras para a estrutura e conteúdo das planilhas utilizadas na plataforma AdaptaBrasil.
- Validação Estrutural: Verifica estrutura de planilhas, nomes de colunas e organização
- Validação de Conteúdo: Aplica regras de negócio específicas para cada tipo de planilha
- Verificação Ortográfica: Sistema multilíngue de correção ortográfica com dicionários personalizados
- Validação Hierárquica: Verifica relações entre indicadores e estruturas em árvore
- Relatórios Detalhados: Gera relatórios HTML, PDF e logs detalhados de validação
- Suporte Multilíngue: Suporte a internacionalização em português e inglês
- Sistema de Logs: Logging detalhado para auditoria e debugging
- Python 3.12+: Linguagem principal
- Pandas: Manipulação e análise de dados
- PyEnchant: Verificação ortográfica
- Calamine: Leitura de arquivos Excel
- Babel: Internacionalização
- PDFKit: Geração de relatórios PDF
- Poetry: Gerenciamento de dependências
O projeto segue uma arquitetura modular baseada em padrões de design limpos:
📁 data_validate/
├── 🎛️ controllers/ # Orquestração e controle de fluxo
├── 📊 models/ # Modelos de dados para planilhas
├── ✅ validators/ # Lógica de validação
├── 🛠️ helpers/ # Utilitários e funções auxiliares
├── ⚙️ config/ # Configurações globais
├── 🔧 middleware/ # Camada de inicialização
└── 📄 static/ # Recursos estáticos (templates, dicionários)
- Inicialização: Bootstrap configura ambiente e dependências
- Carregamento: Leitura e pré-processamento de planilhas
- Validação: Execução sequencial de validadores especializados
- Agregação: Coleta e organização de erros e avisos
- Relatório: Geração de relatórios detalhados de saída
- Python 3.12 ou superior
- Poetry para gerenciamento de dependências
- Wkhtmltopdf (para geração de PDFs)
Certifique-se de que python-dev e wkhtmltopdf estejam instalados,
# Instalando as dependências
sudo apt install python3-dev wkhtmltopdfPara instalar o wkhtmltopdf, baixe o instalador do site oficial: https://wkhtmltopdf.org/downloads.html
Ou usando o chocolatey:
choco install -y wkhtmltopdf# 1.0 Crie e ative um ambiente virtual (opcional, mas recomendado)
python -m venv .venv
# 1.0 Ative o ambiente virtual
source .venv/bin/activate # No Linux/MacOS
.venv\Scripts\activate # No Windowspip install canoa-data-validatecanoa-data-validate --input_folder data/input --output_folder data/output --locale pt_BR --debug# 1.1 Clone o repositório
git clone https://github.com/AdaptaBrasil/data_validate.git
cd data_validate
# 1.2 Crie e ative um ambiente virtual (opcional, mas recomendado)
python -m venv .venv
# 1.3 Ative o ambiente virtual
source .venv/bin/activate # No Linux/MacOS
.venv\Scripts\activate # No Windows
# 2. Instale o Poetry (se necessário)
pip install poetry
# 3. Instale as dependências
poetry install
# 4. Ative o ambiente virtual
eval $(poetry env activate)python -m data_validate.main --input_folder data/input --output_folder data/output --locale pt_BR --debug
python -m data_validate.main --i data/input --o data/output --l pt_BR --d
### Script de Pipeline
```bash
# Execução completa do pipeline
bash scripts/run_main_pipeline.sh
# Com debug ativo e logs detalhados
python -m data_validate.main --input_folder data/input --debug# Sem logs, sem tempo, sem versão no relatório
python -m data_validate.main
--input_folder data/input
--output_folder data/output
--no-time
--no-version# Para execuções rápidas, pulando spell check e avisos de comprimento de títulos
python -m data_validate.main
--input_folder data/input
--no-spellchecker
--no-warning-titles-length| Parâmetro | Abreviação | Tipo | Descrição | Padrão | Obrigatório |
|---|---|---|---|---|---|
--input_folder |
--i |
str | Caminho para a pasta de entrada com planilhas | - | ✅ |
--output_folder |
--o |
str | Caminho para a pasta de saída dos relatórios | output_data/ |
❌ |
--locale |
-l |
str | Idioma da interface (pt_BR ou en_US) | pt_BR |
❌ |
| Parâmetro | Abreviação | Tipo | Descrição | Padrão |
|---|---|---|---|---|
--debug |
--d |
flag | Ativa modo debug com logs detalhados | False |
--no-time |
flag | Oculta informações de tempo de execução | False |
|
--no-version |
flag | Oculta versão do script no relatório final | False |
|
--no-spellchecker |
flag | Desativa verificação ortográfica | False |
|
--no-warning-titles-length |
flag | Desativa avisos de comprimento de títulos | False |
| Parâmetro | Tipo | Descrição | Padrão |
|---|---|---|---|
--sector |
str | Nome do setor estratégico para o relatório | None |
--protocol |
str | Nome do protocolo para o relatório | None |
--user |
str | Nome do usuário para o relatório | None |
--file |
str | Nome específico do arquivo a ser analisado | None |
Coloque suas planilhas Excel (.xlsx) na pasta de entrada. O sistema processa:
- sp_description.xlsx: Descrições e metadados dos indicadores
- sp_value.xlsx: Valores dos indicadores
- sp_scenario.xlsx: Cenários de análise
- sp_temporal_reference.xlsx: Referências temporais
- sp_composition.xlsx: Composições hierárquicas
- sp_proportionality.xlsx: Proporções e relacionamentos
- sp_legend.xlsx: Legendas e categorias
- sp_dictionary.xlsx: Dicionários e vocabulários
O sistema gera:
- Relatórios HTML: Visualização interativa dos resultados
- Relatórios PDF: Geração de relatórios em formato PDF
- Logs detalhados: Registros de execução e erros
- ✅ Verificação de existência de arquivos obrigatórios
- ✅ Validação de nomes e ordem de colunas
- ✅ Checagem de tipos de dados esperados
- ✅ Códigos sequenciais: Verificação de sequência numérica (1, 2, 3...)
- ✅ Valores únicos: Detecção de duplicatas em campos chave
- ✅ Relacionamentos: Validação de integridade referencial entre planilhas
- ✅ Níveis hierárquicos: Verificação de estruturas em árvore
- ✅ Cenários e temporalidade: Validação de combinações válidas
- ✅ Capitalização: Padronização de texto mantendo acrônimos
- ✅ Pontuação: Verificação de regras de pontuação específicas
- ✅ Caracteres especiais: Detecção de CR/LF e caracteres inválidos
- ✅ Comprimento de texto: Validação de limites de caracteres
- ✅ HTML: Detecção de tags HTML não permitidas
- ✅ Múltiplos idiomas: Suporte a pt_BR e en_US
- ✅ Dicionários personalizados: Termos técnicos e específicos do domínio
- ✅ Sugestões de correção: Recomendações automáticas
- ✅ Valores numéricos: Verificação de tipos e intervalos
- ✅ Casas decimais: Validação de precisão numérica
- ✅ Dados obrigatórios: Verificação de campos não vazios
- ✅ Combinações válidas: Validação de relacionamentos entre dados
data_validate/
├── 📊 assets/ # Badges e recursos visuais
├── 📁 data/ # Dados de entrada e saída
│ ├── input/ # Planilhas para validação
│ └── output/ # Relatórios e logs gerados
├── 🐍 data_validate/ # Código-fonte principal
│ ├── config/ # Configurações globais
│ ├── controllers/ # Orquestração e controle
│ │ ├── context/ # Contextos de dados
│ │ └── report/ # Geração de relatórios
│ ├── helpers/ # Utilitários e funções auxiliares
│ │ ├── base/ # Classes base
│ │ ├── common/ # Funções comuns
│ │ └── tools/ # Ferramentas especializadas
│ ├── middleware/ # Inicialização e bootstrap
│ ├── models/ # Modelos de dados das planilhas
│ ├── static/ # Recursos estáticos
│ │ ├── dictionaries/ # Dicionários ortográficos
│ │ ├── locales/ # Arquivos de tradução
│ │ └── report/ # Templates de relatórios
│ └── validators/ # Validadores especializados
│ ├── hierarchy/ # Validação hierárquica
│ ├── spell/ # Verificação ortográfica
│ ├── spreadsheets/ # Validação de planilhas
│ └── structure/ # Validação estrutural
├── 📝 docs/ # Documentação gerada
├── 🧪 tests/ # Testes unitários
├── 📋 scripts/ # Scripts de automação
└── ⚙️ Configuração # Arquivos de configuração
├── pyproject.toml
├── pytest.ini
├── Makefile
└── .coveragerc
O projeto utiliza pytest para testes unitários com cobertura completa.
# Execultar tudo
make all-cov
# Executar todos os testes
make test
# Testes com cobertura
make test-cov
# Testes rápidos (para em erro)
make test-fast
# Gerar relatório HTML de cobertura
make html-report
# Ver todos os comandos disponíveis
make help- Cobertura atual: 8.10% (em desenvolvimento)
- Threshold mínimo: 4%
- Módulos com 100% de cobertura: Formatação de texto e números
# Testar módulos específicos
python -m pytest tests/unit/helpers/common/generation/ -v
python -m pytest tests/unit/helpers/common/formatting/ -v# Instalar dependências de desenvolvimento
poetry install --with dev
# Configurar pre-commit hooks
pre-commit install
# Formatação de código black
make black
# Formatação de código ruff
ruff check . --fix| Comando | Descrição |
|---|---|
make all-cov |
Executa testes com cobertura completa |
make test |
Executa todos os testes |
make test-cov |
Testes com relatório de cobertura |
make test-fast |
Testes rápidos (para no primeiro erro) |
make coverage |
Gera apenas relatório de cobertura |
make html-report |
Relatório HTML de cobertura |
make clean |
Remove arquivos temporários |
make black |
Formata código com Black |
make make-badge |
Gera badges de cobertura e testes |
make help |
Mostra todos os comandos |
tests/
└── unit/
└── helpers/
└── common/
├── formatting/ # Testes de formatação
├── generation/ # Testes de geração
├── processing/ # Testes de processamento
└── validation/ # Testes de validação
# Gerar documentação com pdoc
pdoc ./data_validate/ -o ./docs --logo "https://avatars.githubusercontent.com/u/141270342?s=400&v=4"- HOW_IT_WORKS.md: Arquitetura detalhada do sistema
- TESTING.md: Guia completo de testes e cobertura
- CODE_OF_CONDUCT.md: Diretrizes de desenvolvimento
- CHANGELOG.md: Histórico de versões
- pandas (>=2.2.3): Manipulação de dados
- chardet (>=5.2.0): Detecção de encoding
- calamine (>=0.5.3): Leitura de arquivos Excel
- pyenchant (>=3.2.2): Verificação ortográfica
- pdfkit (>=1.0.0): Geração de PDFs
- babel (>=2.17.0): Internacionalização
- pytest (^8.4.1): Framework de testes
- coverage (^7.10.6): Cobertura de código
- ruff (^0.12.11): Linting rápido
- black (^25.1.0): Formatação de código
- pre-commit (^4.3.0): Hooks de pré-commit
# Validação mínima (apenas pasta de entrada é obrigatória)
python -m data_validate.main --input_folder data/input
# Validação com pasta específica e debug
python -m data_validate.main \
--input_folder /caminho/para/planilhas \
--output_folder /caminho/para/relatorios \
--debug# Interface em português (padrão)
python -m data_validate.main --input_folder data/input --locale pt_BR
# Interface em inglês
python -m data_validate.main --input_folder data/input --locale en_US# Execução completa com todos os argumentos
python -m data_validate.main \
--input_folder data/input \
--output_folder data/output \
--locale pt_BR \
--debug \
--sector "Biodiversidade" \
--protocol "Protocolo v2.1" \
--user "Pesquisador"# Execução rápida sem verificação ortográfica e avisos de comprimento
python -m data_validate.main \
--input_folder data/input \
--no-spellchecker \
--no-warning-titles-length \
--no-time \
--no-version# Comando mais conciso usando abreviações
python -m data_validate.main --i data/input --o data/output --l pt_BR --d# Executar pipeline completo com logs
bash scripts/run_main_pipeline.sh| Planilha | Descrição | Validações Principais |
|---|---|---|
| sp_description | Descrições de indicadores | Códigos sequenciais, níveis hierárquicos, formatação |
| sp_value | Valores dos indicadores | Integridade referencial, tipos numéricos, casas decimais |
| sp_scenario | Cenários de análise | Valores únicos, pontuação, relacionamentos |
| sp_temporal_reference | Referências temporais | Sequência temporal, símbolos únicos |
| sp_composition | Composições hierárquicas | Estrutura em árvore, relacionamentos pai-filho |
| sp_proportionality | Proporções | Validação matemática, consistência |
| sp_legend | Legendas e categorias | Consistência categórica, valores válidos |
| sp_dictionary | Dicionários | Integridade de vocabulário |
- Processamento eficiente: Uso otimizado de pandas para grandes datasets
- Validação paralela: Execução simultânea de validações independentes
- Cache inteligente: Reutilização de dados carregados
- Logs estruturados: Sistema de logging otimizado para performance
- Cobertura de Testes: Gerada automaticamente com genbadge
- Status dos Testes: Atualizada a cada execução
- Versão: Sincronizada com pyproject.toml
- Cobertura de código mínima: 4%
- Testes automatizados com pytest
- Linting com ruff e flake8
- Formatação automática com black
- Fork o repositório
- Clone seu fork localmente
- Crie uma branch para sua feature (
git checkout -b feature/nova-funcionalidade) - Implemente suas mudanças com testes
- Execute testes (
make test-cov) - Commit seguindo as diretrizes
- Push para sua branch (
git push origin feature/nova-funcionalidade) - Abra um Pull Request
- Siga o padrão PEP 8
- Mantenha cobertura de testes >= 4%
- Use type hints
- Documente funções públicas
- Execute
make blackantes do commit
- Validação de metadados FAIR
- Suporte a formatos adicionais (CSV, JSON)
- Interface web básica
- API REST
- Interface gráfica completa
- Validação de schemas customizáveis
- Integração com bases de dados
- Suporte a workflows automatizados
Este projeto está licenciado sob a MIT License - veja o arquivo LICENSE para detalhes.
- Pedro Andrade - Coordenador - MAIL e GitHub
- Mário de Araújo Carvalho - Colaborador e Desenvolvedor - GitHub
- Mauro Assis - Colaborador - GitHub
- Miguel Gastelumendi - Colaborador - GitHub
- Homepage: AdaptaBrasil GitHub
- Documentação: Docs
- Issues: Bug Tracker
- Changelog: Histórico de Versões
pip uninstall canoa-data-validate# Erro: "argument --input_folder is required"
# Solução: Sempre especifique a pasta de entrada
python -m data_validate.main --input_folder data/input# Para execução mais rápida, desative verificações demoradas
python -m data_validate.main \
--input_folder data/input \
--no-spellchecker \
--no-warning-titles-length# Para reduzir saída no console
python -m data_validate.main \
--input_folder data/input \
--no-time \
--no-version# O sistema detecta automaticamente encoding com chardet
# Para arquivos problemáticos, verifique se estão em UTF-8# Instalar dependências completas
poetry install
# Para problemas com pdfkit no Linux
sudo apt-get install wkhtmltopdf
# Para problemas com pyenchant
sudo apt-get install libenchant-2-2Desenvolvido com ❤️ pela equipe AdaptaBrasil para validação rigorosa de dados científicos e ambientais.