Skip to content

Commit

Permalink
Atualização da Arquitetura do Projeto.
Browse files Browse the repository at this point in the history
  • Loading branch information
PedroLock committed Aug 6, 2024
1 parent d4ab6f1 commit 27b0515
Showing 1 changed file with 102 additions and 101 deletions.
203 changes: 102 additions & 101 deletions docs/Arquitetura.md
Original file line number Diff line number Diff line change
@@ -1,101 +1,102 @@
### Introdução
O projeto LicitaNow visa verificar e mostrar aos usuários os gastos públicos do Distrito Federal na modalidade dispensa de licitação. Tendo como objetivo apresentar, de forma organizada, quais empresas recebem mais dinheiro e quais são os órgãos públicos que gastam mais.

### Diagrama de arquitetura
![Diagrama](imagens/Diagrama.png)

### Front-End

#### HTML, CSS e JavaScript:
- *Estrutura e Estilo:* Para criar a interface inicial do nosso projeto, utilizamos HTML para estruturar o conteúdo e CSS para estilizar os elementos. Além disso, utilizamos JavaScript para adicionar interatividade à página.
- *Conteúdo Principal:* O HTML define a estrutura básica da página, incluindo cabeçalho, seções de conteúdo, e rodapé. O CSS é responsável pela aparência visual, incluindo cores, espaçamentos, e fontes. O JavaScript adiciona comportamento dinâmico, como animações e reações a eventos de usuário.

#### Integração com Streamlit:
- *Incorporação de HTML/CSS/JS no Streamlit:* Utilizamos a biblioteca streamlit.components.v1 para incorporar o nosso código HTML, CSS e JavaScript dentro do aplicativo Streamlit. Isso nos permitiu combinar a flexibilidade do desenvolvimento web tradicional com a simplicidade e o poder do Streamlit.
- *Código de Integração:* O código abaixo demonstra como carregamos e incorporamos os arquivos HTML, CSS e JavaScript no Streamlit:

import streamlit as st
import streamlit.components.v1 as components

st.set_page_config(layout="wide")

# Função para carregar o conteúdo do arquivo
def load_file(file_path):
with open(file_path, 'r', encoding='utf-8') as file:
return file.read()

# Carregar o HTML, CSS e JavaScript
html_content = load_file('index.html')
css_content = load_file('style.css')
js_content = load_file('script.js')

# Injetar o CSS e JavaScript no HTML
html_with_css_js = f"""
<style>
html, body, [class*="css"] {{
margin: 0;
padding: 0;
width: 100%;
height: 100%;
overflow: hidden;
}}
{css_content}
</style>
<div style="width:100vw; height:100vh; overflow: hidden;">
{html_content}
</div>
<script>
{js_content}
</script>
# Exibir o HTML com CSS e JavaScript no Streamlit
components.html(html_with_css_js, height=1000, scrolling=True)

### Back-End

#### Biblioteca Streamlit:
- *Criação de Interfaces Interativas:* Utilizamos a biblioteca Streamlit para desenvolver o restante da interface do usuário e das funcionalidades interativas. Streamlit é uma ferramenta poderosa para criar dashboards e aplicativos de dados de maneira rápida e eficiente.
- *Funcionalidades:* Com Streamlit, implementamos funcionalidades como carregamento e visualização de dados, gráficos interativos, e controle de entradas do usuário (como sliders e botões).

#### Fluxo de Trabalho:
- *Entrada de dados:* Os dados são carregados a partir de fontes especificadas (arquivos, APIs, etc.).
- *Processamento e Análise:* Os dados são processados e analisados em tempo real, utilizando bibliotecas de manipulação de dados.
- *Visualização:* Os resultados são apresentados de forma intuitiva através de gráficos, tabelas e outras visualizações interativas.

### Conclusão

A combinação de HTML, CSS e JavaScript para a estrutura e estilo inicial, junto com a biblioteca Streamlit para funcionalidades interativas e visualizações de dados, nos permitiu criar uma aplicação robusta e fácil de usar. Esta abordagem nos permitiu oferecer uma melhor combinação entre: a flexibilidade e personalização do desenvolvimento web tradicional, e a simplicidade e eficiência do Streamlit para análise de dados.

### Índice de Arquivos

#### coleta_api.py
Faz buscas no API do PNCP, como resultado, ele gera um arquivo Json

#### coleta_cnpj.py
Faz buscas do casdastro de CNPJ no API https://api.cnpjs.dev/v1 utilizando o arquivo 'contratos_OFICIAL.json' e adiciona a ele o resultado das buscas

#### contratos_final_excel.py
Organiza o arquivo Json para que possa ser lido pelo "ordenacao_dados.py"

#### ordenacao_dados.py
Organiza o arquivo Json para que possa ser lido pelo dashboard, consolida com as informações do arquivo "contrato_final1.xlsx", além de possíbilitar ao usuário que o baixe para trabalhá-lo em planilha Excel > Gera o arquivo "contratos_ordenados_completo.csv"

#### info_empresa.py
verificar a necessidade de manter este arquivo, pois parece que não tem mais utilidade para o projeto

- Lê o arquivo"x_empresas_contratadas.json" e gera o arquivo 'x_empresas_contratadas.csv'

#### Rank_empresas.py
Página de arquivos do ranking das empresas


#### Rank_dos_órgãos.py
Página de arquivos do ranking dos órgãos conntratantes

#### Contato.py
Contato do organização do projeto

#### Sobre.py
Sobre nós

#### Menu.py
Menu do Dashboard Interativo
# DOCUMENTO DE ARQUITETURA DO PROJETO DE SOFTWARE

## 1. Visão Geral
Este documento descreve a arquitetura do projeto de software desenvolvido em Python, cujo objetivo é analisar os dados de dispensa de licitação do Distrito Federal, identificar as empresas mais beneficiadas e os órgãos públicos mais investidores. A coleta e a análise dos dados são realizadas através de diversas bibliotecas e ferramentas, com atualizações automatizadas semanalmente.

## 2. Objetivos
- Analisar dados de dispensa de licitação no Distrito Federal.
- Identificar as empresas mais beneficiadas e os órgãos públicos mais investidores.
- Fornecer visualizações claras e intuitivas dos dados coletados.

## 3. Arquitetura Geral

### 3.1. Fluxo de Trabalho
- **1) Extração e Coleta dos Dados**
- **Coleta dos Contratos:**
* Feita através de requisições ao Portal Nacional de Contratações Públicas (PNCP) utilizando a biblioteca requests.
* Os dados são salvos em um arquivo JSON (contratos_OFICIAL.json).
* Erros de requisição são registrados em arquivos de log para tentativas subsequentes.
- **Coleta das Empresas:**
* Com base nos dados dos contratos, são realizadas requisições a uma API específica de empresas para coletar informações adicionais.
* Os dados são salvos em um arquivo JSON (infos_cnpjs_OFICIAL.json).

- **2) Salvamento dos Dados**
* Dados dos contratos salvos em contratos_OFICIAL.json.
* Dados das empresas salvos em infos_cnpjs_OFICIAL.json.

- **3) Manipulação dos Dados**
* Geração de um arquivo CSV (x_empresas_contratadas.csv) a partir dos dados dos contratos para facilitar a leitura dos dados das empresas contratadas.
* Criação de um arquivo CSV (contratos_ordenados_completos.csv) que combina os dados dos contratos e das empresas, utilizando a biblioteca pandas.

- **4) Leitura dos Dados**
* Leitura dos arquivos CSV gerados para análise e visualização dos dados.

- **5) Análise e Visualização dos Dados**
* Utilização do streamlit para criar dashboards e gráficos.
* Outras bibliotecas utilizadas incluem altair e plotly_express para visualizações adicionais.

### 3.2. Automação
- **GitHub Actions:** Automação semanal para atualização dos dados. Scripts definidos em arquivos .yml no GitHub.

## 4. Estrutura do Projeto

```
├── Dados
│ ├── Coleta_dados
│ │ ├── coleta_api.py
│ │ ├── coleta_cnpjs.py
│ │ ├── coleta_contratosERRO.py
│ │ ├── info.log
│ │ ├── info_erros.log
│ │ └── logging_config.py
│ ├── info_empresa.py
│ └── ordenacao_dados.py
└── frontend
├── Menu.py
└── pages
├── 01_Rank_empresas.py
├── 02_Rank_dos_órgãos.py
├── 03_Contato.py
└── 04_Sobre.py
```

## 5. Detalhamento dos Componentes

### 5.1 Coleta de Dados

- **coleta_api.py:** Script responsável por fazer as requisições ao PNCP e salvar os dados dos contratos em `contratos_OFICIAL.json`.
- **coleta_cnpjs.py:** Script que coleta informações adicionais das empresas a partir da API específica e salva os dados em `infos_cnpjs_OFICIAL.json`.
- **coleta_contratosERRO.py:** Script que reexecuta requisições que falharam, baseando-se nos logs de erros (`info_erros.log`).
- **logging_config.py:** Configuração de logs para registrar atividades e erros durante a coleta de dados.
- **info.log:** Arquivo de log para registros de atividades normais.
- **info_erros.log:** Arquivo de log para registros de erros.

### 5.2. Manipulação de Dados

- **info_empresa.py:** Script que manipula os dados das empresas.
- **ordenacao_dados.py:** Script que gera o arquivo `contratos_ordenados_completos.csv` combinando dados dos contratos e das empresas.

### 5.3. Frontend

- **Menu.py:** Script que define a página inicial de menu do dashboard.
- **pages/**
- **01_Rank_empresas.py:** Página que exibe o ranking das empresas mais beneficiadas.
- **02_Rank_dos_órgãos.py:** Página que exibe o ranking dos órgãos públicos mais investidores.
- **03_Contato.py:** Página de contato.
- **04_Sobre.py:** Página com informações sobre o projeto.

## 6. Bibliotecas Utilizadas

- **requests:** Para fazer requisições HTTP e coletar dados.
- **pandas:** Para manipulação e análise dos dados.
- **streamlit:** Para criação de dashboards interativos.
- **altair:** Para visualização de dados.
- **plotly_express:** Para visualização de dados.
- **json:** Para manipulação de arquivos JSON.
- **unidecode:** Para normalização de texto.

## 7. Automação e Atualização de Dados

- **GitHub Actions:** Arquivos `.yml` configurados para executar scripts de coleta e atualização de dados semanalmente, garantindo que as informações estejam sempre atualizadas.

Este documento detalha a arquitetura do projeto, incluindo o fluxo de trabalho, a estrutura de diretórios e scripts, além das bibliotecas e ferramentas utilizadas para alcançar os objetivos estabelecidos.

0 comments on commit 27b0515

Please sign in to comment.