DEV Community

Siandro Sena
Siandro Sena

Posted on

Qual veículo da frota precisa de manutenção HOJE? Priorização com pesos por criticidade (e por que meu dia a dia é low-code, não Python)

O problema

Numa frota com vários veículos, cada um gera dado de manutenção o tempo todo: sulco de pneu, calibragem, alinhamento, óleo, lubrificação. Sem um sistema, isso vira uma de duas coisas — decisão na intuição de um mecânico experiente (que erra, esquece, ou não está lá no dia daquela decisão), ou uma planilha manual que ninguém olha até o pneu estourar na estrada. Nos dois casos, quem decide "qual veículo eu vejo primeiro hoje" está adivinhando, não sabendo.

Isso é um problema real que estruturei para uma empresa de transporte rodofluvial de passageiros com garagem em Barcarena-PA (Brasil). Sem nome da empresa, placa ou qualquer dado identificável — o que compartilho aqui é a lógica de decisão, generalizada.

Um adendo importante: meu dia a dia é low-code, não Python

Antes de entrar no código: a versão que roda em produção não é Python. É uma automação em Google Sheets + Apps Script — leitura de sulco dispara um desenho automático de resumo visual pro mecânico (onEdit), e o dashboard de priorização da frota inteira é 100% fórmula nativa (QUERY, sem script rodando por trás).

Isso não é modéstia nem desculpa — é a ferramenta certa pro contexto: numa operação de frota pequena/média, quem mantém isso no dia a dia é quem já usa planilha, não quem sabe rodar pip install. Baixo custo de manutenção, zero servidor, qualquer um da operação abre e entende.

O repositório e este artigo reescrevem essa mesma lógica de decisão em Python puro, testado e isolado — como exercício de portfólio, pra mostrar o raciocínio de forma que rode em qualquer lugar e sirva de referência técnica. É tradução, não é como o sistema roda na vida real.

A solução

O sistema faz duas coisas, em sequência:

1. Olha os 4 pontos de sulco de cada roda e já diz o que fazer: o pneu está gasto porque está desalinhado, ou porque a calibragem está errada? São ações diferentes (alinhar vs. calibrar), e o padrão de desgaste denuncia qual — isso é física de pneu, não é chute:

  • Pneu desalinhado desgasta mais de UM lado → diferença grande entre as duas bordas (externa vs. interna)
  • Pneu com pressão errada desgasta o centro OU as bordas de forma simétrica → murcho gasta mais as bordas, cheio demais gasta mais o centro

2. Cruza essa leitura com as outras categorias de manutenção de toda a frota — calibragem, sulco, alinhamento, óleo/filtros, lubrificação, nem todas pesam igual — e devolve um ranking: comece por aqui.

Modelagem: pesos e limiares

A parte que importa não é o código, é a decisão de negócio por trás dele.

Limiares do diagnóstico de roda (regra fixa, em milímetros de diferença de sulco):

DIFERENCA_ALINHAMENTO_MM = 3.0   # diferença entre bordas externa/interna
DIFERENCA_CALIBRAGEM_MM = 2.0    # diferença entre média do centro e média das bordas
Enter fullscreen mode Exit fullscreen mode

Pesos por categoria (referência: material educativo de segurança de pneus tipo NHTSA TireWise sobre o impacto de calibragem/sulco na frenagem e estabilidade — não é arbitrário, mas também não é uma constante universal):

CATEGORY_WEIGHTS = {
    "calibragem": 5,       # degrada rápido, barata de checar, ignorar é caro
    "sulco": 4,
    "alinhamento": 3,
    "oleo_filtros": 2,
    "lubrificacao": 1,     # tem mais folga de prazo
}
Enter fullscreen mode Exit fullscreen mode

A lógica: calibragem errada não é tratada igual a lubrificação atrasada, porque na vida real elas não têm a mesma urgência nem o mesmo custo de ignorar. O score de cada veículo é a soma de peso × severidade de cada categoria (severidade de 0.0 a 1.0, saturando em 1.0 conforme os dias de atraso passam do prazo máximo daquela categoria).

Exemplo real de saída

Frota de 7 veículos, situação bagunçada — cada um com um problema diferente, ninguém sabe por onde começar:

$ python scripts/priority_report.py --input sample_data/frota_severidade.json --top 5

TOP 5 — veículos que precisam de atenção agora:

1. VEICULO-07 — score 15.0 (pior categoria: calibragem)
2. VEICULO-03 — score 6.4 (pior categoria: sulco)
3. VEICULO-01 — score 6.4 (pior categoria: calibragem)
4. VEICULO-05 — score 6.0 (pior categoria: calibragem)
5. VEICULO-02 — score 1.9 (pior categoria: sulco)
Enter fullscreen mode Exit fullscreen mode

Uma lista de "todo mundo precisa de alguma coisa" virou uma ordem de prioridade com o motivo ao lado — sem ninguém abrir aba por aba da planilha.

Por que isso importa

  • Menos pneu estourando na estrada — o problema é sinalizado antes de virar parada não planejada, não depois.
  • A decisão para de depender de UMA pessoa — hoje, "qual veículo eu olho primeiro" muitas vezes só um mecânico experiente sabe responder de cabeça. Isso vira algo que qualquer pessoa da operação consegue rodar.
  • Cada categoria pesa o que realmente pesa — porque na vida real elas não têm a mesma urgência.

Limitações honestas

Nenhum sistema de regra fixa é perfeito, e eu prefiro deixar isso explícito em vez de vender como mágica:

  • O diagnóstico de roda confia na leitura de sulco como verdadeira — não valida se os 4 números fazem sentido físico (valor negativo, fora da faixa de um pneu novo/gasto). Garbage in, garbage out.
  • Os limiares (3mm alinhamento, 2mm calibragem) são constantes fixas, não calibradas por modelo/marca de pneu ou por eixo (dianteiro e traseiro desgastam diferente) — funcionam como regra geral, não como valor validado estatisticamente pra cada operação.
  • Só cobre 2 eixos de desgaste (borda-a-borda e centro-vs-bordas). Um padrão de desgaste diagonal (problema de rolamento/suspensão, por exemplo) cai em "desgaste irregular" sem indicar a causa real.
  • O score de prioridade não considera custo, disponibilidade de peça/oficina ou criticidade da rota — é um score de severidade de inspeção, não uma otimização operacional completa.
  • Categoria com nome digitado errado é ignorada em silêncio — um typo na severidade de entrada derruba a pontuação daquele veículo sem nenhum aviso. Isso é um risco real de qualquer sistema baseado em texto livre, incluindo o de planilha.

Stack

  • Em produção: Google Sheets + Apps Script (onEdit, QUERY)
  • Neste repositório (tradução pra portfólio): Python (stdlib, sem dependência externa) + pytest, 14 testes cobrindo os 6 vereditos de roda e o motor de score

Repositório completo, com código e testes: fleet-maintenance-priority-engine


Sou engenheiro (Produção/Materiais) com MBA em Inteligência Artificial, estruturando automação de processos com IA e dados pra operações reais. Se você lida com frota, manutenção preventiva ou só curte ver regra de negócio de verdade virar código, comenta aí — troco ideia.

Top comments (0)