Skip to content

Conversation

@LAMP-LUCAS
Copy link
Owner

Refatoração do AutoSINAPI para Toolkit Modular

Descrição

Esta PR implementa a primeira fase da refatoração do AutoSINAPI, transformando-o em uma biblioteca Python modular e desacoplada, seguindo os princípios SOLID e Clean Code.

Mudanças Principais

  • ✨ Implementa estrutura modular com injeção de dependências
  • 🔄 Adiciona suporte para input direto de arquivos XLSX
  • 🧪 Configura ambiente de testes unitários com pytest
  • 📦 Atualiza empacotamento para distribuição via pip

Estrutura de Diretórios

/AutoSINAPI/
├── autosinapi/             # Código principal da biblioteca
│   ├── core/              # Módulos principais
│   │   ├── database.py    # Operações com banco de dados
│   │   ├── downloader.py  # Download/input de arquivos
│   │   ├── processor.py   # Processamento de planilhas
│   │   └── file_manager.py # Utilitários de arquivo
│   ├── pipeline.py        # Orquestração do ETL
│   ├── config.py          # Gerenciamento de configurações
│   ├── exceptions.py      # Exceções customizadas
│   └── __init__.py        # Interface pública
├── tests/                 # Testes unitários
└── ...

Interface Pública

def run_etl(db_config: dict, sinapi_config: dict, mode: str) -> dict:
    """
    Executa o pipeline ETL do SINAPI.
    
    Args:
        db_config: Configurações do banco de dados
        sinapi_config: Configurações do SINAPI
        mode: Modo de operação ('server' ou 'local')
    
    Returns:
        Dict com status da operação
    """

Testes Implementados

  • ✅ Testes do módulo de configuração
  • ✅ Testes do downloader com mocks
  • ✅ Testes de input direto de arquivo
  • 🚧 Testes do processador (pendente)
  • 🚧 Testes do banco de dados (pendente)

Breaking Changes

  • Removida leitura direta de arquivos de configuração no modo 'server'
  • Alterada assinatura da função principal para run_etl
  • Migração para Python 3.8+ devido a type hints

Checklist

  • Código segue os padrões de estilo do projeto
  • Testes unitários adicionados
  • Documentação atualizada
  • Todas as dependências listadas no setup.py/pyproject.toml
  • Revisão de código necessária

Próximos Passos

  1. Implementar testes restantes
  2. Atualizar README.md com instruções de uso
  3. Preparar release alpha (v0.1.0-alpha.1)

Referências

- Implementa _build_url no downloader
- Implementa funções de limpeza e transformação no processor
- Implementa validações de dados
- Adiciona testes unitários para todos os módulos core
- Melhora cobertura de testes do downloader
- Adiciona testes de integração para pipeline
- Adiciona workflow de testes no GitHub Actions
- Adiciona workflow de release
- Atualiza documentação
* refactor(pipeline): Migra para arquitetura modular

Refatora o pipeline de ETL para utilizar as classes do diretório 'autosinapi/core', eliminando a dependência do 'sinapi_utils.py'.\n\n- Centraliza a lógica de download, processamento e banco de dados nos seus respectivos módulos.\n- O script 'autosinapi_pipeline.py' agora atua como um orquestrador, tornando o fluxo de dados mais claro e coeso.\n- Remove o arquivo 'sinapi_utils.py' para eliminar código legado e duplicado.

* feat(version): Adiciona versionamento dinâmico com setuptools-scm

Implementa o 'setuptools-scm' para automatizar a versão do pacote a partir das tags do Git.\n\n- A versão agora é definida dinamicamente, eliminando a necessidade de atualizações manuais nos arquivos de configuração.\n- Garante consistência entre o código-fonte, as tags do Git e as versões publicadas no PyPI.

* docs(readme): Atualiza documentação e melhora configuração

Revisa completamente o README.md com foco na clareza para o usuário final e reflete a nova arquitetura e funcionalidades.\n\n- Adiciona um arquivo 'CONFIG.example.json' como modelo.\n- Torna o pipeline mais flexível, permitindo que o arquivo de configuração seja passado como argumento.\n- Atualiza o .gitignore para ignorar arquivos de configuração locais e pastas de build.

* docs(readme): Atualiza documentação e melhora configuração

Revisa completamente o README.md com foco na clareza para o usuário final e reflete a nova arquitetura e funcionalidades.\n\n- Adiciona um arquivo 'CONFIG.example.json' como modelo.\n- Torna o pipeline mais flexível, permitindo que o arquivo de configuração seja passado como argumento.\n- Atualiza o .gitignore para ignorar arquivos de configuração locais e pastas de build.
Implementa uma solução completa com Docker e Docker Compose para executar o pipeline de forma isolada e portátil.\n\n- Adiciona Dockerfile para construir a imagem da aplicação.\n- Adiciona docker-compose.yml para orquestrar os serviços da aplicação e do banco de dados.\n- Unifica as configurações do ambiente Docker no arquivo .env.\n- Adapta o pipeline para ler configurações de variáveis de ambiente.\n- Atualiza a documentação com o novo fluxo de trabalho.
* feat(docker): Adiciona suporte para ambiente containerizado

Implementa uma solução completa com Docker e Docker Compose para executar o pipeline de forma isolada e portátil.\n\n- Adiciona Dockerfile para construir a imagem da aplicação.\n- Adiciona docker-compose.yml para orquestrar os serviços da aplicação e do banco de dados.\n- Unifica as configurações do ambiente Docker no arquivo .env.\n- Adapta o pipeline para ler configurações de variáveis de ambiente.\n- Atualiza a documentação com o novo fluxo de trabalho.

* feat: Improve ETL processing for multiple SINAPI XLSX files and catalog data

* refactor(database): reestrutura o módulo de banco de dados para maior robustez e flexibilidade

- Adiciona logging detalhado para operações de banco de dados.\n- Implementa recriação de tabelas para garantir conformidade com o modelo.\n- Adiciona políticas de salvamento de dados (append, upsert) e métodos de truncamento.\n- Aprimora o tratamento de erros em execução de queries.\n- Remove código duplicado.

* docs(data-model): reescreve e detalha o modelo de dados e o processo de ETL

- Documenta o modelo de dados relacional completo, incluindo novas tabelas e views.\n- Descreve o fluxo de execução do ETL em fases (Manutenções, Sincronização, Dados de Referência).\n- Fornece diretrizes para API e consultas.

* refactor(pipeline): reestrutura o pipeline de ETL para seguir o novo modelo de dados e fases

- Adapta o pipeline para processar dados em fases (Manutenções, Sincronização de Status, Dados de Referência).\n- Aprimora a configuração de logging.\n- Implementa a lógica de truncamento e upsert/append para diferentes tipos de dados.

* chore(docker): atualiza o ambiente docker e adiciona ferramentas de gerenciamento

- Atualiza a imagem do PostgreSQL para a versão 15.\n- Adiciona rede Docker para melhor comunicação entre serviços.\n- Inclui o serviço Adminer para gerenciamento do banco de dados.\n- Refatora o Makefile com comandos abrangentes para gerenciamento de serviços.\n- Atualiza o Dockerfile para instalação de dependências e configuração do app.

* fix(processor): corrige leitura do cabeçalho da planilha 'Analítico'

- Altera a função process_composicao_itens para usar header=8 diretamente, conforme DataModel.md.\n- Remove a detecção dinâmica de cabeçalho para esta planilha específica.

* feat(pipeline, processor): Improve ETL for SINAPI data processing and missing composition handling

* chore(config): Add AutoSINAPI.code-workspace to .gitignore

* refactor(processamento-dados): Melhoria ETL SINAPI para dados de custos e robustez do pipeline

Refatora o método `process_catalogo_e_precos` em `autosinapi/core/processor.py` para aprimorar o tratamento de dados de "custos".
- **Feat**: Introduz uma nova etapa de pré-processamento em `tools/autosinapi_pipeline.py` que converte planilhas Excel complexas (especificamente para dados de "custos") em arquivos CSV simplificados usando `tools/pre_processador.py`. Isso otimiza a ingestão de dados para o processador.
- **Fix**: Implementa uma regex mais precisa (`r',(\d+)\)$'`) para extrair o `CODIGO` dos dados de "custos", garantindo a análise correta de valores como ",12345)". Isso resolve problemas com métodos de extração anteriores.
- **Refactor**: Atualiza a classe `Processor` para consumir esses CSVs pré-processados para dados de "custos", simplificando a lógica dentro de `process_catalogo_e_precos`.
- **Chore**: Aprimora os mecanismos de logging em `autosinapi/core/processor.py` e `tools/autosinapi_pipeline.py` para melhor depuração e visibilidade operacional.

Esta alteração melhora a confiabilidade e a manutenibilidade do processo ETL do SINAPI, particularmente para dados de "custos", ao desacoplar a análise complexa do Excel da lógica de processamento principal.
…atualiza documentacao (#8)

* docs(contributing): adiciona diretrizes de contribuicao e atualiza README

* chore(git): adiciona arquivos de cobertura ao .gitignore

* docs(contributing): Modifica o link para página Contributing.md
…ses e Atualização das Diretrizes de Contribuição (#10)

* docs(contributing): update contributing guidelines with release process

* feat(release): add automated release drafting and publishing workflow
@LAMP-LUCAS LAMP-LUCAS merged commit 8cbd2e4 into main Sep 3, 2025
1 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants