@precisa-saude/fhir 0.1.8 → 0.3.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/reference-ranges.ts"],"sourcesContent":["/**\n * Biomarker Reference Ranges\n *\n * Single source of truth for biomarker reference ranges used by both\n * web app (for display) and API (for fallback when LLM doesn't extract ranges).\n *\n * Data sources (priority order):\n * 1. Brazilian Government - SBPC/ML (Sociedade Brasileira de Patologia Clínica) guidelines\n * 2. International Standards - WHO, clinical laboratory guidelines\n * 3. Specific Labs - Fleury, Weinmann, Quest, LabCorp (when above unavailable)\n */\n\nimport { getCanonicalUnit as getCanonicalUnitForCode } from './units';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * Sex-specific key for reference ranges\n */\nexport type SexKey = 'M' | 'F' | 'all';\n\n/**\n * Reference range configuration for a biomarker\n */\nexport interface BiomarkerReferenceRange {\n max?: number;\n min?: number;\n optimalMax?: number;\n optimalMin?: number;\n unit: string;\n warningMax?: number;\n}\n\n/**\n * A variant of a reference range that applies to a specific sex and/or age group\n */\nexport interface RangeVariant {\n ageMax?: number;\n ageMin?: number;\n range: BiomarkerReferenceRange;\n sex: SexKey;\n}\n\n/**\n * Extended biomarker range definition with sex/age-specific variants\n */\n/**\n * Direction indicates whether exceeding the reference range on one side is benign.\n * - 'range': both above-max and below-min are abnormal (default)\n * - 'higher-better': above-max is normal (e.g., BMC, HDL)\n * - 'lower-better': below-min is normal (e.g., LDL, CRP)\n */\nexport type RangeDirection = 'range' | 'higher-better' | 'lower-better';\n\nexport interface BiomarkerRangeDefinition {\n default: BiomarkerReferenceRange;\n direction?: RangeDirection;\n /**\n * Chave de fonte bibliográfica, opcionalmente com localizador.\n *\n * Formato: `'chave'` ou `'chave:localizador'`\n *\n * Exemplos:\n * - `'sbc-lipids-2017'` — fonte sem localização específica\n * - `'sbc-lipids-2017:p15'` — página 15\n * - `'sbpc-ml-2021:t4.1'` — tabela 4.1\n *\n * As chaves devem corresponder a entradas em `SOURCE_REGISTRY` (sources.ts).\n * Consulte `docs/fontes-referencia.md` para a bibliografia completa em formato ABNT.\n */\n source?: string;\n variants?: RangeVariant[];\n}\n\n/**\n * User context for personalized reference range lookup\n */\nexport interface ReferenceRangeContext {\n age?: number;\n biologicalSex?: 'M' | 'F';\n}\n\n// =============================================================================\n// BIOMARKER RANGE DEFINITIONS\n// =============================================================================\n\n/**\n * Comprehensive biomarker reference range definitions with sex/age-specific variants\n *\n * Each marker has a default range (used as fallback) and optional variants\n * for sex/age-specific ranges.\n */\nexport const biomarkerRangeDefinitions: Record<string, BiomarkerRangeDefinition> = {\n // =============================================================================\n // LIPIDS\n // =============================================================================\n\n Albumin_Creatinine_Ratio: {\n default: { max: 30, min: 0, optimalMax: 20, optimalMin: 0, unit: 'mg/g' },\n source: 'tietz-7ed-2015',\n },\n\n Adiponectin: {\n default: { max: 26, min: 4, optimalMax: 20, optimalMin: 8, unit: 'mcg/mL' },\n source: 'tietz-7ed-2015',\n },\n\n ADMA: {\n default: { max: 0.7, min: 0.3, optimalMax: 0.55, optimalMin: 0.3, unit: 'umol/L' },\n source: 'nemeth-adma-2017',\n },\n\n AFP: {\n default: { max: 10, min: 0, optimalMax: 8, optimalMin: 0, unit: 'ng/mL' },\n source: 'sturgeon-nacb-2008',\n },\n\n Albumin_Globulin_Ratio: {\n default: { max: 2.5, min: 1.0, optimalMax: 2.2, optimalMin: 1.2, unit: '' },\n source: 'tietz-7ed-2015',\n },\n\n Albumin: {\n default: { max: 5.0, min: 3.5, optimalMax: 4.8, optimalMin: 4.0, unit: 'g/dL' },\n source: 'pns-bioquimica-2019',\n },\n\n AlkalinePhosphatase: {\n default: { max: 147, min: 44, optimalMax: 120, optimalMin: 50, unit: 'U/L' },\n source: 'tietz-7ed-2015',\n variants: [\n {\n ageMin: 18,\n range: { max: 147, min: 44, optimalMax: 120, optimalMin: 50, unit: 'U/L' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 104, min: 35, optimalMax: 90, optimalMin: 40, unit: 'U/L' },\n sex: 'F',\n },\n ],\n },\n\n ALT: {\n default: { max: 35, min: 0, optimalMax: 25, optimalMin: 0, unit: 'U/L' },\n source: 'tietz-7ed-2015',\n variants: [\n {\n ageMin: 18,\n range: { max: 56, min: 7, optimalMax: 35, optimalMin: 10, unit: 'U/L' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 45, min: 7, optimalMax: 30, optimalMin: 10, unit: 'U/L' },\n sex: 'F',\n },\n ],\n },\n\n AMH: {\n default: { max: 10.0, min: 1.0, optimalMax: 6.9, optimalMin: 2.0, unit: 'ng/mL' },\n source: 'tietz-7ed-2015',\n variants: [\n {\n ageMax: 24,\n ageMin: 18,\n range: { max: 13.0, min: 1.5, optimalMax: 10.0, optimalMin: 3.0, unit: 'ng/mL' },\n sex: 'F',\n },\n {\n ageMax: 30,\n ageMin: 25,\n range: { max: 10.0, min: 1.5, optimalMax: 8.0, optimalMin: 2.5, unit: 'ng/mL' },\n sex: 'F',\n },\n {\n ageMax: 35,\n ageMin: 31,\n range: { max: 8.0, min: 1.0, optimalMax: 6.0, optimalMin: 2.0, unit: 'ng/mL' },\n sex: 'F',\n },\n {\n ageMax: 40,\n ageMin: 36,\n range: { max: 6.0, min: 0.5, optimalMax: 4.0, optimalMin: 1.0, unit: 'ng/mL' },\n sex: 'F',\n },\n {\n ageMin: 41,\n range: { max: 3.0, min: 0.1, optimalMax: 2.0, optimalMin: 0.5, unit: 'ng/mL' },\n sex: 'F',\n },\n ],\n },\n\n Ammonia: {\n default: { max: 45, min: 15, optimalMax: 40, optimalMin: 20, unit: 'umol/L' },\n source: 'tietz-7ed-2015',\n },\n\n AntiThyroglobulin: {\n default: { max: 115, min: 0, optimalMax: 40, optimalMin: 0, unit: 'IU/mL' },\n source: 'tietz-7ed-2015',\n },\n\n AntiTPO: {\n default: { max: 34, min: 0, optimalMax: 9, optimalMin: 0, unit: 'IU/mL' },\n source: 'tietz-7ed-2015',\n },\n\n // Aortic valve calcium — no standardized clinical threshold; use mild cutoff\n // Cálcio de válvula aórtica — usa mesma classificação Agatston\n AorticValveCalcium: {\n default: { max: 99, min: 0, optimalMax: 0, optimalMin: 0, unit: 'AU' },\n direction: 'lower-better',\n source: 'rumberger-cac-1999',\n },\n\n ApoA1: {\n default: { max: 200, min: 100, optimalMax: 180, optimalMin: 120, unit: 'mg/dL' },\n source: 'contois-apoa1-1996',\n },\n\n ApoB: {\n default: { max: 90, min: 0, optimalMax: 70, optimalMin: 0, unit: 'mg/dL' },\n direction: 'lower-better',\n source: 'sbc-lipids-2025',\n },\n\n ApoCIII: {\n default: { max: 10, min: 0, optimalMax: 7, optimalMin: 0, unit: 'mg/dL' },\n source: 'khetarpal-apociii-2016',\n },\n\n // ApoCIII/ApoA1 Ratio: derivado de ApoCIII (~10 mg/dL) e ApoA1 (~100-150 mg/dL)\n // NOTA: corte de 0.15 sem fonte publicada — valor calculado, não validado clinicamente\n ApoCIII_ApoA1_Ratio: {\n default: { max: 0.15, min: 0, optimalMax: 0.1, optimalMin: 0, unit: '' },\n },\n\n // =============================================================================\n // THYROID\n // =============================================================================\n\n Omega6_AA: {\n default: { max: 15.0, min: 5.0, optimalMax: 12.0, optimalMin: 7.0, unit: '%' },\n source: 'simopoulos-omega-ratio-2002',\n },\n\n AA_EPA_Ratio: {\n default: { max: 15.0, min: 1.0, optimalMax: 5.0, optimalMin: 1.5, unit: '' },\n direction: 'lower-better',\n source: 'simopoulos-omega-ratio-2002',\n },\n\n Arsenic: {\n default: { max: 35, min: 0, optimalMax: 20, optimalMin: 0, unit: 'mcg/L' },\n source: 'nr7-pcmso-2020',\n },\n\n AST: {\n default: { max: 35, min: 0, optimalMax: 25, optimalMin: 0, unit: 'U/L' },\n source: 'tietz-7ed-2015',\n variants: [\n {\n ageMin: 18,\n range: { max: 40, min: 10, optimalMax: 30, optimalMin: 10, unit: 'U/L' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 32, min: 9, optimalMax: 25, optimalMin: 10, unit: 'U/L' },\n sex: 'F',\n },\n ],\n },\n\n Basophils: {\n default: { max: 1, min: 0, optimalMax: 0.5, optimalMin: 0, unit: '%' },\n source: 'pns-hemograma-2019',\n },\n\n Basophils_Abs: {\n default: { max: 0.1, min: 0, optimalMax: 0.05, optimalMin: 0, unit: 'K/uL' },\n source: 'pns-hemograma-2019',\n },\n\n // =============================================================================\n // HEMATOLOGY - CBC\n // =============================================================================\n\n Bicarbonate: {\n default: { max: 29, min: 23, optimalMax: 28, optimalMin: 24, unit: 'mEq/L' },\n source: 'tietz-7ed-2015',\n },\n\n BilirubinDirect: {\n default: { max: 0.3, min: 0, optimalMax: 0.2, optimalMin: 0, unit: 'mg/dL' },\n source: 'tietz-7ed-2015',\n },\n\n BilirubinIndirect: {\n default: { max: 0.8, min: 0, optimalMax: 0.6, optimalMin: 0, unit: 'mg/dL' },\n source: 'tietz-7ed-2015',\n },\n\n BilirubinTotal: {\n default: { max: 1.2, min: 0.1, optimalMax: 0.9, optimalMin: 0.2, unit: 'mg/dL' },\n source: 'tietz-7ed-2015',\n },\n\n // BNP: 35 pg/mL = corte não-agudo para triagem de IC (SBC IC 2018)\n BNP: {\n default: { max: 35, min: 0, optimalMax: 20, optimalMin: 0, unit: 'pg/mL' },\n source: 'sbc-ic-2018',\n },\n\n BUN_Creatinine_Ratio: {\n default: { max: 20, min: 10, optimalMax: 18, optimalMin: 12, unit: '' },\n source: 'tietz-7ed-2015',\n },\n\n CA125: {\n default: { max: 35, min: 0, optimalMax: 25, optimalMin: 0, unit: 'U/mL' },\n source: 'sturgeon-nacb-2008',\n },\n\n CA199: {\n default: { max: 37, min: 0, optimalMax: 30, optimalMin: 0, unit: 'U/mL' },\n source: 'sturgeon-nacb-2008',\n },\n\n // CAC: Agatston classification — 0=none, 1-99=mild, 100-399=moderate, 400+=severe\n // max=99 so only moderate+ scores (≥100) flag as ANORMAL; optimalMax=0 (zero is ideal)\n CAC: {\n default: { max: 99, min: 0, optimalMax: 0, optimalMin: 0, unit: 'AU' },\n direction: 'lower-better',\n source: 'rumberger-cac-1999',\n },\n\n // Per-vessel scores — same Agatston classification applied per vessel\n CAC_LAD: {\n default: { max: 99, min: 0, optimalMax: 0, optimalMin: 0, unit: 'AU' },\n direction: 'lower-better',\n source: 'rumberger-cac-1999',\n },\n\n CAC_LCX: {\n default: { max: 99, min: 0, optimalMax: 0, optimalMin: 0, unit: 'AU' },\n direction: 'lower-better',\n source: 'rumberger-cac-1999',\n },\n\n CAC_LMA: {\n default: { max: 99, min: 0, optimalMax: 0, optimalMin: 0, unit: 'AU' },\n direction: 'lower-better',\n source: 'rumberger-cac-1999',\n },\n\n CAC_Percentile: {\n default: { max: 50, min: 0, optimalMax: 25, optimalMin: 0, unit: '%', warningMax: 75 },\n direction: 'lower-better',\n source: 'rumberger-cac-1999',\n },\n\n CAC_RCA: {\n default: { max: 99, min: 0, optimalMax: 0, optimalMin: 0, unit: 'AU' },\n direction: 'lower-better',\n source: 'rumberger-cac-1999',\n },\n\n Cadmium: {\n default: { max: 1.2, min: 0, optimalMax: 0.5, optimalMin: 0, unit: 'mcg/L' },\n source: 'nr7-pcmso-2020',\n },\n\n Calcium: {\n default: { max: 10.5, min: 8.5, optimalMax: 10.0, optimalMin: 9.0, unit: 'mg/dL' },\n source: 'tietz-7ed-2015',\n },\n\n CEA: {\n default: { max: 3.0, min: 0, optimalMax: 2.5, optimalMin: 0, unit: 'ng/mL' },\n source: 'sturgeon-nacb-2008',\n },\n\n // CK: valores conservadores baseados em faixas laboratoriais típicas\n CK: {\n default: { max: 190, min: 30, optimalMax: 170, optimalMin: 40, unit: 'U/L' },\n source: 'tietz-7ed-2015',\n variants: [\n { sex: 'F', range: { max: 170, min: 30, optimalMax: 150, optimalMin: 40, unit: 'U/L' } },\n ],\n },\n\n Chloride: {\n default: { max: 106, min: 98, optimalMax: 105, optimalMin: 100, unit: 'mEq/L' },\n source: 'tietz-7ed-2015',\n },\n\n Cholesterol: {\n default: { max: 200, min: 0, optimalMax: 180, optimalMin: 0, unit: 'mg/dL' },\n source: 'sbc-lipids-2025',\n },\n\n // Índice de Castelli I (CT/HDL-c)\n Cholesterol_HDL_Ratio: {\n // Índice de Castelli I — SBC 2017: M <4.9, F <4.3\n default: { max: 4.9, min: 0, optimalMax: 3.5, optimalMin: 0, unit: '' },\n direction: 'lower-better',\n source: 'castelli-ratio-1992',\n variants: [\n {\n ageMin: 18,\n range: { max: 4.9, min: 0, optimalMax: 4.0, optimalMin: 0, unit: '' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 4.3, min: 0, optimalMax: 3.5, optimalMin: 0, unit: '' },\n sex: 'F',\n },\n ],\n },\n\n CO2: {\n default: { max: 29, min: 23, optimalMax: 28, optimalMin: 24, unit: 'mEq/L' },\n source: 'tietz-7ed-2015',\n },\n\n Copper: {\n default: { max: 175, min: 70, optimalMax: 150, optimalMin: 85, unit: 'mcg/dL' },\n source: 'tietz-7ed-2015',\n },\n\n CoQ10: {\n default: { max: 1.5, min: 0.5, optimalMax: 1.3, optimalMin: 0.7, unit: 'mg/L' },\n source: 'tietz-7ed-2015',\n },\n\n Cortisol: {\n default: { max: 25, min: 5, optimalMax: 20, optimalMin: 10, unit: 'mcg/dL' },\n source: 'tietz-7ed-2015',\n },\n\n CortisolFree: {\n default: { max: 2.5, min: 0.5, optimalMax: 2.0, optimalMin: 0.8, unit: 'mcg/dL' },\n source: 'tietz-7ed-2015',\n },\n\n CPeptide: {\n default: { max: 3.9, min: 0.8, optimalMax: 3.0, optimalMin: 1.0, unit: 'ng/mL' },\n source: 'tietz-7ed-2015',\n },\n\n Creatinine: {\n default: { max: 1.2, min: 0.6, optimalMax: 1.0, optimalMin: 0.7, unit: 'mg/dL' },\n source: 'pns-bioquimica-2019',\n variants: [\n {\n ageMin: 18,\n range: { max: 1.3, min: 0.7, optimalMax: 1.1, optimalMin: 0.8, unit: 'mg/dL' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 1.1, min: 0.5, optimalMax: 0.9, optimalMin: 0.6, unit: 'mg/dL' },\n sex: 'F',\n },\n ],\n },\n\n CRP: {\n default: { max: 3.0, min: 0, optimalMax: 1.0, optimalMin: 0, unit: 'mg/L' },\n direction: 'lower-better',\n source: 'tietz-7ed-2015',\n },\n\n CystatinC: {\n default: { max: 1.0, min: 0.5, optimalMax: 0.9, optimalMin: 0.6, unit: 'mg/L' },\n source: 'tietz-7ed-2015',\n },\n\n // D-Dímero: 500 ng/mL é o corte clínico padrão para exclusão de TEV\n DDimer: {\n default: { max: 500, min: 0, optimalMax: 250, optimalMin: 0, unit: 'ng/mL' },\n source: 'wells-ddimer-2003',\n },\n\n // =============================================================================\n // METABOLIC PANEL\n // =============================================================================\n\n Omega3_DHA: {\n default: { max: 8.0, min: 2.0, optimalMax: 6.5, optimalMin: 3.5, unit: '%' },\n source: 'harris-omega3-2004',\n },\n\n DHEAS: {\n default: { max: 500, min: 100, optimalMax: 400, optimalMin: 150, unit: 'mcg/dL' },\n source: 'tietz-7ed-2015',\n variants: [\n {\n ageMax: 39,\n ageMin: 18,\n range: { max: 640, min: 280, optimalMax: 500, optimalMin: 300, unit: 'mcg/dL' },\n sex: 'M',\n },\n {\n ageMax: 59,\n ageMin: 40,\n range: { max: 520, min: 120, optimalMax: 400, optimalMin: 150, unit: 'mcg/dL' },\n sex: 'M',\n },\n {\n ageMin: 60,\n range: { max: 290, min: 42, optimalMax: 220, optimalMin: 80, unit: 'mcg/dL' },\n sex: 'M',\n },\n {\n ageMax: 39,\n ageMin: 18,\n range: { max: 380, min: 65, optimalMax: 300, optimalMin: 100, unit: 'mcg/dL' },\n sex: 'F',\n },\n {\n ageMax: 59,\n ageMin: 40,\n range: { max: 240, min: 32, optimalMax: 180, optimalMin: 60, unit: 'mcg/dL' },\n sex: 'F',\n },\n {\n ageMin: 60,\n range: { max: 140, min: 18, optimalMax: 100, optimalMin: 30, unit: 'mcg/dL' },\n sex: 'F',\n },\n ],\n },\n\n Omega3_DPA: {\n default: { max: 2.0, min: 0.3, optimalMax: 1.5, optimalMin: 0.5, unit: '%' },\n source: 'harris-omega3-2004',\n },\n\n eGFR: {\n default: { max: 120, min: 90, optimalMax: 120, optimalMin: 90, unit: 'mL/min/1.73m²' },\n source: 'kdigo-ckd-2024',\n variants: [\n {\n ageMin: 60,\n range: { max: 90, min: 60, optimalMax: 90, optimalMin: 60, unit: 'mL/min/1.73m²' },\n sex: 'all',\n },\n ],\n },\n\n Eosinophils: {\n default: { max: 5, min: 0, optimalMax: 4, optimalMin: 1, unit: '%' },\n direction: 'lower-better',\n source: 'pns-hemograma-2019',\n },\n\n Eosinophils_Abs: {\n default: { max: 0.5, min: 0, optimalMax: 0.3, optimalMin: 0, unit: 'K/uL' },\n source: 'pns-hemograma-2019',\n },\n\n Omega3_EPA: {\n default: { max: 3.5, min: 0.5, optimalMax: 2.5, optimalMin: 1.0, unit: '%' },\n source: 'harris-omega3-2004',\n },\n\n EPADPADHA: {\n default: { max: 10.0, min: 3.0, optimalMax: 9.0, optimalMin: 5.0, unit: '%' },\n source: 'harris-omega3-2004',\n },\n\n ESR: {\n default: { max: 20, min: 0, optimalMax: 10, optimalMin: 0, unit: 'mm/hr' },\n source: 'tietz-7ed-2015',\n },\n\n Estradiol: {\n default: { max: 40, min: 10, optimalMax: 35, optimalMin: 15, unit: 'pg/mL' },\n source: 'tietz-7ed-2015',\n variants: [\n {\n ageMin: 18,\n range: { max: 40, min: 10, optimalMax: 30, optimalMin: 15, unit: 'pg/mL' },\n sex: 'M',\n },\n {\n ageMax: 50,\n ageMin: 18,\n range: { max: 400, min: 30, optimalMax: 300, optimalMin: 50, unit: 'pg/mL' },\n sex: 'F',\n },\n {\n ageMin: 51,\n range: { max: 30, min: 0, optimalMax: 20, optimalMin: 0, unit: 'pg/mL' },\n sex: 'F',\n },\n ],\n },\n\n F2Isoprostanes: {\n default: { max: 86, min: 0, optimalMax: 60, optimalMin: 0, unit: 'pg/mL' },\n source: 'tietz-7ed-2015',\n },\n\n Ferritin: {\n default: { max: 150, min: 12, optimalMax: 120, optimalMin: 30, unit: 'ng/mL' },\n source: 'tietz-7ed-2015',\n variants: [\n {\n ageMin: 18,\n range: { max: 250, min: 20, optimalMax: 200, optimalMin: 40, unit: 'ng/mL' },\n sex: 'M',\n },\n {\n ageMax: 50,\n ageMin: 18,\n range: { max: 120, min: 10, optimalMax: 80, optimalMin: 20, unit: 'ng/mL' },\n sex: 'F',\n },\n {\n ageMin: 51,\n range: { max: 200, min: 20, optimalMax: 150, optimalMin: 30, unit: 'ng/mL' },\n sex: 'F',\n },\n ],\n },\n\n // Fibrinogênio: 200-400 mg/dL — faixa de referência padrão (método de Clauss)\n Fibrinogen: {\n default: { max: 400, min: 200, optimalMax: 350, optimalMin: 250, unit: 'mg/dL' },\n source: 'tietz-7ed-2015',\n },\n\n FolicAcid: {\n default: { max: 20, min: 3, optimalMax: 15, optimalMin: 5, unit: 'ng/mL' },\n source: 'tietz-7ed-2015',\n },\n\n // =============================================================================\n // LIVER FUNCTION\n // =============================================================================\n\n FSH: {\n default: { max: 12.4, min: 1.5, optimalMax: 10.0, optimalMin: 3.0, unit: 'mIU/mL' },\n source: 'tietz-7ed-2015',\n variants: [\n {\n ageMin: 18,\n range: { max: 12.4, min: 1.5, optimalMax: 8.0, optimalMin: 1.5, unit: 'mIU/mL' },\n sex: 'M',\n },\n {\n ageMax: 50,\n ageMin: 18,\n range: { max: 12.5, min: 3.5, optimalMax: 10.0, optimalMin: 3.5, unit: 'mIU/mL' },\n sex: 'F',\n },\n {\n ageMin: 51,\n range: { max: 134.8, min: 25.8, optimalMax: 80.0, optimalMin: 25.8, unit: 'mIU/mL' },\n sex: 'F',\n },\n ],\n },\n\n GGT: {\n default: { max: 55, min: 0, optimalMax: 30, optimalMin: 0, unit: 'U/L' },\n direction: 'lower-better',\n source: 'tietz-7ed-2015',\n variants: [\n {\n ageMin: 18,\n range: { max: 61, min: 8, optimalMax: 40, optimalMin: 10, unit: 'U/L' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 36, min: 5, optimalMax: 25, optimalMin: 8, unit: 'U/L' },\n sex: 'F',\n },\n ],\n },\n\n Ghrelin: {\n default: { max: 1000, min: 300, optimalMax: 800, optimalMin: 400, unit: 'pg/mL' },\n source: 'tietz-7ed-2015',\n },\n\n Globulin: {\n default: { max: 3.5, min: 2.0, optimalMax: 3.2, optimalMin: 2.3, unit: 'g/dL' },\n source: 'tietz-7ed-2015',\n },\n\n Glucose: {\n default: { max: 100, min: 70, optimalMax: 90, optimalMin: 70, unit: 'mg/dL' },\n source: 'sbd-diabetes-2024',\n },\n\n GlycoMark: {\n default: { max: 40, min: 10, optimalMax: 35, optimalMin: 15, unit: 'mcg/mL' },\n source: 'tietz-7ed-2015',\n },\n\n GrowthHormone: {\n default: { max: 5, min: 0, optimalMax: 3, optimalMin: 0, unit: 'ng/mL' },\n source: 'tietz-7ed-2015',\n },\n\n HbA1c: {\n default: { max: 5.7, min: 4.0, optimalMax: 5.3, optimalMin: 4.5, unit: '%' },\n source: 'sbd-diabetes-2024',\n },\n\n Hct: {\n default: { max: 50, min: 36, optimalMax: 48, optimalMin: 40, unit: '%' },\n source: 'pns-hemograma-2019',\n variants: [\n {\n ageMin: 18,\n range: { max: 54, min: 40, optimalMax: 50, optimalMin: 42, unit: '%' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 48, min: 36, optimalMax: 45, optimalMin: 38, unit: '%' },\n sex: 'F',\n },\n ],\n },\n\n HDL: {\n default: { max: 60, min: 40, optimalMax: 60, optimalMin: 50, unit: 'mg/dL' },\n direction: 'higher-better',\n source: 'sbc-lipids-2025',\n variants: [\n {\n ageMin: 18,\n range: { max: 60, min: 40, optimalMax: 60, optimalMin: 45, unit: 'mg/dL' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 60, min: 50, optimalMax: 60, optimalMin: 55, unit: 'mg/dL' },\n sex: 'F',\n },\n ],\n },\n\n HDL_Large: {\n // HDL Large: higher is better\n // Quest Ion Mobility reference: Male 4334-10815, Female 5038-17886 nmol/L, optimal >6729\n default: { max: 17886, min: 4334, optimalMax: 17886, optimalMin: 6729, unit: 'nmol/L' },\n direction: 'higher-better',\n source: 'caulfield-ionmobility-2008',\n },\n\n // =============================================================================\n // INFLAMMATION\n // =============================================================================\n\n Hgb: {\n default: { max: 17.5, min: 12.0, optimalMax: 16.0, optimalMin: 13.5, unit: 'g/dL' },\n source: 'pns-hemograma-2019',\n variants: [\n {\n ageMin: 18,\n range: { max: 17.5, min: 13.5, optimalMax: 16.5, optimalMin: 14.0, unit: 'g/dL' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 15.5, min: 12.0, optimalMax: 14.5, optimalMin: 12.5, unit: 'g/dL' },\n sex: 'F',\n },\n ],\n },\n\n HOMA_IR: {\n default: { max: 2.5, min: 0, optimalMax: 1.5, optimalMin: 0, unit: '' },\n direction: 'lower-better',\n source: 'tietz-7ed-2015',\n },\n\n Homocysteine: {\n default: { max: 15, min: 4, optimalMax: 10, optimalMin: 5, unit: 'umol/L' },\n direction: 'lower-better',\n source: 'selhub-homocysteine-1999',\n },\n\n IGF1: {\n default: { max: 350, min: 100, optimalMax: 300, optimalMin: 150, unit: 'ng/mL' },\n source: 'tietz-7ed-2015',\n },\n\n // =============================================================================\n // METABOLIC\n // =============================================================================\n\n ImmatureGranulocytes: {\n default: { max: 1.0, min: 0, optimalMax: 0.5, optimalMin: 0, unit: '%' },\n source: 'tietz-7ed-2015',\n },\n\n Insulin: {\n default: { max: 25, min: 2, optimalMax: 8, optimalMin: 3, unit: 'µIU/mL' },\n source: 'tietz-7ed-2015',\n },\n\n Iron: {\n default: { max: 170, min: 60, optimalMax: 140, optimalMin: 80, unit: 'mcg/dL' },\n source: 'sbpc-ml-2021',\n variants: [\n {\n ageMin: 18,\n range: { max: 175, min: 65, optimalMax: 150, optimalMin: 80, unit: 'mcg/dL' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 170, min: 50, optimalMax: 130, optimalMin: 60, unit: 'mcg/dL' },\n sex: 'F',\n },\n ],\n },\n\n Lactate: {\n default: { max: 2.2, min: 0.5, optimalMax: 1.8, optimalMin: 0.7, unit: 'mmol/L' },\n source: 'tietz-7ed-2015',\n },\n\n LDL: {\n default: { max: 100, min: 0, optimalMax: 70, optimalMin: 0, unit: 'mg/dL' },\n direction: 'lower-better',\n source: 'sbc-lipids-2025',\n },\n\n LDL_Medium: {\n // LDL Medium (LDL Média): lower is better\n // Quest Ion Mobility reference: Male 167-485, Female 121-397 nmol/L, optimal <215\n default: { max: 485, min: 121, optimalMax: 215, optimalMin: 121, unit: 'nmol/L' },\n direction: 'lower-better',\n source: 'caulfield-ionmobility-2008',\n },\n\n LDL_ParticleNumber: {\n // LDL Particle Number: lower is better\n // Quest Ion Mobility reference: 1016-2185 nmol/L, optimal <1138\n default: { max: 2185, min: 1016, optimalMax: 1138, optimalMin: 1016, unit: 'nmol/L' },\n direction: 'lower-better',\n source: 'caulfield-ionmobility-2008',\n },\n\n LDL_Peak_Size: {\n // LDL Peak Size: higher is better (larger particles less atherogenic)\n // Quest Ion Mobility reference: optimal >222.9 Å (22.29 nm)\n default: { max: 250.0, min: 217.4, optimalMax: 250.0, optimalMin: 222.9, unit: 'Å' },\n direction: 'higher-better',\n source: 'caulfield-ionmobility-2008',\n },\n\n // =============================================================================\n // IRON STUDIES\n // =============================================================================\n\n LDL_Small: {\n // LDL Small (LDL Pequena): lower is better (small dense LDL is most atherogenic)\n // Quest Ion Mobility reference: Male 123-441, Female 126-382 nmol/L, optimal <142\n default: { max: 441, min: 123, optimalMax: 142, optimalMin: 123, unit: 'nmol/L' },\n direction: 'lower-better',\n source: 'caulfield-ionmobility-2008',\n },\n\n Lead: {\n default: { max: 5, min: 0, optimalMax: 2, optimalMin: 0, unit: 'mcg/dL' },\n source: 'nr7-pcmso-2020',\n },\n\n Leptin: {\n default: { max: 15, min: 2, optimalMax: 12, optimalMin: 3, unit: 'ng/mL' },\n direction: 'lower-better',\n source: 'tietz-7ed-2015',\n variants: [\n {\n ageMin: 18,\n range: { max: 10, min: 1, optimalMax: 8, optimalMin: 2, unit: 'ng/mL' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 25, min: 4, optimalMax: 18, optimalMin: 5, unit: 'ng/mL' },\n sex: 'F',\n },\n ],\n },\n\n LH: {\n default: { max: 8.6, min: 1.7, optimalMax: 8.0, optimalMin: 2.0, unit: 'mIU/mL' },\n source: 'tietz-7ed-2015',\n variants: [\n {\n ageMin: 18,\n range: { max: 8.6, min: 1.7, optimalMax: 6.0, optimalMin: 1.7, unit: 'mIU/mL' },\n sex: 'M',\n },\n {\n ageMax: 50,\n ageMin: 18,\n range: { max: 12.6, min: 2.4, optimalMax: 10.0, optimalMin: 2.4, unit: 'mIU/mL' },\n sex: 'F',\n },\n {\n ageMin: 51,\n range: { max: 58.5, min: 7.7, optimalMax: 40.0, optimalMin: 10.0, unit: 'mIU/mL' },\n sex: 'F',\n },\n ],\n },\n\n Omega6_LA: {\n default: { max: 35.0, min: 15.0, optimalMax: 28.0, optimalMin: 18.0, unit: '%' },\n source: 'simopoulos-omega-ratio-2002',\n },\n\n // =============================================================================\n // VITAMINS\n // =============================================================================\n\n Lipoprotein_a: {\n default: { max: 75, min: 0, optimalMax: 30, optimalMin: 0, unit: 'nmol/L' },\n direction: 'lower-better',\n source: 'sbc-lipids-2025',\n },\n\n Lymphocytes: {\n default: { max: 40, min: 20, optimalMax: 35, optimalMin: 25, unit: '%' },\n source: 'pns-hemograma-2019',\n },\n\n Lymphocytes_Abs: {\n default: { max: 4.0, min: 1.0, optimalMax: 3.0, optimalMin: 1.5, unit: 'K/uL' },\n source: 'pns-hemograma-2019',\n },\n\n Magnesium: {\n default: { max: 2.2, min: 1.7, optimalMax: 2.1, optimalMin: 1.9, unit: 'mg/dL' },\n source: 'tietz-7ed-2015',\n },\n\n Magnesium_RBC: {\n default: { max: 6.8, min: 4.0, optimalMax: 6.0, optimalMin: 4.5, unit: 'mg/dL' },\n source: 'tietz-7ed-2015',\n },\n\n MCH: {\n default: { max: 33, min: 27, optimalMax: 32, optimalMin: 28, unit: 'pg' },\n source: 'pns-hemograma-2019',\n },\n\n MCHC: {\n default: { max: 36, min: 32, optimalMax: 35, optimalMin: 33, unit: 'g/dL' },\n source: 'pns-hemograma-2019',\n },\n\n MCV: {\n default: { max: 100, min: 80, optimalMax: 98, optimalMin: 82, unit: 'fL' },\n source: 'pns-hemograma-2019',\n },\n\n Mercury: {\n default: { max: 10, min: 0, optimalMax: 5, optimalMin: 0, unit: 'mcg/L' },\n source: 'nr7-pcmso-2020',\n },\n\n Microalbumin: {\n default: { max: 30, min: 0, optimalMax: 20, optimalMin: 0, unit: 'mg/L' },\n source: 'kdigo-ckd-2024',\n },\n\n // =============================================================================\n // HORMONES\n // =============================================================================\n\n MMA: {\n default: { max: 378, min: 0, optimalMax: 270, optimalMin: 0, unit: 'nmol/L' },\n source: 'tietz-7ed-2015',\n },\n\n Monocytes: {\n default: { max: 8, min: 2, optimalMax: 7, optimalMin: 3, unit: '%' },\n source: 'pns-hemograma-2019',\n },\n\n Monocytes_Abs: {\n default: { max: 0.8, min: 0.2, optimalMax: 0.7, optimalMin: 0.3, unit: 'K/uL' },\n source: 'pns-hemograma-2019',\n },\n\n MPV: {\n default: { max: 11.5, min: 7.5, optimalMax: 10.5, optimalMin: 8.0, unit: 'fL' },\n source: 'pns-hemograma-2019',\n },\n\n // MPO: Meuwese 2007 (EPIC-Norfolk) — risco CV elevado >322 pmol/L\n Myeloperoxidase: {\n default: { max: 470, min: 0, optimalMax: 322, optimalMin: 0, unit: 'pmol/L' },\n source: 'meuwese-mpo-2007',\n },\n\n // WBC Differential (%)\n Neutrophils: {\n default: { max: 70, min: 40, optimalMax: 65, optimalMin: 50, unit: '%' },\n source: 'pns-hemograma-2019',\n },\n\n // WBC Differential (Absolute)\n Neutrophils_Abs: {\n default: { max: 8.0, min: 1.5, optimalMax: 6.0, optimalMin: 2.0, unit: 'K/uL' },\n source: 'pns-hemograma-2019',\n },\n\n NonHDL_Cholesterol: {\n default: { max: 130, min: 0, optimalMax: 100, optimalMin: 0, unit: 'mg/dL' },\n direction: 'lower-better',\n source: 'sbc-lipids-2025',\n },\n\n NRBC: {\n default: { max: 0, min: 0, optimalMax: 0, optimalMin: 0, unit: '/100WBC' },\n source: 'tietz-7ed-2015',\n },\n\n NTproBNP: {\n default: { max: 125, min: 0, optimalMax: 75, optimalMin: 0, unit: 'pg/mL' },\n source: 'sbc-ic-2018',\n },\n\n Oleic_Acid: {\n default: { max: 25.0, min: 15.0, optimalMax: 22.0, optimalMin: 18.0, unit: '%' },\n source: 'tietz-7ed-2015',\n },\n\n Omega3_Index: {\n default: { max: 8.0, min: 4.0, optimalMax: 8.0, optimalMin: 5.5, unit: '%' },\n source: 'harris-omega3-2004',\n },\n\n Omega3_Total: {\n default: { max: 12.0, min: 3.0, optimalMax: 10.0, optimalMin: 5.5, unit: '%' },\n source: 'harris-omega3-2004',\n },\n\n Omega6_Total: {\n default: { max: 40.0, min: 20.0, optimalMax: 35.0, optimalMin: 25.0, unit: '%' },\n source: 'simopoulos-omega-ratio-2002',\n },\n\n Omega6_Omega3_Ratio: {\n default: { max: 10.0, min: 1.0, optimalMax: 4.0, optimalMin: 1.0, unit: '' },\n direction: 'lower-better',\n source: 'simopoulos-omega-ratio-2002',\n },\n\n // =============================================================================\n // TUMOR MARKERS\n // =============================================================================\n\n OmegaCheck: {\n default: { max: 8.0, min: 4.0, optimalMax: 8.0, optimalMin: 5.5, unit: '%' },\n source: 'harris-omega3-2004',\n },\n\n Palmitic_Acid: {\n default: { max: 30.0, min: 20.0, optimalMax: 27.0, optimalMin: 22.0, unit: '%' },\n source: 'tietz-7ed-2015',\n },\n\n Phosphorus: {\n default: { max: 4.5, min: 2.5, optimalMax: 4.0, optimalMin: 3.0, unit: 'mg/dL' },\n source: 'tietz-7ed-2015',\n },\n\n Platelets: {\n default: { max: 400, min: 150, optimalMax: 350, optimalMin: 180, unit: 'K/uL' },\n source: 'pns-hemograma-2019',\n },\n\n Potassium: {\n default: { max: 5.0, min: 3.5, optimalMax: 4.6, optimalMin: 3.8, unit: 'mEq/L' },\n source: 'tietz-7ed-2015',\n },\n\n // =============================================================================\n // CARDIAC MARKERS\n // =============================================================================\n\n Prealbumin: {\n default: { max: 38, min: 18, optimalMax: 35, optimalMin: 20, unit: 'mg/dL' },\n source: 'tietz-7ed-2015',\n },\n\n Progesterone: {\n default: { max: 0.9, min: 0.1, optimalMax: 0.7, optimalMin: 0.2, unit: 'ng/mL' },\n source: 'tietz-7ed-2015',\n },\n\n Prolactin: {\n default: { max: 18, min: 2, optimalMax: 15, optimalMin: 4, unit: 'ng/mL' },\n source: 'tietz-7ed-2015',\n variants: [\n {\n ageMin: 18,\n range: { max: 18, min: 2, optimalMax: 15, optimalMin: 4, unit: 'ng/mL' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 29, min: 2, optimalMax: 23, optimalMin: 4, unit: 'ng/mL' },\n sex: 'F',\n },\n ],\n },\n\n PSA: {\n default: { max: 4.0, min: 0, optimalMax: 2.5, optimalMin: 0, unit: 'ng/mL' },\n source: 'sturgeon-nacb-2008',\n variants: [\n {\n ageMax: 49,\n ageMin: 18,\n range: { max: 2.5, min: 0, optimalMax: 1.5, optimalMin: 0, unit: 'ng/mL' },\n sex: 'M',\n },\n {\n ageMax: 59,\n ageMin: 50,\n range: { max: 3.5, min: 0, optimalMax: 2.5, optimalMin: 0, unit: 'ng/mL' },\n sex: 'M',\n },\n {\n ageMax: 69,\n ageMin: 60,\n range: { max: 4.5, min: 0, optimalMax: 3.0, optimalMin: 0, unit: 'ng/mL' },\n sex: 'M',\n },\n {\n ageMin: 70,\n range: { max: 6.5, min: 0, optimalMax: 4.0, optimalMin: 0, unit: 'ng/mL' },\n sex: 'M',\n },\n ],\n },\n\n RBC: {\n default: { max: 5.5, min: 4.0, optimalMax: 5.2, optimalMin: 4.3, unit: 'M/uL' },\n source: 'pns-hemograma-2019',\n variants: [\n {\n ageMin: 18,\n range: { max: 5.9, min: 4.5, optimalMax: 5.5, optimalMin: 4.7, unit: 'M/uL' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 5.2, min: 4.0, optimalMax: 5.0, optimalMin: 4.2, unit: 'M/uL' },\n sex: 'F',\n },\n ],\n },\n\n // =============================================================================\n // URINALYSIS\n // =============================================================================\n\n RDW: {\n default: { max: 14.5, min: 11.5, optimalMax: 14.0, optimalMin: 12.0, unit: '%' },\n source: 'pns-hemograma-2019',\n },\n\n Reticulocytes: {\n default: { max: 2.5, min: 0.5, optimalMax: 2.0, optimalMin: 0.8, unit: '%' },\n source: 'pns-hemograma-2019',\n },\n\n SDMA: {\n default: { max: 0.6, min: 0.3, optimalMax: 0.5, optimalMin: 0.3, unit: 'umol/L' },\n source: 'schwedhelm-sdma-2011',\n },\n\n Selenium: {\n default: { max: 150, min: 70, optimalMax: 125, optimalMin: 85, unit: 'mcg/L' },\n source: 'tietz-7ed-2015',\n },\n\n SHBG: {\n default: { max: 54, min: 18, optimalMax: 50, optimalMin: 20, unit: 'nmol/L' },\n source: 'tietz-7ed-2015',\n variants: [\n {\n ageMin: 18,\n range: { max: 54, min: 18, optimalMax: 45, optimalMin: 20, unit: 'nmol/L' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 122, min: 24, optimalMax: 90, optimalMin: 30, unit: 'nmol/L' },\n sex: 'F',\n },\n ],\n },\n\n Sodium: {\n default: { max: 145, min: 136, optimalMax: 143, optimalMin: 138, unit: 'mEq/L' },\n source: 'tietz-7ed-2015',\n },\n\n // =============================================================================\n // KIDNEY FUNCTION\n // =============================================================================\n\n SpecificGravity_Urine: {\n default: { max: 1.03, min: 1.005, optimalMax: 1.025, optimalMin: 1.01, unit: 'SG' },\n source: 'tietz-7ed-2015',\n },\n\n Stearic_Acid: {\n default: { max: 14.0, min: 8.0, optimalMax: 12.0, optimalMin: 10.0, unit: '%' },\n source: 'tietz-7ed-2015',\n },\n\n T3Free: {\n default: { max: 4.2, min: 2.3, optimalMax: 3.8, optimalMin: 2.8, unit: 'pg/mL' },\n source: 'tietz-7ed-2015',\n },\n\n // =============================================================================\n // OMEGA FATTY ACIDS\n // =============================================================================\n\n T3Reverse: {\n default: { max: 24, min: 10, optimalMax: 20, optimalMin: 12, unit: 'ng/dL' },\n source: 'tietz-7ed-2015',\n },\n\n T4Free: {\n default: { max: 1.8, min: 0.8, optimalMax: 1.5, optimalMin: 1.0, unit: 'ng/dL' },\n source: 'tietz-7ed-2015',\n },\n\n T4Total: {\n default: { max: 12.0, min: 4.5, optimalMax: 10.0, optimalMin: 6.0, unit: 'ug/dL' },\n source: 'tietz-7ed-2015',\n },\n\n Testosterone: {\n default: { max: 1000, min: 300, optimalMax: 800, optimalMin: 500, unit: 'ng/dL' },\n source: 'tietz-7ed-2015',\n variants: [\n {\n ageMax: 49,\n ageMin: 18,\n range: { max: 1000, min: 300, optimalMax: 800, optimalMin: 500, unit: 'ng/dL' },\n sex: 'M',\n },\n {\n ageMin: 50,\n range: { max: 800, min: 200, optimalMax: 650, optimalMin: 400, unit: 'ng/dL' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 70, min: 15, optimalMax: 50, optimalMin: 20, unit: 'ng/dL' },\n sex: 'F',\n },\n ],\n },\n\n TestosteroneBioavailable: {\n default: { max: 200, min: 50, optimalMax: 150, optimalMin: 80, unit: 'ng/dL' },\n source: 'tietz-7ed-2015',\n },\n\n // TestosteroneFree - using direct immunoassay ranges (Quest/LabCorp standard)\n // Previous values (9.3-26.5 pg/mL) were based on equilibrium dialysis method\n TestosteroneFree: {\n default: { max: 155, min: 35, optimalMax: 120, optimalMin: 50, unit: 'pg/mL' },\n source: 'tietz-7ed-2015',\n variants: [\n {\n ageMax: 49,\n ageMin: 18,\n range: { max: 155, min: 35, optimalMax: 120, optimalMin: 50, unit: 'pg/mL' },\n sex: 'M',\n },\n {\n ageMin: 50,\n range: { max: 130, min: 30, optimalMax: 100, optimalMin: 40, unit: 'pg/mL' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 5.0, min: 0.2, optimalMax: 3.0, optimalMin: 0.5, unit: 'pg/mL' },\n sex: 'F',\n },\n ],\n },\n\n TIBC: {\n default: { max: 370, min: 250, optimalMax: 350, optimalMin: 280, unit: 'mcg/dL' },\n source: 'tietz-7ed-2015',\n },\n\n TotalProtein: {\n default: { max: 8.3, min: 6.0, optimalMax: 7.8, optimalMin: 6.5, unit: 'g/dL' },\n source: 'tietz-7ed-2015',\n },\n\n Trans_Fat_Index: {\n default: { max: 1.0, min: 0, optimalMax: 0.5, optimalMin: 0, unit: '%' },\n source: 'tietz-7ed-2015',\n },\n\n Transferrin: {\n default: { max: 360, min: 200, optimalMax: 340, optimalMin: 220, unit: 'mg/dL' },\n source: 'tietz-7ed-2015',\n },\n\n TransferrinSaturation: {\n default: { max: 50, min: 20, optimalMax: 45, optimalMin: 25, unit: '%' },\n source: 'tietz-7ed-2015',\n variants: [\n {\n ageMin: 18,\n range: { max: 55, min: 20, optimalMax: 45, optimalMin: 25, unit: '%' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 50, min: 15, optimalMax: 40, optimalMin: 20, unit: '%' },\n sex: 'F',\n },\n ],\n },\n\n Triglycerides: {\n default: { max: 150, min: 0, optimalMax: 100, optimalMin: 0, unit: 'mg/dL' },\n direction: 'lower-better',\n source: 'sbc-lipids-2025',\n },\n\n // TroponinI: 0.04 ng/mL = percentil 99 (ensaio Siemens TnI-Ultra)\n TroponinI: {\n default: { max: 0.04, min: 0, optimalMax: 0.02, optimalMin: 0, unit: 'ng/mL' },\n source: 'keller-tni-2013',\n },\n\n // TroponinT: 14 ng/L = percentil 99 hs-cTnT (ensaio Roche Elecsys 5ª geração)\n TroponinT: {\n default: { max: 14, min: 0, optimalMax: 10, optimalMin: 0, unit: 'ng/L' },\n source: 'giannitsis-hstnt-2010',\n },\n\n TSH: {\n default: { max: 4.0, min: 0.4, optimalMax: 2.5, optimalMin: 1.0, unit: 'µIU/mL' },\n source: 'sbem-thyroid-2013',\n variants: [\n {\n ageMin: 65,\n range: { max: 6.0, min: 0.4, optimalMax: 4.0, optimalMin: 1.0, unit: 'µIU/mL' },\n sex: 'all',\n },\n ],\n },\n\n Urea: {\n default: { max: 20, min: 7, optimalMax: 16, optimalMin: 10, unit: 'mg/dL' },\n source: 'tietz-7ed-2015',\n },\n\n UricAcid: {\n default: { max: 7.0, min: 2.5, optimalMax: 5.5, optimalMin: 3.0, unit: 'mg/dL' },\n source: 'tietz-7ed-2015',\n variants: [\n {\n ageMin: 18,\n range: { max: 7.0, min: 3.4, optimalMax: 6.0, optimalMin: 4.0, unit: 'mg/dL' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 6.0, min: 2.4, optimalMax: 5.0, optimalMin: 3.0, unit: 'mg/dL' },\n sex: 'F',\n },\n ],\n },\n\n Urobilinogen_Urine: {\n default: { max: 1.0, min: 0.1, optimalMax: 1.0, optimalMin: 0.1, unit: 'mg/dL' },\n source: 'tietz-7ed-2015',\n },\n\n // =============================================================================\n // ADVANCED CARDIOVASCULAR\n // =============================================================================\n\n pH_Urine: {\n default: { max: 8.0, min: 4.5, optimalMax: 7.0, optimalMin: 5.5, unit: 'pH' },\n source: 'tietz-7ed-2015',\n },\n\n HyalineCasts_Urine: {\n default: { max: 2, min: 0, optimalMax: 1, optimalMin: 0, unit: '/LPF' },\n source: 'tietz-7ed-2015',\n },\n\n RBC_Urine: {\n default: { max: 3, min: 0, optimalMax: 1, optimalMin: 0, unit: '/HPF' },\n source: 'tietz-7ed-2015',\n },\n\n SquamousEpithelial_Urine: {\n default: { max: 15, min: 0, optimalMax: 5, optimalMin: 0, unit: '/HPF' },\n source: 'tietz-7ed-2015',\n },\n\n Leukocytes_Urine: {\n default: { max: 5, min: 0, optimalMax: 2, optimalMin: 0, unit: '/HPF' },\n source: 'tietz-7ed-2015',\n },\n\n Folate: {\n default: { max: 20, min: 3.9, optimalMax: 17, optimalMin: 5, unit: 'ng/mL' },\n source: 'tietz-7ed-2015',\n },\n\n VitaminA: {\n default: { max: 100, min: 20, optimalMax: 80, optimalMin: 30, unit: 'mcg/dL' },\n source: 'tietz-7ed-2015',\n },\n\n // =============================================================================\n // MINERALS\n // =============================================================================\n\n VitaminB1: {\n default: { max: 180, min: 70, optimalMax: 150, optimalMin: 80, unit: 'nmol/L' },\n source: 'tietz-7ed-2015',\n },\n\n VitaminB12: {\n default: { max: 900, min: 200, optimalMax: 800, optimalMin: 400, unit: 'pg/mL' },\n source: 'tietz-7ed-2015',\n },\n\n VitaminB6: {\n default: { max: 50, min: 5, optimalMax: 40, optimalMin: 10, unit: 'ng/mL' },\n source: 'tietz-7ed-2015',\n },\n\n VitaminC: {\n default: { max: 2.0, min: 0.4, optimalMax: 1.5, optimalMin: 0.6, unit: 'mg/dL' },\n source: 'tietz-7ed-2015',\n },\n\n // =============================================================================\n // HEAVY METALS\n // =============================================================================\n\n VitaminD: {\n default: { max: 100, min: 30, optimalMax: 70, optimalMin: 40, unit: 'ng/mL' },\n source: 'sbem-vitamind-2014',\n },\n\n VitaminD_1_25: {\n default: { max: 72, min: 18, optimalMax: 60, optimalMin: 25, unit: 'pg/mL' },\n source: 'tietz-7ed-2015',\n },\n\n VitaminE: {\n default: { max: 17, min: 5.5, optimalMax: 14, optimalMin: 7, unit: 'mg/L' },\n source: 'tietz-7ed-2015',\n },\n\n // VLDL: estimado via fórmula de Friedewald (TG/5)\n VLDL: {\n default: { max: 30, min: 2, optimalMax: 20, optimalMin: 5, unit: 'mg/dL' },\n source: 'friedewald-1972',\n },\n\n // =============================================================================\n // OTHER\n // =============================================================================\n\n WBC: {\n default: { max: 11.0, min: 4.0, optimalMax: 8.0, optimalMin: 5.0, unit: 'K/uL' },\n source: 'pns-hemograma-2019',\n },\n\n Zinc: {\n default: { max: 120, min: 60, optimalMax: 100, optimalMin: 70, unit: 'mcg/dL' },\n source: 'tietz-7ed-2015',\n },\n\n // =============================================================================\n // BODY COMPOSITION (DXA)\n // =============================================================================\n\n AndroidFatPct: {\n default: { max: 35, min: 10, optimalMax: 25, optimalMin: 15, unit: '%' },\n direction: 'lower-better',\n source: 'kelly-dxa-2009',\n variants: [\n {\n ageMin: 18,\n range: { max: 30, min: 10, optimalMax: 22, optimalMin: 12, unit: '%' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 42, min: 15, optimalMax: 32, optimalMin: 20, unit: '%' },\n sex: 'F',\n },\n ],\n },\n\n AndroidGynoidRatio: {\n default: { max: 1.2, min: 0.5, optimalMax: 1.0, optimalMin: 0.6, unit: '' },\n direction: 'lower-better',\n source: 'kelly-dxa-2009',\n variants: [\n {\n ageMin: 18,\n range: { max: 1.2, min: 0.6, optimalMax: 1.0, optimalMin: 0.7, unit: '' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 1.0, min: 0.4, optimalMax: 0.8, optimalMin: 0.5, unit: '' },\n sex: 'F',\n },\n ],\n },\n\n BMC: {\n default: { max: 3.5, min: 2.0, optimalMax: 3.2, optimalMin: 2.3, unit: 'kg' },\n direction: 'higher-better',\n source: 'kelly-dxa-2009',\n variants: [\n {\n ageMin: 18,\n range: { max: 4.0, min: 2.5, optimalMax: 3.5, optimalMin: 2.8, unit: 'kg' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 3.0, min: 1.8, optimalMax: 2.7, optimalMin: 2.0, unit: 'kg' },\n sex: 'F',\n },\n ],\n },\n\n // BodyFatPct — Age-bracketed ranges from Gallagher et al. Am J Clin Nutr 2000;72:694-701\n // (PMID: 10966886) and ACSM Guidelines for Exercise Testing, 11th Ed (2021)\n BodyFatPct: {\n default: { max: 30, min: 10, optimalMax: 25, optimalMin: 15, unit: '%' },\n direction: 'lower-better',\n source: 'gallagher-bodyfat-2000',\n variants: [\n // Men — age brackets\n {\n ageMax: 25,\n ageMin: 18,\n range: { max: 25, min: 5, optimalMax: 20, optimalMin: 10, unit: '%' },\n sex: 'M',\n },\n {\n ageMax: 35,\n ageMin: 26,\n range: { max: 26, min: 5, optimalMax: 21, optimalMin: 11, unit: '%' },\n sex: 'M',\n },\n {\n ageMax: 45,\n ageMin: 36,\n range: { max: 27, min: 5, optimalMax: 22, optimalMin: 12, unit: '%' },\n sex: 'M',\n },\n {\n ageMax: 55,\n ageMin: 46,\n range: { max: 28, min: 5, optimalMax: 23, optimalMin: 13, unit: '%' },\n sex: 'M',\n },\n {\n ageMin: 56,\n range: { max: 29, min: 5, optimalMax: 24, optimalMin: 14, unit: '%' },\n sex: 'M',\n },\n // Women — age brackets\n {\n ageMax: 25,\n ageMin: 18,\n range: { max: 32, min: 13, optimalMax: 28, optimalMin: 18, unit: '%' },\n sex: 'F',\n },\n {\n ageMax: 35,\n ageMin: 26,\n range: { max: 33, min: 13, optimalMax: 29, optimalMin: 18, unit: '%' },\n sex: 'F',\n },\n {\n ageMax: 45,\n ageMin: 36,\n range: { max: 34, min: 13, optimalMax: 30, optimalMin: 19, unit: '%' },\n sex: 'F',\n },\n {\n ageMax: 55,\n ageMin: 46,\n range: { max: 35, min: 13, optimalMax: 31, optimalMin: 20, unit: '%' },\n sex: 'F',\n },\n {\n ageMin: 56,\n range: { max: 36, min: 13, optimalMax: 32, optimalMin: 20, unit: '%' },\n sex: 'F',\n },\n ],\n },\n\n FatFreeMass: {\n default: { max: 80, min: 40, optimalMax: 70, optimalMin: 45, unit: 'kg' },\n direction: 'higher-better',\n source: 'kelly-dxa-2009',\n variants: [\n {\n ageMin: 18,\n range: { max: 90, min: 50, optimalMax: 80, optimalMin: 55, unit: 'kg' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 60, min: 35, optimalMax: 52, optimalMin: 38, unit: 'kg' },\n sex: 'F',\n },\n ],\n },\n\n FatMass: {\n default: { max: 30, min: 5, optimalMax: 20, optimalMin: 8, unit: 'kg' },\n direction: 'lower-better',\n source: 'kelly-dxa-2009',\n variants: [\n {\n ageMin: 18,\n range: { max: 25, min: 5, optimalMax: 18, optimalMin: 7, unit: 'kg' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 30, min: 8, optimalMax: 22, optimalMin: 10, unit: 'kg' },\n sex: 'F',\n },\n ],\n },\n\n GynoidFatPct: {\n default: { max: 45, min: 15, optimalMax: 35, optimalMin: 20, unit: '%' },\n direction: 'lower-better',\n source: 'kelly-dxa-2009',\n variants: [\n {\n ageMin: 18,\n range: { max: 35, min: 12, optimalMax: 28, optimalMin: 15, unit: '%' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 50, min: 20, optimalMax: 40, optimalMin: 25, unit: '%' },\n sex: 'F',\n },\n ],\n },\n\n LeanMass: {\n default: { max: 75, min: 35, optimalMax: 65, optimalMin: 40, unit: 'kg' },\n direction: 'higher-better',\n source: 'kelly-dxa-2009',\n variants: [\n {\n ageMin: 18,\n range: { max: 85, min: 45, optimalMax: 75, optimalMin: 50, unit: 'kg' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 55, min: 30, optimalMax: 48, optimalMin: 35, unit: 'kg' },\n sex: 'F',\n },\n ],\n },\n\n TotalMass: {\n default: { max: 100, min: 50, optimalMax: 85, optimalMin: 55, unit: 'kg' },\n source: 'kelly-dxa-2009',\n variants: [\n {\n ageMin: 18,\n range: { max: 100, min: 55, optimalMax: 90, optimalMin: 60, unit: 'kg' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 85, min: 45, optimalMax: 75, optimalMin: 50, unit: 'kg' },\n sex: 'F',\n },\n ],\n },\n\n VATMass: {\n default: { max: 1.5, min: 0, optimalMax: 0.8, optimalMin: 0, unit: 'kg' },\n direction: 'lower-better',\n source: 'ofenheimer-vat-2020',\n variants: [\n {\n ageMin: 18,\n range: { max: 1.5, min: 0, optimalMax: 1.0, optimalMin: 0, unit: 'kg' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 1.0, min: 0, optimalMax: 0.5, optimalMin: 0, unit: 'kg' },\n sex: 'F',\n },\n ],\n },\n\n VATVolume: {\n default: { max: 1500, min: 0, optimalMax: 800, optimalMin: 0, unit: 'cm³' },\n direction: 'lower-better',\n source: 'ofenheimer-vat-2020',\n variants: [\n {\n ageMin: 18,\n range: { max: 1500, min: 0, optimalMax: 1000, optimalMin: 0, unit: 'cm³' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 1000, min: 0, optimalMax: 500, optimalMin: 0, unit: 'cm³' },\n sex: 'F',\n },\n ],\n },\n\n // =============================================================================\n // BONE DENSITOMETRY (DXA)\n // =============================================================================\n\n BMD_Total: {\n default: { max: 1.4, min: 0.9, optimalMax: 1.3, optimalMin: 1.0, unit: 'g/cm²' },\n direction: 'higher-better',\n source: 'who-osteoporosis-1994',\n },\n\n TScore_Total: {\n default: { max: 4.0, min: -1.0, optimalMax: 2.0, optimalMin: -0.5, unit: '' },\n direction: 'higher-better',\n source: 'who-osteoporosis-1994',\n },\n\n ZScore_Total: {\n default: { max: 2.0, min: -2.0, optimalMax: 1.0, optimalMin: -1.0, unit: '' },\n direction: 'higher-better',\n source: 'who-osteoporosis-1994',\n },\n\n // =============================================================================\n // MISSING LAB RANGES\n // =============================================================================\n\n Amylase: {\n default: { max: 100, min: 28, optimalMax: 90, optimalMin: 35, unit: 'U/L' },\n source: 'tietz-7ed-2015',\n },\n\n Creatinine_Urine: {\n default: { max: 300, min: 20, optimalMax: 250, optimalMin: 40, unit: 'mg/dL' },\n source: 'tietz-7ed-2015',\n variants: [\n {\n ageMin: 18,\n range: { max: 300, min: 40, optimalMax: 260, optimalMin: 60, unit: 'mg/dL' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 220, min: 20, optimalMax: 180, optimalMin: 40, unit: 'mg/dL' },\n sex: 'F',\n },\n ],\n },\n\n IgA: {\n default: { max: 400, min: 70, optimalMax: 350, optimalMin: 100, unit: 'mg/dL' },\n source: 'tietz-7ed-2015',\n },\n\n Lipase: {\n default: { max: 60, min: 0, optimalMax: 50, optimalMin: 10, unit: 'U/L' },\n source: 'tietz-7ed-2015',\n },\n\n Microalbumin_Urine: {\n default: { max: 30, min: 0, optimalMax: 20, optimalMin: 0, unit: 'mg/L' },\n source: 'kdigo-ckd-2024',\n },\n\n PSA_Free: {\n default: { max: 1.5, min: 0, optimalMax: 1.0, optimalMin: 0, unit: 'ng/mL' },\n source: 'sturgeon-nacb-2008',\n },\n\n PSA_FreeRatio: {\n default: { max: 100, min: 25, optimalMax: 100, optimalMin: 30, unit: '%' },\n source: 'sturgeon-nacb-2008',\n },\n\n // BMI - WHO classification: 18.5–24.9 normal, 25–29.9 overweight, ≥30 obese\n BMI: {\n default: { max: 30, min: 18.5, optimalMax: 24.9, optimalMin: 18.5, unit: 'kg/m2' },\n source: 'who-obesity-2000',\n },\n\n // eAG - Estimated Average Glucose, derived from HbA1c (ADAG study)\n eAG: {\n default: { max: 154, min: 70, optimalMax: 126, optimalMin: 70, unit: 'mg/dL' },\n source: 'tietz-7ed-2015',\n },\n\n // INR - International Normalized Ratio (non-anticoagulated patients)\n INR: {\n default: { max: 1.2, min: 0.8, optimalMax: 1.1, optimalMin: 0.9, unit: 'ratio' },\n source: 'tietz-7ed-2015',\n },\n\n // Prothrombin Time\n ProthrombinTime: {\n default: { max: 13.5, min: 11, optimalMax: 13, optimalMin: 11, unit: 'seconds' },\n source: 'tietz-7ed-2015',\n },\n\n // DHT - Dihydrotestosterone (adult male reference; female values are much lower)\n DHT: {\n default: { max: 85, min: 30, optimalMax: 85, optimalMin: 30, unit: 'ng/dL' },\n source: 'tietz-7ed-2015',\n variants: [\n {\n ageMin: 18,\n range: { max: 85, min: 30, optimalMax: 85, optimalMin: 30, unit: 'ng/dL' },\n sex: 'M',\n },\n {\n ageMin: 18,\n range: { max: 22, min: 4, optimalMax: 22, optimalMin: 4, unit: 'ng/dL' },\n sex: 'F',\n },\n ],\n },\n\n // Total IgE - higher values suggest atopy/allergic sensitization\n IgE_Total: {\n default: { max: 100, min: 0, optimalMax: 100, optimalMin: 0, unit: 'IU/mL' },\n direction: 'lower-better',\n source: 'tietz-7ed-2015',\n },\n\n // IgG - Immunoglobulin G\n IgG: {\n default: { max: 1600, min: 700, optimalMax: 1600, optimalMin: 700, unit: 'mg/dL' },\n source: 'tietz-7ed-2015',\n },\n\n // IgE E1 Cat Dander - Class 0 (≤0.35 kU/L) = negative\n IgE_E1_CatDander: {\n default: { max: 0.35, min: 0, optimalMax: 0.35, optimalMin: 0, unit: 'kU/L' },\n direction: 'lower-better',\n source: 'tietz-7ed-2015',\n },\n\n // IgE GX1 Grasses - Class 0 (≤0.35 kU/L) = negative\n IgE_GX1_Grasses: {\n default: { max: 0.35, min: 0, optimalMax: 0.35, optimalMin: 0, unit: 'kU/L' },\n direction: 'lower-better',\n source: 'tietz-7ed-2015',\n },\n};\n\n// =============================================================================\n// HELPER FUNCTIONS\n// =============================================================================\n\n/**\n * Legacy flat reference ranges for backward compatibility\n * This is derived from biomarkerRangeDefinitions defaults\n */\nexport const defaultReferenceRanges: Record<string, BiomarkerReferenceRange> = Object.fromEntries(\n Object.entries(biomarkerRangeDefinitions).map(([code, def]) => [code, def.default]),\n);\n\n/**\n * Get the reference range for a biomarker code, optionally personalized for user context\n * @param testCode - The biomarker code (e.g., \"HDL\", \"Testosterone\")\n * @param context - Optional user context for personalized ranges\n * @returns Reference range or undefined if not found\n */\nexport function getReferenceRange(\n testCode: string,\n context?: ReferenceRangeContext,\n): BiomarkerReferenceRange | undefined {\n const definition = biomarkerRangeDefinitions[testCode];\n if (!definition) return undefined;\n\n // If no context or no variants, return default\n if (!context || !definition.variants || definition.variants.length === 0) {\n return definition.default;\n }\n\n const { age, biologicalSex } = context;\n\n // Find matching variant (first match wins - more specific variants should be listed first)\n for (const variant of definition.variants) {\n // Check sex match ('all' matches everyone)\n if (variant.sex !== 'all' && variant.sex !== biologicalSex) {\n continue;\n }\n\n // Check age range\n if (variant.ageMin !== undefined && (age === undefined || age < variant.ageMin)) {\n continue;\n }\n if (variant.ageMax !== undefined && (age === undefined || age > variant.ageMax)) {\n continue;\n }\n\n return variant.range;\n }\n\n // No matching variant found - return default\n return definition.default;\n}\n\n/**\n * Get the range direction for a biomarker code.\n * Returns 'range' (default) if not specified.\n */\nexport function getRangeDirection(testCode: string): RangeDirection {\n return biomarkerRangeDefinitions[testCode]?.direction ?? 'range';\n}\n\n/**\n * Get fallback reference range for a biomarker code (default only, no personalization)\n * Used by API when LLM doesn't extract reference values\n * @param biomarkerCode - The biomarker code\n * @returns Reference range with min/max/unit or undefined\n */\nexport function getFallbackReferenceRange(\n biomarkerCode: string,\n): { min: number; max: number; unit: string } | undefined {\n const definition = biomarkerRangeDefinitions[biomarkerCode];\n if (!definition || definition.default.min === undefined || definition.default.max === undefined) {\n return undefined;\n }\n return {\n max: definition.default.max,\n min: definition.default.min,\n unit: definition.default.unit,\n };\n}\n\n/**\n * Apply fallback reference ranges to biomarkers that are missing them\n * @param biomarkers - Array of parsed biomarkers\n * @returns Count of biomarkers that received fallback references\n */\nexport function applyFallbackReferenceRanges<\n T extends {\n code: string;\n referenceMin?: number | null;\n referenceMax?: number | null;\n unit?: string;\n },\n>(biomarkers: T[]): number {\n let fallbackCount = 0;\n\n for (const biomarker of biomarkers) {\n // Skip if already has reference values\n if (biomarker.referenceMin != null && biomarker.referenceMax != null) {\n continue;\n }\n\n const fallback = getFallbackReferenceRange(biomarker.code);\n if (fallback) {\n // Only apply if units are compatible or biomarker has no unit\n const canonicalUnit = getCanonicalUnitForCode(biomarker.code);\n const unitsMatch =\n !biomarker.unit ||\n biomarker.unit.toLowerCase() === fallback.unit.toLowerCase() ||\n (canonicalUnit && biomarker.unit.toLowerCase() === canonicalUnit.toLowerCase()) ||\n // Handle common unit variations\n (biomarker.unit === '%' && fallback.unit === '%');\n\n if (unitsMatch) {\n if (biomarker.referenceMin == null) {\n biomarker.referenceMin = fallback.min;\n }\n if (biomarker.referenceMax == null) {\n biomarker.referenceMax = fallback.max;\n }\n fallbackCount++;\n }\n }\n }\n\n return fallbackCount;\n}\n"],"mappings":"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","names":[]}
@@ -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-Z6YE6FJ4.cjs.map
251
+ //# sourceMappingURL=chunk-4EB4LIIT.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/fhir-brasil/fhir-brasil/packages/core/dist/chunk-Z6YE6FJ4.cjs","../src/converter.ts"],"names":[],"mappings":"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","file":"/home/runner/work/fhir-brasil/fhir-brasil/packages/core/dist/chunk-Z6YE6FJ4.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 { getDefaultUnit, unitToUCUM } from './units';\nimport type { Flag, LabObservationData, LabReportData, UserProfileData } from './types';\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-4EB4LIIT.cjs","../src/converter.ts"],"names":[],"mappings":"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","file":"/home/runner/work/fhir-brasil/fhir-brasil/packages/core/dist/chunk-4EB4LIIT.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"]}
@@ -248,4 +248,4 @@ export {
248
248
  userProfileToFHIR,
249
249
  labResultToFHIRBundle
250
250
  };
251
- //# sourceMappingURL=chunk-UIDSSWBJ.js.map
251
+ //# sourceMappingURL=chunk-RGHKKL3W.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/converter.ts"],"sourcesContent":["/**\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 { getDefaultUnit, unitToUCUM } from './units';\nimport type { Flag, LabObservationData, LabReportData, UserProfileData } from './types';\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"],"mappings":";;;;;;;;;AAkBA,SAAS,mBAAmB,MAAoB;AAC9C,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO;AAAA;AAAA,IACT,KAAK;AACH,aAAO;AAAA;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAKA,SAAS,sBAAsB,MAAoB;AACjD,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAKO,SAAS,qBACd,aACA,WACA,gBACiB;AACjB,QAAM,YAAY,YAAY,YAAY,aAAa,KAAK;AAE5D,QAAM,aACJ,YAAY,QAAQ,eAAe,YAAY,aAAa,KAAK,YAAY;AAC/E,QAAM,WAAW,WAAW,UAAU;AACtC,QAAM,gBAAgB,YAAY,iBAAiB,OAAO,YAAY,UAAU;AAGhF,QAAM,UAA2B;AAAA,IAC/B,UAAU;AAAA,MACR;AAAA,QACE,QAAQ;AAAA,UACN;AAAA,YACE,MAAM;AAAA,YACN,SAAS;AAAA,YACT,QAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM;AAAA,MACJ,QAAQ;AAAA,QACN;AAAA,UACE,MAAM;AAAA,UACN,SAAS,YAAY;AAAA,UACrB,QAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,MAAM,YAAY;AAAA,UAClB,SAAS,YAAY;AAAA,UACrB,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,MAAM,YAAY;AAAA,IACpB;AAAA,IACA,mBAAmB,YAAY;AAAA,IAC/B,IAAI,GAAG,YAAY,QAAQ,IAAI,YAAY,aAAa;AAAA,IACxD,gBAAgB;AAAA,MACd;AAAA,QACE,QAAQ;AAAA,UACN;AAAA,YACE,MAAM,mBAAmB,YAAY,IAAI;AAAA,YACzC,SAAS,sBAAsB,YAAY,IAAI;AAAA,YAC/C,QAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,WAAW,iBAAiB,CAAC,EAAE,SAAS,eAAe,CAAC,IAAI;AAAA,IAC5D,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,WAAW,WAAW,SAAS;AAAA,IACjC;AAAA,EACF;AAGA,MAAI,eAAe;AACjB,YAAQ,cAAc,OAAO,YAAY,KAAK;AAAA,EAChD,OAAO;AACL,YAAQ,gBAAgB;AAAA,MACtB,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,OAAO,YAAY;AAAA,IACrB;AAGA,QAAI,YAAY,iBAAiB,UAAa,YAAY,iBAAiB,QAAW;AACpF,cAAQ,iBAAiB;AAAA,QACvB;AAAA,UACE,MAAM;AAAA,YACJ,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,OAAO,YAAY;AAAA,UACrB;AAAA,UACA,KAAK;AAAA,YACH,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,OAAO,YAAY;AAAA,UACrB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAKO,SAAS,gBACd,QACA,WACA,gBACsB;AAEtB,MAAI;AACJ,UAAQ,OAAO,kBAAkB;AAAA,IAC/B,KAAK;AACH,eAAS;AACT;AAAA,IACF,KAAK;AACH,eAAS;AACT;AAAA,IACF,KAAK;AACH,eAAS;AACT;AAAA,IACF;AACE,eAAS;AAAA,EACb;AAEA,SAAO;AAAA,IACL,UAAU;AAAA,MACR;AAAA,QACE,QAAQ;AAAA,UACN;AAAA,YACE,MAAM;AAAA,YACN,SAAS;AAAA,YACT,QAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM;AAAA,MACJ,QAAQ;AAAA,QACN;AAAA,UACE,MAAM;AAAA;AAAA,UACN,SAAS;AAAA,UACT,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,MAAM;AAAA,IACR;AAAA,IACA,YACE,OAAO,kBAAkB,WACrB,qCACA;AAAA,IACN,gBACE,OAAO,kBAAkB,YACrB;AAAA,MACE;AAAA,QACE,QAAQ;AAAA,UACN;AAAA,YACE,MAAM;AAAA,YACN,SAAS;AAAA,YACT,QAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF,IACA;AAAA,IACN,mBAAmB,OAAO;AAAA,IAC1B,IAAI,OAAO;AAAA,IACX,QAAQ,OAAO;AAAA,IACf,WAAW,OAAO,iBAAiB,CAAC,EAAE,SAAS,OAAO,eAAe,CAAC,IAAI;AAAA,IAC1E,cAAc;AAAA,IACd,QAAQ,eAAe,IAAI,CAAC,QAAQ,EAAE,WAAW,eAAe,EAAE,GAAG,EAAE;AAAA,IACvE;AAAA,IACA,SAAS;AAAA,MACP,WAAW,WAAW,SAAS;AAAA,IACjC;AAAA,EACF;AACF;AAMO,SAAS,kBAAkB,SAAuC;AACvE,QAAM,YAAY,QAAQ,KAAK,MAAM,GAAG;AACxC,QAAM,QAAQ,UAAU,MAAM,GAAG,EAAE;AACnC,QAAM,SAAS,UAAU,UAAU,SAAS,CAAC,KAAK;AAElD,SAAO;AAAA,IACL,SAAS,QAAQ,UACb;AAAA,MACE;AAAA,QACE,MAAM,QAAQ,QAAQ;AAAA,QACtB,SAAS,QAAQ,QAAQ,WAAW;AAAA,QACpC,MAAM;AAAA,UACJ,QAAQ,QAAQ,UAAU,QAAQ,QAAQ,SACtC,GAAG,QAAQ,QAAQ,MAAM,KAAK,QAAQ,QAAQ,MAAM,KACpD,QAAQ,QAAQ;AAAA,UACpB,QAAQ,QAAQ;AAAA,QAClB,EAAE,OAAO,OAAO;AAAA,QAChB,YAAY,QAAQ,QAAQ;AAAA,QAC5B,OAAO,QAAQ,QAAQ;AAAA,MACzB;AAAA,IACF,IACA;AAAA,IACJ,WAAW,QAAQ;AAAA,IACnB,QAAQ,QAAQ;AAAA,IAChB,IAAI,QAAQ;AAAA,IACZ,MAAM;AAAA,MACJ;AAAA,QACE;AAAA,QACA,OAAO,MAAM,SAAS,IAAI,QAAQ;AAAA,QAClC,MAAM,QAAQ;AAAA,MAChB;AAAA,IACF;AAAA,IACA,cAAc;AAAA,IACd,SACE;AAAA,MACE,GAAI,QAAQ,QAAQ,CAAC,EAAE,QAAQ,SAAkB,OAAO,QAAQ,MAAM,CAAC,IAAI,CAAC;AAAA,MAC5E,GAAI,QAAQ,QAAQ,CAAC,EAAE,QAAQ,SAAkB,OAAO,QAAQ,MAAM,CAAC,IAAI,CAAC;AAAA,IAC9E,EAAE,SAAS,IACP;AAAA,MACE,GAAI,QAAQ,QAAQ,CAAC,EAAE,QAAQ,SAAkB,OAAO,QAAQ,MAAM,CAAC,IAAI,CAAC;AAAA,MAC5E,GAAI,QAAQ,QAAQ,CAAC,EAAE,QAAQ,SAAkB,OAAO,QAAQ,MAAM,CAAC,IAAI,CAAC;AAAA,IAC9E,IACA;AAAA,EACR;AACF;AAMO,SAAS,sBACd,QACA,cACA,aACY;AACZ,QAAM,YAAY,YAAY;AAG9B,QAAM,mBAAmB,aAAa,IAAI,CAAC,SAAS;AAAA,IAClD,SAAS,wBAAwB,IAAI,QAAQ,IAAI,IAAI,aAAa;AAAA,IAClE,UAAU;AAAA,MACR,EAAE,GAAG,KAAK,gBAAgB,OAAO,eAAe;AAAA,MAChD;AAAA,MACA,OAAO;AAAA,IACT;AAAA,EACF,EAAE;AAEF,QAAM,iBAAiB,aAAa;AAAA,IAClC,CAAC,QAAQ,eAAe,IAAI,QAAQ,IAAI,IAAI,aAAa;AAAA,EAC3D;AAGA,QAAM,mBAAmB,gBAAgB,QAAQ,WAAW,cAAc;AAG1E,QAAM,cAAc,kBAAkB,WAAW;AAEjD,SAAO;AAAA,IACL,OAAO;AAAA,MACL;AAAA,QACE,SAAS,YAAY,SAAS;AAAA,QAC9B,UAAU;AAAA,MACZ;AAAA,MACA;AAAA,QACE,SAAS,8BAA8B,OAAO,QAAQ;AAAA,QACtD,UAAU;AAAA,MACZ;AAAA,MACA,GAAG;AAAA,IACL;AAAA,IACA,cAAc;AAAA,IACd,MAAM;AAAA,EACR;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/converter.ts"],"sourcesContent":["/**\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"],"mappings":"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","names":[]}