@gherk/requirements-extractor 1.3.0 → 1.5.0

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.
@@ -0,0 +1,14 @@
1
+ export type Language = "es" | "en" | "auto";
2
+ export type Confidence = "high" | "medium" | "low";
3
+ export interface HeuristicMatch {
4
+ text: string;
5
+ page: number;
6
+ patternType: string;
7
+ pattern: string;
8
+ confidence: Confidence;
9
+ suggestedCategories: string[];
10
+ reason: string;
11
+ }
12
+ export declare function detectLanguage(text: string): "es" | "en";
13
+ export declare function scanForImplicitRequirements(text: string, startPage: number, endPage: number, language?: Language): HeuristicMatch[];
14
+ //# sourceMappingURL=heuristics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heuristics.d.ts","sourceRoot":"","sources":["../src/heuristics.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AAC5C,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEnD,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;CAClB;AAsID,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAKxD;AA2CD,wBAAgB,2BAA2B,CACvC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,QAAiB,GAC5B,cAAc,EAAE,CA+ClB"}
@@ -0,0 +1,255 @@
1
+ // ─── Heuristic Scanner for Implicit Requirements ────────────────────
2
+ //
3
+ // Scans parsed PDF text for implicit requirements that lack formal identifiers.
4
+ // Supports multilingual patterns (ES/EN) with auto-detect fallback.
5
+ const PATTERNS = {
6
+ es: {
7
+ obligation: [
8
+ "debe", "deberá", "es obligatorio", "se requiere", "tiene que",
9
+ "necesita", "tendrá que", "ha de", "es necesario", "es imprescindible",
10
+ "será obligatorio", "no puede estar vacío",
11
+ ],
12
+ capability: [
13
+ "puede", "podrá", "será capaz de", "permite", "será posible",
14
+ "tendrá la posibilidad", "habilitará",
15
+ ],
16
+ access: [
17
+ "tendrá acceso", "tiene acceso a", "acceso a ver", "acceso a crear",
18
+ "acceso a modificar", "acceso a eliminar", "acceso a gestionar",
19
+ "will have access", "has access to",
20
+ ],
21
+ system: [
22
+ "el sistema deberá", "la plataforma", "el backend", "la aplicación",
23
+ "el portal", "el panel", "el módulo",
24
+ ],
25
+ condition: [
26
+ "si.*entonces", "cuando.*debe", "en caso de", "siempre que",
27
+ "a menos que", "excepto si",
28
+ ],
29
+ validation: [
30
+ "no debe", "no puede", "no se permite", "no está permitido",
31
+ "no se aceptará", "restringido a", "limitado a",
32
+ ],
33
+ configuration: [
34
+ "configurable", "editable", "campo obligatorio", "parámetro",
35
+ "a nivel de empresa", "a nivel de fleet", "por empresa",
36
+ "personalizable", "activar.*desactivar",
37
+ ],
38
+ structural: [
39
+ "observaciones preliminares", "introducción", "contexto",
40
+ "caso de uso", "supuestos", "restricciones", "alcance",
41
+ "flujo de trabajo", "proceso", "preliminary remarks",
42
+ "use case", "assumptions",
43
+ ],
44
+ actors: [
45
+ "fleet manager", "super admin", "control room", "call center",
46
+ "company manager", "company user", "driver", "conductor",
47
+ "dealer", "concesionario", "administrador", "usuario",
48
+ "equipo acs", "acs team", "icc team",
49
+ ],
50
+ integration: [
51
+ "api", "dms", "obd", "canbus", "can-bus", "payment gateway",
52
+ "pasarela de pago", "sincronización", "integración", "webhook",
53
+ "bluetooth", "ble", "gps", "psd2", "gdpr",
54
+ ],
55
+ workflow: [
56
+ "el usuario llama", "envía.*email", "se notifica", "se envía",
57
+ "sube.*archivo", "descarga", "completar.*perfil",
58
+ "validar.*perfil", "proceso.*kyc", "onboarding",
59
+ ],
60
+ },
61
+ en: {
62
+ obligation: [
63
+ "must", "shall", "is required", "needs to", "has to",
64
+ "will have to", "is mandatory", "cannot be empty",
65
+ ],
66
+ capability: [
67
+ "can", "could", "will be able to", "allows", "enables",
68
+ "makes it possible",
69
+ ],
70
+ access: [
71
+ "will have access", "has access to", "access to view",
72
+ "access to create", "access to modify", "access to delete",
73
+ "access to manage",
74
+ ],
75
+ system: [
76
+ "the system must", "the system shall", "the platform",
77
+ "the backend", "the application", "the portal", "the module",
78
+ ],
79
+ condition: [
80
+ "if.*then", "when.*must", "in case of", "whenever",
81
+ "unless", "except when",
82
+ ],
83
+ validation: [
84
+ "must not", "cannot", "is not allowed", "shall not",
85
+ "restricted to", "limited to",
86
+ ],
87
+ configuration: [
88
+ "configurable", "editable", "mandatory field", "parameter",
89
+ "at company level", "at fleet level", "per company",
90
+ "customizable", "enable.*disable",
91
+ ],
92
+ structural: [
93
+ "preliminary remarks", "introduction", "context",
94
+ "use case", "assumptions", "constraints", "scope",
95
+ "workflow", "process",
96
+ ],
97
+ actors: [
98
+ "fleet manager", "super admin", "control room", "call center",
99
+ "company manager", "company user", "driver",
100
+ "dealer", "administrator", "user",
101
+ "acs team", "icc team",
102
+ ],
103
+ integration: [
104
+ "api", "dms", "obd", "canbus", "can-bus", "payment gateway",
105
+ "synchronization", "integration", "webhook",
106
+ "bluetooth", "ble", "gps", "psd2", "gdpr",
107
+ ],
108
+ workflow: [
109
+ "the user calls", "sends.*email", "is notified", "is sent",
110
+ "uploads.*file", "downloads", "complete.*profile",
111
+ "validate.*profile", "kyc process", "onboarding",
112
+ ],
113
+ },
114
+ };
115
+ // ─── Language Detection ─────────────────────────────────────────────
116
+ const ES_MARKERS = ["debe", "deberá", "tiene", "puede", "también", "está", "será", "según", "configurar", "gestionar"];
117
+ const EN_MARKERS = ["must", "shall", "should", "will", "can", "the system", "access to", "configure", "manage"];
118
+ export function detectLanguage(text) {
119
+ const lower = text.toLowerCase();
120
+ const esScore = ES_MARKERS.reduce((acc, m) => acc + (lower.split(m).length - 1), 0);
121
+ const enScore = EN_MARKERS.reduce((acc, m) => acc + (lower.split(m).length - 1), 0);
122
+ return esScore >= enScore ? "es" : "en";
123
+ }
124
+ // ─── Category Suggestion ────────────────────────────────────────────
125
+ function suggestCategories(text) {
126
+ const lower = text.toLowerCase();
127
+ const cats = [];
128
+ // Backend signals
129
+ if (/api|endpoint|rest|servicio|service|lógica de negocio|business logic|base de datos|database|email|integración|integration/.test(lower)) {
130
+ cats.push("backend");
131
+ }
132
+ // BO signals
133
+ if (/gestionar|gestión|administrar|configurar|crud|panel|backoffice|back.?office|fleet manager|super admin|control room|crear.*desde.*backend|menu.*backend/.test(lower)) {
134
+ cats.push("bo");
135
+ }
136
+ // Frontend signals
137
+ if (/portal.*driver|driver.*portal|portal.*web|web.*portal|el conductor ve|el driver|the driver sees|usuario final|end.?user/.test(lower)) {
138
+ cats.push("frontend");
139
+ }
140
+ // Mobile signals
141
+ if (/app|aplicación|ios|android|móvil|mobile|bluetooth|ble|push.*notif|notificación.*push|pantalla/.test(lower)) {
142
+ cats.push("mobile");
143
+ }
144
+ // Non-functional signals
145
+ if (/psd2|gdpr|seguridad|security|rendimiento|performance|escalabilidad|scalability|sla|auditoría|audit/.test(lower)) {
146
+ cats.push("non-functional");
147
+ }
148
+ // Infra signals
149
+ if (/entorno|environment|uat|preprod|staging|producción|production|base de datos|database|migración|migration/.test(lower)) {
150
+ cats.push("infra");
151
+ }
152
+ return cats.length > 0 ? cats : ["backend"];
153
+ }
154
+ // ─── Scanner ────────────────────────────────────────────────────────
155
+ export function scanForImplicitRequirements(text, startPage, endPage, language = "auto") {
156
+ const lang = language === "auto" ? detectLanguage(text) : language;
157
+ const patterns = PATTERNS[lang];
158
+ const matches = [];
159
+ const seen = new Set();
160
+ // Split into sentences for granular matching
161
+ const sentences = text.split(/[.!?\n]/).map(s => s.trim()).filter(s => s.length > 20);
162
+ for (const sentence of sentences) {
163
+ const lower = sentence.toLowerCase();
164
+ // Skip boilerplate (copyright, confidentiality, version control)
165
+ if (/copyright|confidential|version control|change history|issued by|arval internal use/.test(lower)) {
166
+ continue;
167
+ }
168
+ for (const [patternType, patternList] of Object.entries(patterns)) {
169
+ for (const pattern of patternList) {
170
+ const regex = new RegExp(pattern, "i");
171
+ if (regex.test(lower)) {
172
+ // Deduplicate by sentence
173
+ const key = `${patternType}:${sentence.substring(0, 80)}`;
174
+ if (seen.has(key))
175
+ continue;
176
+ seen.add(key);
177
+ const confidence = getConfidence(patternType, lower);
178
+ const suggestedCategories = suggestCategories(sentence);
179
+ matches.push({
180
+ text: sentence.substring(0, 300),
181
+ page: startPage,
182
+ patternType,
183
+ pattern,
184
+ confidence,
185
+ suggestedCategories,
186
+ reason: getReasonMessage(patternType, pattern, lang),
187
+ });
188
+ break; // One match per pattern type per sentence
189
+ }
190
+ }
191
+ }
192
+ }
193
+ // Deduplicate and keep only most confident per text
194
+ return deduplicateMatches(matches);
195
+ }
196
+ function getConfidence(patternType, text) {
197
+ // High confidence: obligation verbs + structural sections with actors
198
+ if (patternType === "obligation" || patternType === "access")
199
+ return "high";
200
+ if (patternType === "workflow")
201
+ return "high";
202
+ // Medium: system, validation, configuration
203
+ if (patternType === "system" || patternType === "validation" || patternType === "configuration")
204
+ return "medium";
205
+ if (patternType === "actors" || patternType === "integration")
206
+ return "medium";
207
+ // Low: capability, structural, condition
208
+ return "low";
209
+ }
210
+ function getReasonMessage(patternType, pattern, lang) {
211
+ const reasons = {
212
+ es: {
213
+ obligation: `Verbo de obligación detectado ("${pattern}") — probable requisito funcional`,
214
+ capability: `Verbo de capacidad detectado ("${pattern}") — posible requisito funcional`,
215
+ access: `Patrón de acceso/permisos detectado ("${pattern}") — requisito de RBAC/BO`,
216
+ system: `Referencia al sistema detectada ("${pattern}") — requisito técnico`,
217
+ condition: `Condición de negocio detectada ("${pattern}") — regla de negocio`,
218
+ validation: `Restricción/validación detectada ("${pattern}") — requisito de validación`,
219
+ configuration: `Parámetro configurable detectado ("${pattern}") — requisito de configuración`,
220
+ structural: `Sección contextual con contenido técnico ("${pattern}") — posible requisito disfrazado de contexto`,
221
+ actors: `Actor del sistema detectado ("${pattern}") — verificar que tiene requisitos asociados`,
222
+ integration: `Integración externa detectada ("${pattern}") — requisito de integración`,
223
+ workflow: `Flujo de trabajo/proceso detectado ("${pattern}") — requisito de proceso/onboarding`,
224
+ },
225
+ en: {
226
+ obligation: `Obligation verb detected ("${pattern}") — likely functional requirement`,
227
+ capability: `Capability verb detected ("${pattern}") — possible functional requirement`,
228
+ access: `Access/permission pattern detected ("${pattern}") — RBAC/BO requirement`,
229
+ system: `System reference detected ("${pattern}") — technical requirement`,
230
+ condition: `Business condition detected ("${pattern}") — business rule`,
231
+ validation: `Restriction/validation detected ("${pattern}") — validation requirement`,
232
+ configuration: `Configurable parameter detected ("${pattern}") — configuration requirement`,
233
+ structural: `Contextual section with technical content ("${pattern}") — possible requirement disguised as context`,
234
+ actors: `System actor detected ("${pattern}") — verify associated requirements exist`,
235
+ integration: `External integration detected ("${pattern}") — integration requirement`,
236
+ workflow: `Workflow/process detected ("${pattern}") — process/onboarding requirement`,
237
+ },
238
+ };
239
+ return reasons[lang][patternType] || `Pattern "${pattern}" matched in category "${patternType}"`;
240
+ }
241
+ function deduplicateMatches(matches) {
242
+ const byText = new Map();
243
+ for (const m of matches) {
244
+ const key = m.text.substring(0, 80);
245
+ const existing = byText.get(key);
246
+ if (!existing || confidenceRank(m.confidence) > confidenceRank(existing.confidence)) {
247
+ byText.set(key, m);
248
+ }
249
+ }
250
+ return Array.from(byText.values()).sort((a, b) => confidenceRank(b.confidence) - confidenceRank(a.confidence));
251
+ }
252
+ function confidenceRank(c) {
253
+ return c === "high" ? 3 : c === "medium" ? 2 : 1;
254
+ }
255
+ //# sourceMappingURL=heuristics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heuristics.js","sourceRoot":"","sources":["../src/heuristics.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -10,12 +10,14 @@ import { checkProvider } from "./llm-client.js";
10
10
  import { parsePdf } from "./pdf-parser.js";
11
11
  import { DEFAULT_CATEGORIES } from "./types.js";
12
12
  import { jobManager } from "./job-manager.js";
13
+ import { scanForImplicitRequirements, detectLanguage } from "./heuristics.js";
14
+ import { analyzeRequirement, formatWarnings } from "./requirement-analyzer.js";
13
15
  // ─── MCP Server ─────────────────────────────────────────────────────
14
16
  const server = new McpServer({
15
17
  name: "mcp-requirements-extractor",
16
18
  version: "1.0.0",
17
19
  });
18
- const VALID_CATEGORIES = ["backend", "frontend", "mobile", "infra", "devops", "non-functional"];
20
+ const VALID_CATEGORIES = ["backend", "frontend", "bo", "mobile", "infra", "devops", "non-functional"];
19
21
  // ─── Tool: extract_requirements ─────────────────────────────────────
20
22
  // Initialize Scraper
21
23
  const scraperService = new ScraperService();
@@ -23,7 +25,7 @@ server.tool("extract_requirements", `Extracts requirements from a PDF document a
23
25
  Runs asynchronously — returns a jobId immediately. Use get_extraction_progress to poll for results.
24
26
 
25
27
  Pipeline: 1. Identify requirements → 2. Classify by layer → 3. Generate markdown/JSON
26
- Categories: backend, frontend, mobile, infra, devops, non-functional`, {
28
+ Categories: backend, frontend, bo, mobile, infra, devops, non-functional`, {
27
29
  pdfPath: z.string().describe("Absolute path to the PDF file to analyze"),
28
30
  outputDir: z.string().describe("Absolute path to the output directory"),
29
31
  projectPrefix: z.string().optional().default("ACS").describe("Project prefix for requirement IDs (e.g., 'ACS' → ACS_BE_01)"),
@@ -233,11 +235,27 @@ server.tool("get_requirement", "Returns the full content of a specific requireme
233
235
  // ─── Tool: parse_pdf (IDE-driven) ───────────────────────────────────
234
236
  server.tool("parse_pdf", `Parses a PDF file and returns its text content split into page-based chunks.
235
237
  Use this to read the PDF content so YOU (the IDE AI) can analyze, identify, and classify requirements yourself.
236
- Each chunk contains ~5 pages of text. Process them sequentially to extract requirements.`, {
238
+ Each chunk contains ~5 pages of text. Process them sequentially to extract requirements.
239
+
240
+ IMPORTANT — MULTI-LAYER DECOMPOSITION:
241
+ When analyzing requirements, remember that a SINGLE requirement from the PDF often needs to be decomposed into MULTIPLE layer-specific requirement files. For each requirement you identify, ask yourself:
242
+ - Does it need a REST API, business logic, data storage, emails, or integrations? → Write a "backend" requirement
243
+ - Does an admin/fleet manager MANAGE or CONFIGURE it in a web panel? → Write a "bo" (Back Office) requirement
244
+ - Does the end-user (driver/client) SEE or USE it in a web portal? → Write a "frontend" requirement
245
+ - Does the user interact with it on a mobile app (iOS/Android)? → Write a "mobile" requirement
246
+
247
+ NEW — HEURISTIC HINTS:
248
+ Each chunk now includes "heuristicHints" — automatically detected patterns that may indicate implicit requirements.
249
+ Pay special attention to hints with confidence "high" — these are likely real requirements disguised as context.
250
+ Do NOT skip introductory sections (Preliminary Remarks, Use Cases, etc.) — they often contain critical requirements.
251
+
252
+ Categories: backend, bo, frontend, mobile, infra, devops, non-functional
253
+ Use write_requirement to save each decomposed requirement to its category directory.`, {
237
254
  pdfPath: z.string().describe("Absolute path to the PDF file"),
238
255
  pagesPerChunk: z.number().optional().default(5).describe("Number of pages per chunk (default: 5)"),
239
256
  chunkIndex: z.number().optional().describe("If set, return only this specific chunk (0-based). Omit to get all chunks."),
240
- }, async ({ pdfPath, pagesPerChunk, chunkIndex }) => {
257
+ language: z.enum(["es", "en", "auto"]).optional().default("auto").describe("Language for heuristic scanning: 'es', 'en', or 'auto' (auto-detect)"),
258
+ }, async ({ pdfPath, pagesPerChunk, chunkIndex, language }) => {
241
259
  if (!fs.existsSync(pdfPath)) {
242
260
  return {
243
261
  content: [{ type: "text", text: `❌ PDF not found: ${pdfPath}` }],
@@ -252,6 +270,7 @@ Each chunk contains ~5 pages of text. Process them sequentially to extract requi
252
270
  };
253
271
  }
254
272
  const chunk = chunks[chunkIndex];
273
+ const hints = scanForImplicitRequirements(chunk.text, chunk.startPage, chunk.endPage, language);
255
274
  return {
256
275
  content: [{
257
276
  type: "text",
@@ -261,23 +280,28 @@ Each chunk contains ~5 pages of text. Process them sequentially to extract requi
261
280
  startPage: chunk.startPage,
262
281
  endPage: chunk.endPage,
263
282
  text: chunk.text,
283
+ heuristicHints: hints.filter(h => h.confidence !== "low"),
264
284
  }),
265
285
  }],
266
286
  };
267
287
  }
268
- // Return all chunks with metadata
288
+ // Return all chunks with metadata and heuristic hints
269
289
  return {
270
290
  content: [{
271
291
  type: "text",
272
292
  text: JSON.stringify({
273
293
  totalChunks: chunks.length,
274
294
  totalPages: chunks[chunks.length - 1]?.endPage || 0,
275
- chunks: chunks.map((c, i) => ({
276
- index: i,
277
- startPage: c.startPage,
278
- endPage: c.endPage,
279
- text: c.text,
280
- })),
295
+ chunks: chunks.map((c, i) => {
296
+ const hints = scanForImplicitRequirements(c.text, c.startPage, c.endPage, language);
297
+ return {
298
+ index: i,
299
+ startPage: c.startPage,
300
+ endPage: c.endPage,
301
+ text: c.text,
302
+ heuristicHints: hints.filter(h => h.confidence !== "low"),
303
+ };
304
+ }),
281
305
  }),
282
306
  }],
283
307
  };
@@ -296,7 +320,22 @@ Use this after YOU (the IDE AI) have generated the requirement content.
296
320
  The file will be saved as: {outputDir}/{category}/{filename}
297
321
  It also creates the category directory if it doesn't exist.
298
322
 
299
- Expected markdown format (same as Arval project):
323
+ ACTIVE VALIDATION This tool now analyzes the content before writing and returns warnings:
324
+ - 🔍 GRANULARITY: Items within the requirement that could be separate requirements (e.g., "Fuel Cards: Crear y gestionar" inside a Vehicle Management requirement)
325
+ - 🏗️ MISSING LAYERS: If the content mentions admin actors (Fleet Manager, Super Admin) but category is not 'bo', it suggests creating a BO requirement too
326
+ - 📋 ACCEPTANCE CRITERIA QUALITY: Flags vague criteria that read like user stories instead of specific, testable conditions
327
+ - 🔗 CROSS-REFERENCES: Checks if referenced requirement IDs exist as files
328
+
329
+ Pay attention to these warnings and act on them — create additional requirements for flagged sub-items and missing layers.
330
+
331
+ IMPORTANT: A single requirement from the source PDF often results in MULTIPLE calls to this tool — one per layer/category.
332
+ For example, "Booking Management" might generate:
333
+ - backend/ACS_BE_07_bookings.md (API + business logic)
334
+ - bo/ACS_BO_07_bookings_management.md (admin CRUD + agenda)
335
+ - mobile/ACS_MB_01_booking_creation.md (driver app flow)
336
+ - frontend/ACS_FE_01_booking_portal.md (driver web portal)
337
+
338
+ Expected markdown format:
300
339
  - Header: # {ID} — {TITLE IN UPPERCASE}
301
340
  - Metadata table with Identificador, Título, Tipo, Sección, Página
302
341
  - Sections: Objetivo, Descripción Técnica (with Mermaid diagrams), Consideraciones Técnicas, Criterios de Aceptación (checkboxes)`, {
@@ -310,10 +349,13 @@ Expected markdown format (same as Arval project):
310
349
  fs.mkdirSync(catDir, { recursive: true });
311
350
  const filePath = path.join(catDir, filename);
312
351
  fs.writeFileSync(filePath, content, "utf-8");
352
+ // Analyze the written requirement
353
+ const analysis = analyzeRequirement(content, category, outputDir);
354
+ const warningsText = formatWarnings(analysis);
313
355
  return {
314
356
  content: [{
315
357
  type: "text",
316
- text: `✅ Written: ${category}/${filename} (${content.length} bytes)`,
358
+ text: `✅ Written: ${category}/${filename} (${content.length} bytes)${warningsText}`,
317
359
  }],
318
360
  };
319
361
  }
@@ -324,6 +366,66 @@ Expected markdown format (same as Arval project):
324
366
  };
325
367
  }
326
368
  });
369
+ // ─── Tool: scan_implicit_requirements (IDE-driven) ──────────────────
370
+ server.tool("scan_implicit_requirements", `Scans text for implicit requirements using multilingual heuristic patterns.
371
+ Use this AFTER parse_pdf to find requirements that lack formal identifiers (e.g., "ACS_BE_XX").
372
+
373
+ This tool detects:
374
+ - Obligation verbs: "must", "shall", "debe", "deberá", "tiene que"
375
+ - Access/permission patterns: "will have access to", "tendrá acceso a"
376
+ - Actor workflows: onboarding flows, KYC processes, dealer interactions
377
+ - Integration references: API, DMS, OBD, PSD2, GDPR
378
+ - Structural sections: "Preliminary Remarks", "Use Cases" that often hide real requirements
379
+ - Configuration patterns: "configurable", "editable", "campo obligatorio"
380
+
381
+ Each match includes confidence (high/medium/low), suggested categories, and reason.
382
+ Focus on "high" confidence matches — they are very likely real requirements.
383
+
384
+ Supports auto-detection of Spanish (ES) and English (EN) documents.`, {
385
+ text: z.string().describe("Text content to scan (from parse_pdf chunks)"),
386
+ startPage: z.number().optional().default(1).describe("Start page number for reference"),
387
+ endPage: z.number().optional().default(1).describe("End page number for reference"),
388
+ language: z.enum(["es", "en", "auto"]).optional().default("auto").describe("Language: 'es', 'en', or 'auto'"),
389
+ minConfidence: z.enum(["high", "medium", "low"]).optional().default("medium").describe("Minimum confidence level to return"),
390
+ }, async ({ text, startPage, endPage, language, minConfidence }) => {
391
+ try {
392
+ const detectedLang = language === "auto" ? detectLanguage(text) : language;
393
+ const allMatches = scanForImplicitRequirements(text, startPage, endPage, language);
394
+ // Filter by minimum confidence
395
+ const confidenceOrder = { high: 3, medium: 2, low: 1 };
396
+ const minLevel = confidenceOrder[minConfidence];
397
+ const filtered = allMatches.filter(m => confidenceOrder[m.confidence] >= minLevel);
398
+ // Format output
399
+ const summary = [
400
+ `🔎 Scanned ${text.length} characters (pages ${startPage}-${endPage})`,
401
+ `📝 Language detected: ${detectedLang}`,
402
+ `📊 Found: ${filtered.length} potential implicit requirements (${allMatches.length} total, filtered ≥${minConfidence})`,
403
+ "",
404
+ ];
405
+ for (const match of filtered) {
406
+ const icon = match.confidence === "high" ? "🔴" : match.confidence === "medium" ? "🟡" : "⚪";
407
+ summary.push(`${icon} [${match.confidence}] [${match.patternType}] ${match.reason}`);
408
+ summary.push(` 📄 "${match.text.substring(0, 120)}..."`);
409
+ summary.push(` 📂 Suggested categories: ${match.suggestedCategories.join(", ")}`);
410
+ summary.push("");
411
+ }
412
+ if (filtered.length === 0) {
413
+ summary.push("✅ No implicit requirements detected at this confidence level.");
414
+ }
415
+ return {
416
+ content: [{
417
+ type: "text",
418
+ text: summary.join("\n"),
419
+ }],
420
+ };
421
+ }
422
+ catch (error) {
423
+ return {
424
+ content: [{ type: "text", text: `❌ Error scanning: ${error.message}` }],
425
+ isError: true,
426
+ };
427
+ }
428
+ });
327
429
  // ─── Tool: write_summary (IDE-driven) ───────────────────────────────
328
430
  server.tool("write_summary", `Writes a README.md summary file and/or a VALORACION.md estimation file to the requirements directory.
329
431
  Use this after all requirements have been written to generate an index.`, {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAuB7D;AAED,wBAAgB,kBAAkB,CAC9B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GAChB,MAAM,CAyBR;AAID,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CA8CrF;AAED,wBAAgB,kBAAkB,CAC9B,YAAY,EAAE,KAAK,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC,EACF,UAAU,EAAE,QAAQ,EAAE,GACvB,MAAM,CAwBR;AAKD,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAc7D;AAED,wBAAgB,kBAAkB,CAC9B,GAAG,EAAE;IACD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CAChB,GACF,MAAM,CA6DR;AAID,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAc5D;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,EAAE,CAAC;CACjC,GAAG,MAAM,CAuBT"}
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAwB7D;AAED,wBAAgB,kBAAkB,CAC9B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GAChB,MAAM,CAyBR;AAID,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CA+ErF;AAED,wBAAgB,kBAAkB,CAC9B,YAAY,EAAE,KAAK,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC,EACF,UAAU,EAAE,QAAQ,EAAE,GACvB,MAAM,CA+BR;AAKD,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAkC7D;AAED,wBAAgB,kBAAkB,CAC9B,GAAG,EAAE;IACD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CAChB,GACF,MAAM,CA6DR;AAID,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAc5D;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,EAAE,CAAC;CACjC,GAAG,MAAM,CAuBT"}
package/dist/prompts.js CHANGED
@@ -13,6 +13,7 @@ REGLAS IMPORTANTES:
13
13
  - Incluye requisitos funcionales y no funcionales
14
14
  - NO inventes información que no esté explícitamente en el texto
15
15
  - Si no hay requisitos claros, responde con un array vacío: []
16
+ - Si el documento menciona login, perfiles de usuario, acceso restringido por rol o credenciales, identifica la autenticación como un REQUISITO PROPIO (no lo metas en otros requisitos)
16
17
 
17
18
  FORMATO DE RESPUESTA:
18
19
  - Devuelve SOLO un JSON array válido
@@ -55,46 +56,79 @@ export function classifySystemPrompt(categories, context) {
55
56
  .map((c) => `- "${c.id}": ${c.label} — ${c.description}`)
56
57
  .join("\n");
57
58
  return `Eres un ARQUITECTO DE SOFTWARE PRINCIPAL con 20 años de experiencia en sistemas distribuidos. Tu capacidad de análisis es legendaria.
58
- Tu misión es diseccionar requisitos funcionales y mapearlos a las capas arquitectónicas correctas.
59
+ Tu misión es DESCOMPONER cada requisito en TODAS las capas arquitectónicas que necesita implementación.
59
60
 
60
61
  CONTEXTO:
61
- Estás analizando un sistema moderno basado en microservicios, SPAs (React/Vue) y aplicaciones móviles. La mayoría de las funcionalidades modernas son "Full Stack" (tocan varias capas), pero otras son específicas.
62
+ Estás analizando un sistema moderno con: APIs backend, un panel de Back Office (BO) para administradores, un portal web para usuarios finales (Frontend), y aplicaciones móviles (iOS/Android). La MAYORÍA de los requisitos son "Full Stack" y tocan VARIAS capas simultáneamente.
62
63
 
63
64
  TUS HERRAMIENTAS (CATEGORÍAS):
64
65
  ${catDescriptions}
65
66
 
66
- MODELO MENTAL DE CLASIFICACIÓN (Usa este razonamiento):
67
-
68
- 1. **ANÁLISIS DE IMPACTO**:
69
- - ¿El requisito cambia lo que el usuario VE o TOCA?Impacto FRONTEND.
70
- - ¿El requisito implica guardar datos, reglas de negocio, correos, integraciones o APIs? Impacto BACKEND.
71
- - ¿El requisito habla de sensores, GPS, notificaciones push o tiendas de apps? Impacto MOBILE.
72
- - ¿El requisito habla de seguridad, rendimiento, logs o despliegue? → NON-FUNCTIONAL o DEVOPS.
73
-
74
- 2. **REGLA DE ORO "FULL STACK"**:
75
- - Una funcionalidad compleja casi siempre es HÍBRIDA.
76
- - Ejemplo: "Sistema de Chat".
77
- - ¿Tiene pantallas? FRONTEND.
78
- - ¿Guarda mensajes? BACKEND.
79
- - ¿Notifica al móvil? MOBILE.
80
- -> Resultado: ["frontend", "backend", "mobile"]
81
-
82
- - Ejemplo: "Validación de formularios complejos (Vueform)".
83
- - ¿Renderiza campos? SÍ → FRONTEND.
84
- - ¿Valida contra base de datos? BACKEND.
85
- -> Resultado: ["frontend", "backend"]
86
-
87
- 3. **PRIORIDAD**:
88
- - Ordena las categorías por "peso" del desarrollo.
89
- - Si es 80% interfaz y 20% API → ["frontend", "backend"]
90
- - Si es 80% algoritmo y 20% panel de control ["backend", "frontend"]
67
+ ⚠️ REGLA CRÍTICA DISTINCIÓN ENTRE "bo" Y "frontend":
68
+ - "bo" (Back Office) = Panel de GESTIÓN/ADMINISTRACIÓN para perfiles internos: Super Admin, Fleet Manager, Control Room, Company Manager. Aquí se CONFIGURAN, GESTIONAN y MONITORIZAN los datos del sistema.
69
+ - "frontend" = Portal/Web del USUARIO FINAL (driver, cliente). Aquí el usuario final CONSUME el servicio: ve su perfil, hace reservas, ve sus viajes, paga.
70
+ - Si un requisito habla de "gestionar", "configurar", "administrar", "crear desde el back end" es "bo".
71
+ - Si un requisito habla de "el usuario/driver ve", "el driver reserva", "portal del conductor"es "frontend".
72
+ - MUCHOS requisitos tendrán AMBOS: el admin lo configura en BO y el usuario lo consume en frontend/mobile.
73
+
74
+ MODELO MENTAL DE DESCOMPOSICIÓN MULTI-CAPA:
75
+
76
+ 1. **ANÁLISIS DE IMPACTO POR CAPA** (pregúntate para CADA requisito):
77
+ - ¿Necesita APIs, lógica de negocio, almacenamiento de datos, emails, integraciones? → "backend"
78
+ - ¿Un administrador lo GESTIONA/CONFIGURA en un panel web? → "bo"
79
+ - ¿El usuario final lo VE/USA en un portal web? → "frontend"
80
+ - ¿El usuario lo USA en una app móvil iOS/Android? → "mobile"
81
+ - ¿Habla de entornos, CI/CD, contenedores? → "devops"
82
+ - ¿Habla de seguridad, rendimiento, SLAs, GDPR? → "non-functional"
83
+ - ¿Habla de base de datos, esquemas, migraciones? → "infra"
84
+
85
+ 2. **REGLA DE ORO LA MAYORÍA DE REQUISITOS SON MULTI-CAPA**:
86
+ Un requisito funcional casi SIEMPRE toca varias capas. NO te limites a una sola categoría.
87
+
88
+ EJEMPLOS CONCRETOS:
89
+ - "Gestión de Bookings (crear, modificar, eliminar reservas)":
90
+ backend: API REST de bookings, lógica de validación, motor de reglas
91
+ bo: CRUD de bookings para Fleet Manager, agenda de reservas, vista de estados
92
+ → mobile: Pantalla de reserva en la app, selección de zona/fecha/categoría
93
+ → frontend: Misma funcionalidad de reserva en el portal web del driver
94
+ → Resultado: ["backend", "bo", "mobile", "frontend"]
95
+
96
+ - "Smart Allocation (asignación inteligente de vehículos)":
97
+ → backend: Motor de reglas de asignación, algoritmo de matching
98
+ → bo: Configuración de preferencias EV/ICV a nivel empresa, reglas de prioridad
99
+ → Resultado: ["backend", "bo"]
100
+
101
+ - "Perfiles de Conductores (Business y Private)":
102
+ → backend: Modelo de datos, flags de perfil, validación de licencias
103
+ → bo: Gestión de drivers, activar/desactivar, validar licencias, CSV bulk
104
+ → mobile: Completar perfil en app, ver datos de su perfil
105
+ → frontend: Completar perfil en portal web
106
+ → Resultado: ["backend", "bo", "mobile", "frontend"]
107
+
108
+ - "Financial Settings (VAT, Charge Types, Payment Gateway)":
109
+ → backend: Invoice Engine, integración con pasarela de pago, contabilidad
110
+ → bo: Configuración de VAT codes, charge types, payment gateway, templates de factura
111
+ → Resultado: ["backend", "bo"]
112
+
113
+ - "White Label / Look & Feel":
114
+ → backend: API de configuración L&F por fleet/company
115
+ → bo: Configuración de L&F en el panel admin
116
+ → mobile: Renderizado del L&F en la app
117
+ → frontend: Renderizado del L&F en el portal web
118
+ → Resultado: ["backend", "bo", "mobile", "frontend"]
119
+
120
+ 3. **PRIORIDAD EN EL ARRAY**:
121
+ - Ordena las categorías por PESO del desarrollo.
122
+ - Si es 60% panel admin y 30% API y 10% app → ["bo", "backend", "mobile"]
123
+ - Si es 70% app móvil y 30% API → ["mobile", "backend"]
91
124
 
92
125
  ${context ? `CONTEXTO ADICIONAL:\n${context}` : ""}
93
126
 
94
127
  TU SALIDA:
95
128
  - Devuelve un JSON array de objetos.
96
129
  - Propiedad "categories": Array de strings EN ORDEN DE IMPORTANCIA.
97
- - preciso. No adivines. Usa tu criterio experto.`;
130
+ - INCLUYE TODAS las capas que necesitan implementación, no solo la principal.
131
+ - Sé exhaustivo y preciso. La descomposición multi-capa es OBLIGATORIA cuando aplica.`;
98
132
  }
99
133
  export function classifyUserPrompt(requirements, categories) {
100
134
  const reqList = requirements
@@ -103,17 +137,24 @@ export function classifyUserPrompt(requirements, categories) {
103
137
  Contexto Original: "${r.raw_text ? r.raw_text.substring(0, 300).replace(/\n/g, " ") : "N/A"}"`)
104
138
  .join("\n\n");
105
139
  const catIds = categories.map((c) => `"${c.id}"`).join(", ");
106
- return `Analiza estos requisitos y clasifícalos arquitectónicamente.
140
+ return `Analiza estos requisitos y DESCOMPONLOS en TODAS sus capas arquitectónicas.
107
141
  Categorías válidas: ${catIds}
108
142
 
143
+ RECUERDA:
144
+ - "bo" = panel admin (Super Admin, Fleet Manager, Control Room)
145
+ - "frontend" = portal web del usuario final (driver, cliente)
146
+ - La mayoría de requisitos DEBEN tener múltiples categorías
147
+
109
148
  REQUISITOS A ANALIZAR:
110
149
  ${reqList}
111
150
 
112
151
  Responde SOLO con el JSON array. Ejemplo:
113
152
  [
114
- { "id_suggestion": "user_chat", "categories": ["frontend", "backend", "mobile"] },
115
- { "id_suggestion": "api_gateway", "categories": ["backend", "devops"] },
116
- { "id_suggestion": "landing_page", "categories": ["frontend"] }
153
+ { "id_suggestion": "booking_management", "categories": ["backend", "bo", "mobile", "frontend"] },
154
+ { "id_suggestion": "smart_allocation", "categories": ["backend", "bo"] },
155
+ { "id_suggestion": "driver_profiles", "categories": ["backend", "bo", "mobile", "frontend"] },
156
+ { "id_suggestion": "financial_settings", "categories": ["backend", "bo"] },
157
+ { "id_suggestion": "uat_environment", "categories": ["devops", "infra"] }
117
158
  ]`;
118
159
  }
119
160
  // ─── Pass 3: Generate Markdown ──────────────────────────────────────
@@ -128,6 +169,26 @@ REGLAS:
128
169
  - Sé específico y técnico, no genérico
129
170
  - NO inventes funcionalidades que no estén en el resumen
130
171
 
172
+ REGLAS ESPECÍFICAS POR CAPA:
173
+
174
+ 📡 BACKEND:
175
+ - SIEMPRE incluye una subsección "### Endpoints API" dentro de la Descripción Técnica
176
+ - Lista TODOS los endpoints REST necesarios con método HTTP, path, descripción y códigos de respuesta
177
+ - Formato: \`METHOD /api/v1/resource\` — Descripción
178
+ - Ejemplo:
179
+ | Método | Endpoint | Descripción |
180
+ |--------|----------|-------------|
181
+ | GET | \`/api/v1/bookings\` | Listar reservas con filtros |
182
+ | POST | \`/api/v1/bookings\` | Crear nueva reserva |
183
+ | PATCH | \`/api/v1/bookings/:id\` | Modificar reserva existente |
184
+ | DELETE | \`/api/v1/bookings/:id\` | Cancelar reserva |
185
+
186
+ 🔐 AUTENTICACIÓN (solo cuando el requisito ES de autenticación/login/perfiles):
187
+ Cuando generes un requisito que trata ESPECÍFICAMENTE de autenticación, login o gestión de sesión, usa estas estrategias por capa:
188
+ - BACKEND: Endpoints de auth (\`POST /api/v1/auth/login\`, \`POST /api/v1/auth/refresh\`). Emite cookie httpOnly para clientes web y JWT para clientes mobile.
189
+ - FRONTEND / BO (Web): Cookie httpOnly + Secure + SameSite=Strict + CSRF token. NO JWT en localStorage.
190
+ - MOBILE (iOS/Android): JWT (access + refresh tokens). Access token en memoria, refresh token en **Keychain (iOS)** / **Keystore (Android)**. NO AsyncStorage/SharedPreferences para tokens.
191
+
131
192
  ${context ? `CONTEXTO ADICIONAL / DOCUMENTACIÓN:\n${context}` : ""}
132
193
 
133
194
  Devuelve SOLO el contenido Markdown, sin wrapping en code blocks.`;
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export type WarningSeverity = "error" | "warning" | "suggestion";
2
+ export interface RequirementWarning {
3
+ severity: WarningSeverity;
4
+ type: "granularity" | "missing_layer" | "vague_criteria" | "cross_reference";
5
+ message: string;
6
+ detail?: string;
7
+ }
8
+ export interface RequirementAnalysis {
9
+ warnings: RequirementWarning[];
10
+ score: number;
11
+ summary: string;
12
+ }
13
+ export declare function analyzeRequirement(content: string, category: string, outputDir: string): RequirementAnalysis;
14
+ export declare function formatWarnings(analysis: RequirementAnalysis): string;
15
+ //# sourceMappingURL=requirement-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requirement-analyzer.d.ts","sourceRoot":"","sources":["../src/requirement-analyzer.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,CAAC;AAEjE,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,EAAE,eAAe,CAAC;IAC1B,IAAI,EAAE,aAAa,GAAG,eAAe,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAChC,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACnB;AAsQD,wBAAgB,kBAAkB,CAC9B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAClB,mBAAmB,CAkCrB;AAID,wBAAgB,cAAc,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM,CAgBpE"}
@@ -0,0 +1,277 @@
1
+ // ─── Requirement Analyzer ───────────────────────────────────────────
2
+ //
3
+ // Analyzes requirement content before writing to detect:
4
+ // 1. Sub-items that should be separate requirements (granularity)
5
+ // 2. Missing layer coverage (e.g. backend CRUD without BO)
6
+ // 3. Vague acceptance criteria (user-story-level vs specific)
7
+ // 4. Cross-reference suggestions
8
+ import fs from "node:fs";
9
+ import path from "node:path";
10
+ // ─── CRUD / Sub-requirement Detection ───────────────────────────────
11
+ const CRUD_PATTERNS = [
12
+ /crear\s+y\s+gestionar/i,
13
+ /create\s+and\s+manage/i,
14
+ /crud\b/i,
15
+ /listar.*crear.*editar.*eliminar/i,
16
+ /list.*create.*edit.*delete/i,
17
+ /gestión\s+de\s+\w+/i,
18
+ /management\s+of\s+\w+/i,
19
+ /configurar\s+y\s+gestionar/i,
20
+ /configure\s+and\s+manage/i,
21
+ ];
22
+ const SUB_REQUIREMENT_INDICATORS = [
23
+ // Pattern: "- **Something**: verb + object" (bold label with description)
24
+ /^-\s+\*\*([^*]+)\*\*:\s*(.+)/gm,
25
+ // Pattern: "- Something: verb + object" (plain label with description)
26
+ /^-\s+([A-Z][^:]{3,30}):\s*((?:crear|gestionar|configurar|listar|CRUD|manage|create|configure|list).+)/gim,
27
+ ];
28
+ function detectSubRequirements(content) {
29
+ const warnings = [];
30
+ const lines = content.split("\n");
31
+ for (const line of lines) {
32
+ const trimmed = line.trim();
33
+ // Check for bold-labeled items that look like standalone requirements
34
+ const boldMatch = trimmed.match(/^-\s+\*\*([^*]+)\*\*\s*[:—]\s*(.+)/);
35
+ if (boldMatch) {
36
+ const [, label, description] = boldMatch;
37
+ const descLower = description.toLowerCase();
38
+ // Does it contain CRUD-like verbs?
39
+ const hasCrud = CRUD_PATTERNS.some(p => p.test(descLower));
40
+ // Does it look substantial enough to be its own requirement?
41
+ const isSubstantial = description.length > 30 || hasCrud;
42
+ if (isSubstantial && hasCrud) {
43
+ warnings.push({
44
+ severity: "warning",
45
+ type: "granularity",
46
+ message: `"${label}" podría ser un requisito separado`,
47
+ detail: `El ítem "${label}: ${description.substring(0, 80)}..." contiene operaciones CRUD propias. Considere extraerlo como un requisito independiente para mayor especificidad y trazabilidad.`,
48
+ });
49
+ }
50
+ }
51
+ }
52
+ return warnings;
53
+ }
54
+ // ─── Missing Layer Detection ────────────────────────────────────────
55
+ const BO_INDICATORS = [
56
+ /fleet\s*manager/i, /super\s*admin/i, /control\s*room/i,
57
+ /back\s*office/i, /panel\s*admin/i, /gestionar/i, /administrar/i,
58
+ /configurar/i, /crud/i, /crear.*desde.*backend/i,
59
+ /menú\s+de\s+gestión/i, /management\s+menu/i,
60
+ ];
61
+ const FRONTEND_INDICATORS = [
62
+ /driver\s*portal/i, /portal\s*web/i, /el\s+conductor/i,
63
+ /el\s+driver/i, /usuario\s+final/i, /end.?user/i,
64
+ /web\s*portal/i, /driver\s*web/i,
65
+ ];
66
+ const MOBILE_INDICATORS = [
67
+ /\bapp\b/i, /ios/i, /android/i, /móvil/i, /mobile/i,
68
+ /bluetooth/i, /ble\b/i, /push\s*notif/i, /pantalla/i,
69
+ ];
70
+ const BACKEND_INDICATORS = [
71
+ /api\b/i, /endpoint/i, /rest\b/i, /lógica\s+de\s+negocio/i,
72
+ /business\s+logic/i, /base\s+de\s+datos/i, /database/i,
73
+ /email\s+automát/i, /automatic\s+email/i,
74
+ ];
75
+ function detectMissingLayers(content, category) {
76
+ const warnings = [];
77
+ const lower = content.toLowerCase();
78
+ // If writing a backend requirement with CRUD content → suggest BO
79
+ if (category === "backend") {
80
+ const hasBoSignals = BO_INDICATORS.some(p => p.test(content));
81
+ if (hasBoSignals) {
82
+ warnings.push({
83
+ severity: "suggestion",
84
+ type: "missing_layer",
85
+ message: "Este requisito backend menciona gestión/admin → ¿existe el correspondiente requisito BO?",
86
+ detail: "El contenido menciona actores de administración (Fleet Manager, Super Admin, etc.) o verbos de gestión (configurar, gestionar, CRUD). Asegúrate de crear también un requisito en la categoría 'bo' para la interfaz de administración.",
87
+ });
88
+ }
89
+ const hasFrontendSignals = FRONTEND_INDICATORS.some(p => p.test(content));
90
+ if (hasFrontendSignals) {
91
+ warnings.push({
92
+ severity: "suggestion",
93
+ type: "missing_layer",
94
+ message: "Este requisito backend menciona driver portal → ¿existe el correspondiente requisito frontend?",
95
+ });
96
+ }
97
+ const hasMobileSignals = MOBILE_INDICATORS.some(p => p.test(content));
98
+ if (hasMobileSignals) {
99
+ warnings.push({
100
+ severity: "suggestion",
101
+ type: "missing_layer",
102
+ message: "Este requisito backend menciona app/mobile → ¿existe el correspondiente requisito mobile?",
103
+ });
104
+ }
105
+ }
106
+ // If writing a BO requirement → check backend exists
107
+ if (category === "bo") {
108
+ const hasBackendSignals = BACKEND_INDICATORS.some(p => p.test(content));
109
+ if (hasBackendSignals) {
110
+ warnings.push({
111
+ severity: "suggestion",
112
+ type: "missing_layer",
113
+ message: "Este requisito BO necesita APIs backend → ¿existe el correspondiente requisito backend?",
114
+ });
115
+ }
116
+ }
117
+ // If writing mobile → check backend
118
+ if (category === "mobile") {
119
+ warnings.push({
120
+ severity: "suggestion",
121
+ type: "missing_layer",
122
+ message: "Los requisitos mobile siempre necesitan backend → ¿existe el correspondiente requisito backend?",
123
+ });
124
+ }
125
+ return warnings;
126
+ }
127
+ // ─── Acceptance Criteria Quality ────────────────────────────────────
128
+ const VAGUE_PATTERNS = [
129
+ /funcional$/i,
130
+ /disponible$/i,
131
+ /implementad[oa]$/i,
132
+ /correcto$/i,
133
+ /^se puede/i,
134
+ /^it works/i,
135
+ /^funciona/i,
136
+ /^works correctly/i,
137
+ ];
138
+ const SPECIFIC_INDICATORS = [
139
+ /\d+/, // Contains numbers
140
+ /error.*mensaje|message.*error/i, // Error handling
141
+ /cuando.*entonces|when.*then/i, // Condition-action
142
+ /validate|validar/i, // Validation
143
+ /no puede|must not|cannot/i, // Negative constraint
144
+ /formato|format|patrón|pattern/i, // Format specification
145
+ /antes de|después de|before|after/i, // Temporal
146
+ ];
147
+ function analyzeAcceptanceCriteria(content) {
148
+ const warnings = [];
149
+ // Extract criteria lines
150
+ const criteriaLines = content.match(/- \[ \] .+/g) || [];
151
+ if (criteriaLines.length === 0) {
152
+ warnings.push({
153
+ severity: "warning",
154
+ type: "vague_criteria",
155
+ message: "No se encontraron criterios de aceptación (formato '- [ ] ...')",
156
+ });
157
+ return warnings;
158
+ }
159
+ let vagueCount = 0;
160
+ for (const line of criteriaLines) {
161
+ const criterion = line.replace(/- \[ \] /, "").trim();
162
+ // Check if too short
163
+ if (criterion.length < 20) {
164
+ vagueCount++;
165
+ continue;
166
+ }
167
+ // Check for vague patterns
168
+ const isVague = VAGUE_PATTERNS.some(p => p.test(criterion));
169
+ const isSpecific = SPECIFIC_INDICATORS.some(p => p.test(criterion));
170
+ if (isVague && !isSpecific) {
171
+ vagueCount++;
172
+ warnings.push({
173
+ severity: "suggestion",
174
+ type: "vague_criteria",
175
+ message: `Criterio genérico: "${criterion.substring(0, 60)}..."`,
176
+ detail: "Considera añadir condiciones específicas, valores concretos, o formato Given/When/Then para mayor especificidad.",
177
+ });
178
+ }
179
+ }
180
+ if (vagueCount > criteriaLines.length / 2) {
181
+ warnings.push({
182
+ severity: "warning",
183
+ type: "vague_criteria",
184
+ message: `${vagueCount} de ${criteriaLines.length} criterios parecen demasiado genéricos (tipo historia de usuario). Añade condiciones concretas, valores numéricos, o acciones específicas.`,
185
+ });
186
+ }
187
+ return warnings;
188
+ }
189
+ // ─── Cross-Reference Suggestions ────────────────────────────────────
190
+ function findCrossReferences(content, category, outputDir) {
191
+ const warnings = [];
192
+ // Check if outputDir exists
193
+ if (!fs.existsSync(outputDir))
194
+ return warnings;
195
+ // Look for references to other requirement IDs in content
196
+ const idRefs = content.match(/ACS_[A-Z]{2}_\d{2}/g) || [];
197
+ const uniqueRefs = [...new Set(idRefs)];
198
+ // Check if referenced requirements exist
199
+ for (const ref of uniqueRefs) {
200
+ const found = findRequirementFile(outputDir, ref);
201
+ if (!found) {
202
+ warnings.push({
203
+ severity: "suggestion",
204
+ type: "cross_reference",
205
+ message: `Referencia a "${ref}" encontrada pero no existe como fichero de requisito`,
206
+ });
207
+ }
208
+ }
209
+ return warnings;
210
+ }
211
+ function findRequirementFile(outputDir, reqId) {
212
+ try {
213
+ const subdirs = fs.readdirSync(outputDir, { withFileTypes: true });
214
+ for (const entry of subdirs) {
215
+ if (!entry.isDirectory())
216
+ continue;
217
+ const catDir = path.join(outputDir, entry.name);
218
+ const files = fs.readdirSync(catDir);
219
+ if (files.some(f => f.includes(reqId)))
220
+ return true;
221
+ }
222
+ }
223
+ catch {
224
+ // Ignore errors
225
+ }
226
+ return false;
227
+ }
228
+ // ─── Main Analysis Function ─────────────────────────────────────────
229
+ export function analyzeRequirement(content, category, outputDir) {
230
+ const allWarnings = [
231
+ ...detectSubRequirements(content),
232
+ ...detectMissingLayers(content, category),
233
+ ...analyzeAcceptanceCriteria(content),
234
+ ...findCrossReferences(content, category, outputDir),
235
+ ];
236
+ // Calculate quality score
237
+ const errorCount = allWarnings.filter(w => w.severity === "error").length;
238
+ const warningCount = allWarnings.filter(w => w.severity === "warning").length;
239
+ const suggestionCount = allWarnings.filter(w => w.severity === "suggestion").length;
240
+ let score = 100;
241
+ score -= errorCount * 20;
242
+ score -= warningCount * 10;
243
+ score -= suggestionCount * 3;
244
+ score = Math.max(0, Math.min(100, score));
245
+ // Build summary
246
+ const parts = [];
247
+ if (errorCount > 0)
248
+ parts.push(`❌ ${errorCount} error(s)`);
249
+ if (warningCount > 0)
250
+ parts.push(`⚠️ ${warningCount} warning(s)`);
251
+ if (suggestionCount > 0)
252
+ parts.push(`💡 ${suggestionCount} suggestion(s)`);
253
+ const summary = parts.length > 0
254
+ ? `Quality: ${score}/100 — ${parts.join(", ")}`
255
+ : `Quality: ${score}/100 — ✅ No issues detected`;
256
+ return {
257
+ warnings: allWarnings,
258
+ score,
259
+ summary,
260
+ };
261
+ }
262
+ // ─── Format Warnings for Output ─────────────────────────────────────
263
+ export function formatWarnings(analysis) {
264
+ if (analysis.warnings.length === 0) {
265
+ return `\n📊 ${analysis.summary}`;
266
+ }
267
+ const lines = [`\n📊 ${analysis.summary}\n`];
268
+ for (const w of analysis.warnings) {
269
+ const icon = w.severity === "error" ? "❌" : w.severity === "warning" ? "⚠️" : "💡";
270
+ lines.push(`${icon} [${w.type}] ${w.message}`);
271
+ if (w.detail) {
272
+ lines.push(` → ${w.detail}`);
273
+ }
274
+ }
275
+ return lines.join("\n");
276
+ }
277
+ //# sourceMappingURL=requirement-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requirement-analyzer.js","sourceRoot":"","sources":["../src/requirement-analyzer.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -80,4 +80,6 @@ export interface OllamaResponse {
80
80
  response: string;
81
81
  done: boolean;
82
82
  }
83
+ export type { HeuristicMatch, Language, Confidence } from "./heuristics.js";
84
+ export type { RequirementWarning, RequirementAnalysis, WarningSeverity } from "./requirement-analyzer.js";
83
85
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,kBAAkB,EAAE,QAAQ,EA2CxC,CAAC;AAEF,MAAM,WAAW,cAAc;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAsB,SAAQ,cAAc;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAqB,SAAQ,qBAAqB;IAC/D,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAExD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mFAAmF;IACnF,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,YAAY,CAAC;IAE5B,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,8FAA8F;IAC9F,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gFAAgF;IAChF,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAChC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,YAAY,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAChF;AAED,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACjB;AAGD,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC5E,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC"}
package/dist/types.js CHANGED
@@ -10,13 +10,19 @@ export const DEFAULT_CATEGORIES = [
10
10
  id: "frontend",
11
11
  label: "Frontend",
12
12
  prefix: "FE",
13
- description: "Interfaces web: pantallas, dashboards, CRUDs, formularios, vistas, portales, paneles de administración, navegación",
13
+ description: "Portal web del USUARIO FINAL (driver, cliente): login, perfil, reservas, historial de viajes, pagos, documentos. NO incluye paneles de administración.",
14
+ },
15
+ {
16
+ id: "bo",
17
+ label: "Back Office",
18
+ prefix: "BO",
19
+ description: "Panel web de ADMINISTRACIÓN/GESTIÓN interna: CRUDs de gestión, dashboards operativos, configuración de reglas, gestión de flotas/empresas/usuarios por perfiles admin (Super Admin, Fleet Manager, Control Room). NO es la interfaz del usuario final.",
14
20
  },
15
21
  {
16
22
  id: "mobile",
17
23
  label: "Mobile",
18
24
  prefix: "MB",
19
- description: "Aplicaciones móviles iOS y Android: pantallas, Bluetooth, GPS, notificaciones push, cámara",
25
+ description: "Aplicaciones móviles iOS y Android: pantallas, flujos de booking, apertura de vehículos por Bluetooth/BLE, GPS, notificaciones push, cámara, PIN, estado del viaje en tiempo real",
20
26
  },
21
27
  {
22
28
  id: "infra",
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,wEAAwE;AASxE,MAAM,CAAC,MAAM,kBAAkB,GAAe;IAC1C;QACI,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,2FAA2F;KAC3G;IACD;QACI,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,oHAAoH;KACpI;IACD;QACI,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,4FAA4F;KAC5G;IACD;QACI,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,iBAAiB;QACxB,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,4FAA4F;KAC5G;IACD;QACI,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,yFAAyF;KACzG;IACD;QACI,EAAE,EAAE,gBAAgB;QACpB,KAAK,EAAE,gBAAgB;QACvB,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,iGAAiG;KACjH;CACJ,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,wEAAwE;AASxE,MAAM,CAAC,MAAM,kBAAkB,GAAe;IAC1C;QACI,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,2FAA2F;KAC3G;IACD;QACI,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,wJAAwJ;KACxK;IACD;QACI,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,aAAa;QACpB,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,wPAAwP;KACxQ;IACD;QACI,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,mLAAmL;KACnM;IACD;QACI,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,iBAAiB;QACxB,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,4FAA4F;KAC5G;IACD;QACI,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,yFAAyF;KACzG;IACD;QACI,EAAE,EAAE,gBAAgB;QACpB,KAAK,EAAE,gBAAgB;QACvB,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,iGAAiG;KACjH;CACJ,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@gherk/requirements-extractor",
3
- "version": "1.3.0",
4
- "description": "MCP server that extracts, classifies and generates structured requirements from PDF documents using Ollama LLM",
3
+ "version": "1.5.0",
4
+ "description": "MCP server that extracts, classifies and generates structured requirements from PDF documents with heuristic scanning and active validation",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "bin": {