Fastcomm — Diagnóstico Baseline

Consolidação completa do cenário inicial antes das correções — 12 repositórios analisados

Cenário Pré-Correção
Data da análise Março 2026
Repositórios 12 projetos
Arquivos analisados 640+
Stack principal NestJS · Vue.js · TypeScript · Python/FastAPI
Análise por Claude Code + Devs
1

Panorama Geral do Baseline

Code Smells
780+
instâncias em 640+ arquivos
Linhas Duplicadas
~7.500
estimadas no ecossistema
Violações SOLID
96%
dos repos com DIP Crítico
Usos de any
200+
instâncias no ecossistema
Catch blocks ruins
150+
tratamento de erros inadequado
God Objects
5
maior: 1.354 linhas
Diagnóstico resumido

A plataforma Fastcomm apresentava débito técnico severo e sistêmico. Os 12 repositórios compartilhavam padrões problemáticos recorrentes: Dependency Inversion violado em 11 de 12 repos (maioria crítico), God Objects com até 1.354 linhas, duplicação massiva entre camadas, dead code com dependências de 500MB+ (PySpark), e falhas de segurança como JWT decode sem verificação de assinatura e CORS permissivo. O ecossistema não tinha padrões unificados de tratamento de erros, logging ou abstração de CRUD.

2

SOLID + Acoplamento — Visão por Repositório

Análise de conformidade com os cinco princípios SOLID e grau de acoplamento entre módulos. O princípio DIP (Dependency Inversion) era Crítico em 11 dos 12 repositórios — classes concretas injetadas diretamente, new Service() fora do container IoC, e process.env acessado sem ConfigService. O SRP apresentava God Objects em 4 projetos.

Repositório SRP OCP LSP ISP DIP Acoplamento
orquestrator Alto Alto Médio Alto Crítico Médio
engine Crítico Crítico Médio Alto Crítico Crítico
engine-front Crítico Alto Médio Alto Crítico Alto
executor Alto Alto Médio Alto Crítico Crítico
core Crítico Alto Médio Alto Crítico Alto
opencore Crítico Alto Médio Médio Crítico Crítico
front Crítico Alto Médio Alto Crítico Alto
apps Crítico Alto Médio Alto Crítico Alto
infosec Crítico Alto Médio Crítico Crítico Alto
cron Crítico Alto Médio Alto Crítico Alto
cronjob Crítico Alto Baixo Médio Crítico Médio
log-service Alto Médio Baixo Médio Alto Médio
Principais violações SOLID encontradas

DIP: HttpService concreto injetado direto em 3+ services do orquestrator; new FastcommInfosecService() no AuthGuard do opencore; process.env direto em 10+ locais do core sem ConfigService; Cryptr instanciado com new em vez de DI.
SRP: FastcommCoreService (opencore) com 1.195 linhas e 42 métodos; ConstantsService (core) com 6 responsabilidades; AppService (orquestrator) como God Class com 5 responsabilidades.
OCP: Cadeias if/else para formatos de dados sem Strategy Pattern; CircuitBreaker com config hard-coded; AuthGuard fechado a novos providers.

3

Code Smells — Inventário Completo

Análise de code smells em todos os 12 projetos. Total estimado: 780+ instâncias. Os smells mais recorrentes eram transversais ao ecossistema, indicando ausência de padrões e governança técnica.

Repositório Stack Arquivos Instâncias Pior Smell
engineNestJS + Legacy JS~120130+85+ any, pasta legacy/ 4k linhas JS
frontVue 3 + JS + Vuex~90102+30+ new Promise() desnecessários
coreNestJS + Sequelize~8095+God Object 600+ linhas, 30+ any
appsExpress + JS~480100+God Class 1.354 linhas, 18 console.*
engine-frontVue 3 + JS~7088+God Components 2.055 linhas, v-html XSS
opencoreNestJS + TS~6087+God Object 1.195 linhas, 32+ any
executorNestJS + BullMQ~4580+13 throw Error genérico, 17+ any
orquestratorNestJS + TS~7167+40+ any, CORS permissivo
cronNestJS + TS~3058+6 operadores ==, fire-and-forget
infosecNestJS + Cognito~3548+JWT decode sem verify, DI violado
cronjobNestJS + TypeORM~2535+Fire-and-forget em cron jobs
log-servicePython + FastAPI~1628+Bug connect_args, 232 linhas dead code

Top 7 Smells Mais Recorrentes

  • TypeScript any 200+ instâncias
  • Tratamento de erros inadequado 150+ blocos
  • console.* em produção todos os projetos
  • God Objects / Long Services 4 projetos
  • Código duplicado 100+ duplicações
  • Dead Code / Código legado ~4k linhas JS puro
  • Magic Numbers / Strings 47+ só no opencore

Distribuição de Severidade

  • Crítica 25+ (3%)
  • Alta 320+ (43%)
  • Média 280+ (37%)
  • Baixa 127+ (17%)
Falhas de segurança identificadas no baseline

JWT decode sem verificação de assinatura no AuthGuard de opencore e infosec — decisão de roteamento baseada em token não verificado.
CORS com origin: [] em orquestrator e infosec quando ALLOWED_ORIGINS não configurado.
Tokens de serviço expostos no bundle frontend (front) — visíveis no código transpilado.
Path hardcoded para chave SSH privada em opencore.
Senha padrão via env var (DEFAULT_ADMIN_PASSWORD) em infosec.
v-html sem sanitização adequada em engine-front — risco de XSS.

4

Duplicação de Código

Estimativa de ~7.500 linhas duplicadas no ecossistema. Os dois piores casos eram o ai-fastcomm-front com 107+ Vuex actions repetindo o mesmo anti-pattern de new Promise(), e o ai-fastcomm-opencore com core.service.ts de 1.195 linhas e 45+ catch blocks idênticos.

Repositório Risco Linhas Duplic. Principal Problema
frontAlto~1.500107+ actions duplicadas, 9 list components idênticos
appsAlto~1.3008 controllers CRUD com estrutura idêntica
opencoreAlto~1.000core.service.ts 1.195 linhas, 30 métodos CRUD repetidos
engine-frontAlto~80035+ Vuex actions com Promise wrapper, 84 emits
engineAlto~600Métodos duplicados entre src/ e legacy/
executorMédio-Alto~500replaceDoubleCurlyBraces em 2 versões, 26+ constructors
coreAlto~500Soft-delete repetido 20×, healthcheck duplicado
infosecMédio-Alto~4003 health checks coexistindo, CRUD em 3 services
orquestratorMédio-Alto~380isHealthy() duplicado, 9 try-catch idênticos
cronMédio-Alto~2002 middlewares de auth com 60% de overlap
cronjobMédio~1505 blocos QueryRunner try-finally idênticos
log-serviceMédio~80_to_datetime() e _iso_from_dt() duplicados + bug connect_args

Padrões Transversais (aparecem em múltiplos projetos)

  • Health check duplicado em módulos diferentes core, cronjob, infosec, orquestrator
  • Setup HTTP client (axios) repetido cron, engine, engine-front, front, opencore, orquestrator
  • CRUD sem classe base apps, core, infosec, opencore
  • Extração de Bearer token inline cron, engine, infosec
  • Error handling try-catch sem centralização core, cron, opencore, orquestrator
  • Promise wrapper desnecessário em Vuex engine-front, front
5

Dead Code

Identificação de código morto, imports não utilizados, dependências sem uso, console.* em produção e TODO/FIXME pendentes. Dois projetos obtiveram nota máxima (cron e orquestrator). Os piores eram apps (4,0/10) e log-service (6,3/10) — este último com 232 linhas de código Spark morto e dependências de 500MB+.

Repositório Score Problema Principal Severidade Máx.
cron
10,0
Limpo Nenhum dead code
orquestrator
10,0
Limpo Nenhum dead code
cronjob
9,8
Baixa pg-query-stream possivelmente indireta Baixa
executor
9,7
Baixa TODO pendente + helpers com nome similar Baixa
engine-front
9,7
Média vue-click-outside possivelmente não utilizado Média
core
9,3
Alta Módulo healthcheck/ duplicado e não registrado Alta
opencore
9,3
Média Swagger instalado mas não inicializado Média
infosec
9,2
Alta Módulo healthcheck/ duplicado e não registrado Alta
engine
8,4
Alta 32 console.* no legacy + log de credencial comentado Alta
front
8,4
Alta Mutation setGroups vazia — funcionalidade quebrada Alta
log-service
6,3
Alta 3 módulos Spark mortos + import quebrado + bug connect_args Alta
apps
4,0
Alta Migration stub + cors morto + 10+ console.log Alta
6

God Objects — Os 5 Maiores

Classe / Arquivo Repositório Linhas Métodos Responsabilidades Misturadas
ConfigurationTotemService apps 1.354 50+ Toda configuração de totens em um único serviço
FastcommCoreService opencore 1.195 42 6 domínios: clients, DB, SSH, auth, AI, constants
PipelineDetail.vue engine-front 2.055 40+ Grafo visual, forms, validação, testes, CRUD
Helpers apps 513 50+ 11 domínios distintos: I/O, paciente, HTTP, data, etc.
BillingService apps 477 Consulta, transformação e persistência de faturamento
7

Riscos Críticos Identificados no Baseline

Segurança

  • JWT decode sem verify no AuthGuard opencore, infosec
  • CORS permissivo (origin: []) orquestrator, infosec
  • Tokens de serviço no bundle frontend front
  • Path SSH key hardcoded opencore
  • DEFAULT_ADMIN_PASSWORD via env infosec
  • v-html sem sanitização (XSS) engine-front
  • Log de credencial comentado engine

Estabilidade / Bugs

  • connect_args construído mas ignorado (SSL) log-service
  • Mutation setGroups vazia — funcionalidade quebrada front
  • Fire-and-forget em cron jobs sem await cronjob
  • Missing await — Promise truthy sempre engine
  • resolve() E reject() chamados juntos infosec
  • Import quebrado no teste (nunca roda) log-service
  • LogService.error com código 8 em 4 métodos (copy-paste) opencore
8

Score Consolidado por Repositório

Classificação geral baseada nas 4 dimensões analisadas: SOLID, Code Smells, Duplicação e Dead Code. Nota composta considerando severidade e impacto.

Repositório SOLID Smells Duplicação Dead Code Risco Geral
engine Crítico 130+ ~600 linhas 8,4 Crítico
opencore Crítico 87+ ~1.000 linhas 9,3 Crítico
apps Crítico 100+ ~1.300 linhas 4,0 Crítico
front Crítico 102+ ~1.500 linhas 8,4 Crítico
core Crítico 95+ ~500 linhas 9,3 Crítico
engine-front Crítico 88+ ~800 linhas 9,7 Alto
infosec Crítico 48+ ~400 linhas 9,2 Alto
executor Crítico 80+ ~500 linhas 9,7 Alto
cron Crítico 58+ ~200 linhas 10,0 Alto
log-service Alto 28+ ~80 linhas 6,3 Alto
cronjob Crítico 35+ ~150 linhas 9,8 Médio-Alto
orquestrator Alto 67+ ~380 linhas 10,0 Médio-Alto