← Projetos
Concluído Projeto privado · detalhes abstraídos

Inteligência operacional de delivery

Uma camada independente que transforma eventos transacionais de delivery em histórico confiável, alertas roteados e sinais para decisão operacional.

  1. Fonte
  2. Ingestão
  3. Contrato
  4. Processamento
  5. Persistência
  6. Alertas
  7. Painel

Competências demonstradas

  • Analytics
  • Data Modeling
  • TypeScript
  • Observability
  • TypeScript
  • Next.js
  • PostgreSQL
  • Workers
  • Scheduler
  • APIs HTTP
  • Mensageria
14 min de leitura

Painel

Visão do dia

Recorte ilustrativo. Unidades, itens e origem da plataforma não são publicados.

Antes

Consulta manual

  1. 01 O evento fica na ferramenta da operação
  2. 02 Alguém abre, lê e decide se importa
  3. 03 Avisa o grupo — se lembrar de quem é o dono
  4. 04 Para ver se é padrão, tem que consultar de novo

Depois

Alerta e painel

  1. 01 O evento entra no contrato interno
  2. 02 Classifica, deduplica e persiste
  3. 03 O grupo da unidade recebe o sinal
  4. 04 Quem investiga abre o painel e vê o recorte

Pedidos hoje

720

Cancelamentos

26

Taxa de cancelamento

3,6%

Ocorrências de item

12

Taxa de ocorrência

1,7%

Cancelamentos por hora
ocorrências
1
00h
3
03h
2
09h
7
12h
4
15h
5
18h
Cancelamentos por hora
00h 1 ocorrências
03h 3 ocorrências
09h 2 ocorrências
12h 7 ocorrências
15h 4 ocorrências
18h 5 ocorrências
Por categoria
ocorrências
4
Cliente
9
Item ausente
8
Item trocado
5
Outros
Por categoria
Cliente 4 ocorrências
Item ausente 9 ocorrências
Item trocado 8 ocorrências
Outros 5 ocorrências
Por motivo
ocorrências
  • Item incompleto 6
  • Unidade fechada 4
  • Item danificado 3
  • Outro 2
Por motivo
Item incompleto 6 ocorrências
Unidade fechada 4 ocorrências
Item danificado 3 ocorrências
Outro 2 ocorrências
Unidades com mais impacto
ocorrências
  • Unidade 01 8
  • Unidade 02 4
  • Unidade 03 3
  • Unidade 04 3
  • Unidade 05 2
Unidades com mais impacto
Unidade 01 8 ocorrências
Unidade 02 4 ocorrências
Unidade 03 3 ocorrências
Unidade 04 3 ocorrências
Unidade 05 2 ocorrências
Itens com mais ocorrência
ocorrências
  • Item A 2
  • Item B 2
  • Item C 2
  • Item D 1
  • Item E 1
Itens com mais ocorrência
Item A 2 ocorrências
Item B 2 ocorrências
Item C 2 ocorrências
Item D 1 ocorrências
Item E 1 ocorrências
Arquitetura
  1. Fonte operacional

    Origem autorizada

    Por quê / trade-offs
    Por que foi escolhido
    Captura os eventos que já existem na operação sem acoplar o restante do sistema ao contrato externo.
    Problema que resolve
    Estados, cancelamentos e evidências chegam com semântica específica da origem.
    Trade-offs
    A integração precisa acompanhar mudanças da fonte; o adaptador concentra esse custo.
  2. Ingestão

    APIs HTTP / observação autorizada

    Por quê / trade-offs
    Por que foi escolhido
    Define uma fronteira única para receber somente os eventos necessários ao processamento.
    Problema que resolve
    Mais de uma estratégia de entrada precisa convergir para o mesmo pipeline.
    Trade-offs
    A solução preserva flexibilidade, mas exige rastreabilidade por origem.
  3. Contrato interno

    TypeScript

    Por quê / trade-offs
    Por que foi escolhido
    Normaliza pedidos, eventos, itens e metadados de evidência em um modelo próprio.
    Problema que resolve
    Dashboards, regras e notificações não devem depender de payloads externos.
    Trade-offs
    O modelo interno precisa evoluir sem perder compatibilidade histórica.
  4. Processamento

    Pipeline idempotente

    Por quê / trade-offs
    Por que foi escolhido
    Valida, identifica, deduplica e classifica cada ocorrência antes de gerar efeitos.
    Problema que resolve
    Eventos podem ser repetidos, incompletos ou chegar fora da ordem esperada.
    Trade-offs
    Deduplicação reduz efeitos duplicados, mas requer uma chave de identidade bem definida.
  5. Persistência

    PostgreSQL

    Por quê / trade-offs
    Por que foi escolhido
    Mantém o histórico relacional por grupo, unidade, pedido, evento e item.
    Problema que resolve
    A operação precisa investigar o presente e comparar períodos anteriores.
    Trade-offs
    O relacional atende ao recorte operacional.
  6. Workers e agendamentos

    Jobs assíncronos

    Por quê / trade-offs
    Por que foi escolhido
    Separa agregações, regras periódicas, relatórios e integrações lentas da captura principal.
    Problema que resolve
    Comunicação externa e consolidações não devem bloquear o processamento do evento.
    Trade-offs
    Assíncrono exige estados, retries e observabilidade próprios.
  7. Dashboard e relatórios

    Next.js

    Por quê / trade-offs
    Por que foi escolhido
    Oferece investigação sob demanda e visão agregada por unidade, tempo e ocorrência.
    Problema que resolve
    Push resolve urgência; pull resolve análise e contexto.
    Trade-offs
    A interface depende de métricas com definição estável e histórico confiável.
  8. Alertas roteados

    Mensageria

    Por quê / trade-offs
    Por que foi escolhido
    Entrega apenas o sinal relevante ao grupo responsável por determinada unidade.
    Problema que resolve
    Alertas sem contexto ou escopo viram ruído operacional.
    Trade-offs
    Roteamento aumenta a utilidade, mas precisa acompanhar a organização operacional.

Data quality — checks

  • validação de contrato e campos obrigatórios
  • identificação e deduplicação de eventos
  • tratamento de eventos fora de ordem
  • preservação de metadados sem expor conteúdo sensível
  • roteamento por unidade e agrupamento operacional
  • registro de falhas e tentativas posteriores
  • minimização de dados por finalidade

01 — Contexto

Operações de delivery distribuídas entre várias unidades produzem eventos continuamente: pedidos, transições de estado, cancelamentos completos, cancelamentos parciais, motivos, horários e evidências.

O dado existia, mas permanecia fragmentado nas ferramentas da operação. O objetivo deste projeto foi construir uma camada própria capaz de responder rapidamente: o que aconteceu, onde, por que, com que frequência e quem precisa saber agora?

Este é um projeto privado. Empresas, unidades, pessoas, endpoints, credenciais, payloads originais e regras confidenciais foram removidos ou abstraídos deliberadamente.

02 — Problema

O fluxo anterior era reativo:

Evento → Consulta → Interpretação → Comunicação → Ação

Em escala, isso aumentava a latência, fragmentava o contexto e dificultava enxergar padrões. A proposta foi inverter a lógica:

Evento → Captura → Normalização → Classificação → Persistência → Análise → Alerta

O sistema não deveria apenas registrar ocorrências. Deveria reduzir a distância entre o problema acontecer, alguém perceber e a operação conseguir agir.

03 — Descoberta da fonte

Antes de construir dashboards, foi necessário entender como os dados trafegavam entre as aplicações da operação. A investigação mapeou eventos disponíveis, estados de um pedido, campos correlacionáveis, eventos repetidos e diferenças semânticas entre ocorrências estruturalmente parecidas.

Esse foi um ponto central do trabalho: consumir dados não é o mesmo que entender o que eles significam. Um cancelamento no início do ciclo pode representar uma situação completamente diferente de um cancelamento depois do preparo.

04 — Ingestão e contrato interno

A camada de ingestão funciona como fronteira entre a plataforma de origem e o restante da aplicação. Quando existe uma integração apropriada, o evento entra diretamente por ela; em outros cenários, mecanismos autorizados observam os dados disponíveis ao ambiente operacional e encaminham somente o necessário.

Fonte operacional
       ↓
Camada de ingestão
       ↓
Validação
       ↓
Modelo interno
       ↓
Pipeline operacional

O sistema externo possui seu contrato; a aplicação possui o seu. Conceitualmente, o modelo interno reúne identificador do evento e do pedido, unidade, tipo, horário, motivo, origem, itens, metadados de evidência e status de processamento.

Essa separação protege regras, relatórios e notificações contra mudanças no payload externo. Quando a integração muda, o adaptador muda primeiro.

05 — Pipeline de processamento

Cada evento passa por responsabilidades explícitas:

Evento bruto
    ↓
Validação
    ↓
Normalização
    ↓
Identificação
    ↓
Deduplicação
    ↓
Classificação
    ↓
Persistência
    ↓
Regras de negócio
    ↓
Agregações
    ↓
Alertas / Dashboard / Relatórios

A separação tornou o processamento mais simples de evoluir e depurar. Também tornou visíveis os pontos em que um evento pode ser descartado, reprocessado ou encaminhado para tratamento posterior.

06 — Cancelamentos completos e parciais

Cancelamentos integrais são classificados com pedido, unidade, momento, categoria, motivo, origem, contexto operacional, estado anterior e existência de evidências quando essas informações estão disponíveis.

Cancelamentos parciais exigem outro grão de análise. O pedido pode continuar ativo enquanto um ou mais itens apresentam ocorrência:

Pedido
 ├── Item A
 ├── Item B ← ocorrência
 ├── Item C
 └── Item D

Essa granularidade permite investigar itens recorrentes, categorias concentradas e mudanças de comportamento que uma contagem de pedidos não revelaria.

07 — Idempotência e deduplicação

Em sistemas orientados a eventos, receber o mesmo evento duas vezes não pode significar executar duas vezes. Sem identidade e deduplicação, o pipeline poderia criar registros duplicados, inflar métricas e enviar alertas repetidos.

Mesmo evento recebido novamente
        ↓
Evento reconhecido
        ↓
Nenhuma nova consequência operacional

Essa garantia é especialmente importante quando integrações externas precisam de retries ou quando eventos podem ser observados por mais de uma estratégia de entrada.

08 — Persistência e organização

Os eventos normalizados são armazenados em estrutura relacional. O modelo separa grupos operacionais, unidades, pedidos, eventos e ocorrências de itens. Assim, a mesma informação pode ser consultada em diferentes níveis:

  • detalhe de um pedido;
  • desempenho de uma unidade;
  • visão consolidada de um grupo.

O histórico também separa duas perguntas diferentes: o que está acontecendo agora? e o que vem acontecendo ao longo do tempo? Sem persistência, a solução seria apenas um mecanismo de alerta.

09 — Alertas e roteamento

Quando uma ocorrência relevante é processada, uma mensagem estruturada pode ser enviada ao grupo responsável. O roteamento identifica a unidade, resolve seu agrupamento, determina o destino e gera uma comunicação com contexto suficiente para ação.

Evento → Unidade → Agrupamento → Destino → Mensagem → Envio

O princípio é simples: automação útil não envia tudo para todos. Cada equipe recebe apenas o que pertence ao seu escopo, reduzindo ruído e aumentando a chance de resposta.

10 — Métricas e análise

Além dos alertas individuais, o sistema consolida janelas de tempo para produzir uma visão operacional. Entre os cortes possíveis estão pedidos processados, ocorrências por tipo, distribuição por unidade, concentração por horário, itens recorrentes e evolução histórica.

A taxa de ocorrência é analisada em relação ao volume:

Taxa de ocorrência = ocorrências relevantes / volume de pedidos × 100

Normalizar evita que volume absoluto conte uma história errada. A análise temporal e por item também ajuda a separar um caso isolado de uma concentração que merece investigação de processo, capacidade, abastecimento ou treinamento.

O sistema aponta onde investigar; não transforma correlação operacional em causalidade automaticamente.

11 — Push e pull

O dashboard administrativo complementa a mensageria com uma visão de investigação. O modelo combina duas formas de consumo:

  • Push: o sistema envia ocorrências que exigem atenção.
  • Pull: a pessoa consulta histórico, tendências e recortes quando precisa investigar.

Essa combinação evita tanto depender de alguém procurando cada ocorrência quanto tentar transformar cada evento em uma notificação urgente.

12 — Workers, agendamentos e falhas

Captura e processamento principal permanecem separados de tarefas que podem ser mais lentas: agregações, verificação de regras, relatórios e comunicação externa. Workers e rotinas agendadas executam essas etapas sem bloquear o caminho crítico.

Integrações falham, conexões caem e payloads mudam. Por isso, o sistema registra eventos recebidos, processados, descartados, duplicidades, falhas de persistência, falhas de comunicação e tentativas posteriores.

Processar evento
     ↓
   sucesso ─────→ continuar
     │
     └ falha
         ↓
      registrar
         ↓
   tratar / repetir

Automação confiável precisa ser observável também quando deixa de funcionar.

13 — Privacidade by design

O projeto aplica minimização de dados. Quando uma ocorrência possui evidências, a camada analítica pode registrar que existem referências associadas sem transportar o conteúdo sensível:

evento X → possui evidência → possui N referências → ocorrência Y

Tokens, cookies, credenciais, identificadores reais, dados pessoais, endpoints privados e payloads originais não fazem parte deste case. Segredos ficam separados do código por configuração de ambiente.

14 — Stack e trade-offs

  • TypeScript / Next.js — integração, regras e interface administrativa.
  • PostgreSQL — entidades relacionais, eventos e histórico operacional.
  • Workers / Scheduler — tarefas assíncronas, agregações e relatórios periódicos.
  • APIs HTTP — comunicação entre componentes e adaptadores de entrada.
  • Mensageria — distribuição roteada de alertas aos canais apropriados.

A arquitetura foi mantida modular sem introduzir uma plataforma distribuída antes de haver necessidade real. Um broker de eventos, processamento de stream e uma camada analítica dedicada são evoluções possíveis para maior volume e menor latência, não requisitos artificiais do recorte atual.

15 — Resultado

O que começou como acompanhamento de cancelamentos evoluiu para uma camada de inteligência entre o sistema transacional e a operação:

                EVENTOS
                   ↓
               INGESTÃO
                   ↓
              NORMALIZAÇÃO
                   ↓
              PERSISTÊNCIA
                   ↓
          ┌────────┴────────┐
          ↓                 ↓
     TEMPO REAL          HISTÓRICO
          ↓                 ↓
       REGRAS           AGREGAÇÕES
          ↓                 ↓
      ALERTAS            MÉTRICAS
          ↓                 ↓
     OPERAÇÃO           DASHBOARD
          └────────┬────────┘
                   ↓
                DECISÃO

O resultado mais importante é temporal: reduzir a distância entre algo acontecer e alguém perceber. Depois, reduzir a distância entre perceber um caso isolado e entender que existe um padrão.