@precisa-saude/fhir 0.10.1 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -3
- package/dist/biomarkers.cjs +2 -2
- package/dist/biomarkers.js +1 -1
- package/dist/{chunk-S6VJHXJF.js → chunk-4YQOKZX7.js} +2 -2
- package/dist/{chunk-2EVQ2ESB.cjs → chunk-EW5GLFSC.cjs} +205 -1
- package/dist/chunk-EW5GLFSC.cjs.map +1 -0
- package/dist/{chunk-I6H35QXI.js → chunk-ICSMWCVT.js} +205 -1
- package/dist/{chunk-I6H35QXI.js.map → chunk-ICSMWCVT.js.map} +1 -1
- package/dist/{chunk-O25F6G3K.cjs → chunk-NOJRDKFO.cjs} +4 -4
- package/dist/{chunk-O25F6G3K.cjs.map → chunk-NOJRDKFO.cjs.map} +1 -1
- package/dist/{chunk-N6J26FVW.js → chunk-NR4OTNC4.js} +2 -2
- package/dist/{chunk-PJJVDGX4.cjs → chunk-OPS7XHIL.cjs} +3 -3
- package/dist/{chunk-PJJVDGX4.cjs.map → chunk-OPS7XHIL.cjs.map} +1 -1
- package/dist/cli.js +205 -1
- package/dist/converter.cjs +3 -3
- package/dist/converter.js +2 -2
- package/dist/importer.cjs +3 -3
- package/dist/importer.js +2 -2
- package/dist/index.cjs +84 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +33 -1
- package/dist/index.d.ts +33 -1
- package/dist/index.js +82 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-2EVQ2ESB.cjs.map +0 -1
- /package/dist/{chunk-S6VJHXJF.js.map → chunk-4YQOKZX7.js.map} +0 -0
- /package/dist/{chunk-N6J26FVW.js.map → chunk-NR4OTNC4.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunkEW5GLFSCcjs = require('./chunk-EW5GLFSC.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
var _chunk3ILBFLVQcjs = require('./chunk-3ILBFLVQ.cjs');
|
|
@@ -51,7 +51,7 @@ function mapFHIRObservationToInternal(observation, index) {
|
|
|
51
51
|
}
|
|
52
52
|
};
|
|
53
53
|
}
|
|
54
|
-
const internalCode =
|
|
54
|
+
const internalCode = _chunkEW5GLFSCcjs.loincToCode.call(void 0, loincCode);
|
|
55
55
|
if (!internalCode) {
|
|
56
56
|
return {
|
|
57
57
|
skipped: {
|
|
@@ -62,7 +62,7 @@ function mapFHIRObservationToInternal(observation, index) {
|
|
|
62
62
|
}
|
|
63
63
|
};
|
|
64
64
|
}
|
|
65
|
-
const definition =
|
|
65
|
+
const definition = _chunkEW5GLFSCcjs.getDefinitionByLoinc.call(void 0, loincCode);
|
|
66
66
|
let value;
|
|
67
67
|
let unit = "";
|
|
68
68
|
let isQualitative = false;
|
|
@@ -150,4 +150,4 @@ function processImportBundle(data) {
|
|
|
150
150
|
|
|
151
151
|
|
|
152
152
|
exports.MAX_OBSERVATIONS = MAX_OBSERVATIONS; exports.MAX_FILE_SIZE = MAX_FILE_SIZE; exports.extractObservationsFromBundle = extractObservationsFromBundle; exports.mapFHIRObservationToInternal = mapFHIRObservationToInternal; exports.processImportBundle = processImportBundle;
|
|
153
|
-
//# sourceMappingURL=chunk-
|
|
153
|
+
//# sourceMappingURL=chunk-NOJRDKFO.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/fhir-brasil/fhir-brasil/packages/core/dist/chunk-
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/fhir-brasil/fhir-brasil/packages/core/dist/chunk-NOJRDKFO.cjs","../src/importer.ts"],"names":[],"mappings":"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","file":"/home/runner/work/fhir-brasil/fhir-brasil/packages/core/dist/chunk-NOJRDKFO.cjs","sourcesContent":[null,"/**\n * FHIR Importer\n *\n * Parses FHIR R4 Bundles and extracts Observation resources with known LOINC codes,\n * mapping them to internal biomarker codes for storage as lab results.\n */\n\nimport { getDefinitionByLoinc, loincToCode } from './biomarkers';\nimport type { FHIRBundle, FHIRObservation } from './fhir-types';\nimport { validateFHIRImportBundle } from './validators';\n\nexport interface ImportedObservation {\n biomarkerCode: string;\n biomarkerName: string;\n collectionDate: string;\n flag: 'H' | 'L' | '';\n isQualitative: boolean;\n loincCode: string;\n referenceMax?: number;\n referenceMin?: number;\n unit: string;\n value: number | string;\n}\n\nexport interface SkippedEntry {\n index: number;\n loincCode?: string;\n reason: string;\n resourceType?: string;\n}\n\nexport interface ImportError {\n details: string;\n field: string;\n}\n\nexport interface FHIRImportResult {\n errors: ImportError[];\n imported: ImportedObservation[];\n skipped: SkippedEntry[];\n totalProcessed: number;\n}\n\nconst MAX_OBSERVATIONS = 1000;\nconst MAX_FILE_SIZE = 5 * 1024 * 1024; // 5MB\n\n/**\n * Extract LOINC code from an Observation's code.coding array\n */\nfunction extractLoincCode(observation: FHIRObservation): string | undefined {\n if (!observation.code?.coding) return undefined;\n const loincCoding = observation.code.coding.find((c) => c.system === 'http://loinc.org');\n return loincCoding?.code;\n}\n\n/**\n * Extract interpretation flag from Observation\n */\nfunction extractFlag(observation: FHIRObservation): 'H' | 'L' | '' {\n const code = observation.interpretation?.[0]?.coding?.[0]?.code;\n if (code === 'H' || code === 'HH') return 'H';\n if (code === 'L' || code === 'LL') return 'L';\n return '';\n}\n\n/**\n * Extract Observation resources from a FHIR Bundle\n */\nexport function extractObservationsFromBundle(bundle: FHIRBundle): {\n observations: FHIRObservation[];\n skipped: SkippedEntry[];\n} {\n const observations: FHIRObservation[] = [];\n const skipped: SkippedEntry[] = [];\n\n for (let i = 0; i < bundle.entry.length; i++) {\n const entry = bundle.entry[i]!;\n if (!entry.resource) {\n skipped.push({ index: i, reason: 'Entry has no resource' });\n continue;\n }\n\n if (entry.resource.resourceType !== 'Observation') {\n // Non-observation resources are silently skipped (Patient, DiagnosticReport, etc.)\n continue;\n }\n\n if (observations.length >= MAX_OBSERVATIONS) {\n skipped.push({ index: i, reason: `Maximum of ${MAX_OBSERVATIONS} observations exceeded` });\n continue;\n }\n\n observations.push(entry.resource as FHIRObservation);\n }\n\n return { observations, skipped };\n}\n\n/**\n * Map a FHIR Observation to internal format using LOINC→biomarker code lookup\n */\nexport function mapFHIRObservationToInternal(\n observation: FHIRObservation,\n index: number,\n): { observation: ImportedObservation } | { skipped: SkippedEntry } {\n const loincCode = extractLoincCode(observation);\n\n if (!loincCode) {\n return {\n skipped: {\n index,\n reason: 'No LOINC code found in observation coding',\n resourceType: 'Observation',\n },\n };\n }\n\n const internalCode = loincToCode(loincCode);\n if (!internalCode) {\n return {\n skipped: {\n index,\n loincCode,\n reason: `Unknown LOINC code: ${loincCode}`,\n resourceType: 'Observation',\n },\n };\n }\n\n const definition = getDefinitionByLoinc(loincCode);\n\n // Extract value\n let value: number | string;\n let unit = '';\n let isQualitative = false;\n\n if (observation.valueQuantity?.value !== undefined) {\n value = observation.valueQuantity.value;\n unit = observation.valueQuantity.unit || observation.valueQuantity.code || '';\n } else if (observation.valueString) {\n value = observation.valueString;\n isQualitative = true;\n } else {\n return {\n skipped: {\n index,\n loincCode,\n reason: 'Observation has no value (valueQuantity or valueString)',\n resourceType: 'Observation',\n },\n };\n }\n\n // Extract collection date (effectiveDateTime or effectivePeriod.start)\n const collectionDate = observation.effectiveDateTime || observation.effectivePeriod?.start || '';\n if (!collectionDate) {\n return {\n skipped: {\n index,\n loincCode,\n reason: 'Observation has no effectiveDateTime or effectivePeriod.start',\n resourceType: 'Observation',\n },\n };\n }\n\n // Extract reference ranges\n let referenceMin: number | undefined;\n let referenceMax: number | undefined;\n if (observation.referenceRange?.[0]) {\n referenceMin = observation.referenceRange[0].low?.value;\n referenceMax = observation.referenceRange[0].high?.value;\n }\n\n const imported: ImportedObservation = {\n biomarkerCode: internalCode,\n biomarkerName:\n definition?.names.pt[0] || definition?.names.en[0] || observation.code.text || internalCode,\n collectionDate,\n flag: extractFlag(observation),\n isQualitative,\n loincCode,\n referenceMax,\n referenceMin,\n unit: unit || definition?.unit || '',\n value,\n };\n\n return { observation: imported };\n}\n\n/**\n * Process a complete FHIR Bundle for import\n */\nexport function processImportBundle(data: unknown): FHIRImportResult {\n // Structural validation\n const validationErrors = validateFHIRImportBundle(data);\n if (validationErrors.length > 0) {\n return {\n errors: validationErrors,\n imported: [],\n skipped: [],\n totalProcessed: 0,\n };\n }\n\n const bundle = data as FHIRBundle;\n\n // Extract observations\n const { observations, skipped } = extractObservationsFromBundle(bundle);\n\n // Map each observation to internal format\n const imported: ImportedObservation[] = [];\n const allSkipped: SkippedEntry[] = [...skipped];\n\n for (let i = 0; i < observations.length; i++) {\n const result = mapFHIRObservationToInternal(observations[i]!, i);\n\n if ('observation' in result) {\n imported.push(result.observation);\n } else {\n allSkipped.push(result.skipped);\n }\n }\n\n return {\n errors: [],\n imported,\n skipped: allSkipped,\n totalProcessed: observations.length,\n };\n}\n\nexport { MAX_FILE_SIZE, MAX_OBSERVATIONS };\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
codeToLoinc
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-ICSMWCVT.js";
|
|
4
4
|
import {
|
|
5
5
|
getDefaultUnit,
|
|
6
6
|
unitToUCUM
|
|
@@ -248,4 +248,4 @@ export {
|
|
|
248
248
|
userProfileToFHIR,
|
|
249
249
|
labResultToFHIRBundle
|
|
250
250
|
};
|
|
251
|
-
//# sourceMappingURL=chunk-
|
|
251
|
+
//# sourceMappingURL=chunk-NR4OTNC4.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkEW5GLFSCcjs = require('./chunk-EW5GLFSC.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
@@ -30,7 +30,7 @@ function interpretationDisplay(flag) {
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
function labObservationToFHIR(observation, patientId, laboratoryName) {
|
|
33
|
-
const loincCode =
|
|
33
|
+
const loincCode = _chunkEW5GLFSCcjs.codeToLoinc.call(void 0, observation.biomarkerCode) || "99999-9";
|
|
34
34
|
const sourceUnit = observation.unit || _chunkMJ254F5Kcjs.getDefaultUnit.call(void 0, observation.biomarkerCode) || observation.unit;
|
|
35
35
|
const ucumUnit = _chunkMJ254F5Kcjs.unitToUCUM.call(void 0, sourceUnit);
|
|
36
36
|
const isQualitative = observation.isQualitative || typeof observation.value === "string";
|
|
@@ -248,4 +248,4 @@ function labResultToFHIRBundle(report, observations, userProfile) {
|
|
|
248
248
|
|
|
249
249
|
|
|
250
250
|
exports.labObservationToFHIR = labObservationToFHIR; exports.labReportToFHIR = labReportToFHIR; exports.userProfileToFHIR = userProfileToFHIR; exports.labResultToFHIRBundle = labResultToFHIRBundle;
|
|
251
|
-
//# sourceMappingURL=chunk-
|
|
251
|
+
//# sourceMappingURL=chunk-OPS7XHIL.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/fhir-brasil/fhir-brasil/packages/core/dist/chunk-PJJVDGX4.cjs","../src/converter.ts"],"names":[],"mappings":"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","file":"/home/runner/work/fhir-brasil/fhir-brasil/packages/core/dist/chunk-PJJVDGX4.cjs","sourcesContent":[null,"/**\n * FHIR Converter\n *\n * Converts lab results to FHIR R4 DiagnosticReport and Observation resources.\n * See: https://hl7.org/fhir/diagnosticreport.html\n */\n\nimport { codeToLoinc } from './biomarkers';\nimport type { FHIRBundle, FHIRDiagnosticReport, FHIRObservation, FHIRPatient } from './fhir-types';\nimport type { Flag, LabObservationData, LabReportData, UserProfileData } from './types';\nimport { getDefaultUnit, unitToUCUM } from './units';\n\n// Re-export all types and functions\nexport * from './fhir-types';\n\n/**\n * Convert Flag to FHIR interpretation code\n */\nfunction interpretationCode(flag: Flag): string {\n switch (flag) {\n case 'H':\n return 'H'; // High\n case 'L':\n return 'L'; // Low\n default:\n return 'N'; // Normal\n }\n}\n\n/**\n * Convert Flag to FHIR interpretation display\n */\nfunction interpretationDisplay(flag: Flag): string {\n switch (flag) {\n case 'H':\n return 'High';\n case 'L':\n return 'Low';\n default:\n return 'Normal';\n }\n}\n\n/**\n * Convert generic lab observation to FHIR Observation\n */\nexport function labObservationToFHIR(\n observation: LabObservationData,\n patientId: string,\n laboratoryName?: string,\n): FHIRObservation {\n const loincCode = codeToLoinc(observation.biomarkerCode) || '99999-9';\n // Use default unit if source unit is empty\n const sourceUnit =\n observation.unit || getDefaultUnit(observation.biomarkerCode) || observation.unit;\n const ucumUnit = unitToUCUM(sourceUnit);\n const isQualitative = observation.isQualitative || typeof observation.value === 'string';\n\n // Base observation structure\n const fhirObs: FHIRObservation = {\n category: [\n {\n coding: [\n {\n code: 'laboratory',\n display: 'Laboratory',\n system: 'http://terminology.hl7.org/CodeSystem/observation-category',\n },\n ],\n },\n ],\n code: {\n coding: [\n {\n code: loincCode,\n display: observation.biomarkerName,\n system: 'http://loinc.org',\n },\n {\n code: observation.biomarkerCode,\n display: observation.biomarkerName,\n system: 'http://fhir-brasil.dev/biomarker-codes',\n },\n ],\n text: observation.biomarkerName,\n },\n effectiveDateTime: observation.collectionDate,\n id: `${observation.reportId}-${observation.biomarkerCode}`,\n interpretation: [\n {\n coding: [\n {\n code: interpretationCode(observation.flag),\n display: interpretationDisplay(observation.flag),\n system: 'http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation',\n },\n ],\n },\n ],\n performer: laboratoryName ? [{ display: laboratoryName }] : undefined,\n resourceType: 'Observation',\n status: 'final',\n subject: {\n reference: `Patient/${patientId}`,\n },\n };\n\n // Add value based on type (qualitative = string, quantitative = number)\n if (isQualitative) {\n fhirObs.valueString = String(observation.value);\n } else {\n fhirObs.valueQuantity = {\n code: ucumUnit,\n system: 'http://unitsofmeasure.org',\n unit: sourceUnit,\n value: observation.value as number,\n };\n\n // Reference range only applies to quantitative values\n if (observation.referenceMin !== undefined && observation.referenceMax !== undefined) {\n fhirObs.referenceRange = [\n {\n high: {\n code: ucumUnit,\n system: 'http://unitsofmeasure.org',\n unit: sourceUnit,\n value: observation.referenceMax,\n },\n low: {\n code: ucumUnit,\n system: 'http://unitsofmeasure.org',\n unit: sourceUnit,\n value: observation.referenceMin,\n },\n },\n ];\n }\n }\n\n return fhirObs;\n}\n\n/**\n * Convert generic lab report to FHIR DiagnosticReport\n */\nexport function labReportToFHIR(\n report: LabReportData,\n patientId: string,\n observationIds: string[],\n): FHIRDiagnosticReport {\n // Map processing status to FHIR status\n let status: FHIRDiagnosticReport['status'];\n switch (report.processingStatus) {\n case 'complete':\n status = 'final';\n break;\n case 'partial':\n status = 'partial';\n break;\n case 'pending_review':\n status = 'preliminary';\n break;\n default:\n status = 'final';\n }\n\n return {\n category: [\n {\n coding: [\n {\n code: 'LAB',\n display: 'Laboratory',\n system: 'http://terminology.hl7.org/CodeSystem/v2-0074',\n },\n ],\n },\n ],\n code: {\n coding: [\n {\n code: '11502-2', // Laboratory report\n display: 'Laboratory report',\n system: 'http://loinc.org',\n },\n ],\n text: 'Laboratory Results',\n },\n conclusion:\n report.overallStatus === 'NORMAL'\n ? 'All results within normal limits'\n : 'One or more abnormal results detected',\n conclusionCode:\n report.overallStatus === 'ANORMAL'\n ? [\n {\n coding: [\n {\n code: 'A',\n display: 'Abnormal',\n system: 'http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation',\n },\n ],\n },\n ]\n : undefined,\n effectiveDateTime: report.collectionDate,\n id: report.reportId,\n issued: report.createdAt,\n performer: report.laboratoryName ? [{ display: report.laboratoryName }] : undefined,\n resourceType: 'DiagnosticReport',\n result: observationIds.map((id) => ({ reference: `Observation/${id}` })),\n status,\n subject: {\n reference: `Patient/${patientId}`,\n },\n };\n}\n\n/**\n * Convert user profile to FHIR Patient\n * NOTE: CPF is intentionally excluded for privacy (LGPD compliance)\n */\nexport function userProfileToFHIR(profile: UserProfileData): FHIRPatient {\n const nameParts = profile.name.split(' ');\n const given = nameParts.slice(0, -1);\n const family = nameParts[nameParts.length - 1] || '';\n\n return {\n address: profile.address\n ? [\n {\n city: profile.address.city,\n country: profile.address.country || 'BR',\n line: [\n profile.address.street && profile.address.number\n ? `${profile.address.street}, ${profile.address.number}`\n : profile.address.street,\n profile.address.complement,\n ].filter(Boolean) as string[],\n postalCode: profile.address.postalCode,\n state: profile.address.state,\n },\n ]\n : undefined,\n birthDate: profile.birthDate,\n gender: profile.gender,\n id: profile.userId,\n name: [\n {\n family,\n given: given.length > 0 ? given : undefined,\n text: profile.name,\n },\n ],\n resourceType: 'Patient',\n telecom:\n [\n ...(profile.email ? [{ system: 'email' as const, value: profile.email }] : []),\n ...(profile.phone ? [{ system: 'phone' as const, value: profile.phone }] : []),\n ].length > 0\n ? [\n ...(profile.email ? [{ system: 'email' as const, value: profile.email }] : []),\n ...(profile.phone ? [{ system: 'phone' as const, value: profile.phone }] : []),\n ]\n : undefined,\n };\n}\n\n/**\n * Convert complete lab result to FHIR Bundle\n * This is the main function for exporting lab results to FHIR R4 format\n */\nexport function labResultToFHIRBundle(\n report: LabReportData,\n observations: LabObservationData[],\n userProfile: UserProfileData,\n): FHIRBundle {\n const patientId = userProfile.userId;\n\n // Convert observations\n const fhirObservations = observations.map((obs) => ({\n fullUrl: `urn:uuid:observation-${obs.reportId}-${obs.biomarkerCode}`,\n resource: labObservationToFHIR(\n { ...obs, collectionDate: report.collectionDate },\n patientId,\n report.laboratoryName,\n ),\n }));\n\n const observationIds = observations.map(\n (obs) => `observation-${obs.reportId}-${obs.biomarkerCode}`,\n );\n\n // Convert report\n const diagnosticReport = labReportToFHIR(report, patientId, observationIds);\n\n // Convert patient\n const fhirPatient = userProfileToFHIR(userProfile);\n\n return {\n entry: [\n {\n fullUrl: `urn:uuid:${patientId}`,\n resource: fhirPatient,\n },\n {\n fullUrl: `urn:uuid:diagnostic-report-${report.reportId}`,\n resource: diagnosticReport,\n },\n ...fhirObservations,\n ],\n resourceType: 'Bundle',\n type: 'collection',\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/fhir-brasil/fhir-brasil/packages/core/dist/chunk-OPS7XHIL.cjs","../src/converter.ts"],"names":[],"mappings":"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","file":"/home/runner/work/fhir-brasil/fhir-brasil/packages/core/dist/chunk-OPS7XHIL.cjs","sourcesContent":[null,"/**\n * FHIR Converter\n *\n * Converts lab results to FHIR R4 DiagnosticReport and Observation resources.\n * See: https://hl7.org/fhir/diagnosticreport.html\n */\n\nimport { codeToLoinc } from './biomarkers';\nimport type { FHIRBundle, FHIRDiagnosticReport, FHIRObservation, FHIRPatient } from './fhir-types';\nimport type { Flag, LabObservationData, LabReportData, UserProfileData } from './types';\nimport { getDefaultUnit, unitToUCUM } from './units';\n\n// Re-export all types and functions\nexport * from './fhir-types';\n\n/**\n * Convert Flag to FHIR interpretation code\n */\nfunction interpretationCode(flag: Flag): string {\n switch (flag) {\n case 'H':\n return 'H'; // High\n case 'L':\n return 'L'; // Low\n default:\n return 'N'; // Normal\n }\n}\n\n/**\n * Convert Flag to FHIR interpretation display\n */\nfunction interpretationDisplay(flag: Flag): string {\n switch (flag) {\n case 'H':\n return 'High';\n case 'L':\n return 'Low';\n default:\n return 'Normal';\n }\n}\n\n/**\n * Convert generic lab observation to FHIR Observation\n */\nexport function labObservationToFHIR(\n observation: LabObservationData,\n patientId: string,\n laboratoryName?: string,\n): FHIRObservation {\n const loincCode = codeToLoinc(observation.biomarkerCode) || '99999-9';\n // Use default unit if source unit is empty\n const sourceUnit =\n observation.unit || getDefaultUnit(observation.biomarkerCode) || observation.unit;\n const ucumUnit = unitToUCUM(sourceUnit);\n const isQualitative = observation.isQualitative || typeof observation.value === 'string';\n\n // Base observation structure\n const fhirObs: FHIRObservation = {\n category: [\n {\n coding: [\n {\n code: 'laboratory',\n display: 'Laboratory',\n system: 'http://terminology.hl7.org/CodeSystem/observation-category',\n },\n ],\n },\n ],\n code: {\n coding: [\n {\n code: loincCode,\n display: observation.biomarkerName,\n system: 'http://loinc.org',\n },\n {\n code: observation.biomarkerCode,\n display: observation.biomarkerName,\n system: 'http://fhir-brasil.dev/biomarker-codes',\n },\n ],\n text: observation.biomarkerName,\n },\n effectiveDateTime: observation.collectionDate,\n id: `${observation.reportId}-${observation.biomarkerCode}`,\n interpretation: [\n {\n coding: [\n {\n code: interpretationCode(observation.flag),\n display: interpretationDisplay(observation.flag),\n system: 'http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation',\n },\n ],\n },\n ],\n performer: laboratoryName ? [{ display: laboratoryName }] : undefined,\n resourceType: 'Observation',\n status: 'final',\n subject: {\n reference: `Patient/${patientId}`,\n },\n };\n\n // Add value based on type (qualitative = string, quantitative = number)\n if (isQualitative) {\n fhirObs.valueString = String(observation.value);\n } else {\n fhirObs.valueQuantity = {\n code: ucumUnit,\n system: 'http://unitsofmeasure.org',\n unit: sourceUnit,\n value: observation.value as number,\n };\n\n // Reference range only applies to quantitative values\n if (observation.referenceMin !== undefined && observation.referenceMax !== undefined) {\n fhirObs.referenceRange = [\n {\n high: {\n code: ucumUnit,\n system: 'http://unitsofmeasure.org',\n unit: sourceUnit,\n value: observation.referenceMax,\n },\n low: {\n code: ucumUnit,\n system: 'http://unitsofmeasure.org',\n unit: sourceUnit,\n value: observation.referenceMin,\n },\n },\n ];\n }\n }\n\n return fhirObs;\n}\n\n/**\n * Convert generic lab report to FHIR DiagnosticReport\n */\nexport function labReportToFHIR(\n report: LabReportData,\n patientId: string,\n observationIds: string[],\n): FHIRDiagnosticReport {\n // Map processing status to FHIR status\n let status: FHIRDiagnosticReport['status'];\n switch (report.processingStatus) {\n case 'complete':\n status = 'final';\n break;\n case 'partial':\n status = 'partial';\n break;\n case 'pending_review':\n status = 'preliminary';\n break;\n default:\n status = 'final';\n }\n\n return {\n category: [\n {\n coding: [\n {\n code: 'LAB',\n display: 'Laboratory',\n system: 'http://terminology.hl7.org/CodeSystem/v2-0074',\n },\n ],\n },\n ],\n code: {\n coding: [\n {\n code: '11502-2', // Laboratory report\n display: 'Laboratory report',\n system: 'http://loinc.org',\n },\n ],\n text: 'Laboratory Results',\n },\n conclusion:\n report.overallStatus === 'NORMAL'\n ? 'All results within normal limits'\n : 'One or more abnormal results detected',\n conclusionCode:\n report.overallStatus === 'ANORMAL'\n ? [\n {\n coding: [\n {\n code: 'A',\n display: 'Abnormal',\n system: 'http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation',\n },\n ],\n },\n ]\n : undefined,\n effectiveDateTime: report.collectionDate,\n id: report.reportId,\n issued: report.createdAt,\n performer: report.laboratoryName ? [{ display: report.laboratoryName }] : undefined,\n resourceType: 'DiagnosticReport',\n result: observationIds.map((id) => ({ reference: `Observation/${id}` })),\n status,\n subject: {\n reference: `Patient/${patientId}`,\n },\n };\n}\n\n/**\n * Convert user profile to FHIR Patient\n * NOTE: CPF is intentionally excluded for privacy (LGPD compliance)\n */\nexport function userProfileToFHIR(profile: UserProfileData): FHIRPatient {\n const nameParts = profile.name.split(' ');\n const given = nameParts.slice(0, -1);\n const family = nameParts[nameParts.length - 1] || '';\n\n return {\n address: profile.address\n ? [\n {\n city: profile.address.city,\n country: profile.address.country || 'BR',\n line: [\n profile.address.street && profile.address.number\n ? `${profile.address.street}, ${profile.address.number}`\n : profile.address.street,\n profile.address.complement,\n ].filter(Boolean) as string[],\n postalCode: profile.address.postalCode,\n state: profile.address.state,\n },\n ]\n : undefined,\n birthDate: profile.birthDate,\n gender: profile.gender,\n id: profile.userId,\n name: [\n {\n family,\n given: given.length > 0 ? given : undefined,\n text: profile.name,\n },\n ],\n resourceType: 'Patient',\n telecom:\n [\n ...(profile.email ? [{ system: 'email' as const, value: profile.email }] : []),\n ...(profile.phone ? [{ system: 'phone' as const, value: profile.phone }] : []),\n ].length > 0\n ? [\n ...(profile.email ? [{ system: 'email' as const, value: profile.email }] : []),\n ...(profile.phone ? [{ system: 'phone' as const, value: profile.phone }] : []),\n ]\n : undefined,\n };\n}\n\n/**\n * Convert complete lab result to FHIR Bundle\n * This is the main function for exporting lab results to FHIR R4 format\n */\nexport function labResultToFHIRBundle(\n report: LabReportData,\n observations: LabObservationData[],\n userProfile: UserProfileData,\n): FHIRBundle {\n const patientId = userProfile.userId;\n\n // Convert observations\n const fhirObservations = observations.map((obs) => ({\n fullUrl: `urn:uuid:observation-${obs.reportId}-${obs.biomarkerCode}`,\n resource: labObservationToFHIR(\n { ...obs, collectionDate: report.collectionDate },\n patientId,\n report.laboratoryName,\n ),\n }));\n\n const observationIds = observations.map(\n (obs) => `observation-${obs.reportId}-${obs.biomarkerCode}`,\n );\n\n // Convert report\n const diagnosticReport = labReportToFHIR(report, patientId, observationIds);\n\n // Convert patient\n const fhirPatient = userProfileToFHIR(userProfile);\n\n return {\n entry: [\n {\n fullUrl: `urn:uuid:${patientId}`,\n resource: fhirPatient,\n },\n {\n fullUrl: `urn:uuid:diagnostic-report-${report.reportId}`,\n resource: diagnosticReport,\n },\n ...fhirObservations,\n ],\n resourceType: 'Bundle',\n type: 'collection',\n };\n}\n"]}
|
package/dist/cli.js
CHANGED
|
@@ -2436,6 +2436,210 @@ var BIOMARKER_DEFINITIONS = [
|
|
|
2436
2436
|
pt: ["Z-Score Corpo Total", "Z-Score", "Escore Z", "Z-Score DMO", "Z-Score Densidade \xD3ssea"]
|
|
2437
2437
|
},
|
|
2438
2438
|
unit: "score"
|
|
2439
|
+
},
|
|
2440
|
+
// ============================================================================
|
|
2441
|
+
// CARDIOVASCULAR MARKERS — Insuficiência cardíaca e dano miocárdico
|
|
2442
|
+
// ============================================================================
|
|
2443
|
+
{
|
|
2444
|
+
category: "coracao",
|
|
2445
|
+
code: "NTproBNP",
|
|
2446
|
+
loinc: "33762-6",
|
|
2447
|
+
names: {
|
|
2448
|
+
en: ["NT-proBNP", "N-Terminal pro B-Type Natriuretic Peptide", "NT-pro-BNP"],
|
|
2449
|
+
pt: ["NT-proBNP", "Pept\xEDdeo Natriur\xE9tico Tipo B N-Terminal", "Pr\xF3-BNP N-Terminal"]
|
|
2450
|
+
},
|
|
2451
|
+
unit: "pg/mL"
|
|
2452
|
+
},
|
|
2453
|
+
{
|
|
2454
|
+
category: "coracao",
|
|
2455
|
+
code: "BNP",
|
|
2456
|
+
loinc: "30934-4",
|
|
2457
|
+
names: {
|
|
2458
|
+
en: ["BNP", "B-Type Natriuretic Peptide", "Brain Natriuretic Peptide"],
|
|
2459
|
+
pt: ["BNP", "Pept\xEDdeo Natriur\xE9tico Tipo B", "Pept\xEDdeo Natriur\xE9tico Cerebral"]
|
|
2460
|
+
},
|
|
2461
|
+
unit: "pg/mL"
|
|
2462
|
+
},
|
|
2463
|
+
{
|
|
2464
|
+
category: "coracao",
|
|
2465
|
+
code: "TroponinI",
|
|
2466
|
+
loinc: "49563-0",
|
|
2467
|
+
names: {
|
|
2468
|
+
en: ["Troponin I", "cTnI", "Cardiac Troponin I", "hs-TnI", "High-Sensitivity Troponin I"],
|
|
2469
|
+
pt: ["Troponina I", "cTnI", "Troponina I Card\xEDaca", "Troponina I Ultrassens\xEDvel"]
|
|
2470
|
+
},
|
|
2471
|
+
unit: "ng/mL"
|
|
2472
|
+
},
|
|
2473
|
+
{
|
|
2474
|
+
category: "coracao",
|
|
2475
|
+
code: "TroponinT",
|
|
2476
|
+
loinc: "6598-7",
|
|
2477
|
+
names: {
|
|
2478
|
+
en: ["Troponin T", "cTnT", "Cardiac Troponin T", "hs-TnT", "High-Sensitivity Troponin T"],
|
|
2479
|
+
pt: ["Troponina T", "cTnT", "Troponina T Card\xEDaca", "Troponina T Ultrassens\xEDvel"]
|
|
2480
|
+
},
|
|
2481
|
+
unit: "ng/mL"
|
|
2482
|
+
},
|
|
2483
|
+
// ============================================================================
|
|
2484
|
+
// COAGULATION — Coagulação
|
|
2485
|
+
// ============================================================================
|
|
2486
|
+
{
|
|
2487
|
+
category: "sangue",
|
|
2488
|
+
code: "DDimer",
|
|
2489
|
+
loinc: "48066-5",
|
|
2490
|
+
names: {
|
|
2491
|
+
en: ["D-Dimer", "D Dimer", "Fibrin D-Dimer"],
|
|
2492
|
+
pt: ["D\xEDmero-D", "D\xEDmero D", "D-D\xEDmero"]
|
|
2493
|
+
},
|
|
2494
|
+
unit: "ng/mL"
|
|
2495
|
+
},
|
|
2496
|
+
{
|
|
2497
|
+
category: "sangue",
|
|
2498
|
+
code: "Fibrinogen",
|
|
2499
|
+
loinc: "3255-7",
|
|
2500
|
+
names: {
|
|
2501
|
+
en: ["Fibrinogen", "Fibrinogen Activity"],
|
|
2502
|
+
pt: ["Fibrinog\xEAnio", "Atividade do Fibrinog\xEAnio"]
|
|
2503
|
+
},
|
|
2504
|
+
unit: "mg/dL"
|
|
2505
|
+
},
|
|
2506
|
+
// ============================================================================
|
|
2507
|
+
// HEMATOLOGY — Hematologia adicional
|
|
2508
|
+
// ============================================================================
|
|
2509
|
+
{
|
|
2510
|
+
category: "figado",
|
|
2511
|
+
code: "LDH",
|
|
2512
|
+
loinc: "2532-0",
|
|
2513
|
+
names: {
|
|
2514
|
+
en: ["Lactate Dehydrogenase", "LDH", "LD"],
|
|
2515
|
+
pt: ["Desidrogenase L\xE1tica", "DHL", "LDH", "Lactato Desidrogenase"]
|
|
2516
|
+
},
|
|
2517
|
+
unit: "U/L"
|
|
2518
|
+
},
|
|
2519
|
+
// ============================================================================
|
|
2520
|
+
// ENDOCRINE — Eixo cálcio/fósforo
|
|
2521
|
+
// ============================================================================
|
|
2522
|
+
{
|
|
2523
|
+
category: "hormonios",
|
|
2524
|
+
code: "PTH",
|
|
2525
|
+
loinc: "2731-8",
|
|
2526
|
+
names: {
|
|
2527
|
+
en: ["Parathyroid Hormone", "PTH", "Intact PTH"],
|
|
2528
|
+
pt: ["Paratorm\xF4nio", "PTH", "Horm\xF4nio da Paratireoide", "PTH Intacto"]
|
|
2529
|
+
},
|
|
2530
|
+
unit: "pg/mL"
|
|
2531
|
+
},
|
|
2532
|
+
// ============================================================================
|
|
2533
|
+
// IMMUNOLOGY — Complemento e imunoglobulinas
|
|
2534
|
+
// ============================================================================
|
|
2535
|
+
{
|
|
2536
|
+
category: "autoimunidade",
|
|
2537
|
+
code: "IgM",
|
|
2538
|
+
loinc: "2472-9",
|
|
2539
|
+
names: {
|
|
2540
|
+
en: ["Immunoglobulin M", "IgM", "Total IgM"],
|
|
2541
|
+
pt: ["Imunoglobulina M", "IgM", "IgM Total"]
|
|
2542
|
+
},
|
|
2543
|
+
unit: "mg/dL"
|
|
2544
|
+
},
|
|
2545
|
+
{
|
|
2546
|
+
category: "autoimunidade",
|
|
2547
|
+
code: "C3",
|
|
2548
|
+
loinc: "4485-3",
|
|
2549
|
+
names: {
|
|
2550
|
+
en: ["Complement C3", "C3"],
|
|
2551
|
+
pt: ["Complemento C3", "C3", "Fra\xE7\xE3o C3 do Complemento"]
|
|
2552
|
+
},
|
|
2553
|
+
unit: "mg/dL"
|
|
2554
|
+
},
|
|
2555
|
+
{
|
|
2556
|
+
category: "autoimunidade",
|
|
2557
|
+
code: "C4",
|
|
2558
|
+
loinc: "4498-6",
|
|
2559
|
+
names: {
|
|
2560
|
+
en: ["Complement C4", "C4"],
|
|
2561
|
+
pt: ["Complemento C4", "C4", "Fra\xE7\xE3o C4 do Complemento"]
|
|
2562
|
+
},
|
|
2563
|
+
unit: "mg/dL"
|
|
2564
|
+
},
|
|
2565
|
+
// ============================================================================
|
|
2566
|
+
// TUMOR MARKERS — Marcadores tumorais adicionais
|
|
2567
|
+
// ============================================================================
|
|
2568
|
+
{
|
|
2569
|
+
category: "marcadores-tumorais",
|
|
2570
|
+
code: "CA199",
|
|
2571
|
+
loinc: "24108-3",
|
|
2572
|
+
names: {
|
|
2573
|
+
en: ["CA 19-9", "Carbohydrate Antigen 19-9", "CA19-9"],
|
|
2574
|
+
pt: ["CA 19-9", "Ant\xEDgeno Carboidrato 19-9", "CA19-9"]
|
|
2575
|
+
},
|
|
2576
|
+
unit: "U/mL"
|
|
2577
|
+
},
|
|
2578
|
+
{
|
|
2579
|
+
category: "marcadores-tumorais",
|
|
2580
|
+
code: "CA153",
|
|
2581
|
+
loinc: "6875-9",
|
|
2582
|
+
names: {
|
|
2583
|
+
en: ["CA 15-3", "Cancer Antigen 15-3", "CA15-3"],
|
|
2584
|
+
pt: ["CA 15-3", "Ant\xEDgeno C\xE2ncer 15-3", "CA15-3"]
|
|
2585
|
+
},
|
|
2586
|
+
sex: "female",
|
|
2587
|
+
unit: "U/mL"
|
|
2588
|
+
},
|
|
2589
|
+
{
|
|
2590
|
+
category: ["saude-feminina", "marcadores-tumorais"],
|
|
2591
|
+
code: "BetaHCG",
|
|
2592
|
+
loinc: "19080-1",
|
|
2593
|
+
names: {
|
|
2594
|
+
en: ["Beta-hCG", "Beta Human Chorionic Gonadotropin", "\u03B2-hCG Quantitative", "hCG"],
|
|
2595
|
+
pt: [
|
|
2596
|
+
"Beta-hCG",
|
|
2597
|
+
"Beta Gonadotrofina Cori\xF4nica Humana",
|
|
2598
|
+
"\u03B2-hCG Quantitativo",
|
|
2599
|
+
"hCG",
|
|
2600
|
+
"Gonadotrofina Cori\xF4nica"
|
|
2601
|
+
]
|
|
2602
|
+
},
|
|
2603
|
+
unit: "mIU/mL"
|
|
2604
|
+
},
|
|
2605
|
+
// ============================================================================
|
|
2606
|
+
// RENAL — Filtração glomerular alternativa
|
|
2607
|
+
// ============================================================================
|
|
2608
|
+
{
|
|
2609
|
+
category: "rins",
|
|
2610
|
+
code: "CystatinC",
|
|
2611
|
+
loinc: "33863-2",
|
|
2612
|
+
names: {
|
|
2613
|
+
en: ["Cystatin C", "Cystatin-C"],
|
|
2614
|
+
pt: ["Cistatina C", "Cistatina-C"]
|
|
2615
|
+
},
|
|
2616
|
+
unit: "mg/L"
|
|
2617
|
+
},
|
|
2618
|
+
// ============================================================================
|
|
2619
|
+
// NUTRIENTS — Oligoelementos adicionais
|
|
2620
|
+
// ============================================================================
|
|
2621
|
+
{
|
|
2622
|
+
category: "nutrientes",
|
|
2623
|
+
code: "Selenium",
|
|
2624
|
+
loinc: "5697-7",
|
|
2625
|
+
names: {
|
|
2626
|
+
en: ["Selenium", "Se"],
|
|
2627
|
+
pt: ["Sel\xEAnio", "Se"]
|
|
2628
|
+
},
|
|
2629
|
+
unit: "\xB5g/L"
|
|
2630
|
+
},
|
|
2631
|
+
// ============================================================================
|
|
2632
|
+
// METABOLIC — Cetonas séricas
|
|
2633
|
+
// ============================================================================
|
|
2634
|
+
{
|
|
2635
|
+
category: "pancreas",
|
|
2636
|
+
code: "BetaHydroxybutyrate",
|
|
2637
|
+
loinc: "53060-0",
|
|
2638
|
+
names: {
|
|
2639
|
+
en: ["Beta-Hydroxybutyrate", "\u03B2-Hydroxybutyrate", "BHB", "Ketone Bodies"],
|
|
2640
|
+
pt: ["Beta-Hidroxibutirato", "\u03B2-Hidroxibutirato", "BHB", "Corpos Cet\xF4nicos"]
|
|
2641
|
+
},
|
|
2642
|
+
unit: "mmol/L"
|
|
2439
2643
|
}
|
|
2440
2644
|
];
|
|
2441
2645
|
var loincToCodeMap = /* @__PURE__ */ new Map();
|
|
@@ -5798,7 +6002,7 @@ async function main() {
|
|
|
5798
6002
|
strict: false
|
|
5799
6003
|
});
|
|
5800
6004
|
if (values.version) {
|
|
5801
|
-
process.stdout.write(`${"0.
|
|
6005
|
+
process.stdout.write(`${"0.12.0"}
|
|
5802
6006
|
`);
|
|
5803
6007
|
return;
|
|
5804
6008
|
}
|
package/dist/converter.cjs
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
7
|
-
require('./chunk-
|
|
6
|
+
var _chunkOPS7XHILcjs = require('./chunk-OPS7XHIL.cjs');
|
|
7
|
+
require('./chunk-EW5GLFSC.cjs');
|
|
8
8
|
require('./chunk-MJ254F5K.cjs');
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
exports.labObservationToFHIR =
|
|
14
|
+
exports.labObservationToFHIR = _chunkOPS7XHILcjs.labObservationToFHIR; exports.labReportToFHIR = _chunkOPS7XHILcjs.labReportToFHIR; exports.labResultToFHIRBundle = _chunkOPS7XHILcjs.labResultToFHIRBundle; exports.userProfileToFHIR = _chunkOPS7XHILcjs.userProfileToFHIR;
|
|
15
15
|
//# sourceMappingURL=converter.cjs.map
|
package/dist/converter.js
CHANGED
|
@@ -3,8 +3,8 @@ import {
|
|
|
3
3
|
labReportToFHIR,
|
|
4
4
|
labResultToFHIRBundle,
|
|
5
5
|
userProfileToFHIR
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-NR4OTNC4.js";
|
|
7
|
+
import "./chunk-ICSMWCVT.js";
|
|
8
8
|
import "./chunk-R4MUCMO3.js";
|
|
9
9
|
export {
|
|
10
10
|
labObservationToFHIR,
|
package/dist/importer.cjs
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
var
|
|
8
|
-
require('./chunk-
|
|
7
|
+
var _chunkNOJRDKFOcjs = require('./chunk-NOJRDKFO.cjs');
|
|
8
|
+
require('./chunk-EW5GLFSC.cjs');
|
|
9
9
|
require('./chunk-3ILBFLVQ.cjs');
|
|
10
10
|
|
|
11
11
|
|
|
@@ -13,5 +13,5 @@ require('./chunk-3ILBFLVQ.cjs');
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
exports.MAX_FILE_SIZE =
|
|
16
|
+
exports.MAX_FILE_SIZE = _chunkNOJRDKFOcjs.MAX_FILE_SIZE; exports.MAX_OBSERVATIONS = _chunkNOJRDKFOcjs.MAX_OBSERVATIONS; exports.extractObservationsFromBundle = _chunkNOJRDKFOcjs.extractObservationsFromBundle; exports.mapFHIRObservationToInternal = _chunkNOJRDKFOcjs.mapFHIRObservationToInternal; exports.processImportBundle = _chunkNOJRDKFOcjs.processImportBundle;
|
|
17
17
|
//# sourceMappingURL=importer.cjs.map
|
package/dist/importer.js
CHANGED
|
@@ -4,8 +4,8 @@ import {
|
|
|
4
4
|
extractObservationsFromBundle,
|
|
5
5
|
mapFHIRObservationToInternal,
|
|
6
6
|
processImportBundle
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-4YQOKZX7.js";
|
|
8
|
+
import "./chunk-ICSMWCVT.js";
|
|
9
9
|
import "./chunk-N3ZCOLG2.js";
|
|
10
10
|
export {
|
|
11
11
|
MAX_FILE_SIZE,
|
package/dist/index.cjs
CHANGED
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkOPS7XHILcjs = require('./chunk-OPS7XHIL.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
var
|
|
13
|
+
var _chunkNOJRDKFOcjs = require('./chunk-NOJRDKFO.cjs');
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
|
|
@@ -43,7 +43,7 @@ var _chunkO25F6G3Kcjs = require('./chunk-O25F6G3K.cjs');
|
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
|
|
46
|
-
var
|
|
46
|
+
var _chunkEW5GLFSCcjs = require('./chunk-EW5GLFSC.cjs');
|
|
47
47
|
|
|
48
48
|
|
|
49
49
|
|
|
@@ -68,6 +68,82 @@ var _chunkMJ254F5Kcjs = require('./chunk-MJ254F5K.cjs');
|
|
|
68
68
|
|
|
69
69
|
var _chunk3ILBFLVQcjs = require('./chunk-3ILBFLVQ.cjs');
|
|
70
70
|
|
|
71
|
+
// src/category-groups.ts
|
|
72
|
+
var CATEGORY_GROUPS = {
|
|
73
|
+
cardiovascular: {
|
|
74
|
+
en: "Cardiovascular",
|
|
75
|
+
pt: "Cardiovascular",
|
|
76
|
+
slug: "cardiovascular",
|
|
77
|
+
subcategories: ["coracao"]
|
|
78
|
+
},
|
|
79
|
+
"composicao-envelhecimento": {
|
|
80
|
+
en: "Body Composition & Aging",
|
|
81
|
+
pt: "Composi\xE7\xE3o Corporal e Envelhecimento",
|
|
82
|
+
slug: "composicao-envelhecimento",
|
|
83
|
+
subcategories: ["composicao-corporal", "densidade-ossea", "estresse-envelhecimento"]
|
|
84
|
+
},
|
|
85
|
+
hematologico: {
|
|
86
|
+
en: "Hematology",
|
|
87
|
+
pt: "Hematol\xF3gico",
|
|
88
|
+
slug: "hematologico",
|
|
89
|
+
subcategories: ["sangue"]
|
|
90
|
+
},
|
|
91
|
+
"hepatico-biliar": {
|
|
92
|
+
en: "Hepatic & Biliary",
|
|
93
|
+
pt: "Hep\xE1tico e Biliar",
|
|
94
|
+
slug: "hepatico-biliar",
|
|
95
|
+
subcategories: ["figado"]
|
|
96
|
+
},
|
|
97
|
+
imunologico: {
|
|
98
|
+
en: "Immunology",
|
|
99
|
+
pt: "Imunol\xF3gico",
|
|
100
|
+
slug: "imunologico",
|
|
101
|
+
subcategories: ["autoimunidade", "regulacao-imunologica"]
|
|
102
|
+
},
|
|
103
|
+
"metabolico-endocrino": {
|
|
104
|
+
en: "Metabolic & Endocrine",
|
|
105
|
+
pt: "Metab\xF3lico e End\xF3crino",
|
|
106
|
+
slug: "metabolico-endocrino",
|
|
107
|
+
subcategories: ["metabolico", "pancreas", "hormonios", "tireoide"]
|
|
108
|
+
},
|
|
109
|
+
"nutricional-ambiental": {
|
|
110
|
+
en: "Nutrition & Environmental Exposure",
|
|
111
|
+
pt: "Nutricional e Exposi\xE7\xE3o Ambiental",
|
|
112
|
+
slug: "nutricional-ambiental",
|
|
113
|
+
subcategories: ["nutrientes", "toxinas-ambientais"]
|
|
114
|
+
},
|
|
115
|
+
oncologico: {
|
|
116
|
+
en: "Oncology",
|
|
117
|
+
pt: "Oncol\xF3gico",
|
|
118
|
+
slug: "oncologico",
|
|
119
|
+
subcategories: ["marcadores-tumorais"]
|
|
120
|
+
},
|
|
121
|
+
"renal-eletrolitico": {
|
|
122
|
+
en: "Renal & Electrolytes",
|
|
123
|
+
pt: "Renal e Eletrol\xEDtico",
|
|
124
|
+
slug: "renal-eletrolitico",
|
|
125
|
+
subcategories: ["rins", "urina", "eletrolitos"]
|
|
126
|
+
},
|
|
127
|
+
"saude-reprodutiva": {
|
|
128
|
+
en: "Reproductive Health",
|
|
129
|
+
pt: "Sa\xFAde Reprodutiva",
|
|
130
|
+
slug: "saude-reprodutiva",
|
|
131
|
+
subcategories: ["saude-feminina", "saude-masculina"]
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
var SUBCATEGORY_TO_GROUP = /* @__PURE__ */ new Map();
|
|
135
|
+
for (const group of Object.values(CATEGORY_GROUPS)) {
|
|
136
|
+
for (const sub of group.subcategories) {
|
|
137
|
+
SUBCATEGORY_TO_GROUP.set(sub, group.slug);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
function getCategoryGroup(subcategory) {
|
|
141
|
+
return SUBCATEGORY_TO_GROUP.get(subcategory);
|
|
142
|
+
}
|
|
143
|
+
function listMappedSubcategories() {
|
|
144
|
+
return [...SUBCATEGORY_TO_GROUP.keys()];
|
|
145
|
+
}
|
|
146
|
+
|
|
71
147
|
// src/intervention-converter.ts
|
|
72
148
|
function interventionStatus(endDate) {
|
|
73
149
|
if (!endDate) return "active";
|
|
@@ -152,7 +228,7 @@ function interventionToFHIRObservation(intervention, patientId) {
|
|
|
152
228
|
}
|
|
153
229
|
function interventionsToFHIRBundle(interventions, userProfile) {
|
|
154
230
|
const patientId = userProfile.userId;
|
|
155
|
-
const fhirPatient =
|
|
231
|
+
const fhirPatient = _chunkOPS7XHILcjs.userProfileToFHIR.call(void 0, userProfile);
|
|
156
232
|
const entries = interventions.map((intervention) => {
|
|
157
233
|
const isMedication = intervention.type === "medication" || intervention.type === "supplement";
|
|
158
234
|
const resource = isMedication ? interventionToFHIRMedicationStatement(intervention, patientId) : interventionToFHIRObservation(intervention, patientId);
|
|
@@ -612,5 +688,8 @@ function cnsToFHIRIdentifier(cns) {
|
|
|
612
688
|
|
|
613
689
|
|
|
614
690
|
|
|
615
|
-
|
|
691
|
+
|
|
692
|
+
|
|
693
|
+
|
|
694
|
+
exports.AGE_BRACKETS = AGE_BRACKETS; exports.BIOMARKER_DEFAULT_UNIT = _chunkMJ254F5Kcjs.BIOMARKER_DEFAULT_UNIT; exports.BIOMARKER_DEFINITIONS = _chunkEW5GLFSCcjs.BIOMARKER_DEFINITIONS; exports.BIOMARKER_UNITS = _chunkMJ254F5Kcjs.BIOMARKER_UNITS; exports.BODY_FAT_ZONES = BODY_FAT_ZONES; exports.CAC_INDICATOR_CODES = _chunkEW5GLFSCcjs.CAC_INDICATOR_CODES; exports.CATEGORY_GROUPS = CATEGORY_GROUPS; exports.CATEGORY_SCREENING_INTERVALS = CATEGORY_SCREENING_INTERVALS; exports.DEXA_CATEGORIES = _chunkEW5GLFSCcjs.DEXA_CATEGORIES; exports.DEXA_INDICATOR_CODES = _chunkEW5GLFSCcjs.DEXA_INDICATOR_CODES; exports.MAX_FILE_SIZE = _chunkNOJRDKFOcjs.MAX_FILE_SIZE; exports.MAX_OBSERVATIONS = _chunkNOJRDKFOcjs.MAX_OBSERVATIONS; exports.T_SCORE_ZONES = T_SCORE_ZONES; exports.UNIT_TO_UCUM = _chunkMJ254F5Kcjs.UNIT_TO_UCUM; exports.ZONE_DEFS = ZONE_DEFS; exports.applyFallbackReferenceRanges = _chunkT22Q6ML7cjs.applyFallbackReferenceRanges; exports.biomarkerRangeDefinitions = _chunkT22Q6ML7cjs.biomarkerRangeDefinitions; exports.calculateNextScreeningDate = calculateNextScreeningDate; exports.cnsToFHIRIdentifier = cnsToFHIRIdentifier; exports.codeToLoinc = _chunkEW5GLFSCcjs.codeToLoinc; exports.convertUnit = _chunkMJ254F5Kcjs.convertUnit; exports.cpfToFHIRIdentifier = cpfToFHIRIdentifier; exports.defaultReferenceRanges = _chunkT22Q6ML7cjs.defaultReferenceRanges; exports.extractObservationsFromBundle = _chunkNOJRDKFOcjs.extractObservationsFromBundle; exports.filterVisibleBiomarkers = _chunkEW5GLFSCcjs.filterVisibleBiomarkers; exports.findCodeByName = _chunkEW5GLFSCcjs.findCodeByName; exports.formatCNS = formatCNS; exports.formatCPF = formatCPF; exports.generateCacFullReference = _chunkEW5GLFSCcjs.generateCacFullReference; exports.generateDexaFullReference = _chunkEW5GLFSCcjs.generateDexaFullReference; exports.generateFilteredLLMReference = _chunkEW5GLFSCcjs.generateFilteredLLMReference; exports.generateLLMReference = _chunkEW5GLFSCcjs.generateLLMReference; exports.getAllCodes = _chunkEW5GLFSCcjs.getAllCodes; exports.getAllDefinitions = _chunkEW5GLFSCcjs.getAllDefinitions; exports.getAllLoincCodes = _chunkEW5GLFSCcjs.getAllLoincCodes; exports.getAllSearchPatterns = _chunkEW5GLFSCcjs.getAllSearchPatterns; exports.getBiomarkersByCategory = _chunkEW5GLFSCcjs.getBiomarkersByCategory; exports.getBiomarkersForCategories = _chunkEW5GLFSCcjs.getBiomarkersForCategories; exports.getCanonicalUnit = _chunkMJ254F5Kcjs.getCanonicalUnit; exports.getCategoriesByInterval = getCategoriesByInterval; exports.getCategoryGroup = getCategoryGroup; exports.getDaysUntilScreening = getDaysUntilScreening; exports.getDefaultUnit = _chunkMJ254F5Kcjs.getDefaultUnit; exports.getDefinitionByCode = _chunkEW5GLFSCcjs.getDefinitionByCode; exports.getDefinitionByLoinc = _chunkEW5GLFSCcjs.getDefinitionByLoinc; exports.getDefinitionsBySex = _chunkEW5GLFSCcjs.getDefinitionsBySex; exports.getDueCategories = getDueCategories; exports.getFallbackReferenceRange = _chunkT22Q6ML7cjs.getFallbackReferenceRange; exports.getRangeDirection = _chunkT22Q6ML7cjs.getRangeDirection; exports.getReferenceRange = _chunkT22Q6ML7cjs.getReferenceRange; exports.getSIUnit = _chunkMJ254F5Kcjs.getSIUnit; exports.getScreeningInterval = getScreeningInterval; exports.getSexForCode = _chunkEW5GLFSCcjs.getSexForCode; exports.getVisibleDefinitions = _chunkEW5GLFSCcjs.getVisibleDefinitions; exports.interventionToFHIRMedicationStatement = interventionToFHIRMedicationStatement; exports.interventionToFHIRObservation = interventionToFHIRObservation; exports.interventionsToFHIRBundle = interventionsToFHIRBundle; exports.isBiomarkerVisible = _chunkEW5GLFSCcjs.isBiomarkerVisible; exports.isCacDocument = _chunkEW5GLFSCcjs.isCacDocument; exports.isDexaDocument = _chunkEW5GLFSCcjs.isDexaDocument; exports.isScreeningDue = isScreeningDue; exports.isValidCode = _chunkEW5GLFSCcjs.isValidCode; exports.isValidLoinc = _chunkEW5GLFSCcjs.isValidLoinc; exports.labObservationToFHIR = _chunkOPS7XHILcjs.labObservationToFHIR; exports.labReportToFHIR = _chunkOPS7XHILcjs.labReportToFHIR; exports.labResultToFHIRBundle = _chunkOPS7XHILcjs.labResultToFHIRBundle; exports.listMappedSubcategories = listMappedSubcategories; exports.loincToCode = _chunkEW5GLFSCcjs.loincToCode; exports.mapFHIRObservationToInternal = _chunkNOJRDKFOcjs.mapFHIRObservationToInternal; exports.normalizeCode = _chunkEW5GLFSCcjs.normalizeCode; exports.plural = plural; exports.pluralCount = pluralCount; exports.pluralPhrase = pluralPhrase; exports.pluralPhraseCount = pluralPhraseCount; exports.processImportBundle = _chunkNOJRDKFOcjs.processImportBundle; exports.toBiomarkerTests = _chunkEW5GLFSCcjs.toBiomarkerTests; exports.unitToUCUM = _chunkMJ254F5Kcjs.unitToUCUM; exports.userProfileToFHIR = _chunkOPS7XHILcjs.userProfileToFHIR; exports.validateCNS = validateCNS; exports.validateCPF = validateCPF; exports.validateFHIRDiagnosticReport = _chunk3ILBFLVQcjs.validateFHIRDiagnosticReport; exports.validateFHIRImportBundle = _chunk3ILBFLVQcjs.validateFHIRImportBundle; exports.validateFHIRObservation = _chunk3ILBFLVQcjs.validateFHIRObservation; exports.validateLoincNameMatch = _chunkEW5GLFSCcjs.validateLoincNameMatch;
|
|
616
695
|
//# sourceMappingURL=index.cjs.map
|