@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.
- package/dist/heuristics.d.ts +14 -0
- package/dist/heuristics.d.ts.map +1 -0
- package/dist/heuristics.js +255 -0
- package/dist/heuristics.js.map +1 -0
- package/dist/index.js +115 -13
- package/dist/index.js.map +1 -1
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +93 -32
- package/dist/prompts.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 +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +8 -2
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
|
@@ -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
|
-
|
|
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
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
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
|
-
|
|
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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"}
|
package/dist/prompts.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
|
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
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
-
|
|
89
|
-
|
|
90
|
-
|
|
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
|
-
-
|
|
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
|
|
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": "
|
|
115
|
-
{ "id_suggestion": "
|
|
116
|
-
{ "id_suggestion": "
|
|
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.`;
|
package/dist/prompts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAEA,uEAAuE;AAEvE,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACjD,OAAO
|
|
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
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
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: "
|
|
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,
|
|
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.
|
|
4
|
-
"description": "MCP server that extracts, classifies and generates structured requirements from PDF documents
|
|
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": {
|