@maestro-ai/mcp-server 5.3.6 → 5.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/flows/classifier.d.ts +12 -0
  2. package/dist/flows/classifier.d.ts.map +1 -1
  3. package/dist/flows/classifier.js +12 -0
  4. package/dist/flows/classifier.js.map +1 -1
  5. package/dist/handlers/specialist-phase-handler.d.ts.map +1 -1
  6. package/dist/handlers/specialist-phase-handler.js +187 -40
  7. package/dist/handlers/specialist-phase-handler.js.map +1 -1
  8. package/dist/middleware/index.d.ts +1 -0
  9. package/dist/middleware/index.d.ts.map +1 -1
  10. package/dist/middleware/index.js +1 -0
  11. package/dist/middleware/index.js.map +1 -1
  12. package/dist/middleware/validation.middleware.d.ts +31 -0
  13. package/dist/middleware/validation.middleware.d.ts.map +1 -0
  14. package/dist/middleware/validation.middleware.js +75 -0
  15. package/dist/middleware/validation.middleware.js.map +1 -0
  16. package/dist/services/auto-classifier.service.d.ts +91 -0
  17. package/dist/services/auto-classifier.service.d.ts.map +1 -0
  18. package/dist/services/auto-classifier.service.js +531 -0
  19. package/dist/services/auto-classifier.service.js.map +1 -0
  20. package/dist/services/classificacao-progressiva.service.d.ts +69 -0
  21. package/dist/services/classificacao-progressiva.service.d.ts.map +1 -0
  22. package/dist/services/classificacao-progressiva.service.js +500 -0
  23. package/dist/services/classificacao-progressiva.service.js.map +1 -0
  24. package/dist/services/flow-engine.d.ts.map +1 -1
  25. package/dist/services/flow-engine.js +32 -20
  26. package/dist/services/flow-engine.js.map +1 -1
  27. package/dist/services/prompt-validator.service.d.ts +20 -0
  28. package/dist/services/prompt-validator.service.d.ts.map +1 -0
  29. package/dist/services/prompt-validator.service.js +53 -0
  30. package/dist/services/prompt-validator.service.js.map +1 -0
  31. package/dist/tests/classificacao-progressiva.test.d.ts +5 -0
  32. package/dist/tests/classificacao-progressiva.test.d.ts.map +1 -0
  33. package/dist/tests/classificacao-progressiva.test.js +372 -0
  34. package/dist/tests/classificacao-progressiva.test.js.map +1 -0
  35. package/dist/tools/consolidated/avancar.d.ts +6 -0
  36. package/dist/tools/consolidated/avancar.d.ts.map +1 -1
  37. package/dist/tools/consolidated/avancar.js +247 -9
  38. package/dist/tools/consolidated/avancar.js.map +1 -1
  39. package/dist/tools/proximo.d.ts.map +1 -1
  40. package/dist/tools/proximo.js +90 -91
  41. package/dist/tools/proximo.js.map +1 -1
  42. package/dist/types/index.d.ts +21 -0
  43. package/dist/types/index.d.ts.map +1 -1
  44. package/dist/types/index.js.map +1 -1
  45. package/package.json +1 -1
@@ -0,0 +1,531 @@
1
+ /**
2
+ * AutoClassifierService v1.0
3
+ *
4
+ * @deprecated v6.0 - Este serviço foi substituído por ClassificacaoProgressivaService
5
+ * que acumula sinais ao longo de múltiplas fases em vez de classificar apenas no PRD.
6
+ *
7
+ * Mantido para compatibilidade e referência, mas não é mais usado no fluxo principal.
8
+ *
9
+ * Serviço de classificação automática de projetos baseado em análise
10
+ * multi-especialista do PRD.
11
+ *
12
+ * Features:
13
+ * - Análise por múltiplos especialistas virtuais (produto, arquitetura, volume)
14
+ * - Inferência automática de stack, integrações, domínio, volume
15
+ * - Cálculo de confianca por critério
16
+ * - Cache de classificações para evitar reprocessamento
17
+ */
18
+ /**
19
+ * Serviço principal de classificação automática
20
+ */
21
+ export class AutoClassifierService {
22
+ especialistas;
23
+ cache = new Map();
24
+ constructor() {
25
+ this.especialistas = [
26
+ new EspecialistaProduto(),
27
+ new EspecialistaArquitetura(),
28
+ new EspecialistaVolume(),
29
+ ];
30
+ }
31
+ /**
32
+ * Classifica um PRD automaticamente usando análise multi-especialista
33
+ */
34
+ async classificar(prd, prdHash) {
35
+ // Verificar cache
36
+ const hash = prdHash || this.computeHash(prd);
37
+ if (this.cache.has(hash)) {
38
+ return this.cache.get(hash);
39
+ }
40
+ // Análise por cada especialista
41
+ const analises = this.especialistas.map(e => ({
42
+ nome: e.nome,
43
+ ...e.analisar(prd),
44
+ }));
45
+ // Agregar pontuação
46
+ let pontosTotais = 0;
47
+ const todosCriterios = [];
48
+ const inferidoPor = [];
49
+ let confiancaTotal = 0;
50
+ const criteriosConfiantes = [];
51
+ const criteriosDuvidosos = [];
52
+ for (const analise of analises) {
53
+ pontosTotais += analise.pontos * (this.especialistas.find(e => e.nome === analise.nome)?.peso || 1);
54
+ todosCriterios.push(...analise.criterios);
55
+ inferidoPor.push(analise.nome);
56
+ confiancaTotal += analise.confianca;
57
+ // Separar critérios por confianca
58
+ for (const criterio of analise.criterios) {
59
+ if (analise.confianca >= 85) {
60
+ criteriosConfiantes.push(`${analise.nome}: ${criterio}`);
61
+ }
62
+ else {
63
+ criteriosDuvidosos.push(`${analise.nome}: ${criterio}`);
64
+ }
65
+ }
66
+ }
67
+ // Normalizar pontuação
68
+ pontosTotais = Math.round(pontosTotais / this.especialistas.length);
69
+ const confiancaMedia = Math.round(confiancaTotal / analises.length);
70
+ // Determinar nível
71
+ let nivel;
72
+ if (pontosTotais <= 10) {
73
+ nivel = "simples";
74
+ }
75
+ else if (pontosTotais <= 20) {
76
+ nivel = "medio";
77
+ }
78
+ else {
79
+ nivel = "complexo";
80
+ }
81
+ // Extrair inferências detalhadas
82
+ const inferencias = this.extrairInferencias(prd);
83
+ const resultado = {
84
+ nivel,
85
+ pontuacao: pontosTotais,
86
+ criterios: [...new Set(todosCriterios)], // deduplicar
87
+ confianca: confiancaMedia,
88
+ criteriosConfiantes,
89
+ criteriosDuvidosos,
90
+ inferidoPor,
91
+ inferencias,
92
+ };
93
+ // Cachear resultado
94
+ this.cache.set(hash, resultado);
95
+ return resultado;
96
+ }
97
+ /**
98
+ * Verifica se a classificação pode ser aplicada automaticamente
99
+ */
100
+ podeAplicarAutomaticamente(classificacao) {
101
+ return classificacao.confianca >= 85 && classificacao.criteriosDuvidosos.length === 0;
102
+ }
103
+ /**
104
+ * Gera mensagem de confirmação para o usuário
105
+ */
106
+ gerarMensagemConfirmacao(classificacao) {
107
+ const { nivel, confianca, inferencias, criteriosDuvidosos } = classificacao;
108
+ let mensagem = `## 🔍 Classificação Sugerida: **${nivel.toUpperCase()}**\n\n`;
109
+ mensagem += `**Confiança:** ${confianca}%\n\n`;
110
+ // Mostrar inferências
111
+ mensagem += `### 📊 Detalhes Inferidos:\n\n`;
112
+ if (inferencias.stack) {
113
+ mensagem += `**Stack Sugerida:**\n`;
114
+ if (inferencias.stack.frontend)
115
+ mensagem += `- Frontend: ${inferencias.stack.frontend}\n`;
116
+ if (inferencias.stack.backend)
117
+ mensagem += `- Backend: ${inferencias.stack.backend}\n`;
118
+ if (inferencias.stack.database)
119
+ mensagem += `- Database: ${inferencias.stack.database}\n`;
120
+ mensagem += `\n`;
121
+ }
122
+ if (inferencias.integracoes && inferencias.integracoes.lista.length > 0) {
123
+ mensagem += `**Integrações Detectadas:** ${inferencias.integracoes.lista.join(", ")}\n\n`;
124
+ }
125
+ if (inferencias.volume) {
126
+ mensagem += `**Volume Estimado:**\n`;
127
+ mensagem += `- Usuários: ${inferencias.volume.usuarios}\n`;
128
+ mensagem += `- Dados: ${inferencias.volume.dados}\n\n`;
129
+ }
130
+ if (inferencias.domino) {
131
+ mensagem += `**Domínio:** ${inferencias.domino.tipo}\n\n`;
132
+ }
133
+ // Mostrar critérios duvidosos se houver
134
+ if (criteriosDuvidosos.length > 0) {
135
+ mensagem += `⚠️ **Itens que precisam de confirmação:**\n`;
136
+ for (const criterio of criteriosDuvidosos.slice(0, 3)) {
137
+ mensagem += `- ${criterio}\n`;
138
+ }
139
+ mensagem += `\n`;
140
+ }
141
+ if (this.podeAplicarAutomaticamente(classificacao)) {
142
+ mensagem += `✅ **Esta classificação será aplicada automaticamente.**\n`;
143
+ }
144
+ else {
145
+ mensagem += `🤔 **Por favor, confirme se os detalhes acima estão corretos.**\n`;
146
+ }
147
+ return mensagem;
148
+ }
149
+ /**
150
+ * Extrai inferências detalhadas do PRD
151
+ */
152
+ extrairInferencias(prd) {
153
+ const inferencias = {};
154
+ // Stack
155
+ const stack = this.inferirStack(prd);
156
+ if (stack) {
157
+ inferencias.stack = { ...stack, confianca: 75 };
158
+ }
159
+ // Integrações
160
+ const integracoes = this.inferirIntegracoes(prd);
161
+ if (integracoes.length > 0) {
162
+ inferencias.integracoes = {
163
+ lista: integracoes,
164
+ confianca: Math.min(70 + integracoes.length * 5, 95),
165
+ };
166
+ }
167
+ // Volume
168
+ const volume = this.inferirVolume(prd);
169
+ if (volume) {
170
+ inferencias.volume = { ...volume, confianca: 70 };
171
+ }
172
+ // Domínio
173
+ const domino = this.inferirDomino(prd);
174
+ if (domino) {
175
+ inferencias.domino = { ...domino, confianca: 80 };
176
+ }
177
+ // Segurança
178
+ const seguranca = this.inferirSeguranca(prd);
179
+ if (seguranca.length > 0) {
180
+ inferencias.seguranca = {
181
+ requisitos: seguranca,
182
+ confianca: 85,
183
+ };
184
+ }
185
+ // Equipe
186
+ const equipe = this.inferirEquipe(prd);
187
+ if (equipe) {
188
+ inferencias.equipe = { ...equipe, confianca: 65 };
189
+ }
190
+ return inferencias;
191
+ }
192
+ inferirStack(prd) {
193
+ const stack = {};
194
+ let encontrouAlgo = false;
195
+ // Frontend
196
+ const frontendPatterns = [
197
+ { pattern: /react|next\.?js/i, name: "React/Next.js" },
198
+ { pattern: /vue|nuxt\.?js/i, name: "Vue/Nuxt.js" },
199
+ { pattern: /angular/i, name: "Angular" },
200
+ { pattern: /flutter|react native|mobile/i, name: "Mobile (Flutter/React Native)" },
201
+ ];
202
+ for (const { pattern, name } of frontendPatterns) {
203
+ if (pattern.test(prd)) {
204
+ stack.frontend = name;
205
+ encontrouAlgo = true;
206
+ break;
207
+ }
208
+ }
209
+ // Backend
210
+ const backendPatterns = [
211
+ { pattern: /node\.?js|express|nestjs/i, name: "Node.js" },
212
+ { pattern: /python|django|fastapi|flask/i, name: "Python" },
213
+ { pattern: /java|spring/i, name: "Java/Spring" },
214
+ { pattern: /go|golang/i, name: "Go" },
215
+ { pattern: /\.net|csharp|c#/i, name: ".NET/C#" },
216
+ ];
217
+ for (const { pattern, name } of backendPatterns) {
218
+ if (pattern.test(prd)) {
219
+ stack.backend = name;
220
+ encontrouAlgo = true;
221
+ break;
222
+ }
223
+ }
224
+ // Database
225
+ const dbPatterns = [
226
+ { pattern: /postgresql|postgres/i, name: "PostgreSQL" },
227
+ { pattern: /mongodb|mongo/i, name: "MongoDB" },
228
+ { pattern: /mysql/i, name: "MySQL" },
229
+ { pattern: /firebase/i, name: "Firebase" },
230
+ { pattern: /supabase/i, name: "Supabase" },
231
+ ];
232
+ for (const { pattern, name } of dbPatterns) {
233
+ if (pattern.test(prd)) {
234
+ stack.database = name;
235
+ encontrouAlgo = true;
236
+ break;
237
+ }
238
+ }
239
+ return encontrouAlgo ? stack : null;
240
+ }
241
+ inferirIntegracoes(prd) {
242
+ const integracoes = [];
243
+ const patterns = [
244
+ { pattern: /api|integra|webhook/i, name: "APIs externas" },
245
+ { pattern: /pagamento|stripe|mercadopago|paypal/i, name: "Gateway de pagamento" },
246
+ { pattern: /autenticação|auth0|firebase auth|oauth|sso/i, name: "Autenticação social" },
247
+ { pattern: /email|sendgrid|mailchimp/i, name: "Email/SMTP" },
248
+ { pattern: /sms|whatsapp|telegram/i, name: "Notificações (SMS/WhatsApp)" },
249
+ { pattern: /storage|s3|cloudinary|firebase storage/i, name: "Armazenamento de arquivos" },
250
+ { pattern: /analytics|google analytics|mixpanel/i, name: "Analytics" },
251
+ { pattern: /maps|google maps|mapbox/i, name: "Maps/Geolocalização" },
252
+ ];
253
+ for (const { pattern, name } of patterns) {
254
+ if (pattern.test(prd)) {
255
+ integracoes.push(name);
256
+ }
257
+ }
258
+ return [...new Set(integracoes)]; // deduplicar
259
+ }
260
+ inferirVolume(prd) {
261
+ // Detectar volume de usuários
262
+ const usuarioPatterns = [
263
+ { pattern: /(\d+)\s*(mil|k|milhões?|mi|m)\s*usuários?/i, type: "explicit" },
264
+ { pattern: /escala\s*(grande|enterprise|massiva)/i, type: "large" },
265
+ { pattern: /100\+|milhares|milhões/i, type: "large" },
266
+ { pattern: /pequena escala|poucos usuários|inicial/i, type: "small" },
267
+ ];
268
+ let usuarios = "Não especificado";
269
+ for (const { pattern, type } of usuarioPatterns) {
270
+ if (pattern.test(prd)) {
271
+ usuarios = type === "large" ? "Alto (10k+ usuários)" :
272
+ type === "small" ? "Baixo (< 1k usuários)" : "Médio (1k-10k)";
273
+ break;
274
+ }
275
+ }
276
+ // Detectar volume de dados
277
+ const dadosPatterns = [
278
+ { pattern: /big data|data warehouse|milhões?\s*de\s*registros?/i, type: "large" },
279
+ { pattern: /arquivos?|imagens?|vídeos?|mídia/i, type: "media" },
280
+ { pattern: /transações?|pedidos?|vendas?/i, type: "transactional" },
281
+ ];
282
+ let dados = "Padrão";
283
+ for (const { pattern, type } of dadosPatterns) {
284
+ if (pattern.test(prd)) {
285
+ dados = type === "large" ? "Alto volume (Big Data)" :
286
+ type === "media" ? "Mídia/Arquivos" : "Transacional";
287
+ break;
288
+ }
289
+ }
290
+ return { usuarios, dados };
291
+ }
292
+ inferirDomino(prd) {
293
+ const patterns = [
294
+ { pattern: /e-?commerce|loja|venda|produto|pedido|carrinho/i, type: "E-commerce" },
295
+ { pattern: /saaS|assinatura|subscription|mensalidade/i, type: "SaaS" },
296
+ { pattern: /marketplace|multi-?vendor/i, type: "Marketplace" },
297
+ { pattern: /app|mobile|ios|android/i, type: "Aplicativo Mobile" },
298
+ { pattern: /dashboard|relatório|bi|analytics/i, type: "Dashboard/BI" },
299
+ { pattern: /educação|curso|aula|escola|e-?learning/i, type: "EdTech" },
300
+ { pattern: /saúde|médico|clínica|hospital|paciente/i, type: "HealthTech" },
301
+ { pattern: /financeiro|banco|fintech|pagamento/i, type: "FinTech" },
302
+ { pattern: /social|rede|comunidade|chat|mensagem/i, type: "Social/Comunidade" },
303
+ ];
304
+ for (const { pattern, type } of patterns) {
305
+ if (pattern.test(prd)) {
306
+ return { tipo: type };
307
+ }
308
+ }
309
+ return null;
310
+ }
311
+ inferirSeguranca(prd) {
312
+ const requisitos = [];
313
+ const patterns = [
314
+ { pattern: /lgpd|gdpr|lei\s*de\s*dados/i, name: "LGPD/GDPR" },
315
+ { pattern: /pci-?dss|cartão|crédito/i, name: "PCI-DSS" },
316
+ { pattern: /hipaa|saúde|médico/i, name: "HIPAA" },
317
+ { pattern: /autenticação|autorização|jwt|oauth/i, name: "Autenticação/Autorização" },
318
+ { pattern: /criptografia|encriptação|ssl|tls/i, name: "Criptografia" },
319
+ { pattern: /senha|password|hash/i, name: "Gestão de senhas" },
320
+ { pattern: /2fa|mfa|autenticação\s*em\s*2\s*fatores/i, name: "2FA/MFA" },
321
+ ];
322
+ for (const { pattern, name } of patterns) {
323
+ if (pattern.test(prd)) {
324
+ requisitos.push(name);
325
+ }
326
+ }
327
+ return [...new Set(requisitos)];
328
+ }
329
+ inferirEquipe(prd) {
330
+ const patterns = [
331
+ { pattern: /(\d+)\s*desenvolvedor/i, type: "explicit" },
332
+ { pattern: /time\s*(grande|grande\s*equipe)/i, type: "large" },
333
+ { pattern: /só|individual|freelancer|único/i, type: "solo" },
334
+ { pattern: /dupla|2\s*pessoas|par/i, type: "small" },
335
+ ];
336
+ for (const { pattern, type } of patterns) {
337
+ if (pattern.test(prd)) {
338
+ const tamanho = type === "explicit" ? "Conforme especificado" :
339
+ type === "large" ? "5+ desenvolvedores" :
340
+ type === "solo" ? "1 desenvolvedor" :
341
+ "2-4 desenvolvedores";
342
+ return { tamanhoSugerido: tamanho };
343
+ }
344
+ }
345
+ return null;
346
+ }
347
+ computeHash(prd) {
348
+ // Hash simples baseado nos primeiros 1000 caracteres + tamanho
349
+ const sample = prd.slice(0, 1000);
350
+ let hash = 0;
351
+ for (let i = 0; i < sample.length; i++) {
352
+ const char = sample.charCodeAt(i);
353
+ hash = ((hash << 5) - hash) + char;
354
+ hash = hash & hash;
355
+ }
356
+ return `${hash}-${prd.length}`;
357
+ }
358
+ }
359
+ /**
360
+ * Especialista: Produto
361
+ * Analisa complexidade funcional, domínio de negócio
362
+ */
363
+ class EspecialistaProduto {
364
+ nome = "Produto";
365
+ peso = 1.0;
366
+ analisar(prd) {
367
+ let pontos = 0;
368
+ const criterios = [];
369
+ let confianca = 70; // base
370
+ // Complexidade de funcionalidades
371
+ const funcionalidades = (prd.match(/funcionalidade|feature|capacidade/i) || []).length;
372
+ if (funcionalidades > 15) {
373
+ pontos += 4;
374
+ criterios.push("Muitas funcionalidades complexas");
375
+ confianca += 10;
376
+ }
377
+ else if (funcionalidades > 8) {
378
+ pontos += 2;
379
+ criterios.push("Funcionalidades moderadas");
380
+ confianca += 5;
381
+ }
382
+ else {
383
+ pontos += 1;
384
+ }
385
+ // Personas
386
+ const personas = (prd.match(/persona|usuário|cliente/i) || []).length;
387
+ if (personas > 5) {
388
+ pontos += 2;
389
+ criterios.push("Múltiplas personas complexas");
390
+ }
391
+ // Fluxos de negócio
392
+ const fluxos = (prd.match(/fluxo|workflow|processo|jornada/i) || []).length;
393
+ if (fluxos > 5) {
394
+ pontos += 3;
395
+ criterios.push("Fluxos de negócio complexos");
396
+ confianca += 5;
397
+ }
398
+ // Regras de negócio
399
+ const regras = (prd.match(/regra|condição|validação|cálculo/i) || []).length;
400
+ if (regras > 10) {
401
+ pontos += 3;
402
+ criterios.push("Muitas regras de negócio");
403
+ }
404
+ return { pontos, confianca: Math.min(confianca, 95), criterios };
405
+ }
406
+ }
407
+ /**
408
+ * Especialista: Arquitetura
409
+ * Analisa integrações, stack, segurança, escala
410
+ */
411
+ class EspecialistaArquitetura {
412
+ nome = "Arquitetura";
413
+ peso = 1.2; // maior peso pois afeta mais a complexidade técnica
414
+ analisar(prd) {
415
+ let pontos = 0;
416
+ const criterios = [];
417
+ let confianca = 70;
418
+ // Integrações
419
+ const integracoes = [
420
+ /api|integração|webhook/i,
421
+ /pagamento|stripe|paypal/i,
422
+ /autenticação|oauth|sso/i,
423
+ /email|sms|notificação/i,
424
+ ];
425
+ let numIntegracoes = 0;
426
+ for (const pattern of integracoes) {
427
+ if (pattern.test(prd))
428
+ numIntegracoes++;
429
+ }
430
+ if (numIntegracoes >= 3) {
431
+ pontos += 4;
432
+ criterios.push("Múltiplas integrações externas");
433
+ confianca += 15;
434
+ }
435
+ else if (numIntegracoes >= 1) {
436
+ pontos += 2;
437
+ criterios.push("Integrações externas presentes");
438
+ confianca += 10;
439
+ }
440
+ // Segurança/compliance
441
+ const seguranca = /lgpd|gdpr|pci|hipaa|compliance|criptografia/i;
442
+ if (seguranca.test(prd)) {
443
+ pontos += 3;
444
+ criterios.push("Requisitos de segurança/compliance");
445
+ confianca += 10;
446
+ }
447
+ // Escala
448
+ const escala = /escala|milhares|milhões|concorrência|performance|latência/i;
449
+ if (escala.test(prd)) {
450
+ pontos += 3;
451
+ criterios.push("Requisitos de escala/performance");
452
+ confianca += 5;
453
+ }
454
+ // Multi-tenant
455
+ const multiTenant = /multi-tenant|multi-inquilino|organizações|empresas/i;
456
+ if (multiTenant.test(prd)) {
457
+ pontos += 2;
458
+ criterios.push("Arquitetura multi-tenant");
459
+ }
460
+ // Tempo/cronograma
461
+ const cronograma = prd.match(/(\d+)\s*(meses?|semanas?)/i);
462
+ if (cronograma) {
463
+ const tempo = parseInt(cronograma[1]);
464
+ const unidade = cronograma[2].toLowerCase();
465
+ const tempoEmMeses = unidade.startsWith("semana") ? tempo / 4 : tempo;
466
+ if (tempoEmMeses > 6) {
467
+ pontos += 3;
468
+ criterios.push("Cronograma longo (>6 meses)");
469
+ }
470
+ else if (tempoEmMeses > 3) {
471
+ pontos += 2;
472
+ criterios.push("Cronograma moderado");
473
+ }
474
+ }
475
+ return { pontos, confianca: Math.min(confianca, 95), criterios };
476
+ }
477
+ }
478
+ /**
479
+ * Especialista: Volume
480
+ * Analisa volume de usuários, dados, transações
481
+ */
482
+ class EspecialistaVolume {
483
+ nome = "Volume";
484
+ peso = 0.8;
485
+ analisar(prd) {
486
+ let pontos = 0;
487
+ const criterios = [];
488
+ let confianca = 65;
489
+ // Volume de usuários
490
+ const usuariosAlto = /100\+|milhares|milhões|massivo|enterprise/i;
491
+ const usuariosMedio = /\d+\s*usuários|escala\s*média/i;
492
+ if (usuariosAlto.test(prd)) {
493
+ pontos += 3;
494
+ criterios.push("Alto volume de usuários");
495
+ confianca += 15;
496
+ }
497
+ else if (usuariosMedio.test(prd)) {
498
+ pontos += 1;
499
+ criterios.push("Volume moderado de usuários");
500
+ confianca += 10;
501
+ }
502
+ // Volume de dados
503
+ const dadosAlto = /big\s*data|terabytes?|petabytes?|data\s*warehouse/i;
504
+ const dadosMedio = /muitos\s*dados|relatórios?\s*complexos?/i;
505
+ if (dadosAlto.test(prd)) {
506
+ pontos += 3;
507
+ criterios.push("Alto volume de dados");
508
+ confianca += 10;
509
+ }
510
+ else if (dadosMedio.test(prd)) {
511
+ pontos += 1;
512
+ }
513
+ // Transações
514
+ const transacoesAlto = /milhares?\s*de\s*transações|transações?\s*por\s*segundo/i;
515
+ if (transacoesAlto.test(prd)) {
516
+ pontos += 2;
517
+ criterios.push("Alto volume de transações");
518
+ }
519
+ // Tempo real
520
+ const tempoReal = /tempo\s*real|real-?time|live|streaming/i;
521
+ if (tempoReal.test(prd)) {
522
+ pontos += 2;
523
+ criterios.push("Requisitos de tempo real");
524
+ confianca += 5;
525
+ }
526
+ return { pontos, confianca: Math.min(confianca, 95), criterios };
527
+ }
528
+ }
529
+ // Singleton export
530
+ export const autoClassifier = new AutoClassifierService();
531
+ //# sourceMappingURL=auto-classifier.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-classifier.service.js","sourceRoot":"","sources":["../../src/services/auto-classifier.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * ClassificacaoProgressivaService v6.0
3
+ *
4
+ * Serviço de classificação progressiva que acumula sinais ao longo das fases
5
+ * e refina a classificação continuamente, em vez de decidir tudo no PRD.
6
+ *
7
+ * Features:
8
+ * - Acumula sinais de múltiplas fases (Produto, Requisitos, Arquitetura)
9
+ * - Recalcula classificação com todos os sinais acumulados
10
+ * - Detecta necessidade de expansão do fluxo (simples → médio → complexo)
11
+ * - Nunca reduz complexidade (proteção contra regressão)
12
+ */
13
+ import type { NivelComplexidade, SinalClassificacao, Fase } from "../types/index.js";
14
+ /**
15
+ * Serviço principal de classificação progressiva
16
+ */
17
+ export declare class ClassificacaoProgressivaService {
18
+ /**
19
+ * Registra sinais extraídos do entregável de cada fase
20
+ */
21
+ registrarSinais(entregavel: string, fase: Fase, sinaisExistentes: SinalClassificacao[]): SinalClassificacao[];
22
+ /**
23
+ * Recalcula classificação com todos os sinais acumulados
24
+ */
25
+ recalcular(sinais: SinalClassificacao[]): {
26
+ nivel: NivelComplexidade;
27
+ confianca: number;
28
+ criterios: string[];
29
+ };
30
+ /**
31
+ * Verifica se o nível precisa mudar (expansão)
32
+ */
33
+ verificarExpansao(nivelAtual: NivelComplexidade, nivelCalculado: NivelComplexidade, faseAtual: number): {
34
+ expandir: boolean;
35
+ de: NivelComplexidade;
36
+ para: NivelComplexidade;
37
+ fasesAdicionadas: number;
38
+ };
39
+ /**
40
+ * Extrai sinais do PRD (Fase 1: Produto)
41
+ */
42
+ private extrairSinaisProduto;
43
+ /**
44
+ * Extrai sinais do documento de Requisitos (Fase 2)
45
+ */
46
+ private extrairSinaisRequisitos;
47
+ /**
48
+ * Extrai sinais do documento de Arquitetura (Fase 4+)
49
+ */
50
+ private extrairSinaisArquitetura;
51
+ /**
52
+ * Extrai sinais do documento de UX/Design (Fase 3)
53
+ */
54
+ private extrairSinaisUX;
55
+ /**
56
+ * Extrator genérico para outras fases
57
+ */
58
+ private extrairSinaisGenerico;
59
+ /**
60
+ * Agrupa sinais por categoria
61
+ */
62
+ private agruparPorCategoria;
63
+ /**
64
+ * Retorna o sinal com maior confiança de um array
65
+ */
66
+ private melhorSinal;
67
+ }
68
+ export declare const classificacaoProgressiva: ClassificacaoProgressivaService;
69
+ //# sourceMappingURL=classificacao-progressiva.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classificacao-progressiva.service.d.ts","sourceRoot":"","sources":["../../src/services/classificacao-progressiva.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACR,iBAAiB,EACjB,kBAAkB,EAElB,IAAI,EACP,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AACH,qBAAa,+BAA+B;IACxC;;OAEG;IACH,eAAe,CACX,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,IAAI,EACV,gBAAgB,EAAE,kBAAkB,EAAE,GACvC,kBAAkB,EAAE;IAgCvB;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG;QACtC,KAAK,EAAE,iBAAiB,CAAC;QACzB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,EAAE,CAAA;KACtB;IAmFD;;OAEG;IACH,iBAAiB,CACb,UAAU,EAAE,iBAAiB,EAC7B,cAAc,EAAE,iBAAiB,EACjC,SAAS,EAAE,MAAM,GAClB;QACC,QAAQ,EAAE,OAAO,CAAC;QAClB,EAAE,EAAE,iBAAiB,CAAC;QACtB,IAAI,EAAE,iBAAiB,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;KAC5B;IA4BD;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgF5B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA+D/B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAyHhC;;OAEG;IACH,OAAO,CAAC,eAAe;IAsDvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAgB7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;OAEG;IACH,OAAO,CAAC,WAAW;CAKtB;AAGD,eAAO,MAAM,wBAAwB,iCAAwC,CAAC"}