Skip to content

Sistema que coleta, analisa e envia alertas automáticos sobre mudanças regulatórias usando NLP.

License

Notifications You must be signed in to change notification settings

SouzaEu/DOU-LLM-processor

Repository files navigation

DOU LLM Processor

CI/CD codecov Python 3.10+ Code style: black Checked with mypy License: MIT

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.


Features

  • 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

Tabela de Conteúdos


Instalação

Requisitos

  • Python 3.10 ou superior
  • Ollama rodando localmente
  • Credenciais de acesso ao portal Inlabs

Instalação via pip (recomendado)

pip install dou-llm-processor

Instalação para desenvolvimento

# 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 install

Uso Rápido

1. Configuração

Crie um arquivo .env na raiz do projeto:

INLABS_EMAIL=seu@email.com
INLABS_SENHA=sua_senha_segura

2. Inicie o Ollama

# Em um terminal separado
ollama serve

# Baixe o modelo LLaMA 3 (apenas primeira vez)
ollama pull llama3

3. Execute o processador

# Via linha de comando instalado
dou-processor

# Via módulo Python
python -m dou_processor.cli

# Via Make
make run

4. Verifique os resultados

  • Matérias processadas: output/materias/*.json
  • Logs: logs/app.log
  • XMLs temporários: temp/ (limpo automaticamente)

Arquitetura

Estrutura do Projeto

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

Fluxo de Dados

┌─────────────┐     ┌──────────────┐     ┌────────────┐
│  Inlabs     │────▶│  Downloader  │────▶│ Extractor  │
│  Portal     │     │  (ZIP files) │     │ (XML files)│
└─────────────┘     └──────────────┘     └────────────┘
                                               │
                                               ▼
                    ┌──────────────────────────────────┐
                    │         DOUParser                │
                    │   (Extrai artigos do XML)        │
                    └──────────────────────────────────┘
                                               │
                                               ▼
                    ┌──────────────────────────────────┐
                    │      LLMSummarizer               │
                    │  (Gera resumos via LLaMA)        │
                    └──────────────────────────────────┘
                                               │
                                               ▼
                    ┌──────────────────────────────────┐
                    │      JSON Output                 │
                    │  (Matérias + Resumos)            │
                    └──────────────────────────────────┘

Princípios de Design

  • 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

Desenvolvimento

Comandos Make

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

Code Quality Standards

  • 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%

Pre-commit Hooks

Os hooks rodam automaticamente antes de cada commit:

# Instalar hooks
pre-commit install

# Rodar manualmente em todos os arquivos
pre-commit run --all-files

Testes

Executar Testes

# 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

Estrutura de Testes

  • 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

Cobertura Atual

  • Total: >80%
  • Core modules: >90%
  • Utils: >85%
  • CLI: >75%

Docker

Build e Execução

# 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

Características do Container

  • Multi-stage build (imagem otimizada)
  • Non-root user (segurança)
  • Health checks configurados
  • Logs persistentes
  • Network isolada
  • Volumes para dados

Contribuição

Contribuições são bem-vindas! Por favor:

  1. Fork o projeto
  2. Crie uma branch para sua feature (git checkout -b feature/AmazingFeature)
  3. Commit suas mudanças (git commit -m 'Add: amazing feature')
  4. Push para a branch (git push origin feature/AmazingFeature)
  5. Abra um Pull Request

Guidelines

  • 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.


Licença

Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.


Agradecimentos

  • Ollama - Framework para LLMs locais
  • LLaMA - Modelo de linguagem da Meta
  • Inlabs - Portal de acesso ao DOU

Suporte


Desenvolvido por Vini

About

Sistema que coleta, analisa e envia alertas automáticos sobre mudanças regulatórias usando NLP.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published