@openhealth/oht-custom-parser-lib 0.5.27 → 0.5.29

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 CHANGED
@@ -18,5 +18,7 @@ export { default as pinoLogger } from './util-ts/pinoLogger';
18
18
  export { getGreaterThanPatterns, getLowerThanPatterns } from './util-ts/regexUtils';
19
19
  export { getMappedBiomarkers, getMappedBiomarkersLatest } from './util-ts/dataUtils';
20
20
  export { parseRange } from './util-ts/extractionUtils';
21
- export { lisCsvToExamRows, lisXmlToJson, } from './util-ts/mapperUtils';
21
+ export { lisCsvToExamRows, lisXmlToJson, fetchActiveMappingRules, } from './util-ts/mapperUtils';
22
22
  export type { LisCsvRow } from './util-ts/mapperUtils';
23
+ export { mapToOhtReport } from './service/ohtReportMapper.service';
24
+ export type { OhtReportMappingRules, OhtReportMetadataPathRules, OhtReportPatientPathRules, OhtReportExamsPathRules, OhtReportRangePathRules, MapperOptions, FilterCondition, } from './types/mappingRules.types';
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.processingLogger = exports.mapErrorToRejectReason = exports.extractFormattedRejectReason = exports.shouldSendSlackNotification = exports.ValidationError = exports.handleError = exports.getRejectReason = exports.getErrorMessage = exports.ERROR_MESSAGES = exports.ERROR_CATALOG = exports.ErrorCode = exports.RejectReason = exports.UploadType = exports.Sex = exports.DataImportFileUploadStatus = exports.BiomarkerValueType = exports.MeasurementValueComparator = exports.DigitizationStatus = exports.PipelineStep = exports.ReferenceRangeType = exports.BiomarkerCompatibility = exports.ManualCheck = exports.AcfBiomarkerGenericDisclaimerLogic = exports.AcfBiomarkerRangeAnnotationCheck = exports.unitSynonyms = exports.validateTransformationRuleExpression = exports.applyTransformationRules = exports.generateBIMessages = exports.publishToTopic = exports.aggregateBiMessages = exports.aggregateMessages = exports.sendMessageToSlack = exports.getSlackFileIssueNotificationMessage = exports.extractValueFromGreaterLowerThan = exports.extractUnit = exports.getRangeFromPositionAndRegex = exports.parseExamValue = exports.extractReferenceAnnotation = exports.extractReferenceRanges = exports.checkValueForPlausibleValues = exports.ohtMeasurementsExtractor = exports.ohtReportMeasurementsExtractor = exports.postFileUploadSetStatus = exports.queryFileUploadsWithFilters = exports.handleRejection = exports.isPatientAgeValid = exports.parseGender = exports.parseExternalPatientId = exports.postReportPreviewToCore = exports.postDataImportFileUploadToCore = void 0;
7
- exports.lisXmlToJson = exports.lisCsvToExamRows = exports.parseRange = exports.getMappedBiomarkersLatest = exports.getMappedBiomarkers = exports.getLowerThanPatterns = exports.getGreaterThanPatterns = exports.pinoLogger = exports.uploadFileBufferToGCS = exports.readFileFromBucket = exports.applyFormat = exports.extractFromPath = exports.resolveUnitFromSynonyms = exports.fetchSynonymUnits = exports.processAppendedMappings = exports.isBiomarkerExternalNoVisualRange = exports.isBiomarkerValueNumerical = exports.extractValue = exports.parseErrorObj = exports.makeApiCallWithRetry = exports.runWithContextAsync = exports.runWithContext = exports.getRequestScopedFilename = exports.getRequestIdFromContext = void 0;
7
+ exports.mapToOhtReport = exports.fetchActiveMappingRules = exports.lisXmlToJson = exports.lisCsvToExamRows = exports.parseRange = exports.getMappedBiomarkersLatest = exports.getMappedBiomarkers = exports.getLowerThanPatterns = exports.getGreaterThanPatterns = exports.pinoLogger = exports.uploadFileBufferToGCS = exports.readFileFromBucket = exports.applyFormat = exports.extractFromPath = exports.resolveUnitFromSynonyms = exports.fetchSynonymUnits = exports.processAppendedMappings = exports.isBiomarkerExternalNoVisualRange = exports.isBiomarkerValueNumerical = exports.extractValue = exports.parseErrorObj = exports.makeApiCallWithRetry = exports.runWithContextAsync = exports.runWithContext = exports.getRequestScopedFilename = exports.getRequestIdFromContext = void 0;
8
8
  // ### SERVICES ###
9
9
  var reportCreator_service_1 = require("./service/reportCreator.service");
10
10
  Object.defineProperty(exports, "postDataImportFileUploadToCore", { enumerable: true, get: function () { return reportCreator_service_1.postDataImportFileUploadToCore; } });
@@ -103,4 +103,8 @@ Object.defineProperty(exports, "parseRange", { enumerable: true, get: function (
103
103
  var mapperUtils_1 = require("./util-ts/mapperUtils");
104
104
  Object.defineProperty(exports, "lisCsvToExamRows", { enumerable: true, get: function () { return mapperUtils_1.lisCsvToExamRows; } });
105
105
  Object.defineProperty(exports, "lisXmlToJson", { enumerable: true, get: function () { return mapperUtils_1.lisXmlToJson; } });
106
+ Object.defineProperty(exports, "fetchActiveMappingRules", { enumerable: true, get: function () { return mapperUtils_1.fetchActiveMappingRules; } });
107
+ // ### OHT REPORT MAPPER ###
108
+ var ohtReportMapper_service_1 = require("./service/ohtReportMapper.service");
109
+ Object.defineProperty(exports, "mapToOhtReport", { enumerable: true, get: function () { return ohtReportMapper_service_1.mapToOhtReport; } });
106
110
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { OhtReport } from '../types/oht.types';
2
+ import { OhtReportMappingRules, OhtReportMetadataPathRules, OhtReportPatientPathRules, OhtReportExamsPathRules, OhtReportRangePathRules, MapperOptions } from '../types/mappingRules.types';
3
+ export type { OhtReportMappingRules, OhtReportMetadataPathRules, OhtReportPatientPathRules, OhtReportExamsPathRules, OhtReportRangePathRules, MapperOptions, };
4
+ /**
5
+ * Map a raw file (JSON, XML or CSV) to an OhtReport using the provided path rules.
6
+ *
7
+ * Behaviour:
8
+ * - If the parsed content already satisfies the OhtReport shape, it is returned as-is.
9
+ * - XML content is converted via `lisXmlToJson`.
10
+ * - CSV content is converted via `lisCsvToExamRows` and wrapped in `{ rows: [...] }`.
11
+ * - All field paths support `[*]` array-iteration notation.
12
+ * - The `labKey` exam path supports compound `"pathA:pathB"` notation to join two
13
+ * values (potentially from different array depths) with a colon separator.
14
+ *
15
+ * @param fileContent Raw string content of the source file.
16
+ * @param rules Path rules describing where each OhtReport field lives in the source.
17
+ * @param options Optional context (e.g. filename for logging).
18
+ * @throws On invalid input, parse failure, or unrecoverable mapping error.
19
+ */
20
+ export declare function mapToOhtReport(fileContent: string, rules: OhtReportMappingRules, options?: MapperOptions): Promise<OhtReport>;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mapToOhtReport = mapToOhtReport;
4
+ const processingLogger_service_1 = require("./processingLogger.service");
5
+ const mapperUtils_1 = require("../util-ts/mapperUtils");
6
+ /**
7
+ * Map a raw file (JSON, XML or CSV) to an OhtReport using the provided path rules.
8
+ *
9
+ * Behaviour:
10
+ * - If the parsed content already satisfies the OhtReport shape, it is returned as-is.
11
+ * - XML content is converted via `lisXmlToJson`.
12
+ * - CSV content is converted via `lisCsvToExamRows` and wrapped in `{ rows: [...] }`.
13
+ * - All field paths support `[*]` array-iteration notation.
14
+ * - The `labKey` exam path supports compound `"pathA:pathB"` notation to join two
15
+ * values (potentially from different array depths) with a colon separator.
16
+ *
17
+ * @param fileContent Raw string content of the source file.
18
+ * @param rules Path rules describing where each OhtReport field lives in the source.
19
+ * @param options Optional context (e.g. filename for logging).
20
+ * @throws On invalid input, parse failure, or unrecoverable mapping error.
21
+ */
22
+ async function mapToOhtReport(fileContent, rules, options) {
23
+ const filename = options?.filename ?? 'unknown';
24
+ if (typeof fileContent !== 'string' || fileContent.trim() === '') {
25
+ const err = new Error('mapToOhtReport: fileContent must be a non-empty string');
26
+ processingLogger_service_1.processingLogger.logError('OhtReportMapper: invalid file content', err, { filename });
27
+ throw err;
28
+ }
29
+ if (!rules || typeof rules !== 'object') {
30
+ const err = new Error('mapToOhtReport: rules must be a valid OhtReportMappingRules object');
31
+ processingLogger_service_1.processingLogger.logError('OhtReportMapper: invalid rules', err, { filename });
32
+ throw err;
33
+ }
34
+ // ── Parse raw content to JSON ─────────────────────────────────────────────
35
+ let parsed;
36
+ try {
37
+ parsed = await (0, mapperUtils_1.parseFileToJson)(fileContent);
38
+ }
39
+ catch (e) {
40
+ const err = e instanceof Error ? e : new Error(String(e));
41
+ processingLogger_service_1.processingLogger.logError('OhtReportMapper: failed to parse file content', err, { filename });
42
+ throw err;
43
+ }
44
+ // ── Short-circuit: already an OhtReport ──────────────────────────────────
45
+ if ((0, mapperUtils_1.isOhtReport)(parsed)) {
46
+ return parsed;
47
+ }
48
+ // ── Map source JSON → OhtReport ───────────────────────────────────────────
49
+ try {
50
+ const metadata = (0, mapperUtils_1.mapMetadata)(parsed, rules.metadata);
51
+ const patient = (0, mapperUtils_1.mapPatient)(parsed, rules.patient);
52
+ const exams = (0, mapperUtils_1.mapExams)(parsed, rules.exams);
53
+ return { metadata, patient, exams };
54
+ }
55
+ catch (e) {
56
+ const err = e instanceof Error ? e : new Error(String(e));
57
+ processingLogger_service_1.processingLogger.logError('OhtReportMapper: mapping failed', err, { filename, error: err.message });
58
+ throw err;
59
+ }
60
+ }
61
+ //# sourceMappingURL=ohtReportMapper.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ohtReportMapper.service.js","sourceRoot":"","sources":["../../service/ohtReportMapper.service.ts"],"names":[],"mappings":";;AA2CA,wCA8CC;AAhFD,yEAA8D;AAC9D,wDAMgC;AAWhC;;;;;;;;;;;;;;;GAeG;AACI,KAAK,UAAU,cAAc,CAClC,WAAmB,EACnB,KAA4B,EAC5B,OAAuB;IAEvB,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,SAAS,CAAC;IAEhD,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACjE,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAChF,2CAAgB,CAAC,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtF,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QAC5F,2CAAgB,CAAC,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/E,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,6EAA6E;IAC7E,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAA,6BAAe,EAAC,WAAW,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,2CAAgB,CAAC,QAAQ,CAAC,+CAA+C,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9F,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,4EAA4E;IAC5E,IAAI,IAAA,yBAAW,EAAC,MAAM,CAAC,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,6EAA6E;IAC7E,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAA,yBAAW,EAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,OAAO,GAAI,IAAA,wBAAU,EAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,KAAK,GAAM,IAAA,sBAAQ,EAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAE/C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACtC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,2CAAgB,CAAC,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACpG,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,74 @@
1
+ export interface OhtReportMappingRules {
2
+ metadata: OhtReportMetadataPathRules;
3
+ patient: OhtReportPatientPathRules;
4
+ exams: OhtReportExamsPathRules;
5
+ }
6
+ export interface OhtReportMetadataPathRules {
7
+ labOrderId: string;
8
+ collectionDate?: string;
9
+ examDate?: string;
10
+ documentDate?: string;
11
+ pdfBase64?: string;
12
+ prescriberExternalId?: string;
13
+ }
14
+ export interface OhtReportPatientPathRules {
15
+ id: string;
16
+ name?: string;
17
+ firstName?: string;
18
+ lastName?: string;
19
+ birthdate: string;
20
+ sex: string;
21
+ gender?: string;
22
+ socialName?: string;
23
+ email?: string;
24
+ cpf?: string;
25
+ documentId?: string;
26
+ address?: string;
27
+ phoneNumber?: string;
28
+ }
29
+ export interface OhtReportExamsPathRules {
30
+ labKey: string;
31
+ value: string;
32
+ unit: string;
33
+ mnemonic: string;
34
+ examName: string;
35
+ range: OhtReportRangePathRules;
36
+ method?: string;
37
+ material?: string;
38
+ collectionDate?: string;
39
+ effectiveDate?: string;
40
+ examCollectionDate?: string;
41
+ examEffectiveDate?: string;
42
+ documentDate?: string;
43
+ description?: string;
44
+ annotation?: string;
45
+ /** When true, emit a single range with noSourceRanges: true and skip source range mapping */
46
+ noSourceRanges?: boolean;
47
+ }
48
+ export interface OhtReportRangePathRules {
49
+ text: string;
50
+ from?: string;
51
+ to?: string;
52
+ age?: string;
53
+ sex?: string;
54
+ }
55
+ export interface MapperOptions {
56
+ filename?: string;
57
+ }
58
+ /**
59
+ * Filter condition used in conditional path syntax: [key=[pattern]].
60
+ *
61
+ * Patterns without regex metacharacters (^$.*+?()[]{}|\) perform strict === comparison.
62
+ * Patterns with metacharacters are compiled as RegExp; falls back to strict equality on error.
63
+ *
64
+ * Examples:
65
+ * items[code=[A1]].val → exact match "A1"
66
+ * items[code=[^TSH]].val → regex: starts with "TSH"
67
+ * items[code=[^TSH$]].val → regex: exactly "TSH"
68
+ */
69
+ export interface FilterCondition {
70
+ /** Dot-path key to read from each array element for comparison. */
71
+ key: string;
72
+ /** Pattern to match against the resolved key value. */
73
+ pattern: string;
74
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ // ─── Public types — mirror of Go OhtReportMappingRuleSet ──────────────────────
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ //# sourceMappingURL=mappingRules.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mappingRules.types.js","sourceRoot":"","sources":["../../types/mappingRules.types.ts"],"names":[],"mappings":";AAAA,iFAAiF"}
@@ -1,3 +1,6 @@
1
+ import { OhtReport, OhtMetadata, OhtPatient, Exam } from '../types/oht.types';
2
+ export type { OhtReportMappingRules, OhtReportMetadataPathRules, OhtReportPatientPathRules, OhtReportExamsPathRules, OhtReportRangePathRules, MapperOptions, FilterCondition, } from '../types/mappingRules.types';
3
+ import type { OhtReportMetadataPathRules, OhtReportPatientPathRules, OhtReportExamsPathRules } from '../types/mappingRules.types';
1
4
  /** One parsed row: keys from the CSV header, values as strings. */
2
5
  export type LisCsvRow = Record<string, string>;
3
6
  /**
@@ -10,3 +13,35 @@ export declare function lisCsvToExamRows(csv: string): LisCsvRow[];
10
13
  * Repeated sibling tags (e.g. several `exame`) still parse as arrays.
11
14
  */
12
15
  export declare function lisXmlToJson(xml: string): Promise<unknown>;
16
+ /**
17
+ * Fetch the active mapping rules for a partner from the OHT Core API.
18
+ *
19
+ * Calls `GET {apiUrl}/mapping-rules/active` (with an optional `partnerId` query param)
20
+ * and returns the raw response payload, which the caller can cast to
21
+ * `OhtReportMappingRules`. Returns `null` when the API returns no data.
22
+ *
23
+ * @param apiUrl Base URL of the OHT Core API (e.g. process.env.OHAPI_URL).
24
+ * @param apiKey API key used for Basic auth (e.g. process.env.OHT_CORE_AGNOSTIC_PARSER_API_KEY).
25
+ * @param partnerId Optional partner identifier forwarded as a query parameter.
26
+ * @throws When the HTTP request itself fails (network error, non-2xx status, etc.).
27
+ */
28
+ export declare function fetchActiveMappingRules(ohtCoreUrl: string, apiKey: string, partnerId: string): Promise<unknown>;
29
+ /**
30
+ * Parse raw file content to a plain JS value, auto-detecting the format.
31
+ * CSV rows are wrapped in { rows: [...] } so downstream path rules can target them.
32
+ */
33
+ export declare function parseFileToJson(content: string): Promise<unknown>;
34
+ /** Returns true when data already conforms to the OhtReport structure. */
35
+ export declare function isOhtReport(data: unknown): data is OhtReport;
36
+ export declare function mapMetadata(source: any, rules: OhtReportMetadataPathRules): OhtMetadata;
37
+ export declare function mapPatient(source: any, rules: OhtReportPatientPathRules): OhtPatient;
38
+ /**
39
+ * Map all exams from the source object using the exam path rules.
40
+ *
41
+ * Algorithm:
42
+ * 1. Collect every path referenced in examRules (expanding compound labKey paths).
43
+ * 2. Determine the maximum [*] depth across all paths.
44
+ * 3. Resolve every leaf ArrayItem at that depth (each becomes one exam).
45
+ * 4. Fields from shallower depths are resolved via the ancestors chain.
46
+ */
47
+ export declare function mapExams(source: any, examRules: OhtReportExamsPathRules): Exam[];
@@ -2,8 +2,15 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.lisCsvToExamRows = lisCsvToExamRows;
4
4
  exports.lisXmlToJson = lisXmlToJson;
5
+ exports.fetchActiveMappingRules = fetchActiveMappingRules;
6
+ exports.parseFileToJson = parseFileToJson;
7
+ exports.isOhtReport = isOhtReport;
8
+ exports.mapMetadata = mapMetadata;
9
+ exports.mapPatient = mapPatient;
10
+ exports.mapExams = mapExams;
5
11
  const sync_1 = require("csv-parse/sync");
6
12
  const xml2js_1 = require("xml2js");
13
+ const apiUtils_1 = require("./apiUtils");
7
14
  const lisCsvParseOptions = {
8
15
  columns: true,
9
16
  skip_empty_lines: true,
@@ -41,4 +48,420 @@ async function lisXmlToJson(xml) {
41
48
  trim: false,
42
49
  });
43
50
  }
51
+ /**
52
+ * Fetch the active mapping rules for a partner from the OHT Core API.
53
+ *
54
+ * Calls `GET {apiUrl}/mapping-rules/active` (with an optional `partnerId` query param)
55
+ * and returns the raw response payload, which the caller can cast to
56
+ * `OhtReportMappingRules`. Returns `null` when the API returns no data.
57
+ *
58
+ * @param apiUrl Base URL of the OHT Core API (e.g. process.env.OHAPI_URL).
59
+ * @param apiKey API key used for Basic auth (e.g. process.env.OHT_CORE_AGNOSTIC_PARSER_API_KEY).
60
+ * @param partnerId Optional partner identifier forwarded as a query parameter.
61
+ * @throws When the HTTP request itself fails (network error, non-2xx status, etc.).
62
+ */
63
+ async function fetchActiveMappingRules(ohtCoreUrl, apiKey, partnerId) {
64
+ const url = `${ohtCoreUrl}/v1/customparser/partners/${partnerId}/mapping-rules/active`;
65
+ const response = await (0, apiUtils_1.makeApiCallWithRetry)('GET', url, null, apiKey, 2);
66
+ return response?.data ?? null;
67
+ }
68
+ // ─── Path utilities ────────────────────────────────────────────────────────────
69
+ /** Coerce any value to string; null/undefined → ''. Objects are JSON-serialised. */
70
+ function coerceString(val) {
71
+ if (val == null)
72
+ return '';
73
+ if (typeof val === 'object') {
74
+ try {
75
+ return JSON.stringify(val);
76
+ }
77
+ catch {
78
+ return '';
79
+ }
80
+ }
81
+ return String(val);
82
+ }
83
+ /**
84
+ * Navigate a simple dot-path on obj without any [*] handling.
85
+ * e.g. resolveDotPath(obj, "datos.idpaciente") → obj.datos.idpaciente
86
+ */
87
+ function resolveDotPath(obj, dotPath) {
88
+ if (!dotPath || obj == null)
89
+ return undefined;
90
+ return dotPath.split('.').reduce((acc, key) => {
91
+ if (acc == null)
92
+ return undefined;
93
+ return acc[key];
94
+ }, obj);
95
+ }
96
+ /** Returns true when the path contains any array annotation ([*] or [key=[...]]). */
97
+ function hasArrayNotation(path) {
98
+ return /\[\*\]|\[[^\]=]+=\[/.test(path);
99
+ }
100
+ /**
101
+ * Test whether an array element satisfies a FilterCondition.
102
+ *
103
+ * Matching rules:
104
+ * - Pattern with no regex metacharacters → strict string equality (===).
105
+ * - Pattern with regex metacharacters → compiled as RegExp, tested with .test().
106
+ * - If RegExp compilation throws → fallback to strict equality.
107
+ */
108
+ function testFilter(item, filter) {
109
+ const value = coerceString(resolveDotPath(item, filter.key));
110
+ const hasMetaChars = /[\\^$.*+?()[\]{}|]/.test(filter.pattern);
111
+ if (!hasMetaChars) {
112
+ return value === filter.pattern;
113
+ }
114
+ try {
115
+ return new RegExp(filter.pattern).test(value);
116
+ }
117
+ catch {
118
+ return value === filter.pattern;
119
+ }
120
+ }
121
+ /**
122
+ * Parse a path with array annotations into ordered segments.
123
+ * Supports both wildcard [*] and conditional filter [key=[pattern]].
124
+ *
125
+ * "datos.pruebas[*].resultados[code=[A1]].valor" →
126
+ * [{ segment: "datos.pruebas", isArray: true },
127
+ * { segment: "resultados", isArray: true, filter: {key:"code", pattern:"A1"} },
128
+ * { segment: "valor", isArray: false }]
129
+ */
130
+ function parseArraySegments(path) {
131
+ if (!path)
132
+ return [];
133
+ // Matches either [*] or a conditional filter [key=[pattern]]
134
+ const ANNOTATION_RE = /\[\*\]|\[([^\]=]+)=\[([^\]]*)\]\]/g;
135
+ const segments = [];
136
+ let lastIndex = 0;
137
+ let match;
138
+ while ((match = ANNOTATION_RE.exec(path)) !== null) {
139
+ const rawBefore = path.slice(lastIndex, match.index);
140
+ const segText = rawBefore.startsWith('.') ? rawBefore.slice(1) : rawBefore;
141
+ if (match[0] === '[*]') {
142
+ if (segText)
143
+ segments.push({ segment: segText, isArray: true });
144
+ }
145
+ else {
146
+ // conditional filter: match[1] = key, match[2] = pattern
147
+ if (segText)
148
+ segments.push({ segment: segText, isArray: true, filter: { key: match[1], pattern: match[2] } });
149
+ }
150
+ lastIndex = ANNOTATION_RE.lastIndex;
151
+ }
152
+ // trailing leaf segment after the last annotation
153
+ const rawTrailing = path.slice(lastIndex);
154
+ const trailing = rawTrailing.startsWith('.') ? rawTrailing.slice(1) : rawTrailing;
155
+ if (trailing)
156
+ segments.push({ segment: trailing, isArray: false });
157
+ return segments;
158
+ }
159
+ /** Count array iteration levels in path — both [*] wildcards and [key=[pattern]] filters. */
160
+ function countArrayDepth(path) {
161
+ return (path.match(/\[\*\]|\[[^\]=]+=\[[^\]]*\]\]/g) ?? []).length;
162
+ }
163
+ /**
164
+ * Traverse all [*]-marked segments of path on source, producing one ArrayItem
165
+ * per leaf element. The first non-array (leaf field) segment terminates traversal.
166
+ *
167
+ * For "datos.pruebas[*].resultados[*].valor":
168
+ * – iterates datos.pruebas[*] → for each prueba, iterates resultados[*]
169
+ * – returns { item: resultadoItem, ancestors: [pruebaItem] } per resultado
170
+ */
171
+ function resolveArrayChain(source, path) {
172
+ const arraySegments = parseArraySegments(path).filter(s => s.isArray);
173
+ let workList = [{ ctx: source, collected: [] }];
174
+ for (const seg of arraySegments) {
175
+ const next = [];
176
+ for (const { ctx, collected } of workList) {
177
+ const arr = resolveDotPath(ctx, seg.segment);
178
+ if (!Array.isArray(arr))
179
+ continue;
180
+ const candidates = seg.filter
181
+ ? arr.filter(child => testFilter(child, seg.filter))
182
+ : arr;
183
+ for (const child of candidates) {
184
+ next.push({ ctx: child, collected: [...collected, child] });
185
+ }
186
+ }
187
+ workList = next;
188
+ }
189
+ return workList.map(({ collected }) => ({
190
+ item: collected[collected.length - 1],
191
+ ancestors: collected.slice(0, -1),
192
+ }));
193
+ }
194
+ /**
195
+ * Resolve a scalar string from a path that may contain [*].
196
+ * For scalar-context fields (metadata, patient): returns the FIRST non-empty value found.
197
+ */
198
+ function resolveScalar(source, path) {
199
+ if (!path)
200
+ return '';
201
+ if (!hasArrayNotation(path)) {
202
+ return coerceString(resolveDotPath(source, path));
203
+ }
204
+ const leafSeg = parseArraySegments(path).find(s => !s.isArray);
205
+ const items = resolveArrayChain(source, path);
206
+ for (const { item } of items) {
207
+ const val = coerceString(leafSeg ? resolveDotPath(item, leafSeg.segment) : item);
208
+ if (val !== '')
209
+ return val;
210
+ }
211
+ return '';
212
+ }
213
+ /**
214
+ * Given all field paths, find the deepest [*] level and return ArrayItems for
215
+ * every leaf element. Fields at shallower depths are resolved via `ancestors`.
216
+ */
217
+ function resolveDeepestArrayItems(source, allPaths) {
218
+ let maxDepth = 0;
219
+ let deepestPath = '';
220
+ for (const p of allPaths) {
221
+ const d = countArrayDepth(p);
222
+ if (d > maxDepth) {
223
+ maxDepth = d;
224
+ deepestPath = p;
225
+ }
226
+ }
227
+ if (maxDepth === 0) {
228
+ return [{ item: source, ancestors: [] }];
229
+ }
230
+ return resolveArrayChain(source, deepestPath);
231
+ }
232
+ // ─── labKey compound notation ("pathA:pathB") ──────────────────────────────────
233
+ /** True when a labKey rule path uses compound "pathA:pathB" notation. */
234
+ function isCompoundLabKey(path) {
235
+ return path.includes(':');
236
+ }
237
+ /** Split "pathA:pathB" on the FIRST ':' into its two component paths. */
238
+ function splitCompoundLabKey(path) {
239
+ const idx = path.indexOf(':');
240
+ return [path.substring(0, idx).trim(), path.substring(idx + 1).trim()];
241
+ }
242
+ // ─── Atomic field extractors ───────────────────────────────────────────────────
243
+ /**
244
+ * Resolve a single field path for an ArrayItem in the context of a known maxDepth.
245
+ *
246
+ * The depth of the path determines which context to use:
247
+ * depth >= maxDepth → item (leaf)
248
+ * depth < maxDepth → ancestors[depth - 1]
249
+ * depth == 0 → resolve directly on item (path has no [*])
250
+ */
251
+ function extractFieldFromItem(arrayItem, path, maxDepth) {
252
+ if (!path)
253
+ return '';
254
+ const depth = countArrayDepth(path);
255
+ const leafSeg = parseArraySegments(path).find(s => !s.isArray);
256
+ const relativePath = leafSeg?.segment ?? '';
257
+ if (depth === 0) {
258
+ return coerceString(resolveDotPath(arrayItem.item, path));
259
+ }
260
+ let context;
261
+ if (depth >= maxDepth) {
262
+ context = arrayItem.item;
263
+ }
264
+ else {
265
+ context = arrayItem.ancestors[depth - 1];
266
+ }
267
+ if (context == null)
268
+ return '';
269
+ return coerceString(resolveDotPath(context, relativePath));
270
+ }
271
+ /**
272
+ * Extract the labKey for one exam item.
273
+ * Handles both plain paths and compound "pathA:pathB" notation
274
+ * (where each part may reference different array depths).
275
+ */
276
+ function extractLabKey(arrayItem, labKeyPath, maxDepth) {
277
+ if (!labKeyPath)
278
+ return '';
279
+ if (isCompoundLabKey(labKeyPath)) {
280
+ const [pathA, pathB] = splitCompoundLabKey(labKeyPath);
281
+ const partA = extractFieldFromItem(arrayItem, pathA, maxDepth);
282
+ const partB = extractFieldFromItem(arrayItem, pathB, maxDepth);
283
+ if (partA && partB)
284
+ return `${partA}:${partB}`;
285
+ return partA || partB;
286
+ }
287
+ return extractFieldFromItem(arrayItem, labKeyPath, maxDepth);
288
+ }
289
+ // ─── File type detection & conversion ─────────────────────────────────────────
290
+ /** Detect the content type of a raw file string. */
291
+ function detectContentType(content) {
292
+ const trimmed = content.trimStart();
293
+ if (trimmed.startsWith('<'))
294
+ return 'xml';
295
+ if (trimmed.startsWith('{') || trimmed.startsWith('['))
296
+ return 'json';
297
+ try {
298
+ JSON.parse(trimmed);
299
+ return 'json';
300
+ }
301
+ catch {
302
+ // not valid JSON
303
+ }
304
+ return 'csv';
305
+ }
306
+ /**
307
+ * Parse raw file content to a plain JS value, auto-detecting the format.
308
+ * CSV rows are wrapped in { rows: [...] } so downstream path rules can target them.
309
+ */
310
+ async function parseFileToJson(content) {
311
+ const type = detectContentType(content);
312
+ switch (type) {
313
+ case 'xml':
314
+ return lisXmlToJson(content);
315
+ case 'csv': {
316
+ const rows = lisCsvToExamRows(content);
317
+ return { rows };
318
+ }
319
+ case 'json':
320
+ default:
321
+ return JSON.parse(content);
322
+ }
323
+ }
324
+ // ─── OhtReport guard ───────────────────────────────────────────────────────────
325
+ /** Returns true when data already conforms to the OhtReport structure. */
326
+ function isOhtReport(data) {
327
+ if (typeof data !== 'object' || data === null)
328
+ return false;
329
+ const obj = data;
330
+ return ('metadata' in obj &&
331
+ 'patient' in obj &&
332
+ 'exams' in obj &&
333
+ typeof obj['metadata']?.labOrderId === 'string' &&
334
+ Array.isArray(obj['exams']));
335
+ }
336
+ // ─── Section mappers ───────────────────────────────────────────────────────────
337
+ function mapMetadata(source, rules) {
338
+ const get = (path) => resolveScalar(source, path ?? '');
339
+ return {
340
+ labOrderId: get(rules.labOrderId),
341
+ collectionDate: get(rules.collectionDate),
342
+ examDate: get(rules.examDate),
343
+ documentDate: get(rules.documentDate),
344
+ ...(rules.pdfBase64 ? { pdfBase64: get(rules.pdfBase64) || undefined } : {}),
345
+ ...(rules.prescriberExternalId ? { prescriberExternalId: get(rules.prescriberExternalId) || undefined } : {}),
346
+ };
347
+ }
348
+ function mapPatient(source, rules) {
349
+ const get = (path) => resolveScalar(source, path ?? '');
350
+ return {
351
+ id: get(rules.id),
352
+ name: get(rules.name),
353
+ firstName: get(rules.firstName),
354
+ lastName: get(rules.lastName),
355
+ birthdate: get(rules.birthdate),
356
+ sex: get(rules.sex),
357
+ gender: get(rules.gender),
358
+ socialName: get(rules.socialName),
359
+ email: get(rules.email),
360
+ cpf: get(rules.cpf),
361
+ documentId: get(rules.documentId),
362
+ address: get(rules.address),
363
+ phoneNumber: get(rules.phoneNumber),
364
+ };
365
+ }
366
+ function mapRanges(arrayItem, rangeRules, maxDepth, rangeSeparator, noSourceRanges) {
367
+ if (noSourceRanges) {
368
+ return [{ from: '', to: '', text: '', noSourceRanges: true }];
369
+ }
370
+ const text = extractFieldFromItem(arrayItem, rangeRules.text ?? '', maxDepth);
371
+ const from = extractFieldFromItem(arrayItem, rangeRules.from ?? '', maxDepth);
372
+ const to = extractFieldFromItem(arrayItem, rangeRules.to ?? '', maxDepth);
373
+ const age = rangeRules.age ? extractFieldFromItem(arrayItem, rangeRules.age, maxDepth) || undefined : undefined;
374
+ const sex = rangeRules.sex ? extractFieldFromItem(arrayItem, rangeRules.sex, maxDepth) || undefined : undefined;
375
+ if (!text && !from && !to) {
376
+ return [{ from: '', to: '', text: '', noSourceRanges: true }];
377
+ }
378
+ if (text && rangeSeparator) {
379
+ const sep = rangeSeparator.replace(/\\n/g, '\n').replace(/\\t/g, '\t');
380
+ const parts = text.split(sep).filter(p => p !== '');
381
+ if (parts.length > 0) {
382
+ return parts.map(part => ({ from, to, text: part, age, sex }));
383
+ }
384
+ }
385
+ return [{ from, to, text, age, sex }];
386
+ }
387
+ function serializeOriginalExam(item) {
388
+ let exam = '';
389
+ try {
390
+ exam = JSON.stringify(item);
391
+ }
392
+ catch {
393
+ exam = String(item);
394
+ }
395
+ return { contentType: 'application/json', exam };
396
+ }
397
+ function mapSingleExam(arrayItem, examRules, maxDepth) {
398
+ const extract = (path) => path ? extractFieldFromItem(arrayItem, path, maxDepth) : '';
399
+ const ohtExam = {
400
+ labKey: extractLabKey(arrayItem, examRules.labKey, maxDepth),
401
+ value: extract(examRules.value),
402
+ unit: extract(examRules.unit),
403
+ method: extract(examRules.method) || undefined,
404
+ material: extract(examRules.material) || undefined,
405
+ collectionDate: extract(examRules.collectionDate) || undefined,
406
+ effectiveDate: extract(examRules.effectiveDate) || undefined,
407
+ examCollectionDate: extract(examRules.examCollectionDate) || undefined,
408
+ examEffectiveDate: extract(examRules.examEffectiveDate) || undefined,
409
+ documentDate: extract(examRules.documentDate),
410
+ description: extract(examRules.description),
411
+ mnemonic: extract(examRules.mnemonic),
412
+ examName: extract(examRules.examName),
413
+ range: mapRanges(arrayItem, examRules.range, maxDepth, undefined, examRules.noSourceRanges),
414
+ annotation: extract(examRules.annotation) || undefined,
415
+ };
416
+ return { ohtExam, originalExam: serializeOriginalExam(arrayItem.item) };
417
+ }
418
+ /**
419
+ * Map all exams from the source object using the exam path rules.
420
+ *
421
+ * Algorithm:
422
+ * 1. Collect every path referenced in examRules (expanding compound labKey paths).
423
+ * 2. Determine the maximum [*] depth across all paths.
424
+ * 3. Resolve every leaf ArrayItem at that depth (each becomes one exam).
425
+ * 4. Fields from shallower depths are resolved via the ancestors chain.
426
+ */
427
+ function mapExams(source, examRules) {
428
+ const rawPaths = [
429
+ examRules.labKey,
430
+ examRules.value,
431
+ examRules.unit,
432
+ examRules.mnemonic,
433
+ examRules.examName,
434
+ examRules.range.text,
435
+ ...[
436
+ examRules.method,
437
+ examRules.material,
438
+ examRules.collectionDate,
439
+ examRules.effectiveDate,
440
+ examRules.examCollectionDate,
441
+ examRules.examEffectiveDate,
442
+ examRules.documentDate,
443
+ examRules.description,
444
+ examRules.annotation,
445
+ examRules.range.from,
446
+ examRules.range.to,
447
+ examRules.range.age,
448
+ examRules.range.sex,
449
+ ].filter((p) => !!p),
450
+ ];
451
+ const allPaths = [];
452
+ for (const p of rawPaths) {
453
+ if (isCompoundLabKey(p)) {
454
+ const [pA, pB] = splitCompoundLabKey(p);
455
+ allPaths.push(pA, pB);
456
+ }
457
+ else {
458
+ allPaths.push(p);
459
+ }
460
+ }
461
+ const maxDepth = allPaths.reduce((m, p) => Math.max(m, countArrayDepth(p)), 0);
462
+ const arrayItems = resolveDeepestArrayItems(source, allPaths);
463
+ if (arrayItems.length === 0)
464
+ return [];
465
+ return arrayItems.map(ai => mapSingleExam(ai, examRules, maxDepth));
466
+ }
44
467
  //# sourceMappingURL=mapperUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mapperUtils.js","sourceRoot":"","sources":["../../util-ts/mapperUtils.ts"],"names":[],"mappings":";;AA2BA,4CAEC;AAOD,oCASC;AA7CD,yCAAwE;AACxE,mCAA4C;AAE5C,MAAM,kBAAkB,GAAoB;IAC1C,OAAO,EAAE,IAAI;IACb,gBAAgB,EAAE,IAAI;IACtB,GAAG,EAAE,IAAI;IACT,kBAAkB,EAAE,IAAI;IACxB,SAAS,EAAE,GAAG;CACf,CAAC;AAKF,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,IAAA,YAAK,EAAC,GAAG,EAAE,kBAAkB,CAA2B,CAAC;AAClE,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,GAAW;IAC1C,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,YAAY,CAAC,GAAW;IAC5C,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,SAAS,CAAC,iCAAiC,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,IAAA,2BAAkB,EAAC,GAAG,EAAE;QAC7B,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,IAAI;QAChB,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"mapperUtils.js","sourceRoot":"","sources":["../../util-ts/mapperUtils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openhealth/oht-custom-parser-lib",
3
- "version": "0.5.27",
3
+ "version": "0.5.29",
4
4
  "description": "Shared nodejs lib with with reusable functions",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",