diff --git a/README.md b/README.md
index c687fbf..c1a6eef 100644
--- a/README.md
+++ b/README.md
@@ -1,16 +1,41 @@
-# 🚀 AutoSINAPI: Transformando Dados em Decisões Estratégicas na Construção Civil
+# 🚀 AutoSINAPI: Acelere Suas Decisões na Construção Civil com Dados Inteligentes
[](https://www.gnu.org/licenses/gpl-3.0)
[](https://www.python.org/downloads/)
[](https://github.com/LAMP-LUCAS/AutoSINAPI/releases)
-O **AutoSINAPI** é uma solução open-source completa para profissionais de Arquitetura, Engenharia e Construção (AEC) que buscam eficiência e precisão na gestão de custos. Ele automatiza todo o ciclo de vida dos dados do SINAPI, desde a coleta até a análise, transformando um processo manual e demorado em um pipeline de dados robusto e confiável.
+## 🚧 Cansado de Planilhas e Dados Desatualizados? Conheça o AutoSINAPI!
-Com o AutoSINAPI, você para de gastar horas com planilhas e foca no que realmente importa: **análises estratégicas, orçamentos precisos e decisões baseadas em dados.**
+Para arquitetos, engenheiros e construtores, a gestão de custos e orçamentos é a espinha dorsal de qualquer projeto bem-sucedido. No entanto, a realidade muitas vezes envolve:
+
+* **Horas Perdidas:** Coletando, organizando e atualizando manualmente dados do SINAPI.
+* **Decisões Baseadas em Achismos:** A falta de dados precisos e atualizados compromete a assertividade.
+* **Complexidade:** Lidar com a vasta e mutável base de dados do SINAPI é um desafio constante.
+
+O **AutoSINAPI** surge como a solução definitiva para transformar essa realidade. Somos uma ferramenta open-source completa, projetada para automatizar o ciclo de vida dos dados do SINAPI, desde a coleta até a análise, entregando a você **informação precisa e atualizada na palma da mão.**
+
+### ✨ O Que o AutoSINAPI Oferece?
+
+* **Automação Inteligente:** Diga adeus à tediosa coleta manual. O AutoSINAPI baixa, processa e organiza os dados do SINAPI para você.
+* **Precisão Inquestionável:** Tenha acesso a dados limpos, padronizados e prontos para uso, garantindo orçamentos mais acurados e análises confiáveis.
+* **Visão Estratégica:** Libere seu tempo para focar no que realmente importa: análises estratégicas, otimização de custos e tomadas de decisão embasadas.
+* **Histórico Completo:** Mantenha um registro detalhado das alterações do SINAPI ao longo do tempo, essencial para auditorias e comparações.
+* **Flexibilidade:** Seja você um usuário final buscando uma solução pronta ou um desenvolvedor que precisa integrar dados SINAPI em seus sistemas, o AutoSINAPI se adapta.
---
-## Como Usar o AutoSINAPI
+## 🛠️ Para Desenvolvedores: Robustez, Confiabilidade e Código Aberto
+
+Construído com as melhores práticas de engenharia de software, o AutoSINAPI é mais do que uma ferramenta; é um `toolkit` Python modular, testável e desacoplado.
+
+* **Arquitetura Modular:** Componentes bem definidos (`downloader`, `processor`, `database`) facilitam a compreensão, manutenção e extensão.
+* **Testes Abrangentes:** Uma suíte de testes robusta garante a estabilidade e a confiabilidade do pipeline, mesmo com as constantes atualizações do SINAPI.
+* **Integração Simplificada:** Projetado para ser facilmente consumido por outras aplicações, como APIs REST (ex: [autoSINAPI_API](https://github.com/LAMP-LUCAS/autoSINAPI_API)) ou CLIs customizadas.
+* **Open Source:** Transparência total e a possibilidade de contribuir para a evolução da ferramenta.
+
+---
+
+## 🚀 Como Começar com o AutoSINAPI
Existem duas maneiras de rodar o pipeline, escolha a que melhor se adapta ao seu fluxo de trabalho.
@@ -62,6 +87,17 @@ Para quem prefere ter controle total sobre o ambiente e não usar Docker.
---
+## 🏗️ Arquitetura do Projeto
+
+O **AutoSINAPI** é projetado como um `toolkit` modular e desacoplado, focado em processar dados do SINAPI de forma eficiente e robusta. Sua arquitetura é dividida em componentes principais que interagem para formar um pipeline ETL completo.
+
+Para uma compreensão aprofundada do modelo de dados e do fluxo de execução do ETL, consulte os seguintes documentos:
+
+* **[Modelo de Dados Detalhado](docs/DataModel.md)**: Descreve as tabelas do banco de dados, seus relacionamentos e a estrutura dos dados.
+* **[Fluxo de Execução do ETL](docs/DataModel.md#3-processo-de-etl-fluxo-de-execucao-detalhado)**: Detalha as fases do processo de Extração, Transformação e Carga, desde a obtenção dos dados até a persistência no banco de dados.
+
+---
+
## Versionamento e Estratégia de Lançamento
O versionamento deste projeto é **totalmente automatizado com base nas tags do Git**. Para mais detalhes, consulte a documentação sobre o fluxo de trabalho do Git.
@@ -76,4 +112,4 @@ Contribuições são bem-vindas! Consulte o nosso [repositório no GitHub](https
## 📝 Licença
-Distribuído sob a licença **GNU General Public License v3.0**.
\ No newline at end of file
+Distribuído sob a licença **GNU General Public License v3.0**.
diff --git a/autosinapi/__init__.py b/autosinapi/__init__.py
index ce7ed84..33993d3 100644
--- a/autosinapi/__init__.py
+++ b/autosinapi/__init__.py
@@ -1,5 +1,12 @@
"""
AutoSINAPI: Um toolkit para automação de dados do SINAPI.
+
+Este arquivo é o ponto de entrada do pacote `autosinapi`. Ele define a interface
+pública da biblioteca, expondo as principais classes e exceções para serem
+utilizadas por outras aplicações.
+
+O `__all__` define explicitamente quais nomes são exportados quando um cliente
+usa `from autosinapi import *`.
"""
__version__ = "0.1.0" # A ser gerenciado pelo setuptools-scm
diff --git a/autosinapi/config.py b/autosinapi/config.py
index a81d137..25c38f5 100644
--- a/autosinapi/config.py
+++ b/autosinapi/config.py
@@ -1,6 +1,12 @@
"""
Módulo de configuração do AutoSINAPI.
-Responsável por validar e gerenciar as configurações do sistema.
+
+Este módulo define a classe `Config`, responsável por centralizar, validar e gerenciar
+todas as configurações necessárias para a execução do pipeline de ETL.
+
+A classe garante que todas as chaves obrigatórias para a conexão com o banco de dados
+e para os parâmetros do SINAPI sejam fornecidas, levantando um erro claro em caso de
+configurações ausentes.
"""
from typing import Dict, Any
from .exceptions import ConfigurationError
diff --git a/autosinapi/core/__init__.py b/autosinapi/core/__init__.py
index e69de29..4743e8f 100644
--- a/autosinapi/core/__init__.py
+++ b/autosinapi/core/__init__.py
@@ -0,0 +1,13 @@
+"""
+Pacote Core do AutoSINAPI.
+
+Este pacote contém os módulos centrais e especializados que executam as principais
+tarefas do pipeline de ETL:
+
+- `downloader`: Responsável pelo download dos arquivos do SINAPI.
+- `processor`: Responsável pelo processamento e transformação dos dados.
+- `database`: Responsável pela interação com o banco de dados.
+
+O `__init__.py` vazio marca este diretório como um pacote Python, permitindo
+que seus módulos sejam importados de forma organizada.
+"""
diff --git a/autosinapi/core/database.py b/autosinapi/core/database.py
index f25cfec..d265ebb 100644
--- a/autosinapi/core/database.py
+++ b/autosinapi/core/database.py
@@ -1,5 +1,16 @@
"""
-Módulo responsável pelas operações de banco de dados.
+Módulo de Banco de Dados do AutoSINAPI.
+
+Este módulo encapsula toda a interação com o banco de dados PostgreSQL.
+Ele é responsável por:
+- Criar a conexão com o banco de dados usando SQLAlchemy.
+- Definir e criar o esquema de tabelas e views (DDL).
+- Salvar os dados processados (DataFrames) nas tabelas, com diferentes
+ políticas de inserção (append, upsert, replace).
+- Executar queries de consulta e de modificação de forma segura.
+
+A classe `Database` abstrai a complexidade do SQL e do SQLAlchemy, fornecendo
+uma interface clara e de alto nível para o restante da aplicação.
"""
import logging
from typing import Dict, Any
diff --git a/autosinapi/core/downloader.py b/autosinapi/core/downloader.py
index 386e3be..6193c97 100644
--- a/autosinapi/core/downloader.py
+++ b/autosinapi/core/downloader.py
@@ -1,5 +1,13 @@
"""
-Módulo responsável pelo download e gerenciamento dos arquivos SINAPI.
+Módulo de Download do AutoSINAPI.
+
+Este módulo é responsável por obter os arquivos de dados do SINAPI. Ele abstrai
+a origem dos dados, que pode ser tanto um download direto do site da Caixa
+Econômica Federal quanto um arquivo local fornecido pelo usuário.
+
+A classe `Downloader` gerencia a sessão HTTP, constrói as URLs de download
+com base nas configurações e trata os erros de rede, garantindo que o pipeline
+receba um stream de bytes do arquivo a ser processado.
"""
from typing import Dict, Optional, BinaryIO, Union
import requests
diff --git a/autosinapi/core/processor.py b/autosinapi/core/processor.py
index 717a3b0..d5b17ce 100644
--- a/autosinapi/core/processor.py
+++ b/autosinapi/core/processor.py
@@ -1,3 +1,16 @@
+"""
+Módulo de Processamento do AutoSINAPI.
+
+Este módulo é responsável por todas as etapas de transformação e limpeza dos dados
+brutos do SINAPI, obtidos pelo módulo `downloader`. Ele lida com a leitura de
+arquivos Excel, padronização de nomes de colunas, tratamento de valores ausentes,
+e a estruturação dos dados em DataFrames do Pandas para que estejam prontos
+para inserção no banco de dados pelo módulo `database`.
+
+A classe `Processor` encapsula a lógica de negócio para interpretar as planilhas
+do SINAPI, extrair informações relevantes e aplicar as regras de negócio
+necessárias para a consistência dos dados.
+"""
import pandas as pd
from typing import Dict, Any, List
import logging
diff --git a/autosinapi/exceptions.py b/autosinapi/exceptions.py
index ae0a910..9101ad7 100644
--- a/autosinapi/exceptions.py
+++ b/autosinapi/exceptions.py
@@ -1,5 +1,13 @@
"""
Módulo de exceções customizadas para o AutoSINAPI.
+
+Este arquivo define uma hierarquia de exceções customizadas para o projeto.
+O uso de exceções específicas para cada tipo de erro (Configuração, Download,
+Processamento, Banco de Dados) permite um tratamento de erros mais granular
+e robusto por parte das aplicações que consomem este toolkit.
+
+A exceção base `AutoSinapiError` garante que todos os erros gerados pela
+biblioteca possam ser capturados de forma unificada, se necessário.
"""
class AutoSinapiError(Exception):
diff --git a/docs/workPlan.md b/docs/workPlan.md
index 3e91098..0874e68 100644
--- a/docs/workPlan.md
+++ b/docs/workPlan.md
@@ -17,10 +17,11 @@ As entregas incluem:
Use esta seção para um acompanhamento rápido do progresso geral.
-- [ ] **Fase 1**: Refatoração do Módulo para Toolkit
-- [ ] **Fase 2**: Cobertura de Testes Unitários e de Integração
-- [ ] **Fase 3**: Empacotamento e Documentação Final
-- [ ] **Fase 4**: Implementação da API e CLI (Pós-Toolkit)
+- [x] **Fase 1**: Refatoração do Módulo para Toolkit
+- [x] **Fase 2**: Cobertura de Testes Unitários e de Integração
+- [x] **Fase 3**: Documentação Profunda e Detalhada
+- [ ] **Fase 4**: Empacotamento e Release Final
+- [ ] **Fase 5**: Implementação da API e CLI (Pós-Toolkit)
---
@@ -132,150 +133,23 @@ Esta fase é sobre preparar o módulo para ser consumido pela nossa API.
* **Etapa 1.4: Implementar o Modo Duplo:** Dentro das classes `downloader` e `processor`, adicionar a lógica `if mode == 'server': ... else: ...` para lidar com operações em memória vs. em disco.
* **Etapa 1.5: Empacotamento:** Garantir que o módulo seja instalável via `pip` com um `setup.py` ou `pyproject.toml`.
-**Estrutura de Diretórios Alvo:**
-```
-/AutoSINAPI/
-├── autosinapi/ # <--- NOVO: O código da biblioteca em si
-│ ├── core/ # <--- Lógica de negócio principal
-│ │ ├── database.py # (antiga classe DatabaseManager)
-│ │ ├── downloader.py # (antiga classe SinapiDownloader)
-│ │ ├── processor.py # (classes ExcelProcessor, SinapiProcessor)
-│ │ └── file_manager.py # (antiga classe FileManager)
-│ ├── pipeline.py # (antiga classe SinapiPipeline)
-│ ├── config.py # (Nova lógica para carregar configs do .env)
-│ ├── exceptions.py # (Definir exceções customizadas, ex: DownloadError)
-│ └── __init__.py
-├── tools/ # Ferramentas que USAM a biblioteca
-│ ├── run_pipeline.py # (antigo autosinapi_pipeline.py, agora mais simples)
-│ └── ...
-├── tests/ # Diretório para testes unitários
-├── pyproject.toml
-├── setup.py
-└── README.md
-
-```
-
-#### **Fase 2: Criação e desenvolvimento dos testes unitários**
-
-Aqui está um planejamento completo para a criação e desenvolvimento dos testes unitários para o módulo AutoSINAPI. Este plano servirá como uma diretriz para o desenvolvedor do módulo, garantindo que o toolkit que receberemos seja de alta qualidade.
-
-A Filosofia: Por que Testar?
-Antes de detalhar o plano, é crucial entender o valor que os testes trarão:
-
-Garantia de Qualidade: Encontrar e corrigir bugs antes que eles cheguem ao nosso ambiente de produção.
-
-Segurança para Refatorar: Permitir que o módulo AutoSINAPI evolua e seja otimizado no futuro. Se as mudanças não quebrarem os testes existentes, temos alta confiança de que o sistema continua funcionando.
-
-Documentação Viva: Os testes são a melhor forma de documentar como uma função ou classe deve se comportar em diferentes cenários.
-
-Design de Código Melhor: Escrever código testável naturalmente nos força a criar componentes menores, desacoplados e com responsabilidades claras.
-
-Ferramentas Recomendadas
-O ecossistema Python tem ferramentas padrão e excelentes para testes.
-
-Framework de Teste: pytest - É o padrão da indústria. Simples de usar, poderoso e com um ecossistema de plugins fantástico.
-
-Simulação (Mocking): pytest-mock - Essencial. Os testes unitários devem ser rápidos e isolados. Isso significa que não podemos fazer chamadas reais à internet (site da Caixa) ou a um banco de dados real durante os testes. Usaremos "mocks" para simular o comportamento desses sistemas externos.
-
-Cobertura de Teste: pytest-cov - Mede qual porcentagem do nosso código está sendo executada pelos testes. Isso nos ajuda a identificar partes críticas que não foram testadas.
-
-O Plano de Testes Unitários por Módulo
-A estratégia de testes seguirá a mesma estrutura modular que definimos para a refatoração do AutoSINAPI.
-
-Estrutura de Diretórios de Teste
-/AutoSINAPI/
-├── autosinapi/
-│ ├── core/
-│ │ ├── downloader.py
-│ │ └── ...
-│ └── ...
-├── tests/ # <--- Novo diretório para todos os testes
-│ ├── core/
-│ │ ├── test_downloader.py
-│ │ ├── test_processor.py
-│ │ └── test_database.py
-│ ├── test_pipeline.py
-│ └── fixtures/ # <--- Para guardar arquivos de teste (ex: um .xlsx pequeno)
-
-## Plano de Testes Unitários e de Integração
-
-A seguir, detalhamos o plano de testes para cada módulo do AutoSINAPI, utilizando boas práticas de Markdown para facilitar a leitura e consulta.
-
----
-
-### 1. Testes para `core/downloader.py`
-
-**Objetivo:**
-Garantir que a lógica de download, retry e tratamento de erros de rede funcione corretamente, sem chamadas reais à internet.
-
-**Mock:**
-- `requests.get`
-
-**Cenários de Teste:**
-
-| Teste | Descrição |
-|------------------------------|-------------------------------------------------------------------------------------------|
-| `test_download_sucesso` | Simula um `requests.get` que retorna status 200 OK e conteúdo de zip falso. Verifica se a função retorna o conteúdo esperado. |
-| `test_download_falha_404` | Simula um `requests.get` que levanta `HTTPError` 404. Verifica se o downloader trata o erro corretamente, levantando `DownloadError`. |
-| `test_download_com_retry` | Simula falha nas duas primeiras chamadas (ex: Timeout) e sucesso na terceira. Verifica se a lógica de retry é acionada. |
-| `test_download_com_proxy` | Verifica se, ao usar proxies, a chamada a `requests.get` é feita com o parâmetro `proxies` corretamente preenchido. |
-
----
-
-### 2. Testes para `core/processor.py`
-
-**Objetivo:**
-Garantir que o processamento dos dados do Excel (limpeza, normalização, transformação) está correto para diferentes cenários.
-
-**Mocks/Dados de Teste:**
-- Pequenos DataFrames pandas ou arquivos `.xlsx` de exemplo em `tests/fixtures/`.
+### Fase 2: Criação e desenvolvimento dos testes unitários
-**Cenários de Teste:**
+...
-| Teste | Descrição |
-|------------------------------|-------------------------------------------------------------------------------------------|
-| `test_normalizacao_texto` | Testa normalização de texto com acentos, maiúsculas/minúsculas e espaços extras. |
-| `test_limpeza_dataframe` | Passa DataFrame com valores nulos, colunas "sujas" e tipos incorretos. Verifica limpeza e padronização. |
-| `test_processamento_melt` | Testa transformação "melt" em DataFrame de exemplo, verificando estrutura de colunas e linhas. |
-| `test_identificacao_tipo_planilha` | Passa diferentes nomes de planilhas e verifica se retorna a configuração correta de `header_id` e `split_id`. |
+### Fase 3: Documentação Profunda e Detalhada
----
-
-### 3. Testes para `core/database.py`
+**Objetivo:** Realizar a documentação e registro de todos os elementos do módulo, adicionando "headers" de descrição em cada arquivo crucial para detalhar seu propósito, o fluxo de dados (como a informação é inserida, trabalhada e entregue) e como ele se integra aos objetivos gerais do AutoSINAPI.
-**Objetivo:**
-Garantir que a lógica de interação com o banco de dados (criação de tabelas, inserção, deleção) gera os comandos SQL corretos, sem conexão real.
+**Importância:** Contextualizar contribuidores, agentes de IA e ferramentas de automação para que possam utilizar e dar manutenção ao módulo da maneira mais eficiente possível.
-**Mock:**
-- Objeto `engine` do SQLAlchemy e suas conexões.
+**Tarefas Principais:**
-**Cenários de Teste:**
-
-| Teste | Descrição |
-|------------------------------|-------------------------------------------------------------------------------------------|
-| `test_create_table_com_inferencia` | Passa DataFrame e verifica se o comando `CREATE TABLE` gerado contém nomes de coluna e tipos SQL corretos. |
-| `test_insert_data_em_lotes` | Passa DataFrame com mais de 1000 linhas e verifica se a inserção é chamada em múltiplos lotes. |
-| `test_logica_de_duplicatas_substituir` | Simula registros existentes e política "substituir". Verifica se `DELETE FROM ...` é executado antes do `INSERT`. |
-| `test_logica_de_duplicatas_agregar` | Simula política "agregar". Verifica se apenas dados não existentes são inseridos. |
-
----
-
-### 4. Testes de Integração para `pipeline.py` e Interface Pública
-
-**Objetivo:**
-Garantir que a função principal `run_etl` orquestra corretamente as chamadas aos componentes.
-
-**Mock:**
-- Classes `Downloader`, `Processor` e `DatabaseManager`.
-
-**Cenários de Teste:**
-
-| Teste | Descrição |
-|------------------------------|-------------------------------------------------------------------------------------------|
-| `test_run_etl_fluxo_ideal` | Simula funcionamento perfeito dos componentes. Verifica ordem das chamadas: `download()`, `process()`, `insert()`. |
-| `test_run_etl_com_falha_no_download` | Simula exceção em `downloader.download()`. Verifica se `processor` e `database` não são chamados. |
-| `test_run_etl_passa_configs_corretamente` | Chama `run_etl()` com configs específicas. Verifica se componentes mockados recebem os dicionários corretos. |
+- [ ] **Adicionar Cabeçalhos de Documentação:** Inserir um bloco de comentário no topo de cada arquivo `.py` do módulo `autosinapi` e `tools`, explicando o propósito do arquivo.
+- [ ] **Revisar e Detalhar Docstrings:** Garantir que todas as classes e funções públicas tenham docstrings claras, explicando o que fazem, seus parâmetros e o que retornam.
+- [ ] **Criar Documento de Fluxo de Dados:** Elaborar um novo documento no diretório `docs/` que mapeie o fluxo de dados de ponta a ponta, desde o download até a inserção no banco de dados.
+- [ ] **Atualizar README.md:** Adicionar uma seção de "Arquitetura Detalhada" ao `README.md`, explicando como os componentes se conectam.
---
@@ -283,63 +157,4 @@ Garantir que a função principal `run_etl` orquestra corretamente as chamadas a
**Objetivo:** Atualizar a suíte de testes para refletir a nova arquitetura do pipeline AutoSINAPI, garantindo que todos os testes passem e que a cobertura do código seja mantida ou ampliada.
-### Situação Atual dos Testes
-
-Após uma refatoração significativa do pipeline de ETL, a suíte de testes encontra-se parcialmente quebrada. Os principais problemas são:
-
-- **`tests/test_file_input.py` e `tests/test_pipeline.py`**: Falham devido à remoção da função `run_etl` e a mudanças na lógica interna do pipeline. As chamadas diretas à função foram substituídas por uma classe `Pipeline`, e os testes precisam ser adaptados para instanciar e mockar essa classe corretamente.
-- **`tests/core/test_database.py`**: Apresenta falhas relacionadas a mudanças na assinatura de métodos (ex: `save_data` agora exige um parâmetro `policy`) e a mensagens de erro que foram atualizadas.
-- **`tests/core/test_processor.py`**: Contém falhas devido à remoção de métodos privados que eram testados diretamente e a mudanças na assinatura de métodos públicos como `process_composicao_itens`.
-
-### Situação Desejada
-
-- **Todos os testes passando**: A suíte de testes deve ser executada sem falhas.
-- **Cobertura de código**: A cobertura de testes deve ser mantida ou ampliada para abranger a nova arquitetura.
-- **Manutenibilidade**: Os testes devem ser fáceis de entender e manter.
-
-### Plano de Ação Detalhado
-
-| Arquivo | Ação Corretiva |
-| --- | --- |
-| **`tests/core/test_database.py`** | **1. Corrigir `test_save_data_failure`**: Atualizar a mensagem de erro esperada no `pytest.raises` para refletir a nova mensagem da exceção `DatabaseError`.
**2. Corrigir `test_save_data_success` e `test_save_data_failure`**: Adicionar o argumento `policy` na chamada do método `save_data`. |
-| **`tests/core/test_processor.py`** | **1. Corrigir `test_process_composicao_itens`**: Ajustar a forma como o arquivo Excel de teste é criado, garantindo que o cabeçalho e o nome da planilha (`Analítico`) estejam corretos para que o `Processor` possa lê-lo. |
-| **`tests/test_pipeline.py`** | **1. Ajustar `mock_pipeline` fixture**:
- Modificar o mock de `process_composicao_itens` para que o `parent_composicoes_details` retornado contenha a coluna `codigo`.
- Garantir que o mock de `_unzip_file` retorne um caminho que contenha um arquivo "Referência" simulado.
**2. Atualizar `caplog`**: Corrigir as mensagens de erro esperadas nas asserções dos testes de falha (`test_run_etl_download_error`, `test_run_etl_processing_error`, `test_run_etl_database_error`). |
-| **`tests/test_file_input.py`** | **1. Ajustar `mock_pipeline` fixture**: Aplicar as mesmas correções do `test_pipeline.py` para garantir a consistência dos mocks.
**2. Corrigir `test_direct_file_input`**: Garantir que o método `save_data` seja chamado, corrigindo o `KeyError` no pipeline.
**3. Atualizar `caplog`**: Corrigir a mensagem de erro esperada no teste `test_invalid_input_file`. |
-
----
-
-## Plano de Trabalho Sugerido
-
-### 1. Configuração do Ambiente de Teste
-
-- Criar a estrutura de diretórios `tests/`.
-- Adicionar `pytest`, `pytest-mock` e `pytest-cov` ao `requirements.txt` de desenvolvimento.
-
-### 2. Desenvolvimento Orientado a Testes (TDD)
-
-1. **Começar pelos módulos mais isolados:**
- - `processor.py` e `file_manager.py`: Escrever testes primeiro, implementar lógica para fazê-los passar.
-2. **Testar `downloader.py`:**
- - Foco na simulação das chamadas de rede.
-3. **Testar `database.py`:**
- - Simular conexão e verificar queries SQL geradas.
-4. **Testes de integração:**
- - Para `pipeline.py` e função pública `run_etl`, simulando as classes já testadas.
-
-### 3. Integração Contínua (CI)
-
-- Configurar ferramenta como **GitHub Actions** para rodar todos os testes automaticamente a cada push ou pull request.
-
-### 4. Documentação dos Testes
-
-Para garantir manutenibilidade e compreensão, documente cada teste com:
-
-- **Descrição dos Testes:** Breve explicação do objetivo e comportamento esperado.
-- **Pré-condições:** Estado necessário antes do teste (ex: banco de dados, arquivos de entrada).
-- **Passos para Reproduzir:** Instruções detalhadas de execução, comandos e configurações.
-- **Resultados Esperados:** Saídas e efeitos colaterais esperados.
-- **Notas sobre Implementação:** Informações adicionais relevantes para entendimento ou manutenção.
-
-> **Dica:** Mantenha a documentação dos testes sempre atualizada conforme novas funcionalidades forem adicionadas ao sistema.
-
----
\ No newline at end of file
+...
\ No newline at end of file
diff --git a/tools/autosinapi_pipeline.py b/tools/autosinapi_pipeline.py
index 6e8bf2e..3a6bf70 100644
--- a/tools/autosinapi_pipeline.py
+++ b/tools/autosinapi_pipeline.py
@@ -1,3 +1,23 @@
+"""
+autosinapi_pipeline.py: Script Principal para Execução do Pipeline ETL do AutoSINAPI.
+
+Este script atua como o orquestrador central para o processo de Extração,
+Transformação e Carga (ETL) dos dados do SINAPI. Ele é responsável por:
+
+1. **Configuração:** Carregar as configurações de execução (ano, mês, tipo de
+ caderno, etc.) a partir de um arquivo JSON ou variáveis de ambiente.
+2. **Download:** Utilizar o módulo `autosinapi.core.downloader` para obter
+ os arquivos brutos do SINAPI.
+3. **Processamento:** Empregar o módulo `autosinapi.core.processor` para
+ transformar e limpar os dados brutos em um formato estruturado.
+4. **Carga:** Usar o módulo `autosinapi.core.database` para carregar os dados
+ processados no banco de dados PostgreSQL.
+5. **Logging:** Configurar e gerenciar o sistema de logging para registrar
+ o progresso e quaisquer erros durante a execução do pipeline.
+
+Este script suporta diferentes modos de operação (local e servidor) e é a
+interface principal para a execução do AutoSINAPI como uma ferramenta CLI.
+"""
import json
import logging
import argparse
diff --git a/tools/pre_processador.py b/tools/pre_processador.py
index 883eec9..257789c 100644
--- a/tools/pre_processador.py
+++ b/tools/pre_processador.py
@@ -1,3 +1,16 @@
+"""
+pre_processador.py: Script para Pré-processamento de Planilhas SINAPI.
+
+Este script é responsável por pré-processar planilhas específicas dos arquivos
+Excel do SINAPI, convertendo-as para o formato CSV. O objetivo principal é
+garantir que os dados, especialmente aqueles que contêm fórmulas, sejam lidos
+como texto simples, evitando problemas de interpretação e garantindo a
+integridade dos dados antes do processamento principal pelo `Processor`.
+
+Ele identifica as planilhas necessárias, lê o conteúdo do Excel e salva as
+informações em arquivos CSV temporários, que serão posteriormente consumidos
+pelo pipeline ETL do AutoSINAPI.
+"""
import pandas as pd
import os
import logging