@gherk/requirements-extractor 1.4.0 → 1.5.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../src/extractor.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAIR,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAGnB,MAAM,YAAY,CAAC;AAEpB;;;;GAIG;AACH,wBAAsB,mBAAmB,CACrC,MAAM,EAAE,gBAAgB,EACxB,SAAS,GAAE,mBAAwB,GACpC,OAAO,CAAC,gBAAgB,CAAC,CAkS3B"}
1
+ {"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../src/extractor.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAIR,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAGnB,MAAM,YAAY,CAAC;AAEpB;;;;GAIG;AACH,wBAAsB,mBAAmB,CACrC,MAAM,EAAE,gBAAgB,EACxB,SAAS,GAAE,mBAAwB,GACpC,OAAO,CAAC,gBAAgB,CAAC,CAyX3B"}
package/dist/extractor.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { parsePdf } from "./pdf-parser.js";
2
2
  import * as path from "path";
3
3
  import { generate, generateJson } from "./llm-client.js";
4
+ import { scanForImplicitRequirements } from "./heuristics.js";
4
5
  import { identifySystemPrompt, identifyUserPrompt, classifySystemPrompt, classifyUserPrompt, generateSystemPrompt, generateUserPrompt, gherkinSystemPrompt, gherkinUserPrompt, } from "./prompts.js";
5
6
  import { assignSequences, generateId, ensureOutputDirs, writeSingleRequirement, writeRequirements, toSingleJsonRequirement, } from "./markdown.js";
6
7
  /**
@@ -33,20 +34,76 @@ export async function extractRequirements(config, callbacks = {}) {
33
34
  // ─── Step 2: Pass 1 — Identify Requirements ─────────────────────
34
35
  log(`🔍 Pass 1: Identifying requirements...`);
35
36
  const allRaw = [];
37
+ const isIdeMode = provider === "ide";
36
38
  for (let i = 0; i < chunks.length; i++) {
37
39
  const chunk = chunks[i];
38
40
  log(` Chunk ${i + 1}/${chunks.length} (pages ${chunk.startPage}-${chunk.endPage})`);
39
41
  try {
40
- const identified = await generateJson(identifyUserPrompt(chunk.text, chunk.startPage, chunk.endPage), identifySystemPrompt(context), // Pass context
41
- llmOpts);
42
- if (Array.isArray(identified)) {
43
- for (const req of identified) {
44
- if (!req.page_range) {
45
- req.page_range = `${chunk.startPage}-${chunk.endPage}`;
42
+ if (isIdeMode) {
43
+ // ─── IDE MODE: Use heuristics to identify requirements ──────
44
+ const hints = scanForImplicitRequirements(chunk.text, chunk.startPage, chunk.endPage, "auto");
45
+ // Group high-confidence hints by section/topic
46
+ const highHints = hints.filter(h => h.confidence === "high" || h.confidence === "medium");
47
+ // Extract structural sections from the chunk text
48
+ const sectionRegex = /(?:^|\n)([A-ZÁÉÍÓÚÑ][^\n]{5,80})\s*\n/g;
49
+ const sections = [];
50
+ let match;
51
+ while ((match = sectionRegex.exec(chunk.text)) !== null) {
52
+ sections.push({ title: match[1].trim(), text: "", startIdx: match.index });
53
+ }
54
+ // Assign text to each section
55
+ for (let s = 0; s < sections.length; s++) {
56
+ const startIdx = sections[s].startIdx;
57
+ const endIdx = s + 1 < sections.length ? sections[s + 1].startIdx : chunk.text.length;
58
+ sections[s].text = chunk.text.substring(startIdx, endIdx).trim();
59
+ }
60
+ // If no sections found, treat entire chunk as one requirement
61
+ if (sections.length === 0 && highHints.length > 0) {
62
+ const firstLine = chunk.text.split('\n').find(l => l.trim().length > 10)?.trim() || 'Requisito detectado';
63
+ allRaw.push({
64
+ id_suggestion: `req_p${chunk.startPage}`,
65
+ title: firstLine.substring(0, 100),
66
+ summary: highHints.map(h => h.text).join('. ').substring(0, 500),
67
+ page_range: `${chunk.startPage}-${chunk.endPage}`,
68
+ raw_text: chunk.text.substring(0, 2000),
69
+ });
70
+ }
71
+ else {
72
+ // Create a requirement per section that has high-confidence hints
73
+ for (const section of sections) {
74
+ const sectionHints = scanForImplicitRequirements(section.text, chunk.startPage, chunk.endPage, "auto").filter(h => h.confidence === "high" || h.confidence === "medium");
75
+ if (sectionHints.length >= 1) {
76
+ const slug = section.title
77
+ .toLowerCase()
78
+ .replace(/[^a-záéíóúñ0-9\s]/g, '')
79
+ .trim()
80
+ .split(/\s+/)
81
+ .slice(0, 4)
82
+ .join('_');
83
+ allRaw.push({
84
+ id_suggestion: slug || `req_p${chunk.startPage}`,
85
+ title: section.title,
86
+ summary: sectionHints.map(h => h.text).join('. ').substring(0, 500),
87
+ page_range: `${chunk.startPage}-${chunk.endPage}`,
88
+ raw_text: section.text.substring(0, 2000),
89
+ });
90
+ }
91
+ }
92
+ }
93
+ log(` → Found ${allRaw.length} requirements (heuristics mode)`);
94
+ }
95
+ else {
96
+ // ─── LLM MODE: Use Ollama/OpenAI ────────────────────────────
97
+ const identified = await generateJson(identifyUserPrompt(chunk.text, chunk.startPage, chunk.endPage), identifySystemPrompt(context), llmOpts);
98
+ if (Array.isArray(identified)) {
99
+ for (const req of identified) {
100
+ if (!req.page_range) {
101
+ req.page_range = `${chunk.startPage}-${chunk.endPage}`;
102
+ }
46
103
  }
104
+ allRaw.push(...identified);
105
+ log(` → Found ${identified.length} requirements`);
47
106
  }
48
- allRaw.push(...identified);
49
- log(` → Found ${identified.length} requirements`);
50
107
  }
51
108
  }
52
109
  catch (e) {
@@ -67,30 +124,50 @@ export async function extractRequirements(config, callbacks = {}) {
67
124
  }
68
125
  // ─── Step 3: Pass 2 — Classify Requirements ─────────────────────
69
126
  log(`📋 Pass 2: Classifying requirements...`);
70
- const batchSize = 5;
71
127
  const classifiedMap = {};
72
- for (let i = 0; i < allRaw.length; i += batchSize) {
73
- const batch = allRaw.slice(i, i + batchSize);
74
- const batchNum = Math.floor(i / batchSize) + 1;
75
- const totalBatches = Math.ceil(allRaw.length / batchSize);
76
- log(` Batch ${batchNum}/${totalBatches} (${batch.length} requirements)`);
77
- try {
78
- const classified = await generateJson(classifyUserPrompt(batch, cats), classifySystemPrompt(cats, context), // Pass context
79
- llmOpts);
80
- if (Array.isArray(classified)) {
81
- for (const c of classified) {
82
- // Support both `categories: [...]` and legacy `category: "..."`
83
- const rawCats = c.categories || (c.category ? [c.category] : ["backend"]);
84
- const validCats = rawCats.filter((catId) => cats.some((cat) => cat.id === catId));
85
- classifiedMap[c.id_suggestion] = validCats.length > 0 ? validCats : ["backend"];
128
+ if (isIdeMode) {
129
+ // ─── IDE MODE: Use heuristics suggestCategories ─────────────
130
+ for (const req of allRaw) {
131
+ const textToAnalyze = `${req.title} ${req.summary} ${req.raw_text || ''}`;
132
+ const hints = scanForImplicitRequirements(textToAnalyze, 1, 1, "auto");
133
+ // Collect all suggested categories from hints
134
+ const catSet = new Set();
135
+ for (const hint of hints) {
136
+ for (const cat of hint.suggestedCategories) {
137
+ catSet.add(cat);
86
138
  }
87
139
  }
140
+ // Ensure at least 'backend'
141
+ if (catSet.size === 0)
142
+ catSet.add('backend');
143
+ classifiedMap[req.id_suggestion] = Array.from(catSet);
88
144
  }
89
- catch (e) {
90
- log(` ⚠️ Error in classification batch ${batchNum}: ${e}`);
91
- for (const req of batch) {
92
- if (!classifiedMap[req.id_suggestion]) {
93
- classifiedMap[req.id_suggestion] = ["backend"];
145
+ log(` ✅ Classified ${allRaw.length} requirements via heuristics`);
146
+ }
147
+ else {
148
+ // ─── LLM MODE: Use Ollama/OpenAI ────────────────────────────
149
+ const batchSize = 5;
150
+ for (let i = 0; i < allRaw.length; i += batchSize) {
151
+ const batch = allRaw.slice(i, i + batchSize);
152
+ const batchNum = Math.floor(i / batchSize) + 1;
153
+ const totalBatches = Math.ceil(allRaw.length / batchSize);
154
+ log(` Batch ${batchNum}/${totalBatches} (${batch.length} requirements)`);
155
+ try {
156
+ const classified = await generateJson(classifyUserPrompt(batch, cats), classifySystemPrompt(cats, context), llmOpts);
157
+ if (Array.isArray(classified)) {
158
+ for (const c of classified) {
159
+ const rawCats = c.categories || (c.category ? [c.category] : ["backend"]);
160
+ const validCats = rawCats.filter((catId) => cats.some((cat) => cat.id === catId));
161
+ classifiedMap[c.id_suggestion] = validCats.length > 0 ? validCats : ["backend"];
162
+ }
163
+ }
164
+ }
165
+ catch (e) {
166
+ log(` ⚠️ Error in classification batch ${batchNum}: ${e}`);
167
+ for (const req of batch) {
168
+ if (!classifiedMap[req.id_suggestion]) {
169
+ classifiedMap[req.id_suggestion] = ["backend"];
170
+ }
94
171
  }
95
172
  }
96
173
  }
@@ -142,64 +219,68 @@ export async function extractRequirements(config, callbacks = {}) {
142
219
  log(` [${i + 1}/${sequenced.length}] ${fullId} — ${req.title}`);
143
220
  let markdown;
144
221
  try {
145
- const raw = await generate(generateUserPrompt({
146
- id: fullId,
147
- title: req.title,
148
- summary: req.summary,
149
- raw_text: req.raw_text,
150
- page_range: req.page_range,
151
- section_label: allCatLabels,
152
- type: req.category === "non-functional" ? "No Funcional" : "Funcional",
153
- }), generateSystemPrompt(context), // Pass context
154
- llmOpts);
155
- // Clean up wrapping code blocks
156
- markdown = raw.trim();
157
- if (markdown.startsWith("```markdown")) {
158
- markdown = markdown
159
- .replace(/^```markdown\s*\n?/, "")
160
- .replace(/\n?```\s*$/, "");
222
+ if (isIdeMode) {
223
+ // ─── IDE MODE: Use template-based generation ────────────
224
+ markdown = fallbackMarkdown(fullId, req.title, req.summary, cat?.label || req.category);
161
225
  }
162
- else if (markdown.startsWith("```")) {
226
+ else {
227
+ // ─── LLM MODE: Use Ollama/OpenAI ────────────────────────
228
+ const raw = await generate(generateUserPrompt({
229
+ id: fullId,
230
+ title: req.title,
231
+ summary: req.summary,
232
+ raw_text: req.raw_text,
233
+ page_range: req.page_range,
234
+ section_label: allCatLabels,
235
+ type: req.category === "non-functional" ? "No Funcional" : "Funcional",
236
+ }), generateSystemPrompt(context), llmOpts);
237
+ markdown = raw.trim();
238
+ if (markdown.startsWith("```markdown")) {
239
+ markdown = markdown
240
+ .replace(/^```markdown\s*\n?/, "")
241
+ .replace(/\n?```\s*$/, "");
242
+ }
243
+ else if (markdown.startsWith("```")) {
244
+ markdown = markdown
245
+ .replace(/^```\s*\n?/, "")
246
+ .replace(/\n?```\s*$/, "");
247
+ }
163
248
  markdown = markdown
164
- .replace(/^```\s*\n?/, "")
165
- .replace(/\n?```\s*$/, "");
249
+ .replace(/<think>[\s\S]*?<\/think>\s*/g, "")
250
+ .trim();
166
251
  }
167
- // Remove thinking tags (qwen3)
168
- markdown = markdown
169
- .replace(/<think>[\s\S]*?<\/think>\s*/g, "")
170
- .trim();
171
252
  }
172
253
  catch (e) {
173
254
  log(` ⚠️ Error generating ${fullId}: ${e}`);
174
255
  markdown = fallbackMarkdown(fullId, req.title, req.summary, cat?.label || req.category);
175
256
  }
176
257
  let gherkin;
177
- try {
178
- // Generate Gherkin
179
- const gherkinRaw = await generate(gherkinUserPrompt({
180
- id: fullId,
181
- title: req.title,
182
- summary: req.summary,
183
- category: req.category,
184
- acceptance_criteria: [], // We don't have parsed ACs easily available here, relying on summary
185
- }), gherkinSystemPrompt(context), // Pass context
186
- llmOpts);
187
- gherkin = gherkinRaw.trim();
188
- if (gherkin.startsWith("```gherkin")) {
189
- gherkin = gherkin
190
- .replace(/^```gherkin\s*\n?/, "")
191
- .replace(/\n?```\s*$/, "");
258
+ if (!isIdeMode) {
259
+ // Only generate Gherkin via LLM (skip in IDE mode)
260
+ try {
261
+ const gherkinRaw = await generate(gherkinUserPrompt({
262
+ id: fullId,
263
+ title: req.title,
264
+ summary: req.summary,
265
+ category: req.category,
266
+ acceptance_criteria: [],
267
+ }), gherkinSystemPrompt(context), llmOpts);
268
+ gherkin = gherkinRaw.trim();
269
+ if (gherkin.startsWith("```gherkin")) {
270
+ gherkin = gherkin
271
+ .replace(/^```gherkin\s*\n?/, "")
272
+ .replace(/\n?```\s*$/, "");
273
+ }
274
+ else if (gherkin.startsWith("```")) {
275
+ gherkin = gherkin
276
+ .replace(/^```\s*\n?/, "")
277
+ .replace(/\n?```\s*$/, "");
278
+ }
279
+ markdown += `\n\n---\n\n## Gherkin\n\n\`\`\`gherkin\n${gherkin}\n\`\`\`\n`;
192
280
  }
193
- else if (gherkin.startsWith("```")) {
194
- gherkin = gherkin
195
- .replace(/^```\s*\n?/, "")
196
- .replace(/\n?```\s*$/, "");
281
+ catch (e) {
282
+ log(` ⚠️ Error generating Gherkin for ${fullId}: ${e}`);
197
283
  }
198
- // Append to Markdown
199
- markdown += `\n\n---\n\n## Gherkin\n\n\`\`\`gherkin\n${gherkin}\n\`\`\`\n`;
200
- }
201
- catch (e) {
202
- log(` ⚠️ Error generating Gherkin for ${fullId}: ${e}`);
203
284
  }
204
285
  const genReq = { ...req, markdown, gherkin };
205
286
  generated.push(genReq);
@@ -1 +1 @@
1
- {"version":3,"file":"extractor.js","sourceRoot":"","sources":["../src/extractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EACH,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,GACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EACH,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,GAC1B,MAAM,eAAe,CAAC;AAYvB;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,MAAwB,EACxB,YAAiC,EAAE;IAEnC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;IAC5E,MAAM,EACF,OAAO,EACP,SAAS,EACT,aAAa,GAAG,KAAK,EACrB,UAAU,EACV,KAAK,EACL,SAAS,EACT,QAAQ,GAAG,QAAQ,EACnB,MAAM,EACN,YAAY,GAAG,UAAU,EACzB,gBAAgB,EAChB,cAAc,EACd,OAAO,GACV,GAAG,MAAM,CAAC;IAEX,iEAAiE;IACjE,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAe,UAAU,IAAI,kBAAkB,CAAC;IAE1D,MAAM,OAAO,GAAG;QACZ,QAAQ,EAAE,QAA+B;QACzC,KAAK,EAAE,KAAK,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC;QACpE,OAAO,EAAE,SAAS,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,wBAAwB,CAAC;QACtG,MAAM;QACN,WAAW,EAAE,GAAG;QAChB,MAAM,EAAE,KAAK;KAChB,CAAC;IAEF,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE;QACxB,OAAO,CAAC,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC;QACpC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC,CAAC;IAEF,oEAAoE;IACpE,GAAG,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC1C,GAAG,CAAC,UAAU,MAAM,CAAC,MAAM,YAAY,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC;IAE/F,mEAAmE;IACnE,GAAG,CAAC,wCAAwC,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAqB,EAAE,CAAC;IAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,WAAW,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;QAErF,IAAI,CAAC;YACD,MAAM,UAAU,GAAG,MAAM,YAAY,CACjC,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,EAC9D,oBAAoB,CAAC,OAAO,CAAC,EAAE,eAAe;YAC9C,OAAO,CACV,CAAC;YAEF,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC5B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;oBAC3B,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;wBAClB,GAAG,CAAC,UAAU,GAAG,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAC3D,CAAC;gBACL,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;gBAC3B,GAAG,CAAC,aAAa,UAAU,CAAC,MAAM,eAAe,CAAC,CAAC;YACvD,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC;IAED,GAAG,CAAC,sBAAsB,MAAM,CAAC,MAAM,0BAA0B,CAAC,CAAC;IACnE,YAAY,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAE9B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO;YACH,OAAO,EAAE,KAAK;YACd,SAAS;YACT,iBAAiB,EAAE,CAAC;YACpB,UAAU,EAAE,EAAE;YACd,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,CAAC,kCAAkC,CAAC;SAC/C,CAAC;IACN,CAAC;IAED,mEAAmE;IACnE,GAAG,CAAC,wCAAwC,CAAC,CAAC;IAE9C,MAAM,SAAS,GAAG,CAAC,CAAC;IACpB,MAAM,aAAa,GAA6B,EAAE,CAAC;IAEnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;QAC1D,GAAG,CAAC,WAAW,QAAQ,IAAI,YAAY,KAAK,KAAK,CAAC,MAAM,gBAAgB,CAAC,CAAC;QAE1E,IAAI,CAAC;YACD,MAAM,UAAU,GAAG,MAAM,YAAY,CAGjC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,EAC/B,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,eAAe;YACpD,OAAO,CACV,CAAC;YAEF,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC5B,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;oBACzB,gEAAgE;oBAChE,MAAM,OAAO,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;oBAC1E,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC;oBAClF,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBACpF,CAAC;YACL,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,GAAG,CAAC,sCAAsC,QAAQ,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5D,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;gBACtB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;oBACpC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACnD,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAElD,6CAA6C;IAC7C,MAAM,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC3C,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjE,OAAO;YACH,GAAG,GAAG;YACN,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;YACrB,UAAU,EAAE,QAAQ;SACvB,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,0CAA0C;IAC1C,IAAI,SAAS,GAAG,eAAe,CAAC,mBAAmB,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;IAE1E,mEAAmE;IACnE,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QAChC,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3E,GAAG,CAAC,sBAAsB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,MAAM,IAAI,MAAM,eAAe,CAAC,CAAC;IAC1G,CAAC;IAED,mEAAmE;IACnE,IAAI,cAAc,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QAChC,MAAM,eAAe,GAA2B,EAAE,CAAC;QACnD,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YAC/B,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACrE,OAAO,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC;QACzD,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,UAAU,cAAc,eAAe,SAAS,CAAC,MAAM,IAAI,MAAM,eAAe,CAAC,CAAC;IAC1F,CAAC;IAED,4BAA4B;IAC5B,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAElC,oEAAoE;IACpE,GAAG,CAAC,sCAAsC,SAAS,CAAC,MAAM,kBAAkB,CAAC,CAAC;IAC9E,YAAY,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAEjC,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,UAAU,GAA2B,EAAE,CAAC;IAE9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEpD,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;aAClD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,GAAG,CAAC;aAC1D,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QAEjE,IAAI,QAAgB,CAAC;QAErB,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,QAAQ,CACtB,kBAAkB,CAAC;gBACf,EAAE,EAAE,MAAM;gBACV,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,aAAa,EAAE,YAAY;gBAC3B,IAAI,EAAE,GAAG,CAAC,QAAQ,KAAK,gBAAgB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,WAAW;aACzE,CAAC,EACF,oBAAoB,CAAC,OAAO,CAAC,EAAE,eAAe;YAC9C,OAAO,CACV,CAAC;YAEF,gCAAgC;YAChC,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YACtB,IAAI,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBACrC,QAAQ,GAAG,QAAQ;qBACd,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;qBACjC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YACnC,CAAC;iBAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpC,QAAQ,GAAG,QAAQ;qBACd,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;qBACzB,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YACnC,CAAC;YAED,+BAA+B;YAC/B,QAAQ,GAAG,QAAQ;iBACd,OAAO,CAAC,8BAA8B,EAAE,EAAE,CAAC;iBAC3C,IAAI,EAAE,CAAC;QAChB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,GAAG,CAAC,yBAAyB,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7C,QAAQ,GAAG,gBAAgB,CACvB,MAAM,EACN,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,OAAO,EACX,GAAG,EAAE,KAAK,IAAI,GAAG,CAAC,QAAQ,CAC7B,CAAC;QACN,CAAC;QAED,IAAI,OAA2B,CAAC;QAChC,IAAI,CAAC;YACD,mBAAmB;YACnB,MAAM,UAAU,GAAG,MAAM,QAAQ,CAC7B,iBAAiB,CAAC;gBACd,EAAE,EAAE,MAAM;gBACV,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,mBAAmB,EAAE,EAAE,EAAE,qEAAqE;aACjG,CAAC,EACF,mBAAmB,CAAC,OAAO,CAAC,EAAE,eAAe;YAC7C,OAAO,CACV,CAAC;YAEF,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBACnC,OAAO,GAAG,OAAO;qBACZ,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;qBAChC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YACnC,CAAC;iBAAM,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnC,OAAO,GAAG,OAAO;qBACZ,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;qBACzB,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YACnC,CAAC;YAED,qBAAqB;YACrB,QAAQ,IAAI,2CAA2C,OAAO,YAAY,CAAC;QAE/E,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,GAAG,CAAC,qCAAqC,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,MAAM,GAAyB,EAAE,GAAG,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QACnE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,6DAA6D;QAC7D,IAAI,YAAY,KAAK,UAAU,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;YACzD,MAAM,SAAS,GAAG,sBAAsB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC5D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;gBACzB,GAAG,CAAC,oBAAoB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7F,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,IAAI,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;YAC7C,CAAC;QACL,CAAC;QAED,kCAAkC;QAClC,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACtB,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7C,CAAC;QAED,0DAA0D;QAC1D,aAAa,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAChF,CAAC;IAED,GAAG,CAAC,sBAAsB,SAAS,CAAC,MAAM,kBAAkB,CAAC,CAAC;IAE9D,oEAAoE;IACpE,GAAG,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAE3E,wCAAwC;IACxC,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAE9C,GAAG,CAAC,YAAY,MAAM,CAAC,iBAAiB,mBAAmB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAE/E,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACrB,EAAU,EACV,KAAa,EACb,OAAe,EACf,OAAe;IAEf,OAAO,KAAK,EAAE,MAAM,KAAK,CAAC,WAAW,EAAE;;;;wBAInB,EAAE;iBACT,KAAK;;kBAEJ,OAAO;;;;;;EAMvB,OAAO;;;;;;;;;CASR,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"extractor.js","sourceRoot":"","sources":["../src/extractor.ts"],"names":[],"mappings":"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"}
@@ -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;AAqID,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,254 @@
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", "permisos para", "rol de",
20
+ ],
21
+ system: [
22
+ "el sistema deberá", "la plataforma", "el backend", "la aplicación",
23
+ "el portal", "el panel", "el módulo", "el servicio", "la api",
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
+ "personalizable", "activar.*desactivar", "habilitar.*deshabilitar",
36
+ "a nivel de", "por defecto",
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", "requisitos funcionales",
43
+ ],
44
+ actors: [
45
+ "administrador", "usuario", "operador", "supervisor",
46
+ "coordinador", "responsable", "técnico", "gestor",
47
+ "profesional", "cliente", "proveedor",
48
+ ],
49
+ integration: [
50
+ "api", "integración", "sincronización", "webhook",
51
+ "servicio externo", "importar", "exportar", "conector",
52
+ "base de datos", "almacenamiento",
53
+ ],
54
+ workflow: [
55
+ "el usuario", "envía.*email", "se notifica", "se envía",
56
+ "sube.*archivo", "descarga", "completar.*formulario",
57
+ "validar", "proceso de", "flujo de", "crear.*desde",
58
+ ],
59
+ },
60
+ en: {
61
+ obligation: [
62
+ "must", "shall", "is required", "needs to", "has to",
63
+ "will have to", "is mandatory", "cannot be empty",
64
+ ],
65
+ capability: [
66
+ "can", "could", "will be able to", "allows", "enables",
67
+ "makes it possible",
68
+ ],
69
+ access: [
70
+ "will have access", "has access to", "access to view",
71
+ "access to create", "access to modify", "access to delete",
72
+ "access to manage", "permissions for", "role of",
73
+ ],
74
+ system: [
75
+ "the system must", "the system shall", "the platform",
76
+ "the backend", "the application", "the portal", "the module",
77
+ "the service", "the api",
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
+ "customizable", "enable.*disable", "by default",
90
+ "at.*level",
91
+ ],
92
+ structural: [
93
+ "preliminary remarks", "introduction", "context",
94
+ "use case", "assumptions", "constraints", "scope",
95
+ "workflow", "process", "functional requirements",
96
+ ],
97
+ actors: [
98
+ "administrator", "user", "operator", "supervisor",
99
+ "coordinator", "manager", "technician",
100
+ "professional", "client", "provider",
101
+ ],
102
+ integration: [
103
+ "api", "integration", "synchronization", "webhook",
104
+ "external service", "import", "export", "connector",
105
+ "database", "storage",
106
+ ],
107
+ workflow: [
108
+ "the user", "sends.*email", "is notified", "is sent",
109
+ "uploads.*file", "downloads", "complete.*form",
110
+ "validate", "process of", "flow of", "create.*from",
111
+ ],
112
+ },
113
+ };
114
+ // ─── Language Detection ─────────────────────────────────────────────
115
+ const ES_MARKERS = ["debe", "deberá", "tiene", "puede", "también", "está", "será", "según", "configurar", "gestionar", "usuario", "sistema"];
116
+ const EN_MARKERS = ["must", "shall", "should", "will", "can", "the system", "access to", "configure", "manage", "user", "platform"];
117
+ export function detectLanguage(text) {
118
+ const lower = text.toLowerCase();
119
+ const esScore = ES_MARKERS.reduce((acc, m) => acc + (lower.split(m).length - 1), 0);
120
+ const enScore = EN_MARKERS.reduce((acc, m) => acc + (lower.split(m).length - 1), 0);
121
+ return esScore >= enScore ? "es" : "en";
122
+ }
123
+ // ─── Category Suggestion ────────────────────────────────────────────
124
+ function suggestCategories(text) {
125
+ const lower = text.toLowerCase();
126
+ const cats = [];
127
+ // Backend signals
128
+ if (/api|endpoint|rest|servicio|service|lógica de negocio|business logic|base de datos|database|email|integración|integration|servidor|server|cron|cola|queue|webhook/.test(lower)) {
129
+ cats.push("backend");
130
+ }
131
+ // BO signals
132
+ if (/gestionar|gestión|administrar|configurar|crud|panel|backoffice|back.?office|administrador|admin|supervisor|coordinador|crear.*desde.*panel|dashboard|cuadro de mando/.test(lower)) {
133
+ cats.push("bo");
134
+ }
135
+ // Frontend signals
136
+ if (/portal.*web|web.*portal|interfaz.*usuario|user.*interface|pantalla|vista|formulario|form|página|page|navegación|navigation|el usuario ve|the user sees/.test(lower)) {
137
+ cats.push("frontend");
138
+ }
139
+ // Mobile signals
140
+ if (/app|aplicación.*móvil|ios|android|móvil|mobile|push.*notif|notificación.*push|responsive|nativ[ao]/.test(lower)) {
141
+ cats.push("mobile");
142
+ }
143
+ // Non-functional signals
144
+ if (/seguridad|security|rendimiento|performance|escalabilidad|scalability|sla|auditoría|audit|gdpr|rgpd|lopd|privacidad|privacy|accesibilidad|accessibility/.test(lower)) {
145
+ cats.push("non-functional");
146
+ }
147
+ // Infra signals
148
+ if (/entorno|environment|uat|preprod|staging|producción|production|base de datos|database|migración|migration|almacenamiento|storage|aws|cloud|docker|contenedor/.test(lower)) {
149
+ cats.push("infra");
150
+ }
151
+ return cats.length > 0 ? cats : ["backend"];
152
+ }
153
+ // ─── Scanner ────────────────────────────────────────────────────────
154
+ export function scanForImplicitRequirements(text, startPage, endPage, language = "auto") {
155
+ const lang = language === "auto" ? detectLanguage(text) : language;
156
+ const patterns = PATTERNS[lang];
157
+ const matches = [];
158
+ const seen = new Set();
159
+ // Split into sentences for granular matching
160
+ const sentences = text.split(/[.!?\n]/).map(s => s.trim()).filter(s => s.length > 20);
161
+ for (const sentence of sentences) {
162
+ const lower = sentence.toLowerCase();
163
+ // Skip boilerplate (copyright, confidentiality, version control)
164
+ if (/copyright|confidential|version control|change history|issued by|arval internal use/.test(lower)) {
165
+ continue;
166
+ }
167
+ for (const [patternType, patternList] of Object.entries(patterns)) {
168
+ for (const pattern of patternList) {
169
+ const regex = new RegExp(pattern, "i");
170
+ if (regex.test(lower)) {
171
+ // Deduplicate by sentence
172
+ const key = `${patternType}:${sentence.substring(0, 80)}`;
173
+ if (seen.has(key))
174
+ continue;
175
+ seen.add(key);
176
+ const confidence = getConfidence(patternType, lower);
177
+ const suggestedCategories = suggestCategories(sentence);
178
+ matches.push({
179
+ text: sentence.substring(0, 300),
180
+ page: startPage,
181
+ patternType,
182
+ pattern,
183
+ confidence,
184
+ suggestedCategories,
185
+ reason: getReasonMessage(patternType, pattern, lang),
186
+ });
187
+ break; // One match per pattern type per sentence
188
+ }
189
+ }
190
+ }
191
+ }
192
+ // Deduplicate and keep only most confident per text
193
+ return deduplicateMatches(matches);
194
+ }
195
+ function getConfidence(patternType, text) {
196
+ // High confidence: obligation verbs + structural sections with actors
197
+ if (patternType === "obligation" || patternType === "access")
198
+ return "high";
199
+ if (patternType === "workflow")
200
+ return "high";
201
+ // Medium: system, validation, configuration
202
+ if (patternType === "system" || patternType === "validation" || patternType === "configuration")
203
+ return "medium";
204
+ if (patternType === "actors" || patternType === "integration")
205
+ return "medium";
206
+ // Low: capability, structural, condition
207
+ return "low";
208
+ }
209
+ function getReasonMessage(patternType, pattern, lang) {
210
+ const reasons = {
211
+ es: {
212
+ obligation: `Verbo de obligación detectado ("${pattern}") — probable requisito funcional`,
213
+ capability: `Verbo de capacidad detectado ("${pattern}") — posible requisito funcional`,
214
+ access: `Patrón de acceso/permisos detectado ("${pattern}") — requisito de RBAC/BO`,
215
+ system: `Referencia al sistema detectada ("${pattern}") — requisito técnico`,
216
+ condition: `Condición de negocio detectada ("${pattern}") — regla de negocio`,
217
+ validation: `Restricción/validación detectada ("${pattern}") — requisito de validación`,
218
+ configuration: `Parámetro configurable detectado ("${pattern}") — requisito de configuración`,
219
+ structural: `Sección contextual con contenido técnico ("${pattern}") — posible requisito disfrazado de contexto`,
220
+ actors: `Actor del sistema detectado ("${pattern}") — verificar que tiene requisitos asociados`,
221
+ integration: `Integración externa detectada ("${pattern}") — requisito de integración`,
222
+ workflow: `Flujo de trabajo/proceso detectado ("${pattern}") — requisito de proceso/onboarding`,
223
+ },
224
+ en: {
225
+ obligation: `Obligation verb detected ("${pattern}") — likely functional requirement`,
226
+ capability: `Capability verb detected ("${pattern}") — possible functional requirement`,
227
+ access: `Access/permission pattern detected ("${pattern}") — RBAC/BO requirement`,
228
+ system: `System reference detected ("${pattern}") — technical requirement`,
229
+ condition: `Business condition detected ("${pattern}") — business rule`,
230
+ validation: `Restriction/validation detected ("${pattern}") — validation requirement`,
231
+ configuration: `Configurable parameter detected ("${pattern}") — configuration requirement`,
232
+ structural: `Contextual section with technical content ("${pattern}") — possible requirement disguised as context`,
233
+ actors: `System actor detected ("${pattern}") — verify associated requirements exist`,
234
+ integration: `External integration detected ("${pattern}") — integration requirement`,
235
+ workflow: `Workflow/process detected ("${pattern}") — process/onboarding requirement`,
236
+ },
237
+ };
238
+ return reasons[lang][patternType] || `Pattern "${pattern}" matched in category "${patternType}"`;
239
+ }
240
+ function deduplicateMatches(matches) {
241
+ const byText = new Map();
242
+ for (const m of matches) {
243
+ const key = m.text.substring(0, 80);
244
+ const existing = byText.get(key);
245
+ if (!existing || confidenceRank(m.confidence) > confidenceRank(existing.confidence)) {
246
+ byText.set(key, m);
247
+ }
248
+ }
249
+ return Array.from(byText.values()).sort((a, b) => confidenceRank(b.confidence) - confidenceRank(a.confidence));
250
+ }
251
+ function confidenceRank(c) {
252
+ return c === "high" ? 3 : c === "medium" ? 2 : 1;
253
+ }
254
+ //# sourceMappingURL=heuristics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heuristics.js","sourceRoot":"","sources":["../src/heuristics.ts"],"names":[],"mappings":"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"}