@openhealth/oht-custom-parser-lib 0.5.23 → 0.5.24

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,3 +18,5 @@ 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';
22
+ export type { LisCsvRow } from './util-ts/mapperUtils';
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.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.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; } });
@@ -100,4 +100,7 @@ Object.defineProperty(exports, "getMappedBiomarkers", { enumerable: true, get: f
100
100
  Object.defineProperty(exports, "getMappedBiomarkersLatest", { enumerable: true, get: function () { return dataUtils_2.getMappedBiomarkersLatest; } });
101
101
  var extractionUtils_1 = require("./util-ts/extractionUtils");
102
102
  Object.defineProperty(exports, "parseRange", { enumerable: true, get: function () { return extractionUtils_1.parseRange; } });
103
+ var mapperUtils_1 = require("./util-ts/mapperUtils");
104
+ Object.defineProperty(exports, "lisCsvToExamRows", { enumerable: true, get: function () { return mapperUtils_1.lisCsvToExamRows; } });
105
+ Object.defineProperty(exports, "lisXmlToJson", { enumerable: true, get: function () { return mapperUtils_1.lisXmlToJson; } });
103
106
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;AAAA,mBAAmB;AACnB,yEAGyC;AAFvC,uIAAA,8BAA8B,OAAA;AAC9B,gIAAA,uBAAuB,OAAA;AAEzB,mFAQ8C;AAP5C,oIAAA,sBAAsB,OAAA;AACtB,yHAAA,WAAW,OAAA;AACX,+HAAA,iBAAiB,OAAA;AACjB,6HAAA,eAAe,OAAA;AACf,yIAAA,2BAA2B,OAAA;AAC3B,qIAAA,uBAAuB,OAAA;AAIzB,2GAE0D;AADxD,wJAAA,8BAA8B,OAAA;AAGhC,+FASoD;AARlD,4IAAA,wBAAwB,OAAA;AACxB,gJAAA,4BAA4B,OAAA;AAC5B,0IAAA,sBAAsB,OAAA;AACtB,8IAAA,0BAA0B,OAAA;AAC1B,kIAAA,cAAc,OAAA;AACd,gJAAA,4BAA4B,OAAA;AAC5B,+HAAA,WAAW,OAAA;AACX,oJAAA,gCAAgC,OAAA;AAGlC,yEAEyC;AADvC,6IAAA,oCAAoC,OAAA;AAAE,2HAAA,kBAAkB,OAAA;AAE1D,yEAKyC;AAJvC,0HAAA,iBAAiB,OAAA;AACjB,4HAAA,mBAAmB,OAAA;AACnB,uHAAA,cAAc,OAAA;AACd,2HAAA,kBAAkB,OAAA;AAEpB,qFAG+C;AAF7C,uIAAA,UAAU,OAA4B;AACtC,mJAAA,yBAAyB,OAAwC;AAGnE,gBAAgB;AAChB,mEAaqC;AAJnC,mHAAA,YAAY,OAAA;AAKd,+CA8C2B;AA7CzB,6HAAA,gCAAgC,OAAA;AAChC,+HAAA,kCAAkC,OAAA;AAClC,wGAAA,WAAW,OAAA;AACX,mHAAA,sBAAsB,OAAA;AACtB,+GAAA,kBAAkB,OAAA;AAOlB,yGAAA,YAAY,OAAA;AACZ,+GAAA,kBAAkB,OAAA;AAClB,uHAAA,0BAA0B,OAAA;AAC1B,+GAAA,kBAAkB,OAAA;AAClB,uHAAA,0BAA0B,OAAA;AAC1B,gGAAA,GAAG,OAAA;AAgBH,uGAAA,UAAU,OAAA;AAEV,yGAAA,YAAY,OAAA;AAYd,mDAO6B;AAL3B,wGAAA,SAAS,OAAA;AACT,4GAAA,aAAa,OAAA;AACb,6GAAA,cAAc,OAAA;AACd,8GAAA,eAAe,OAAA;AACf,8GAAA,eAAe,OAAA;AAEjB,2FAMkD;AALhD,6HAAA,WAAW,OAAA;AACX,iIAAA,eAAe,OAAA;AACf,6IAAA,2BAA2B,OAAA;AAC3B,8IAAA,4BAA4B,OAAA;AAC5B,wIAAA,sBAAsB,OAAA;AAUxB,4BAA4B;AAC5B,+EAQ4C;AAP1C,4HAAA,gBAAgB,OAAA;AAGhB,mIAAA,uBAAuB,OAAA;AACvB,oIAAA,wBAAwB,OAAA;AACxB,0HAAA,cAAc,OAAA;AACd,+HAAA,mBAAmB,OAAA;AAGrB,kBAAkB;AAClB,+CAAuE;AAA/D,gHAAA,oBAAoB,OAAA;AAAE,yGAAA,aAAa,OAAA;AAC3C,iDAAiN;AAAzM,yGAAA,YAAY,OAAA;AAAE,sHAAA,yBAAyB,OAAA;AAAE,6HAAA,gCAAgC,OAAA;AAAE,oHAAA,uBAAuB,OAAA;AAAE,8GAAA,iBAAiB,OAAA;AAAE,oHAAA,uBAAuB,OAAA;AAAE,4GAAA,eAAe,OAAA;AAAE,wGAAA,WAAW,OAAA;AACpL,mEAAuF;AAA/E,wHAAA,kBAAkB,OAAA;AAAE,2HAAA,qBAAqB,OAAA;AACjD,mDAA2D;AAAnD,yHAAA,OAAO,OAAc;AAC7B,mDAAkF;AAA1E,oHAAA,sBAAsB,OAAA;AAAE,kHAAA,oBAAoB,OAAA;AACpD,iDAAmF;AAA3E,gHAAA,mBAAmB,OAAA;AAAE,sHAAA,yBAAyB,OAAA;AACtD,6DAAqD;AAA7C,6GAAA,UAAU,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /** One parsed row: keys from the CSV header, values as strings. */
2
+ export type LisCsvRow = Record<string, string>;
3
+ /**
4
+ * LIS CSV (`;`, quoted multiline fields) → rows. Column names come from the header; one row = one logical line.
5
+ */
6
+ export declare function lisCsvToExamRows(csv: string): LisCsvRow[];
7
+ /**
8
+ * LIS / AOL-style XML → plain JS object (xml2js: attrs merged into elements, no trim).
9
+ * Uses `explicitArray: false` so single text/child nodes are strings/objects, not `[value]`.
10
+ * Repeated sibling tags (e.g. several `exame`) still parse as arrays.
11
+ */
12
+ export declare function lisXmlToJson(xml: string): Promise<unknown>;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.lisCsvToExamRows = lisCsvToExamRows;
4
+ exports.lisXmlToJson = lisXmlToJson;
5
+ const sync_1 = require("csv-parse/sync");
6
+ const xml2js_1 = require("xml2js");
7
+ const lisCsvParseOptions = {
8
+ columns: true,
9
+ skip_empty_lines: true,
10
+ bom: true,
11
+ relax_column_count: true,
12
+ delimiter: ';',
13
+ };
14
+ function parseLisCsvRaw(csv) {
15
+ if (typeof csv !== 'string') {
16
+ throw new TypeError('lisCsvToExamRows: expected a string');
17
+ }
18
+ if (csv.trim() === '') {
19
+ return [];
20
+ }
21
+ return (0, sync_1.parse)(csv, lisCsvParseOptions);
22
+ }
23
+ /**
24
+ * LIS CSV (`;`, quoted multiline fields) → rows. Column names come from the header; one row = one logical line.
25
+ */
26
+ function lisCsvToExamRows(csv) {
27
+ return parseLisCsvRaw(csv);
28
+ }
29
+ /**
30
+ * LIS / AOL-style XML → plain JS object (xml2js: attrs merged into elements, no trim).
31
+ * Uses `explicitArray: false` so single text/child nodes are strings/objects, not `[value]`.
32
+ * Repeated sibling tags (e.g. several `exame`) still parse as arrays.
33
+ */
34
+ async function lisXmlToJson(xml) {
35
+ if (typeof xml !== 'string') {
36
+ throw new TypeError('lisXmlToJson: expected a string');
37
+ }
38
+ return (0, xml2js_1.parseStringPromise)(xml, {
39
+ explicitArray: false,
40
+ mergeAttrs: true,
41
+ trim: false,
42
+ });
43
+ }
44
+ //# sourceMappingURL=mapperUtils.js.map
@@ -0,0 +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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openhealth/oht-custom-parser-lib",
3
- "version": "0.5.23",
3
+ "version": "0.5.24",
4
4
  "description": "Shared nodejs lib with with reusable functions",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -18,19 +18,23 @@
18
18
  "@google-cloud/storage": "^7.7.0",
19
19
  "axios": "^1.13.2",
20
20
  "bottleneck": "^2.19.5",
21
+ "csv-parse": "^6.2.1",
21
22
  "dayjs": "^1.11.13",
22
23
  "dotenv": "^16.4.5",
23
24
  "jsonata": "^2.1.0",
24
25
  "moment": "^2.30.1",
25
26
  "mongodb": "^6.3.0",
26
27
  "pino": "^8.19.0",
27
- "pino-pretty": "^11.3.0"
28
+ "pino-pretty": "^11.3.0",
29
+ "xml2js": "^0.6.2"
28
30
  },
29
31
  "devDependencies": {
30
32
  "@types/jest": "^29.5.14",
33
+ "@types/xml2js": "^0.4.14",
31
34
  "axios-mock-adapter": "^2.1.0",
32
35
  "jest": "^29.7.0",
33
36
  "ts-jest": "^29.2.5",
37
+ "tsx": "^4.19.2",
34
38
  "typescript": "^5.0.0"
35
39
  }
36
40
  }