@precisa-saude/fhir 0.37.2 → 0.38.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.
Files changed (48) hide show
  1. package/dist/biomarkers.cjs +2 -2
  2. package/dist/biomarkers.js +1 -1
  3. package/dist/{chunk-DE7NHXIR.cjs → chunk-3M3VH7WG.cjs} +3 -3
  4. package/dist/{chunk-DE7NHXIR.cjs.map → chunk-3M3VH7WG.cjs.map} +1 -1
  5. package/dist/{chunk-RWUFK5AN.cjs → chunk-4WY5YFWA.cjs} +14 -3
  6. package/dist/chunk-4WY5YFWA.cjs.map +1 -0
  7. package/dist/{chunk-VOBVUACD.js → chunk-5HDQCJWQ.js} +3 -3
  8. package/dist/{chunk-3YB2ORY7.cjs → chunk-6G5NUPZI.cjs} +23 -9
  9. package/dist/chunk-6G5NUPZI.cjs.map +1 -0
  10. package/dist/{chunk-CVMOQDM2.js → chunk-DE7ZCFMA.js} +2 -2
  11. package/dist/{chunk-O7SK2YUU.js → chunk-EVWEFMOY.js} +2 -2
  12. package/dist/{chunk-LSC7NHFE.cjs → chunk-FETBCXN6.cjs} +3 -3
  13. package/dist/{chunk-LSC7NHFE.cjs.map → chunk-FETBCXN6.cjs.map} +1 -1
  14. package/dist/{chunk-CZLX33DZ.js → chunk-I6SPJDZ2.js} +13 -2
  15. package/dist/chunk-I6SPJDZ2.js.map +1 -0
  16. package/dist/{chunk-JMWPX43H.js → chunk-I7RF7YWM.js} +18 -4
  17. package/dist/chunk-I7RF7YWM.js.map +1 -0
  18. package/dist/{chunk-YCJUGK6D.js → chunk-JFJY7ZR6.js} +27 -2
  19. package/dist/chunk-JFJY7ZR6.js.map +1 -0
  20. package/dist/{chunk-AJUDODBT.cjs → chunk-L6I4OYGS.cjs} +10 -10
  21. package/dist/{chunk-AJUDODBT.cjs.map → chunk-L6I4OYGS.cjs.map} +1 -1
  22. package/dist/{chunk-BDS6CM7F.cjs → chunk-NIYSBB33.cjs} +27 -2
  23. package/dist/chunk-NIYSBB33.cjs.map +1 -0
  24. package/dist/cli.js +64 -2
  25. package/dist/converter.cjs +5 -5
  26. package/dist/converter.js +4 -4
  27. package/dist/importer.cjs +5 -5
  28. package/dist/importer.js +4 -4
  29. package/dist/index.cjs +28 -16
  30. package/dist/index.cjs.map +1 -1
  31. package/dist/index.js +18 -6
  32. package/dist/index.js.map +1 -1
  33. package/dist/reference-ranges.cjs +4 -4
  34. package/dist/reference-ranges.js +3 -3
  35. package/dist/units.cjs +3 -3
  36. package/dist/units.js +2 -2
  37. package/dist/validators.cjs +4 -4
  38. package/dist/validators.js +3 -3
  39. package/package.json +1 -1
  40. package/dist/chunk-3YB2ORY7.cjs.map +0 -1
  41. package/dist/chunk-BDS6CM7F.cjs.map +0 -1
  42. package/dist/chunk-CZLX33DZ.js.map +0 -1
  43. package/dist/chunk-JMWPX43H.js.map +0 -1
  44. package/dist/chunk-RWUFK5AN.cjs.map +0 -1
  45. package/dist/chunk-YCJUGK6D.js.map +0 -1
  46. /package/dist/{chunk-VOBVUACD.js.map → chunk-5HDQCJWQ.js.map} +0 -0
  47. /package/dist/{chunk-CVMOQDM2.js.map → chunk-DE7ZCFMA.js.map} +0 -0
  48. /package/dist/{chunk-O7SK2YUU.js.map → chunk-EVWEFMOY.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/biomarkers.ts"],"sourcesContent":["/**\n * Biomarker Definitions - Single Source of Truth\n *\n * This file defines all supported biomarkers with:\n * - LOINC codes (canonical identifier for cross-language matching)\n * - Internal codes (for UI display)\n * - Portuguese and English names\n * - Categories\n * - Default units\n *\n * The LLM extraction prompt includes these definitions so it can output\n * LOINC codes directly, eliminating the need for name-matching logic.\n */\n\n/**\n * Um código LOINC irmão do da entrada, que difere só no eixo Method.\n *\n * O `loinc` da entrada é o código sem método, e continua sendo o padrão: a\n * variante só vale quando o laudo afirma o método por escrito. Separado de\n * `loincAliases`, que quer dizer \"código antigo para a mesma coisa\".\n */\nexport interface MethodVariant {\n /**\n * Trechos que afirmam o método, comparados por token inteiro como as grafias\n * de `names`, na linha do exame e nas seguintes até o próximo exame. Só entra\n * pista que aparece em laudo real; variante sem pista com evidência fica com\n * as listas vazias e não é escolhida pela varredura.\n */\n cues: { en: string[]; pt: string[] };\n loinc: string;\n /** O texto da parte Method do LOINC, como o snapshot a registra. */\n method: string;\n /** Por que este código, e de onde veio a pista. */\n note?: string;\n}\n\nexport interface BiomarkerDefinition {\n category: string | string[];\n code: string;\n codeAliases?: string[];\n hidden?: boolean; // If true, biomarker is extracted but not shown in UI\n loinc?: string; // Optional - some DEXA regional metrics don't have official LOINC codes\n loincAliases?: string[];\n /** Ver `MethodVariant`. */\n methodVariants?: MethodVariant[];\n names: {\n en: string[];\n pt: string[];\n };\n sex?: 'male' | 'female' | 'both';\n unit?: string;\n}\n\n/** @deprecated Use `BiomarkerDefinition` instead */\nexport type SupportedBiomarker = BiomarkerDefinition;\n\n/**\n * All supported biomarker definitions\n */\nexport const BIOMARKER_DEFINITIONS: BiomarkerDefinition[] = [\n // ============================================================================\n // HEART / CORACAO\n // ============================================================================\n {\n category: 'coracao',\n code: 'ApoB',\n loinc: '1884-6',\n names: {\n en: ['Apolipoprotein B', 'ApoB'],\n pt: ['Apolipoproteína B', 'ApoB'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'coracao',\n code: 'HDL',\n loinc: '2085-9',\n names: {\n en: ['HDL Cholesterol', 'HDL', 'High-Density Lipoprotein'],\n pt: ['Colesterol HDL', 'HDL', 'HDL-Colesterol'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'coracao',\n code: 'HDL_Large',\n loinc: '43729-3',\n names: {\n en: ['HDL Large', 'Large HDL Particles'],\n pt: ['HDL Grande', 'Partículas HDL Grandes'],\n },\n unit: 'nmol/L',\n },\n {\n category: 'coracao',\n code: 'CRP',\n loinc: '1988-5',\n names: {\n en: ['C-Reactive Protein', 'CRP', 'hs-CRP', 'High-Sensitivity CRP'],\n pt: ['Proteína C-Reativa', 'PCR', 'PCR-as', 'PCR Ultrassensível'],\n },\n unit: 'mg/L',\n },\n {\n category: 'coracao',\n code: 'LDL',\n loinc: '2089-1',\n // Os três irmãos de 2089-1 no eixo Method, conferidos ativos em out/2026.\n // Medido em três dezenas de laudos reais, a única pista escrita foi a\n // nota de rodapé de um laboratório norte-americano que declara o cálculo de\n // Martin-Hopkins. Nenhum laudo brasileiro do corpus imprimiu \"calculado\",\n // \"direto\" ou \"Método:\" perto do LDL, e por isso as outras duas variantes\n // ficam sem pista até aparecer laudo que as afirme.\n methodVariants: [\n {\n cues: { en: ['calculated using the Martin-Hopkins'], pt: [] },\n loinc: '96259-7',\n method: 'Calculated.Martin-Hopkins',\n note: 'Rodapé \"LDL-C is now calculated using the Martin-Hopkins calculation\", que menciona Friedewald só para comparar. Por isso a pista é a frase afirmativa, e não o nome do método.',\n },\n {\n cues: { en: [], pt: [] },\n loinc: '13457-7',\n method: 'Calculated',\n note: 'Friedewald. Sem pista: nenhum laudo do corpus afirmou o cálculo por escrito.',\n },\n {\n cues: { en: [], pt: [] },\n loinc: '18262-6',\n method: 'Direct assay',\n note: 'Dosagem direta. Sem pista: nenhum laudo do corpus afirmou o método por escrito.',\n },\n ],\n names: {\n en: ['LDL Cholesterol', 'LDL', 'Low-Density Lipoprotein'],\n pt: ['Colesterol LDL', 'LDL', 'LDL-Colesterol'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'coracao',\n code: 'LDL_Medium',\n // 96735-6 é \"in Serum\" só, enquanto as vizinhas LDL_Small (43727-7),\n // LDL_ParticleNumber (54434-6) e HDL_Large (43729-3) são Ser/Plas. É o\n // único código para a subfração média, e o perfil por RMN roda em soro.\n // Material registrado de propósito.\n loinc: '96735-6',\n names: {\n en: ['LDL Medium', 'Medium LDL Particles'],\n pt: ['LDL Médio', 'Partículas LDL Médias'],\n },\n unit: 'nmol/L',\n },\n {\n category: 'coracao',\n code: 'LDL_ParticleNumber',\n codeAliases: ['LDL_Particle_Number'],\n loinc: '54434-6',\n names: {\n en: ['LDL Particle Number', 'LDL-P'],\n pt: ['Número de Partículas LDL', 'LDL-P'],\n },\n unit: 'nmol/L',\n },\n {\n category: 'coracao',\n code: 'LDL_Pattern',\n loinc: '35505-7',\n names: {\n en: ['LDL Pattern', 'LDL Particle Pattern'],\n pt: ['Padrão LDL', 'Padrão de Partículas LDL'],\n },\n },\n {\n category: 'coracao',\n code: 'LDL_Peak_Size',\n loinc: '17782-4',\n names: {\n en: ['LDL Peak Size', 'LDL Particle Size'],\n pt: ['Tamanho de Pico LDL', 'Tamanho de Partícula LDL'],\n },\n unit: 'Angstrom',\n },\n {\n category: 'coracao',\n code: 'LDL_Small',\n loinc: '43727-7',\n names: {\n en: ['LDL Small', 'Small Dense LDL'],\n pt: ['LDL Pequeno', 'LDL Denso Pequeno'],\n },\n unit: 'nmol/L',\n },\n {\n // LOINC 43583-4 = \"Lipoprotein a [Moles/volume] in Serum or Plasma\" (nmol/L).\n // Anteriormente 10835-7 (\"Lipoprotein a [Mass/volume]\", mg/dL),\n // incompatível com a unidade nmol/L declarada. SBC 2025 recomenda\n // ensaio independente de isoforma reportado em nmol/L.\n category: 'coracao',\n code: 'Lipoprotein_a',\n loinc: '43583-4',\n names: {\n en: ['Lipoprotein (a)', 'Lp(a)'],\n pt: ['Lipoproteína (a)', 'Lp(a)'],\n },\n unit: 'nmol/L',\n },\n {\n category: 'coracao',\n code: 'NonHDL_Cholesterol',\n codeAliases: ['UNKNOWN_Colesterol_no_HDL', 'UNKNOWN_Colesterol_No_HDL'],\n loinc: '43396-1',\n names: {\n en: ['Non-HDL Cholesterol', 'Non HDL Cholesterol', 'NonHDL Cholesterol', 'Non-HDL-C'],\n pt: ['Colesterol Não-HDL', 'Colesterol no HDL', 'Colesterol não HDL', 'Colesterol Non-HDL'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'coracao',\n code: 'Cholesterol',\n loinc: '2093-3',\n names: {\n en: ['Total Cholesterol', 'Cholesterol'],\n pt: ['Colesterol Total', 'Colesterol'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'coracao',\n code: 'Cholesterol_HDL_Ratio',\n codeAliases: ['CholHDL_Ratio'],\n loinc: '9830-1',\n names: {\n en: [\n 'Total Cholesterol / HDL Ratio',\n 'Cholesterol/HDL Ratio',\n 'Chol/HDL Ratio',\n 'CholHDL Ratio',\n 'Cholesterol HDL Ratio',\n 'Chol/HDLC Ratio',\n 'CHOL/HDLC RATIO',\n ],\n pt: ['Razão Colesterol Total / HDL', 'Razão Colesterol/HDL'],\n },\n unit: 'razão',\n },\n {\n category: 'coracao',\n code: 'Triglycerides',\n loinc: '2571-8',\n names: {\n en: ['Triglycerides'],\n pt: ['Triglicerídeos', 'Triglicérides'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'coracao',\n code: 'VLDL',\n codeAliases: ['VLDL_Cholesterol'],\n loinc: '13458-5',\n names: {\n en: ['VLDL Cholesterol', 'VLDL'],\n pt: ['Colesterol VLDL', 'VLDL'],\n },\n unit: 'mg/dL',\n },\n\n // ============================================================================\n // CORONARY ARTERY CALCIUM (CAC) SCORE\n // ============================================================================\n {\n category: 'coracao',\n code: 'CAC',\n hidden: true,\n names: {\n en: [\n 'Coronary Artery Calcium Score',\n 'CAC Score',\n 'Calcium Score',\n 'Agatston Score',\n 'Total Agatston Score',\n 'CT Calcium Score',\n 'Total Coronary Calcium Score',\n ],\n pt: [\n 'Escore de Cálcio Coronariano',\n 'Escore de Cálcio',\n 'Escore CAC',\n 'Escore Agatston',\n 'Escore de Cálcio Total',\n 'Cálcio Coronariano',\n ],\n },\n unit: 'AU',\n },\n {\n category: 'coracao',\n code: 'CAC_LMA',\n hidden: true,\n names: {\n en: ['Left Main Artery Calcium', 'LMA Calcium Score', 'Left Main Calcium'],\n pt: ['Cálcio Tronco Coronária Esquerda', 'Cálcio TCE', 'Cálcio Artéria Coronária Esquerda'],\n },\n unit: 'AU',\n },\n {\n category: 'coracao',\n code: 'CAC_LAD',\n hidden: true,\n names: {\n en: ['Left Anterior Descending Calcium', 'LAD Calcium Score', 'LAD Calcium'],\n pt: [\n 'Cálcio Descendente Anterior Esquerda',\n 'Cálcio DA',\n 'Cálcio Artéria Descendente Anterior',\n ],\n },\n unit: 'AU',\n },\n {\n category: 'coracao',\n code: 'CAC_LCX',\n hidden: true,\n names: {\n en: ['Left Circumflex Calcium', 'LCX Calcium Score', 'LCX Calcium', 'Circumflex Calcium'],\n pt: ['Cálcio Circunflexa', 'Cálcio CX', 'Cálcio Artéria Circunflexa'],\n },\n unit: 'AU',\n },\n {\n category: 'coracao',\n code: 'CAC_RCA',\n hidden: true,\n names: {\n en: ['Right Coronary Artery Calcium', 'RCA Calcium Score', 'RCA Calcium'],\n pt: ['Cálcio Coronária Direita', 'Cálcio CD', 'Cálcio Artéria Coronária Direita'],\n },\n unit: 'AU',\n },\n {\n category: 'coracao',\n code: 'CAC_Percentile',\n names: {\n en: [\n 'CAC Percentile',\n 'MESA Percentile',\n 'Calcium Score Percentile',\n 'Age-Sex-Ethnicity Percentile',\n ],\n pt: ['Percentil CAC', 'Percentil MESA', 'Percentil do Escore de Cálcio'],\n },\n unit: '%',\n },\n {\n category: 'coracao',\n code: 'AorticValveCalcium',\n hidden: true,\n names: {\n en: ['Aortic Valve Calcium Score', 'Aortic Valve Calcium', 'AVC Score'],\n pt: ['Cálcio Valva Aórtica', 'Escore de Cálcio Valva Aórtica', 'Cálcio Válvula Aórtica'],\n },\n unit: 'AU',\n },\n\n {\n category: 'coracao',\n code: 'ApoA1',\n codeAliases: ['Apolipoprotein_A1'],\n loinc: '1869-7',\n names: {\n en: ['Apolipoprotein A-1', 'ApoA1', 'Apo A-I', 'Apolipoprotein A1'],\n pt: ['Apolipoproteína A-1', 'ApoA1', 'Apo A-I'],\n },\n unit: 'mg/dL',\n },\n\n // ============================================================================\n // THYROID / TIREOIDE\n // ============================================================================\n {\n category: 'tireoide',\n code: 'AntiThyroglobulin',\n loinc: '8098-6',\n names: {\n en: [\n 'Thyroglobulin Antibodies',\n 'Anti-TgAb',\n 'TgAb',\n 'Anti-Thyroglobulin Antibody',\n 'Anti-Thyroglobulin Antibodies',\n ],\n pt: [\n 'Anticorpos Anti-Tireoglobulina',\n 'Anti-Tg',\n 'TgAb',\n 'Anti-Tiroglobulina',\n 'Antic anti-tiroglobulina',\n 'Anticorpos Antitireoglobulina',\n ],\n },\n unit: 'IU/mL',\n },\n {\n category: 'tireoide',\n code: 'AntiTPO',\n loinc: '8099-4',\n names: {\n en: ['Thyroid Peroxidase Antibodies', 'TPO Antibodies', 'Anti-TPO'],\n pt: ['Anticorpos Anti-Peroxidase Tireoidiana', 'Anti-TPO', 'TPO'],\n },\n unit: 'IU/mL',\n },\n {\n category: 'tireoide',\n code: 'TSH',\n loinc: '3016-3',\n names: {\n en: ['Thyroid-Stimulating Hormone', 'TSH', 'Thyrotropin'],\n pt: ['Hormônio Tireoestimulante', 'TSH', 'Tireotrofina'],\n },\n unit: 'uIU/mL',\n },\n {\n category: 'tireoide',\n code: 'T4Free',\n loinc: '3024-7',\n names: {\n en: ['Thyroxine Free', 'Free T4', 'T4 Free', 'T4, Free', 'T4 FREE'],\n pt: ['Tiroxina Livre', 'T4 Livre'],\n },\n unit: 'ng/dL',\n },\n {\n category: 'tireoide',\n code: 'Thyroglobulin',\n // 3013-0 é a tireoglobulina sérica em massa/volume (ng/mL), a forma que o\n // laboratório reporta. Não a de moles/volume (14918-7) nem os painéis.\n loinc: '3013-0',\n names: {\n en: ['Thyroglobulin', 'Tg'],\n pt: ['Tireoglobulina', 'Tg'],\n },\n unit: 'ng/mL',\n },\n {\n category: 'tireoide',\n code: 'T3Free',\n loinc: '3051-0',\n names: {\n en: ['Triiodothyronine Free', 'Free T3', 'T3 Free', 'T3, Free', 'T3 FREE'],\n pt: ['Triiodotironina Livre', 'T3 Livre'],\n },\n unit: 'pg/mL',\n },\n {\n category: 'tireoide',\n code: 'T4Total',\n codeAliases: ['Tiroxina_T4', 'Thyroxine_T4_serum'],\n loinc: '3026-2',\n names: {\n en: ['Thyroxine', 'T4 Total', 'Total T4', 'Thyroxine (T4)', 'Thyroxine (T4), serum'],\n pt: ['Tiroxina', 'T4 Total', 'Tiroxina Total', 'Tiroxina (T4)'],\n },\n unit: 'ug/dL',\n },\n\n // ============================================================================\n // AUTOIMMUNITY / AUTOIMUNIDADE\n // ============================================================================\n {\n category: 'autoimunidade',\n code: 'ANA_Screen',\n loinc: '8061-4',\n names: {\n en: ['Antinuclear Antibodies Screen', 'ANA Screen'],\n pt: ['Triagem de Anticorpos Antinucleares', 'FAN Triagem'],\n },\n },\n {\n category: 'autoimunidade',\n code: 'RheumatoidFactor',\n loinc: '11572-5',\n names: {\n en: ['Rheumatoid Factor', 'RF'],\n pt: ['Fator Reumatoide', 'FR'],\n },\n unit: 'IU/mL',\n },\n\n // ============================================================================\n // IMMUNE REGULATION / REGULACAO-IMUNOLOGICA\n // ============================================================================\n {\n category: 'regulacao-imunologica',\n code: 'Basophils',\n loinc: '706-2',\n names: {\n en: ['Basophils', 'Basophils %'],\n pt: ['Basófilos', 'Basófilos %'],\n },\n unit: '%',\n },\n {\n category: 'regulacao-imunologica',\n code: 'Basophils_Abs',\n hidden: true,\n loinc: '704-7',\n names: {\n en: ['Absolute Basophils', 'Basophils Absolute'],\n pt: ['Basófilos Absolutos'],\n },\n unit: 'K/uL',\n },\n {\n category: 'regulacao-imunologica',\n code: 'Eosinophils',\n loinc: '713-8',\n names: {\n en: ['Eosinophils', 'Eosinophils %'],\n pt: ['Eosinófilos', 'Eosinófilos %'],\n },\n unit: '%',\n },\n {\n category: 'regulacao-imunologica',\n code: 'Eosinophils_Abs',\n hidden: true,\n loinc: '711-2',\n names: {\n en: ['Absolute Eosinophils', 'Eosinophils Absolute'],\n pt: ['Eosinófilos Absolutos'],\n },\n unit: 'K/uL',\n },\n {\n category: 'regulacao-imunologica',\n code: 'Lymphocytes',\n loinc: '736-9',\n names: {\n en: ['Lymphocytes', 'Lymphocytes %'],\n pt: ['Linfócitos', 'Linfócitos %'],\n },\n unit: '%',\n },\n {\n category: 'regulacao-imunologica',\n code: 'Lymphocytes_Abs',\n hidden: true,\n loinc: '731-0',\n names: {\n en: ['Absolute Lymphocytes', 'Lymphocytes Absolute'],\n pt: ['Linfócitos Absolutos'],\n },\n unit: 'K/uL',\n },\n {\n category: 'regulacao-imunologica',\n code: 'Monocytes',\n loinc: '5905-5',\n names: {\n en: ['Monocytes', 'Monocytes %'],\n pt: ['Monócitos', 'Monócitos %'],\n },\n unit: '%',\n },\n {\n category: 'regulacao-imunologica',\n code: 'Monocytes_Abs',\n hidden: true,\n loinc: '742-7',\n names: {\n en: ['Absolute Monocytes', 'Monocytes Absolute'],\n pt: ['Monócitos Absolutos'],\n },\n unit: 'K/uL',\n },\n {\n category: 'regulacao-imunologica',\n code: 'Neutrophils',\n loinc: '770-8',\n names: {\n en: ['Neutrophils', 'Neutrophils %'],\n // \"Segmentados\" é como o hemograma brasileiro automatizado imprime os\n // neutrófilos: o bastonete só aparece quando passa de um limiar (o\n // Weinmann informa acima de 5%), e a linha \"Segmentados\" carrega a\n // contagem. Sem o nome, a leitura de histórico do laudo evolutivo saía\n // `UNKNOWN_Segmentados`. A unidade (/µL) é que separa o absoluto.\n pt: ['Neutrófilos', 'Neutrófilos %', 'Neutrófilos Segmentados', 'Segmentados'],\n },\n unit: '%',\n },\n {\n category: 'regulacao-imunologica',\n code: 'Neutrophils_Abs',\n hidden: true,\n loinc: '751-8',\n names: {\n en: ['Absolute Neutrophils', 'Neutrophils Absolute'],\n pt: ['Neutrófilos Absolutos'],\n },\n unit: 'K/uL',\n },\n {\n category: 'regulacao-imunologica',\n code: 'WBC',\n loinc: '6690-2',\n names: {\n en: ['White Blood Cell Count', 'WBC', 'Leukocytes'],\n pt: ['Contagem de Leucócitos', 'Leucócitos', 'Glóbulos Brancos'],\n },\n unit: 'K/uL',\n },\n {\n category: 'regulacao-imunologica',\n code: 'IgA',\n loinc: '2458-8',\n names: {\n en: ['Immunoglobulin A', 'IgA', 'Serum IgA'],\n pt: ['Imunoglobulina A', 'IgA'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'regulacao-imunologica',\n code: 'IgG',\n codeAliases: ['IgG_Immunoglobulin', 'Immunoglobulin_G'],\n loinc: '2465-3',\n names: {\n en: ['Immunoglobulin G', 'IgG', 'Serum IgG'],\n pt: ['Imunoglobulina G', 'IgG'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'regulacao-imunologica',\n code: 'IgE_Total',\n codeAliases: ['IgE_Immunoglobulin', 'Total_IgE'],\n loinc: '19113-0',\n names: {\n en: ['Total IgE', 'IgE', 'Immunoglobulin E', 'IgE Total'],\n pt: ['IgE Total', 'Imunoglobulina E', 'IgE'],\n },\n unit: 'IU/mL',\n },\n {\n category: 'regulacao-imunologica',\n code: 'IgE_E1_CatDander',\n codeAliases: ['IgE_Cat_Dander', 'IgE_E1', 'IgE_Specific_E1__Cat_Dander'],\n loinc: '6833-8',\n names: {\n en: ['IgE E1 Cat Dander', 'Cat Dander IgE', 'Cat Allergy IgE', 'IgE Cat Epithelium'],\n pt: ['IgE E1 Epitélio de Gato', 'IgE Gato', 'Alergia a Gato IgE'],\n },\n unit: 'kU/L',\n },\n {\n category: 'regulacao-imunologica',\n code: 'IgE_GX1_Grasses',\n codeAliases: ['IgE_GX1', 'IgE_Grass_Pollen', 'IgE_Specific_GX1__Grasses'],\n loinc: '30189-5',\n names: {\n en: ['IgE GX1 Grasses', 'Grass Pollen IgE', 'Grass Mix IgE', 'IgE GX1 Grass Pollen Mix'],\n pt: ['IgE GX1 Gramíneas', 'IgE Pólen de Gramíneas', 'Painel de Gramíneas IgE'],\n },\n unit: 'kU/L',\n },\n\n // ============================================================================\n // WOMEN'S HEALTH / SAUDE-FEMININA\n // ============================================================================\n {\n category: 'saude-feminina',\n code: 'AMH',\n loinc: '38476-8',\n names: {\n en: ['Anti-Mullerian Hormone', 'AMH'],\n pt: ['Hormônio Anti-Mülleriano', 'AMH'],\n },\n sex: 'female',\n unit: 'ng/mL',\n },\n {\n category: ['saude-feminina', 'saude-masculina'],\n code: 'DHEAS',\n loinc: '2191-5',\n names: {\n en: ['DHEA-Sulfate', 'DHEAS', 'DHEA-S', 'DHEA Sulfate'],\n pt: ['DHEA-Sulfato', 'DHEAS', 'Sulfato de DHEA'],\n },\n unit: 'mcg/dL',\n },\n {\n category: ['saude-feminina', 'saude-masculina'],\n code: 'Estradiol',\n loinc: '2243-4',\n names: {\n en: ['Estradiol', 'E2'],\n pt: ['Estradiol', 'E2'],\n },\n unit: 'pg/mL',\n },\n {\n category: ['saude-feminina', 'saude-masculina'],\n code: 'Estrone',\n // Sem loinc de propósito. Em soro/massa-volume a LOINC só tem a forma\n // \"unconjugated\" (2261-6) e razões; não há conceito de estrona total\n // sérica. Atribuir a não-conjugada a um laudo de estrona total mediria\n // outra fração — o mesmo tipo de erro que descartou candidatos nas 22\n // primeiras. Entra sem código, política já usada em FatFreeMass e BMC.\n names: {\n en: ['Estrone', 'E1'],\n pt: ['Estrona', 'E1'],\n },\n unit: 'pg/mL',\n },\n {\n category: ['saude-feminina', 'saude-masculina'],\n code: 'FSH',\n loinc: '15067-2',\n names: {\n en: ['Follicle Stimulating Hormone', 'FSH'],\n pt: ['Hormônio Folículo-Estimulante', 'FSH', 'Folitropina'],\n },\n unit: 'mIU/mL',\n },\n {\n category: ['saude-feminina', 'saude-masculina'],\n code: 'LH',\n loinc: '10501-5',\n names: {\n en: ['Luteinizing Hormone', 'LH'],\n pt: ['Hormônio Luteinizante', 'LH', 'Lutropina'],\n },\n unit: 'mIU/mL',\n },\n {\n category: ['saude-feminina', 'saude-masculina'],\n code: 'Prolactin',\n loinc: '2842-3',\n names: {\n en: ['Prolactin'],\n pt: ['Prolactina'],\n },\n unit: 'ng/mL',\n },\n {\n category: ['saude-feminina', 'saude-masculina'],\n code: 'SHBG',\n loinc: '13967-5',\n names: {\n en: ['Sex Hormone Binding Globulin', 'SHBG'],\n pt: ['Globulina Ligadora de Hormônios Sexuais', 'SHBG'],\n },\n unit: 'nmol/L',\n },\n {\n category: ['saude-feminina', 'saude-masculina'],\n code: 'TestosteroneFree',\n loinc: '2991-8',\n names: {\n en: [\n 'Testosterone Free',\n 'Free Testosterone',\n 'Testosterone, Free',\n 'Testosterone (Free)',\n 'Testosterone Free (Direct)',\n 'Free Testosterone (Direct)',\n ],\n pt: ['Testosterona Livre'],\n },\n unit: 'pg/mL',\n },\n {\n category: ['saude-feminina', 'saude-masculina'],\n code: 'Testosterone',\n loinc: '2986-8',\n names: {\n en: ['Testosterone Total', 'Testosterone'],\n pt: ['Testosterona Total', 'Testosterona'],\n },\n unit: 'ng/dL',\n },\n {\n category: 'saude-feminina',\n code: 'Progesterone',\n loinc: '2839-9',\n names: {\n en: ['Progesterone'],\n pt: ['Progesterona'],\n },\n sex: 'female',\n unit: 'ng/mL',\n },\n\n // ============================================================================\n // MEN'S HEALTH / SAUDE-MASCULINA\n // ============================================================================\n {\n category: 'saude-masculina',\n code: 'PSA',\n loinc: '2857-1',\n names: {\n en: ['Prostate Specific Antigen', 'PSA', 'PSA Total'],\n pt: ['Antígeno Prostático Específico', 'PSA', 'PSA Total'],\n },\n sex: 'male',\n unit: 'ng/mL',\n },\n {\n category: 'saude-masculina',\n code: 'PSA_Free',\n loinc: '10886-0',\n names: {\n en: ['Prostate Specific Antigen Free', 'PSA Free', 'Free PSA'],\n pt: ['PSA Livre', 'Antígeno Prostático Específico Livre'],\n },\n sex: 'male',\n unit: 'ng/mL',\n },\n {\n category: 'saude-masculina',\n code: 'PSA_FreeRatio',\n loinc: '12841-3',\n names: {\n en: ['PSA Free/Total Ratio', 'PSA % Free', 'Free PSA Ratio', 'PSA, % Free'],\n pt: ['Relação PSA Livre/Total', 'PSA % Livre', 'Razão PSA Livre'],\n },\n sex: 'male',\n unit: '%',\n },\n {\n category: 'hormonios',\n code: 'DHT',\n codeAliases: ['Dihydrotestosterone'],\n loinc: '1848-1',\n names: {\n en: ['Dihydrotestosterone', 'DHT', 'Androstanolone'],\n pt: ['Diidrotestosterona', 'DHT'],\n },\n unit: 'ng/dL',\n },\n\n // ============================================================================\n // METABOLIC / METABOLICO\n // ============================================================================\n // Glicose e glicemia de jejum são duas definições, e a linha entre elas é o\n // que o laudo **afirma**, não o que provavelmente aconteceu.\n //\n // No LOINC a diferença está no eixo do componente: `2345-7` é `Glucose` e\n // `1558-6` é `Glucose^post CFst`, com o desafio de jejum declarado. Laudo que\n // imprime só \"Glicose\" não afirma jejum nenhum, mesmo quando a faixa impressa\n // ao lado é de jejum e mesmo sendo jejum na esmagadora maioria dos painéis\n // ambulatoriais brasileiros. Codificar essa linha como `1558-6` afirmaria um\n // jejum de oito horas que ninguém declarou.\n //\n // As duas estavam fundidas numa definição só, que carregava `2345-7` e uma\n // faixa `fastingRequired: 'strict'`: o código dizia genérico e a faixa dizia\n // jejum. A grafia é que decide agora.\n {\n category: 'metabolico',\n code: 'Glucose',\n loinc: '2345-7',\n names: {\n en: ['Glucose', 'Blood Glucose', 'Random Glucose'],\n pt: ['Glicose', 'Glicemia'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'metabolico',\n code: 'Glucose_Fasting',\n loinc: '1558-6',\n names: {\n en: ['Fasting Glucose', 'Fasting Blood Glucose', 'Glucose, Fasting'],\n pt: ['Glicemia de Jejum', 'Glicose de Jejum', 'Glicemia em Jejum'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'metabolico',\n code: 'HbA1c',\n loinc: '4548-4',\n names: {\n en: ['Hemoglobin A1c', 'HbA1c', 'Glycated Hemoglobin'],\n pt: ['Hemoglobina Glicada', 'HbA1c', 'Hemoglobina Glicosilada'],\n },\n unit: '%',\n },\n {\n category: 'metabolico',\n code: 'eAG',\n codeAliases: ['Estimated_Average_Glucose'],\n loinc: '27353-2',\n names: {\n en: ['Estimated Average Glucose', 'eAG', 'Mean Glucose'],\n pt: ['Glicemia Média Estimada', 'GME', 'Glicose Média Estimada'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'metabolico',\n code: 'Insulin',\n loinc: '20448-7',\n names: {\n en: ['Insulin', 'Fasting Insulin'],\n pt: ['Insulina', 'Insulina de Jejum'],\n },\n unit: 'uIU/mL',\n },\n {\n category: 'metabolico',\n code: 'HOMA_IR',\n loinc: '47214-2',\n names: {\n en: ['HOMA-IR', 'Homeostatic Model Assessment for Insulin Resistance'],\n pt: ['HOMA-IR', 'Índice HOMA'],\n },\n unit: 'índice',\n },\n {\n category: 'metabolico',\n code: 'Leptin',\n loinc: '21365-2',\n names: {\n en: ['Leptin'],\n pt: ['Leptina'],\n },\n unit: 'ng/mL',\n },\n {\n category: 'metabolico',\n code: 'UricAcid',\n loinc: '3084-1',\n names: {\n en: ['Uric Acid', 'Urate'],\n pt: ['Ácido Úrico'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'metabolico',\n code: 'CK',\n codeAliases: ['Creatine_Kinase', 'CK_Total'],\n loinc: '2157-6',\n names: {\n en: ['Creatine Kinase', 'CK', 'CPK', 'CK Total', 'Creatine Phosphokinase'],\n pt: ['Creatina Quinase', 'CK', 'CPK', 'Creatinoquinase', 'CK Total'],\n },\n unit: 'U/L',\n },\n\n // ============================================================================\n // ENVIRONMENTAL TOXINS / TOXINAS-AMBIENTAIS\n // ============================================================================\n {\n category: 'toxinas-ambientais',\n code: 'Lead',\n loinc: '77307-7',\n names: {\n en: ['Lead', 'Blood Lead'],\n pt: ['Chumbo', 'Chumbo no Sangue'],\n },\n unit: 'mcg/dL',\n },\n {\n category: 'toxinas-ambientais',\n code: 'Mercury',\n loinc: '5685-3',\n names: {\n en: ['Mercury', 'Blood Mercury'],\n pt: ['Mercúrio', 'Mercúrio no Sangue'],\n },\n unit: 'mcg/L',\n },\n\n // ============================================================================\n // NUTRIENTS / NUTRIENTES\n // ============================================================================\n {\n category: 'nutrientes',\n code: 'AA_EPA_Ratio',\n codeAliases: ['Arachidonic_AcidEPA_Ratio'],\n loinc: '90909-3',\n names: {\n en: ['Arachidonic Acid/EPA Ratio', 'AA/EPA Ratio', 'Arachidonic Acid EPA Ratio'],\n pt: ['Razão Ácido Araquidônico/EPA', 'Razão AA/EPA'],\n },\n unit: 'razão',\n },\n {\n category: 'nutrientes',\n code: 'Calcium',\n loinc: '17861-6',\n names: {\n en: ['Calcium', 'Serum Calcium'],\n pt: ['Cálcio', 'Cálcio Sérico'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'nutrientes',\n code: 'Ferritin',\n loinc: '2276-4',\n names: {\n en: ['Ferritin'],\n pt: ['Ferritina'],\n },\n unit: 'ng/mL',\n },\n {\n category: 'nutrientes',\n code: 'Folate',\n loinc: '2284-8',\n names: {\n en: ['Folate', 'Folic Acid', 'Serum Folate'],\n pt: ['Folato', 'Ácido Fólico', 'Folato Sérico', 'Ac. Fólico', 'Dosagem de Ácido Fólico'],\n },\n unit: 'ng/mL',\n },\n {\n category: 'nutrientes',\n code: 'Homocysteine',\n loinc: '13965-9',\n names: {\n en: ['Homocysteine'],\n pt: ['Homocisteína'],\n },\n unit: 'umol/L',\n },\n {\n category: 'nutrientes',\n code: 'Iron',\n loinc: '2498-4',\n names: {\n en: ['Iron', 'Serum Iron'],\n pt: ['Ferro', 'Ferro Sérico'],\n },\n unit: 'mcg/dL',\n },\n {\n category: 'nutrientes',\n code: 'TransferrinSaturation',\n codeAliases: ['Saturation_of_Transferrin'],\n loinc: '2502-3',\n names: {\n en: [\n 'Iron Saturation',\n 'Transferrin Saturation',\n 'TSAT',\n '% Saturation',\n 'Iron % Saturation',\n 'Saturation',\n 'Saturation of Transferrin',\n ],\n pt: [\n 'Saturação de Ferro',\n 'Saturação de Transferrina',\n 'IST',\n '% Saturação',\n 'Ferro - Grau de Saturação',\n 'Grau de Saturação do Ferro',\n ],\n },\n unit: '%',\n },\n {\n category: 'nutrientes',\n code: 'TIBC',\n loinc: '2500-7',\n names: {\n en: ['Iron Binding Capacity', 'TIBC', 'Total Iron Binding Capacity'],\n pt: [\n 'Capacidade de Ligação do Ferro',\n 'TIBC',\n 'CTLFe',\n 'Capacidade Total de Ligação do Ferro',\n 'Ferro - Capac Total ligação',\n ],\n },\n unit: 'mcg/dL',\n },\n {\n category: 'nutrientes',\n code: 'Magnesium_RBC',\n loinc: '26746-8',\n names: {\n en: [\n 'Magnesium RBC',\n 'Magnesium Red Blood Cells',\n 'RBC Magnesium',\n 'Magnesium, RBC',\n 'Magnesium (RBC)',\n ],\n pt: ['Magnésio RBC', 'Magnésio Eritrocitário', 'Magnésio Intraeritrocitário'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'nutrientes',\n code: 'Magnesium',\n // Magnésio sérico em massa/volume. Distinto do Magnesium_RBC (26746-8),\n // que mede a fração intraeritrocitária.\n loinc: '19123-9',\n names: {\n en: ['Magnesium', 'Serum Magnesium', 'Magnesium, Serum', 'Magnesium Total'],\n pt: ['Magnésio', 'Magnésio Sérico', 'Magnésio Total'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'nutrientes',\n code: 'MMA',\n loinc: '13964-2',\n names: {\n en: ['Methylmalonic Acid', 'MMA'],\n pt: ['Ácido Metilmalônico', 'MMA'],\n },\n unit: 'nmol/L',\n },\n {\n // LOINC 99620-7 = \"Omega 3 fatty acids (w3) [Moles/volume] in RBC.lysate\".\n // Anteriormente 35178-3 (mesmo analito em Ser/Plas), incompatível com o\n // uso clínico do Índice Ômega-3 (Harris & von Schacky 2004), que é\n // definido em membranas de hemácias.\n //\n // Compromisso declarado, e não erro: o LOINC 2.82 não tem código de fração\n // (\"ômega-3 total / ácidos graxos totais\") para o total, só para os ácidos\n // individuais e para EPA+DPA+DHA (90911-9). O componente confere; a\n // propriedade é moles/volume enquanto o laudo imprime %. O teste de eixos\n // (`loinc-axes.test.ts`) lista esta entrada como exceção com este motivo.\n // Mesmo compromisso em `Omega6_Total` (99621-5).\n category: 'nutrientes',\n code: 'Omega3_Total',\n loinc: '99620-7',\n names: {\n en: ['Omega-3 Total', 'Total Omega-3'],\n pt: ['Ômega-3 Total'],\n },\n unit: '%',\n },\n {\n category: 'nutrientes',\n code: 'Omega3_DHA',\n codeAliases: ['DHA'],\n // Ácidos graxos individuais: fração do total (% dos ácidos graxos C14-C22),\n // que é o que o perfil de ácidos graxos e o Índice Ômega-3 imprimem. Os\n // códigos vêm do painel 90918-4 (\"Fatty acid omega-3 and omega-6 panel -\n // Blood\"), o mesmo de onde já saem as razões AA/EPA (90909-3) e ω6/ω3\n // (90910-1). Até out/2026 apontavam para os códigos [Entitic substance]\n // em hemácias (75095-0, 75097-6, 75110-7, 75117-2), que são quantidade por\n // célula, e para 48371-9, que é moles/volume em soro: componente certo,\n // propriedade errada nos cinco, desde mar/2026. Ficam como alias porque o\n // analito é o mesmo. Material: o painel em soro/plasma (88884-2, C14-C24)\n // existe, e é a troca a fazer se um laboratório imprimir o perfil em soro.\n loinc: '90914-3',\n loincAliases: ['75095-0'],\n names: {\n en: ['Omega-3 DHA', 'DHA', 'Docosahexaenoic Acid'],\n pt: ['Ômega-3: DHA', 'DHA', 'Ácido Docosahexaenoico'],\n },\n unit: '%',\n },\n {\n category: 'nutrientes',\n code: 'Omega3_DPA',\n codeAliases: ['DPA'],\n // Fração em sangue, painel 90918-4. Ver `Omega3_DHA`.\n loinc: '90913-5',\n loincAliases: ['48371-9'],\n names: {\n en: ['Omega-3 DPA', 'DPA', 'Docosapentaenoic Acid'],\n pt: ['Ômega-3: DPA', 'DPA', 'Ácido Docosapentaenoico'],\n },\n unit: '%',\n },\n {\n category: 'nutrientes',\n code: 'Omega3_EPA',\n codeAliases: ['EPA'],\n // Fração em sangue, painel 90918-4. Ver `Omega3_DHA`.\n loinc: '90912-7',\n loincAliases: ['75097-6'],\n names: {\n en: ['Omega-3 EPA', 'EPA', 'Eicosapentaenoic Acid'],\n pt: ['Ômega-3: EPA', 'EPA', 'Ácido Eicosapentaenoico'],\n },\n unit: '%',\n },\n {\n category: 'nutrientes',\n code: 'EPADPADHA',\n // 90911-9 é a fração EPA+DPA+DHA / ácidos graxos C14-C22 em sangue, o\n // valor em %. Até out/2026 apontava para 90908-5, que é a *interpretação*\n // desse mesmo valor (ordinal: risco alto, moderado, baixo), e não o\n // número. Sem alias: código ordinal carregando valor numérico é o erro\n // que se quer parar de aceitar.\n loinc: '90911-9',\n names: {\n en: ['Omega-3 EPA+DPA+DHA', 'EPA+DPA+DHA'],\n pt: ['Ômega-3: EPA+DPA+DHA'],\n },\n unit: '%',\n },\n {\n category: 'nutrientes',\n code: 'Omega6_Omega3_Ratio',\n codeAliases: ['Omega6Omega3_Ratio'],\n loinc: '90910-1',\n names: {\n en: ['Omega-6/Omega-3 Ratio'],\n pt: ['Razão Ômega-6 / Ômega-3'],\n },\n unit: 'razão',\n },\n {\n category: 'nutrientes',\n code: 'Omega6_Total',\n // 99621-5 é \"Omega 6 fatty acids (w6) [Moles/volume] in RBC.lysate\", o\n // par exato do 99620-7 de `Omega3_Total`, com o mesmo compromisso de\n // propriedade documentado lá. Até out/2026 apontava para 35177-5, que é\n // ácidos graxos poli-insaturados totais em soro: ômega-3 e ômega-6\n // somados, outro componente. Sem alias.\n loinc: '99621-5',\n names: {\n en: ['Omega-6 Total', 'Total Omega-6'],\n pt: ['Ômega-6 Total'],\n },\n unit: '%',\n },\n {\n category: 'nutrientes',\n code: 'Omega6_AA',\n codeAliases: ['Arachidonic_Acid'],\n // Fração em sangue, painel 90918-4. Ver `Omega3_DHA`.\n loinc: '90916-8',\n loincAliases: ['75110-7'],\n names: {\n en: ['Omega-6 Arachidonic Acid', 'Arachidonic Acid', 'AA'],\n pt: ['Ômega-6: Ácido Araquidônico', 'Ácido Araquidônico', 'AA'],\n },\n unit: '%',\n },\n {\n category: 'nutrientes',\n code: 'Omega6_LA',\n codeAliases: ['Linoleic_Acid'],\n // Fração em sangue, painel 90918-4. Ver `Omega3_DHA`.\n loinc: '90917-6',\n loincAliases: ['75117-2'],\n names: {\n en: ['Omega-6 Linoleic Acid', 'Linoleic Acid', 'LA'],\n pt: ['Ômega-6: Ácido Linoleico', 'Ácido Linoleico', 'LA'],\n },\n unit: '%',\n },\n {\n category: 'nutrientes',\n code: 'VitaminA',\n loinc: '2923-1',\n names: {\n en: ['Vitamin A', 'Retinol', 'Serum Retinol'],\n pt: ['Vitamina A', 'Retinol', 'Retinol Sérico', 'Vit A', 'Vit. A', 'Dosagem de Vitamina A'],\n },\n unit: 'mcg/dL',\n },\n {\n category: 'nutrientes',\n code: 'VitaminB12',\n loinc: '2132-9',\n names: {\n en: ['Vitamin B12', 'Cobalamin', 'B12', 'Cyanocobalamin'],\n pt: [\n 'Vitamina B12',\n 'Vitamina B-12',\n 'Cobalamina',\n 'B12',\n 'Cianocobalamina',\n 'Vit B12',\n 'Vit. B12',\n 'Dosagem de Vitamina B12',\n ],\n },\n unit: 'pg/mL',\n },\n {\n category: 'nutrientes',\n code: 'VitaminC',\n loinc: '1903-4',\n names: {\n en: ['Vitamin C', 'Ascorbic Acid'],\n pt: [\n 'Vitamina C',\n 'Ácido Ascórbico',\n 'Vit C',\n 'Vit. C',\n 'Dosagem de Vitamina C',\n 'Dosagem de Ácido Ascórbico',\n ],\n },\n unit: 'mg/dL',\n },\n {\n category: 'nutrientes',\n code: 'VitaminD',\n // 62292-8 é 25(OH)D2 + 25(OH)D3, o total que os imunoensaios reportam\n // como \"Vitamina D 25-OH\". Até set/2026 apontava para 1989-3, que é só\n // a fração D3: nome parecido, analito diferente.\n loinc: '62292-8',\n names: {\n en: [\n 'Vitamin D',\n '25-Hydroxy Vitamin D',\n '25-OH Vitamin D',\n 'Vitamin D, 25-Hydroxy',\n '25-Hydroxy Vitamin D, Total',\n ],\n pt: [\n 'Vitamina D',\n '25-Hidroxivitamina D',\n '25-OH Vitamina D',\n 'Vitamina D, 25-Hidroxi',\n '25-Hidroxi Vitamina D',\n ],\n },\n unit: 'ng/mL',\n },\n {\n category: 'nutrientes',\n code: 'Zinc',\n // 5763-8 é \"Zinc [Mass/volume] in Serum or Plasma\", o zinco sérico da\n // rotina brasileira (o nome em inglês já dizia \"Serum Zinc\"). Até out/2026\n // apontava para 8245-3, o mesmo analito em sangue total, que tem faixa de\n // referência própria. Sem alias: sangue total é outro material.\n loinc: '5763-8',\n names: {\n en: ['Zinc', 'Serum Zinc'],\n pt: ['Zinco'],\n },\n unit: 'mcg/dL',\n },\n\n // ============================================================================\n // STRESS & AGING / ESTRESSE-ENVELHECIMENTO\n // ============================================================================\n {\n category: 'estresse-envelhecimento',\n code: 'Cortisol',\n loinc: '2143-6',\n names: {\n en: ['Cortisol', 'Serum Cortisol'],\n pt: ['Cortisol'],\n },\n unit: 'mcg/dL',\n },\n\n // ============================================================================\n // LIVER / FIGADO\n // ============================================================================\n {\n category: 'figado',\n code: 'ALT',\n loinc: '1742-6',\n names: {\n en: ['Alanine Transaminase', 'ALT', 'SGPT'],\n pt: [\n 'Alanina Aminotransferase',\n 'ALT',\n 'TGP',\n 'Transaminase Glutâmico-Pirúvica',\n 'Transaminase Pirúvica',\n 'TGP/ALT',\n ],\n },\n unit: 'U/L',\n },\n {\n category: 'figado',\n code: 'Albumin',\n loinc: '1751-7',\n names: {\n en: ['Albumin', 'Serum Albumin'],\n pt: ['Albumina'],\n },\n unit: 'g/dL',\n },\n {\n category: 'figado',\n code: 'Albumin_Globulin_Ratio',\n codeAliases: ['AG_Ratio'],\n loinc: '1759-0',\n names: {\n en: ['Albumin/Globulin Ratio', 'A/G Ratio'],\n pt: ['Razão Albumina / Globulina', 'Razão A/G'],\n },\n unit: 'razão',\n },\n {\n category: 'figado',\n code: 'AlkalinePhosphatase',\n loinc: '6768-6',\n names: {\n en: ['Alkaline Phosphatase', 'ALP'],\n pt: ['Fosfatase Alcalina', 'ALP'],\n },\n unit: 'U/L',\n },\n {\n category: 'figado',\n code: 'AST',\n loinc: '1920-8',\n names: {\n en: ['Aspartate Aminotransferase', 'AST', 'SGOT'],\n pt: [\n 'Aspartato Aminotransferase',\n 'AST',\n 'TGO',\n 'Transaminase Glutâmico-Oxalacética',\n 'Transaminase Oxalacética',\n 'TGO/AST',\n ],\n },\n unit: 'U/L',\n },\n {\n category: 'figado',\n code: 'GGT',\n loinc: '2324-2',\n names: {\n en: ['Gamma-glutamyl Transferase', 'GGT', 'Gamma GT'],\n pt: ['Gama-Glutamil Transferase', 'GGT', 'Gama GT', 'Gama Glutamiltransferase', 'Gama-GT'],\n },\n unit: 'U/L',\n },\n {\n category: 'figado',\n code: 'Globulin',\n // 2336-6 é \"Globulin [Mass/volume] in Serum\", soro só: o LOINC 2.82 não\n // tem a versão Ser/Plas da globulina total (as frações alfa, beta e gama\n // têm). Material registrado de propósito.\n loinc: '2336-6',\n names: {\n en: ['Globulin', 'Serum Globulin'],\n pt: ['Globulina'],\n },\n unit: 'g/dL',\n },\n {\n category: 'figado',\n code: 'TotalProtein',\n loinc: '2885-2',\n names: {\n en: ['Total Protein', 'Serum Protein'],\n pt: ['Proteína Total', 'Proteínas Totais'],\n },\n unit: 'g/dL',\n },\n {\n category: 'figado',\n code: 'BilirubinTotal',\n loinc: '1975-2',\n names: {\n en: ['Total Bilirubin', 'Bilirubin Total', 'Bilirubin, Total', 'BILIRUBIN TOTAL'],\n pt: ['Bilirrubina Total'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'figado',\n code: 'BilirubinDirect',\n codeAliases: ['Bilirubin_Direct', 'Direct_Bilirubin', 'Bilirrubina_Direta'],\n loinc: '1968-7',\n names: {\n en: ['Direct Bilirubin', 'Bilirubin Direct', 'Conjugated Bilirubin'],\n pt: ['Bilirrubina Direta', 'Bilirrubina Conjugada'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'figado',\n code: 'BilirubinIndirect',\n codeAliases: ['Bilirubin_Indirect', 'Indirect_Bilirubin', 'Bilirrubina_Indireta'],\n loinc: '1971-1',\n names: {\n en: ['Indirect Bilirubin', 'Bilirubin Indirect', 'Unconjugated Bilirubin'],\n pt: ['Bilirrubina Indireta', 'Bilirrubina Não Conjugada'],\n },\n unit: 'mg/dL',\n },\n\n // ============================================================================\n // BLOOD / SANGUE\n // ============================================================================\n {\n category: 'sangue',\n code: 'Hct',\n loinc: '4544-3',\n names: {\n en: ['Hematocrit', 'Hct', 'HCT'],\n pt: ['Hematócrito', 'Hct'],\n },\n unit: '%',\n },\n {\n category: 'sangue',\n code: 'Hgb',\n loinc: '718-7',\n names: {\n en: ['Hemoglobin', 'Hgb', 'HGB'],\n pt: ['Hemoglobina', 'Hgb'],\n },\n unit: 'g/dL',\n },\n {\n category: 'sangue',\n code: 'MCH',\n loinc: '785-6',\n names: {\n en: ['Mean Corpuscular Hemoglobin', 'MCH'],\n pt: ['Hemoglobina Corpuscular Média', 'HCM'],\n },\n unit: 'pg',\n },\n {\n category: 'sangue',\n code: 'MCHC',\n loinc: '786-4',\n names: {\n en: ['Mean Corpuscular Hemoglobin Concentration', 'MCHC'],\n pt: ['Concentração de Hemoglobina Corpuscular Média', 'CHCM'],\n },\n unit: 'g/dL',\n },\n {\n category: 'sangue',\n code: 'MCV',\n loinc: '787-2',\n names: {\n en: ['Mean Corpuscular Volume', 'MCV'],\n pt: ['Volume Corpuscular Médio', 'VCM'],\n },\n unit: 'fL',\n },\n {\n category: 'sangue',\n code: 'MPV',\n loinc: '32623-1',\n names: {\n en: ['Mean Platelet Volume', 'MPV'],\n pt: ['Volume Plaquetário Médio', 'VPM'],\n },\n unit: 'fL',\n },\n {\n category: 'sangue',\n code: 'Platelets',\n loinc: '777-3',\n names: {\n en: ['Platelet Count', 'Platelets'],\n pt: ['Contagem de Plaquetas', 'Plaquetas'],\n },\n unit: 'K/uL',\n },\n {\n category: 'sangue',\n code: 'RBC',\n loinc: '789-8',\n names: {\n en: ['Red Blood Cell Count', 'RBC', 'Erythrocytes'],\n pt: ['Contagem de Hemácias', 'Hemácias', 'Eritrócitos'],\n },\n unit: 'M/uL',\n },\n {\n category: 'sangue',\n code: 'RDW',\n loinc: '788-0',\n names: {\n en: ['Red Cell Distribution Width', 'RDW'],\n pt: [\n 'Amplitude de Distribuição dos Eritrócitos',\n 'RDW',\n 'Coeficiente de Variação do Volume Eritrocitário',\n ],\n },\n unit: '%',\n },\n {\n category: 'sangue',\n code: 'ABO_Group',\n hidden: true,\n loinc: '883-9',\n names: {\n en: ['ABO Group', 'ABO Blood Group', 'Blood Type ABO'],\n pt: ['Grupo ABO', 'Tipo Sanguíneo ABO', 'Grupo Sanguíneo ABO'],\n },\n },\n {\n category: 'sangue',\n code: 'Rh_Type',\n hidden: true,\n loinc: '10331-7',\n names: {\n en: ['Rh Type', 'Rh Factor', 'Rhesus Factor'],\n pt: ['Tipo Rh', 'Fator Rh', 'Fator Rhesus'],\n },\n },\n {\n category: 'sangue',\n code: 'ESR',\n codeAliases: ['Erythrocyte_Sedimentation_Rate', 'VHS'],\n loinc: '30341-2',\n names: {\n en: ['Erythrocyte Sedimentation Rate', 'ESR', 'Sed Rate'],\n pt: ['Velocidade de Hemossedimentação', 'VHS', 'VSG'],\n },\n unit: 'mm/hr',\n },\n {\n category: 'sangue',\n code: 'INR',\n codeAliases: ['International_Normalized_Ratio'],\n loinc: '6301-6',\n names: {\n en: ['International Normalized Ratio', 'INR'],\n pt: ['Razão Normalizada Internacional', 'INR', 'RNI'],\n },\n unit: 'razão',\n },\n {\n category: 'sangue',\n code: 'ProthrombinTime',\n codeAliases: ['Prothrombin_Time', 'PT_Time'],\n loinc: '5902-2',\n names: {\n en: ['Prothrombin Time', 'PT', 'Pro Time'],\n pt: ['Tempo de Protrombina', 'TP', 'TAP'],\n },\n unit: 'segundos',\n },\n {\n category: 'sangue',\n code: 'Reticulocytes',\n codeAliases: ['Reticulocyte_Count', 'Reticulocyte_Fraction'],\n loinc: '4679-7',\n names: {\n en: ['Reticulocytes', 'Reticulocyte Count', 'Reticulocyte Fraction', 'Retic Count'],\n pt: ['Reticulócitos', 'Contagem de Reticulócitos'],\n },\n unit: '%',\n },\n\n // ============================================================================\n // KIDNEYS / RINS\n // ============================================================================\n {\n category: 'rins',\n code: 'Microalbumin_Urine',\n codeAliases: ['Urine_Microalbumin'],\n loinc: '14957-5',\n names: {\n en: [\n 'Microalbumin Urine',\n 'Urine Albumin',\n 'Urine Microalbumin',\n 'Microalbumin',\n 'Microalbuminuria',\n 'Albumin, Urine',\n ],\n // Todas as formas abaixo, em pt e en, nomeiam o MESMO analito: albumina\n // dosada na urina. Não são exames diferentes.\n //\n // \"Microalbumina\" e \"microalbuminúria\" são herança de nomenclatura: o\n // prefixo micro nunca se referiu a uma molécula menor, e sim a uma\n // faixa de excreção. O analito é o mesmo, e por isso as duas formas\n // pertencem a esta entrada e não a uma separada.\n //\n // \"Albumina Urinária\" vem primeiro de propósito. O gerador do ValueSet\n // do IG usa o primeiro nome pt como display, então a ordem decide o\n // rótulo publicado — e essa é a forma que os laboratórios brasileiros\n // de fato imprimem.\n //\n // As formas foram tiradas de dado real, não inventadas: \"Albumin,\n // Urine\" e \"Albumina Urinária\" aparecem como rótulos `UNKNOWN_` na\n // auditoria de cobertura da plataforma, ou seja, chegaram em laudo e\n // não casaram com nada.\n //\n // Sem elas o pré-scan casava \"Albumina Urinária\" com `Albumin`, a\n // albumina sérica. A troca não é cosmética: albumina na urina é\n // marcador de lesão renal precoce, medida em mg/L, e a sérica é de\n // função hepática e estado nutricional, medida em g/dL.\n pt: [\n 'Albumina Urinária',\n 'Albumina Urina',\n 'Microalbumina',\n 'Microalbuminúria',\n 'Microalbumina Urina',\n 'Microalbumina na Urina',\n 'Albumina na Urina',\n ],\n },\n unit: 'mg/L',\n },\n {\n // LOINC 3091-6 = \"Urea [Mass/volume] in Serum or Plasma\" (mg/dL).\n // Anteriormente 3094-0 (\"Urea nitrogen\", BUN), inconsistente com a faixa\n // de referência brasileira (15-50 mg/dL) e com os nomes pt-BR (Ureia).\n // Aliases 'BUN' e 'Blood Urea Nitrogen' removidos para evitar matching\n // de relatórios de BUN contra faixas de Ureia (BUN ≈ Ureia / 2,14).\n category: 'rins',\n code: 'Urea',\n loinc: '3091-6',\n names: {\n en: ['Urea'],\n pt: ['Ureia', 'Uréia'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'rins',\n code: 'BUN_Creatinine_Ratio',\n // 3097-3 é \"Urea nitrogen/Creatinine [Mass Ratio]\", a razão BUN/creatinina,\n // e a faixa de referência (10-20, Tietz) é a dessa convenção. Até out/2026\n // esta entrada também levava os nomes \"Razão Ureia / Creatinina\" e\n // \"Urea/Creatinine Ratio\", e o laudo brasileiro, que dosa ureia e não\n // BUN, caía aqui: como ureia ≈ BUN × 2,14, a razão ureia/creatinina sai\n // cerca de 2,14 vezes maior, e um valor normal era sinalizado como alto\n // contra 10-20. Os nomes de ureia foram para `Urea_Creatinine_Ratio`\n // (56997-0), e aqui ficam só as grafias de BUN, pela mesma regra que\n // tirou \"BUN\" dos nomes de `Urea`: um nome exato resolve a um exame só.\n loinc: '3097-3',\n names: {\n en: ['BUN/Creatinine Ratio'],\n pt: ['Razão BUN / Creatinina', 'Razão Nitrogênio Ureico / Creatinina'],\n },\n unit: 'razão',\n },\n {\n category: 'rins',\n code: 'Urea_Creatinine_Ratio',\n // 56997-0 é \"Urea/Creatinine [Mass Ratio] in Serum or Plasma\": a mesma\n // propriedade (MRto) e o mesmo material de 3097-3, com componente ureia\n // em vez de nitrogênio ureico. É a razão que o laudo brasileiro imprime,\n // porque o exame de rotina aqui é a ureia (3091-6), e não o BUN. Sem\n // faixa de referência: o intervalo que circula (cerca de 21-43) é a\n // conversão 10-20 × 2,14, sem fonte publicada em `sources.ts` que o\n // sustente, e uma faixa derivada sem citação é justamente o que o teste\n // de fontes existe para barrar. Sem faixa, o valor sai sem flag, que é\n // melhor que o flag errado de antes.\n loinc: '56997-0',\n names: {\n en: ['Urea/Creatinine Ratio'],\n pt: ['Razão Ureia / Creatinina', 'Relação Ureia / Creatinina'],\n },\n unit: 'razão',\n },\n {\n category: 'rins',\n code: 'Creatinine',\n loinc: '2160-0',\n names: {\n en: ['Creatinine', 'Serum Creatinine'],\n pt: ['Creatinina', 'Creatinina Sérica'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'rins',\n code: 'eGFR',\n codeAliases: ['CKDEPI_2021', 'CKDEPI_eGFR_2021', 'eGFR_CKDEPI_2021', 'eGFR_MDRD'],\n loinc: '98979-8',\n names: {\n en: [\n 'Estimated Glomerular Filtration Rate',\n 'eGFR',\n 'GFR',\n 'eGFR CKD-EPI',\n 'eGFR CKD-EPI 2021',\n 'CKD-EPI 2021',\n // O laudo imprime só \"CKD-EPI 2021\", e a extração devolve o nome com o\n // \"GFR\" na frente. Sem esta entrada o exame virava\n // `UNKNOWN_GFR_CKD_EPI_2021` num laudo do Fleury, com valor medido e\n // tudo, porque a resolução por nome não achava a forma composta.\n 'GFR CKD-EPI 2021',\n 'CKD-EPI eGFR 2021',\n 'eGFR (CKD-EPI 2021)',\n 'eGFR (MDRD)',\n 'Glomerular Filtration Rate',\n ],\n pt: [\n 'Taxa de Filtração Glomerular Estimada',\n 'TFGe',\n 'TFG',\n 'TFGe CKD-EPI',\n 'Filtração Glomerular',\n 'CKD-EPI 2021',\n 'TFGe CKD-EPI 2021',\n ],\n },\n unit: 'mL/min/1.73m²',\n },\n {\n category: 'rins',\n code: 'Potassium',\n loinc: '2823-3',\n names: {\n en: ['Potassium', 'K'],\n pt: ['Potássio', 'K'],\n },\n unit: 'mEq/L',\n },\n {\n category: 'rins',\n code: 'Sodium',\n loinc: '2951-2',\n names: {\n en: ['Sodium', 'Na'],\n pt: ['Sódio', 'Na'],\n },\n unit: 'mEq/L',\n },\n {\n category: 'rins',\n code: 'Creatinine_Urine',\n codeAliases: ['Urine_Creatinine'],\n loinc: '2161-8',\n names: {\n en: ['Creatinine Urine', 'Urine Creatinine', 'Creatinine Random Urine'],\n pt: ['Creatinina Urinária', 'Creatinina na Urina'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'rins',\n code: 'Albumin_Creatinine_Ratio',\n codeAliases: ['ACR'],\n loinc: '9318-7',\n names: {\n en: [\n 'Albumin/Creatinine Ratio',\n 'Albumin Creatinine Ratio',\n 'ACR',\n 'Urine Albumin to Creatinine Ratio',\n ],\n pt: [\n 'Razão Albumina/Creatinina',\n 'Relação Albumina Creatinina',\n 'RAC',\n 'Razão Albumina Creatinina Urinária',\n ],\n },\n unit: 'mg/g',\n },\n\n // ============================================================================\n // PANCREAS\n // ============================================================================\n {\n category: 'pancreas',\n code: 'Amylase',\n loinc: '1798-8',\n names: {\n en: ['Amylase', 'Serum Amylase'],\n pt: ['Amilase'],\n },\n unit: 'U/L',\n },\n {\n category: 'pancreas',\n code: 'Lipase',\n loinc: '3040-3',\n names: {\n en: ['Lipase', 'Serum Lipase'],\n pt: ['Lipase'],\n },\n unit: 'U/L',\n },\n\n // ============================================================================\n // ELECTROLYTES / ELETROLITOS\n // ============================================================================\n {\n category: 'eletrolitos',\n code: 'CO2',\n loinc: '2028-9',\n names: {\n en: ['Carbon Dioxide', 'CO2', 'Bicarbonate'],\n pt: ['Dióxido de Carbono', 'CO2', 'Bicarbonato'],\n },\n unit: 'mEq/L',\n },\n {\n category: 'eletrolitos',\n code: 'Chloride',\n loinc: '2075-0',\n names: {\n en: ['Chloride', 'Cl'],\n pt: ['Cloreto', 'Cloretos', 'Cl'],\n },\n unit: 'mEq/L',\n },\n\n // ============================================================================\n // URINE / URINA\n // ============================================================================\n {\n category: 'urina',\n code: 'Appearance_Urine',\n codeAliases: ['UrineAppearance'],\n loinc: '5767-9',\n names: {\n en: ['Urine Appearance', 'Appearance'],\n pt: ['Aparência da Urina', 'Aparência'],\n },\n },\n {\n category: 'urina',\n code: 'Bacteria_Urine',\n codeAliases: ['UrineBacteria'],\n // 5769-5 é \"Bacteria [#/area] in Urine sediment by Microscopy high power\n // field\", a contagem do sedimento que a unidade /HPF declara. Até out/2026\n // apontava para 630-4, \"Bacteria identified in Urine by Culture\": outro\n // exame, nominal, que identifica a espécie em cultura. Sem alias:\n // urocultura não é sedimento.\n loinc: '5769-5',\n names: {\n en: ['Urine Bacteria', 'Bacteria Urine', 'Bacteria, Urine', 'Bacteria'],\n pt: ['Bactérias na Urina', 'Bactérias'],\n },\n unit: '/HPF',\n },\n {\n category: 'urina',\n code: 'Bilirubin_Urine',\n codeAliases: ['UrineBilirubin'],\n loinc: '5770-3',\n names: {\n en: ['Urine Bilirubin', 'Bilirubin Urine', 'Bilirubin, Urine', 'Bilirubin'],\n pt: ['Bilirrubina na Urina', 'Bilirrubina Urina', 'Bilirrubina'],\n },\n },\n {\n category: 'urina',\n code: 'Blood_Urine',\n codeAliases: ['UrineBlood'],\n loinc: '5794-3',\n names: {\n en: ['Urine Blood', 'Occult Blood in Urine', 'Occult Blood', 'Blood'],\n pt: ['Sangue Oculto na Urina', 'Sangue Oculto'],\n },\n },\n {\n category: 'urina',\n code: 'Color_Urine',\n codeAliases: ['UrineColor'],\n loinc: '5778-6',\n names: {\n en: ['Urine Color', 'Color'],\n pt: ['Cor da Urina', 'Cor'],\n },\n },\n {\n category: 'urina',\n code: 'Glucose_Urine',\n loinc: '5792-7',\n names: {\n en: ['Urine Glucose', 'Glucose Urine', 'Glucose, Urine'],\n pt: ['Glicose na Urina', 'Glicose Urina'],\n },\n },\n {\n category: 'urina',\n code: 'HyalineCasts_Urine',\n codeAliases: ['UrineHyalineCast'],\n loinc: '5796-8',\n names: {\n en: ['Hyaline Casts Urine', 'Hyaline Cast', 'Hyaline Casts'],\n pt: ['Cilindros Hialinos na Urina', 'Cilindro Hialino'],\n },\n unit: '/LPF',\n },\n {\n category: 'urina',\n code: 'Ketones_Urine',\n codeAliases: ['UrineKetones'],\n loinc: '5797-6',\n names: {\n en: ['Urine Ketones', 'Ketones Urine', 'Ketones, Urine', 'Ketones'],\n pt: ['Cetonas na Urina', 'Cetonas'],\n },\n },\n {\n category: 'urina',\n code: 'LeukocyteEsterase_Urine',\n loinc: '5799-2',\n names: {\n en: ['Leukocyte Esterase Urine', 'Leukocyte Esterase', 'Leuk Esterase'],\n pt: ['Esterase Leucocitária na Urina', 'Esterase Leucocitária'],\n },\n },\n {\n category: 'urina',\n code: 'Leukocytes_Urine',\n codeAliases: ['UrineLeukocytes'],\n loinc: '5821-4',\n names: {\n en: ['Urine Leukocytes', 'Urine WBC', 'White Blood Cells in Urine', 'WBC Urine'],\n pt: ['Leucócitos na Urina', 'Leucócitos Urinários'],\n },\n unit: '/HPF',\n },\n {\n category: 'urina',\n code: 'Nitrite_Urine',\n codeAliases: ['UrineNitrite'],\n loinc: '5802-4',\n names: {\n en: ['Urine Nitrite', 'Nitrite Urine', 'Nitrite, Urine', 'Nitrite'],\n pt: ['Nitrito na Urina', 'Nitrito Urina', 'Nitrito'],\n },\n },\n {\n category: 'urina',\n code: 'pH_Urine',\n codeAliases: ['UrinaryPH'],\n loinc: '5803-2',\n names: {\n en: ['Urine pH', 'pH Urine', 'pH, Urine'],\n pt: ['pH Urinário', 'pH da Urina'],\n },\n },\n {\n category: 'urina',\n code: 'Protein_Urine',\n loinc: '5804-0',\n names: {\n en: ['Urine Protein', 'Protein Urine', 'Protein, Urine', 'Protein'],\n pt: ['Proteína na Urina', 'Proteína'],\n },\n },\n {\n category: 'urina',\n code: 'RBC_Urine',\n // 13945-1 é \"Erythrocytes [#/area] in Urine sediment by Microscopy high\n // power field\", o /HPF que o laudo imprime e que `Leukocytes_Urine` já usa\n // em 5821-4. Até out/2026 apontava para 5808-1, o mesmo exame em #/volume\n // (por mL): analito e material certos, propriedade errada. Fica como alias\n // porque o analito é o mesmo, e laudo de analisador automático que conte\n // por mL continua resolvendo em RBC_Urine.\n loinc: '13945-1',\n loincAliases: ['5808-1'],\n names: {\n en: ['Urine RBC', 'Red Blood Cells in Urine', 'RBC Urine', 'RBC, Urine'],\n pt: ['Hemácias na Urina'],\n },\n unit: '/HPF',\n },\n {\n category: 'urina',\n code: 'SpecificGravity_Urine',\n codeAliases: ['SpecificGravity'],\n loinc: '5811-5',\n names: {\n en: [\n 'Urine Specific Gravity',\n 'Specific Gravity Urine',\n 'Specific Gravity, Urine',\n 'Specific Gravity',\n ],\n pt: ['Densidade da Urina', 'Gravidade Específica'],\n },\n },\n {\n category: 'urina',\n code: 'SquamousEpithelial_Urine',\n codeAliases: ['UrineSquamousEpithelial'],\n loinc: '11277-1',\n names: {\n en: [\n 'Squamous Epithelial Cells Urine',\n 'Squamous Epithelial Cells, Urine',\n 'Squamous Epithelial Urine',\n 'Squamous Epithelial Cells',\n ],\n pt: ['Células Epiteliais Escamosas na Urina'],\n },\n unit: '/HPF',\n },\n {\n category: 'urina',\n code: 'Urobilinogen_Urine',\n codeAliases: ['Urine_Urobilinogen'],\n loinc: '20405-7',\n names: {\n en: ['Urobilinogen Urine', 'Urine Urobilinogen', 'Urobilinogen'],\n pt: ['Urobilinogênio Urinário', 'Urobilinogênio na Urina'],\n },\n unit: 'mg/dL',\n },\n\n // ============================================================================\n // TUMOR MARKERS / MARCADORES TUMORAIS\n // ============================================================================\n {\n category: 'marcadores-tumorais',\n code: 'AFP',\n codeAliases: ['AlfaFetoproteina', 'Alfa_Fetoprotena'],\n loinc: '1834-1',\n names: {\n en: ['Alpha-Fetoprotein', 'AFP', 'Alfa-Fetoprotein'],\n pt: ['Alfa-Fetoproteína', 'AFP', 'Alfafetoproteína'],\n },\n unit: 'ng/mL',\n },\n {\n category: 'marcadores-tumorais',\n code: 'CA125',\n codeAliases: ['CA_125'],\n loinc: '10334-1',\n names: {\n en: ['CA-125', 'CA 125', 'Cancer Antigen 125'],\n pt: ['CA-125', 'CA 125', 'Antígeno CA-125'],\n },\n sex: 'female',\n unit: 'U/mL',\n },\n {\n category: 'marcadores-tumorais',\n code: 'CEA',\n codeAliases: ['Carcinoembryonic_Antigen_CEA_Serum'],\n loinc: '2039-6',\n names: {\n en: ['Carcinoembryonic Antigen', 'CEA'],\n pt: ['Antígeno Carcinoembrionário', 'CEA'],\n },\n unit: 'ng/mL',\n },\n\n // ============================================================================\n // ADD-ON TESTS (Commented out for future use)\n // These are specialized tests available as add-ons in Function Health.\n // Uncomment when ready to support in the UI.\n // ============================================================================\n\n // --- CELIAC / GLUTEN INTOLERANCE (Add-on) ---\n {\n category: 'autoimunidade',\n code: 'Gliadin_Deamidated_IgA',\n // 63453-5 e 63459-2 (IgG) afirmam método, \"by Immunoassay\", e material,\n // \"Serum\". É o que os kits de DGP usam. A propriedade é unidades\n // arbitrárias por volume, e o laudo imprime U/mL; até out/2026 a unidade\n // declarada era \"U\", sem o volume.\n loinc: '63453-5',\n names: {\n en: [\n 'Gliadin (Deamidated) Antibodies IgA',\n 'DGP IgA',\n 'Deamidated Gliadin Peptide IgA',\n 'Gliadin Deamidated AB IgA',\n 'Gliadin Deamidated AB, IgA',\n 'Gliadin (Deamidated) AB (IgA)',\n 'Gliadin (Deamidated) AB (IGA)',\n ],\n pt: ['Anticorpos Anti-Gliadina Deamidada IgA', 'DGP IgA'],\n },\n unit: 'U/mL',\n },\n {\n category: 'autoimunidade',\n code: 'Gliadin_Deamidated_IgG',\n loinc: '63459-2',\n names: {\n en: [\n 'Gliadin (Deamidated) Antibodies IgG',\n 'DGP IgG',\n 'Deamidated Gliadin Peptide IgG',\n 'Gliadin Deamidated AB IgG',\n 'Gliadin Deamidated AB, IgG',\n 'Gliadin (Deamidated) AB (IgG)',\n 'Gliadin (Deamidated) AB (IGG)',\n ],\n pt: ['Anticorpos Anti-Gliadina Deamidada IgG', 'DGP IgG'],\n },\n unit: 'U/mL',\n },\n {\n category: 'autoimunidade',\n code: 'tTG_IgA',\n loinc: '31017-7',\n names: {\n en: [\n 'Tissue Transglutaminase IgA',\n 'tTG IgA',\n 'Anti-tTG IgA',\n 'Tissue Transglutaminase AB, IGA',\n 'Tissue Transglutaminase AB IgA',\n 'TTG AB IGA',\n 'T-Transglutaminase IgA',\n 'Transglutaminase IgA',\n ],\n pt: ['Transglutaminase Tecidual IgA', 'tTG IgA', 'Anti-tTG IgA'],\n },\n unit: 'U/mL',\n },\n {\n category: 'autoimunidade',\n code: 'tTG_IgG',\n loinc: '32998-7',\n names: {\n en: [\n 'Tissue Transglutaminase IgG',\n 'tTG IgG',\n 'Anti-tTG IgG',\n 'Tissue Transglutaminase AB, IGG',\n 'Tissue Transglutaminase AB IgG',\n 'TTG AB IGG',\n 'T-Transglutaminase IgG',\n 'Transglutaminase IgG',\n ],\n pt: ['Transglutaminase Tecidual IgG', 'tTG IgG', 'Anti-tTG IgG'],\n },\n unit: 'U/mL',\n },\n\n // ============================================================================\n // CARDIOVASCULAR GENETICS / GENÉTICA CARDIOVASCULAR\n // ============================================================================\n {\n category: 'coracao',\n code: 'APOE_Genotype',\n loinc: '21619-2',\n names: {\n en: [\n 'APOE Genotype',\n 'Apolipoprotein E Genotype',\n 'ApoE Gene',\n 'APO E Genotype',\n 'Cardio IQ APOE Genotype',\n ],\n pt: ['Genótipo APOE', 'Genótipo Apolipoproteína E'],\n },\n },\n\n // ============================================================================\n // METABOLIC ADD-ONS / MARCADORES METABÓLICOS ADICIONAIS\n // ============================================================================\n {\n category: 'metabolico',\n code: 'Adiponectin',\n loinc: '47828-9',\n names: {\n en: ['Adiponectin', 'Serum Adiponectin'],\n pt: ['Adiponectina'],\n },\n unit: 'mcg/mL',\n },\n\n // ============================================================================\n // BODY COMPOSITION / COMPOSIÇÃO CORPORAL (DEXA Scan)\n // ============================================================================\n {\n category: 'composicao-corporal',\n code: 'BMI',\n codeAliases: ['Body_Mass_Index'],\n loinc: '39156-5',\n names: {\n en: ['Body Mass Index', 'BMI'],\n pt: ['Índice de Massa Corporal', 'IMC'],\n },\n unit: 'kg/m2',\n },\n {\n category: 'composicao-corporal',\n code: 'BodyFatPct',\n loinc: '41982-0',\n names: {\n en: [\n 'Body Fat Percentage',\n 'Body Fat %',\n 'Total Body Fat %',\n 'Body Fat',\n 'Fat Percentage',\n 'Percent Body Fat',\n '% Body Fat',\n 'Total Body % Fat',\n // A Live Lean imprime \"Total Fat %\" na tabela regional da página 1 (a\n // linha \"Total\" é o percentual do corpo inteiro) e \"Total Fat (%)\" na\n // tabela de tendência. Os dois são o \"Total Body Fat %\" da mesma data.\n // Sem eles, o \"Total Fat\" da massa de gordura, logo abaixo, ancorava\n // `FatMass` na citação do percentual.\n 'Total Fat %',\n 'Total Fat (%)',\n ],\n pt: [\n 'Percentual de Gordura Corporal',\n '% Gordura Corporal',\n 'Gordura Corporal Total %',\n 'Percentual de Gordura',\n '% Gordura Total',\n 'Gordura Corporal',\n ],\n },\n unit: '%',\n },\n {\n category: 'composicao-corporal',\n code: 'FatMass',\n loinc: '73708-0',\n names: {\n // \"Total Fat\" é a coluna \"Total Fat (lbs)\" da tabela de tendência da\n // densitometria Live Lean, e traz o mesmo número do \"Fat Mass\" da página\n // 1 em todas as datas que as duas tabelas imprimem.\n en: ['Fat Mass', 'Total Fat Mass', 'Body Fat Mass', 'Fat Tissue Mass', 'Total Fat'],\n pt: ['Massa de Gordura', 'Massa Gorda', 'Massa de Gordura Total', 'Tecido Adiposo'],\n },\n unit: 'kg',\n },\n // Sem `loinc` de propósito. A entrada apontava para 73964-9, cujo nome\n // oficial é \"Body muscle mass Calculated\", e massa magra não é massa\n // muscular: em DEXA, massa magra é tudo que não é gordura nem mineral\n // ósseo, incluindo órgãos, água e tecido conjuntivo. Massa muscular é um\n // subconjunto dela.\n //\n // O campo sai em bundle FHIR, então a aproximação não ficava só aqui — um\n // consumidor externo leria massa muscular onde escrevemos massa magra. Não\n // há LOINC para massa magra (busca por \"lean body mass\" só devolve códigos\n // de urina ajustados por LBM), então o certo é não ter código, como já se\n // faz com FatFreeMass. Quem quer massa muscular usa MuscleMass, abaixo.\n {\n category: 'composicao-corporal',\n code: 'LeanMass',\n names: {\n // \"Total Lean\" é a coluna \"Total Lean (lbs)\" da mesma tabela de\n // tendência: tecido magro, igual ao \"Lean Mass\" da página 1, e não a\n // massa livre de gordura, que soma o mineral ósseo e fica em\n // `FatFreeMass`.\n en: [\n 'Lean Mass',\n 'Lean Body Mass',\n 'Lean Tissue Mass',\n 'Total Lean Mass',\n 'LBM',\n 'Total Lean',\n ],\n pt: ['Massa Magra', 'Massa Corporal Magra', 'Tecido Magro', 'Massa Magra Total'],\n },\n unit: 'kg',\n },\n {\n category: 'composicao-corporal',\n code: 'BMC',\n // No official LOINC code exists for total body BMC from DEXA\n names: {\n en: [\n 'Bone Mineral Content',\n 'BMC',\n 'Total Body BMC',\n 'Bone Mass',\n 'Total Bone Mineral Content',\n ],\n pt: [\n 'Conteúdo Mineral Ósseo',\n 'CMO',\n 'Massa Óssea',\n 'Conteúdo Mineral Ósseo Total',\n 'CMO Total',\n ],\n },\n unit: 'kg',\n },\n {\n category: 'composicao-corporal',\n code: 'FatFreeMass',\n // No official LOINC code exists for fat-free mass from DEXA\n names: {\n en: ['Fat-Free Mass', 'Fat Free Mass', 'Fat Free', 'FFM', 'Non-Fat Mass'],\n pt: ['Massa Livre de Gordura', 'Massa Isenta de Gordura', 'MLG'],\n },\n unit: 'kg',\n },\n {\n category: 'composicao-corporal',\n code: 'VATVolume',\n // A tabela de tendência do DEXA traz a seção \"Visceral Adipose Tissue (VAT)\"\n // com as colunas \"Fat Mass\" e \"Volume\", e o modelo nomeia a linha com o\n // prefixo da seção. Antes do nome abaixo, o valor era gravado com o código\n // `UNKNOWN_` que fica aqui como alias, e o `normalizeCode` na leitura\n // devolve as observações já gravadas para este código.\n codeAliases: ['UNKNOWN_Visceral_Adipose_Tissue_VAT_Volume'],\n // No official LOINC code exists for visceral adipose tissue volume\n names: {\n en: [\n 'Visceral Fat Volume',\n 'VAT Volume',\n 'VATVolume',\n 'Visceral Adipose Tissue Volume',\n 'Visceral Adipose Tissue (VAT) Volume',\n 'VAT',\n // \"Visceral Fat\" e \"Gordura Visceral\" nus não dizem qual das duas\n // medidas o laudo traz, então também estão no `VisceralFatLevel`. O\n // pré-scan devolve os dois candidatos e o modelo decide pela unidade e\n // pela ordem de grandeza, que é o que separa um índice 9 de 120 cm³.\n 'Visceral Fat',\n 'Visceral Volume',\n ],\n pt: [\n 'Volume de Gordura Visceral',\n 'Volume TAV',\n 'Tecido Adiposo Visceral Volume',\n 'Gordura Visceral',\n 'Volume Visceral',\n ],\n },\n unit: 'cm³',\n },\n {\n category: 'composicao-corporal',\n code: 'VATMass',\n // Mesmo caso do `VATVolume`: a coluna da tendência do DEXA é \"Fat Mass\", e\n // o nome chega como \"Visceral Adipose Tissue (VAT) Fat Mass\".\n codeAliases: ['UNKNOWN_Visceral_Adipose_Tissue_VAT_Fat_Mass'],\n // No official LOINC code exists for visceral adipose tissue mass\n names: {\n en: [\n 'Visceral Fat Mass',\n 'VAT Mass',\n 'VATMass',\n 'Visceral Adipose Tissue Mass',\n 'Visceral Adipose Tissue (VAT) Fat Mass',\n 'Visceral Adipose Tissue Fat Mass',\n 'VAT Fat Mass',\n 'Visceral Adipose Tissue',\n 'Visceral Mass',\n ],\n pt: [\n 'Massa de Gordura Visceral',\n 'Massa TAV',\n 'Tecido Adiposo Visceral Massa',\n 'Tecido Adiposo Visceral',\n 'Massa Visceral',\n ],\n },\n unit: 'kg',\n },\n {\n category: 'composicao-corporal',\n code: 'AndroidGynoidRatio',\n // No official LOINC code exists for android/gynoid ratio\n names: {\n en: [\n 'Android/Gynoid Ratio',\n 'A/G Ratio',\n 'Android Gynoid Ratio',\n 'AndroidGynoidRatio',\n 'AG Ratio',\n 'Android to Gynoid Ratio',\n 'AndrogenGynoindRatio',\n 'Androgen Gynoid Ratio',\n ],\n pt: [\n 'Razão Androide/Ginoide',\n 'Razão A/G',\n 'Relação Androide Ginoide',\n 'Razão AG',\n 'Índice Androide/Ginoide',\n ],\n },\n unit: 'razão',\n },\n {\n category: 'composicao-corporal',\n code: 'AndroidFatPct',\n // No official LOINC code exists for android region fat percentage\n names: {\n en: [\n 'Android Fat Percentage',\n 'Android Fat %',\n 'AndroidFatPct',\n 'AndroidFatPercent',\n 'Android Region Fat %',\n 'Abdominal Fat %',\n 'Android % Fat',\n ],\n pt: [\n 'Percentual de Gordura Androide',\n '% Gordura Androide',\n 'Gordura Região Androide %',\n '% Gordura Abdominal',\n ],\n },\n unit: '%',\n },\n {\n category: 'composicao-corporal',\n code: 'GynoidFatPct',\n // No official LOINC code exists for gynoid region fat percentage\n names: {\n en: [\n 'Gynoid Fat Percentage',\n 'Gynoid Fat %',\n 'GynoidFatPct',\n 'GynoidFatPercent',\n 'GynoindFatPercent',\n 'Gynoid Region Fat %',\n 'Hip Fat %',\n 'Gynoid % Fat',\n ],\n pt: [\n 'Percentual de Gordura Ginoide',\n '% Gordura Ginoide',\n 'Gordura Região Ginoide %',\n '% Gordura Quadril',\n ],\n },\n unit: '%',\n },\n {\n category: 'composicao-corporal',\n code: 'TotalMass',\n loinc: '29463-7',\n names: {\n en: ['Total Mass', 'Total Body Mass', 'Body Weight', 'Weight'],\n pt: ['Massa Total', 'Massa Corporal Total', 'Peso Corporal', 'Peso'],\n },\n unit: 'kg',\n },\n\n // ===========================================================================\n // Composição corporal por bioimpedância, adipometria e antropometria\n // ===========================================================================\n //\n // POLÍTICA DE `loinc` AUSENTE, e o que ela custa\n //\n // Várias entradas abaixo não têm `loinc`. Isso não é pendência esquecida: é\n // o resultado de procurar e não achar, e a decisão tem consequência que\n // vale enunciar uma vez.\n //\n // O que muda sem o código: a observação continua sendo exportada em FHIR e\n // continua aparecendo para o usuário, mas o `Observation.code` sai só com o\n // nosso código interno, sem identificador interoperável. Um consumidor\n // externo consegue ler o valor e a unidade, e não consegue mapear a medida\n // para o vocabulário dele sem acordo bilateral. Na prática: exibível\n // sempre, comparável entre sistemas só quando há LOINC.\n //\n // Por que ainda assim é o certo: código errado é pior que código ausente.\n // Ausente o consumidor sabe que precisa perguntar; errado ele integra com\n // confiança e erra em silêncio. Esta mesma PR corrige um caso desses, em\n // que `LeanMass` apontava para \"Body muscle mass\" e o IG publicava massa\n // muscular sob o rótulo de massa magra.\n //\n // Como preencher depois: quando a LOINC publicar o conceito, basta somar o\n // campo `loinc` — o código interno não muda, e as observações já gravadas\n // não precisam ser reescritas, porque a chave é o nosso código.\n //\n // Todos os códigos aqui foram conferidos na API pública da NLM (Clinical\n // Table Search Service), e a ausência só foi registrada depois de tentar\n // múltiplas formulações: \"total body water\" não devolve nada, \"body water\"\n // devolve os dois códigos abaixo.\n //\n // As 13 entradas sem código, e o motivo de cada uma:\n //\n // MuscleMassIndex corte publicado é sobre massa apendicular, não total\n // VisceralFatLevel índice de 1 a 20; 73707-2 é área, outra grandeza\n // ResidualMass conceito de fracionamento antropométrico, não LOINC\n // BasalMetabolicRate candidatos são índice ou RMR medido, ver nota local\n // ExtracellularWater \"extracellular water\" não devolve nada\n // IntracellularWater \"intracellular water\" não devolve nada\n // ECWToTBWRatio razão derivada, sem conceito próprio\n // WaistToHeightRatio \"waist to height\" não devolve nada\n // ConicityIndex índice derivado, sem conceito próprio\n // SkinfoldSubscapular LOINC só tem tríceps, coxa e cintura\n // SkinfoldSuprailiac idem\n // SkinfoldChest idem\n // SkinfoldMidaxillary idem\n\n // Bioimpedância (BIA)\n {\n category: 'composicao-corporal',\n code: 'TotalBodyWater',\n // 101683-1 é \"Body water mass\", em kg; o aparelho de bioimpedância imprime\n // litros. É o único código de água corporal total no LOINC 2.82 (o outro,\n // 101684-9, é o percentual), e para água 1 L pesa 1 kg, então o número não\n // muda. O teste de eixos lista a entrada como exceção com este motivo.\n loinc: '101683-1',\n names: {\n en: ['Total Body Water', 'Body Water', 'TBW', 'Total Water'],\n pt: ['Água Corporal Total', 'Água Corporal', 'ACT', 'Água Total'],\n },\n unit: 'L',\n },\n {\n category: 'composicao-corporal',\n code: 'BodyWaterPct',\n loinc: '101684-9',\n names: {\n en: ['Body Water Percentage', 'Percentage of Body Water', '% Body Water', 'Water %'],\n pt: ['Percentual de Água Corporal', '% Água Corporal', 'Água Corporal %'],\n },\n unit: '%',\n },\n {\n category: 'composicao-corporal',\n code: 'MuscleMass',\n loinc: '73964-9',\n names: {\n en: ['Muscle Mass', 'Skeletal Muscle Mass', 'SMM', 'Body Muscle Mass'],\n pt: [\n 'Massa Muscular',\n 'Massa Muscular Esquelética',\n 'MME',\n 'Massa Muscular Corporal',\n 'Músculo',\n ],\n },\n unit: 'kg',\n },\n // Derivado, não extraído: `MuscleMass / altura²`, calculado pelo\n // `calculadoras-clinicas` a partir da altura que o usuário informa no\n // cadastro. Mesmo ajuste que o IMC faz com o peso, e serve para a medida\n // ser comparável entre estaturas diferentes e ao longo do tempo.\n //\n // Sem `loinc` e sem faixa, e agora com fonte para a decisão em vez de só\n // cautela. O EWGSOP2 (Age and Ageing, 2019, DOI 10.1093/ageing/afy169)\n // separa explicitamente \"total body Skeletal Muscle Mass (SMM)\" de\n // \"Appendicular Skeletal Muscle Mass (ASM)\", e os cortes publicados são\n // sobre ASM. `MuscleMass` aqui é total, então o corte não se aplica.\n //\n // O mesmo consenso ainda diz, sobre ajustar por tamanho corporal: \"The\n // authors make no recommendation to adjust for body size, but adjustment\n // can be made if data are available for a relevant normative population.\"\n // Não temos população normativa brasileira para bioimpedância, e o\n // consenso registra que a equação de Sergi, padrão do método, foi\n // derivada em europeus idosos.\n //\n // Por isso o índice existe para acompanhar a própria evolução, e não para\n // classificar.\n {\n category: 'composicao-corporal',\n code: 'MuscleMassIndex',\n names: {\n en: ['Muscle Mass Index', 'Skeletal Muscle Mass Index', 'SMI', 'SMMI'],\n pt: ['Índice de Massa Muscular', 'IMM', 'Índice de Massa Muscular Esquelética'],\n },\n unit: 'kg/m2',\n },\n {\n category: 'composicao-corporal',\n code: 'PhaseAngle',\n // 107160-4 é \"Phase angle Xc/R [Ratio] Bioelectrical impedance analysis\",\n // único código de ângulo de fase. O aparelho imprime graus (arctan Xc/R)\n // e o LOINC declara razão com unidade-exemplo %. Fica em graus, que é o\n // que o laudo traz, e o teste de eixos lista a entrada como exceção.\n loinc: '107160-4',\n names: {\n en: ['Phase Angle', 'Whole Body Phase Angle', 'PhA', 'AnglePhase'],\n pt: ['Ângulo de Fase', 'Ângulo de Fase Corporal'],\n },\n unit: 'deg',\n },\n // O nível de gordura visceral do InBody e similares é um índice\n // adimensional de 1 a 20, e NÃO é o mesmo que VATMass ou VATVolume, que\n // vêm de DEXA em massa e volume. LOINC 73707-2 é \"Visceral fat [Area]\", em\n // área, então também não serve. Fica sem código, com unidade vazia, para\n // não ser confundido com nenhum dos três.\n {\n category: 'composicao-corporal',\n code: 'VisceralFatLevel',\n names: {\n en: ['Visceral Fat Level', 'Visceral Fat Index', 'VFL', 'Visceral Fat'],\n pt: [\n 'Nível de Gordura Visceral',\n 'Índice de Gordura Visceral',\n 'Gordura Visceral Nível',\n // Termo nu, compartilhado com o `VATVolume` de propósito. Ver o\n // comentário lá.\n 'Gordura Visceral',\n ],\n },\n unit: '',\n },\n // Compartimentos de água. Sem LOINC: busca por \"extracellular water\" e\n // \"intracellular water\" não devolve nada, ao contrário de \"body water\",\n // que rendeu os dois códigos usados acima.\n {\n category: 'composicao-corporal',\n code: 'ExtracellularWater',\n names: {\n en: ['Extracellular Water', 'ECW'],\n pt: ['Água Extracelular', 'AEC'],\n },\n unit: 'L',\n },\n {\n category: 'composicao-corporal',\n code: 'IntracellularWater',\n names: {\n en: ['Intracellular Water', 'ICW'],\n pt: ['Água Intracelular', 'AIC'],\n },\n unit: 'L',\n },\n // Razão entre água extracelular e total. É o marcador de retenção hídrica\n // e de estado inflamatório que os aparelhos de bioimpedância reportam, e\n // vem adimensional.\n {\n category: 'composicao-corporal',\n code: 'ECWToTBWRatio',\n names: {\n en: ['ECW/TBW', 'ECW_TBW', 'ECW to TBW Ratio', 'Extracellular Water Ratio'],\n pt: ['Relação AEC/ACT', 'Razão Água Extracelular'],\n },\n unit: '',\n },\n {\n category: 'composicao-corporal',\n code: 'ResidualMass',\n names: {\n en: ['Residual Mass', 'Residual Weight'],\n pt: ['Massa Residual', 'Peso Residual'],\n },\n unit: 'kg',\n },\n // Sem `loinc` até alguém decidir com a definição completa em mãos. Os\n // candidatos não servem como estão: 50042-1 é \"Basal metabolic rate\n // index\", um índice e não kcal/dia; 82278-3 é \"Measured RMR\", medido por\n // calorimetria indireta, enquanto o aparelho de bioimpedância *estima* a\n // partir da massa magra; 82286-6 \"Predicted RMR\" é o mais próximo, mas\n // ainda é RMR e não TMB. Colocar qualquer um deles repetiria o erro que\n // esta mesma PR corrige em LeanMass.\n {\n category: 'composicao-corporal',\n code: 'BasalMetabolicRate',\n names: {\n en: ['Basal Metabolic Rate', 'BMR'],\n pt: ['Taxa Metabólica Basal', 'TMB', 'Metabolismo Basal', 'Gasto Energético Basal'],\n },\n unit: 'kcal/d',\n },\n\n // Antropometria\n {\n category: 'composicao-corporal',\n code: 'WaistCircumference',\n // 8280-0 é a medida em si, e afirma sítio e método: \"at umbilicus by Tape\n // measure\". 56086-2, que parecia o óbvio pela busca, é \"Adult Waist\n // Circumference Protocol\", um protocolo PhenX e não um resultado.\n loinc: '8280-0',\n names: {\n en: ['Waist Circumference', 'Abdominal Circumference', 'Waist'],\n pt: [\n 'Circunferência de Cintura',\n 'Circunferência Abdominal',\n 'Perímetro Abdominal',\n 'Cintura',\n ],\n },\n unit: 'cm',\n },\n // O EWGSOP2 usa a panturrilha como proxy de massa muscular onde não há\n // outro método disponível, o que a torna útil em consulta sem aparelho.\n {\n category: 'composicao-corporal',\n code: 'CalfCircumference',\n loinc: '107112-5',\n names: {\n en: ['Calf Circumference', 'Calf Girth'],\n pt: ['Circunferência da Panturrilha', 'Perímetro da Panturrilha', 'Panturrilha'],\n },\n unit: 'cm',\n },\n {\n category: 'composicao-corporal',\n code: 'WaistToHeightRatio',\n names: {\n en: ['Waist to Height Ratio', 'Waist-to-Height Ratio', 'WHtR'],\n pt: ['Razão Cintura-Altura', 'Relação Cintura-Estatura', 'RCEst'],\n },\n unit: '',\n },\n {\n category: 'composicao-corporal',\n code: 'ConicityIndex',\n names: {\n en: ['Conicity Index', 'C Index'],\n pt: ['Índice de Conicidade', 'Índice C'],\n },\n unit: '',\n },\n\n // Dobras cutâneas (adipometria)\n //\n // A LOINC tem apenas três sítios: tríceps, coxa e cintura. Os outros quatro\n // que os protocolos brasileiros medem ficam sem código, e é por ausência\n // confirmada, não por falta de busca. Entram individualmente porque o\n // protocolo de somatório varia (Pollock 3 ou 7 dobras, Faulkner, Guedes) e\n // guardar só a soma perderia o dado de origem.\n {\n category: 'composicao-corporal',\n code: 'SkinfoldTriceps',\n loinc: '8354-3',\n names: {\n en: ['Triceps Skinfold', 'Tricipital Skinfold', 'Skin Fold Thickness Triceps', 'Triceps'],\n pt: ['Dobra Tricipital', 'Dobra Cutânea Tricipital', 'Tricipital', 'DCT'],\n },\n unit: 'mm',\n },\n {\n category: 'composicao-corporal',\n code: 'SkinfoldThigh',\n loinc: '8353-5',\n names: {\n en: ['Thigh Skinfold', 'Skin Fold Thickness Thigh', 'Thigh'],\n pt: ['Dobra da Coxa', 'Dobra Cutânea Coxa', 'Coxa'],\n },\n unit: 'mm',\n },\n {\n category: 'composicao-corporal',\n code: 'SkinfoldAbdominal',\n loinc: '8355-0',\n names: {\n en: ['Abdominal Skinfold', 'Waist Skinfold', 'Skin Fold Thickness Waist'],\n pt: ['Dobra Abdominal', 'Dobra Cutânea Abdominal', 'Abdominal'],\n },\n unit: 'mm',\n },\n {\n category: 'composicao-corporal',\n code: 'SkinfoldSubscapular',\n names: {\n en: ['Subscapular Skinfold', 'Subscapular'],\n pt: ['Dobra Subescapular', 'Dobra Cutânea Subescapular', 'Subescapular'],\n },\n unit: 'mm',\n },\n {\n category: 'composicao-corporal',\n code: 'SkinfoldSuprailiac',\n names: {\n en: ['Suprailiac Skinfold', 'Supra-iliac Skinfold', 'Suprailiac'],\n pt: ['Dobra Supra-ilíaca', 'Dobra Cutânea Supra-ilíaca', 'Supra-ilíaca', 'Suprailiaca'],\n },\n unit: 'mm',\n },\n {\n category: 'composicao-corporal',\n code: 'SkinfoldChest',\n names: {\n en: ['Chest Skinfold', 'Pectoral Skinfold', 'Chest'],\n pt: ['Dobra Peitoral', 'Dobra Cutânea Peitoral', 'Peitoral', 'Dobra Torácica'],\n },\n unit: 'mm',\n },\n {\n category: 'composicao-corporal',\n code: 'SkinfoldMidaxillary',\n names: {\n en: ['Midaxillary Skinfold', 'Mid-axillary Skinfold', 'Midaxillary', 'MidAxilla'],\n pt: ['Dobra Axilar Média', 'Dobra Cutânea Axilar Média', 'Axilar Média'],\n },\n unit: 'mm',\n },\n\n // Regional Body Composition (DEXA)\n // Note: No official LOINC codes exist for regional lean/fat mass measurements\n // Hidden from UI for now - may be shown in future regional breakdown view\n //\n // \"Arms Total\" e \"Legs Total\" são a linha dos dois membros somados na tabela\n // de equilíbrio muscular do laudo da Live Lean (GE Lunar Prodigy). Conferido\n // em cinco laudos: a massa gorda e a magra dessa linha são a soma do lado\n // direito com o esquerdo, e são o mesmo número das colunas \"Arms Fat\" e\n // \"Arms Lean\" da tabela de tendência e da linha \"Arms\" da tabela regional.\n // O modelo nomeia a linha \"Arms Total Fat Mass\", e sem o nome ela virava\n // `UNKNOWN_`, enquanto a mesma medida em outra página ia para `ArmsFatMass`:\n // a série do gráfico partia em dois códigos. O `codeAliases` cobre o que já\n // foi gravado assim.\n //\n // As outras colunas da mesma linha ficam sem código de propósito. \"Fat %\" e\n // \"Lean %\" são percentual do membro, e \"Total Mass\" é a massa do membro;\n // o catálogo não tem código regional para nenhum dos dois. \"Right Arm\" e\n // \"Left Arm\" são um lado só, e \"Arms Difference\" é direito menos esquerdo.\n {\n category: 'composicao-corporal',\n code: 'ArmsLeanMass',\n codeAliases: ['UNKNOWN_Arms_Total_Lean_Mass'],\n hidden: true,\n names: {\n en: [\n 'Arms Lean Mass',\n 'Arms Total Lean Mass',\n 'Arms Lean',\n 'Arms Lean Tissue',\n 'Arm Lean Mass',\n 'Arm Lean',\n 'Upper Limb Lean Mass',\n 'Upper Limbs Lean Mass',\n 'Upper Extremity Lean Mass',\n 'Lean Arms',\n 'Lean Mass Arms',\n 'Lean Mass Bracos',\n ],\n pt: [\n 'Massa Magra Braços',\n 'Tecido Magro Braços',\n 'Massa Magra Membros Superiores',\n 'Braços Massa Magra',\n 'Massa Magra dos Braços',\n 'MMSS Massa Magra',\n 'Membros Superiores Magro',\n ],\n },\n unit: 'kg',\n },\n {\n category: 'composicao-corporal',\n code: 'ArmsFatMass',\n codeAliases: ['UNKNOWN_Arms_Total_Fat_Mass'],\n hidden: true,\n names: {\n en: [\n 'Arms Fat Mass',\n 'Arms Total Fat Mass',\n 'Arms Fat',\n 'Arms Fat Tissue',\n 'Arm Fat Mass',\n 'Arm Fat',\n 'Upper Limb Fat Mass',\n 'Upper Limbs Fat Mass',\n 'Upper Extremity Fat Mass',\n 'Fat Arms',\n 'Fat Mass Arms',\n 'Fat Mass Bracos',\n ],\n pt: [\n 'Massa de Gordura Braços',\n 'Tecido Adiposo Braços',\n 'Gordura Membros Superiores',\n 'Braços Gordura',\n 'Gordura dos Braços',\n 'Braços Massa Gorda',\n 'MMSS Gordura',\n 'Membros Superiores Gordura',\n ],\n },\n unit: 'kg',\n },\n {\n category: 'composicao-corporal',\n code: 'LegsLeanMass',\n codeAliases: ['UNKNOWN_Legs_Total_Lean_Mass'],\n hidden: true,\n names: {\n en: [\n 'Legs Lean Mass',\n 'Legs Total Lean Mass',\n 'Legs Lean',\n 'Legs Lean Tissue',\n 'Leg Lean Mass',\n 'Leg Lean',\n 'Lower Limb Lean Mass',\n 'Lower Limbs Lean Mass',\n 'Lower Extremity Lean Mass',\n 'Lean Legs',\n 'Lean Mass Legs',\n 'Lean Mass Pernas',\n ],\n pt: [\n 'Massa Magra Pernas',\n 'Tecido Magro Pernas',\n 'Massa Magra Membros Inferiores',\n 'Pernas Massa Magra',\n 'Massa Magra das Pernas',\n 'MMII Massa Magra',\n 'Membros Inferiores Magro',\n ],\n },\n unit: 'kg',\n },\n {\n category: 'composicao-corporal',\n code: 'LegsFatMass',\n codeAliases: ['UNKNOWN_Legs_Total_Fat_Mass'],\n hidden: true,\n names: {\n en: [\n 'Legs Fat Mass',\n 'Legs Total Fat Mass',\n 'Legs Fat',\n 'Legs Fat Tissue',\n 'Leg Fat Mass',\n 'Leg Fat',\n 'Lower Limb Fat Mass',\n 'Lower Limbs Fat Mass',\n 'Lower Extremity Fat Mass',\n 'Fat Legs',\n 'Fat Mass Legs',\n 'Fat Mass Pernas',\n ],\n pt: [\n 'Massa de Gordura Pernas',\n 'Tecido Adiposo Pernas',\n 'Gordura Membros Inferiores',\n 'Pernas Gordura',\n 'Gordura das Pernas',\n 'Pernas Massa Gorda',\n 'MMII Gordura',\n 'Membros Inferiores Gordura',\n ],\n },\n unit: 'kg',\n },\n {\n category: 'composicao-corporal',\n code: 'TrunkLeanMass',\n hidden: true,\n names: {\n en: [\n 'Trunk Lean Mass',\n 'Trunk Lean',\n 'Trunk Lean Tissue',\n 'Torso Lean Mass',\n 'Core Lean Mass',\n 'Lean Trunk',\n 'Lean Mass Trunk',\n 'Lean Mass Tronco',\n ],\n pt: [\n 'Massa Magra Tronco',\n 'Tecido Magro Tronco',\n 'Massa Magra Core',\n 'Tronco Massa Magra',\n 'Massa Magra do Tronco',\n ],\n },\n unit: 'kg',\n },\n {\n category: 'composicao-corporal',\n code: 'TrunkFatMass',\n hidden: true,\n names: {\n en: [\n 'Trunk Fat Mass',\n 'Trunk Fat',\n 'Trunk Fat Tissue',\n 'Torso Fat Mass',\n 'Core Fat Mass',\n 'Fat Trunk',\n 'Fat Mass Trunk',\n 'Fat Mass Tronco',\n ],\n pt: [\n 'Massa de Gordura Tronco',\n 'Tecido Adiposo Tronco',\n 'Gordura Core',\n 'Tronco Gordura',\n 'Gordura do Tronco',\n 'Tronco Massa Gorda',\n ],\n },\n unit: 'kg',\n },\n\n // ============================================================================\n // BONE DENSITY / DENSIDADE ÓSSEA (DEXA Scan)\n // ============================================================================\n {\n category: 'densidade-ossea',\n code: 'BMD_Total',\n // No official LOINC code exists for total body BMD (only site-specific)\n names: {\n en: [\n 'Total Body BMD',\n 'BMD Total',\n 'BMD',\n 'TotalBodyBMD',\n 'Bone Mineral Density',\n 'Total BMD',\n 'Bone Density',\n 'Total Body Bone Density',\n ],\n pt: [\n 'DMO Corpo Total',\n 'DMO Total',\n 'DMO',\n 'Densidade Mineral Óssea',\n 'Densidade Óssea Total',\n 'Densidade Óssea',\n ],\n },\n unit: 'g/cm²',\n },\n {\n category: 'densidade-ossea',\n code: 'TScore_Total',\n // No official LOINC code exists for total body T-score (only site-specific)\n names: {\n en: [\n 'Total Body T-Score',\n 'T-Score',\n 'T Score',\n 'TScore',\n 'TScore_Total',\n 'TotalBodyTScore',\n 'BMD T-Score',\n 'Bone Density T-Score',\n 'T-Score Total Body',\n ],\n pt: ['T-Score Corpo Total', 'T-Score', 'Escore T', 'T-Score DMO', 'T-Score Densidade Óssea'],\n },\n unit: 'score',\n },\n {\n category: 'densidade-ossea',\n code: 'ZScore_Total',\n // No official LOINC code exists for total body Z-score (only site-specific)\n names: {\n en: [\n 'Total Body Z-Score',\n 'Z-Score',\n 'Z Score',\n 'ZScore',\n 'ZScore_Total',\n 'TotalBodyZScore',\n 'BMD Z-Score',\n 'Bone Density Z-Score',\n 'Z-Score Total Body',\n ],\n pt: ['Z-Score Corpo Total', 'Z-Score', 'Escore Z', 'Z-Score DMO', 'Z-Score Densidade Óssea'],\n },\n unit: 'score',\n },\n\n // ============================================================================\n // CARDIOVASCULAR MARKERS — Insuficiência cardíaca e dano miocárdico\n // ============================================================================\n {\n category: 'coracao',\n code: 'NTproBNP',\n loinc: '33762-6',\n names: {\n en: ['NT-proBNP', 'N-Terminal pro B-Type Natriuretic Peptide', 'NT-pro-BNP'],\n pt: ['NT-proBNP', 'Peptídeo Natriurético Tipo B N-Terminal', 'Pró-BNP N-Terminal'],\n },\n unit: 'pg/mL',\n },\n {\n category: 'coracao',\n code: 'BNP',\n loinc: '30934-4',\n names: {\n en: ['BNP', 'B-Type Natriuretic Peptide', 'Brain Natriuretic Peptide'],\n pt: ['BNP', 'Peptídeo Natriurético Tipo B', 'Peptídeo Natriurético Cerebral'],\n },\n unit: 'pg/mL',\n },\n {\n category: 'coracao',\n code: 'TroponinI',\n // 49563-0 afirma método: limite de detecção ≤ 0,01 ng/mL, o ensaio de alta\n // sensibilidade. Um resultado de troponina I convencional pede o código\n // sem método, 10839-9. Assimétrico com `TroponinT`, que fica no 6598-7 sem\n // método de propósito: a hs-cTnT em ng/L é a convenção dos laudos.\n loinc: '49563-0',\n names: {\n en: ['Troponin I', 'cTnI', 'Cardiac Troponin I', 'hs-TnI', 'High-Sensitivity Troponin I'],\n pt: ['Troponina I', 'cTnI', 'Troponina I Cardíaca', 'Troponina I Ultrassensível'],\n },\n unit: 'ng/mL',\n },\n {\n category: 'coracao',\n code: 'TroponinT',\n // 6598-7 não afirma método. A unidade ng/L é a convenção do ensaio de alta\n // sensibilidade (hs-cTnT), e o ensaio convencional em ng/mL converte por\n // fator exato (ver `units.ts`). Ver `TroponinI` para a assimetria.\n loinc: '6598-7',\n names: {\n en: ['Troponin T', 'cTnT', 'Cardiac Troponin T', 'hs-TnT', 'High-Sensitivity Troponin T'],\n pt: ['Troponina T', 'cTnT', 'Troponina T Cardíaca', 'Troponina T Ultrassensível'],\n },\n unit: 'ng/L',\n },\n\n // ============================================================================\n // COAGULATION — Coagulação\n // ============================================================================\n {\n category: 'sangue',\n code: 'DDimer',\n // 48065-7 é \"Fibrin D-dimer FEU [Mass/volume] in Platelet poor plasma\".\n // Até out/2026 apontava para 48066-5, o mesmo analito em DDU (unidades de\n // D-dímero), que vale cerca de metade do FEU. A faixa do catálogo (500\n // ng/mL, com o corte por idade de idade × 10) é da convenção FEU, e um\n // resultado em DDU avaliado contra ela deixaria passar metade dos\n // anormais. Sem alias: DDU é outra grandeza. Quando o laudo imprime só\n // \"ng/mL\", não há como saber a convenção pelo texto; o FEU é o que a\n // faixa pressupõe.\n loinc: '48065-7',\n names: {\n en: ['D-Dimer', 'D Dimer', 'Fibrin D-Dimer'],\n pt: ['Dímero-D', 'Dímero D', 'D-Dímero'],\n },\n unit: 'ng/mL',\n },\n {\n category: 'sangue',\n code: 'Fibrinogen',\n loinc: '3255-7',\n names: {\n en: ['Fibrinogen', 'Fibrinogen Activity'],\n pt: ['Fibrinogênio', 'Atividade do Fibrinogênio'],\n },\n unit: 'mg/dL',\n },\n\n // ============================================================================\n // HEMATOLOGY — Hematologia adicional\n // ============================================================================\n {\n category: 'figado',\n code: 'LDH',\n // 14804-9 afirma método: reação lactato → piruvato (L→P). O código sem\n // método, 2532-0, está DISCOURAGED, então um método tem que ser escolhido,\n // e L→P é o do procedimento de referência IFCC que os laboratórios\n // brasileiros usam, ainda que o laudo raramente imprima a direção. Se um\n // laudo declarar P→L, o código é outro (14805-6).\n loinc: '14804-9',\n // 2532-0 é o código genérico anterior, que o LOINC marca como DISCOURAGED.\n // Fica como alias para que laudo antigo e dado já armazenado continuem\n // resolvendo em LDH — a troca do código canônico não pode quebrar leitura\n // de histórico.\n loincAliases: ['2532-0'],\n names: {\n en: ['Lactate Dehydrogenase', 'LDH', 'LD'],\n pt: ['Desidrogenase Lática', 'DHL', 'LDH', 'Lactato Desidrogenase'],\n },\n unit: 'U/L',\n },\n\n // ============================================================================\n // ENDOCRINE — Eixo cálcio/fósforo\n // ============================================================================\n {\n category: 'hormonios',\n code: 'PTH',\n loinc: '2731-8',\n names: {\n en: ['Parathyroid Hormone', 'PTH', 'Intact PTH'],\n pt: ['Paratormônio', 'PTH', 'Hormônio da Paratireoide', 'PTH Intacto'],\n },\n unit: 'pg/mL',\n },\n\n // ============================================================================\n // IMMUNOLOGY — Complemento e imunoglobulinas\n // ============================================================================\n {\n category: 'autoimunidade',\n code: 'IgM',\n loinc: '2472-9',\n names: {\n en: ['Immunoglobulin M', 'IgM', 'Total IgM'],\n pt: ['Imunoglobulina M', 'IgM', 'IgM Total'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'autoimunidade',\n code: 'C3',\n loinc: '4485-9',\n names: {\n en: ['Complement C3', 'C3'],\n pt: ['Complemento C3', 'C3', 'Fração C3 do Complemento'],\n },\n unit: 'mg/dL',\n },\n {\n category: 'autoimunidade',\n code: 'C4',\n loinc: '4498-2',\n names: {\n en: ['Complement C4', 'C4'],\n pt: ['Complemento C4', 'C4', 'Fração C4 do Complemento'],\n },\n unit: 'mg/dL',\n },\n\n // ============================================================================\n // TUMOR MARKERS — Marcadores tumorais adicionais\n // ============================================================================\n {\n category: 'marcadores-tumorais',\n code: 'CA199',\n loinc: '24108-3',\n names: {\n en: ['CA 19-9', 'Carbohydrate Antigen 19-9', 'CA19-9'],\n pt: ['CA 19-9', 'Antígeno Carboidrato 19-9', 'CA19-9'],\n },\n unit: 'U/mL',\n },\n {\n category: 'marcadores-tumorais',\n code: 'CA153',\n loinc: '6875-9',\n names: {\n en: ['CA 15-3', 'Cancer Antigen 15-3', 'CA15-3'],\n pt: ['CA 15-3', 'Antígeno Câncer 15-3', 'CA15-3'],\n },\n sex: 'female',\n unit: 'U/mL',\n },\n {\n category: ['saude-feminina', 'marcadores-tumorais'],\n code: 'BetaHCG',\n loinc: '19080-1',\n names: {\n en: ['Beta-hCG', 'Beta Human Chorionic Gonadotropin', 'β-hCG Quantitative', 'hCG'],\n pt: [\n 'Beta-hCG',\n 'Beta Gonadotrofina Coriônica Humana',\n 'β-hCG Quantitativo',\n 'hCG',\n 'Gonadotrofina Coriônica',\n ],\n },\n unit: 'mIU/mL',\n },\n\n // ============================================================================\n // RENAL — Filtração glomerular alternativa\n // ============================================================================\n {\n category: 'rins',\n code: 'CystatinC',\n loinc: '33863-2',\n names: {\n en: ['Cystatin C', 'Cystatin-C'],\n pt: ['Cistatina C', 'Cistatina-C'],\n },\n unit: 'mg/L',\n },\n\n // ============================================================================\n // NUTRIENTS — Oligoelementos adicionais\n // ============================================================================\n {\n category: 'nutrientes',\n code: 'Selenium',\n loinc: '5724-0',\n names: {\n en: ['Selenium', 'Se'],\n pt: ['Selênio', 'Se'],\n },\n unit: 'µg/L',\n },\n\n // ============================================================================\n // METABOLIC — Cetonas séricas\n // ============================================================================\n {\n category: 'pancreas',\n code: 'BetaHydroxybutyrate',\n // 6873-4 é \"Beta hydroxybutyrate [Moles/volume] in Serum or Plasma\", o\n // que o laudo dosa em mmol/L. Até out/2026 apontava para 53060-0, que é\n // butirilcarnitina (C4) em líquido amniótico: analito e material errados\n // desde abr/2026, e nenhum check pegou porque o código existe e está\n // ACTIVE. Sem alias para o código antigo: ele nunca significou BHB, e\n // aceitá-lo na importação faria um laudo de carnitina virar cetona.\n loinc: '6873-4',\n names: {\n en: ['Beta-Hydroxybutyrate', 'β-Hydroxybutyrate', 'BHB', 'Ketone Bodies'],\n pt: ['Beta-Hidroxibutirato', 'β-Hidroxibutirato', 'BHB', 'Corpos Cetônicos'],\n },\n unit: 'mmol/L',\n },\n];\n\n// ============================================================================\n// LOOKUP MAPS (Generated from definitions)\n// ============================================================================\n\n/** Map LOINC code to internal code */\nconst loincToCodeMap = new Map<string, string>();\n\n/** Map internal code to LOINC */\nconst codeToLoincMap = new Map<string, string>();\n\n/** Map internal code to definition */\nconst codeToDefinitionMap = new Map<string, BiomarkerDefinition>();\n\n/** Set of all valid LOINC codes */\nconst validLoincSet = new Set<string>();\n\n/** Map code alias to canonical code */\nconst codeAliasToCanonicalMap = new Map<string, string>();\n\n/** Set of all valid codes (canonical + aliases) */\nconst validCodeSet = new Set<string>();\n\n// Initialize maps\nfor (const def of BIOMARKER_DEFINITIONS) {\n // Only add to LOINC maps if loinc is defined\n if (def.loinc) {\n loincToCodeMap.set(def.loinc, def.code);\n codeToLoincMap.set(def.code, def.loinc);\n validLoincSet.add(def.loinc);\n }\n\n codeToDefinitionMap.set(def.code, def);\n validCodeSet.add(def.code);\n\n // Handle LOINC aliases\n if (def.loincAliases) {\n for (const alias of def.loincAliases) {\n loincToCodeMap.set(alias, def.code);\n validLoincSet.add(alias);\n }\n }\n\n // O código por método resolve para o mesmo biomarcador. O inverso não: o\n // `codeToLoinc` continua devolvendo o código sem método.\n for (const variant of def.methodVariants ?? []) {\n loincToCodeMap.set(variant.loinc, def.code);\n validLoincSet.add(variant.loinc);\n }\n\n // Handle code aliases\n if (def.codeAliases) {\n for (const alias of def.codeAliases) {\n codeAliasToCanonicalMap.set(alias, def.code);\n validCodeSet.add(alias);\n // Also add alias to definition map for easy lookup\n codeToDefinitionMap.set(alias, def);\n }\n }\n}\n\n// ============================================================================\n// EXPORTED FUNCTIONS\n// ============================================================================\n\n/**\n * Convert LOINC code to internal code\n */\nexport function loincToCode(loinc: string): string | undefined {\n return loincToCodeMap.get(loinc);\n}\n\n/**\n * A variante por método de um biomarcador, quando `loinc` é uma delas.\n *\n * Devolve `undefined` para o código sem método e para código que não é\n * variante declarada daquele biomarcador.\n */\nexport function methodVariantOf(code: string, loinc: string): MethodVariant | undefined {\n return codeToDefinitionMap.get(code)?.methodVariants?.find((v) => v.loinc === loinc);\n}\n\n/**\n * Convert internal code to LOINC\n */\nexport function codeToLoinc(code: string): string | undefined {\n return codeToLoincMap.get(code);\n}\n\n/**\n * Check if a LOINC code is in our supported list\n */\nexport function isValidLoinc(loinc: string): boolean {\n return validLoincSet.has(loinc);\n}\n\n/**\n * Check if a code is valid (canonical or alias)\n */\nexport function isValidCode(code: string): boolean {\n return validCodeSet.has(code);\n}\n\n/**\n * Normalize a code alias to its canonical form.\n * Returns the canonical code if input is an alias, otherwise returns the input unchanged.\n *\n * Use this at data boundaries (e.g. parsing lab results) to map incoming aliases\n * to canonical codes. Do NOT use this as a fallback inside lookup functions —\n * dictionary keys (e.g. biomarkerRangeDefinitions) must use canonical codes directly.\n */\nexport function normalizeCode(code: string): string {\n return codeAliasToCanonicalMap.get(code) ?? code;\n}\n\n/**\n * Get the sex relevance for a biomarker code\n * @returns 'male', 'female', or 'both' (default)\n */\nexport function getSexForCode(code: string): 'male' | 'female' | 'both' {\n const def = codeToDefinitionMap.get(code);\n return def?.sex ?? 'both';\n}\n\n/**\n * Get all biomarker definitions filtered by sex\n * @param sex - 'male', 'female', or 'both' (returns all)\n */\nexport function getDefinitionsBySex(sex: 'male' | 'female' | 'both'): BiomarkerDefinition[] {\n if (sex === 'both') {\n return BIOMARKER_DEFINITIONS;\n }\n return BIOMARKER_DEFINITIONS.filter(\n (def) => def.sex === sex || def.sex === undefined || def.sex === 'both',\n );\n}\n\n/**\n * Get biomarker definition by code\n */\nexport function getDefinitionByCode(code: string): BiomarkerDefinition | undefined {\n return codeToDefinitionMap.get(code);\n}\n\n/**\n * Get biomarker definition by LOINC\n */\nexport function getDefinitionByLoinc(loinc: string): BiomarkerDefinition | undefined {\n const code = loincToCodeMap.get(loinc);\n return code ? codeToDefinitionMap.get(code) : undefined;\n}\n\n/**\n * Get all biomarker definitions\n */\nexport function getAllDefinitions(): BiomarkerDefinition[] {\n return BIOMARKER_DEFINITIONS;\n}\n\n/**\n * Get all visible biomarker definitions (excludes hidden biomarkers)\n */\nexport function getVisibleDefinitions(): BiomarkerDefinition[] {\n return BIOMARKER_DEFINITIONS.filter((def) => !def.hidden);\n}\n\n/**\n * Get all supported internal codes (canonical codes only, not aliases)\n */\nexport function getAllCodes(): string[] {\n return BIOMARKER_DEFINITIONS.map((def) => def.code);\n}\n\n/**\n * Get all supported LOINC codes\n */\nexport function getAllLoincCodes(): string[] {\n return Array.from(validLoincSet);\n}\n\n/**\n * Imprime o bloco de um biomarcador na referência entregue ao modelo de\n * extração. Compartilhado por generateLLMReference e\n * generateFilteredLLMReference, que antes duplicavam este trecho.\n *\n * Com LOINC, o bloco mantém três linhas (LOINC | Code, EN, PT). Sem LOINC,\n * tudo vai em uma linha só. Medido em produção (PRE-391): 20 observações de\n * 4 usuários gravadas com biomarkerName igual à linha \"EN:\" inteira, por\n * exemplo \"Subscapular Skinfold, Subscapular\". O modelo copiava a linha\n * como nome do analito, o code nunca resolvia e a medida se perdia. Só as\n * entradas sem LOINC eram afetadas, então só elas mudam de formato: sem uma\n * linha que comece com \"EN:\" ou \"PT:\", não há o que copiar por engano, e os\n * nomes continuam disponíveis para casar com o texto do PDF.\n */\nfunction pushDefinitionReference(lines: string[], def: BiomarkerDefinition): void {\n const ptNames = def.names.pt.join(', ');\n const enNames = def.names.en.join(', ');\n if (def.loinc) {\n lines.push(`- LOINC: ${def.loinc} | Code: ${def.code}`);\n lines.push(` EN: ${enNames}`);\n lines.push(` PT: ${ptNames}`);\n return;\n }\n lines.push(`- Code: ${def.code} (no LOINC, use the Code) | EN: ${enNames} | PT: ${ptNames}`);\n}\n\n/**\n * Generate LLM reference prompt for biomarker extraction\n * This is included in the extraction prompt so the LLM can output LOINC codes directly\n */\nexport function generateLLMReference(): string {\n const lines: string[] = [\n 'SUPPORTED BIOMARKERS (output the LOINC code or internal Code for each matched biomarker):',\n '',\n ];\n\n // Group by category for better organization\n const byCategory = new Map<string, BiomarkerDefinition[]>();\n for (const def of BIOMARKER_DEFINITIONS) {\n const categories = Array.isArray(def.category) ? def.category : [def.category];\n for (const cat of categories) {\n const existing = byCategory.get(cat) || [];\n existing.push(def);\n byCategory.set(cat, existing);\n }\n }\n\n for (const [category, defs] of byCategory) {\n lines.push(`[${category.toUpperCase()}]`);\n for (const def of defs) {\n pushDefinitionReference(lines, def);\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Generate biomarkerTests format for UI compatibility\n * This replaces the old hardcoded biomarkerTests.ts\n * Excludes hidden biomarkers from the output\n */\nexport function toBiomarkerTests(): Record<\n string,\n Array<{ pt: string; en: string; code: string }>\n> {\n const result: Record<string, Array<{ pt: string; en: string; code: string }>> = {};\n\n for (const def of BIOMARKER_DEFINITIONS) {\n // Skip hidden biomarkers\n if (def.hidden) continue;\n\n const categories = Array.isArray(def.category) ? def.category : [def.category];\n const ptName = def.names.pt[0] ?? def.code;\n const enName = def.names.en[0] ?? def.code;\n for (const category of categories) {\n if (!result[category]) {\n result[category] = [];\n }\n result[category]!.push({\n code: def.code,\n en: enName,\n pt: ptName,\n });\n }\n }\n\n return result;\n}\n\n/**\n * Biomarker search pattern for OCR text anchoring\n */\nexport interface BiomarkerSearchPattern {\n category: string | string[];\n code: string;\n loinc?: string;\n names: string[]; // All names (EN + PT) for this biomarker\n unit?: string; // Absent for qualitative biomarkers (urine dipstick, etc.)\n}\n\n/**\n * Get all biomarker search patterns for OCR text anchoring\n * Returns a flat list of all biomarker codes with their searchable names\n *\n * `category` and `unit` are exposed so anchoring consumers can tell\n * quantitative biomarkers from qualitative ones (which need different\n * matching rules — a qualitative marker has no number next to it).\n */\nexport function getAllSearchPatterns(): BiomarkerSearchPattern[] {\n return BIOMARKER_DEFINITIONS.map((def) => ({\n category: def.category,\n code: def.code,\n ...(def.loinc && { loinc: def.loinc }),\n names: [...def.names.en, ...def.names.pt],\n ...(def.unit && { unit: def.unit }),\n }));\n}\n\n/**\n * Generate filtered LLM reference for specific biomarker codes\n * Only includes biomarkers that were found in the OCR text\n */\nexport function generateFilteredLLMReference(codes: string[]): string {\n const codeSet = new Set(codes);\n const filteredDefs = BIOMARKER_DEFINITIONS.filter((def) => codeSet.has(def.code));\n\n if (filteredDefs.length === 0) {\n return 'NO MATCHING BIOMARKERS FOUND IN TEXT - Return empty biomarkers array.';\n }\n\n const lines: string[] = [\n 'ALLOWED BIOMARKERS (ONLY extract these - they were found in the document):',\n '',\n ];\n\n // Group by category for organization\n const byCategory = new Map<string, BiomarkerDefinition[]>();\n for (const def of filteredDefs) {\n const categories = Array.isArray(def.category) ? def.category : [def.category];\n for (const cat of categories) {\n const existing = byCategory.get(cat) || [];\n existing.push(def);\n byCategory.set(cat, existing);\n }\n }\n\n for (const [category, defs] of byCategory) {\n lines.push(`[${category.toUpperCase()}]`);\n for (const def of defs) {\n pushDefinitionReference(lines, def);\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Códigos que identificam um documento de composição corporal.\n *\n * O nome diz DEXA por herança: quando a lista foi escrita, densitometria era a\n * única fonte desse tipo de laudo. Hoje ela decide o caminho para\n * bioimpedância e adipometria também, e a lista tinha ficado para trás.\n *\n * Medido em produção: um laudo de adipometria com sete dobras cutâneas,\n * circunferência de cintura e IMC não casava nenhum indicador e caía no\n * caminho genérico, perdendo a referência filtrada e a extração de tendência.\n * As dobras e as circunferências não aparecem em DEXA, então só elas\n * identificam esse aparelho.\n *\n * Massa muscular e os compartimentos de água entram pela mesma razão: são o\n * que a bioimpedância imprime e o DEXA não.\n */\nexport const DEXA_INDICATOR_CODES = [\n // Densitometria e composição corporal clássica\n 'BodyFatPct',\n 'FatMass',\n 'LeanMass',\n 'BMC',\n 'FatFreeMass',\n 'TotalMass',\n // Bioimpedância\n 'MuscleMass',\n 'TotalBodyWater',\n 'BodyWaterPct',\n 'PhaseAngle',\n 'ExtracellularWater',\n 'IntracellularWater',\n // Adipometria: sete sítios, e nenhum aparece em laudo de DEXA\n 'SkinfoldTriceps',\n 'SkinfoldSubscapular',\n 'SkinfoldSuprailiac',\n 'SkinfoldAbdominal',\n 'SkinfoldThigh',\n 'SkinfoldChest',\n 'SkinfoldMidaxillary',\n // Antropometria\n 'WaistCircumference',\n 'CalfCircumference',\n] as const;\n\n/**\n * DEXA-related categories that should be included when a DEXA document is detected\n */\nexport const DEXA_CATEGORIES = ['composicao-corporal', 'densidade-ossea'] as const;\n\n/**\n * Generate full DEXA/body composition reference for LLM extraction\n * This includes ALL body composition biomarkers (regional metrics, VAT, bone density)\n * that may not be detected by OCR anchoring due to table layouts\n *\n * Use this when DEXA indicator biomarkers (BodyFatPct, FatMass, LeanMass, etc.)\n * are detected in the document\n */\nexport function generateDexaFullReference(): string {\n const dexaCodes = BIOMARKER_DEFINITIONS.filter((def) => {\n const categories = Array.isArray(def.category) ? def.category : [def.category];\n return categories.some((cat) =>\n DEXA_CATEGORIES.includes(cat as (typeof DEXA_CATEGORIES)[number]),\n );\n }).map((def) => def.code);\n\n return generateFilteredLLMReference(dexaCodes);\n}\n\n/**\n * Check if a list of biomarker codes indicates a DEXA/body composition document\n */\nexport function isDexaDocument(matchedCodes: string[]): boolean {\n return DEXA_INDICATOR_CODES.some((code) => matchedCodes.includes(code));\n}\n\n/**\n * CAC (Coronary Artery Calcium) indicator biomarker codes\n * When these are found in OCR text, the document is likely a CAC scoring report\n */\nexport const CAC_INDICATOR_CODES = [\n 'CAC',\n 'CAC_LAD',\n 'CAC_LCX',\n 'CAC_RCA',\n 'CAC_Percentile',\n] as const;\n\n/**\n * Generate full CAC reference for LLM extraction\n * This includes all CAC-related biomarkers (total score, per-vessel, percentile, aortic valve)\n */\nexport function generateCacFullReference(): string {\n const cacCodes = BIOMARKER_DEFINITIONS.filter((def) => {\n return def.code === 'CAC' || def.code.startsWith('CAC_') || def.code === 'AorticValveCalcium';\n }).map((def) => def.code);\n\n return generateFilteredLLMReference(cacCodes);\n}\n\n/**\n * Check if a list of biomarker codes indicates a CAC scoring document\n */\nexport function isCacDocument(matchedCodes: string[]): boolean {\n return CAC_INDICATOR_CODES.some((code) => matchedCodes.includes(code));\n}\n\n/**\n * Normalize text for comparison\n * - Splits camelCase/PascalCase into words (e.g., \"ArmsLeanMass\" → \"arms lean mass\")\n * - Removes diacritics\n * - Lowercases\n * - Normalizes whitespace\n */\nfunction normalizeText(text: string): string {\n return (\n text\n // Replace underscores, hyphens, and slashes with spaces (BMD_Total → BMD Total, LDL-Cholesterol → LDL Cholesterol, Omega6/Omega3 → Omega6 Omega3)\n .replace(/[_\\-/]/g, ' ')\n // Split camelCase/PascalCase into words (ArmsLeanMass → Arms Lean Mass)\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n // Split uppercase sequences followed by lowercase (VATVolume → VAT Volume)\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\n // Remove diacritics\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n .replace(/\\s+/g, ' ')\n .trim()\n );\n}\n\n/**\n * Chave sem distinção de caixa, para a segunda tentativa do `findCodeByName`.\n *\n * O `normalizeText` separa camelCase antes de baixar a caixa, e por isso a\n * mesma sigla em caixas diferentes vira chaves diferentes: \"IgA\" vira \"ig a\",\n * \"IGA\" vira \"iga\". Um nome correto escrito na caixa que o catálogo não usa\n * deixava de resolver, e um LOINC errado decidia o código. Aqui a caixa cai\n * primeiro, então \"IgA\", \"IGA\" e \"iga\" dão a mesma chave. A vírgula entre\n * palavras também cai, porque o laudo imprime \"PSA, FREE\" onde o catálogo\n * tem \"PSA Free\".\n */\nfunction foldText(text: string): string {\n return text\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n .replace(/[_\\-/,]/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim();\n}\n\n// Build a normalized name map for fast lookups\nconst normalizedNameToCodeMap = new Map<string, string>();\n// Mesma coisa pela chave sem caixa. Quando dois exames dão a mesma chave, ela\n// fica `null`: a busca devolve nada em vez de escolher um pela ordem do\n// catálogo.\nconst foldedNameToCodeMap = new Map<string, string | null>();\nfor (const def of BIOMARKER_DEFINITIONS) {\n for (const name of [...def.names.en, ...def.names.pt]) {\n normalizedNameToCodeMap.set(normalizeText(name), def.code);\n const folded = foldText(name);\n const owner = foldedNameToCodeMap.get(folded);\n foldedNameToCodeMap.set(folded, owner === undefined || owner === def.code ? def.code : null);\n }\n}\n\n/**\n * Find a biomarker code by name (with normalization)\n * This is a fallback when LOINC lookup fails\n * @param name - The biomarker name from the LLM output\n * @returns The internal code if found, undefined otherwise\n */\nexport function findCodeByName(name: string): string | undefined {\n // Check if the input is already a valid biomarker code (e.g., \"Omega3_DHA\")\n if (codeToDefinitionMap.has(name)) {\n return codeToDefinitionMap.get(name)!.code;\n }\n\n // Check code aliases (e.g., alias → canonical code)\n const canonical = codeAliasToCanonicalMap.get(name);\n if (canonical) {\n return canonical;\n }\n\n const normalized = normalizedNameToCodeMap.get(normalizeText(name));\n if (normalized) {\n return normalized;\n }\n return foldedNameToCodeMap.get(foldText(name)) ?? undefined;\n}\n\n/**\n * Validate that a LOINC code matches a given name\n * Returns the correct code if they match, or the name-based code if they don't\n * This catches cases where LLM provides a valid-but-wrong LOINC\n * @param loinc - The LOINC code provided by LLM\n * @param name - The biomarker name provided by LLM\n * @returns Object with code and whether a correction was made\n */\nexport function validateLoincNameMatch(\n loinc: string,\n name: string,\n): { code: string | undefined; corrected: boolean } {\n const loincCode = loincToCode(loinc);\n const nameCode = findCodeByName(name);\n\n // If LOINC maps to a code, check if it matches the name-based code\n if (loincCode && nameCode && loincCode !== nameCode) {\n // LOINC and name disagree - trust the name since it's what the LLM saw in the document\n return { code: nameCode, corrected: true };\n }\n\n // If LOINC is valid, use it\n if (loincCode) {\n return { code: loincCode, corrected: false };\n }\n\n // Fallback to name-based lookup\n return { code: nameCode, corrected: !!nameCode };\n}\n\n/**\n * Check if a biomarker code should be displayed in the UI\n *\n * Returns false for:\n * - UNKNOWN_ codes (unrecognized biomarkers)\n * - Biomarkers marked as hidden in their definition\n *\n * @param code - The biomarker code to check\n * @returns true if the biomarker should be displayed\n */\nexport function isBiomarkerVisible(code: string): boolean {\n // Filter out UNKNOWN codes\n if (code.startsWith('UNKNOWN_') || code === 'UNKNOWN') {\n return false;\n }\n\n // Check if the biomarker is marked as hidden\n const definition = codeToDefinitionMap.get(code);\n if (definition?.hidden) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Filter an array of biomarkers to only include visible ones\n *\n * @param biomarkers - Array of objects with a `code` property\n * @returns Filtered array with only visible biomarkers\n */\nexport function filterVisibleBiomarkers<T extends { code: string }>(biomarkers: T[]): T[] {\n return biomarkers.filter((b) => isBiomarkerVisible(b.code));\n}\n\n/**\n * Get all biomarkers for a specific category\n *\n * @param category - The category slug (e.g., 'coracao', 'tireoide')\n * @param options - Optional filters\n * @param options.includeHidden - Include hidden biomarkers (default: false)\n * @param options.sex - Filter by sex ('male', 'female', or 'both' for all)\n * @returns Array of biomarker definitions for the category\n */\nexport function getBiomarkersByCategory(\n category: string,\n options?: {\n includeHidden?: boolean;\n sex?: 'male' | 'female' | 'both';\n },\n): BiomarkerDefinition[] {\n const { includeHidden = false, sex = 'both' } = options ?? {};\n\n return BIOMARKER_DEFINITIONS.filter((def) => {\n const categories = Array.isArray(def.category) ? def.category : [def.category];\n if (!categories.includes(category)) return false;\n if (!includeHidden && def.hidden) return false;\n if (sex !== 'both') {\n // Include biomarkers that are for this sex or for 'both' (undefined)\n if (def.sex && def.sex !== sex && def.sex !== 'both') return false;\n }\n return true;\n });\n}\n\n/**\n * Get all biomarkers for multiple categories\n *\n * @param categories - Array of category slugs\n * @param options - Optional filters (same as getBiomarkersByCategory)\n * @returns Array of biomarker definitions grouped by category\n */\nexport function getBiomarkersForCategories(\n categories: string[],\n options?: {\n includeHidden?: boolean;\n sex?: 'male' | 'female' | 'both';\n },\n): Record<string, BiomarkerDefinition[]> {\n const result: Record<string, BiomarkerDefinition[]> = {};\n\n for (const category of categories) {\n const biomarkers = getBiomarkersByCategory(category, options);\n if (biomarkers.length > 0) {\n result[category] = biomarkers;\n }\n }\n\n return result;\n}\n"],"mappings":"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","names":[]}