Rastreamento de Pecas e Mao de Obra
Saber quanto cada ordem de servico custa e a diferenca entre uma frota que cresce lucrativa e uma que sangra margem em um buraco negro. O Levy Service rastreia consumo de pecas e minutos de mao de obra em cada task e sume em custo lifetime por veiculo e linhas de P&L mensal por frota.
O parts catalog
Gerencie o catalogo em /dashboard/parts-catalog. Cada linha em parts_catalog tem:
- SKU (seu codigo interno)
- Name (rotulo legivel)
- Unit cost (em centavos, snapshot no momento do cadastro)
- Vehicle models (em quais modelos essa peca cabe, por exemplo
["es400a", "es400b"]) - Stock on hand (quantidade no seu deposito)
- Reorder threshold (alerta quando o estoque cai abaixo)
Linhas do catalogo podem ser globais (lista de pecas OKAI/Segway padrao mantida pela Levy) ou por subaccount (suas pecas proprias de fornecedor). Linhas globais tem subaccount_id = NULL e sao visiveis a toda frota. Voce pode sobrescrever uma SKU global criando uma linha por subaccount com a mesma SKU.
Lancando pecas contra uma task
Da tela de detalhe da task no operator-app, o tecnico abre Parts e:
- Busca a SKU no catalogo
- Define a quantidade usada
- Toca em Add
Isso escreve uma linha task_parts com unit_cost_cents em snapshot do catalogo no momento do uso. O snapshot importa: se o preco do catalogo mudar no mes que vem, o registro historico continua correto.
task_parts.used_by registra qual tecnico consumiu a peca, e stock_on_hand em parts_catalog cai automaticamente. Quando o estoque cai abaixo de reorder_threshold, o ops_manager recebe uma notificacao no Slack (se configurado).
Lancando mao de obra
Mao de obra entra por task_labor:
- Minutes - tempo gasto nesta task
- Hourly rate - default vem de
team_members.hourly_rate_cents, sobrescrevivel por task - Total cost - calculado como
(minutes / 60) * hourly_rate_cents
O operator-app captura minutos de mao de obra automaticamente: o relogio comeca no start e para no resolve. O tecnico pode editar os minutos antes de resolver caso o auto-captado esteja errado (por exemplo, ele deixou a task aberta durante o almoco).
Soma de custo por task
tasks.total_cost_cents e a soma de cada task_parts.quantity * task_parts.unit_cost_cents mais cada task_labor.total_cost_cents da task. A coluna e mantida em sincronia por um trigger de banco que dispara em insert/update/delete de task_parts e task_labor.
Isso aparece no side drawer do dashboard como a linha Total Cost e some na analitica por veiculo e por frota.
Custo lifetime por veiculo
A pagina de detalhe do veiculo em /dashboard/vehicles/[id] traz um card Lifetime Maintenance Cost que soma total_cost_cents de cada task fechada contra o veiculo. O breakdown mostra:
- Split de parts vs labor
- Top 5 task types por gasto
- Tasks por trimestre (tendencia)
- Custo por corrida (custo lifetime / corridas lifetime)
Esses sao os dados que voce usa para decidir quando aposentar um veiculo. Se custo por corrida sobe acima do seu limite de ROI de substituicao, e hora.
Linha de P&L por toda a frota
A pagina de analytics em /dashboard/tasks/analytics traz um heatmap Cost per Vehicle e um grafico Monthly Maintenance P&L. O grafico e uma barra empilhada que mostra parts cost, custo interno de labor e custo de vendor invoices por mes. Esse e o slide que vai no seu update mensal de investidor.
Nos bastidores, o endpoint de analytics le da materialized view technician_performance (atualizada todas as noites por /api/cron/refresh-tech-performance) mais uma soma direta sobre tasks.total_cost_cents.
Vendor invoices
Se uma task for terceirizada a um vendor pelo portal magic-link, o vendor sobe uma fatura por POST /api/vendor/[token]/tasks/[id]/invoice. Isso cria uma linha em task_vendor_invoices e uma Stripe Invoice (se STRIPE_SECRET_KEY estiver configurado). O custo do vendor entra em tasks.total_cost_cents igual a parts e labor internas.
Veja Vendor Dispatch para o fluxo completo.
Alertas de reorder e gestao de estoque
O alerta de reorder e o unico lugar onde automatizamos decisoes de estoque. O Levy Service ainda nao gera pedidos de compra nem se integra ao sistema do seu fornecedor - isso e item da Fase 5. Por enquanto o workflow e:
- Estoque cai abaixo de
reorder_threshold - Alerta no Slack dispara para o
ops_manager - Ops manager coloca o pedido com o fornecedor
- Quando o estoque chega, o ops manager atualiza
stock_on_handpela pagina do parts catalog
Retencao de dados
Linhas de parts e labor sao mantidas indefinidamente - sao registros financeiros e alimentam a visao de custo lifetime. Nao apague. Se voce errou ao lancar uma peca, edite a quantity para zero em vez de deletar.
O que boas frotas medem
As frotas com operacao de manutencao lucrativa tem tres coisas em comum: um catalogo limpo com 30 a 50 SKUs (nao 300), tecnicos que lancam mao de obra em toda task (sem excecoes) e revisao mensal do heatmap de cost-per-vehicle para identificar os limoes.