@precisa-saude/fhir 0.31.4 → 0.31.5

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.
@@ -8,7 +8,7 @@ var _chunkOR67NJDZcjs = require('./chunk-OR67NJDZ.cjs');
8
8
 
9
9
 
10
10
 
11
- var _chunkECUM5SFPcjs = require('./chunk-ECUM5SFP.cjs');
11
+ var _chunkQOXTLPQ2cjs = require('./chunk-QOXTLPQ2.cjs');
12
12
 
13
13
 
14
14
  var _chunk3ILBFLVQcjs = require('./chunk-3ILBFLVQ.cjs');
@@ -33,11 +33,11 @@ function resolveBiomarkerCode(observation) {
33
33
  } else {
34
34
  reason = "No code found in observation coding";
35
35
  }
36
- const fromLoinc = loincCode ? _chunkECUM5SFPcjs.loincToCode.call(void 0, loincCode) : void 0;
36
+ const fromLoinc = loincCode ? _chunkQOXTLPQ2cjs.loincToCode.call(void 0, loincCode) : void 0;
37
37
  if (fromLoinc) return { internalCode: fromLoinc, loincCode, reason };
38
- if (declaredCode && _chunkECUM5SFPcjs.isValidCode.call(void 0, declaredCode)) {
39
- const canonical = _chunkECUM5SFPcjs.normalizeCode.call(void 0, declaredCode);
40
- return { internalCode: canonical, loincCode: _chunkECUM5SFPcjs.codeToLoinc.call(void 0, canonical), reason };
38
+ if (declaredCode && _chunkQOXTLPQ2cjs.isValidCode.call(void 0, declaredCode)) {
39
+ const canonical = _chunkQOXTLPQ2cjs.normalizeCode.call(void 0, declaredCode);
40
+ return { internalCode: canonical, loincCode: _chunkQOXTLPQ2cjs.codeToLoinc.call(void 0, canonical), reason };
41
41
  }
42
42
  return { loincCode, reason };
43
43
  }
@@ -74,7 +74,7 @@ function mapFHIRObservationToInternal(observation, index) {
74
74
  skipped: { index, loincCode, reason, resourceType: "Observation" }
75
75
  };
76
76
  }
77
- const definition = _chunkECUM5SFPcjs.getDefinitionByCode.call(void 0, internalCode);
77
+ const definition = _chunkQOXTLPQ2cjs.getDefinitionByCode.call(void 0, internalCode);
78
78
  let value;
79
79
  let unit = "";
80
80
  let isQualitative = false;
@@ -162,4 +162,4 @@ function processImportBundle(data) {
162
162
 
163
163
 
164
164
  exports.MAX_OBSERVATIONS = MAX_OBSERVATIONS; exports.MAX_FILE_SIZE = MAX_FILE_SIZE; exports.extractObservationsFromBundle = extractObservationsFromBundle; exports.mapFHIRObservationToInternal = mapFHIRObservationToInternal; exports.processImportBundle = processImportBundle;
165
- //# sourceMappingURL=chunk-CKDOYXRI.cjs.map
165
+ //# sourceMappingURL=chunk-SDKLR3DT.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/fhir-brasil/fhir-brasil/packages/core/dist/chunk-CKDOYXRI.cjs","../src/importer.ts"],"names":[],"mappings":"AAAA;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACgDA,IAAM,iBAAA,EAAmB,GAAA;AACzB,IAAM,cAAA,EAAgB,GAAA,EAAK,KAAA,EAAO,IAAA;AAclC,SAAS,oBAAA,CAAqB,WAAA,EAI5B;AACA,EAAA,MAAM,OAAA,mCAAS,WAAA,mBAAY,IAAA,6BAAM,QAAA,UAAU,CAAC,GAAA;AAC5C,EAAA,MAAM,UAAA,kBAAY,MAAA,qBAAO,IAAA,mBAAK,CAAC,CAAA,EAAA,GAAM,CAAA,CAAE,OAAA,IAAW,8BAAY,CAAA,6BAAG,MAAA;AACjE,EAAA,MAAM,aAAA,kBAAe,MAAA,qBAAO,IAAA,mBAAK,CAAC,CAAA,EAAA,GAAM,CAAA,CAAE,OAAA,IAAW,uCAAqB,CAAA,6BAAG,MAAA;AAE7E,EAAA,MAAM,UAAA,EAAY;AAAA,IAChB,GAAI,UAAA,EAAY,CAAC,CAAA,MAAA,EAAS,SAAS,CAAA,CAAA;AACf,IAAA;AACtB,EAAA;AAOI,EAAA;AACsB,EAAA;AACE,IAAA;AACE,EAAA;AACO,IAAA;AAC1B,IAAA;AACJ,EAAA;AACI,IAAA;AACX,EAAA;AAE8B,EAAA;AACN,EAAA;AAEQ,EAAA;AAOE,IAAA;AAIE,IAAA;AACpC,EAAA;AAE2B,EAAA;AAC7B;AAKmE;AACxC,EAAA;AACU,EAAA;AACA,EAAA;AAC5B,EAAA;AACT;AAK8C;AAIH,EAAA;AACR,EAAA;AAEA,EAAA;AACH,IAAA;AACP,IAAA;AACc,MAAA;AACjC,MAAA;AACF,IAAA;AAEmB,IAAA;AAEjB,MAAA;AACF,IAAA;AAE2B,IAAA;AACQ,MAAA;AACjC,MAAA;AACF,IAAA;AAEmD,IAAA;AACrD,EAAA;AAE+B,EAAA;AACjC;AAME;AAGiC,EAAA;AAEd,EAAA;AACV,IAAA;AACwB,MAAA;AAC/B,IAAA;AACF,EAAA;AAEmB,EAAA;AAGf,EAAA;AACO,EAAA;AACS,EAAA;AAEW,EAAA;AACK,IAAA;AACD,IAAA;AACC,EAAA;AACd,IAAA;AACJ,IAAA;AACX,EAAA;AACE,IAAA;AACI,MAAA;AACP,QAAA;AACA,QAAA;AACQ,QAAA;AACM,QAAA;AAChB,MAAA;AACF,IAAA;AACF,EAAA;AAGmC,EAAA;AACd,EAAA;AACZ,IAAA;AACI,MAAA;AACP,QAAA;AACA,QAAA;AACQ,QAAA;AACM,QAAA;AAChB,MAAA;AACF,IAAA;AACF,EAAA;AAGI,EAAA;AACA,EAAA;AACiC,EAAA;AACR,IAAA;AACA,IAAA;AAC7B,EAAA;AAEsC,EAAA;AACrB,IAAA;AAEK,IAAA;AACpB,IAAA;AAC6B,IAAA;AAC7B,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACkC,IAAA;AAClC,IAAA;AACF,EAAA;AAE+B,EAAA;AACjC;AAKqE;AAE1C,EAAA;AACQ,EAAA;AACxB,IAAA;AACG,MAAA;AACG,MAAA;AACD,MAAA;AACM,MAAA;AAClB,IAAA;AACF,EAAA;AAEe,EAAA;AAGmB,EAAA;AAGO,EAAA;AACK,EAAA;AAEb,EAAA;AAChB,IAAA;AAEc,IAAA;AACK,MAAA;AAC3B,IAAA;AACyB,MAAA;AAChC,IAAA;AACF,EAAA;AAEO,EAAA;AACI,IAAA;AACT,IAAA;AACS,IAAA;AACoB,IAAA;AAC/B,EAAA;AACF;ADnIuC;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/fhir-brasil/fhir-brasil/packages/core/dist/chunk-CKDOYXRI.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 {\n codeToLoinc,\n getDefinitionByCode,\n isValidCode,\n loincToCode,\n normalizeCode,\n} from './biomarkers';\nimport { BIOMARKER_CODE_SYSTEM, LOINC_SYSTEM } from './code-systems';\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 /** Ausente nos biomarcadores sem LOINC publicado, como composição corporal. */\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\n/**\n * Limites de importação.\n *\n * Uma Observation exportada ocupa cerca de 1,25KB em JSON compacto e 2,75KB\n * quando o arquivo vem indentado, medido sobre um histórico real de 998\n * Observations em 61 laudos. Nesse tamanho, 5000 Observations dão 6,0MB\n * compactos ou 13,1MB indentados, e por isso o teto de arquivo é 15MB: cobre\n * as duas formas com folga.\n *\n * Na densidade desse mesmo histórico (16 Observations por laudo), 5000\n * equivalem a cerca de 300 laudos.\n */\nconst MAX_OBSERVATIONS = 5000;\nconst MAX_FILE_SIZE = 15 * 1024 * 1024; // 15MB\n\n/**\n * Resolve o código interno do biomarcador a partir do `code.coding`.\n *\n * LOINC primeiro, que é o vocabulário que arquivos de terceiros usam. Quando\n * não resolve, cai para o coding de códigos internos, presente nos arquivos\n * exportados pela própria plataforma.\n *\n * O fallback cobre dois casos: biomarcadores sem LOINC publicado (composição\n * corporal, densidade óssea, escore de cálcio) e arquivos antigos, exportados\n * quando esses biomarcadores saíam com o placeholder `99999-9`, que não\n * resolve para nada.\n */\nfunction resolveBiomarkerCode(observation: FHIRObservation): {\n internalCode?: string;\n loincCode?: string;\n reason: string;\n} {\n const coding = observation.code?.coding ?? [];\n const loincCode = coding.find((c) => c.system === LOINC_SYSTEM)?.code;\n const declaredCode = coding.find((c) => c.system === BIOMARKER_CODE_SYSTEM)?.code;\n\n const seenCodes = [\n ...(loincCode ? [`LOINC ${loincCode}`] : []),\n ...(declaredCode ? [`biomarker code ${declaredCode}`] : []),\n ];\n\n // Três motivos distintos de descarte, que antes se confundiam num só. Sem\n // essa separação, um arquivo em SNOMED relatava \"nenhum código encontrado\",\n // sugerindo `coding` vazio quando na verdade o código existia e estava num\n // system que não tratamos. Para importação de terceiros, é a diferença entre\n // um diagnóstico acionável e um enigma.\n let reason: string;\n if (seenCodes.length > 0) {\n reason = `Unknown code: ${seenCodes.join(', ')}`;\n } else if (coding.length > 0) {\n const systems = [...new Set(coding.map((c) => c.system ?? '(sem system)'))];\n reason = `No code in a supported system (found: ${systems.join(', ')})`;\n } else {\n reason = 'No code found in observation coding';\n }\n\n const fromLoinc = loincCode ? loincToCode(loincCode) : undefined;\n if (fromLoinc) return { internalCode: fromLoinc, loincCode, reason };\n\n if (declaredCode && isValidCode(declaredCode)) {\n // `isValidCode` aceita alias, mas alias não serve como código armazenado:\n // 49 definições têm um, e tanto `codeToLoinc` quanto as faixas de\n // referência são indexadas só pelo canônico. Sem normalizar, `VLDL_Cholesterol`\n // entraria no lugar de `VLDL` e perderia o LOINC 13458-5 que ele tem.\n // Importar um Bundle é fronteira de dados, que é onde `normalizeCode` deve\n // ser aplicado.\n const canonical = normalizeCode(declaredCode);\n\n // `codeToLoinc` devolve undefined para quem não tem LOINC, que é o caso\n // esperado aqui. O campo fica de fora em vez de receber um valor inventado.\n return { internalCode: canonical, loincCode: codeToLoinc(canonical), reason };\n }\n\n return { loincCode, reason };\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 { internalCode, loincCode, reason } = resolveBiomarkerCode(observation);\n\n if (!internalCode) {\n return {\n skipped: { index, loincCode, reason, resourceType: 'Observation' },\n };\n }\n\n const definition = getDefinitionByCode(internalCode);\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
+ {"version":3,"sources":["/home/runner/work/fhir-brasil/fhir-brasil/packages/core/dist/chunk-SDKLR3DT.cjs","../src/importer.ts"],"names":[],"mappings":"AAAA;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACgDA,IAAM,iBAAA,EAAmB,GAAA;AACzB,IAAM,cAAA,EAAgB,GAAA,EAAK,KAAA,EAAO,IAAA;AAclC,SAAS,oBAAA,CAAqB,WAAA,EAI5B;AACA,EAAA,MAAM,OAAA,mCAAS,WAAA,mBAAY,IAAA,6BAAM,QAAA,UAAU,CAAC,GAAA;AAC5C,EAAA,MAAM,UAAA,kBAAY,MAAA,qBAAO,IAAA,mBAAK,CAAC,CAAA,EAAA,GAAM,CAAA,CAAE,OAAA,IAAW,8BAAY,CAAA,6BAAG,MAAA;AACjE,EAAA,MAAM,aAAA,kBAAe,MAAA,qBAAO,IAAA,mBAAK,CAAC,CAAA,EAAA,GAAM,CAAA,CAAE,OAAA,IAAW,uCAAqB,CAAA,6BAAG,MAAA;AAE7E,EAAA,MAAM,UAAA,EAAY;AAAA,IAChB,GAAI,UAAA,EAAY,CAAC,CAAA,MAAA,EAAS,SAAS,CAAA,CAAA;AACf,IAAA;AACtB,EAAA;AAOI,EAAA;AACsB,EAAA;AACE,IAAA;AACE,EAAA;AACO,IAAA;AAC1B,IAAA;AACJ,EAAA;AACI,IAAA;AACX,EAAA;AAE8B,EAAA;AACN,EAAA;AAEQ,EAAA;AAOE,IAAA;AAIE,IAAA;AACpC,EAAA;AAE2B,EAAA;AAC7B;AAKmE;AACxC,EAAA;AACU,EAAA;AACA,EAAA;AAC5B,EAAA;AACT;AAK8C;AAIH,EAAA;AACR,EAAA;AAEA,EAAA;AACH,IAAA;AACP,IAAA;AACc,MAAA;AACjC,MAAA;AACF,IAAA;AAEmB,IAAA;AAEjB,MAAA;AACF,IAAA;AAE2B,IAAA;AACQ,MAAA;AACjC,MAAA;AACF,IAAA;AAEmD,IAAA;AACrD,EAAA;AAE+B,EAAA;AACjC;AAME;AAGiC,EAAA;AAEd,EAAA;AACV,IAAA;AACwB,MAAA;AAC/B,IAAA;AACF,EAAA;AAEmB,EAAA;AAGf,EAAA;AACO,EAAA;AACS,EAAA;AAEW,EAAA;AACK,IAAA;AACD,IAAA;AACC,EAAA;AACd,IAAA;AACJ,IAAA;AACX,EAAA;AACE,IAAA;AACI,MAAA;AACP,QAAA;AACA,QAAA;AACQ,QAAA;AACM,QAAA;AAChB,MAAA;AACF,IAAA;AACF,EAAA;AAGmC,EAAA;AACd,EAAA;AACZ,IAAA;AACI,MAAA;AACP,QAAA;AACA,QAAA;AACQ,QAAA;AACM,QAAA;AAChB,MAAA;AACF,IAAA;AACF,EAAA;AAGI,EAAA;AACA,EAAA;AACiC,EAAA;AACR,IAAA;AACA,IAAA;AAC7B,EAAA;AAEsC,EAAA;AACrB,IAAA;AAEK,IAAA;AACpB,IAAA;AAC6B,IAAA;AAC7B,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACkC,IAAA;AAClC,IAAA;AACF,EAAA;AAE+B,EAAA;AACjC;AAKqE;AAE1C,EAAA;AACQ,EAAA;AACxB,IAAA;AACG,MAAA;AACG,MAAA;AACD,MAAA;AACM,MAAA;AAClB,IAAA;AACF,EAAA;AAEe,EAAA;AAGmB,EAAA;AAGO,EAAA;AACK,EAAA;AAEb,EAAA;AAChB,IAAA;AAEc,IAAA;AACK,MAAA;AAC3B,IAAA;AACyB,MAAA;AAChC,IAAA;AACF,EAAA;AAEO,EAAA;AACI,IAAA;AACT,IAAA;AACS,IAAA;AACoB,IAAA;AAC/B,EAAA;AACF;ADnIuC;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/fhir-brasil/fhir-brasil/packages/core/dist/chunk-SDKLR3DT.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 {\n codeToLoinc,\n getDefinitionByCode,\n isValidCode,\n loincToCode,\n normalizeCode,\n} from './biomarkers';\nimport { BIOMARKER_CODE_SYSTEM, LOINC_SYSTEM } from './code-systems';\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 /** Ausente nos biomarcadores sem LOINC publicado, como composição corporal. */\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\n/**\n * Limites de importação.\n *\n * Uma Observation exportada ocupa cerca de 1,25KB em JSON compacto e 2,75KB\n * quando o arquivo vem indentado, medido sobre um histórico real de 998\n * Observations em 61 laudos. Nesse tamanho, 5000 Observations dão 6,0MB\n * compactos ou 13,1MB indentados, e por isso o teto de arquivo é 15MB: cobre\n * as duas formas com folga.\n *\n * Na densidade desse mesmo histórico (16 Observations por laudo), 5000\n * equivalem a cerca de 300 laudos.\n */\nconst MAX_OBSERVATIONS = 5000;\nconst MAX_FILE_SIZE = 15 * 1024 * 1024; // 15MB\n\n/**\n * Resolve o código interno do biomarcador a partir do `code.coding`.\n *\n * LOINC primeiro, que é o vocabulário que arquivos de terceiros usam. Quando\n * não resolve, cai para o coding de códigos internos, presente nos arquivos\n * exportados pela própria plataforma.\n *\n * O fallback cobre dois casos: biomarcadores sem LOINC publicado (composição\n * corporal, densidade óssea, escore de cálcio) e arquivos antigos, exportados\n * quando esses biomarcadores saíam com o placeholder `99999-9`, que não\n * resolve para nada.\n */\nfunction resolveBiomarkerCode(observation: FHIRObservation): {\n internalCode?: string;\n loincCode?: string;\n reason: string;\n} {\n const coding = observation.code?.coding ?? [];\n const loincCode = coding.find((c) => c.system === LOINC_SYSTEM)?.code;\n const declaredCode = coding.find((c) => c.system === BIOMARKER_CODE_SYSTEM)?.code;\n\n const seenCodes = [\n ...(loincCode ? [`LOINC ${loincCode}`] : []),\n ...(declaredCode ? [`biomarker code ${declaredCode}`] : []),\n ];\n\n // Três motivos distintos de descarte, que antes se confundiam num só. Sem\n // essa separação, um arquivo em SNOMED relatava \"nenhum código encontrado\",\n // sugerindo `coding` vazio quando na verdade o código existia e estava num\n // system que não tratamos. Para importação de terceiros, é a diferença entre\n // um diagnóstico acionável e um enigma.\n let reason: string;\n if (seenCodes.length > 0) {\n reason = `Unknown code: ${seenCodes.join(', ')}`;\n } else if (coding.length > 0) {\n const systems = [...new Set(coding.map((c) => c.system ?? '(sem system)'))];\n reason = `No code in a supported system (found: ${systems.join(', ')})`;\n } else {\n reason = 'No code found in observation coding';\n }\n\n const fromLoinc = loincCode ? loincToCode(loincCode) : undefined;\n if (fromLoinc) return { internalCode: fromLoinc, loincCode, reason };\n\n if (declaredCode && isValidCode(declaredCode)) {\n // `isValidCode` aceita alias, mas alias não serve como código armazenado:\n // 49 definições têm um, e tanto `codeToLoinc` quanto as faixas de\n // referência são indexadas só pelo canônico. Sem normalizar, `VLDL_Cholesterol`\n // entraria no lugar de `VLDL` e perderia o LOINC 13458-5 que ele tem.\n // Importar um Bundle é fronteira de dados, que é onde `normalizeCode` deve\n // ser aplicado.\n const canonical = normalizeCode(declaredCode);\n\n // `codeToLoinc` devolve undefined para quem não tem LOINC, que é o caso\n // esperado aqui. O campo fica de fora em vez de receber um valor inventado.\n return { internalCode: canonical, loincCode: codeToLoinc(canonical), reason };\n }\n\n return { loincCode, reason };\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 { internalCode, loincCode, reason } = resolveBiomarkerCode(observation);\n\n if (!internalCode) {\n return {\n skipped: { index, loincCode, reason, resourceType: 'Observation' },\n };\n }\n\n const definition = getDefinitionByCode(internalCode);\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"]}
package/dist/cli.js CHANGED
@@ -2692,13 +2692,30 @@ var BIOMARKER_DEFINITIONS = [
2692
2692
  // Regional Body Composition (DEXA)
2693
2693
  // Note: No official LOINC codes exist for regional lean/fat mass measurements
2694
2694
  // Hidden from UI for now - may be shown in future regional breakdown view
2695
+ //
2696
+ // "Arms Total" e "Legs Total" são a linha dos dois membros somados na tabela
2697
+ // de equilíbrio muscular do laudo da Live Lean (GE Lunar Prodigy). Conferido
2698
+ // em cinco laudos: a massa gorda e a magra dessa linha são a soma do lado
2699
+ // direito com o esquerdo, e são o mesmo número das colunas "Arms Fat" e
2700
+ // "Arms Lean" da tabela de tendência e da linha "Arms" da tabela regional.
2701
+ // O modelo nomeia a linha "Arms Total Fat Mass", e sem o nome ela virava
2702
+ // `UNKNOWN_`, enquanto a mesma medida em outra página ia para `ArmsFatMass`:
2703
+ // a série do gráfico partia em dois códigos. O `codeAliases` cobre o que já
2704
+ // foi gravado assim.
2705
+ //
2706
+ // As outras colunas da mesma linha ficam sem código de propósito. "Fat %" e
2707
+ // "Lean %" são percentual do membro, e "Total Mass" é a massa do membro;
2708
+ // o catálogo não tem código regional para nenhum dos dois. "Right Arm" e
2709
+ // "Left Arm" são um lado só, e "Arms Difference" é direito menos esquerdo.
2695
2710
  {
2696
2711
  category: "composicao-corporal",
2697
2712
  code: "ArmsLeanMass",
2713
+ codeAliases: ["UNKNOWN_Arms_Total_Lean_Mass"],
2698
2714
  hidden: true,
2699
2715
  names: {
2700
2716
  en: [
2701
2717
  "Arms Lean Mass",
2718
+ "Arms Total Lean Mass",
2702
2719
  "Arms Lean",
2703
2720
  "Arms Lean Tissue",
2704
2721
  "Arm Lean Mass",
@@ -2725,10 +2742,12 @@ var BIOMARKER_DEFINITIONS = [
2725
2742
  {
2726
2743
  category: "composicao-corporal",
2727
2744
  code: "ArmsFatMass",
2745
+ codeAliases: ["UNKNOWN_Arms_Total_Fat_Mass"],
2728
2746
  hidden: true,
2729
2747
  names: {
2730
2748
  en: [
2731
2749
  "Arms Fat Mass",
2750
+ "Arms Total Fat Mass",
2732
2751
  "Arms Fat",
2733
2752
  "Arms Fat Tissue",
2734
2753
  "Arm Fat Mass",
@@ -2756,10 +2775,12 @@ var BIOMARKER_DEFINITIONS = [
2756
2775
  {
2757
2776
  category: "composicao-corporal",
2758
2777
  code: "LegsLeanMass",
2778
+ codeAliases: ["UNKNOWN_Legs_Total_Lean_Mass"],
2759
2779
  hidden: true,
2760
2780
  names: {
2761
2781
  en: [
2762
2782
  "Legs Lean Mass",
2783
+ "Legs Total Lean Mass",
2763
2784
  "Legs Lean",
2764
2785
  "Legs Lean Tissue",
2765
2786
  "Leg Lean Mass",
@@ -2786,10 +2807,12 @@ var BIOMARKER_DEFINITIONS = [
2786
2807
  {
2787
2808
  category: "composicao-corporal",
2788
2809
  code: "LegsFatMass",
2810
+ codeAliases: ["UNKNOWN_Legs_Total_Fat_Mass"],
2789
2811
  hidden: true,
2790
2812
  names: {
2791
2813
  en: [
2792
2814
  "Legs Fat Mass",
2815
+ "Legs Total Fat Mass",
2793
2816
  "Legs Fat",
2794
2817
  "Legs Fat Tissue",
2795
2818
  "Leg Fat Mass",
@@ -6814,7 +6837,7 @@ async function main() {
6814
6837
  strict: false
6815
6838
  });
6816
6839
  if (values.version) {
6817
- process.stdout.write(`${"0.31.4"}
6840
+ process.stdout.write(`${"0.31.5"}
6818
6841
  `);
6819
6842
  return;
6820
6843
  }
@@ -3,14 +3,14 @@
3
3
 
4
4
 
5
5
 
6
- var _chunkL4Y4GPKOcjs = require('./chunk-L4Y4GPKO.cjs');
6
+ var _chunkEXOKBY6Dcjs = require('./chunk-EXOKBY6D.cjs');
7
7
  require('./chunk-OR67NJDZ.cjs');
8
- require('./chunk-ECUM5SFP.cjs');
8
+ require('./chunk-QOXTLPQ2.cjs');
9
9
  require('./chunk-AZTZYOAV.cjs');
10
10
 
11
11
 
12
12
 
13
13
 
14
14
 
15
- exports.labObservationToFHIR = _chunkL4Y4GPKOcjs.labObservationToFHIR; exports.labReportToFHIR = _chunkL4Y4GPKOcjs.labReportToFHIR; exports.labResultToFHIRBundle = _chunkL4Y4GPKOcjs.labResultToFHIRBundle; exports.userProfileToFHIR = _chunkL4Y4GPKOcjs.userProfileToFHIR;
15
+ exports.labObservationToFHIR = _chunkEXOKBY6Dcjs.labObservationToFHIR; exports.labReportToFHIR = _chunkEXOKBY6Dcjs.labReportToFHIR; exports.labResultToFHIRBundle = _chunkEXOKBY6Dcjs.labResultToFHIRBundle; exports.userProfileToFHIR = _chunkEXOKBY6Dcjs.userProfileToFHIR;
16
16
  //# sourceMappingURL=converter.cjs.map
package/dist/converter.js CHANGED
@@ -3,9 +3,9 @@ import {
3
3
  labReportToFHIR,
4
4
  labResultToFHIRBundle,
5
5
  userProfileToFHIR
6
- } from "./chunk-C2KPVIOY.js";
6
+ } from "./chunk-6OG25HIE.js";
7
7
  import "./chunk-A6HR4XDK.js";
8
- import "./chunk-IBF7TKQH.js";
8
+ import "./chunk-PK5DQMPC.js";
9
9
  import "./chunk-3XIMPALK.js";
10
10
  export {
11
11
  labObservationToFHIR,
package/dist/importer.cjs CHANGED
@@ -4,9 +4,9 @@
4
4
 
5
5
 
6
6
 
7
- var _chunkCKDOYXRIcjs = require('./chunk-CKDOYXRI.cjs');
7
+ var _chunkSDKLR3DTcjs = require('./chunk-SDKLR3DT.cjs');
8
8
  require('./chunk-OR67NJDZ.cjs');
9
- require('./chunk-ECUM5SFP.cjs');
9
+ require('./chunk-QOXTLPQ2.cjs');
10
10
  require('./chunk-3ILBFLVQ.cjs');
11
11
 
12
12
 
@@ -14,5 +14,5 @@ require('./chunk-3ILBFLVQ.cjs');
14
14
 
15
15
 
16
16
 
17
- exports.MAX_FILE_SIZE = _chunkCKDOYXRIcjs.MAX_FILE_SIZE; exports.MAX_OBSERVATIONS = _chunkCKDOYXRIcjs.MAX_OBSERVATIONS; exports.extractObservationsFromBundle = _chunkCKDOYXRIcjs.extractObservationsFromBundle; exports.mapFHIRObservationToInternal = _chunkCKDOYXRIcjs.mapFHIRObservationToInternal; exports.processImportBundle = _chunkCKDOYXRIcjs.processImportBundle;
17
+ exports.MAX_FILE_SIZE = _chunkSDKLR3DTcjs.MAX_FILE_SIZE; exports.MAX_OBSERVATIONS = _chunkSDKLR3DTcjs.MAX_OBSERVATIONS; exports.extractObservationsFromBundle = _chunkSDKLR3DTcjs.extractObservationsFromBundle; exports.mapFHIRObservationToInternal = _chunkSDKLR3DTcjs.mapFHIRObservationToInternal; exports.processImportBundle = _chunkSDKLR3DTcjs.processImportBundle;
18
18
  //# sourceMappingURL=importer.cjs.map
package/dist/importer.js CHANGED
@@ -4,9 +4,9 @@ import {
4
4
  extractObservationsFromBundle,
5
5
  mapFHIRObservationToInternal,
6
6
  processImportBundle
7
- } from "./chunk-ROENTXQW.js";
7
+ } from "./chunk-RM7KJAVA.js";
8
8
  import "./chunk-A6HR4XDK.js";
9
- import "./chunk-IBF7TKQH.js";
9
+ import "./chunk-PK5DQMPC.js";
10
10
  import "./chunk-N3ZCOLG2.js";
11
11
  export {
12
12
  MAX_FILE_SIZE,
package/dist/index.cjs CHANGED
@@ -5,14 +5,14 @@
5
5
 
6
6
 
7
7
 
8
- var _chunkL4Y4GPKOcjs = require('./chunk-L4Y4GPKO.cjs');
8
+ var _chunkEXOKBY6Dcjs = require('./chunk-EXOKBY6D.cjs');
9
9
 
10
10
 
11
11
 
12
12
 
13
13
 
14
14
 
15
- var _chunkCKDOYXRIcjs = require('./chunk-CKDOYXRI.cjs');
15
+ var _chunkSDKLR3DTcjs = require('./chunk-SDKLR3DT.cjs');
16
16
 
17
17
 
18
18
 
@@ -49,7 +49,7 @@ var _chunkOR67NJDZcjs = require('./chunk-OR67NJDZ.cjs');
49
49
 
50
50
 
51
51
 
52
- var _chunkECUM5SFPcjs = require('./chunk-ECUM5SFP.cjs');
52
+ var _chunkQOXTLPQ2cjs = require('./chunk-QOXTLPQ2.cjs');
53
53
 
54
54
 
55
55
 
@@ -234,14 +234,14 @@ function interventionToFHIRObservation(intervention, patientId) {
234
234
  }
235
235
  function interventionsToFHIRBundle(interventions, userProfile) {
236
236
  const patientId = userProfile.userId;
237
- const fhirPatient = _chunkL4Y4GPKOcjs.userProfileToFHIR.call(void 0, userProfile);
237
+ const fhirPatient = _chunkEXOKBY6Dcjs.userProfileToFHIR.call(void 0, userProfile);
238
238
  const entries = interventions.map((intervention) => {
239
239
  const isMedication = intervention.type === "medication" || intervention.type === "supplement";
240
240
  const resource = isMedication ? interventionToFHIRMedicationStatement(intervention, patientId) : interventionToFHIRObservation(intervention, patientId);
241
- return { fullUrl: _chunkL4Y4GPKOcjs.entryFullUrl.call(void 0, resource), resource };
241
+ return { fullUrl: _chunkEXOKBY6Dcjs.entryFullUrl.call(void 0, resource), resource };
242
242
  });
243
243
  return {
244
- entry: [{ fullUrl: _chunkL4Y4GPKOcjs.entryFullUrl.call(void 0, fhirPatient), resource: fhirPatient }, ...entries],
244
+ entry: [{ fullUrl: _chunkEXOKBY6Dcjs.entryFullUrl.call(void 0, fhirPatient), resource: fhirPatient }, ...entries],
245
245
  resourceType: "Bundle",
246
246
  type: "collection"
247
247
  };
@@ -738,5 +738,5 @@ var specimenTypeCoding = (text) => BY_NORMALIZED_TEXT.get(normalize(text));
738
738
 
739
739
 
740
740
 
741
- exports.AGE_BRACKETS = AGE_BRACKETS; exports.BIOMARKER_CODE_SYSTEM = _chunkOR67NJDZcjs.BIOMARKER_CODE_SYSTEM; exports.BIOMARKER_DEFAULT_UNIT = _chunkAZTZYOAVcjs.BIOMARKER_DEFAULT_UNIT; exports.BIOMARKER_DEFINITIONS = _chunkECUM5SFPcjs.BIOMARKER_DEFINITIONS; exports.BIOMARKER_UNITS = _chunkAZTZYOAVcjs.BIOMARKER_UNITS; exports.BODY_FAT_ZONES = BODY_FAT_ZONES; exports.BR_TIPO_AMOSTRA_VALUESET = BR_TIPO_AMOSTRA_VALUESET; exports.BUNDLE_BASE_URL = _chunkL4Y4GPKOcjs.BUNDLE_BASE_URL; exports.CAC_INDICATOR_CODES = _chunkECUM5SFPcjs.CAC_INDICATOR_CODES; exports.CATEGORY_GROUPS = CATEGORY_GROUPS; exports.CATEGORY_SCREENING_INTERVALS = CATEGORY_SCREENING_INTERVALS; exports.DEXA_CATEGORIES = _chunkECUM5SFPcjs.DEXA_CATEGORIES; exports.DEXA_INDICATOR_CODES = _chunkECUM5SFPcjs.DEXA_INDICATOR_CODES; exports.FHIR_BRASIL_EXTENSIONS = FHIR_BRASIL_EXTENSIONS; exports.HL7_SPECIMEN_TYPE_SYSTEM = HL7_SPECIMEN_TYPE_SYSTEM; exports.IG_CANONICAL = IG_CANONICAL; exports.LOINC_SYSTEM = _chunkOR67NJDZcjs.LOINC_SYSTEM; exports.MAX_FILE_SIZE = _chunkCKDOYXRIcjs.MAX_FILE_SIZE; exports.MAX_OBSERVATIONS = _chunkCKDOYXRIcjs.MAX_OBSERVATIONS; exports.T_SCORE_ZONES = T_SCORE_ZONES; exports.UNIT_TO_UCUM = _chunkAZTZYOAVcjs.UNIT_TO_UCUM; exports.ZONE_DEFS = ZONE_DEFS; exports.applyFallbackReferenceRanges = _chunk555WKD6Jcjs.applyFallbackReferenceRanges; exports.biomarkerRangeDefinitions = _chunk555WKD6Jcjs.biomarkerRangeDefinitions; exports.calculateNextScreeningDate = calculateNextScreeningDate; exports.cnsToFHIRIdentifier = cnsToFHIRIdentifier; exports.codeToLoinc = _chunkECUM5SFPcjs.codeToLoinc; exports.convertUnit = _chunkAZTZYOAVcjs.convertUnit; exports.cpfToFHIRIdentifier = cpfToFHIRIdentifier; exports.defaultReferenceRanges = _chunk555WKD6Jcjs.defaultReferenceRanges; exports.entryFullUrl = _chunkL4Y4GPKOcjs.entryFullUrl; exports.extractObservationsFromBundle = _chunkCKDOYXRIcjs.extractObservationsFromBundle; exports.filterVisibleBiomarkers = _chunkECUM5SFPcjs.filterVisibleBiomarkers; exports.findCodeByName = _chunkECUM5SFPcjs.findCodeByName; exports.formatCNS = formatCNS; exports.formatCPF = formatCPF; exports.generateCacFullReference = _chunkECUM5SFPcjs.generateCacFullReference; exports.generateDexaFullReference = _chunkECUM5SFPcjs.generateDexaFullReference; exports.generateFilteredLLMReference = _chunkECUM5SFPcjs.generateFilteredLLMReference; exports.generateLLMReference = _chunkECUM5SFPcjs.generateLLMReference; exports.getAllCodes = _chunkECUM5SFPcjs.getAllCodes; exports.getAllDefinitions = _chunkECUM5SFPcjs.getAllDefinitions; exports.getAllLoincCodes = _chunkECUM5SFPcjs.getAllLoincCodes; exports.getAllSearchPatterns = _chunkECUM5SFPcjs.getAllSearchPatterns; exports.getBiomarkersByCategory = _chunkECUM5SFPcjs.getBiomarkersByCategory; exports.getBiomarkersForCategories = _chunkECUM5SFPcjs.getBiomarkersForCategories; exports.getCanonicalUnit = _chunkAZTZYOAVcjs.getCanonicalUnit; exports.getCategoriesByInterval = getCategoriesByInterval; exports.getCategoryGroup = getCategoryGroup; exports.getDaysUntilScreening = getDaysUntilScreening; exports.getDefaultUnit = _chunkAZTZYOAVcjs.getDefaultUnit; exports.getDefinitionByCode = _chunkECUM5SFPcjs.getDefinitionByCode; exports.getDefinitionByLoinc = _chunkECUM5SFPcjs.getDefinitionByLoinc; exports.getDefinitionsBySex = _chunkECUM5SFPcjs.getDefinitionsBySex; exports.getDueCategories = getDueCategories; exports.getFallbackReferenceRange = _chunk555WKD6Jcjs.getFallbackReferenceRange; exports.getRangeDirection = _chunk555WKD6Jcjs.getRangeDirection; exports.getReferenceRange = _chunk555WKD6Jcjs.getReferenceRange; exports.getSIUnit = _chunkAZTZYOAVcjs.getSIUnit; exports.getScreeningInterval = getScreeningInterval; exports.getSexForCode = _chunkECUM5SFPcjs.getSexForCode; exports.getVisibleDefinitions = _chunkECUM5SFPcjs.getVisibleDefinitions; exports.interventionToFHIRMedicationStatement = interventionToFHIRMedicationStatement; exports.interventionToFHIRObservation = interventionToFHIRObservation; exports.interventionsToFHIRBundle = interventionsToFHIRBundle; exports.isBiomarkerVisible = _chunkECUM5SFPcjs.isBiomarkerVisible; exports.isCacDocument = _chunkECUM5SFPcjs.isCacDocument; exports.isDexaDocument = _chunkECUM5SFPcjs.isDexaDocument; exports.isScreeningDue = isScreeningDue; exports.isValidCode = _chunkECUM5SFPcjs.isValidCode; exports.isValidLoinc = _chunkECUM5SFPcjs.isValidLoinc; exports.labObservationToFHIR = _chunkL4Y4GPKOcjs.labObservationToFHIR; exports.labReportToFHIR = _chunkL4Y4GPKOcjs.labReportToFHIR; exports.labResultToFHIRBundle = _chunkL4Y4GPKOcjs.labResultToFHIRBundle; exports.listMappedSubcategories = listMappedSubcategories; exports.loincToCode = _chunkECUM5SFPcjs.loincToCode; exports.mapFHIRObservationToInternal = _chunkCKDOYXRIcjs.mapFHIRObservationToInternal; exports.normalizeCode = _chunkECUM5SFPcjs.normalizeCode; exports.plural = plural; exports.pluralCount = pluralCount; exports.pluralPhrase = pluralPhrase; exports.pluralPhraseCount = pluralPhraseCount; exports.processImportBundle = _chunkCKDOYXRIcjs.processImportBundle; exports.specimenTypeCoding = specimenTypeCoding; exports.toBiomarkerTests = _chunkECUM5SFPcjs.toBiomarkerTests; exports.unitToUCUM = _chunkAZTZYOAVcjs.unitToUCUM; exports.userProfileToFHIR = _chunkL4Y4GPKOcjs.userProfileToFHIR; exports.validateCNS = validateCNS; exports.validateCPF = validateCPF; exports.validateFHIRDiagnosticReport = _chunk3ILBFLVQcjs.validateFHIRDiagnosticReport; exports.validateFHIRImportBundle = _chunk3ILBFLVQcjs.validateFHIRImportBundle; exports.validateFHIRObservation = _chunk3ILBFLVQcjs.validateFHIRObservation; exports.validateLoincNameMatch = _chunkECUM5SFPcjs.validateLoincNameMatch;
741
+ exports.AGE_BRACKETS = AGE_BRACKETS; exports.BIOMARKER_CODE_SYSTEM = _chunkOR67NJDZcjs.BIOMARKER_CODE_SYSTEM; exports.BIOMARKER_DEFAULT_UNIT = _chunkAZTZYOAVcjs.BIOMARKER_DEFAULT_UNIT; exports.BIOMARKER_DEFINITIONS = _chunkQOXTLPQ2cjs.BIOMARKER_DEFINITIONS; exports.BIOMARKER_UNITS = _chunkAZTZYOAVcjs.BIOMARKER_UNITS; exports.BODY_FAT_ZONES = BODY_FAT_ZONES; exports.BR_TIPO_AMOSTRA_VALUESET = BR_TIPO_AMOSTRA_VALUESET; exports.BUNDLE_BASE_URL = _chunkEXOKBY6Dcjs.BUNDLE_BASE_URL; exports.CAC_INDICATOR_CODES = _chunkQOXTLPQ2cjs.CAC_INDICATOR_CODES; exports.CATEGORY_GROUPS = CATEGORY_GROUPS; exports.CATEGORY_SCREENING_INTERVALS = CATEGORY_SCREENING_INTERVALS; exports.DEXA_CATEGORIES = _chunkQOXTLPQ2cjs.DEXA_CATEGORIES; exports.DEXA_INDICATOR_CODES = _chunkQOXTLPQ2cjs.DEXA_INDICATOR_CODES; exports.FHIR_BRASIL_EXTENSIONS = FHIR_BRASIL_EXTENSIONS; exports.HL7_SPECIMEN_TYPE_SYSTEM = HL7_SPECIMEN_TYPE_SYSTEM; exports.IG_CANONICAL = IG_CANONICAL; exports.LOINC_SYSTEM = _chunkOR67NJDZcjs.LOINC_SYSTEM; exports.MAX_FILE_SIZE = _chunkSDKLR3DTcjs.MAX_FILE_SIZE; exports.MAX_OBSERVATIONS = _chunkSDKLR3DTcjs.MAX_OBSERVATIONS; exports.T_SCORE_ZONES = T_SCORE_ZONES; exports.UNIT_TO_UCUM = _chunkAZTZYOAVcjs.UNIT_TO_UCUM; exports.ZONE_DEFS = ZONE_DEFS; exports.applyFallbackReferenceRanges = _chunk555WKD6Jcjs.applyFallbackReferenceRanges; exports.biomarkerRangeDefinitions = _chunk555WKD6Jcjs.biomarkerRangeDefinitions; exports.calculateNextScreeningDate = calculateNextScreeningDate; exports.cnsToFHIRIdentifier = cnsToFHIRIdentifier; exports.codeToLoinc = _chunkQOXTLPQ2cjs.codeToLoinc; exports.convertUnit = _chunkAZTZYOAVcjs.convertUnit; exports.cpfToFHIRIdentifier = cpfToFHIRIdentifier; exports.defaultReferenceRanges = _chunk555WKD6Jcjs.defaultReferenceRanges; exports.entryFullUrl = _chunkEXOKBY6Dcjs.entryFullUrl; exports.extractObservationsFromBundle = _chunkSDKLR3DTcjs.extractObservationsFromBundle; exports.filterVisibleBiomarkers = _chunkQOXTLPQ2cjs.filterVisibleBiomarkers; exports.findCodeByName = _chunkQOXTLPQ2cjs.findCodeByName; exports.formatCNS = formatCNS; exports.formatCPF = formatCPF; exports.generateCacFullReference = _chunkQOXTLPQ2cjs.generateCacFullReference; exports.generateDexaFullReference = _chunkQOXTLPQ2cjs.generateDexaFullReference; exports.generateFilteredLLMReference = _chunkQOXTLPQ2cjs.generateFilteredLLMReference; exports.generateLLMReference = _chunkQOXTLPQ2cjs.generateLLMReference; exports.getAllCodes = _chunkQOXTLPQ2cjs.getAllCodes; exports.getAllDefinitions = _chunkQOXTLPQ2cjs.getAllDefinitions; exports.getAllLoincCodes = _chunkQOXTLPQ2cjs.getAllLoincCodes; exports.getAllSearchPatterns = _chunkQOXTLPQ2cjs.getAllSearchPatterns; exports.getBiomarkersByCategory = _chunkQOXTLPQ2cjs.getBiomarkersByCategory; exports.getBiomarkersForCategories = _chunkQOXTLPQ2cjs.getBiomarkersForCategories; exports.getCanonicalUnit = _chunkAZTZYOAVcjs.getCanonicalUnit; exports.getCategoriesByInterval = getCategoriesByInterval; exports.getCategoryGroup = getCategoryGroup; exports.getDaysUntilScreening = getDaysUntilScreening; exports.getDefaultUnit = _chunkAZTZYOAVcjs.getDefaultUnit; exports.getDefinitionByCode = _chunkQOXTLPQ2cjs.getDefinitionByCode; exports.getDefinitionByLoinc = _chunkQOXTLPQ2cjs.getDefinitionByLoinc; exports.getDefinitionsBySex = _chunkQOXTLPQ2cjs.getDefinitionsBySex; exports.getDueCategories = getDueCategories; exports.getFallbackReferenceRange = _chunk555WKD6Jcjs.getFallbackReferenceRange; exports.getRangeDirection = _chunk555WKD6Jcjs.getRangeDirection; exports.getReferenceRange = _chunk555WKD6Jcjs.getReferenceRange; exports.getSIUnit = _chunkAZTZYOAVcjs.getSIUnit; exports.getScreeningInterval = getScreeningInterval; exports.getSexForCode = _chunkQOXTLPQ2cjs.getSexForCode; exports.getVisibleDefinitions = _chunkQOXTLPQ2cjs.getVisibleDefinitions; exports.interventionToFHIRMedicationStatement = interventionToFHIRMedicationStatement; exports.interventionToFHIRObservation = interventionToFHIRObservation; exports.interventionsToFHIRBundle = interventionsToFHIRBundle; exports.isBiomarkerVisible = _chunkQOXTLPQ2cjs.isBiomarkerVisible; exports.isCacDocument = _chunkQOXTLPQ2cjs.isCacDocument; exports.isDexaDocument = _chunkQOXTLPQ2cjs.isDexaDocument; exports.isScreeningDue = isScreeningDue; exports.isValidCode = _chunkQOXTLPQ2cjs.isValidCode; exports.isValidLoinc = _chunkQOXTLPQ2cjs.isValidLoinc; exports.labObservationToFHIR = _chunkEXOKBY6Dcjs.labObservationToFHIR; exports.labReportToFHIR = _chunkEXOKBY6Dcjs.labReportToFHIR; exports.labResultToFHIRBundle = _chunkEXOKBY6Dcjs.labResultToFHIRBundle; exports.listMappedSubcategories = listMappedSubcategories; exports.loincToCode = _chunkQOXTLPQ2cjs.loincToCode; exports.mapFHIRObservationToInternal = _chunkSDKLR3DTcjs.mapFHIRObservationToInternal; exports.normalizeCode = _chunkQOXTLPQ2cjs.normalizeCode; exports.plural = plural; exports.pluralCount = pluralCount; exports.pluralPhrase = pluralPhrase; exports.pluralPhraseCount = pluralPhraseCount; exports.processImportBundle = _chunkSDKLR3DTcjs.processImportBundle; exports.specimenTypeCoding = specimenTypeCoding; exports.toBiomarkerTests = _chunkQOXTLPQ2cjs.toBiomarkerTests; exports.unitToUCUM = _chunkAZTZYOAVcjs.unitToUCUM; exports.userProfileToFHIR = _chunkEXOKBY6Dcjs.userProfileToFHIR; exports.validateCNS = validateCNS; exports.validateCPF = validateCPF; exports.validateFHIRDiagnosticReport = _chunk3ILBFLVQcjs.validateFHIRDiagnosticReport; exports.validateFHIRImportBundle = _chunk3ILBFLVQcjs.validateFHIRImportBundle; exports.validateFHIRObservation = _chunk3ILBFLVQcjs.validateFHIRObservation; exports.validateLoincNameMatch = _chunkQOXTLPQ2cjs.validateLoincNameMatch;
742
742
  //# sourceMappingURL=index.cjs.map
package/dist/index.js CHANGED
@@ -5,14 +5,14 @@ import {
5
5
  labReportToFHIR,
6
6
  labResultToFHIRBundle,
7
7
  userProfileToFHIR
8
- } from "./chunk-C2KPVIOY.js";
8
+ } from "./chunk-6OG25HIE.js";
9
9
  import {
10
10
  MAX_FILE_SIZE,
11
11
  MAX_OBSERVATIONS,
12
12
  extractObservationsFromBundle,
13
13
  mapFHIRObservationToInternal,
14
14
  processImportBundle
15
- } from "./chunk-ROENTXQW.js";
15
+ } from "./chunk-RM7KJAVA.js";
16
16
  import {
17
17
  BIOMARKER_CODE_SYSTEM,
18
18
  LOINC_SYSTEM
@@ -49,7 +49,7 @@ import {
49
49
  normalizeCode,
50
50
  toBiomarkerTests,
51
51
  validateLoincNameMatch
52
- } from "./chunk-IBF7TKQH.js";
52
+ } from "./chunk-PK5DQMPC.js";
53
53
  import {
54
54
  applyFallbackReferenceRanges,
55
55
  biomarkerRangeDefinitions,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@precisa-saude/fhir",
3
- "version": "0.31.4",
3
+ "version": "0.31.5",
4
4
  "description": "Tipos FHIR R4, definições de biomarcadores, faixas de referência e conversores para o ecossistema de saúde brasileiro",
5
5
  "keywords": [
6
6
  "fhir",