@openhealth/oht-custom-parser-lib 0.5.54 → 0.5.56
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/index.d.ts +3 -2
- package/dist/index.js +9 -2
- package/dist/index.js.map +1 -1
- package/dist/service/auxiliaryFunctions.service.d.ts +1 -8
- package/dist/service/auxiliaryFunctions.service.js +40 -11
- package/dist/service/auxiliaryFunctions.service.js.map +1 -1
- package/dist/service/ohtAgnosticMeasurementsExtractor.service.d.ts +59 -0
- package/dist/service/ohtAgnosticMeasurementsExtractor.service.js +603 -0
- package/dist/service/ohtAgnosticMeasurementsExtractor.service.js.map +1 -0
- package/dist/service/ohtReportMeasurementsExtractor.service.d.ts +2 -4
- package/dist/service/ohtReportMeasurementsExtractor.service.js +53 -68
- package/dist/service/ohtReportMeasurementsExtractor.service.js.map +1 -1
- package/dist/service/parsingErrorService.service.d.ts +40 -0
- package/dist/service/parsingErrorService.service.js +251 -0
- package/dist/service/parsingErrorService.service.js.map +1 -0
- package/dist/service/processingLogger.service.d.ts +5 -0
- package/dist/service/processingLogger.service.js +52 -1
- package/dist/service/processingLogger.service.js.map +1 -1
- package/dist/types/error.types.d.ts +104 -0
- package/dist/types/error.types.js +240 -1
- package/dist/types/error.types.js.map +1 -1
- package/dist/util-ts/dataUtils.d.ts +1 -0
- package/dist/util-ts/dataUtils.js +15 -1
- package/dist/util-ts/dataUtils.js.map +1 -1
- package/dist/util-ts/mapperUtils.d.ts +2 -1
- package/dist/util-ts/mapperUtils.js +12 -3
- package/dist/util-ts/mapperUtils.js.map +1 -1
- package/package.json +1 -1
- package/dist/util-ts/loincMapping.d.ts +0 -5
- package/dist/util-ts/loincMapping.js +0 -81
- package/dist/util-ts/loincMapping.js.map +0 -1
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { UnknownUnits } from "../types/custom-parser.types";
|
|
2
2
|
import { Measurement, PatientInfo, UnknownMeasurement, Exam, UnmappedLabKey, PartnerCustomization } from "../types/oht.types";
|
|
3
|
-
import { ErrorMessage } from "../types/error.types";
|
|
4
3
|
/**
|
|
5
4
|
* Extracts measurements from OHT report exams by processing each exam through biomarker mapping,
|
|
6
5
|
* transformation rules, and value extraction.
|
|
@@ -121,7 +120,7 @@ import { ErrorMessage } from "../types/error.types";
|
|
|
121
120
|
* - `isReportCorrectlyParsed`: Boolean indicating if all measurements were parsed correctly
|
|
122
121
|
*
|
|
123
122
|
* ## Error Handling:
|
|
124
|
-
* - All errors are
|
|
123
|
+
* - All errors are recorded via `parsingErrorService.record()`
|
|
125
124
|
* - Errors are categorized by destination (slack, notes, bi)
|
|
126
125
|
* - Processing continues even if individual exams fail
|
|
127
126
|
* - Errors are logged with context (filename, labKey, ohtBmId, etc.)
|
|
@@ -141,12 +140,11 @@ import { ErrorMessage } from "../types/error.types";
|
|
|
141
140
|
* @param allowMultiMeasurementsPerBiomarker - Whether to allow multiple measurements per biomarker ID
|
|
142
141
|
* @param ohtCoreApiKey - API key for OHT Core API calls
|
|
143
142
|
* @param partnerId - Partner ID for fetching biomarker mappings and synonym units
|
|
144
|
-
* @param errorMessages - Array to accumulate error messages (modified in-place)
|
|
145
143
|
* @param isReportPreview - isReportPreview Report Simulator
|
|
146
144
|
* @param partnerCustomization - `panelCustomisation` and `reportCustomisation` coming from `partnerConfig`.
|
|
147
145
|
* @returns Promise resolving to extraction result with measurements, unknownMeasurements, unknownUnits, unmappedLabKeys, and parsing status
|
|
148
146
|
*/
|
|
149
|
-
declare function ohtReportMeasurementsExtractor(isReportPreview: boolean, exams: Exam[], sourceFilename: string, patientInfo: PatientInfo, documentDate: Date | undefined, allowMultiMeasurementsPerBiomarker: boolean, ohtCoreApiKey: string, partnerId: string,
|
|
147
|
+
declare function ohtReportMeasurementsExtractor(isReportPreview: boolean, exams: Exam[], sourceFilename: string, patientInfo: PatientInfo, documentDate: Date | undefined, allowMultiMeasurementsPerBiomarker: boolean, ohtCoreApiKey: string, partnerId: string, partnerCustomization?: PartnerCustomization): Promise<{
|
|
150
148
|
measurements: Measurement[];
|
|
151
149
|
unknownMeasurements: UnknownMeasurement[];
|
|
152
150
|
unknownUnits: UnknownUnits[];
|
|
@@ -39,11 +39,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
39
39
|
exports.ohtReportMeasurementsExtractor = ohtReportMeasurementsExtractor;
|
|
40
40
|
const crypto_1 = __importDefault(require("crypto"));
|
|
41
41
|
const dataUtils_1 = require("../util-ts/dataUtils");
|
|
42
|
-
const loincMapping_1 = require("../util-ts/loincMapping");
|
|
43
42
|
const extractionUtils_1 = require("../util-ts/extractionUtils");
|
|
44
43
|
const processingLogger_service_1 = require("./processingLogger.service");
|
|
45
44
|
const apiUtils_1 = require("../util-ts/apiUtils");
|
|
46
45
|
const oht_types_1 = require("../types/oht.types");
|
|
46
|
+
const error_types_1 = require("../types/error.types");
|
|
47
|
+
const parsingErrorService_service_1 = require("./parsingErrorService.service");
|
|
47
48
|
const path = __importStar(require("path"));
|
|
48
49
|
const fs = __importStar(require("fs"));
|
|
49
50
|
// Import version from package.json file
|
|
@@ -85,6 +86,10 @@ const OHT_CORE_URL = process.env.OHT_CORE_URL;
|
|
|
85
86
|
* Current filename being processed (global state for error reporting)
|
|
86
87
|
*/
|
|
87
88
|
let filename = '';
|
|
89
|
+
function resolveUnknownMeasurementName(parts, fallback) {
|
|
90
|
+
const name = parts.filter((part) => part?.trim()).join(':');
|
|
91
|
+
return name || fallback;
|
|
92
|
+
}
|
|
88
93
|
/**
|
|
89
94
|
* Extracts measurements from OHT report exams by processing each exam through biomarker mapping,
|
|
90
95
|
* transformation rules, and value extraction.
|
|
@@ -205,7 +210,7 @@ let filename = '';
|
|
|
205
210
|
* - `isReportCorrectlyParsed`: Boolean indicating if all measurements were parsed correctly
|
|
206
211
|
*
|
|
207
212
|
* ## Error Handling:
|
|
208
|
-
* - All errors are
|
|
213
|
+
* - All errors are recorded via `parsingErrorService.record()`
|
|
209
214
|
* - Errors are categorized by destination (slack, notes, bi)
|
|
210
215
|
* - Processing continues even if individual exams fail
|
|
211
216
|
* - Errors are logged with context (filename, labKey, ohtBmId, etc.)
|
|
@@ -225,12 +230,11 @@ let filename = '';
|
|
|
225
230
|
* @param allowMultiMeasurementsPerBiomarker - Whether to allow multiple measurements per biomarker ID
|
|
226
231
|
* @param ohtCoreApiKey - API key for OHT Core API calls
|
|
227
232
|
* @param partnerId - Partner ID for fetching biomarker mappings and synonym units
|
|
228
|
-
* @param errorMessages - Array to accumulate error messages (modified in-place)
|
|
229
233
|
* @param isReportPreview - isReportPreview Report Simulator
|
|
230
234
|
* @param partnerCustomization - `panelCustomisation` and `reportCustomisation` coming from `partnerConfig`.
|
|
231
235
|
* @returns Promise resolving to extraction result with measurements, unknownMeasurements, unknownUnits, unmappedLabKeys, and parsing status
|
|
232
236
|
*/
|
|
233
|
-
async function ohtReportMeasurementsExtractor(isReportPreview, exams, sourceFilename, patientInfo, documentDate, allowMultiMeasurementsPerBiomarker, ohtCoreApiKey, partnerId,
|
|
237
|
+
async function ohtReportMeasurementsExtractor(isReportPreview, exams, sourceFilename, patientInfo, documentDate, allowMultiMeasurementsPerBiomarker, ohtCoreApiKey, partnerId, partnerCustomization) {
|
|
234
238
|
filename = sourceFilename;
|
|
235
239
|
const measurements = [];
|
|
236
240
|
const unknownMeasurements = [];
|
|
@@ -242,9 +246,8 @@ async function ohtReportMeasurementsExtractor(isReportPreview, exams, sourceFile
|
|
|
242
246
|
if (labKeys.length === 0) {
|
|
243
247
|
const errorMsg = `No lab keys found, filename: ${(0, processingLogger_service_1.getRequestScopedFilename)(filename)}`;
|
|
244
248
|
processingLogger_service_1.processingLogger.logError(errorMsg);
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
message: errorMsg,
|
|
249
|
+
parsingErrorService_service_1.parsingErrorService.record(error_types_1.ParsingErrorType.NO_LAB_KEYS, {
|
|
250
|
+
messageSuffix: (0, processingLogger_service_1.getRequestScopedFilename)(filename),
|
|
248
251
|
});
|
|
249
252
|
return {
|
|
250
253
|
measurements,
|
|
@@ -293,7 +296,6 @@ async function ohtReportMeasurementsExtractor(isReportPreview, exams, sourceFile
|
|
|
293
296
|
else {
|
|
294
297
|
processingLogger_service_1.processingLogger.logInfo(`No biomarker mappings found in backend for partner: ${partnerId}`);
|
|
295
298
|
}
|
|
296
|
-
const loincMappingByOhtBmId = (0, loincMapping_1.buildLoincMappingByOhtBmId)(mappedBiomarkers);
|
|
297
299
|
// Assign UUIDs to exams for tracking through duplicate-labKey (double-hit) support.
|
|
298
300
|
const examsWithIds = exams.map((exam) => ({
|
|
299
301
|
...exam,
|
|
@@ -392,16 +394,10 @@ async function ohtReportMeasurementsExtractor(isReportPreview, exams, sourceFile
|
|
|
392
394
|
let isMeasurementCorrectlyParsed = true;
|
|
393
395
|
// if BM is already in measurements and multiple measurements are not allowed, continue to the next one
|
|
394
396
|
if (!allowMultiMeasurementsPerBiomarker && measurements.some(measurement => measurement.biomarkerId === finalOhtBmId)) {
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
data: { ohtBmId: finalOhtBmId, labKey },
|
|
400
|
-
});
|
|
401
|
-
errorMessages.push({
|
|
402
|
-
destination: { slack: false, notes: false, bi: true },
|
|
403
|
-
message: `Biomarkers Duplicated keys:[PLACEHOLDER]`,
|
|
404
|
-
item: `bmId:${finalOhtBmId}, labKey:${transformedExamObj.labKey}`
|
|
397
|
+
parsingErrorService_service_1.parsingErrorService.record(error_types_1.ParsingErrorType.DUPLICATE_BIOMARKER, {
|
|
398
|
+
labKey: transformedExamObj.labKey,
|
|
399
|
+
biomarkerId: finalOhtBmId,
|
|
400
|
+
item: `bmId:${finalOhtBmId}, labKey:${transformedExamObj.labKey}`,
|
|
405
401
|
});
|
|
406
402
|
continue;
|
|
407
403
|
}
|
|
@@ -411,16 +407,11 @@ async function ohtReportMeasurementsExtractor(isReportPreview, exams, sourceFile
|
|
|
411
407
|
`name:${ohtBiomarker.acf.shortName}, bmId:${finalOhtBmId}, labKey:${transformedExamObj.labKey}` :
|
|
412
408
|
`bmId:${finalOhtBmId}, labKey:${transformedExamObj.labKey}`;
|
|
413
409
|
if (!ohtBiomarker) {
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
});
|
|
420
|
-
errorMessages.push({
|
|
421
|
-
destination: { slack: true, notes: true, bi: true },
|
|
422
|
-
message: `Biomarker not found for:[PLACEHOLDER]`,
|
|
423
|
-
item: `${bmInfo}`
|
|
410
|
+
parsingErrorService_service_1.parsingErrorService.record(error_types_1.ParsingErrorType.BIOMARKER_NOT_FOUND, {
|
|
411
|
+
labKey: transformedExamObj.labKey,
|
|
412
|
+
biomarkerId: finalOhtBmId,
|
|
413
|
+
item: `${bmInfo}`,
|
|
414
|
+
errorTrace: { ohtBmId: finalOhtBmId, labKey: transformedExamObj.labKey },
|
|
424
415
|
});
|
|
425
416
|
continue;
|
|
426
417
|
}
|
|
@@ -442,24 +433,26 @@ async function ohtReportMeasurementsExtractor(isReportPreview, exams, sourceFile
|
|
|
442
433
|
});
|
|
443
434
|
}
|
|
444
435
|
if (!isUnitParsedCorrectly) {
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
});
|
|
451
|
-
errorMessages.push({
|
|
452
|
-
destination: { slack: true, notes: true, bi: true },
|
|
453
|
-
message: `Unit not extracted correctly for:[PLACEHOLDER]`,
|
|
454
|
-
item: `${bmInfo}, unit:${unit}`
|
|
436
|
+
parsingErrorService_service_1.parsingErrorService.record(error_types_1.ParsingErrorType.UNIT_NOT_EXTRACTED, {
|
|
437
|
+
labKey: transformedExamObj.labKey,
|
|
438
|
+
biomarkerId: finalOhtBmId,
|
|
439
|
+
item: `${bmInfo}, unit:${unit}`,
|
|
440
|
+
errorTrace: { unit },
|
|
455
441
|
});
|
|
456
442
|
isMeasurementCorrectlyParsed = false;
|
|
457
443
|
}
|
|
458
444
|
let { valueType, alphanumericalValue, numberValue, valueComparator, isValueParsedCorrectly } = (0, extractionUtils_1.ohtReportParseExamValue)(transformedExamObj, ohtBiomarker);
|
|
459
445
|
if ((0, dataUtils_1.isNumericalWithoutValidResult)(valueType, numberValue, alphanumericalValue)) {
|
|
460
446
|
const alphanumericalValueTrimmed = alphanumericalValue?.trim() ?? '';
|
|
447
|
+
parsingErrorService_service_1.parsingErrorService.record(error_types_1.ParsingErrorType.NUMERIC_BIOMARKER_ALPHANUMERIC_VALUE, {
|
|
448
|
+
labKey: transformedExamObj.labKey,
|
|
449
|
+
biomarkerId: finalOhtBmId,
|
|
450
|
+
item: `${bmInfo}, value:${alphanumericalValueTrimmed}`,
|
|
451
|
+
ohtExam: transformedExamObj,
|
|
452
|
+
originalExam: originalExam ?? undefined,
|
|
453
|
+
});
|
|
461
454
|
const unknownMeasurement = {
|
|
462
|
-
biomarkerName: transformedExamObj.description
|
|
455
|
+
biomarkerName: resolveUnknownMeasurementName([transformedExamObj.description], transformedExamObj.labKey || labKey || '(unmapped measurement)'),
|
|
463
456
|
value: alphanumericalValueTrimmed,
|
|
464
457
|
unit: unit ?? '',
|
|
465
458
|
annotation: transformedExamObj.annotation ?? '',
|
|
@@ -479,17 +472,14 @@ async function ohtReportMeasurementsExtractor(isReportPreview, exams, sourceFile
|
|
|
479
472
|
unknownMeasurements.push(unknownMeasurement);
|
|
480
473
|
continue;
|
|
481
474
|
}
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
destination: { slack: true, notes: true, bi: true },
|
|
491
|
-
message: `Value not extracted correctly for:[PLACEHOLDER]`,
|
|
492
|
-
item: `${bmInfo}, value:${numberValue}${unit}`
|
|
475
|
+
// GROUPED_ biomarkers derive their display value from appended annotation (rangeAnnotation),
|
|
476
|
+
// not from syntheticValue — an empty syntheticValue is expected and must not trigger this error.
|
|
477
|
+
if (!isValueParsedCorrectly && !labKey.startsWith('GROUPED_')) {
|
|
478
|
+
parsingErrorService_service_1.parsingErrorService.record(error_types_1.ParsingErrorType.VALUE_NOT_EXTRACTED, {
|
|
479
|
+
labKey: transformedExamObj.labKey,
|
|
480
|
+
biomarkerId: finalOhtBmId,
|
|
481
|
+
item: `${bmInfo}, value:${alphanumericalValue ?? numberValue}${unit !== 'None' ? unit : ''}`,
|
|
482
|
+
errorTrace: { numberValue, alphanumericalValue, unit },
|
|
493
483
|
});
|
|
494
484
|
isMeasurementCorrectlyParsed = false;
|
|
495
485
|
}
|
|
@@ -497,10 +487,12 @@ async function ohtReportMeasurementsExtractor(isReportPreview, exams, sourceFile
|
|
|
497
487
|
if (isValueParsedCorrectly && valueType === 'NUMERICAL') {
|
|
498
488
|
const isPlausibleValue = numberValue !== null && (0, extractionUtils_1.ohtReportCheckValueForPlausibleValues)(finalOhtBmId, transformedExamObj.labKey, ohtBiomarker, unit, numberValue, isUnitParsedCorrectly, filename);
|
|
499
489
|
if (!isPlausibleValue) {
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
item: `${bmInfo}, value:${numberValue}${unit}
|
|
490
|
+
parsingErrorService_service_1.parsingErrorService.record(error_types_1.ParsingErrorType.VALUE_NOT_PLAUSIBLE, {
|
|
491
|
+
labKey: transformedExamObj.labKey,
|
|
492
|
+
biomarkerId: finalOhtBmId,
|
|
493
|
+
item: `${bmInfo}, value:${numberValue}${unit}`,
|
|
494
|
+
ohtExam: transformedExamObj,
|
|
495
|
+
originalExam: originalExam ?? undefined,
|
|
504
496
|
});
|
|
505
497
|
// Resolve name with fallbacks
|
|
506
498
|
const implausibleName = transformedExamObj.examName ||
|
|
@@ -549,16 +541,10 @@ async function ohtReportMeasurementsExtractor(isReportPreview, exams, sourceFile
|
|
|
549
541
|
to = extractedRange.to ?? null;
|
|
550
542
|
isRangeParsedCorrectly = extractedRange.isRangeParsedCorrectly;
|
|
551
543
|
if (!isRangeParsedCorrectly) {
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
data: { ohtBmId: finalOhtBmId, labKey },
|
|
557
|
-
});
|
|
558
|
-
errorMessages.push({
|
|
559
|
-
destination: { slack: true, notes: true, bi: true },
|
|
560
|
-
message: `Range not extracted correctly for:[PLACEHOLDER]`,
|
|
561
|
-
item: `${bmInfo}`
|
|
544
|
+
parsingErrorService_service_1.parsingErrorService.record(error_types_1.ParsingErrorType.RANGE_NOT_EXTRACTED, {
|
|
545
|
+
labKey: transformedExamObj.labKey,
|
|
546
|
+
biomarkerId: finalOhtBmId,
|
|
547
|
+
item: `${bmInfo}`,
|
|
562
548
|
});
|
|
563
549
|
isMeasurementCorrectlyParsed = false;
|
|
564
550
|
}
|
|
@@ -590,10 +576,9 @@ async function ohtReportMeasurementsExtractor(isReportPreview, exams, sourceFile
|
|
|
590
576
|
if (labKey.startsWith('GROUPED_') && !extractedAnnotation) {
|
|
591
577
|
continue;
|
|
592
578
|
}
|
|
593
|
-
const loincMapping = loincMappingByOhtBmId.get(ohtBiomarker.id);
|
|
594
579
|
let measurement = {
|
|
595
580
|
biomarkerId: ohtBiomarker.id,
|
|
596
|
-
...(loincMapping ? { loincMapping } : {}),
|
|
581
|
+
...(backendMapping?.loincMapping ? { loincMapping: backendMapping.loincMapping } : {}),
|
|
597
582
|
valueType,
|
|
598
583
|
value: (0, dataUtils_1.isBiomarkerValueNumerical)(ohtBiomarker) ? numberValue : null,
|
|
599
584
|
alphanumericValue: alphaValue,
|
|
@@ -624,7 +609,7 @@ async function ohtReportMeasurementsExtractor(isReportPreview, exams, sourceFile
|
|
|
624
609
|
continue;
|
|
625
610
|
}
|
|
626
611
|
// No mapping or ohtBmId === -1: create unknownMeasurement
|
|
627
|
-
const unknownMeasurementName =
|
|
612
|
+
const unknownMeasurementName = resolveUnknownMeasurementName([transformedExamObj.mnemonic, transformedExamObj.examName], labKey || '(unmapped measurement)');
|
|
628
613
|
const originalName = labKey.split(':')[1] || transformedExamObj.examName;
|
|
629
614
|
const annotation = `${transformedExamObj.annotation || ''}`;
|
|
630
615
|
const dataOrigin = {
|
|
@@ -660,7 +645,7 @@ async function ohtReportMeasurementsExtractor(isReportPreview, exams, sourceFile
|
|
|
660
645
|
backend_mapped_biomarkers: backendMappedCount,
|
|
661
646
|
unmapped_biomarkers: unmappedCount,
|
|
662
647
|
total_processed: exams.length,
|
|
663
|
-
errors:
|
|
648
|
+
errors: parsingErrorService_service_1.parsingErrorService.getLocalErrors().length,
|
|
664
649
|
});
|
|
665
650
|
return {
|
|
666
651
|
measurements,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ohtReportMeasurementsExtractor.service.js","sourceRoot":"","sources":["../../service/ohtReportMeasurementsExtractor.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ohtReportMeasurementsExtractor.service.js","sourceRoot":"","sources":["../../service/ohtReportMeasurementsExtractor.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Request-scoped parsing error collector for agnostic-parser.
|
|
3
|
+
*
|
|
4
|
+
* Layer 1 (local): in-memory errors → ingestion notes, Slack, processingLogger.
|
|
5
|
+
* Layer 2 (Core): grouped profiles flushed at end of run via runWithContextAsync finally.
|
|
6
|
+
*
|
|
7
|
+
* Call sites use record() only — do not duplicate processingLogger.addWarning/addError.
|
|
8
|
+
*/
|
|
9
|
+
import { LocalParsingError, ErrorProfilePayload, ParsingErrorType, RecordParsingErrorDetails, RecordParsingErrorOptions } from '../types/error.types';
|
|
10
|
+
import { ProcessingContext } from './processingLogger.service';
|
|
11
|
+
declare class ParsingErrorService {
|
|
12
|
+
/** Called from runWithContextAsync — do not use directly in parsers. */
|
|
13
|
+
initRequestState(requestId: string): void;
|
|
14
|
+
clearRequestState(requestId: string): void;
|
|
15
|
+
/**
|
|
16
|
+
* Single entry point for parsing issues.
|
|
17
|
+
* Resolves message/clientMessage from catalog + details, stores Layer 1, syncs logger once.
|
|
18
|
+
*/
|
|
19
|
+
record(errorType: ParsingErrorType, details?: RecordParsingErrorDetails, options?: RecordParsingErrorOptions): LocalParsingError;
|
|
20
|
+
getLocalErrors(): LocalParsingError[];
|
|
21
|
+
getAggregatedNotes(): string;
|
|
22
|
+
getAggregatedSlack(): string;
|
|
23
|
+
sendSlackIfNeeded(ohapiUrl: string, partnerName: string, fileUploadId: string): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Groups local errors by (errorType, contextKey).
|
|
26
|
+
* Technical message → occurrence snapshot; clientMessage → profile message.
|
|
27
|
+
*/
|
|
28
|
+
buildCorePayloads(ctx: ProcessingContext): ErrorProfilePayload[];
|
|
29
|
+
/**
|
|
30
|
+
* POST grouped profiles to Core. Called from runWithContextAsync finally.
|
|
31
|
+
* No-op when empty, preview, or missing partner/api key. Never throws.
|
|
32
|
+
*/
|
|
33
|
+
flushToCoreSafe(): Promise<void>;
|
|
34
|
+
clear(): void;
|
|
35
|
+
}
|
|
36
|
+
export declare const parsingErrorService: ParsingErrorService;
|
|
37
|
+
/** Lifecycle hooks used by processingLogger.runWithContextAsync. */
|
|
38
|
+
export declare function initParsingErrorRequestState(context: ProcessingContext): string;
|
|
39
|
+
export declare function clearParsingErrorRequestState(requestId: string): void;
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parsingErrorService = void 0;
|
|
4
|
+
exports.initParsingErrorRequestState = initParsingErrorRequestState;
|
|
5
|
+
exports.clearParsingErrorRequestState = clearParsingErrorRequestState;
|
|
6
|
+
/**
|
|
7
|
+
* Request-scoped parsing error collector for agnostic-parser.
|
|
8
|
+
*
|
|
9
|
+
* Layer 1 (local): in-memory errors → ingestion notes, Slack, processingLogger.
|
|
10
|
+
* Layer 2 (Core): grouped profiles flushed at end of run via runWithContextAsync finally.
|
|
11
|
+
*
|
|
12
|
+
* Call sites use record() only — do not duplicate processingLogger.addWarning/addError.
|
|
13
|
+
*/
|
|
14
|
+
const error_types_1 = require("../types/error.types");
|
|
15
|
+
const dataUtils_1 = require("../util-ts/dataUtils");
|
|
16
|
+
const processingLogger_service_1 = require("./processingLogger.service");
|
|
17
|
+
const errorHandling_service_1 = require("./errorHandling.service");
|
|
18
|
+
const slackMessages_service_1 = require("./slackMessages.service");
|
|
19
|
+
// One state bag per request — keyed by the same id as processingLogger (ALS).
|
|
20
|
+
const parsingErrorStateRegistry = new Map();
|
|
21
|
+
function createEmptyParsingErrorState() {
|
|
22
|
+
return { localErrors: [] };
|
|
23
|
+
}
|
|
24
|
+
const SEVERITY_RANK = {
|
|
25
|
+
warning: 1,
|
|
26
|
+
error: 2,
|
|
27
|
+
critical: 3,
|
|
28
|
+
};
|
|
29
|
+
function maxParsingErrorSeverity(a, b) {
|
|
30
|
+
return SEVERITY_RANK[a] >= SEVERITY_RANK[b] ? a : b;
|
|
31
|
+
}
|
|
32
|
+
function getMutableState() {
|
|
33
|
+
const requestId = (0, processingLogger_service_1.getCurrentRequestId)();
|
|
34
|
+
if (requestId == null) {
|
|
35
|
+
return createEmptyParsingErrorState();
|
|
36
|
+
}
|
|
37
|
+
const state = parsingErrorStateRegistry.get(requestId);
|
|
38
|
+
if (state === undefined) {
|
|
39
|
+
return createEmptyParsingErrorState();
|
|
40
|
+
}
|
|
41
|
+
return state;
|
|
42
|
+
}
|
|
43
|
+
/** Maps a LocalParsingError to a single processingLogger call (severity → warning/error). */
|
|
44
|
+
function syncToProcessingLogger(localError) {
|
|
45
|
+
const catalog = error_types_1.PARSING_ERROR_CATALOG[localError.errorType];
|
|
46
|
+
if (localError.severity === 'critical') {
|
|
47
|
+
const rejectReason = localError.rejectReason ?? catalog.rejectReason;
|
|
48
|
+
processingLogger_service_1.processingLogger.addError(new Error(localError.message), localError.pipelineStep, {
|
|
49
|
+
rejectReason,
|
|
50
|
+
errorCode: localError.errorType,
|
|
51
|
+
});
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const warningSeverity = localError.severity === 'error' ? 'degraded' : 'info';
|
|
55
|
+
processingLogger_service_1.processingLogger.addWarning(localError.message, localError.pipelineStep, {
|
|
56
|
+
warningType: catalog.warningType ?? 'parsing_error',
|
|
57
|
+
warningCategory: catalog.warningCategory ?? 'general',
|
|
58
|
+
warningSeverity,
|
|
59
|
+
data: localError.errorTrace,
|
|
60
|
+
warningCode: localError.errorType,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/** Adapts Layer 1 errors to legacy aggregateMessages() shape for notes/Slack. */
|
|
64
|
+
function localErrorsToErrorMessages(localErrors, channel) {
|
|
65
|
+
return localErrors
|
|
66
|
+
.filter((error) => error.destinations[channel])
|
|
67
|
+
.map((error) => ({
|
|
68
|
+
destination: error.destinations,
|
|
69
|
+
message: error.message,
|
|
70
|
+
item: error.item,
|
|
71
|
+
}));
|
|
72
|
+
}
|
|
73
|
+
class ParsingErrorService {
|
|
74
|
+
/** Called from runWithContextAsync — do not use directly in parsers. */
|
|
75
|
+
initRequestState(requestId) {
|
|
76
|
+
parsingErrorStateRegistry.set(requestId, createEmptyParsingErrorState());
|
|
77
|
+
}
|
|
78
|
+
clearRequestState(requestId) {
|
|
79
|
+
parsingErrorStateRegistry.delete(requestId);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Single entry point for parsing issues.
|
|
83
|
+
* Resolves message/clientMessage from catalog + details, stores Layer 1, syncs logger once.
|
|
84
|
+
*/
|
|
85
|
+
record(errorType, details, options) {
|
|
86
|
+
const catalog = error_types_1.PARSING_ERROR_CATALOG[errorType];
|
|
87
|
+
const severity = details?.severity ?? catalog.severity;
|
|
88
|
+
const pipelineStep = details?.pipelineStep ?? catalog.pipelineStep;
|
|
89
|
+
const contextKey = (0, error_types_1.resolveParsingErrorContextKey)(catalog.contextKey, details);
|
|
90
|
+
const message = (0, error_types_1.buildParsingErrorMessage)(catalog.message, details);
|
|
91
|
+
const rejectReason = details?.rejectReason ?? catalog.rejectReason;
|
|
92
|
+
const destinations = {
|
|
93
|
+
slack: options?.notifySlack ?? details?.destinations?.slack ?? catalog.destinations.slack,
|
|
94
|
+
notes: options?.notifyNotes ?? details?.destinations?.notes ?? catalog.destinations.notes,
|
|
95
|
+
bi: options?.notifyBi ?? details?.destinations?.bi ?? catalog.destinations.bi,
|
|
96
|
+
};
|
|
97
|
+
const localError = {
|
|
98
|
+
errorType,
|
|
99
|
+
severity,
|
|
100
|
+
message,
|
|
101
|
+
clientMessage: catalog.clientMessage,
|
|
102
|
+
pipelineStep,
|
|
103
|
+
contextKey,
|
|
104
|
+
item: details?.item,
|
|
105
|
+
destinations,
|
|
106
|
+
rejectReason,
|
|
107
|
+
biomarkerId: details?.biomarkerId,
|
|
108
|
+
biomarkerName: details?.biomarkerName,
|
|
109
|
+
errorTrace: details?.errorTrace,
|
|
110
|
+
ohtExam: details?.ohtExam,
|
|
111
|
+
originalExam: details?.originalExam,
|
|
112
|
+
timestamp: new Date(),
|
|
113
|
+
};
|
|
114
|
+
getMutableState().localErrors.push(localError);
|
|
115
|
+
syncToProcessingLogger(localError);
|
|
116
|
+
return localError;
|
|
117
|
+
}
|
|
118
|
+
getLocalErrors() {
|
|
119
|
+
return [...getMutableState().localErrors];
|
|
120
|
+
}
|
|
121
|
+
// --- Layer 1 outputs (not persisted to Core) ---
|
|
122
|
+
getAggregatedNotes() {
|
|
123
|
+
return (0, errorHandling_service_1.aggregateMessages)(localErrorsToErrorMessages(getMutableState().localErrors, 'notes'), 'notes');
|
|
124
|
+
}
|
|
125
|
+
getAggregatedSlack() {
|
|
126
|
+
return (0, errorHandling_service_1.aggregateMessages)(localErrorsToErrorMessages(getMutableState().localErrors, 'slack'), 'slack');
|
|
127
|
+
}
|
|
128
|
+
async sendSlackIfNeeded(ohapiUrl, partnerName, fileUploadId) {
|
|
129
|
+
const slackText = this.getAggregatedSlack();
|
|
130
|
+
if (!slackText.trim()) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
const fileUrl = `${ohapiUrl}/data-import/file-uploads/${fileUploadId}`;
|
|
134
|
+
const slackMsg = (0, slackMessages_service_1.getSlackFileIssueNotificationMessage)(slackText, `AgnosticParser [${partnerName}]`, fileUrl);
|
|
135
|
+
if (slackMsg.blocks[3].text.text.trim() !== '') {
|
|
136
|
+
await (0, slackMessages_service_1.sendMessageToSlack)(slackMsg);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// --- Layer 2: bulk payload for oht-core PartnerErrorProfiles ---
|
|
140
|
+
/**
|
|
141
|
+
* Groups local errors by (errorType, contextKey).
|
|
142
|
+
* Technical message → occurrence snapshot; clientMessage → profile message.
|
|
143
|
+
*/
|
|
144
|
+
buildCorePayloads(ctx) {
|
|
145
|
+
const localErrors = getMutableState().localErrors;
|
|
146
|
+
if (localErrors.length === 0) {
|
|
147
|
+
return [];
|
|
148
|
+
}
|
|
149
|
+
const groups = new Map();
|
|
150
|
+
for (const error of localErrors) {
|
|
151
|
+
const key = `${error.errorType}::${error.contextKey}`;
|
|
152
|
+
const group = groups.get(key);
|
|
153
|
+
if (group) {
|
|
154
|
+
group.push(error);
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
groups.set(key, [error]);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
const fileUploadId = ctx.fileUploadId ?? '000000000000000000000001';
|
|
161
|
+
const payloads = [];
|
|
162
|
+
for (const group of groups.values()) {
|
|
163
|
+
const representative = group[group.length - 1];
|
|
164
|
+
const severity = group.reduce((max, error) => maxParsingErrorSeverity(max, error.severity), group[0].severity);
|
|
165
|
+
const snapshots = group.map((error) => ({
|
|
166
|
+
dataImportFileUploadId: fileUploadId,
|
|
167
|
+
message: error.message,
|
|
168
|
+
pipelineStep: error.pipelineStep,
|
|
169
|
+
severity: error.severity,
|
|
170
|
+
rejectReason: error.rejectReason ?? null,
|
|
171
|
+
errorTrace: error.errorTrace,
|
|
172
|
+
occurredAt: error.timestamp.toISOString(),
|
|
173
|
+
}));
|
|
174
|
+
const payload = {
|
|
175
|
+
contextKey: representative.contextKey,
|
|
176
|
+
issueType: representative.errorType,
|
|
177
|
+
severity,
|
|
178
|
+
message: representative.clientMessage,
|
|
179
|
+
pipelineStep: representative.pipelineStep,
|
|
180
|
+
rejectReason: representative.rejectReason ?? null,
|
|
181
|
+
biomarkerId: representative.biomarkerId,
|
|
182
|
+
biomarkerName: representative.biomarkerName,
|
|
183
|
+
errorTrace: representative.errorTrace,
|
|
184
|
+
ohtExam: representative.ohtExam,
|
|
185
|
+
originalExam: representative.originalExam,
|
|
186
|
+
source: 'AgnosticParser',
|
|
187
|
+
uploadedByUserId: ctx.uploadedByUserId,
|
|
188
|
+
};
|
|
189
|
+
if (group.length === 1) {
|
|
190
|
+
payload.occurrence = snapshots[0];
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
payload.occurrences = snapshots;
|
|
194
|
+
payload.occurrencesCount = group.length;
|
|
195
|
+
}
|
|
196
|
+
payloads.push(payload);
|
|
197
|
+
}
|
|
198
|
+
return payloads;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* POST grouped profiles to Core. Called from runWithContextAsync finally.
|
|
202
|
+
* No-op when empty, preview, or missing partner/api key. Never throws.
|
|
203
|
+
*/
|
|
204
|
+
async flushToCoreSafe() {
|
|
205
|
+
const state = getMutableState();
|
|
206
|
+
if (state.localErrors.length === 0) {
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
const loggerState = processingLogger_service_1.processingLogger.getState();
|
|
210
|
+
const partnerId = loggerState.partnerId;
|
|
211
|
+
const isPreview = loggerState.isPreview ?? false;
|
|
212
|
+
if (!partnerId || isPreview) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
const apiKey = process.env.OHT_CORE_AGNOSTIC_PARSER_API_KEY;
|
|
216
|
+
if (!apiKey) {
|
|
217
|
+
processingLogger_service_1.processingLogger.logError('Missing OHT_CORE_AGNOSTIC_PARSER_API_KEY; skipping parsing error profile flush', undefined, { partner_id: partnerId });
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
const ctx = {
|
|
221
|
+
fileUploadId: loggerState.fileUploadId,
|
|
222
|
+
partnerId,
|
|
223
|
+
uploadedByUserId: loggerState.uploadedByUserId,
|
|
224
|
+
isPreview,
|
|
225
|
+
};
|
|
226
|
+
try {
|
|
227
|
+
const payloads = this.buildCorePayloads(ctx);
|
|
228
|
+
if (payloads.length === 0) {
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
await (0, dataUtils_1.bulkUpsertCustomParserErrorProfiles)(partnerId, payloads, apiKey);
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
processingLogger_service_1.processingLogger.logError('Failed to flush parsing error profiles to Core', error instanceof Error ? error : undefined, { partner_id: partnerId });
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
clear() {
|
|
238
|
+
getMutableState().localErrors.length = 0;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
exports.parsingErrorService = new ParsingErrorService();
|
|
242
|
+
/** Lifecycle hooks used by processingLogger.runWithContextAsync. */
|
|
243
|
+
function initParsingErrorRequestState(context) {
|
|
244
|
+
const requestId = (0, processingLogger_service_1.getRequestIdFromContext)(context);
|
|
245
|
+
exports.parsingErrorService.initRequestState(requestId);
|
|
246
|
+
return requestId;
|
|
247
|
+
}
|
|
248
|
+
function clearParsingErrorRequestState(requestId) {
|
|
249
|
+
exports.parsingErrorService.clearRequestState(requestId);
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=parsingErrorService.service.js.map
|