@elisra-devops/docgen-data-provider 1.76.0 → 1.78.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.
@@ -6,9 +6,20 @@ class MewpExternalIngestionUtils {
6
6
  this.externalTableUtils = externalTableUtils;
7
7
  }
8
8
  async loadExternalBugsByTestCase(externalBugsFile, adapters) {
9
+ var _a;
9
10
  const rows = await this.externalTableUtils.loadExternalTableRows(externalBugsFile, 'bugs');
10
- if (rows.length === 0)
11
+ const sourceName = String((externalBugsFile === null || externalBugsFile === void 0 ? void 0 : externalBugsFile.name) || (externalBugsFile === null || externalBugsFile === void 0 ? void 0 : externalBugsFile.objectName) || (externalBugsFile === null || externalBugsFile === void 0 ? void 0 : externalBugsFile.text) || (externalBugsFile === null || externalBugsFile === void 0 ? void 0 : externalBugsFile.url) || '').trim();
12
+ if (rows.length === 0) {
13
+ if (sourceName) {
14
+ logger_1.default.warn(`MEWP external bugs ingestion: source '${sourceName}' loaded with 0 data rows.`);
15
+ }
11
16
  return new Map();
17
+ }
18
+ logger_1.default.info(`MEWP external bugs ingestion: start source='${sourceName || 'unknown'}' rows=${rows.length}`);
19
+ let skippedMissingTestCaseId = 0;
20
+ let skippedMissingRequirement = 0;
21
+ let skippedMissingBugId = 0;
22
+ let skippedOutOfScopeState = 0;
12
23
  const map = new Map();
13
24
  let parsedRows = 0;
14
25
  for (const row of rows) {
@@ -17,11 +28,15 @@ class MewpExternalIngestionUtils {
17
28
  'Elisra SortIndex',
18
29
  'ElisraSortIndex',
19
30
  ]));
20
- if (!testCaseId)
31
+ if (!testCaseId) {
32
+ skippedMissingTestCaseId += 1;
21
33
  continue;
34
+ }
22
35
  const requirementBaseKey = adapters.toRequirementKey(adapters.toComparableText(this.externalTableUtils.readExternalCell(row, ['SR'])));
23
- if (!requirementBaseKey)
36
+ if (!requirementBaseKey) {
37
+ skippedMissingRequirement += 1;
24
38
  continue;
39
+ }
25
40
  const bugId = this.toPositiveNumber(this.externalTableUtils.readExternalCell(row, [
26
41
  'TargetWorkItemId',
27
42
  'Bug ID',
@@ -29,11 +44,15 @@ class MewpExternalIngestionUtils {
29
44
  'Links.TargetWorkItem.WorkItemId',
30
45
  'Links TargetWorkItem WorkItemId',
31
46
  ])) || 0;
32
- if (!bugId)
47
+ if (!bugId) {
48
+ skippedMissingBugId += 1;
33
49
  continue;
50
+ }
34
51
  const bugState = adapters.toComparableText(this.externalTableUtils.readExternalCell(row, ['TargetState', 'State']));
35
- if (!adapters.isExternalStateInScope(bugState, 'bug'))
52
+ if (!adapters.isExternalStateInScope(bugState, 'bug')) {
53
+ skippedOutOfScopeState += 1;
36
54
  continue;
55
+ }
37
56
  const bugTitle = adapters.toComparableText(this.externalTableUtils.readExternalCell(row, ['Bug Title', 'Title', 'Links.TargetWorkItem.Title']));
38
57
  const bugResponsibilityRaw = adapters.toComparableText(this.externalTableUtils.readExternalCell(row, [
39
58
  'Responsibility',
@@ -55,6 +74,7 @@ class MewpExternalIngestionUtils {
55
74
  parsedRows += 1;
56
75
  }
57
76
  const deduped = new Map();
77
+ let dedupedRows = 0;
58
78
  for (const [testCaseId, bugs] of map.entries()) {
59
79
  const byId = new Map();
60
80
  for (const bug of bugs || []) {
@@ -81,18 +101,32 @@ class MewpExternalIngestionUtils {
81
101
  return idCompare;
82
102
  return String(a.requirementBaseKey || '').localeCompare(String(b.requirementBaseKey || ''));
83
103
  }));
104
+ dedupedRows += ((_a = deduped.get(testCaseId)) === null || _a === void 0 ? void 0 : _a.length) || 0;
84
105
  }
85
106
  if (parsedRows === 0) {
86
107
  logger_1.default.warn(`External bugs source was loaded but no valid rows were parsed. ` +
87
108
  `Expected columns include Elisra_SortIndex, SR and bug ID fields.`);
88
109
  }
110
+ logger_1.default.info(`MEWP external bugs ingestion: done source='${sourceName || 'unknown'}' ` +
111
+ `rows=${rows.length} parsed=${parsedRows} deduped=${dedupedRows} ` +
112
+ `testCases=${deduped.size} ` +
113
+ `skippedMissingTestCaseId=${skippedMissingTestCaseId} ` +
114
+ `skippedMissingRequirement=${skippedMissingRequirement} ` +
115
+ `skippedMissingBugId=${skippedMissingBugId} ` +
116
+ `skippedOutOfScopeState=${skippedOutOfScopeState}`);
89
117
  return deduped;
90
118
  }
91
119
  async loadExternalL3L4ByBaseKey(externalL3L4File, adapters) {
92
120
  var _a;
93
121
  const rows = await this.externalTableUtils.loadExternalTableRows(externalL3L4File, 'l3l4');
94
- if (rows.length === 0)
122
+ const sourceName = String((externalL3L4File === null || externalL3L4File === void 0 ? void 0 : externalL3L4File.name) || (externalL3L4File === null || externalL3L4File === void 0 ? void 0 : externalL3L4File.objectName) || (externalL3L4File === null || externalL3L4File === void 0 ? void 0 : externalL3L4File.text) || (externalL3L4File === null || externalL3L4File === void 0 ? void 0 : externalL3L4File.url) || '').trim();
123
+ if (rows.length === 0) {
124
+ if (sourceName) {
125
+ logger_1.default.warn(`MEWP external L3/L4 ingestion: source '${sourceName}' loaded with 0 data rows.`);
126
+ }
95
127
  return new Map();
128
+ }
129
+ logger_1.default.info(`MEWP external L3/L4 ingestion: start source='${sourceName || 'unknown'}' rows=${rows.length}`);
96
130
  const linksByBaseKey = new Map();
97
131
  const addLink = (baseKey, level, id, title) => {
98
132
  if (!baseKey || !id)
@@ -109,11 +143,18 @@ class MewpExternalIngestionUtils {
109
143
  });
110
144
  };
111
145
  let parsedRows = 0;
146
+ let skippedMissingRequirement = 0;
147
+ let acceptedL3 = 0;
148
+ let acceptedL4 = 0;
149
+ let filteredByState = 0;
150
+ let filteredBySapWbs = 0;
112
151
  for (const row of rows) {
113
152
  const srRaw = adapters.toComparableText(this.externalTableUtils.readExternalCell(row, ['SR']));
114
153
  const baseKey = adapters.toRequirementKey(srRaw);
115
- if (!baseKey)
154
+ if (!baseKey) {
155
+ skippedMissingRequirement += 1;
116
156
  continue;
157
+ }
117
158
  const requirementSapWbsFallback = ((_a = adapters.resolveRequirementSapWbsByBaseKey) === null || _a === void 0 ? void 0 : _a.call(adapters, baseKey)) || '';
118
159
  const area = adapters
119
160
  .toComparableText(this.externalTableUtils.readExternalCell(row, ['AREA 34', 'AREA34']))
@@ -152,25 +193,50 @@ class MewpExternalIngestionUtils {
152
193
  ]));
153
194
  if (area.includes('level 4')) {
154
195
  const effectiveSapWbsLevel3 = targetSapWbsLevel3 || requirementSapWbsFallback;
196
+ if (!targetIdLevel3) {
197
+ parsedRows += 1;
198
+ continue;
199
+ }
200
+ if (!adapters.isExternalStateInScope(targetStateLevel3, 'requirement')) {
201
+ filteredByState += 1;
202
+ parsedRows += 1;
203
+ continue;
204
+ }
205
+ if (adapters.isExcludedL3L4BySapWbs(effectiveSapWbsLevel3)) {
206
+ filteredBySapWbs += 1;
207
+ parsedRows += 1;
208
+ continue;
209
+ }
155
210
  if (targetIdLevel3 &&
156
211
  adapters.isExternalStateInScope(targetStateLevel3, 'requirement') &&
157
212
  !adapters.isExcludedL3L4BySapWbs(effectiveSapWbsLevel3)) {
158
213
  addLink(baseKey, 'L4', targetIdLevel3, targetTitleLevel3);
214
+ acceptedL4 += 1;
159
215
  }
160
216
  parsedRows += 1;
161
217
  continue;
162
218
  }
163
219
  const effectiveSapWbsLevel3 = targetSapWbsLevel3 || requirementSapWbsFallback;
164
- if (targetIdLevel3 &&
165
- adapters.isExternalStateInScope(targetStateLevel3, 'requirement') &&
166
- !adapters.isExcludedL3L4BySapWbs(effectiveSapWbsLevel3)) {
220
+ const allowLevel3State = adapters.isExternalStateInScope(targetStateLevel3, 'requirement');
221
+ const allowLevel3SapWbs = !adapters.isExcludedL3L4BySapWbs(effectiveSapWbsLevel3);
222
+ if (!allowLevel3State)
223
+ filteredByState += 1;
224
+ if (!allowLevel3SapWbs)
225
+ filteredBySapWbs += 1;
226
+ if (targetIdLevel3 && allowLevel3State && allowLevel3SapWbs) {
167
227
  addLink(baseKey, 'L3', targetIdLevel3, targetTitleLevel3);
228
+ acceptedL3 += 1;
168
229
  }
169
230
  const effectiveSapWbsLevel4 = targetSapWbsLevel4 || requirementSapWbsFallback;
170
- if (targetIdLevel4 &&
171
- adapters.isExternalStateInScope(targetStateLevel4, 'requirement') &&
172
- !adapters.isExcludedL3L4BySapWbs(effectiveSapWbsLevel4)) {
231
+ const allowLevel4State = adapters.isExternalStateInScope(targetStateLevel4, 'requirement');
232
+ const allowLevel4SapWbs = !adapters.isExcludedL3L4BySapWbs(effectiveSapWbsLevel4);
233
+ if (!allowLevel4State)
234
+ filteredByState += 1;
235
+ if (!allowLevel4SapWbs)
236
+ filteredBySapWbs += 1;
237
+ if (targetIdLevel4 && allowLevel4State && allowLevel4SapWbs) {
173
238
  addLink(baseKey, 'L4', targetIdLevel4, targetTitleLevel4);
239
+ acceptedL4 += 1;
174
240
  }
175
241
  parsedRows += 1;
176
242
  }
@@ -186,6 +252,12 @@ class MewpExternalIngestionUtils {
186
252
  logger_1.default.warn(`External L3/L4 source was loaded but no valid rows were parsed. ` +
187
253
  `Expected columns include SR, AREA 34, target IDs/titles/states.`);
188
254
  }
255
+ const totalLinks = [...out.values()].reduce((sum, items) => sum + ((items === null || items === void 0 ? void 0 : items.length) || 0), 0);
256
+ logger_1.default.info(`MEWP external L3/L4 ingestion: done source='${sourceName || 'unknown'}' ` +
257
+ `rows=${rows.length} parsed=${parsedRows} baseKeys=${out.size} links=${totalLinks} ` +
258
+ `acceptedL3=${acceptedL3} acceptedL4=${acceptedL4} ` +
259
+ `skippedMissingRequirement=${skippedMissingRequirement} ` +
260
+ `filteredByState=${filteredByState} filteredBySapWbs=${filteredBySapWbs}`);
189
261
  return out;
190
262
  }
191
263
  toPositiveNumber(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"mewpExternalIngestionUtils.js","sourceRoot":"","sources":["../../src/utils/mewpExternalIngestionUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mewpExternalIngestionUtils.js","sourceRoot":"","sources":["../../src/utils/mewpExternalIngestionUtils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elisra-devops/docgen-data-provider",
3
- "version": "1.76.0",
3
+ "version": "1.78.0",
4
4
  "description": "A document generator data provider, aimed to retrive data from azure devops",
5
5
  "repository": {
6
6
  "type": "git",
@@ -478,6 +478,45 @@ export default class ResultDataProvider {
478
478
  options?.externalL3L4File,
479
479
  requirementSapWbsByBaseKey
480
480
  );
481
+ const hasExternalBugsFile = !!String(
482
+ options?.externalBugsFile?.name ||
483
+ options?.externalBugsFile?.objectName ||
484
+ options?.externalBugsFile?.text ||
485
+ options?.externalBugsFile?.url ||
486
+ ''
487
+ ).trim();
488
+ const hasExternalL3L4File = !!String(
489
+ options?.externalL3L4File?.name ||
490
+ options?.externalL3L4File?.objectName ||
491
+ options?.externalL3L4File?.text ||
492
+ options?.externalL3L4File?.url ||
493
+ ''
494
+ ).trim();
495
+ const externalBugLinksCount = [...externalBugsByTestCase.values()].reduce(
496
+ (sum, items) => sum + (Array.isArray(items) ? items.length : 0),
497
+ 0
498
+ );
499
+ const externalL3L4LinksCount = [...externalL3L4ByBaseKey.values()].reduce(
500
+ (sum, items) => sum + (Array.isArray(items) ? items.length : 0),
501
+ 0
502
+ );
503
+ logger.info(
504
+ `MEWP coverage external ingestion summary: ` +
505
+ `bugsFileProvided=${hasExternalBugsFile} bugsTestCases=${externalBugsByTestCase.size} bugsLinks=${externalBugLinksCount}; ` +
506
+ `l3l4FileProvided=${hasExternalL3L4File} l3l4BaseKeys=${externalL3L4ByBaseKey.size} l3l4Links=${externalL3L4LinksCount}`
507
+ );
508
+ if (hasExternalBugsFile && externalBugLinksCount === 0) {
509
+ logger.warn(
510
+ `MEWP coverage: external bugs file was provided but produced 0 links. ` +
511
+ `Check SR/test-case/state values in ingestion logs.`
512
+ );
513
+ }
514
+ if (hasExternalL3L4File && externalL3L4LinksCount === 0) {
515
+ logger.warn(
516
+ `MEWP coverage: external L3/L4 file was provided but produced 0 links. ` +
517
+ `Check SR/AREA34/state/SAPWBS filters in ingestion logs.`
518
+ );
519
+ }
481
520
  if (requirements.length === 0) {
482
521
  return {
483
522
  ...defaultPayload,
@@ -559,6 +598,69 @@ export default class ResultDataProvider {
559
598
  );
560
599
  }
561
600
 
601
+ const requirementBaseKeys = new Set<string>(
602
+ requirements.map((item) => String(item?.baseKey || '').trim()).filter((item) => !!item)
603
+ );
604
+ const externalL3L4BaseKeys = new Set<string>([...externalL3L4ByBaseKey.keys()]);
605
+ const externalL3L4OverlapKeys = [...externalL3L4BaseKeys].filter((key) => requirementBaseKeys.has(key));
606
+ const failedRequirementBaseKeys = new Set<string>();
607
+ const failedTestCaseIds = new Set<number>();
608
+ for (const [requirementBaseKey, byTestCase] of requirementIndex.entries()) {
609
+ for (const [testCaseId, counts] of byTestCase.entries()) {
610
+ if (Number(counts?.failed || 0) > 0) {
611
+ failedRequirementBaseKeys.add(requirementBaseKey);
612
+ failedTestCaseIds.add(testCaseId);
613
+ }
614
+ }
615
+ }
616
+ const externalBugTestCaseIds = new Set<number>([...externalBugsByTestCase.keys()]);
617
+ const externalBugFailedTestCaseOverlap = [...externalBugTestCaseIds].filter((id) =>
618
+ failedTestCaseIds.has(id)
619
+ );
620
+ const externalBugBaseKeys = new Set<string>();
621
+ for (const bugs of externalBugsByTestCase.values()) {
622
+ for (const bug of bugs || []) {
623
+ const key = String(bug?.requirementBaseKey || '').trim();
624
+ if (key) externalBugBaseKeys.add(key);
625
+ }
626
+ }
627
+ const externalBugRequirementOverlap = [...externalBugBaseKeys].filter((key) =>
628
+ requirementBaseKeys.has(key)
629
+ );
630
+ const externalBugFailedRequirementOverlap = [...externalBugBaseKeys].filter((key) =>
631
+ failedRequirementBaseKeys.has(key)
632
+ );
633
+ logger.info(
634
+ `MEWP coverage join diagnostics: requirementBaseKeys=${requirementBaseKeys.size} ` +
635
+ `failedRequirementBaseKeys=${failedRequirementBaseKeys.size} failedTestCases=${failedTestCaseIds.size}; ` +
636
+ `externalL3L4BaseKeys=${externalL3L4BaseKeys.size} externalL3L4Overlap=${externalL3L4OverlapKeys.length}; ` +
637
+ `externalBugTestCases=${externalBugTestCaseIds.size} externalBugFailedTestCaseOverlap=${externalBugFailedTestCaseOverlap.length}; ` +
638
+ `externalBugBaseKeys=${externalBugBaseKeys.size} externalBugRequirementOverlap=${externalBugRequirementOverlap.length} ` +
639
+ `externalBugFailedRequirementOverlap=${externalBugFailedRequirementOverlap.length}`
640
+ );
641
+ if (externalL3L4BaseKeys.size > 0 && externalL3L4OverlapKeys.length === 0) {
642
+ const sampleReq = [...requirementBaseKeys].slice(0, 5);
643
+ const sampleExt = [...externalL3L4BaseKeys].slice(0, 5);
644
+ logger.warn(
645
+ `MEWP coverage join diagnostics: no L3/L4 key overlap found. ` +
646
+ `sampleRequirementKeys=${sampleReq.join(', ')} sampleExternalL3L4Keys=${sampleExt.join(', ')}`
647
+ );
648
+ }
649
+ if (externalBugBaseKeys.size > 0 && externalBugRequirementOverlap.length === 0) {
650
+ const sampleReq = [...requirementBaseKeys].slice(0, 5);
651
+ const sampleExt = [...externalBugBaseKeys].slice(0, 5);
652
+ logger.warn(
653
+ `MEWP coverage join diagnostics: no bug requirement-key overlap found. ` +
654
+ `sampleRequirementKeys=${sampleReq.join(', ')} sampleExternalBugKeys=${sampleExt.join(', ')}`
655
+ );
656
+ }
657
+ if (externalBugTestCaseIds.size > 0 && externalBugFailedTestCaseOverlap.length === 0) {
658
+ logger.warn(
659
+ `MEWP coverage join diagnostics: no overlap between external bug test cases and failed test cases. ` +
660
+ `Bug rows remain empty because bugs are shown only for failed L2s.`
661
+ );
662
+ }
663
+
562
664
  const rows = this.buildMewpCoverageRows(
563
665
  requirements,
564
666
  requirementIndex,
@@ -567,6 +669,24 @@ export default class ResultDataProvider {
567
669
  externalL3L4ByBaseKey,
568
670
  externalBugsByTestCase
569
671
  );
672
+ const coverageRowStats = rows.reduce(
673
+ (acc, row) => {
674
+ const hasBug = Number(row?.['Bug ID'] || 0) > 0;
675
+ const hasL3 = String(row?.['L3 REQ ID'] || '').trim() !== '';
676
+ const hasL4 = String(row?.['L4 REQ ID'] || '').trim() !== '';
677
+ if (hasBug) acc.bugRows += 1;
678
+ if (hasL3) acc.l3Rows += 1;
679
+ if (hasL4) acc.l4Rows += 1;
680
+ if (!hasBug && !hasL3 && !hasL4) acc.baseOnlyRows += 1;
681
+ return acc;
682
+ },
683
+ { bugRows: 0, l3Rows: 0, l4Rows: 0, baseOnlyRows: 0 }
684
+ );
685
+ logger.info(
686
+ `MEWP coverage output summary: requirements=${requirements.length} rows=${rows.length} ` +
687
+ `bugRows=${coverageRowStats.bugRows} l3Rows=${coverageRowStats.l3Rows} ` +
688
+ `l4Rows=${coverageRowStats.l4Rows} baseOnlyRows=${coverageRowStats.baseOnlyRows}`
689
+ );
570
690
 
571
691
  return {
572
692
  sheetName: this.buildMewpCoverageSheetName(planName, testPlanId),
@@ -27,7 +27,21 @@ export default class MewpExternalIngestionUtils {
27
27
  adapters: MewpExternalIngestionAdapters
28
28
  ): Promise<Map<number, MewpBugLink[]>> {
29
29
  const rows = await this.externalTableUtils.loadExternalTableRows(externalBugsFile, 'bugs');
30
- if (rows.length === 0) return new Map<number, MewpBugLink[]>();
30
+ const sourceName = String(
31
+ externalBugsFile?.name || externalBugsFile?.objectName || externalBugsFile?.text || externalBugsFile?.url || ''
32
+ ).trim();
33
+ if (rows.length === 0) {
34
+ if (sourceName) {
35
+ logger.warn(`MEWP external bugs ingestion: source '${sourceName}' loaded with 0 data rows.`);
36
+ }
37
+ return new Map<number, MewpBugLink[]>();
38
+ }
39
+ logger.info(`MEWP external bugs ingestion: start source='${sourceName || 'unknown'}' rows=${rows.length}`);
40
+
41
+ let skippedMissingTestCaseId = 0;
42
+ let skippedMissingRequirement = 0;
43
+ let skippedMissingBugId = 0;
44
+ let skippedOutOfScopeState = 0;
31
45
 
32
46
  const map = new Map<number, MewpBugLink[]>();
33
47
  let parsedRows = 0;
@@ -39,11 +53,17 @@ export default class MewpExternalIngestionUtils {
39
53
  'ElisraSortIndex',
40
54
  ])
41
55
  );
42
- if (!testCaseId) continue;
56
+ if (!testCaseId) {
57
+ skippedMissingTestCaseId += 1;
58
+ continue;
59
+ }
43
60
  const requirementBaseKey = adapters.toRequirementKey(
44
61
  adapters.toComparableText(this.externalTableUtils.readExternalCell(row, ['SR']))
45
62
  );
46
- if (!requirementBaseKey) continue;
63
+ if (!requirementBaseKey) {
64
+ skippedMissingRequirement += 1;
65
+ continue;
66
+ }
47
67
 
48
68
  const bugId =
49
69
  this.toPositiveNumber(
@@ -55,12 +75,18 @@ export default class MewpExternalIngestionUtils {
55
75
  'Links TargetWorkItem WorkItemId',
56
76
  ])
57
77
  ) || 0;
58
- if (!bugId) continue;
78
+ if (!bugId) {
79
+ skippedMissingBugId += 1;
80
+ continue;
81
+ }
59
82
 
60
83
  const bugState = adapters.toComparableText(
61
84
  this.externalTableUtils.readExternalCell(row, ['TargetState', 'State'])
62
85
  );
63
- if (!adapters.isExternalStateInScope(bugState, 'bug')) continue;
86
+ if (!adapters.isExternalStateInScope(bugState, 'bug')) {
87
+ skippedOutOfScopeState += 1;
88
+ continue;
89
+ }
64
90
 
65
91
  const bugTitle = adapters.toComparableText(
66
92
  this.externalTableUtils.readExternalCell(row, ['Bug Title', 'Title', 'Links.TargetWorkItem.Title'])
@@ -89,6 +115,7 @@ export default class MewpExternalIngestionUtils {
89
115
  }
90
116
 
91
117
  const deduped = new Map<number, MewpBugLink[]>();
118
+ let dedupedRows = 0;
92
119
  for (const [testCaseId, bugs] of map.entries()) {
93
120
  const byId = new Map<string, MewpBugLink>();
94
121
  for (const bug of bugs || []) {
@@ -117,6 +144,7 @@ export default class MewpExternalIngestionUtils {
117
144
  return String(a.requirementBaseKey || '').localeCompare(String(b.requirementBaseKey || ''));
118
145
  })
119
146
  );
147
+ dedupedRows += deduped.get(testCaseId)?.length || 0;
120
148
  }
121
149
 
122
150
  if (parsedRows === 0) {
@@ -125,6 +153,15 @@ export default class MewpExternalIngestionUtils {
125
153
  `Expected columns include Elisra_SortIndex, SR and bug ID fields.`
126
154
  );
127
155
  }
156
+ logger.info(
157
+ `MEWP external bugs ingestion: done source='${sourceName || 'unknown'}' ` +
158
+ `rows=${rows.length} parsed=${parsedRows} deduped=${dedupedRows} ` +
159
+ `testCases=${deduped.size} ` +
160
+ `skippedMissingTestCaseId=${skippedMissingTestCaseId} ` +
161
+ `skippedMissingRequirement=${skippedMissingRequirement} ` +
162
+ `skippedMissingBugId=${skippedMissingBugId} ` +
163
+ `skippedOutOfScopeState=${skippedOutOfScopeState}`
164
+ );
128
165
 
129
166
  return deduped;
130
167
  }
@@ -134,7 +171,16 @@ export default class MewpExternalIngestionUtils {
134
171
  adapters: MewpExternalIngestionAdapters
135
172
  ): Promise<Map<string, MewpL3L4Link[]>> {
136
173
  const rows = await this.externalTableUtils.loadExternalTableRows(externalL3L4File, 'l3l4');
137
- if (rows.length === 0) return new Map<string, MewpL3L4Link[]>();
174
+ const sourceName = String(
175
+ externalL3L4File?.name || externalL3L4File?.objectName || externalL3L4File?.text || externalL3L4File?.url || ''
176
+ ).trim();
177
+ if (rows.length === 0) {
178
+ if (sourceName) {
179
+ logger.warn(`MEWP external L3/L4 ingestion: source '${sourceName}' loaded with 0 data rows.`);
180
+ }
181
+ return new Map<string, MewpL3L4Link[]>();
182
+ }
183
+ logger.info(`MEWP external L3/L4 ingestion: start source='${sourceName || 'unknown'}' rows=${rows.length}`);
138
184
 
139
185
  const linksByBaseKey = new Map<string, Map<string, MewpL3L4Link>>();
140
186
  const addLink = (baseKey: string, level: 'L3' | 'L4', id: number, title: string) => {
@@ -152,10 +198,18 @@ export default class MewpExternalIngestionUtils {
152
198
  };
153
199
 
154
200
  let parsedRows = 0;
201
+ let skippedMissingRequirement = 0;
202
+ let acceptedL3 = 0;
203
+ let acceptedL4 = 0;
204
+ let filteredByState = 0;
205
+ let filteredBySapWbs = 0;
155
206
  for (const row of rows) {
156
207
  const srRaw = adapters.toComparableText(this.externalTableUtils.readExternalCell(row, ['SR']));
157
208
  const baseKey = adapters.toRequirementKey(srRaw);
158
- if (!baseKey) continue;
209
+ if (!baseKey) {
210
+ skippedMissingRequirement += 1;
211
+ continue;
212
+ }
159
213
  const requirementSapWbsFallback = adapters.resolveRequirementSapWbsByBaseKey?.(baseKey) || '';
160
214
 
161
215
  const area = adapters
@@ -212,32 +266,49 @@ export default class MewpExternalIngestionUtils {
212
266
 
213
267
  if (area.includes('level 4')) {
214
268
  const effectiveSapWbsLevel3 = targetSapWbsLevel3 || requirementSapWbsFallback;
269
+ if (!targetIdLevel3) {
270
+ parsedRows += 1;
271
+ continue;
272
+ }
273
+ if (!adapters.isExternalStateInScope(targetStateLevel3, 'requirement')) {
274
+ filteredByState += 1;
275
+ parsedRows += 1;
276
+ continue;
277
+ }
278
+ if (adapters.isExcludedL3L4BySapWbs(effectiveSapWbsLevel3)) {
279
+ filteredBySapWbs += 1;
280
+ parsedRows += 1;
281
+ continue;
282
+ }
215
283
  if (
216
284
  targetIdLevel3 &&
217
285
  adapters.isExternalStateInScope(targetStateLevel3, 'requirement') &&
218
286
  !adapters.isExcludedL3L4BySapWbs(effectiveSapWbsLevel3)
219
287
  ) {
220
288
  addLink(baseKey, 'L4', targetIdLevel3, targetTitleLevel3);
289
+ acceptedL4 += 1;
221
290
  }
222
291
  parsedRows += 1;
223
292
  continue;
224
293
  }
225
294
 
226
295
  const effectiveSapWbsLevel3 = targetSapWbsLevel3 || requirementSapWbsFallback;
227
- if (
228
- targetIdLevel3 &&
229
- adapters.isExternalStateInScope(targetStateLevel3, 'requirement') &&
230
- !adapters.isExcludedL3L4BySapWbs(effectiveSapWbsLevel3)
231
- ) {
296
+ const allowLevel3State = adapters.isExternalStateInScope(targetStateLevel3, 'requirement');
297
+ const allowLevel3SapWbs = !adapters.isExcludedL3L4BySapWbs(effectiveSapWbsLevel3);
298
+ if (!allowLevel3State) filteredByState += 1;
299
+ if (!allowLevel3SapWbs) filteredBySapWbs += 1;
300
+ if (targetIdLevel3 && allowLevel3State && allowLevel3SapWbs) {
232
301
  addLink(baseKey, 'L3', targetIdLevel3, targetTitleLevel3);
302
+ acceptedL3 += 1;
233
303
  }
234
304
  const effectiveSapWbsLevel4 = targetSapWbsLevel4 || requirementSapWbsFallback;
235
- if (
236
- targetIdLevel4 &&
237
- adapters.isExternalStateInScope(targetStateLevel4, 'requirement') &&
238
- !adapters.isExcludedL3L4BySapWbs(effectiveSapWbsLevel4)
239
- ) {
305
+ const allowLevel4State = adapters.isExternalStateInScope(targetStateLevel4, 'requirement');
306
+ const allowLevel4SapWbs = !adapters.isExcludedL3L4BySapWbs(effectiveSapWbsLevel4);
307
+ if (!allowLevel4State) filteredByState += 1;
308
+ if (!allowLevel4SapWbs) filteredBySapWbs += 1;
309
+ if (targetIdLevel4 && allowLevel4State && allowLevel4SapWbs) {
240
310
  addLink(baseKey, 'L4', targetIdLevel4, targetTitleLevel4);
311
+ acceptedL4 += 1;
241
312
  }
242
313
  parsedRows += 1;
243
314
  }
@@ -259,6 +330,14 @@ export default class MewpExternalIngestionUtils {
259
330
  `Expected columns include SR, AREA 34, target IDs/titles/states.`
260
331
  );
261
332
  }
333
+ const totalLinks = [...out.values()].reduce((sum, items) => sum + (items?.length || 0), 0);
334
+ logger.info(
335
+ `MEWP external L3/L4 ingestion: done source='${sourceName || 'unknown'}' ` +
336
+ `rows=${rows.length} parsed=${parsedRows} baseKeys=${out.size} links=${totalLinks} ` +
337
+ `acceptedL3=${acceptedL3} acceptedL4=${acceptedL4} ` +
338
+ `skippedMissingRequirement=${skippedMissingRequirement} ` +
339
+ `filteredByState=${filteredByState} filteredBySapWbs=${filteredBySapWbs}`
340
+ );
262
341
 
263
342
  return out;
264
343
  }