Solução open source para simplificar o acesso, tratamento e gestão dos dados do SINAPI (Sistema Nacional de Pesquisa de Custos e Índices da Construção Civil). Seja você desenvolvedor, analista de custos ou profissional da construção, este projeto transforma dados complexos em informações estruturadas e prontas para análise!
Quer contribuir para um projeto real que impacta o setor da construção? Não precisa ser expert! Aqui você encontra:
Para Iniciantes 💡 | Para Desenvolvedores 🛠️ |
---|---|
👉 Guia Passo a Passo para instalação e uso | 🚀 Implemente APIs REST e integrações com SINCRO API |
🧠 Tutorial de LLMs para automação de projetos | 🏗️ Seja parte de uma revolução na construção civil! |
Para TODOS 👥 |
---|
🌐 Participe do FOTON - Um ecossistema de soluções Open Source para a industria AEC |
✨ Nosso Objetivo: Criar uma ponte acessível entre dados brutos do SINAPI e tomadas de decisão inteligentes na construção civil, com:
- ✅ Autonomia na atualização de bancos de dados PostgreSQL
- 🛡️ Segurança no tratamento de informações
- 🔍 Facilidade de consulta através de futuras APIs REST
Funcionalidade | Status | Próximos Passos |
---|---|---|
Download automático do SINAPI | ✅ Funcional | API REST para consultas |
Tratamento de dados estruturado | ✅ Implementado | Integração com SINCRO API |
Inserção em PostgreSQL | ✅ Operante | Dashboard de análises |
CLI para pipeline | 🚧 Em desenvolvimento | Documentação interativa |
- Impacto direto na gestão de custos da construção civil
- Ambiente amigável para iniciantes em programação
- Aprendizado prático com Python, PostgreSQL e automação
- Faça parte de uma comunidade que simplifica dados complexos!
"Sozinhos vamos mais rápido, juntos vamos mais longe" - Venha construir esta solução conosco! 🏗️💙
- Automatizar o download dos dados do SINAPI
- Tratar e organizar os dados para facilitar consultas e análises
- Inserir os dados em um banco PostgreSQL, permitindo edição e atualização recorrente
- Prover scripts e ferramentas para facilitar a manutenção e evolução do processo
├── autosinapi_pipeline.py # Script Exemplo para download, tratamento e insersão dos arquivos SINAPI no banco de dados
├── CONFIG.json # Arquivo de configuração para automatização do pipeline
├── sinap_webscraping_download_log.json # Arquivo de registro dos downloads
├── sql_access.secrets # Arquivo de configuração do banco (exemplo) - Retirar ".example"
├── sinapi_utils.py # Módulo contendo toda lógica do projeto
├── update_requirements.py # Atualizador de dependências
├── setup.py # Configuração do módulo
├── pyproject.toml # Configuração do módulo
└── requirements.txt # Dependências do projeto
git clone https://github.com/seu-usuario/AutoSINAPIpostgres.git
cd AutoSINAPIpostgres
python -m venv venv
.\venv\Scripts\activate
python update_requirements.py # Gera requirements.txt atualizado, OPCIONAL!
pip install -r requirements.txt
- Renomeie
sql_access.secrets.example
parasql_access.secrets
- Edite o arquivo com suas credenciais:
DB_USER = 'seu_usuario'
DB_PASSWORD = 'sua_senha'
DB_HOST = 'localhost'
DB_PORT = '5432'
DB_NAME = 'sinapi'
DB_INITIAL_DB = 'postgres'
- Atualmente está configurado para tratar os dados das bases à partir de 2025, substituindo os dados antigos e utilizando o arquivo XLSX REFERENCIA para insersão:
{
"secrets_path": "sql_access.secrets", # arquivo com os parâmetros de conexão
"default_year": "2025", # ano da base desejada
"default_month": "01", # mês da base desejada
"default_format": "xlsx", # formato de arquivo a ser trabalhado (Atualmente só suporta XLSX)
"workbook_type_name": "REFERENCIA", # Workbook exemplo para trabalhar
"duplicate_policy": "substituir", # Política de insersão de dados novos
"backup_dir": "./backups", # Pasta para salvamento dos dados tratados antes de inserir no banco de dados
"log_level": "info", # Nível de LOG
"sheet_processors": { # Configuração de recorte de dados para cada tipo de planilha {NOME_PLANILHA: {COLUNA_RECORTE, COLUNA_CABEÇALHO}}
"ISD": {"split_id": 5, "header_id": 9},
"CSD": {"split_id": 4, "header_id": 9},
"ANALITICO": {"split_id": 0, "header_id": 9},
"COEFICIENTES": {"split_id": 5, "header_id": 5},
"MANUTENCOES": {"split_id": 0, "header_id": 5},
"MAO_DE_OBRA": {"split_id": 4, "header_id": 5}
}
}
O script autosinap_pipeline.py
realiza todas as etapas necessárias para o download dos arquivos do SINAPI e insersão no banco de dados PostgreSQL:
python autosinap_pipeline.py
Se não configurar o CONFIG.json Você será solicitado a informar:
- Ano (YYYY)
- Mês (MM)
- Tipo de planilha (familias_e_coeficientes, Manutenções, mao_de_obra, Referência)
- Formato (xlsx é o único formato suportado até o momento)
O script autosinapi_cli_pipeline.py
processa e insere os dados no banco:
python autosinapi_cli_pipeline.py --arquivo_xlsx <caminho> --tipo_base <tipo> --config <caminho>
Parâmetros disponíveis:
--arquivo_xlsx
: Caminho do arquivo Excel a ser processado--config
: Caminho do arquivo de configuração CONFIG.json--tipo_base
: Tipo de dados (insumos, composicao, analitico)--user
: Usuário do PostgreSQL (opcional, usa .secrets se não informado)--password
: Senha do PostgreSQL (opcional, usa .secrets se não informado)--host
: Host do PostgreSQL (opcional, usa .secrets se não informado)--port
: Porta do PostgreSQL (opcional, usa .secrets se não informado)--dbname
: Nome do banco (opcional, usa .secrets se não informado)
O banco PostgreSQL é organizado em schemas por tipo de dados:
insumos
: Preços e informações de insumoscomposicoes
: Composições de serviçosanalitico
: Dados analíticos detalhados
-
Erro de conexão PostgreSQL:
- Verifique se o PostgreSQL está rodando
- Confirme as credenciais em
sql_access.secrets
- Verifique se o banco e schemas existem ou se foram criados corretamente pelo script
autosinapi_pipeline.py
-
Erro no download SINAPI:
- Verifique sua conexão com a internet
- Confirme se o arquivo existe no site da Caixa
- Verifique o formato do ano (YYYY) e mês (MM)
- ATENÇÃO: Se realizadas várias tentativas a plataforma da CEF pode bloquear seu IP, utilize próxies ou aguarde um tempo antes de tentar novamente.
-
Erro na análise Excel:
- Confirme se o arquivo não está aberto em outro programa
- Verifique se há permissão de leitura no diretório
- Verifique se as configurações de split e header presentes no arquivo
CONFIG.json
estão corretas
- Faça um fork deste repositório
- Crie uma branch para sua feature ou correção
- Envie um pull request detalhando as alterações propostas
- Beba água e se possível passe um cafezinho antes de contribuir.
- Python 3.0+
- PostgreSQL 12+
- Bibliotecas Python listadas em
requirements.txt
Este projeto é open source sob os termos da GNU General Public License, versão 3 (GPLv3). Isso significa que você pode utilizar, modificar e distribuir o projeto, inclusive para fins comerciais. Contudo, se você criar derivados ou incorporar este código em outros produtos e distribuí-los, estes também deverão estar sob licença GPLv3, garantindo assim que o código-fonte continue acessível aos usuários.
Sugestões, dúvidas ou colaborações são bem-vindas via issues ou pull requests.
📦AutoSINAPI
┣ 📂autosinapi.egg-info
┃ ┣ 📜dependency_links.txt
┃ ┣ 📜PKG-INFO
┃ ┣ 📜requires.txt
┃ ┣ 📜SOURCES.txt
┃ ┗ 📜top_level.txt
┣ 📂docs # Documentação do projeto >> Irá ser implantado juntamente com um forum/comunidade em um redmine
┣ 📂tests # Local especial para testar modificações e implantações sem quebrar todo o resto :)
┣ 📂tools # Ferramentas que podem ser criadas utilizando este módulo
┃ ┃ ┣ 📂downloads # local onde serão salvos os downloads do script
┃ ┣ 📜autosinapi_pipeline.py
┃ ┣ 📜CONFIG.json
┃ ┣ 📜sinap_webscraping_download_log.json
┃ ┣ 📜sql_access copy.secrets.example
┃ ┗ 📜__init__.py
┣ 📜.gitignore
┣ 📜pyproject.toml
┣ 📜README.md
┣ 📜requirements.txt
┣ 📜setup.py
┣ 📜sinapi_utils.py
┣ 📜update_requirements.py
┗ 📜__init__.py