Processador profissional de publicações do Diário Oficial da União (DOU) com resumo inteligente via LLM
Solução enterprise-grade para automação de download, extração, processamento e resumo de publicações do DOU utilizando modelos de linguagem locais (LLaMA via Ollama). Arquitetura modular, type-safe, e preparada para produção.
- Automação completa: Download, extração e processamento de arquivos DOU
- Resumo inteligente: Geração de resumos estruturados via LLaMA 3
- Saída estruturada: JSON formatado com metadados completos
- Docker-ready: Container otimizado com multi-stage build
- Type-safe: Type hints completos validados com mypy
- Testado: >80% cobertura de testes com pytest
- Documentado: Docstrings Google-style em todas as funções
- CI/CD: Pipeline automatizado com GitHub Actions
- Seguro: Análise com bandit e safety
- Clean Code: Black, isort, flake8, e pre-commit hooks
- Python 3.10 ou superior
- Ollama rodando localmente
- Credenciais de acesso ao portal Inlabs
pip install dou-llm-processor# Clone o repositório
git clone https://github.com/SouzaEu/DOU-LLM-processor.git
cd DOU-LLM-processor
# Crie ambiente virtual
python -m venv .venv
source .venv/bin/activate # Linux/macOS
# .venv\Scripts\activate # Windows
# Instale com dependências de desenvolvimento
make install-dev
# ou
pip install -e ".[dev]"
# Instale pre-commit hooks
pre-commit installCrie um arquivo .env na raiz do projeto:
INLABS_EMAIL=seu@email.com
INLABS_SENHA=sua_senha_segura# Em um terminal separado
ollama serve
# Baixe o modelo LLaMA 3 (apenas primeira vez)
ollama pull llama3# Via linha de comando instalado
dou-processor
# Via módulo Python
python -m dou_processor.cli
# Via Make
make run- Matérias processadas:
output/materias/*.json - Logs:
logs/app.log - XMLs temporários:
temp/(limpo automaticamente)
DOU-LLM-processor/
├── src/dou_processor/ # Código fonte principal
│ ├── core/ # Funcionalidades core
│ │ ├── config.py # Gestão de configuração (dataclasses)
│ │ ├── downloader.py # Download de arquivos DOU
│ │ ├── extractor.py # Extração de ZIPs
│ │ ├── processor.py # Orquestração do pipeline
│ │ ├── summarizer.py # Resumo via LLM
│ │ └── logging.py # Configuração de logs
│ ├── parsers/ # Parsers XML
│ │ └── dou_parser.py # Parser DOU
│ ├── database/ # Integração banco de dados
│ │ └── oracle_client.py # Cliente Oracle
│ ├── utils/ # Utilitários
│ │ ├── text_utils.py # Manipulação de texto
│ │ └── file_utils.py # Manipulação de arquivos
│ ├── exceptions.py # Exceções customizadas
│ ├── cli.py # Interface CLI
│ └── __version__.py # Informações de versão
├── tests/ # Testes (unit + integration)
│ ├── unit/ # Testes unitários
│ ├── integration/ # Testes de integração
│ └── conftest.py # Fixtures pytest
├── .github/workflows/ # CI/CD pipelines
│ ├── ci.yml # Pipeline principal
│ └── release.yml # Release automation
├── pyproject.toml # Configuração do projeto
├── Makefile # Comandos de automação
├── Dockerfile # Container otimizado
├── docker-compose.yml # Orquestração multi-container
└── README.md # Este arquivo
┌─────────────┐ ┌──────────────┐ ┌────────────┐
│ Inlabs │────▶│ Downloader │────▶│ Extractor │
│ Portal │ │ (ZIP files) │ │ (XML files)│
└─────────────┘ └──────────────┘ └────────────┘
│
▼
┌──────────────────────────────────┐
│ DOUParser │
│ (Extrai artigos do XML) │
└──────────────────────────────────┘
│
▼
┌──────────────────────────────────┐
│ LLMSummarizer │
│ (Gera resumos via LLaMA) │
└──────────────────────────────────┘
│
▼
┌──────────────────────────────────┐
│ JSON Output │
│ (Matérias + Resumos) │
└──────────────────────────────────┘
- Dependency Injection: Configurações via dataclasses injetadas
- Single Responsibility: Cada módulo tem uma responsabilidade clara
- Type Safety: Type hints completos em todo o código
- Error Handling: Exceções customizadas hierárquicas
- Configuração: Separação de configuração e código
- Testabilidade: Interfaces desacopladas e mockáveis
make help # Lista todos os comandos disponíveis
make install # Instala o pacote
make install-dev # Instala com dependências de dev
make test # Roda testes com cobertura
make lint # Roda todos os linters
make format # Formata código (black + isort)
make security # Análise de segurança
make pre-commit # Roda pre-commit hooks
make build # Gera distribuição
make clean # Limpa artifacts
make check-all # Roda lint + tests + security- Formatação: Black (line-length=100)
- Imports: isort (profile=black)
- Linting: flake8 + flake8-docstrings + flake8-bugbear
- Type Checking: mypy (strict mode)
- Security: bandit + safety
- Docstrings: Google style
- Coverage: Mínimo 80%
Os hooks rodam automaticamente antes de cada commit:
# Instalar hooks
pre-commit install
# Rodar manualmente em todos os arquivos
pre-commit run --all-files# Todos os testes com cobertura
pytest
# Apenas testes rápidos (sem slow)
pytest -m "not slow"
# Testes específicos
pytest tests/unit/test_parser.py
# Com saída verbosa
pytest -vv
# Gerar relatório HTML de cobertura
make coverage-html- Unit Tests:
tests/unit/- Testes isolados de funções/classes - Integration Tests:
tests/integration/- Testes de integração entre componentes - Fixtures:
tests/conftest.py- Fixtures compartilhadas
- Total: >80%
- Core modules: >90%
- Utils: >85%
- CLI: >75%
# Build da imagem
docker-compose build
# Executar
docker-compose up
# Executar em background
docker-compose up -d
# Parar containers
docker-compose down
# Limpar tudo (incluindo volumes)
docker-compose down -v- Multi-stage build (imagem otimizada)
- Non-root user (segurança)
- Health checks configurados
- Logs persistentes
- Network isolada
- Volumes para dados
Contribuições são bem-vindas! Por favor:
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add: amazing feature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
- Siga os padrões de código (black, isort, flake8)
- Adicione testes para novas features
- Atualize a documentação
- Mantenha cobertura >80%
- Use commits semânticos
Veja CONTRIBUTING.md para detalhes.
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
- Ollama - Framework para LLMs locais
- LLaMA - Modelo de linguagem da Meta
- Inlabs - Portal de acesso ao DOU
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Desenvolvido por Vini