@precisa-saude/fhir 0.32.0 → 0.33.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 (59) hide show
  1. package/README.md +9 -9
  2. package/dist/biomarkers.cjs +2 -2
  3. package/dist/biomarkers.js +1 -1
  4. package/dist/{chunk-WDDW2WCY.js → chunk-4FKZG5GZ.js} +116 -25
  5. package/dist/chunk-4FKZG5GZ.js.map +1 -0
  6. package/dist/{chunk-AZTZYOAV.cjs → chunk-5RC7C7HJ.cjs} +199 -57
  7. package/dist/chunk-5RC7C7HJ.cjs.map +1 -0
  8. package/dist/{chunk-N3ZCOLG2.js → chunk-E6MXDQXW.js} +19 -1
  9. package/dist/chunk-E6MXDQXW.js.map +1 -0
  10. package/dist/{chunk-OTVCOSCK.cjs → chunk-FGZXQWSR.cjs} +14 -20
  11. package/dist/chunk-FGZXQWSR.cjs.map +1 -0
  12. package/dist/{chunk-MNUQ57JR.js → chunk-KS2YZBAS.js} +15 -21
  13. package/dist/chunk-KS2YZBAS.js.map +1 -0
  14. package/dist/{chunk-555WKD6J.cjs → chunk-LXKFVJF4.cjs} +3 -3
  15. package/dist/{chunk-555WKD6J.cjs.map → chunk-LXKFVJF4.cjs.map} +1 -1
  16. package/dist/{chunk-3ILBFLVQ.cjs → chunk-OAFAERDY.cjs} +20 -2
  17. package/dist/chunk-OAFAERDY.cjs.map +1 -0
  18. package/dist/{chunk-3XIMPALK.js → chunk-Q3H5C6UR.js} +198 -56
  19. package/dist/chunk-Q3H5C6UR.js.map +1 -0
  20. package/dist/{chunk-MKH4Q735.cjs → chunk-T75NZM56.cjs} +116 -25
  21. package/dist/chunk-T75NZM56.cjs.map +1 -0
  22. package/dist/{chunk-PLR54334.js → chunk-WXCX5TJJ.js} +2 -2
  23. package/dist/{chunk-4Y43MQQK.js → chunk-X5WVIJGG.js} +3 -3
  24. package/dist/{chunk-44QMNDOI.cjs → chunk-ZCIZUBMR.cjs} +9 -9
  25. package/dist/{chunk-44QMNDOI.cjs.map → chunk-ZCIZUBMR.cjs.map} +1 -1
  26. package/dist/cli.js +318 -94
  27. package/dist/converter.cjs +4 -4
  28. package/dist/converter.js +3 -3
  29. package/dist/importer.cjs +5 -4
  30. package/dist/importer.cjs.map +1 -1
  31. package/dist/importer.js +4 -3
  32. package/dist/index.cjs +15 -11
  33. package/dist/index.cjs.map +1 -1
  34. package/dist/index.d.cts +1 -1
  35. package/dist/index.d.ts +1 -1
  36. package/dist/index.js +30 -26
  37. package/dist/index.js.map +1 -1
  38. package/dist/reference-ranges.cjs +4 -3
  39. package/dist/reference-ranges.cjs.map +1 -1
  40. package/dist/reference-ranges.js +3 -2
  41. package/dist/units.cjs +7 -2
  42. package/dist/units.cjs.map +1 -1
  43. package/dist/units.d.cts +53 -5
  44. package/dist/units.d.ts +53 -5
  45. package/dist/units.js +6 -1
  46. package/dist/validators.cjs +4 -2
  47. package/dist/validators.cjs.map +1 -1
  48. package/dist/validators.js +3 -1
  49. package/package.json +1 -1
  50. package/dist/chunk-3ILBFLVQ.cjs.map +0 -1
  51. package/dist/chunk-3XIMPALK.js.map +0 -1
  52. package/dist/chunk-AZTZYOAV.cjs.map +0 -1
  53. package/dist/chunk-MKH4Q735.cjs.map +0 -1
  54. package/dist/chunk-MNUQ57JR.js.map +0 -1
  55. package/dist/chunk-N3ZCOLG2.js.map +0 -1
  56. package/dist/chunk-OTVCOSCK.cjs.map +0 -1
  57. package/dist/chunk-WDDW2WCY.js.map +0 -1
  58. /package/dist/{chunk-PLR54334.js.map → chunk-WXCX5TJJ.js.map} +0 -0
  59. /package/dist/{chunk-4Y43MQQK.js.map → chunk-X5WVIJGG.js.map} +0 -0
package/README.md CHANGED
@@ -82,15 +82,15 @@ import { validateFHIRObservation } from '@precisa-saude/fhir/validators';
82
82
 
83
83
  ## Módulos
84
84
 
85
- | Sub-path | Descrição |
86
- | ------------------- | ---------------------------------------------------------------------- |
87
- | `/biomarkers` | Definições com códigos LOINC, nomes pt/en, sub-categorias |
88
- | `/category-groups` | Agrupamento de 10 categorias clínicas top-level sobre 20 subcategorias |
89
- | `/reference-ranges` | Faixas de referência por sexo/idade/gestação (SBPC/ML, SBC, SBD, OMS) |
90
- | `/converter` | Converte dados laboratoriais para FHIR R4 Bundle |
91
- | `/importer` | Importa FHIR Bundle de volta para estruturas internas |
92
- | `/units` | Mapeamento de unidades, conversão para UCUM |
93
- | `/validators` | Validação de recursos FHIR (DiagnosticReport, Observation, Bundle) |
85
+ | Sub-path | Descrição |
86
+ | ------------------- | ------------------------------------------------------------------------- |
87
+ | `/biomarkers` | Definições com códigos LOINC, nomes pt/en, sub-categorias |
88
+ | `/category-groups` | Agrupamento de 10 categorias clínicas top-level sobre 20 subcategorias |
89
+ | `/reference-ranges` | Faixas de referência por sexo/idade/gestação (SBPC/ML, SBC, SBD, OMS) |
90
+ | `/converter` | Converte dados laboratoriais para FHIR R4 Bundle |
91
+ | `/importer` | Importa FHIR Bundle de volta para estruturas internas |
92
+ | `/units` | Mapeamento de unidades, conversão para UCUM (`resolveUcum`, `isUcumCode`) |
93
+ | `/validators` | Validação de recursos FHIR (DiagnosticReport, Observation, Bundle) |
94
94
 
95
95
  ## Escopo das faixas de referência
96
96
 
@@ -30,7 +30,7 @@
30
30
 
31
31
 
32
32
 
33
- var _chunkMKH4Q735cjs = require('./chunk-MKH4Q735.cjs');
33
+ var _chunkT75NZM56cjs = require('./chunk-T75NZM56.cjs');
34
34
 
35
35
 
36
36
 
@@ -63,5 +63,5 @@ var _chunkMKH4Q735cjs = require('./chunk-MKH4Q735.cjs');
63
63
 
64
64
 
65
65
 
66
- exports.BIOMARKER_DEFINITIONS = _chunkMKH4Q735cjs.BIOMARKER_DEFINITIONS; exports.CAC_INDICATOR_CODES = _chunkMKH4Q735cjs.CAC_INDICATOR_CODES; exports.DEXA_CATEGORIES = _chunkMKH4Q735cjs.DEXA_CATEGORIES; exports.DEXA_INDICATOR_CODES = _chunkMKH4Q735cjs.DEXA_INDICATOR_CODES; exports.codeToLoinc = _chunkMKH4Q735cjs.codeToLoinc; exports.filterVisibleBiomarkers = _chunkMKH4Q735cjs.filterVisibleBiomarkers; exports.findCodeByName = _chunkMKH4Q735cjs.findCodeByName; exports.generateCacFullReference = _chunkMKH4Q735cjs.generateCacFullReference; exports.generateDexaFullReference = _chunkMKH4Q735cjs.generateDexaFullReference; exports.generateFilteredLLMReference = _chunkMKH4Q735cjs.generateFilteredLLMReference; exports.generateLLMReference = _chunkMKH4Q735cjs.generateLLMReference; exports.getAllCodes = _chunkMKH4Q735cjs.getAllCodes; exports.getAllDefinitions = _chunkMKH4Q735cjs.getAllDefinitions; exports.getAllLoincCodes = _chunkMKH4Q735cjs.getAllLoincCodes; exports.getAllSearchPatterns = _chunkMKH4Q735cjs.getAllSearchPatterns; exports.getBiomarkersByCategory = _chunkMKH4Q735cjs.getBiomarkersByCategory; exports.getBiomarkersForCategories = _chunkMKH4Q735cjs.getBiomarkersForCategories; exports.getDefinitionByCode = _chunkMKH4Q735cjs.getDefinitionByCode; exports.getDefinitionByLoinc = _chunkMKH4Q735cjs.getDefinitionByLoinc; exports.getDefinitionsBySex = _chunkMKH4Q735cjs.getDefinitionsBySex; exports.getSexForCode = _chunkMKH4Q735cjs.getSexForCode; exports.getVisibleDefinitions = _chunkMKH4Q735cjs.getVisibleDefinitions; exports.isBiomarkerVisible = _chunkMKH4Q735cjs.isBiomarkerVisible; exports.isCacDocument = _chunkMKH4Q735cjs.isCacDocument; exports.isDexaDocument = _chunkMKH4Q735cjs.isDexaDocument; exports.isValidCode = _chunkMKH4Q735cjs.isValidCode; exports.isValidLoinc = _chunkMKH4Q735cjs.isValidLoinc; exports.loincToCode = _chunkMKH4Q735cjs.loincToCode; exports.normalizeCode = _chunkMKH4Q735cjs.normalizeCode; exports.toBiomarkerTests = _chunkMKH4Q735cjs.toBiomarkerTests; exports.validateLoincNameMatch = _chunkMKH4Q735cjs.validateLoincNameMatch;
66
+ exports.BIOMARKER_DEFINITIONS = _chunkT75NZM56cjs.BIOMARKER_DEFINITIONS; exports.CAC_INDICATOR_CODES = _chunkT75NZM56cjs.CAC_INDICATOR_CODES; exports.DEXA_CATEGORIES = _chunkT75NZM56cjs.DEXA_CATEGORIES; exports.DEXA_INDICATOR_CODES = _chunkT75NZM56cjs.DEXA_INDICATOR_CODES; exports.codeToLoinc = _chunkT75NZM56cjs.codeToLoinc; exports.filterVisibleBiomarkers = _chunkT75NZM56cjs.filterVisibleBiomarkers; exports.findCodeByName = _chunkT75NZM56cjs.findCodeByName; exports.generateCacFullReference = _chunkT75NZM56cjs.generateCacFullReference; exports.generateDexaFullReference = _chunkT75NZM56cjs.generateDexaFullReference; exports.generateFilteredLLMReference = _chunkT75NZM56cjs.generateFilteredLLMReference; exports.generateLLMReference = _chunkT75NZM56cjs.generateLLMReference; exports.getAllCodes = _chunkT75NZM56cjs.getAllCodes; exports.getAllDefinitions = _chunkT75NZM56cjs.getAllDefinitions; exports.getAllLoincCodes = _chunkT75NZM56cjs.getAllLoincCodes; exports.getAllSearchPatterns = _chunkT75NZM56cjs.getAllSearchPatterns; exports.getBiomarkersByCategory = _chunkT75NZM56cjs.getBiomarkersByCategory; exports.getBiomarkersForCategories = _chunkT75NZM56cjs.getBiomarkersForCategories; exports.getDefinitionByCode = _chunkT75NZM56cjs.getDefinitionByCode; exports.getDefinitionByLoinc = _chunkT75NZM56cjs.getDefinitionByLoinc; exports.getDefinitionsBySex = _chunkT75NZM56cjs.getDefinitionsBySex; exports.getSexForCode = _chunkT75NZM56cjs.getSexForCode; exports.getVisibleDefinitions = _chunkT75NZM56cjs.getVisibleDefinitions; exports.isBiomarkerVisible = _chunkT75NZM56cjs.isBiomarkerVisible; exports.isCacDocument = _chunkT75NZM56cjs.isCacDocument; exports.isDexaDocument = _chunkT75NZM56cjs.isDexaDocument; exports.isValidCode = _chunkT75NZM56cjs.isValidCode; exports.isValidLoinc = _chunkT75NZM56cjs.isValidLoinc; exports.loincToCode = _chunkT75NZM56cjs.loincToCode; exports.normalizeCode = _chunkT75NZM56cjs.normalizeCode; exports.toBiomarkerTests = _chunkT75NZM56cjs.toBiomarkerTests; exports.validateLoincNameMatch = _chunkT75NZM56cjs.validateLoincNameMatch;
67
67
  //# sourceMappingURL=biomarkers.cjs.map
@@ -30,7 +30,7 @@ import {
30
30
  normalizeCode,
31
31
  toBiomarkerTests,
32
32
  validateLoincNameMatch
33
- } from "./chunk-WDDW2WCY.js";
33
+ } from "./chunk-4FKZG5GZ.js";
34
34
  export {
35
35
  BIOMARKER_DEFINITIONS,
36
36
  CAC_INDICATOR_CODES,
@@ -56,6 +56,10 @@ var BIOMARKER_DEFINITIONS = [
56
56
  {
57
57
  category: "coracao",
58
58
  code: "LDL_Medium",
59
+ // 96735-6 é "in Serum" só, enquanto as vizinhas LDL_Small (43727-7),
60
+ // LDL_ParticleNumber (54434-6) e HDL_Large (43729-3) são Ser/Plas. É o
61
+ // único código para a subfração média, e o perfil por RMN roda em soro.
62
+ // Material registrado de propósito.
59
63
  loinc: "96735-6",
60
64
  names: {
61
65
  en: ["LDL Medium", "Medium LDL Particles"],
@@ -1023,14 +1027,16 @@ var BIOMARKER_DEFINITIONS = [
1023
1027
  },
1024
1028
  {
1025
1029
  // LOINC 99620-7 = "Omega 3 fatty acids (w3) [Moles/volume] in RBC.lysate".
1026
- // Alinha à matriz das entradas irmãs Omega3_EPA (75097-6) e Omega3_DHA
1027
- // (75095-0), ambas em hemácias. Anteriormente 35178-3 (mesmo analito em
1028
- // Ser/Plas), incompatível com o uso clínico do Índice Ômega-3 (Harris &
1029
- // von Schacky 2004), que é definido em membranas de hemácias.
1030
- // Ressalva: LOINC declara moles/volume; o biomarcador armazena %.
1031
- // Não há LOINC vigente para "Omega 3 total em % em RBC" — o `Omega3_Index`
1032
- // (88998-0) cobre apenas EPA+DHA. Mantemos `unit: '%'` por consistência
1033
- // com EPA/DHA (75095-0/75097-6 são [Entitic substance], também não-%).
1030
+ // Anteriormente 35178-3 (mesmo analito em Ser/Plas), incompatível com o
1031
+ // uso clínico do Índice Ômega-3 (Harris & von Schacky 2004), que é
1032
+ // definido em membranas de hemácias.
1033
+ //
1034
+ // Compromisso declarado, e não erro: o LOINC 2.82 não tem código de fração
1035
+ // ("ômega-3 total / ácidos graxos totais") para o total, só para os ácidos
1036
+ // individuais e para EPA+DPA+DHA (90911-9). O componente confere; a
1037
+ // propriedade é moles/volume enquanto o laudo imprime %. O teste de eixos
1038
+ // (`loinc-axes.test.ts`) lista esta entrada como exceção com este motivo.
1039
+ // Mesmo compromisso em `Omega6_Total` (99621-5).
1034
1040
  category: "nutrientes",
1035
1041
  code: "Omega3_Total",
1036
1042
  loinc: "99620-7",
@@ -1044,7 +1050,18 @@ var BIOMARKER_DEFINITIONS = [
1044
1050
  category: "nutrientes",
1045
1051
  code: "Omega3_DHA",
1046
1052
  codeAliases: ["DHA"],
1047
- loinc: "75095-0",
1053
+ // Ácidos graxos individuais: fração do total (% dos ácidos graxos C14-C22),
1054
+ // que é o que o perfil de ácidos graxos e o Índice Ômega-3 imprimem. Os
1055
+ // códigos vêm do painel 90918-4 ("Fatty acid omega-3 and omega-6 panel -
1056
+ // Blood"), o mesmo de onde já saem as razões AA/EPA (90909-3) e ω6/ω3
1057
+ // (90910-1). Até out/2026 apontavam para os códigos [Entitic substance]
1058
+ // em hemácias (75095-0, 75097-6, 75110-7, 75117-2), que são quantidade por
1059
+ // célula, e para 48371-9, que é moles/volume em soro: componente certo,
1060
+ // propriedade errada nos cinco, desde mar/2026. Ficam como alias porque o
1061
+ // analito é o mesmo. Material: o painel em soro/plasma (88884-2, C14-C24)
1062
+ // existe, e é a troca a fazer se um laboratório imprimir o perfil em soro.
1063
+ loinc: "90914-3",
1064
+ loincAliases: ["75095-0"],
1048
1065
  names: {
1049
1066
  en: ["Omega-3 DHA", "DHA", "Docosahexaenoic Acid"],
1050
1067
  pt: ["\xD4mega-3: DHA", "DHA", "\xC1cido Docosahexaenoico"]
@@ -1055,7 +1072,9 @@ var BIOMARKER_DEFINITIONS = [
1055
1072
  category: "nutrientes",
1056
1073
  code: "Omega3_DPA",
1057
1074
  codeAliases: ["DPA"],
1058
- loinc: "48371-9",
1075
+ // Fração em sangue, painel 90918-4. Ver `Omega3_DHA`.
1076
+ loinc: "90913-5",
1077
+ loincAliases: ["48371-9"],
1059
1078
  names: {
1060
1079
  en: ["Omega-3 DPA", "DPA", "Docosapentaenoic Acid"],
1061
1080
  pt: ["\xD4mega-3: DPA", "DPA", "\xC1cido Docosapentaenoico"]
@@ -1066,7 +1085,9 @@ var BIOMARKER_DEFINITIONS = [
1066
1085
  category: "nutrientes",
1067
1086
  code: "Omega3_EPA",
1068
1087
  codeAliases: ["EPA"],
1069
- loinc: "75097-6",
1088
+ // Fração em sangue, painel 90918-4. Ver `Omega3_DHA`.
1089
+ loinc: "90912-7",
1090
+ loincAliases: ["75097-6"],
1070
1091
  names: {
1071
1092
  en: ["Omega-3 EPA", "EPA", "Eicosapentaenoic Acid"],
1072
1093
  pt: ["\xD4mega-3: EPA", "EPA", "\xC1cido Eicosapentaenoico"]
@@ -1076,7 +1097,12 @@ var BIOMARKER_DEFINITIONS = [
1076
1097
  {
1077
1098
  category: "nutrientes",
1078
1099
  code: "EPADPADHA",
1079
- loinc: "90908-5",
1100
+ // 90911-9 é a fração EPA+DPA+DHA / ácidos graxos C14-C22 em sangue, o
1101
+ // valor em %. Até out/2026 apontava para 90908-5, que é a *interpretação*
1102
+ // desse mesmo valor (ordinal: risco alto, moderado, baixo), e não o
1103
+ // número. Sem alias: código ordinal carregando valor numérico é o erro
1104
+ // que se quer parar de aceitar.
1105
+ loinc: "90911-9",
1080
1106
  names: {
1081
1107
  en: ["Omega-3 EPA+DPA+DHA", "EPA+DPA+DHA"],
1082
1108
  pt: ["\xD4mega-3: EPA+DPA+DHA"]
@@ -1097,7 +1123,12 @@ var BIOMARKER_DEFINITIONS = [
1097
1123
  {
1098
1124
  category: "nutrientes",
1099
1125
  code: "Omega6_Total",
1100
- loinc: "35177-5",
1126
+ // 99621-5 é "Omega 6 fatty acids (w6) [Moles/volume] in RBC.lysate", o
1127
+ // par exato do 99620-7 de `Omega3_Total`, com o mesmo compromisso de
1128
+ // propriedade documentado lá. Até out/2026 apontava para 35177-5, que é
1129
+ // ácidos graxos poli-insaturados totais em soro: ômega-3 e ômega-6
1130
+ // somados, outro componente. Sem alias.
1131
+ loinc: "99621-5",
1101
1132
  names: {
1102
1133
  en: ["Omega-6 Total", "Total Omega-6"],
1103
1134
  pt: ["\xD4mega-6 Total"]
@@ -1108,7 +1139,9 @@ var BIOMARKER_DEFINITIONS = [
1108
1139
  category: "nutrientes",
1109
1140
  code: "Omega6_AA",
1110
1141
  codeAliases: ["Arachidonic_Acid"],
1111
- loinc: "75110-7",
1142
+ // Fração em sangue, painel 90918-4. Ver `Omega3_DHA`.
1143
+ loinc: "90916-8",
1144
+ loincAliases: ["75110-7"],
1112
1145
  names: {
1113
1146
  en: ["Omega-6 Arachidonic Acid", "Arachidonic Acid", "AA"],
1114
1147
  pt: ["\xD4mega-6: \xC1cido Araquid\xF4nico", "\xC1cido Araquid\xF4nico", "AA"]
@@ -1119,7 +1152,9 @@ var BIOMARKER_DEFINITIONS = [
1119
1152
  category: "nutrientes",
1120
1153
  code: "Omega6_LA",
1121
1154
  codeAliases: ["Linoleic_Acid"],
1122
- loinc: "75117-2",
1155
+ // Fração em sangue, painel 90918-4. Ver `Omega3_DHA`.
1156
+ loinc: "90917-6",
1157
+ loincAliases: ["75117-2"],
1123
1158
  names: {
1124
1159
  en: ["Omega-6 Linoleic Acid", "Linoleic Acid", "LA"],
1125
1160
  pt: ["\xD4mega-6: \xC1cido Linoleico", "\xC1cido Linoleico", "LA"]
@@ -1200,7 +1235,11 @@ var BIOMARKER_DEFINITIONS = [
1200
1235
  {
1201
1236
  category: "nutrientes",
1202
1237
  code: "Zinc",
1203
- loinc: "8245-3",
1238
+ // 5763-8 é "Zinc [Mass/volume] in Serum or Plasma", o zinco sérico da
1239
+ // rotina brasileira (o nome em inglês já dizia "Serum Zinc"). Até out/2026
1240
+ // apontava para 8245-3, o mesmo analito em sangue total, que tem faixa de
1241
+ // referência própria. Sem alias: sangue total é outro material.
1242
+ loinc: "5763-8",
1204
1243
  names: {
1205
1244
  en: ["Zinc", "Serum Zinc"],
1206
1245
  pt: ["Zinco"]
@@ -1301,6 +1340,9 @@ var BIOMARKER_DEFINITIONS = [
1301
1340
  {
1302
1341
  category: "figado",
1303
1342
  code: "Globulin",
1343
+ // 2336-6 é "Globulin [Mass/volume] in Serum", soro só: o LOINC 2.82 não
1344
+ // tem a versão Ser/Plas da globulina total (as frações alfa, beta e gama
1345
+ // têm). Material registrado de propósito.
1304
1346
  loinc: "2336-6",
1305
1347
  names: {
1306
1348
  en: ["Globulin", "Serum Globulin"],
@@ -1580,6 +1622,13 @@ var BIOMARKER_DEFINITIONS = [
1580
1622
  {
1581
1623
  category: "rins",
1582
1624
  code: "BUN_Creatinine_Ratio",
1625
+ // 3097-3 é "Urea nitrogen/Creatinine [Mass Ratio]", a razão BUN/creatinina,
1626
+ // e a faixa de referência (10-20, Tietz) é a dessa convenção. O laudo
1627
+ // brasileiro imprime "Relação Ureia/Creatinina", cuja faixa é outra (cerca
1628
+ // de 21-43) e cujo código é 56997-0 ("Urea/Creatinine [Mass Ratio] in
1629
+ // Serum or Plasma"). Trocar só o código deixaria a faixa errada do outro
1630
+ // lado; a separação em duas grandezas, como em `Glucose_Fasting`, é
1631
+ // decisão à parte, registrada em `reference-ranges.ts`.
1583
1632
  loinc: "3097-3",
1584
1633
  names: {
1585
1634
  en: ["BUN/Creatinine Ratio", "Urea/Creatinine Ratio"],
@@ -1747,7 +1796,12 @@ var BIOMARKER_DEFINITIONS = [
1747
1796
  category: "urina",
1748
1797
  code: "Bacteria_Urine",
1749
1798
  codeAliases: ["UrineBacteria"],
1750
- loinc: "630-4",
1799
+ // 5769-5 é "Bacteria [#/area] in Urine sediment by Microscopy high power
1800
+ // field", a contagem do sedimento que a unidade /HPF declara. Até out/2026
1801
+ // apontava para 630-4, "Bacteria identified in Urine by Culture": outro
1802
+ // exame, nominal, que identifica a espécie em cultura. Sem alias:
1803
+ // urocultura não é sedimento.
1804
+ loinc: "5769-5",
1751
1805
  names: {
1752
1806
  en: ["Urine Bacteria", "Bacteria Urine", "Bacteria, Urine", "Bacteria"],
1753
1807
  pt: ["Bact\xE9rias na Urina", "Bact\xE9rias"]
@@ -1866,7 +1920,14 @@ var BIOMARKER_DEFINITIONS = [
1866
1920
  {
1867
1921
  category: "urina",
1868
1922
  code: "RBC_Urine",
1869
- loinc: "5808-1",
1923
+ // 13945-1 é "Erythrocytes [#/area] in Urine sediment by Microscopy high
1924
+ // power field", o /HPF que o laudo imprime e que `Leukocytes_Urine` já usa
1925
+ // em 5821-4. Até out/2026 apontava para 5808-1, o mesmo exame em #/volume
1926
+ // (por mL): analito e material certos, propriedade errada. Fica como alias
1927
+ // porque o analito é o mesmo, e laudo de analisador automático que conte
1928
+ // por mL continua resolvendo em RBC_Urine.
1929
+ loinc: "13945-1",
1930
+ loincAliases: ["5808-1"],
1870
1931
  names: {
1871
1932
  en: ["Urine RBC", "Red Blood Cells in Urine", "RBC Urine", "RBC, Urine"],
1872
1933
  pt: ["Hem\xE1cias na Urina"]
@@ -1961,6 +2022,10 @@ var BIOMARKER_DEFINITIONS = [
1961
2022
  {
1962
2023
  category: "autoimunidade",
1963
2024
  code: "Gliadin_Deamidated_IgA",
2025
+ // 63453-5 e 63459-2 (IgG) afirmam método, "by Immunoassay", e material,
2026
+ // "Serum". É o que os kits de DGP usam. A propriedade é unidades
2027
+ // arbitrárias por volume, e o laudo imprime U/mL; até out/2026 a unidade
2028
+ // declarada era "U", sem o volume.
1964
2029
  loinc: "63453-5",
1965
2030
  names: {
1966
2031
  en: [
@@ -1974,7 +2039,7 @@ var BIOMARKER_DEFINITIONS = [
1974
2039
  ],
1975
2040
  pt: ["Anticorpos Anti-Gliadina Deamidada IgA", "DGP IgA"]
1976
2041
  },
1977
- unit: "U"
2042
+ unit: "U/mL"
1978
2043
  },
1979
2044
  {
1980
2045
  category: "autoimunidade",
@@ -1992,7 +2057,7 @@ var BIOMARKER_DEFINITIONS = [
1992
2057
  ],
1993
2058
  pt: ["Anticorpos Anti-Gliadina Deamidada IgG", "DGP IgG"]
1994
2059
  },
1995
- unit: "U"
2060
+ unit: "U/mL"
1996
2061
  },
1997
2062
  {
1998
2063
  category: "autoimunidade",
@@ -2383,6 +2448,10 @@ var BIOMARKER_DEFINITIONS = [
2383
2448
  {
2384
2449
  category: "composicao-corporal",
2385
2450
  code: "TotalBodyWater",
2451
+ // 101683-1 é "Body water mass", em kg; o aparelho de bioimpedância imprime
2452
+ // litros. É o único código de água corporal total no LOINC 2.82 (o outro,
2453
+ // 101684-9, é o percentual), e para água 1 L pesa 1 kg, então o número não
2454
+ // muda. O teste de eixos lista a entrada como exceção com este motivo.
2386
2455
  loinc: "101683-1",
2387
2456
  names: {
2388
2457
  en: ["Total Body Water", "Body Water", "TBW", "Total Water"],
@@ -2448,6 +2517,10 @@ var BIOMARKER_DEFINITIONS = [
2448
2517
  {
2449
2518
  category: "composicao-corporal",
2450
2519
  code: "PhaseAngle",
2520
+ // 107160-4 é "Phase angle Xc/R [Ratio] Bioelectrical impedance analysis",
2521
+ // único código de ângulo de fase. O aparelho imprime graus (arctan Xc/R)
2522
+ // e o LOINC declara razão com unidade-exemplo %. Fica em graus, que é o
2523
+ // que o laudo traz, e o teste de eixos lista a entrada como exceção.
2451
2524
  loinc: "107160-4",
2452
2525
  names: {
2453
2526
  en: ["Phase Angle", "Whole Body Phase Angle", "PhA", "AnglePhase"],
@@ -2538,9 +2611,9 @@ var BIOMARKER_DEFINITIONS = [
2538
2611
  {
2539
2612
  category: "composicao-corporal",
2540
2613
  code: "WaistCircumference",
2541
- // 8280-0 é a medida em si. 56086-2, que parecia o óbvio pela busca, é
2542
- // "Adult Waist Circumference Protocol", um protocolo PhenX e não um
2543
- // resultado.
2614
+ // 8280-0 é a medida em si, e afirma sítio e método: "at umbilicus by Tape
2615
+ // measure". 56086-2, que parecia o óbvio pela busca, é "Adult Waist
2616
+ // Circumference Protocol", um protocolo PhenX e não um resultado.
2544
2617
  loinc: "8280-0",
2545
2618
  names: {
2546
2619
  en: ["Waist Circumference", "Abdominal Circumference", "Waist"],
@@ -2950,6 +3023,10 @@ var BIOMARKER_DEFINITIONS = [
2950
3023
  {
2951
3024
  category: "coracao",
2952
3025
  code: "TroponinI",
3026
+ // 49563-0 afirma método: limite de detecção ≤ 0,01 ng/mL, o ensaio de alta
3027
+ // sensibilidade. Um resultado de troponina I convencional pede o código
3028
+ // sem método, 10839-9. Assimétrico com `TroponinT`, que fica no 6598-7 sem
3029
+ // método de propósito: a hs-cTnT em ng/L é a convenção dos laudos.
2953
3030
  loinc: "49563-0",
2954
3031
  names: {
2955
3032
  en: ["Troponin I", "cTnI", "Cardiac Troponin I", "hs-TnI", "High-Sensitivity Troponin I"],
@@ -2960,6 +3037,9 @@ var BIOMARKER_DEFINITIONS = [
2960
3037
  {
2961
3038
  category: "coracao",
2962
3039
  code: "TroponinT",
3040
+ // 6598-7 não afirma método. A unidade ng/L é a convenção do ensaio de alta
3041
+ // sensibilidade (hs-cTnT), e o ensaio convencional em ng/mL converte por
3042
+ // fator exato (ver `units.ts`). Ver `TroponinI` para a assimetria.
2963
3043
  loinc: "6598-7",
2964
3044
  names: {
2965
3045
  en: ["Troponin T", "cTnT", "Cardiac Troponin T", "hs-TnT", "High-Sensitivity Troponin T"],
@@ -2996,6 +3076,11 @@ var BIOMARKER_DEFINITIONS = [
2996
3076
  {
2997
3077
  category: "figado",
2998
3078
  code: "LDH",
3079
+ // 14804-9 afirma método: reação lactato → piruvato (L→P). O código sem
3080
+ // método, 2532-0, está DISCOURAGED, então um método tem que ser escolhido,
3081
+ // e L→P é o do procedimento de referência IFCC que os laboratórios
3082
+ // brasileiros usam, ainda que o laudo raramente imprima a direção. Se um
3083
+ // laudo declarar P→L, o código é outro (14805-6).
2999
3084
  loinc: "14804-9",
3000
3085
  // 2532-0 é o código genérico anterior, que o LOINC marca como DISCOURAGED.
3001
3086
  // Fica como alias para que laudo antigo e dado já armazenado continuem
@@ -3126,7 +3211,13 @@ var BIOMARKER_DEFINITIONS = [
3126
3211
  {
3127
3212
  category: "pancreas",
3128
3213
  code: "BetaHydroxybutyrate",
3129
- loinc: "53060-0",
3214
+ // 6873-4 é "Beta hydroxybutyrate [Moles/volume] in Serum or Plasma", o
3215
+ // que o laudo dosa em mmol/L. Até out/2026 apontava para 53060-0, que é
3216
+ // butirilcarnitina (C4) em líquido amniótico: analito e material errados
3217
+ // desde abr/2026, e nenhum check pegou porque o código existe e está
3218
+ // ACTIVE. Sem alias para o código antigo: ele nunca significou BHB, e
3219
+ // aceitá-lo na importação faria um laudo de carnitina virar cetona.
3220
+ loinc: "6873-4",
3130
3221
  names: {
3131
3222
  en: ["Beta-Hydroxybutyrate", "\u03B2-Hydroxybutyrate", "BHB", "Ketone Bodies"],
3132
3223
  pt: ["Beta-Hidroxibutirato", "\u03B2-Hidroxibutirato", "BHB", "Corpos Cet\xF4nicos"]
@@ -3465,4 +3556,4 @@ export {
3465
3556
  getBiomarkersByCategory,
3466
3557
  getBiomarkersForCategories
3467
3558
  };
3468
- //# sourceMappingURL=chunk-WDDW2WCY.js.map
3559
+ //# sourceMappingURL=chunk-4FKZG5GZ.js.map