Pular para o conteúdo principal

Tech Debt

Analise e priorizacao de debito tecnico do Facter Truck. Auditado em 2026-02-11.


Resumo Executivo

StatusQuantidade
Corrigido7 items
Parcial4 items
Pendente43 items

Distribuicao por Severidade (pendentes)

SeveridadeQuantidade
Critico8 issues
Alto18 issues
Medio14 issues
Baixo3 issues

Categorias

  • Schema/Modelagem: 3 typos, indices parciais, timestamps parciais
  • Backend: 1 bug critico, 32 exceptions legadas, type safety violations
  • Frontend: 67 console.logs, 19 as any, zero lazy loading
  • Auth: Recursao corrigida, 5 problemas restantes
  • Navigation: Auth guard corrigido, 11 problemas restantes

Parte 1: Schema / Modelagem

Critico: Typos em Producao

3 typos no schema Prisma que requerem migration para correcao:

IDProblemaTabelaImpacto
DB-001word_order_id em vez de work_order_idServiceAssignmentFK com nome errado
DB-002perfomed_at em vez de performed_atAxleHistory, TireHistoryColuna com typo
DB-003serviceAssignmets em vez de serviceAssignmentsSchemaRelacao com nome errado

Alto: Indices Faltando

Schema tem 166 indices, mas faltam indices em campos de status para tabelas com queries frequentes:

TabelaStatus
WorkOrderCorrigido (index composto com companyId)
ServiceAssignmentPendente
PartRequestPendente
ChecklistPendente
TireRequestPendente

Alto: Campos de Auditoria

ModeloProblemaStatus
UsercreatedAt/updatedAtCorrigido
TireRequestFalta createdAtPendente
EventsFalta createdAt/updatedAtPendente

Medio

  • Cascade Delete faltando: Vehicle.fleet e Trailer.fleet sem onDelete: SetNull
  • Dados desnormalizados: ServiceExecutionLog duplica dados de ServiceAssignment

Parte 2: Backend

Critico: Race Condition

Missing await em reject-part-request.ts -- funcao retorna antes da operacao de banco completar. Dados podem nao ser salvos.

Critico: Domain Events Nao Emitidos

Use cases de part-request nao emitem domain events. 5 use cases afetados (approve, reject, create, createTire, updateTire). Activity System nao registra essas acoes.

Alto: Type Safety

3 repositories abstratos ainda usam any em metodos (create, findMany, findById). Violacao direta das regras do projeto.

Alto: Exceptions Legadas

32 arquivos ainda usam ExceptionHandler ou AppException em vez de DomainError. Veja Domain Errors para o padrao correto.

Alto: Codigo Duplicado

Bloco de include identico repetido 3x em prisma-part-request-repository.ts. Deveria ser extraido em constante.

Medio

  • Unsafe property access: serviceAssignment.workOrder.id sem optional chaining
  • Transacoes inconsistentes: Nem todos repositories implementam withTransaction()

Parte 3: Frontend

Critico: Zero Error Boundaries

Nenhum ErrorBoundary no projeto. Qualquer erro em componente filho crasha a aplicacao inteira.

Critico: Console.logs em Producao

28+ console.log espalhados em componentes de producao. Deveria usar logger condicional.

Critico: Componentes Gigantes

ComponenteLinhas
vehicle-card/index.tsx584
technician-view.tsx574
checklist/indexsd.tsx490
part-kit-managment.tsx469
checklist-sidebar.tsx435
safe-company-selector.tsx421

Meta: nenhum componente acima de 200 linhas.

Critico: Type Safety

Multiplos as any em componentes (part-request, technician-view, checklist-start, work-order-history-item).

Alto

  • Hardcoded values: Target times de manutencao, mock data de empresas, limites fixos
  • Codigo duplicado: Formatacao de data duplicada em 5+ arquivos
  • State management inconsistente: Alguns features usam Zustand, outros usam useState

Medio

  • Acessibilidade: Apenas 2 aria-label no projeto inteiro
  • Performance: ~20% dos componentes usam React.memo (meta: 80%)
  • Design System: ~40% das features usam @facter/ds-core (meta: 100%)

Parte 4: Integracoes

Provedores de Telemetria (Templates)

Provedores de telemetria (Sascar, Autotrac, Cobli) foram implementados como templates estruturais baseados em padroes comuns. NAO foram validados com documentacao real das APIs.

ProviderPrioridadeStatus
SascarAltaTemplate (aguardando acesso)
AutotracMediaTemplate (aguardando acesso)
CobliBaixaTemplate (aguardando acesso)

SAP PM

Implementado com base na documentacao oficial do SAP Business Accelerator Hub. Status: funcional.


Parte 5: Infra / Deploy

Medio: Build/deploy do Render sem IaC (registrado 2026-07-28)

Os comandos de build/start dos serviços no Render (facter-api, facter-app) vivem apenas no dashboard, nao versionados. Sem render.yaml (Blueprint), o build de deploy nao e reproduzivel localmente nem revisavel por PR (foi preciso adivinhar o build ao validar a FACTRK-8/16).

  • Proposta: adicionar render.yaml versionando buildCommand/startCommand e env vars. Draft para a API: build pnpm install && pnpm prisma generate && pnpm build; start pnpm prisma migrate deploy && pnpm start:prod.
  • Cuidado: os serviços ja existem configurados via dashboard; adotar Blueprint exige religar como Blueprint sem duplicar/desconfigurar.
  • Status: adiado a pedido em 2026-07-28 (durante a frente de custo real + rateio).

Plano de Correcao

Sprint A: Criticos

TaskTipo
Fix await faltando em reject-part-requestBug
Fix 3 typos no schema + migrationDB
Adicionar Error BoundariesFrontend
Remover 28 console.logsFrontend
Adicionar eventos em part-request use casesBackend

Sprint B: Schema e Backend

TaskTipo
Adicionar indices faltantes (4 tabelas)DB
Fix campos de auditoriaDB
Padronizar exceptions para DomainError (32 arquivos)Backend
Fix type safety (any -> tipos)Backend
Extrair constante de include em repositoriesBackend

Sprint C: Frontend Quality

TaskTipo
Decompor 6 componentes > 400 linhasRefactor
Criar shared/utils/formatters.tsRefactor
Padronizar state management (Zustand)Refactor
Fix type safety (as any -> tipos)Refactor
Adicionar acessibilidade basicaFrontend

Sprint D: Performance e Polish

TaskTipo
Adicionar useMemo/useCallbackPerformance
Migrar para Design SystemFrontend
Remover hardcoded valuesFrontend
Deletar codigo comentado/mockCleanup

Metricas de Sucesso

MetricaAtualMeta
console.log em producao280
Componentes > 200 linhas100
Error Boundaries0100% features
Type violations (any)15+0
Indices em campos de status1/55/5
Eventos de dominio emitidos~60%100%
useMemo/useCallback coverage~20%80%
Design System usage~40%100%

Riscos Se Nao Corrigir

RiscoProbabilidadeImpacto
Race condition em rejeicao de pecasAltaDados perdidos
Queries lentas sem indicesAltaPerformance degradada
Crash sem Error BoundaryMediaUX ruim
Auditoria incompletaAltaCompliance issues
Manutencao dificilAltaVelocity reduzida