@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.
- package/dist/extractor.d.ts.map +1 -1
- package/dist/extractor.js +156 -75
- package/dist/extractor.js.map +1 -1
- package/dist/heuristics.d.ts +14 -0
- package/dist/heuristics.d.ts.map +1 -0
- package/dist/heuristics.js +254 -0
- package/dist/heuristics.js.map +1 -0
- package/dist/index.js +95 -10
- package/dist/index.js.map +1 -1
- package/dist/llm-client.d.ts +1 -1
- package/dist/llm-client.d.ts.map +1 -1
- package/dist/llm-client.js +6 -0
- package/dist/llm-client.js.map +1 -1
- package/dist/requirement-analyzer.d.ts +15 -0
- package/dist/requirement-analyzer.d.ts.map +1 -0
- package/dist/requirement-analyzer.js +277 -0
- package/dist/requirement-analyzer.js.map +1 -0
- package/dist/types.d.ts +4 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/extractor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../src/extractor.ts"],"names":[],"mappings":"
|
|
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
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
-
|
|
73
|
-
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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
|
-
|
|
146
|
-
|
|
147
|
-
|
|
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
|
|
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(
|
|
165
|
-
.
|
|
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
|
-
|
|
178
|
-
//
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
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
|
-
|
|
194
|
-
|
|
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);
|
package/dist/extractor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractor.js","sourceRoot":"","sources":["../src/extractor.ts"],"names":[],"mappings":"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"}
|
|
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":"AAAA,uEAAuE;AACvE,EAAE;AACF,gFAAgF;AAChF,oEAAoE;AA+BpE,MAAM,QAAQ,GAAoC;IAC9C,EAAE,EAAE;QACA,UAAU,EAAE;YACR,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,aAAa,EAAE,WAAW;YAC9D,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,mBAAmB;YACtE,kBAAkB,EAAE,sBAAsB;SAC7C;QACD,UAAU,EAAE;YACR,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,cAAc;YAC5D,uBAAuB,EAAE,YAAY;SACxC;QACD,MAAM,EAAE;YACJ,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,gBAAgB;YACnE,oBAAoB,EAAE,mBAAmB,EAAE,oBAAoB;YAC/D,kBAAkB,EAAE,eAAe,EAAE,eAAe,EAAE,QAAQ;SACjE;QACD,MAAM,EAAE;YACJ,mBAAmB,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe;YACnE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ;SAChE;QACD,SAAS,EAAE;YACP,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa;YAC3D,aAAa,EAAE,YAAY;SAC9B;QACD,UAAU,EAAE;YACR,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,mBAAmB;YAC3D,gBAAgB,EAAE,eAAe,EAAE,YAAY;SAClD;QACD,aAAa,EAAE;YACX,cAAc,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW;YAC5D,gBAAgB,EAAE,qBAAqB,EAAE,yBAAyB;YAClE,YAAY,EAAE,aAAa;SAC9B;QACD,UAAU,EAAE;YACR,4BAA4B,EAAE,cAAc,EAAE,UAAU;YACxD,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS;YACtD,kBAAkB,EAAE,SAAS,EAAE,qBAAqB;YACpD,UAAU,EAAE,aAAa,EAAE,wBAAwB;SACtD;QACD,MAAM,EAAE;YACJ,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY;YACpD,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ;YACjD,aAAa,EAAE,SAAS,EAAE,WAAW;SACxC;QACD,WAAW,EAAE;YACT,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,SAAS;YACjD,kBAAkB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;YACtD,eAAe,EAAE,gBAAgB;SACpC;QACD,QAAQ,EAAE;YACN,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU;YACvD,eAAe,EAAE,UAAU,EAAE,uBAAuB;YACpD,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc;SACtD;KACJ;IACD,EAAE,EAAE;QACA,UAAU,EAAE;YACR,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ;YACpD,cAAc,EAAE,cAAc,EAAE,iBAAiB;SACpD;QACD,UAAU,EAAE;YACR,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS;YACtD,mBAAmB;SACtB;QACD,MAAM,EAAE;YACJ,kBAAkB,EAAE,eAAe,EAAE,gBAAgB;YACrD,kBAAkB,EAAE,kBAAkB,EAAE,kBAAkB;YAC1D,kBAAkB,EAAE,iBAAiB,EAAE,SAAS;SACnD;QACD,MAAM,EAAE;YACJ,iBAAiB,EAAE,kBAAkB,EAAE,cAAc;YACrD,aAAa,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY;YAC5D,aAAa,EAAE,SAAS;SAC3B;QACD,SAAS,EAAE;YACP,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU;YAClD,QAAQ,EAAE,aAAa;SAC1B;QACD,UAAU,EAAE;YACR,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,WAAW;YACnD,eAAe,EAAE,YAAY;SAChC;QACD,aAAa,EAAE;YACX,cAAc,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW;YAC1D,cAAc,EAAE,iBAAiB,EAAE,YAAY;YAC/C,WAAW;SACd;QACD,UAAU,EAAE;YACR,qBAAqB,EAAE,cAAc,EAAE,SAAS;YAChD,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO;YACjD,UAAU,EAAE,SAAS,EAAE,yBAAyB;SACnD;QACD,MAAM,EAAE;YACJ,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY;YACjD,aAAa,EAAE,SAAS,EAAE,YAAY;YACtC,cAAc,EAAE,QAAQ,EAAE,UAAU;SACvC;QACD,WAAW,EAAE;YACT,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,SAAS;YAClD,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW;YACnD,UAAU,EAAE,SAAS;SACxB;QACD,QAAQ,EAAE;YACN,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS;YACpD,eAAe,EAAE,WAAW,EAAE,gBAAgB;YAC9C,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc;SACtD;KACJ;CACJ,CAAC;AAEF,uEAAuE;AAEvE,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAC7I,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAEpI,MAAM,UAAU,cAAc,CAAC,IAAY;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpF,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpF,OAAO,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5C,CAAC;AAED,uEAAuE;AAEvE,SAAS,iBAAiB,CAAC,IAAY;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,kBAAkB;IAClB,IAAI,kKAAkK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACjL,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;IAED,aAAa;IACb,IAAI,sKAAsK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrL,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,mBAAmB;IACnB,IAAI,wJAAwJ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACvK,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;IAED,iBAAiB;IACjB,IAAI,oGAAoG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACnH,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IAED,yBAAyB;IACzB,IAAI,wJAAwJ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACvK,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAChC,CAAC;IAED,gBAAgB;IAChB,IAAI,6JAA6J,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5K,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAChD,CAAC;AAED,uEAAuE;AAEvE,MAAM,UAAU,2BAA2B,CACvC,IAAY,EACZ,SAAiB,EACjB,OAAe,EACf,WAAqB,MAAM;IAE3B,MAAM,IAAI,GAAgB,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAChF,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,6CAA6C;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAEtF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QAErC,iEAAiE;QACjE,IAAI,oFAAoF,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACnG,SAAS;QACb,CAAC;QAED,KAAK,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChE,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;gBAChC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACvC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBACpB,0BAA0B;oBAC1B,MAAM,GAAG,GAAG,GAAG,WAAW,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;oBAC1D,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;wBAAE,SAAS;oBAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAEd,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;oBACrD,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;oBAExD,OAAO,CAAC,IAAI,CAAC;wBACT,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;wBAChC,IAAI,EAAE,SAAS;wBACf,WAAW;wBACX,OAAO;wBACP,UAAU;wBACV,mBAAmB;wBACnB,MAAM,EAAE,gBAAgB,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC;qBACvD,CAAC,CAAC;oBAEH,MAAM,CAAC,0CAA0C;gBACrD,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,oDAAoD;IACpD,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,aAAa,CAAC,WAAmB,EAAE,IAAY;IACpD,sEAAsE;IACtE,IAAI,WAAW,KAAK,YAAY,IAAI,WAAW,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAC5E,IAAI,WAAW,KAAK,UAAU;QAAE,OAAO,MAAM,CAAC;IAE9C,4CAA4C;IAC5C,IAAI,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,YAAY,IAAI,WAAW,KAAK,eAAe;QAAE,OAAO,QAAQ,CAAC;IACjH,IAAI,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,aAAa;QAAE,OAAO,QAAQ,CAAC;IAE/E,yCAAyC;IACzC,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,gBAAgB,CAAC,WAAmB,EAAE,OAAe,EAAE,IAAiB;IAC7E,MAAM,OAAO,GAA2C;QACpD,EAAE,EAAE;YACA,UAAU,EAAE,mCAAmC,OAAO,mCAAmC;YACzF,UAAU,EAAE,kCAAkC,OAAO,kCAAkC;YACvF,MAAM,EAAE,yCAAyC,OAAO,2BAA2B;YACnF,MAAM,EAAE,qCAAqC,OAAO,wBAAwB;YAC5E,SAAS,EAAE,oCAAoC,OAAO,uBAAuB;YAC7E,UAAU,EAAE,sCAAsC,OAAO,8BAA8B;YACvF,aAAa,EAAE,sCAAsC,OAAO,iCAAiC;YAC7F,UAAU,EAAE,8CAA8C,OAAO,+CAA+C;YAChH,MAAM,EAAE,iCAAiC,OAAO,+CAA+C;YAC/F,WAAW,EAAE,mCAAmC,OAAO,+BAA+B;YACtF,QAAQ,EAAE,wCAAwC,OAAO,sCAAsC;SAClG;QACD,EAAE,EAAE;YACA,UAAU,EAAE,8BAA8B,OAAO,oCAAoC;YACrF,UAAU,EAAE,8BAA8B,OAAO,sCAAsC;YACvF,MAAM,EAAE,wCAAwC,OAAO,0BAA0B;YACjF,MAAM,EAAE,+BAA+B,OAAO,4BAA4B;YAC1E,SAAS,EAAE,iCAAiC,OAAO,oBAAoB;YACvE,UAAU,EAAE,qCAAqC,OAAO,6BAA6B;YACrF,aAAa,EAAE,qCAAqC,OAAO,gCAAgC;YAC3F,UAAU,EAAE,+CAA+C,OAAO,gDAAgD;YAClH,MAAM,EAAE,2BAA2B,OAAO,2CAA2C;YACrF,WAAW,EAAE,mCAAmC,OAAO,8BAA8B;YACrF,QAAQ,EAAE,+BAA+B,OAAO,qCAAqC;SACxF;KACJ,CAAC;IACF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,YAAY,OAAO,0BAA0B,WAAW,GAAG,CAAC;AACrG,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAyB;IACjD,MAAM,MAAM,GAAG,IAAI,GAAG,EAA0B,CAAC;IACjD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,QAAQ,IAAI,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAClF,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACvB,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACnH,CAAC;AAED,SAAS,cAAc,CAAC,CAAa;IACjC,OAAO,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC"}
|