{"id":17431963,"url":"https://github.com/tsffarias/liftoff_data","last_synced_at":"2025-10-16T19:31:26.769Z","repository":{"id":257982996,"uuid":"862058227","full_name":"tsffarias/LiftOff_Data","owner":"tsffarias","description":"Arquitetura CRM de Baixo Custo com Gen AI, projetada para startups que precisam processar e analisar dados de vendas de forma eficiente.","archived":false,"fork":false,"pushed_at":"2025-04-17T02:20:31.000Z","size":83832,"stargazers_count":52,"open_issues_count":0,"forks_count":6,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-17T16:05:01.848Z","etag":null,"topics":["ai","airflow","api","briefer","crm","dbt","docker","duckdb","etl","faker","fastapi","minio","n8n","pgduckdb","postgresql","pydantic","python","sqlalchemy","startup","streamlit"],"latest_commit_sha":null,"homepage":"https://www.linkedin.com/in/thiagosilvafarias/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tsffarias.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-09-24T00:57:22.000Z","updated_at":"2025-04-17T02:20:34.000Z","dependencies_parsed_at":"2024-12-21T02:32:33.401Z","dependency_job_id":"fa7d6843-c106-4a56-bd9b-4e07fdc60dbf","html_url":"https://github.com/tsffarias/LiftOff_Data","commit_stats":{"total_commits":43,"total_committers":1,"mean_commits":43.0,"dds":0.0,"last_synced_commit":"436e296adf97e089d8279a3fa10440cf3a9e6033"},"previous_names":["tsffarias/liftoff_data"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/tsffarias/LiftOff_Data","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsffarias%2FLiftOff_Data","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsffarias%2FLiftOff_Data/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsffarias%2FLiftOff_Data/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsffarias%2FLiftOff_Data/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tsffarias","download_url":"https://codeload.github.com/tsffarias/LiftOff_Data/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsffarias%2FLiftOff_Data/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279230245,"owners_count":26130682,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-16T02:00:06.019Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","airflow","api","briefer","crm","dbt","docker","duckdb","etl","faker","fastapi","minio","n8n","pgduckdb","postgresql","pydantic","python","sqlalchemy","startup","streamlit"],"created_at":"2024-10-17T08:09:18.886Z","updated_at":"2025-10-16T19:31:26.202Z","avatar_url":"https://github.com/tsffarias.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e📊 LiftOff Data\u003c/h1\u003e \n\u003cdiv align=\"center\"\u003e\n    \u003ca href=\"https://www.python.org/\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/Python-14354C?style=for-the-badge\u0026logo=python\u0026logoColor=white\" target=\"_blank\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://www.postgresql.org/docs/\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/postgres-%23316192.svg?style=for-the-badge\u0026logo=postgresql\u0026logoColor=white\" target=\"_blank\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://fastapi.tiangolo.com/\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/FastAPI-005571?style=for-the-badge\u0026logo=fastapi\" target=\"_blank\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://streamlit.io/\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/Streamlit-FF4B4B?style=for-the-badge\u0026logo=streamlit\u0026logoColor=white\" target=\"_blank\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://www.sqlalchemy.org/\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/SQLAlchemy-323232?style=for-the-badge\u0026logo=sqlalchemy\u0026logoColor=white\" target=\"_blank\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://pydantic-docs.helpmanual.io/\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/Pydantic-3776AB?style=for-the-badge\u0026logo=pydantic\u0026logoColor=white\" target=\"_blank\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://docs.docker.com/\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge\u0026logo=docker\u0026logoColor=white\" target=\"_blank\"\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n\n\u003e Este projeto apresenta uma arquitetura de pipeline de dados de baixo custo, projetada para startups que precisam processar e analisar dados de vendas de forma eficiente.\n\n---\n\n### **Introdução**\n\nEste projeto descreve uma arquitetura de pipeline de dados de baixo custo voltada para startups, com foco em integração de dados de vendas a partir de APIs e CRMs, utilizando tecnologias modernas e acessíveis. O objetivo é criar uma solução escalável para ingestão, transformação e visualização de dados, garantindo que tanto engenheiros de dados quanto analistas possam colaborar eficientemente. A arquitetura proposta inclui a divisão do pipeline em múltiplas camadas (Bronze, Silver e Gold), integração com APIs, Airbyte para ingestão de dados, Airflow para orquestração e DBT para transformação de dados. A plataforma colaborativa \"Briefer\" também é integrada, permitindo que analistas de dados acessem e utilizem os dados transformados de forma eficiente.\n\n\u003cp align=\"center\"\u003e\n\u003cimg src = \"./img/arquitetura_1.6.png\"\u003e\n\u003c/p\u003e\n\n#### **Assistente IA Especialista em Analise de Dados e Vendas**\nAlém do pipeline de dados, o projeto inclui uma interface de assistente AI no Streamlit, que possibilita interagir com um modelo de IA, como ChatGPT ou Llama3. Essa interface oferece uma experiência prática para análise de vendas e insights, permitindo que analistas façam perguntas e obtenham respostas rápidas e insights relevantes.\n\n\u003cp align=\"center\"\u003e\n\u003cimg src = \"./img/top3_vendedores.png\"\u003e\n\u003c/p\u003e\n\n#### **Dashboard Interativo**\n\nComo parte da solução, desenvolvemos um **dashboard interativo** utilizando o Streamlit, que permite visualizar e analisar os dados de vendas e recursos humanos de forma intuitiva e eficiente. O dashboard apresenta métricas-chave, gráficos interativos e tabelas informativas, facilitando a tomada de decisões baseadas em dados.\n\n**Principais funcionalidades do dashboard:**\n\n- **Vendas ao Longo do Tempo:** Gráfico que mostra a evolução das vendas, ajudando a identificar tendências e sazonalidades.\n- **Vendas por Produto:** Análise dos produtos mais vendidos, destacando quais geram mais receita.\n- **Top 10 Melhores Vendedores:** Ranking dos vendedores com maior volume de vendas, reconhecendo a performance individual.\n- **Folha Salarial Mensal:** Acompanhamento dos custos mensais com salários, monitorando a evolução da folha de pagamento.\n- **Distribuição de Funcionários por Gênero:** Visualização da composição da equipe, promovendo insights sobre diversidade.\n- **Média Salarial por Cargo:** Comparação das remunerações médias entre diferentes posições na empresa.\n- **Contratações por Mês:** Gráfico que evidencia o ritmo de crescimento da equipe ao longo do tempo.\n- **Aniversariantes do Mês:** Lista dos funcionários que fazem aniversário no mês atual, fortalecendo o engajamento interno.\n\n\u003cp align=\"center\"\u003e\n\u003cimg src = \"./img/dashboard.png\"\u003e\n\u003c/p\u003e\n\nO dashboard foi projetado para ser acessível e fácil de usar, permitindo que membros da equipe sem conhecimento técnico aprofundado possam explorar e interpretar os dados disponíveis.\n\n### **Sequence Diagram**\n\nO diagrama abaixo ilustra a interação entre as principais camadas e componentes da arquitetura, desde a ingestão dos dados brutos até sua transformação e disponibilização para análise.\n```mermaid\nsequenceDiagram\n    participant U as Usuário\n    participant SW as Sistema Web Streamlit\n    participant V as Validação Pydantic\n    participant DB as Banco de Dados SQLAlchemy\n    \n    U -\u003e\u003e SW: Inserir Dados\n    SW -\u003e\u003e V: Enviar Dados para Validação\n    alt Dados Válidos\n        V -\u003e\u003e DB: Inserir Dados no Banco de Dados\n        DB -\u003e\u003e SW: Confirmação de Armazenamento\n        SW -\u003e\u003e U: Dados Salvos com Sucesso\n    else Dados Inválidos\n        V -\u003e\u003e SW: Retornar Erros de Validação\n        SW -\u003e\u003e U: Exibir Mensagem de Erro\n    end\n```\n\nO diagrama a seguir descreve o fluxo de dados desde a entrada do usuário no frontend até a validação dos dados e o salvamento no banco de dados, se aprovado.\n\n```mermaid\ngraph TD\n    A[Usuário Digita no Frontend] --\u003e B{Validação do Contrato de Dados}\n    \n    B -- Dados Válidos --\u003e C[Salva no Banco de Dados]\n    B -- Dados Inválidos --\u003e D[Erro de Validação Exibido]\n\n    A --\u003e |Entrada de Dados| B\n    B --\u003e |Validação pelo Pydantic| C\n    B --\u003e |Falha na Validação| D\n    C --\u003e E[Dados Salvos com Sucesso]\n    D --\u003e F[Mostrar Mensagem de Erro no Frontend]\n```\n\n---\n\n### **Tecnologias Utilizadas**\n\n#### PostgreSQL com pg_duckdb\n- **Descrição:** O PostgreSQL é um dos bancos de dados relacionais de código aberto mais robustos e amplamente adotados no mercado. Com a extensão pg_duckdb, ele ganha a capacidade de executar consultas analíticas complexas em um armazenamento colunar otimizado, combinando a escalabilidade e a confiabilidade do PostgreSQL com a performance analítica da DuckDB.\n- **Uso no Projeto:** Utilizado como banco de dados principal e para operações analíticas de grande volume, permitindo que consultas intensivas sejam processadas de forma mais rápida e eficiente.\n\n#### FastAPI com Swagger\n- **Descrição:** FastAPI é um framework moderno e de alto desempenho para a construção de APIs com Python 3.6+ baseado em tipos de dados. Ele é projetado para ser rápido e fácil de usar, oferecendo validação automática de dados e documentação interativa.\n- **Uso no Projeto:** Utilizado para criar a API que manipula dados de funcionários, produtos e vendas. O FastAPI gera automaticamente a documentação da API utilizando Swagger, permitindo que os desenvolvedores testem as endpoints diretamente pela interface.\n- **Acessando o Swagger:** Após iniciar a aplicação com o comando `uvicorn main:app --reload`, a documentação do Swagger pode ser acessada em `http://127.0.0.1:80/docs`.\n\n#### NGINX\n- **Descrição:** NGINX é um servidor web de alto desempenho que também pode atuar como um balanceador de carga e proxy reverso. Sua arquitetura assíncrona o torna extremamente rápido e eficiente no uso de recursos.\n- **Uso no Projeto:** O NGINX está sendo usado como load balancer, distribuindo as requisições entre múltiplas instâncias do backend (Backend-1, Backend-2, Backend-3). Assim, se algum backend estiver sobrecarregado, o NGINX encaminha requisições para outro backend disponível. Ele garante maior disponibilidade (caso um container falhe, ainda há outros disponíveis), ajuda na escalabilidade (suportando mais requisições) e melhora a performance ao distribuir de forma equilibrada o tráfego entre os backends.\n\n```mermaid\ngraph TD\n    A[Usuario] --\u003e|Envia Requisicao HTTP| B{NGINX Load Balancer}\n    B --\u003e|Distribui Requisicoes| C[Backend-1]\n    B --\u003e|Distribui Requisicoes| D[Backend-2]\n    B --\u003e|Distribui Requisicoes| E[Backend-3]\n```\n\n#### **Streamlit**\n\n- **Descrição:** Streamlit é uma biblioteca Python de código aberto que permite a criação de aplicativos web interativos de forma rápida e fácil. Utilizado principalmente para construir dashboards e interfaces de dados, o Streamlit é ideal para prototipagem rápida e visualização de dados sem a necessidade de conhecimentos avançados em desenvolvimento web.\n- **Uso no Projeto:** Utilizado para construir o frontend da aplicação, permitindo que os usuários insiram dados de vendas, fornecedores, funcionários e produtos de forma interativa e visualizem os resultados diretamente na interface, por meio de um dashboard.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src = \"./img/crud_vendas_1.1.png\"\u003e\n\u003c/p\u003e\n\n#### **Pydantic**\n\n- **Descrição:** Pydantic é uma biblioteca de validação de dados que utiliza modelos baseados em classes Python para garantir que os dados inseridos estejam no formato correto. É amplamente utilizada para validação e serialização de dados, garantindo integridade e consistência.\n- **Uso no Projeto:** Pydantic é utilizado para validar os dados inseridos pelos usuários no frontend, garantindo que as informações estejam corretas antes de serem processadas e salvas no banco de dados.\n\n#### **Psycopg2**\n\n- **Descrição:** Psycopg2 é uma biblioteca que permite a interação com bancos de dados PostgreSQL diretamente através de Python, facilitando a execução de comandos SQL e o gerenciamento das conexões.\n- **Uso no Projeto:** Utilizado para conectar a aplicação ao banco de dados PostgreSQL, executar comandos SQL, e salvar os dados validados.\n\n#### **SQLAlchemy**\n\n- **Descrição:** SQLAlchemy é uma poderosa biblioteca de SQL toolkit e ORM (Object-Relational Mapping) para Python. Ele permite a interação com bancos de dados relacionais de forma mais intuitiva, utilizando objetos Python em vez de comandos SQL diretamente.\n- **Uso no Projeto:** SQLAlchemy foi utilizado para gerenciar a conexão com o banco de dados PostgreSQL e facilitar as operações de CRUD.\n\n#### **MkDocs**\n\n- **Descrição:** MkDocs é uma ferramenta estática de documentação em Python que permite a criação de sites de documentação de forma simples e estruturada. É especialmente útil para projetos que precisam de uma documentação clara e acessível para os desenvolvedores e usuários.\n- **Uso no Projeto:** MkDocs é utilizado para gerar a documentação do sistema, detalhando como o projeto foi estruturado, as funcionalidades desenvolvidas, e como o sistema deve ser mantido e atualizado.\n- **Configuração e Execução:**\n  1. Para visualizar a documentação localmente, execute: `mkdocs serve`\n  2. Acesse a documentação em: `http://127.0.0.1:8000/`\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src = \"./img/mkdocs.png\"\u003e\n\u003c/p\u003e\n\n#### **MinIO**\n- **Descrição:** MinIO é uma solução de armazenamento de objetos de código aberto compatível com o protocolo Amazon S3, ideal para o armazenamento escalável de grandes volumes de dados. Ele permite o uso local de serviços de armazenamento distribuído para dados não estruturados, como arquivos, logs e objetos de dados.\n- **Uso no Projeto:** No contexto deste projeto, MinIO é utilizado para armazenar dados brutos de produtos, funcionarios e fornecedores, por exempo: imagens, documentos em pdf. Ele serve como a camada de armazenamento persistente dos dados nas fases de ingestão e transformação.\n\n#### **Airbyte**\n\n- **Descrição:** Airbyte é uma plataforma de integração de dados de código aberto que permite conectar facilmente APIs, bancos de dados e outros sistemas para ingestão de dados em tempo real.\n- **Uso no Projeto:** Responsável pela ingestão de dados a partir de diferentes APIs e fontes de dados, garantindo que os dados sejam movidos para as camadas corretas do pipeline.\n\n#### **Airflow**\n\n- **Descrição:** Apache Airflow é uma plataforma de orquestração de workflows que permite o agendamento e monitoramento de pipelines de dados.\n- **Uso no Projeto:** Orquestra a execução de todos os componentes do pipeline, desde a ingestão até a transformação dos dados.\n\n#### **DBT**\n\n- **Descrição:** DBT (Data Build Tool) é uma ferramenta de transformação de dados que permite a construção de modelos SQL e a aplicação de boas práticas de desenvolvimento de software ao ETL.\n- **Uso no Projeto:** Utilizado para transformar os dados das camadas Bronze e Silver, preparando-os para a camada Gold, onde estarão prontos para consumo pelos analistas.\n\n\u003cp align=\"center\"\u003e\n\u003cimg src = \"./img/lineage.png\"\u003e\n\u003c/p\u003e\n\n#### **Briefer**\n\n- **Descrição:** Briefer é uma plataforma colaborativa de dados que permite que equipes de analistas acessem, compartilhem e analisem dados de maneira colaborativa.\n- **Uso no Projeto:** Facilita o acesso e a exploração dos dados transformados pelos analistas, proporcionando um ambiente colaborativo para análise de dados.\n\n\u003cp align=\"center\"\u003e\n\u003cimg src = \"./img/briefer.png\"\u003e\n\u003c/p\u003e\n\n#### **n8n**\n\n- **Descrição:** n8n é uma plataforma de automação de código aberto que permite criar workflows integrando diferentes ferramentas e serviços. Com uma interface visual intuitiva, é possível configurar processos complexos sem necessidade de codificação extensiva.\n- **Uso no Projeto:** Utilizado para criar um fluxo automatizado que:\n  1. Executa uma query no PostgreSQL para gerar uma audiência personalizada baseada nos produtos vendidos.\n  2. Através de um Assistente IA com modelo chatpgt 4, é gerado um copy personalizado para o email marketing da audiência gerado no passo anterior.\n  2. Envia informações de audiência personalizada diretamente para WhatsApp, Telegram e e-mail, facilitando a comunicação e engajamento com clientes.\n\n\u003cp align=\"center\"\u003e\n\u003cimg src = \"./img/n8n_fluxo_1.1.png\"\u003e\n\u003c/p\u003e\n\n### Descrição da Audiência Personalizada:\n\nEssa audiência identifica clientes com base em suas compras recentes (últimos 3 dias) e recomenda o produto mais vendido na mesma categoria, excluindo o produto que já adquiriram. O objetivo é alavancar vendas adicionais por meio de recomendações personalizadas, utilizando insights das tendências de vendas dentro de categorias específicas.\n\nA lógica utilizada para gerar essa audiência é implementada na seguinte query:\n\n```sql\nWITH category_top_products AS (\n    SELECT \n        p.categoria,\n        s.name_product,\n        p.description,\n        p.price,\n        COUNT(s.id) AS total_sales\n    FROM sales AS s\n    INNER JOIN products AS p ON p.name = s.name_product\n    WHERE s.date \u003e= CURRENT_DATE - INTERVAL '3 month'\n    GROUP BY p.categoria, s.name_product, p.description, p.price\n    ORDER BY p.categoria, total_sales DESC\n),\ncustomer_last_purchase AS (\n    SELECT \n        s.email_customer,\n        s.first_name,\n        s.last_name,\n        s.phone_number,\n        s.name_product AS last_purchased_product,\n        p.categoria AS last_purchased_category\n    FROM sales AS s\n    INNER JOIN products AS p ON p.name = s.name_product\n    WHERE s.date \u003e= CURRENT_DATE - INTERVAL '3 days'\n),\nrecommended_products AS (\n    SELECT \n        clp.email_customer,\n        clp.first_name,\n        clp.last_name,\n        clp.phone_number,\n        clp.last_purchased_product,\n        clp.last_purchased_category,\n        ctp.name_product AS recommended_product,\n        ctp.description AS recommended_description,\n        ctp.price AS recommended_price\n    FROM customer_last_purchase AS clp\n    INNER JOIN category_top_products AS ctp \n        ON clp.last_purchased_category = ctp.categoria\n        AND clp.last_purchased_product \u003c\u003e ctp.name_product\n)\nSELECT DISTINCT ON (email_customer) *\nFROM recommended_products\nORDER BY email_customer, recommended_price DESC;\n```\n\nEmail de exemplo enviado ao cliente com uma recomendação personalizada utilizando n8n e Assistente IA especializado em Copy e Email Marketing:\n\u003cp align=\"center\"\u003e\n\u003cimg src = \"./img/n8n_email_1.1.png\"\u003e\n\u003c/p\u003e\n\n### Importância:\n\n1. **Personalização**: Oferece uma experiência personalizada ao cliente, aumentando a probabilidade de engajamento e compra.\n2. **Maximização de Vendas**: Promove produtos populares dentro da mesma categoria, otimizando o cross-selling e impulsionando a receita.\n3. **Insights Baseados em Dados**: Utiliza tendências de vendas históricas para identificar produtos com maior potencial de sucesso.\n4. **Satisfação do Cliente**: Reforça a percepção de valor da marca ao sugerir produtos alinhados às preferências dos clientes.\n\nEssa abordagem é essencial para negócios que desejam aumentar a conversão e fortalecer a fidelidade dos clientes, aproveitando dados históricos e padrões de comportamento.\n\n---\n\n### **Estrutura do Projeto**\n\n#### **Divisão dos Módulos**\n\nO projeto está dividido em módulos para organizar melhor o desenvolvimento e facilitar a manutenção futura. A seguir, estão os principais módulos do projeto:\n\n1. **Frontend (`app.py`):**\n   - Responsável pela interface do usuário onde os dados de vendas são inseridos e exibidos.\n   - Desenvolvido com Streamlit para proporcionar uma interação simples e amigável.\n\n2. **Contrato (`\u003cmodel_name\u003e_schema.py.py`):**\n   - Define as regras de validação dos dados utilizando Pydantic.\n   - Assegura que os dados inseridos no frontend estão no formato correto e cumprem as regras estabelecidas pelo sistema.\n\n3. **Banco de Dados (`database.py`):**\n   - Gerencia a conexão e as operações com o banco de dados PostgreSQL utilizando Psycopg2.\n   - Facilita a interação com o banco sem a necessidade de escrever SQL diretamente.\n\n### Diagrama de Fluxo das Camadas Bronze, Silver e Gold no DBT\n\nO pipeline de dados é dividido em três camadas principais para garantir a qualidade e integridade dos dados à medida que eles progridem no sistema:\n\n```mermaid\ngraph TD\n    A[Raw Data Source] --\u003e|Extrai dados brutos| B[Bronze Layer]\n    B[Bronze Layer] --\u003e|Limpeza de dados| C[Silver Layer]\n    C[Silver Layer] --\u003e|Agregação e cálculos| D[Gold Layer - Vendas por Produto]\n    C[Silver Layer] --\u003e|Agregação e cálculos| E[Gold Layer - Vendas por Vendedor]\n    \n    subgraph Bronze\n        B1[bronze_vendas.sql]\n    end\n    \n    subgraph Silver\n        S1[silver_vendas.sql]\n    end\n    \n    subgraph Gold\n        G1[gold_vendas_7_dias.sql]\n        G2[gold_vendas_por_vendedor.sql]\n    end\n```\n\n### Explicação do Diagrama\n\n- **Bronze Layer:** Esta camada recebe os dados brutos diretamente das fontes, criando uma visualização inicial sem transformações significativas.\n  \n- **Silver Layer:** Nesta etapa, os dados são limpos, ajustando datas inválidas e removendo outliers. É a fase em que os dados começam a ser preparados para análise.\n\n- **Gold Layer:** Dados finais prontos para análise e visualização, acessíveis por ferramentas como o Briefer.\n  - **Gold Vendas por Produto:** Agrega e calcula os dados para apresentar o desempenho dos produtos nos últimos 7 dias.\n  - **Gold Vendas por Vendedor:** Apresenta o desempenho dos vendedores, também focando nos últimos 7 dias.\n\n---\n\n### **Passos para Configuração e Execução**\n\n## Instalação via Docker\n1. Antes de rodar o Docker, crie um arquivo `.env` na raiz do projeto com os seguintes valores:\n\n```plaintext\nDB_HOST_PROD = postgres\nDB_PORT_PROD = 5432\nDB_NAME_PROD = mydatabase\nDB_USER_PROD = user\nDB_PASS_PROD = password\nPGADMIN_EMAIL = email_pgadmin\nPGADMIN_PASSWORD = password_pgadmin\n\nOPENAI_API_KEY= api_key\nGROQ_API_KEY= api_key\n```\n\n2. Para iniciar a aplicação, execute:\n\n```bash\ndocker-compose up -d --build\n```\n\n### **Geração de Dados Fake e Inserção no Banco de Dados**\nEste projeto inclui um pipeline para geração e inserção de dados fictícios de forma automatizada:\n- **Geração de dados com Faker**: os scripts utilizam a biblioteca Faker para criar dados de teste em escala realista para várias tabelas de negócios, incluindo `employees`, `products`, `sales`, e `suppliers`.\n- **Inserção no PostgreSQL**: os dados gerados são salvos em arquivos Parquet e carregados diretamente no banco de dados PostgreSQL usando DuckDB, com ajuste de sequências para prevenir problemas de IDs duplicados.\n\n#### **Passos para Gerar e Inserir os Dados no Banco de Dados**\n\n1. Acesse o container `backend` para executar os scripts de geração e carregamento de dados:\n    ```bash\n    docker-compose exec backend sh\n    ```\n\n2. Execute os seguintes comandos para gerar e inserir os dados:\n\n    - Gerar dados em formato Parquet:\n        ```bash\n        python generate_dataset/generate_raw.py\n        ```\n\n    - Inserir os dados gerados no PostgreSQL:\n        ```bash\n        python generate_dataset/load_raw_to_postgres.py\n        ```\n\n3. **Executar DBT para Processamento de Dados**  \n   Para rodar o DBT (Data Build Tool) e transformar os dados, execute:\n   ```bash\n   cd app/backend/data_warehouse/\n   dbt run # ou dbt --log-level debug run\n   ```\n\n4. **Gerar Arquivos para o Assistente OpenAI**  \n   Para extrair dados e criar arquivos JSON que serão utilizados pelo assistente OpenAI:\n   ```bash\n   docker-compose exec frontend sh\n   python AI/extract_data_json.py\n   python AI/create_assistent_exemplo.py\n   ```\n\n5. **Criar o Assistente de IA na OpenAI**\nPara configurar o projeto e permitir que ele se comunique com o assistente de IA, é necessário criar um assistente personalizado na plataforma da OpenAI e recuperar o `ASSISTANT_ID`. Este ID será usado para vincular o código ao assistente que você criou, garantindo que todas as funcionalidades de IA estejam operacionais.\n\n- **Passo a Passo:**\n  1. Acesse a plataforma da OpenAI e navegue até a seção de **Assistentes de IA**.\n  2. Crie um novo assistente com as configurações desejadas, de acordo com os requisitos do projeto. (faça o upload dos arquivos .json também)\n  3. Ao finalizar a criação, copie o `ASSISTANT_ID` fornecido.\n\n- **Configuração do Código:**\n  1. Abra o arquivo `app/frontend/AI/main.py`.\n  2. Localize a variável `ASSISTANT_ID` e substitua o valor pelo `ASSISTANT_ID` copiado da plataforma da OpenAI.\n  \n  Exemplo:\n  ```python\n  ASSISTANT_ID = \"seu_assistant_id_aqui\"\n  ```\n\n#### **Prompt do Assistente de Vendas**\n\n\u003e **Assistente Especializado em Vendas**  \n\u003e Você é um especialista em análise e insights para equipes de vendas, focado em otimizar o desempenho de vendas, gerenciar estoques de maneira eficiente e melhorar o relacionamento com fornecedores. Sua expertise abrange a análise de dados de produtos, avaliação de desempenho de vendedores, produtividade dos funcionários e gestão de fornecedores.\n\u003e\n\u003e Para cada solicitação, responda com um resumo direto e insights práticos, seguidos de recomendações detalhadas.  \n\u003e A linguagem deve ser profissional, objetiva e prática, utilizando gráficos e visualizações sempre que possível para facilitar a compreensão dos dados.\n\n---\n\n### **6. Abrir a Interface do Assistente AI no Streamlit**  \n   Para acessar a interface do assistente especializada em análise de vendas e insights:\n   ```bash\n   streamlit run app/frontend/AI/main.py\n   ```\n\n### **7. Executar o Frontend**\n\nEste projeto oferece uma interface visual desenvolvida em Streamlit, onde é possível visualizar e interagir com os dados carregados.\n\n- **Comando para iniciar o frontend no Streamlit** (disponível em [http://localhost:8501/](http://localhost:8501/)):\n```bash\nstreamlit run app/frontend/app.py\n```\n\n--- \n\n\n### **Conclusão**\n\nEste projeto de arquitetura de pipeline de dados para startups oferece uma solução eficiente, escalável e de baixo custo para lidar com o processamento e análise de grandes volumes de dados de vendas. Com a utilização de ferramentas modernas como Airbyte, Airflow, DBT e Briefer, o pipeline garante a ingestão, transformação e disponibilização dos dados em camadas organizadas (Bronze, Silver, Gold), permitindo uma análise colaborativa e em tempo real.\n\nEssa arquitetura modular e flexível facilita a adaptação e o crescimento conforme a demanda aumenta, tornando-se uma excelente escolha para startups que precisam otimizar seus processos de dados sem comprometer o orçamento.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftsffarias%2Fliftoff_data","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftsffarias%2Fliftoff_data","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftsffarias%2Fliftoff_data/lists"}