Pular para o conteúdo
Diego AquinoAnalista de Dados e BI

Casos

Seis casos, cada um com uma pergunta de negócio.

Projetos de portfólio que mostram como eu trabalho: a pergunta, o que foi feito e o que dá para conferir no GitHub. Os detalhes técnicos ficam recolhidos em cada caso.

Nenhum caso é trabalho feito para cliente real, e nenhum afirma ganho em dinheiro ou tempo medido em operação. Todos usam dados fictícios ou sintéticos, e o que está escrito como resultado é o que o repositório mostra: testes e execução. Minha experiência profissional está resumida em Sobre.

Caso 01 · Financeiro

O repasse do gateway de pagamento está de acordo com o contrato?

Projeto de portfólio · dados fictícios

Repositório: auditor-de-repasses

Capa do caso auditor-de-repasses: saída real do terminal do eval em modo demo, com 20 cenários de divergências plantadas. Nos cinco tipos de divergência, as achadas são iguais às plantadas, sem perdidas nem falsas; recall do motor de 100%, extração de regras correta em 20 de 20 e resultado APROVADO. Ao lado, pytest com 66 testes passando.Capa do caso auditor-de-repasses: saída real do terminal do eval em modo demo, com 20 cenários de divergências plantadas. Nos cinco tipos de divergência, as achadas são iguais às plantadas, sem perdidas nem falsas; recall do motor de 100%, extração de regras correta em 20 de 20 e resultado APROVADO. Ao lado, pytest com 66 testes passando.
Na capa: saída real do eval em modo demo (o modo demo mede o código, não a IA), rodado em 05/10/2026, commit fa93b06.

Cenário de exemplo: uma empresa recebe repasses com taxas e prazos definidos em contrato. O projeto confere cada transação contra o contrato, agrupa as divergências pelo padrão do erro e prepara a contestação para uma pessoa aprovar. A saída é um relatório em Excel.

O que mostra. Na demonstração, com 248 transações, apareceram 80 divergências em 5 grupos.

Limite. Nos testes em modo demonstração, mede-se o código, não a IA.

  • Python
  • Relatório em Excel
  • Conciliação
Detalhes técnicos, testes e limites completos
Contexto
Cenário fictício: um seller de e-commerce que recebe repasses de um payment gateway, com descontos de MDR, antecipação, estornos e prazos de pagamento.
Problema
Conferir linha a linha contra o contrato é manual e lento. Cobrança indevida vira perda silenciosa, e a divergência a favor passa despercebida até o parceiro cobrar de volta.
Abordagem
Um agente de IA lê o contrato em PDF e uma pessoa confere as regras extraídas. A conciliação em si é código determinístico, com dinheiro em Decimal. As divergências são agrupadas pelo padrão do erro, e cada grupo recebe uma análise (causa provável, cláusula, minuta de contestação) que uma pessoa aprova. A IA não escreve valores: uma checagem acusa qualquer número monetário que não veio do motor. A saída é um relatório em Excel.
Stack
  • Python
  • pydantic
  • Streamlit
  • pytest
  • ruff
  • mypy
  • GitHub Actions
  • Gemini (opcional, há modo demo)
Resultado verificável
Na demonstração, com 248 transações fictícias: 80 divergências em 5 grupos, e 5 chamadas de IA em vez de 80. O eval com divergências plantadas (20 cenários, modo demo) achou todas as plantadas, sem alarme falso. 66 testes automatizados, com lint e tipos checados no CI.
conferido

Contagem de testes e último CI na branch principal conferidos no repositório em 02/10/2026. Contei as funções de teste e vi o CI passar; não reexecutei a suíte.

Limites
O eval em modo demo mede o código (motor, agrupador, checagens), não a IA; a medição com o Gemini é um próximo passo do README. Um parceiro e um formato de CSV; sem chargeback.

Caso 02 · Financeiro

Como juntar extratos de vários bancos sem duplicar lançamento?

Projeto de portfólio · dados sintéticos, sem bancos reais

Repositório: conciliacao-bancaria-automacao

Capa do caso conciliacao-bancaria-automacao: saída real do terminal da esteira rodada duas vezes sobre o mesmo lote sintético. Na primeira execução, 216 novas transações inseridas com chave SHA-256 única; na segunda, as 216 transações idênticas são detectadas e ignoradas. Ao lado, pytest com 30 testes passando.Capa do caso conciliacao-bancaria-automacao: saída real do terminal da esteira rodada duas vezes sobre o mesmo lote sintético. Na primeira execução, 216 novas transações inseridas com chave SHA-256 única; na segunda, as 216 transações idênticas são detectadas e ignoradas. Ao lado, pytest com 30 testes passando.
Na capa: saída real da etapa 1 da esteira, rodada duas vezes sobre o lote de referência, rodado em 05/10/2026, commit 7a4e1a7.

Cenário hipotético: uma área financeira com 8 contas em bancos diferentes, cada extrato num formato. O projeto junta tudo num banco SQL, impede lançamento duplicado e aponta duplicidade, valor fora do padrão e lançamento acima do teto de alçada, com um painel com filtros.

O que mostra. Processar de novo o mesmo lote de 216 transações não duplicou nenhuma: as 216 foram ignoradas.

Limite. Roda em modo demonstração, com banco local.

  • Python
  • SQL
  • Power Query
  • Painel HTML
Detalhes técnicos, testes e limites completos
Contexto
Cenário hipotético: uma área financeira com 8 contas em bancos diferentes, cada extrato num formato e num horário. Os bancos e os dados são sintéticos; não há integração com nenhuma instituição real.
Problema
Extratos em formatos distintos, cargas repetidas que duplicam lançamentos e divergências que só aparecem no fechamento.
Abordagem
Esteira de ponta a ponta: extração (retentativa com backoff e circuit breaker por banco), ETL em Power Query, persistência em SQL com chave idempotente (SHA-256 e UNIQUE), regras de divergência (duplicata, outlier e teto de alçada), trilha de auditoria e painel HTML com filtros.
Stack
  • Python
  • pandas
  • SQL (T-SQL e SQLite)
  • Power Query (M)
  • Chart.js
  • GitHub Actions
Resultado verificável
30 testes automatizados, rodando no CI em Python 3.12 e 3.13. Reprocessar o lote de referência (216 transações sintéticas) não duplica nada: as já gravadas são ignoradas. O projeto não afirma ganho financeiro nem de tempo.
conferido

Contagem de testes e último CI na branch principal conferidos no repositório em 02/10/2026. Contei as funções de teste e vi o CI passar; não reexecutei a suíte.

Limites
Roda em modo demo (SQLite; o T-SQL é o modelo-alvo). A chave idempotente é por conteúdo: duas compras idênticas no mesmo segundo seriam tratadas como uma. A extração é sequencial.

Caso 03 · Preço

Qual preço anunciar em cada canal de venda sem ter prejuízo?

Projeto de portfólio · dados de exemplo fictícios

Repositório: dashboard-precificacao

Capa do caso dashboard-precificacao: trecho real do código do motor de precificação (pricing.js), com o comentário que define Valor Base, lucro extra e margem e a fórmula do preço em cada faixa de taxa. Ao lado, a execução dos testes de unidade com 32 aprovados e nenhuma falha.Capa do caso dashboard-precificacao: trecho real do código do motor de precificação (pricing.js), com o comentário que define Valor Base, lucro extra e margem e a fórmula do preço em cada faixa de taxa. Ao lado, a execução dos testes de unidade com 32 aprovados e nenhuma falha.
Na capa: trecho real do motor de cálculo; testes de unidade executados, rodado em 05/10/2026, commit af38327.

Quem vende o mesmo produto em vários marketplaces precisa saber por quanto anunciar em cada um, e a taxa muda conforme a faixa de preço. O painel calcula o preço certo por canal e avisa quando a margem desejada é inatingível. Roda no navegador, sem login.

O que mostra. Exemplo do README: a fórmula simples dá prejuízo em cada venda; o preço certo fica numa faixa acima.

Limite. As taxas padrão vêm de fontes secundárias e precisam ser conferidas no painel do vendedor.

  • JavaScript
  • Painel web
  • Regras de negócio
Detalhes técnicos, testes e limites completos
Contexto
Quem vende o mesmo produto em vários marketplaces (Shopee, Mercado Livre, TikTok Shop e Shein) precisa saber por quanto anunciar em cada canal. É a reescrita, com testes, de uma ferramenta que fiz antes para consultorias. Roda no navegador, sem login.
Problema
A taxa muda conforme a faixa de preço, e o preço depende da taxa. Na planilha, o erro comum é usar a taxa da faixa errada. Exemplo do README: a fórmula simples usa a taxa da faixa errada e, nesse preço, o marketplace cobra mais, então cada venda dá prejuízo; o preço certo fica numa faixa acima.
Abordagem
Um motor de cálculo puro (sem DOM) resolve o preço em cada faixa de taxa e fica com o menor preço consistente; se nenhuma faixa serve, responde “margem inatingível” em vez de um número absurdo. A importação de catálogo (CSV ou Google Sheets) relata cada linha ignorada e o motivo. As taxas são editáveis, com vigência e fonte.
Stack
  • JavaScript (JSDoc e TypeScript strict)
  • Node.js
  • ESLint
  • Prettier
  • GitHub Actions
Resultado verificável
32 testes de unidade e 13 de ponta a ponta no Chrome (números do README; não os reexecutei). Cinco bugs da versão anterior estão cobertos por teste. A demonstração pública respondeu normalmente em 02/10/2026.
Limites
As taxas padrão vêm de fontes secundárias (consultadas em 10/2026) e precisam ser conferidas no painel do vendedor. A comissão por categoria não está modelada.

Caso 04 · Estoque

Como avisar a equipe quando o estoque está acabando?

Projeto de portfólio · sem dados de operação no repositório

Repositório: wms-bling

Capa do caso wms-bling: diagrama do fluxo gerado a partir do código. Um agendamento node-cron a cada hora chama executarVerificacao, que filtra os produtos em risco e envia alertas a um grupo do WhatsApp; o servidor Express expõe as rotas de produtos, checkout, WMS e exportação e consulta a API v3 do Bling. Ao lado, node --test com 7 testes aprovados e nenhuma falha.Capa do caso wms-bling: diagrama do fluxo gerado a partir do código. Um agendamento node-cron a cada hora chama executarVerificacao, que filtra os produtos em risco e envia alertas a um grupo do WhatsApp; o servidor Express expõe as rotas de produtos, checkout, WMS e exportação e consulta a API v3 do Bling. Ao lado, node --test com 7 testes aprovados e nenhuma falha.
Na capa: fluxo extraído do código (rotas, cron e funções); testes das regras do robô executados, rodado em 05/10/2026, commit 07d3f08.

Para uma loja com o estoque no ERP Bling, o projeto lê o estoque pela API, mostra painéis de estoque e de conferência de pedidos e envia, a cada hora, um alerta num grupo de WhatsApp com os produtos zerados ou com estoque baixo.

O que mostra. 7 testes cobrem as regras do robô de alertas. O README não mede efeito na operação.

Limite. Pensado para rede interna, sem login nos painéis; os testes cobrem só as regras do robô.

  • Node.js
  • API do Bling
  • Automação
Detalhes técnicos, testes e limites completos
Contexto
Loja de moda omnichannel que vende no site próprio e em marketplaces, com o estoque controlado no ERP Bling. O repositório não traz dados de operação e, para rodar, exige credenciais próprias do Bling.
Problema
Produtos zeravam sem ninguém perceber e o anúncio continuava ativo; a conferência de pedidos era manual, com erro de item e de baixa; as planilhas de estoque para o hub de marketplaces eram montadas à mão.
Abordagem
Servidor Node.js que integra a API v3 do Bling (OAuth 2.0 com renovação automática do token e cache de 30 minutos para respeitar limites), três painéis web (estoque, conferência de pedidos, entrada e saída), exportação de ZIP de estoque para o hub e um robô horário que avisa produtos zerados ou com estoque baixo em um grupo de WhatsApp, em lotes.
Stack
  • Node.js
  • Express
  • Bling API v3
  • OAuth 2.0
  • node-cron
  • whatsapp-web.js
  • GitHub Actions
Resultado verificável
7 testes (node --test) cobrem as regras puras do robô de alertas e rodam sem Bling nem WhatsApp; CI em Node 20 e 22. O README não mede o efeito na operação: não há número de resultado.
conferido

Contagem de testes e último CI na branch principal conferidos no repositório em 02/10/2026. Contei as funções de teste e vi o CI passar; não reexecutei a suíte.

Limites
O cache é em memória (sem histórico). Pensado para rede interna, sem autenticação nos painéis. Os testes cobrem só as regras do robô; a integração com o Bling e os painéis não têm teste automatizado. O envio usa a biblioteca não oficial whatsapp-web.js.

Caso 05 · Anúncios

Como pesquisar preço e montar anúncio sem refazer tudo à mão?

Projeto de portfólio · sem dados de clientes no repositório

Repositório: radar-marketplace

Capa do caso radar-marketplace: trecho real da saída do pytest em modo detalhado, com testes de precificação, limpeza de vendas, schema da ficha técnica e parser do scraper, todos PASSED, e o resumo de 25 testes aprovados.Capa do caso radar-marketplace: trecho real da saída do pytest em modo detalhado, com testes de precificação, limpeza de vendas, schema da ficha técnica e parser do scraper, todos PASSED, e o resumo de 25 testes aprovados.
Na capa: saída real do pytest; agentes, integrações e RPA não têm teste (dependem de APIs externas), rodado em 05/10/2026, commit 32b4b13.

Para uma loja de moda no Mercado Livre, o projeto reúne os anúncios de uma busca, calcula preço mínimo e preço-alvo já descontadas as taxas e usa IA para sugerir a ficha técnica a partir das fotos. O resultado passa por checagem de formato.

O que mostra. 25 testes automatizados passaram quando rodei em 05/10/2026, sem rede e sem chave de API.

Limite. A coleta de dados públicos precisa respeitar os termos de uso do marketplace; agentes, integrações e robô de publicação não têm teste.

  • Python
  • Streamlit
  • IA aplicada
Detalhes técnicos, testes e limites completos
Contexto
Loja de moda que vende no Mercado Livre, onde cada produto novo exigia horas de trabalho manual: pesquisar a concorrência, precificar, criar o anúncio e acompanhar a saúde dele.
Problema
Pesquisar preço e volume da concorrência, precificar depois das taxas e promoções, montar título, ficha técnica e fotos, e corrigir o que o marketplace penaliza: tudo à mão, para cada produto.
Abordagem
Dashboard Streamlit que extrai até 500 anúncios de uma busca e consolida preço, desconto e vendas com pandas; cálculo de preço mínimo, preço-alvo e kit já descontadas as taxas; análise SWOT por IA; agente que lê fotos da peça e devolve a ficha técnica em JSON validado (Pydantic); auditor de anúncio; robô Playwright de publicação; integração OAuth com a API do Mercado Livre.
Stack
  • Python
  • pandas
  • Streamlit
  • Playwright
  • Pydantic
  • Gemini
  • API Mercado Livre
Resultado verificável
25 testes pytest (número do perfil no GitHub; não os reexecutei) cobrem precificação, limpeza de vendas, o parser do scraper (com HTML simulado) e o schema da ficha técnica; rodam sem rede e sem chave, e no CI. Agentes, integrações e RPA não têm teste, porque dependem de APIs externas, como o README já avisa.
Limites
A coleta de dados públicos precisa respeitar os termos de uso do marketplace; para uso contínuo, o README recomenda a API oficial.

Caso 06 · Fotos de produto

Como gerar fotos de produto fiéis à peça sem escrever prompt?

Projeto de portfólio · marca de exemplo fictícia

Repositório: estudio-fotos-marketplace

Capa do caso estudio-fotos-marketplace: trecho real da função SQL reserve_credit, que trava a linha do perfil com for update, recusa quando não há crédito e só então debita e registra a reserva. Ao lado, a execução do vitest com 50 testes aprovados e 11 pulados por exigirem PostgreSQL.Capa do caso estudio-fotos-marketplace: trecho real da função SQL reserve_credit, que trava a linha do perfil com for update, recusa quando não há crédito e só então debita e registra a reserva. Ao lado, a execução do vitest com 50 testes aprovados e 11 pulados por exigirem PostgreSQL.
Na capa: trecho real da função SQL; vitest executado (11 testes pulados: exigem PostgreSQL), rodado em 05/10/2026, commit ca6af3b.

Ferramenta para gerar fotos de produto para marketplaces, fiéis à peça de referência. Tem login, um assistente em 3 etapas e cota de créditos: o crédito é reservado antes da geração e devolvido se ela falhar.

O que mostra. 50 testes passaram e 11 foram pulados (exigem PostgreSQL) quando rodei em 05/10/2026.

Limite. A chamada real ao Gemini e o fluxo completo no navegador não foram exercitados no repositório.

  • Next.js
  • TypeScript
  • IA generativa
Detalhes técnicos, testes e limites completos
Contexto
Ferramenta interna para uma empresa gerar fotos de produto para marketplaces, fiéis à peça de referência, sem precisar escrever prompts. A marca “Ateliê Aurora” do exemplo é fictícia. O README traz um relato do autor sobre o problema de origem, que não é verificável pelo código.
Problema
Segundo o relato do autor no README (não verificável): gerar imagens para e-commerce consumia horas dos colaboradores, com resultado inconsistente.
Abordagem
App Next.js com login Supabase, assistente em 3 etapas e prompt montado no servidor a partir de parâmetros tipados, com geração pelo Gemini. A cota de créditos usa reserva atômica no Postgres, com confirmação ou estorno, e há limite de requisições por minuto. A galeria usa armazenamento privado.
Stack
  • Next.js
  • React
  • TypeScript
  • Supabase (Auth, Postgres, Storage)
  • Gemini
  • Vitest
  • GitHub Actions
Resultado verificável
61 testes (número do perfil no GitHub; não os reexecutei; 11 exigem PostgreSQL e rodam no CI), incluindo o débito de créditos testado em Postgres real com 12 requisições concorrentes disputando 3 créditos.
Limites
A chamada real ao Gemini e o fluxo completo no navegador não foram exercitados no repositório. A fidelidade à peça é só instrução de prompt, sem verificação automática. As migrações não foram aplicadas num projeto Supabase real. A licença não está definida.

Quer algo parecido

Tem um problema desse tipo.

Conte de onde vem o dado e o que precisa bater. A conversa inicial é gratuita.