@precisa-saude/fhir 0.33.0 → 0.35.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 (70) hide show
  1. package/README.md +2 -0
  2. package/dist/biomarkers.cjs +4 -2
  3. package/dist/biomarkers.cjs.map +1 -1
  4. package/dist/biomarkers.d.cts +34 -1
  5. package/dist/biomarkers.d.ts +34 -1
  6. package/dist/biomarkers.js +3 -1
  7. package/dist/{chunk-X5WVIJGG.js → chunk-6QUGBBV2.js} +12 -3
  8. package/dist/chunk-6QUGBBV2.js.map +1 -0
  9. package/dist/{chunk-ZCIZUBMR.cjs → chunk-77LDD6OP.cjs} +20 -11
  10. package/dist/chunk-77LDD6OP.cjs.map +1 -0
  11. package/dist/{chunk-LXKFVJF4.cjs → chunk-HZSW5T7E.cjs} +447 -63
  12. package/dist/chunk-HZSW5T7E.cjs.map +1 -0
  13. package/dist/{chunk-4FKZG5GZ.js → chunk-KQ4CX67G.js} +35 -1
  14. package/dist/chunk-KQ4CX67G.js.map +1 -0
  15. package/dist/{chunk-5RC7C7HJ.cjs → chunk-LNL5QSHP.cjs} +3 -3
  16. package/dist/{chunk-5RC7C7HJ.cjs.map → chunk-LNL5QSHP.cjs.map} +1 -1
  17. package/dist/{chunk-WXCX5TJJ.js → chunk-O3FXUPW3.js} +445 -61
  18. package/dist/chunk-O3FXUPW3.js.map +1 -0
  19. package/dist/{chunk-KS2YZBAS.js → chunk-TLF3IVSN.js} +14 -6
  20. package/dist/chunk-TLF3IVSN.js.map +1 -0
  21. package/dist/{chunk-Q3H5C6UR.js → chunk-U2XW6DY4.js} +2 -2
  22. package/dist/{chunk-OAFAERDY.cjs → chunk-VMYB7KOE.cjs} +3 -3
  23. package/dist/{chunk-OAFAERDY.cjs.map → chunk-VMYB7KOE.cjs.map} +1 -1
  24. package/dist/{chunk-FGZXQWSR.cjs → chunk-XAIIZLZ7.cjs} +16 -8
  25. package/dist/chunk-XAIIZLZ7.cjs.map +1 -0
  26. package/dist/{chunk-E6MXDQXW.js → chunk-XT635TWP.js} +2 -2
  27. package/dist/{chunk-T75NZM56.cjs → chunk-YL65SZ6S.cjs} +38 -4
  28. package/dist/chunk-YL65SZ6S.cjs.map +1 -0
  29. package/dist/cli.js +1276 -851
  30. package/dist/{converter-DZH9x52r.d.cts → converter-CTj83kPz.d.ts} +15 -1
  31. package/dist/{converter-D1Q84Oc9.d.ts → converter-Dlwb6OfB.d.cts} +15 -1
  32. package/dist/converter.cjs +5 -4
  33. package/dist/converter.cjs.map +1 -1
  34. package/dist/converter.d.cts +3 -2
  35. package/dist/converter.d.ts +3 -2
  36. package/dist/converter.js +4 -3
  37. package/dist/{fhir-types-B1KQmlRb.d.ts → fhir-types-Cn5WFbOI.d.cts} +5 -0
  38. package/dist/{fhir-types-B1KQmlRb.d.cts → fhir-types-Cn5WFbOI.d.ts} +5 -0
  39. package/dist/importer.cjs +5 -5
  40. package/dist/importer.d.cts +5 -1
  41. package/dist/importer.d.ts +5 -1
  42. package/dist/importer.js +4 -4
  43. package/dist/index.cjs +16 -10
  44. package/dist/index.cjs.map +1 -1
  45. package/dist/index.d.cts +6 -6
  46. package/dist/index.d.ts +6 -6
  47. package/dist/index.js +13 -7
  48. package/dist/index.js.map +1 -1
  49. package/dist/reference-ranges.cjs +8 -4
  50. package/dist/reference-ranges.cjs.map +1 -1
  51. package/dist/reference-ranges.d.cts +83 -1
  52. package/dist/reference-ranges.d.ts +83 -1
  53. package/dist/reference-ranges.js +9 -5
  54. package/dist/units.cjs +3 -3
  55. package/dist/units.js +2 -2
  56. package/dist/validators.cjs +4 -4
  57. package/dist/validators.d.cts +1 -1
  58. package/dist/validators.d.ts +1 -1
  59. package/dist/validators.js +3 -3
  60. package/package.json +1 -1
  61. package/dist/chunk-4FKZG5GZ.js.map +0 -1
  62. package/dist/chunk-FGZXQWSR.cjs.map +0 -1
  63. package/dist/chunk-KS2YZBAS.js.map +0 -1
  64. package/dist/chunk-LXKFVJF4.cjs.map +0 -1
  65. package/dist/chunk-T75NZM56.cjs.map +0 -1
  66. package/dist/chunk-WXCX5TJJ.js.map +0 -1
  67. package/dist/chunk-X5WVIJGG.js.map +0 -1
  68. package/dist/chunk-ZCIZUBMR.cjs.map +0 -1
  69. /package/dist/{chunk-Q3H5C6UR.js.map → chunk-U2XW6DY4.js.map} +0 -0
  70. /package/dist/{chunk-E6MXDQXW.js.map → chunk-XT635TWP.js.map} +0 -0
@@ -1,35 +1,42 @@
1
1
  import {
2
2
  getCanonicalUnit
3
- } from "./chunk-Q3H5C6UR.js";
3
+ } from "./chunk-U2XW6DY4.js";
4
4
 
5
5
  // src/reference-ranges.ts
6
6
  var biomarkerRangeDefinitions = {
7
7
  Albumin_Creatinine_Ratio: {
8
8
  default: { max: 30, min: 0, optimalMax: 20, optimalMin: 0, unit: "mg/g" },
9
+ kind: "decision-threshold",
9
10
  source: "tietz-7ed-2015"
10
11
  },
11
12
  Adiponectin: {
12
13
  default: { max: 26, min: 4, optimalMax: 20, optimalMin: 8, unit: "mcg/mL" },
14
+ kind: "reference-interval",
13
15
  source: "tietz-7ed-2015"
14
16
  },
15
17
  ADMA: {
16
18
  default: { max: 0.7, min: 0.3, optimalMax: 0.55, optimalMin: 0.3, unit: "umol/L" },
19
+ kind: "reference-interval",
17
20
  source: "nemeth-adma-2017"
18
21
  },
19
22
  AFP: {
20
23
  default: { max: 10, min: 0, optimalMax: 8, optimalMin: 0, unit: "ng/mL" },
24
+ kind: "reference-interval",
21
25
  source: "sturgeon-nacb-2008"
22
26
  },
23
27
  Albumin_Globulin_Ratio: {
24
28
  default: { max: 2.5, min: 1, optimalMax: 2.2, optimalMin: 1.2, unit: "" },
29
+ kind: "reference-interval",
25
30
  source: "tietz-7ed-2015"
26
31
  },
27
32
  Albumin: {
28
33
  default: { max: 5, min: 3.5, optimalMax: 4.8, optimalMin: 4, unit: "g/dL" },
34
+ kind: "reference-interval",
29
35
  source: "pns-bioquimica-2019"
30
36
  },
31
37
  AlkalinePhosphatase: {
32
38
  default: { max: 147, min: 44, optimalMax: 120, optimalMin: 50, unit: "U/L" },
39
+ kind: "reference-interval",
33
40
  source: "tietz-7ed-2015",
34
41
  variants: [
35
42
  {
@@ -46,6 +53,7 @@ var biomarkerRangeDefinitions = {
46
53
  },
47
54
  ALT: {
48
55
  default: { max: 35, min: 0, optimalMax: 25, optimalMin: 0, unit: "U/L" },
56
+ kind: "reference-interval",
49
57
  source: "tietz-7ed-2015",
50
58
  variants: [
51
59
  {
@@ -68,6 +76,7 @@ var biomarkerRangeDefinitions = {
68
76
  // de ~4 ng/mL já merecem investigação.
69
77
  AMH: {
70
78
  default: { max: 6, min: 1, optimalMax: 4, optimalMin: 1.5, unit: "ng/mL" },
79
+ kind: "reference-interval",
71
80
  source: "tietz-7ed-2015",
72
81
  variants: [
73
82
  {
@@ -103,14 +112,17 @@ var biomarkerRangeDefinitions = {
103
112
  },
104
113
  Ammonia: {
105
114
  default: { max: 45, min: 15, optimalMax: 40, optimalMin: 20, unit: "umol/L" },
115
+ kind: "reference-interval",
106
116
  source: "tietz-7ed-2015"
107
117
  },
108
118
  AntiThyroglobulin: {
109
119
  default: { max: 115, min: 0, optimalMax: 40, optimalMin: 0, unit: "IU/mL" },
120
+ kind: "reference-interval",
110
121
  source: "tietz-7ed-2015"
111
122
  },
112
123
  AntiTPO: {
113
124
  default: { max: 34, min: 0, optimalMax: 9, optimalMin: 0, unit: "IU/mL" },
125
+ kind: "reference-interval",
114
126
  source: "tietz-7ed-2015"
115
127
  },
116
128
  // Aortic valve calcium — no standardized clinical threshold; use mild cutoff
@@ -118,23 +130,28 @@ var biomarkerRangeDefinitions = {
118
130
  AorticValveCalcium: {
119
131
  default: { max: 99, min: 0, optimalMax: 0, optimalMin: 0, unit: "AU" },
120
132
  direction: "lower-better",
133
+ kind: "decision-threshold",
121
134
  source: "rumberger-cac-1999"
122
135
  },
123
136
  ApoA1: {
124
137
  default: { max: 200, min: 100, optimalMax: 180, optimalMin: 120, unit: "mg/dL" },
138
+ kind: "reference-interval",
125
139
  source: "contois-apoa1-1996"
126
140
  },
127
141
  ApoB: {
128
142
  default: { max: 90, min: 0, optimalMax: 70, optimalMin: 0, unit: "mg/dL" },
129
143
  direction: "lower-better",
144
+ kind: "decision-threshold",
130
145
  source: "sbc-lipids-2025"
131
146
  },
132
147
  ApoCIII: {
133
148
  default: { max: 10, min: 0, optimalMax: 7, optimalMin: 0, unit: "mg/dL" },
149
+ kind: "decision-threshold",
134
150
  source: "khetarpal-apociii-2016"
135
151
  },
136
152
  Omega6_AA: {
137
153
  default: { max: 15, min: 5, optimalMax: 12, optimalMin: 7, unit: "%" },
154
+ kind: "decision-threshold",
138
155
  source: "simopoulos-omega-ratio-2002"
139
156
  },
140
157
  // Razão Ácido Araquidônico/EPA (sangue total) — `lower-better`: razão menor =
@@ -147,16 +164,19 @@ var biomarkerRangeDefinitions = {
147
164
  // dentro do intervalo. Sem `optimal*`: não há corte ótimo de AA/EPA com fonte.
148
165
  // Em telas de relatório único, prefira o intervalo impresso pelo laboratório.
149
166
  AA_EPA_Ratio: {
150
- default: { max: 40.7, min: 3.7, unit: "" },
167
+ default: { max: 40.7, min: 3.7, minKind: "display", unit: "" },
151
168
  direction: "lower-better",
169
+ kind: "population",
152
170
  source: "torrissen-omega3-dbs-2025"
153
171
  },
154
172
  Arsenic: {
155
173
  default: { max: 35, min: 0, optimalMax: 20, optimalMin: 0, unit: "mcg/L" },
174
+ kind: "decision-threshold",
156
175
  source: "nr7-pcmso-2020"
157
176
  },
158
177
  AST: {
159
178
  default: { max: 35, min: 0, optimalMax: 25, optimalMin: 0, unit: "U/L" },
179
+ kind: "reference-interval",
160
180
  source: "tietz-7ed-2015",
161
181
  variants: [
162
182
  {
@@ -175,6 +195,7 @@ var biomarkerRangeDefinitions = {
175
195
  // Tabela 2 da PNS 2019. Ver o comentário em `Neutrophils_Abs`.
176
196
  Basophils_Abs: {
177
197
  default: { max: 0.072, min: 0, unit: "K/uL" },
198
+ kind: "reference-interval",
178
199
  source: "pns-hemograma-2019",
179
200
  variants: [
180
201
  { ageMin: 18, range: { max: 0.062, min: 0, unit: "K/uL" }, sex: "M" },
@@ -183,6 +204,7 @@ var biomarkerRangeDefinitions = {
183
204
  },
184
205
  Bicarbonate: {
185
206
  default: { max: 29, min: 23, optimalMax: 28, optimalMin: 24, unit: "mEq/L" },
207
+ kind: "reference-interval",
186
208
  source: "tietz-7ed-2015"
187
209
  },
188
210
  // β-Hidroxibutirato (BHB) sérico — corpos cetônicos. Faixa derivada de
@@ -192,23 +214,28 @@ var biomarkerRangeDefinitions = {
192
214
  // superior aqui reflete estado pós-prandial habitual, não jejum.
193
215
  BetaHydroxybutyrate: {
194
216
  default: { max: 0.28, min: 0.02, optimalMax: 0.28, optimalMin: 0.02, unit: "mmol/L" },
217
+ kind: "reference-interval",
195
218
  source: "klee-bhb-2020"
196
219
  },
197
220
  BilirubinDirect: {
198
221
  default: { max: 0.3, min: 0, optimalMax: 0.2, optimalMin: 0, unit: "mg/dL" },
222
+ kind: "reference-interval",
199
223
  source: "tietz-7ed-2015"
200
224
  },
201
225
  BilirubinIndirect: {
202
226
  default: { max: 0.8, min: 0, optimalMax: 0.6, optimalMin: 0, unit: "mg/dL" },
227
+ kind: "reference-interval",
203
228
  source: "tietz-7ed-2015"
204
229
  },
205
230
  BilirubinTotal: {
206
231
  default: { max: 1.2, min: 0.1, optimalMax: 0.9, optimalMin: 0.2, unit: "mg/dL" },
232
+ kind: "reference-interval",
207
233
  source: "tietz-7ed-2015"
208
234
  },
209
235
  // BNP: 35 pg/mL = corte não-agudo para triagem de IC (SBC IC 2018)
210
236
  BNP: {
211
237
  default: { max: 35, min: 0, optimalMax: 20, optimalMin: 0, unit: "pg/mL" },
238
+ kind: "decision-threshold",
212
239
  source: "sbc-ic-2018"
213
240
  },
214
241
  // Razão BUN/Creatinina — faixa 10-20 aplica-se ao Nitrogênio Ureico (BUN).
@@ -219,14 +246,17 @@ var biomarkerRangeDefinitions = {
219
246
  // distinta. Ver issue #41 para alinhamento de nomenclatura/LOINC.
220
247
  BUN_Creatinine_Ratio: {
221
248
  default: { max: 20, min: 10, optimalMax: 18, optimalMin: 12, unit: "" },
249
+ kind: "reference-interval",
222
250
  source: "tietz-7ed-2015"
223
251
  },
224
252
  CA125: {
225
253
  default: { max: 35, min: 0, optimalMax: 25, optimalMin: 0, unit: "U/mL" },
254
+ kind: "reference-interval",
226
255
  source: "sturgeon-nacb-2008"
227
256
  },
228
257
  CA199: {
229
258
  default: { max: 37, min: 0, optimalMax: 30, optimalMin: 0, unit: "U/mL" },
259
+ kind: "reference-interval",
230
260
  source: "sturgeon-nacb-2008"
231
261
  },
232
262
  // CAC: Agatston classification — 0=none, 1-99=mild, 100-399=moderate, 400+=severe
@@ -234,44 +264,53 @@ var biomarkerRangeDefinitions = {
234
264
  CAC: {
235
265
  default: { max: 99, min: 0, optimalMax: 0, optimalMin: 0, unit: "AU" },
236
266
  direction: "lower-better",
267
+ kind: "decision-threshold",
237
268
  source: "rumberger-cac-1999"
238
269
  },
239
270
  // Per-vessel scores — same Agatston classification applied per vessel
240
271
  CAC_LAD: {
241
272
  default: { max: 99, min: 0, optimalMax: 0, optimalMin: 0, unit: "AU" },
242
273
  direction: "lower-better",
274
+ kind: "decision-threshold",
243
275
  source: "rumberger-cac-1999"
244
276
  },
245
277
  CAC_LCX: {
246
278
  default: { max: 99, min: 0, optimalMax: 0, optimalMin: 0, unit: "AU" },
247
279
  direction: "lower-better",
280
+ kind: "decision-threshold",
248
281
  source: "rumberger-cac-1999"
249
282
  },
250
283
  CAC_LMA: {
251
284
  default: { max: 99, min: 0, optimalMax: 0, optimalMin: 0, unit: "AU" },
252
285
  direction: "lower-better",
286
+ kind: "decision-threshold",
253
287
  source: "rumberger-cac-1999"
254
288
  },
255
289
  CAC_Percentile: {
256
290
  default: { max: 50, min: 0, optimalMax: 25, optimalMin: 0, unit: "%", warningMax: 75 },
257
291
  direction: "lower-better",
292
+ kind: "decision-threshold",
258
293
  source: "rumberger-cac-1999"
259
294
  },
260
295
  CAC_RCA: {
261
296
  default: { max: 99, min: 0, optimalMax: 0, optimalMin: 0, unit: "AU" },
262
297
  direction: "lower-better",
298
+ kind: "decision-threshold",
263
299
  source: "rumberger-cac-1999"
264
300
  },
265
301
  Cadmium: {
266
302
  default: { max: 1.2, min: 0, optimalMax: 0.5, optimalMin: 0, unit: "mcg/L" },
303
+ kind: "decision-threshold",
267
304
  source: "nr7-pcmso-2020"
268
305
  },
269
306
  Calcium: {
270
307
  default: { max: 10.5, min: 8.5, optimalMax: 10, optimalMin: 9, unit: "mg/dL" },
308
+ kind: "reference-interval",
271
309
  source: "tietz-7ed-2015"
272
310
  },
273
311
  CEA: {
274
312
  default: { max: 3, min: 0, optimalMax: 2.5, optimalMin: 0, unit: "ng/mL" },
313
+ kind: "reference-interval",
275
314
  source: "sturgeon-nacb-2008"
276
315
  },
277
316
  // CK: valores conservadores baseados em faixas laboratoriais típicas
@@ -296,6 +335,7 @@ var biomarkerRangeDefinitions = {
296
335
  // autodeclaração de raça/Cor". Ver a issue #3 para a decisão registrada.
297
336
  CK: {
298
337
  default: { max: 314, min: 30, optimalMax: 170, optimalMin: 40, unit: "U/L" },
338
+ kind: "reference-interval",
299
339
  source: "kalaria-ck-ri-2026",
300
340
  variants: [
301
341
  { sex: "F", range: { max: 170, min: 30, optimalMax: 150, optimalMin: 40, unit: "U/L" } }
@@ -303,6 +343,7 @@ var biomarkerRangeDefinitions = {
303
343
  },
304
344
  Chloride: {
305
345
  default: { max: 106, min: 98, optimalMax: 105, optimalMin: 100, unit: "mEq/L" },
346
+ kind: "reference-interval",
306
347
  source: "tietz-7ed-2015"
307
348
  },
308
349
  // Colesterol total — SBC 2017/2025: valor desejável < 190 mg/dL para adultos,
@@ -310,6 +351,7 @@ var biomarkerRangeDefinitions = {
310
351
  // (NCEP, 2002), superada pelas atualizações brasileiras.
311
352
  Cholesterol: {
312
353
  default: { max: 190, min: 0, optimalMax: 170, optimalMin: 0, unit: "mg/dL" },
354
+ kind: "decision-threshold",
313
355
  source: "sbc-lipids-2025"
314
356
  },
315
357
  // Índice de Castelli I (CT/HDL-c)
@@ -317,6 +359,7 @@ var biomarkerRangeDefinitions = {
317
359
  // Índice de Castelli I — SBC 2017: M <4.9, F <4.3
318
360
  default: { max: 4.9, min: 0, optimalMax: 3.5, optimalMin: 0, unit: "" },
319
361
  direction: "lower-better",
362
+ kind: "decision-threshold",
320
363
  source: "castelli-ratio-1992",
321
364
  variants: [
322
365
  {
@@ -333,22 +376,27 @@ var biomarkerRangeDefinitions = {
333
376
  },
334
377
  CO2: {
335
378
  default: { max: 29, min: 23, optimalMax: 28, optimalMin: 24, unit: "mEq/L" },
379
+ kind: "reference-interval",
336
380
  source: "tietz-7ed-2015"
337
381
  },
338
382
  Copper: {
339
383
  default: { max: 175, min: 70, optimalMax: 150, optimalMin: 85, unit: "mcg/dL" },
384
+ kind: "reference-interval",
340
385
  source: "tietz-7ed-2015"
341
386
  },
342
387
  CoQ10: {
343
388
  default: { max: 1.5, min: 0.5, optimalMax: 1.3, optimalMin: 0.7, unit: "mg/L" },
389
+ kind: "reference-interval",
344
390
  source: "tietz-7ed-2015"
345
391
  },
346
392
  Cortisol: {
347
393
  default: { max: 25, min: 5, optimalMax: 20, optimalMin: 10, unit: "mcg/dL" },
394
+ kind: "reference-interval",
348
395
  source: "tietz-7ed-2015"
349
396
  },
350
397
  CortisolFree: {
351
398
  default: { max: 2.5, min: 0.5, optimalMax: 2, optimalMin: 0.8, unit: "mcg/dL" },
399
+ kind: "reference-interval",
352
400
  source: "tietz-7ed-2015"
353
401
  },
354
402
  CPeptide: {
@@ -360,10 +408,12 @@ var biomarkerRangeDefinitions = {
360
408
  optimalMin: 1,
361
409
  unit: "ng/mL"
362
410
  },
411
+ kind: "reference-interval",
363
412
  source: "tietz-7ed-2015"
364
413
  },
365
414
  Creatinine: {
366
415
  default: { max: 1.2, min: 0.6, optimalMax: 1, optimalMin: 0.7, unit: "mg/dL" },
416
+ kind: "reference-interval",
367
417
  source: "pns-bioquimica-2019",
368
418
  variants: [
369
419
  // Gestação: hiperfiltração glomerular (↑ 40–50% GFR) reduz a creatinina
@@ -389,10 +439,12 @@ var biomarkerRangeDefinitions = {
389
439
  CRP: {
390
440
  default: { max: 3, min: 0, optimalMax: 1, optimalMin: 0, unit: "mg/L" },
391
441
  direction: "lower-better",
442
+ kind: "decision-threshold",
392
443
  source: "tietz-7ed-2015"
393
444
  },
394
445
  CystatinC: {
395
446
  default: { max: 1, min: 0.5, optimalMax: 0.9, optimalMin: 0.6, unit: "mg/L" },
447
+ kind: "reference-interval",
396
448
  source: "tietz-7ed-2015"
397
449
  },
398
450
  // D-Dímero — exame de exclusão de TEV (tromboembolismo venoso) com
@@ -406,6 +458,7 @@ var biomarkerRangeDefinitions = {
406
458
  DDimer: {
407
459
  default: { max: 500, min: 0, unit: "ng/mL" },
408
460
  direction: "lower-better",
461
+ kind: "decision-threshold",
409
462
  source: "wells-ddimer-2003",
410
463
  variants: [
411
464
  // Corte ajustado por idade — ESC 2019 (Konstantinides et al.) e
@@ -419,10 +472,12 @@ var biomarkerRangeDefinitions = {
419
472
  },
420
473
  Omega3_DHA: {
421
474
  default: { max: 8, min: 2, optimalMax: 6.5, optimalMin: 3.5, unit: "%" },
475
+ kind: "decision-threshold",
422
476
  source: "harris-omega3-2004"
423
477
  },
424
478
  DHEAS: {
425
479
  default: { max: 500, min: 100, optimalMax: 400, optimalMin: 150, unit: "mcg/dL" },
480
+ kind: "reference-interval",
426
481
  source: "tietz-7ed-2015",
427
482
  variants: [
428
483
  {
@@ -463,20 +518,30 @@ var biomarkerRangeDefinitions = {
463
518
  },
464
519
  Omega3_DPA: {
465
520
  default: { max: 2, min: 0.3, optimalMax: 1.5, optimalMin: 0.5, unit: "%" },
521
+ kind: "decision-threshold",
466
522
  source: "harris-omega3-2004"
467
523
  },
468
524
  eGFR: {
469
- default: { max: 120, min: 60, optimalMax: 120, optimalMin: 90, unit: "mL/min/1.73m\xB2" },
525
+ default: {
526
+ max: 120,
527
+ maxKind: "display",
528
+ min: 60,
529
+ optimalMax: 120,
530
+ optimalMin: 90,
531
+ unit: "mL/min/1.73m\xB2"
532
+ },
470
533
  // KDIGO 2024: TFG 60-89 (G2) sem marcador de lesão renal não é DRC, em
471
534
  // nenhuma faixa etária. A variante por idade que existia aqui rebaixava o
472
535
  // piso só para 60+ e ainda limitava o teto a 90, o que sinalizava como
473
536
  // alterado qualquer idoso com função preservada.
537
+ kind: "decision-threshold",
474
538
  source: "kdigo-ckd-2024"
475
539
  },
476
540
  // `Eosinophils` (%) fica sem faixa de propósito e `Eosinophils_Abs` usa os limites da
477
541
  // Tabela 2 da PNS 2019. Ver o comentário em `Neutrophils_Abs`.
478
542
  Eosinophils_Abs: {
479
543
  default: { max: 0.66, min: 0, unit: "K/uL" },
544
+ kind: "reference-interval",
480
545
  source: "pns-hemograma-2019",
481
546
  variants: [
482
547
  { ageMin: 18, range: { max: 0.66, min: 0, unit: "K/uL" }, sex: "M" },
@@ -485,18 +550,22 @@ var biomarkerRangeDefinitions = {
485
550
  },
486
551
  Omega3_EPA: {
487
552
  default: { max: 3.5, min: 0.5, optimalMax: 2.5, optimalMin: 1, unit: "%" },
553
+ kind: "decision-threshold",
488
554
  source: "harris-omega3-2004"
489
555
  },
490
556
  EPADPADHA: {
491
557
  default: { max: 10, min: 3, optimalMax: 9, optimalMin: 5, unit: "%" },
558
+ kind: "decision-threshold",
492
559
  source: "harris-omega3-2004"
493
560
  },
494
561
  ESR: {
495
562
  default: { max: 20, min: 0, optimalMax: 10, optimalMin: 0, unit: "mm/hr" },
563
+ kind: "reference-interval",
496
564
  source: "tietz-7ed-2015"
497
565
  },
498
566
  Estradiol: {
499
567
  default: { max: 40, min: 10, optimalMax: 35, optimalMin: 15, unit: "pg/mL" },
568
+ kind: "reference-interval",
500
569
  source: "tietz-7ed-2015",
501
570
  variants: [
502
571
  {
@@ -519,6 +588,7 @@ var biomarkerRangeDefinitions = {
519
588
  },
520
589
  F2Isoprostanes: {
521
590
  default: { max: 86, min: 0, optimalMax: 60, optimalMin: 0, unit: "pg/mL" },
591
+ kind: "reference-interval",
522
592
  source: "tietz-7ed-2015"
523
593
  },
524
594
  // Ferritina — WHO 2020 é o documento de referência específico para avaliação
@@ -528,6 +598,7 @@ var biomarkerRangeDefinitions = {
528
598
  // tipo de faixa, mas documentado aqui para consumidores).
529
599
  Ferritin: {
530
600
  default: { max: 150, min: 12, optimalMax: 120, optimalMin: 30, unit: "ng/mL" },
601
+ kind: "decision-threshold",
531
602
  source: "who-iron-2020",
532
603
  variants: [
533
604
  // Gestação: ferritina cai fisiologicamente no 2º/3º trimestre pela expansão
@@ -560,14 +631,17 @@ var biomarkerRangeDefinitions = {
560
631
  // Fibrinogênio: 200-400 mg/dL — faixa de referência padrão (método de Clauss)
561
632
  Fibrinogen: {
562
633
  default: { max: 400, min: 200, optimalMax: 350, optimalMin: 250, unit: "mg/dL" },
634
+ kind: "reference-interval",
563
635
  source: "tietz-7ed-2015"
564
636
  },
565
637
  FolicAcid: {
566
638
  default: { max: 20, min: 3, optimalMax: 15, optimalMin: 5, unit: "ng/mL" },
639
+ kind: "reference-interval",
567
640
  source: "tietz-7ed-2015"
568
641
  },
569
642
  FSH: {
570
643
  default: { max: 12.4, min: 1.5, optimalMax: 10, optimalMin: 3, unit: "mIU/mL" },
644
+ kind: "reference-interval",
571
645
  source: "tietz-7ed-2015",
572
646
  variants: [
573
647
  {
@@ -591,26 +665,29 @@ var biomarkerRangeDefinitions = {
591
665
  GGT: {
592
666
  default: { max: 55, min: 0, optimalMax: 30, optimalMin: 0, unit: "U/L" },
593
667
  direction: "lower-better",
668
+ kind: "reference-interval",
594
669
  source: "tietz-7ed-2015",
595
670
  variants: [
596
671
  {
597
672
  ageMin: 18,
598
- range: { max: 61, min: 8, optimalMax: 40, optimalMin: 10, unit: "U/L" },
673
+ range: { max: 61, min: 8, minKind: "display", optimalMax: 40, optimalMin: 10, unit: "U/L" },
599
674
  sex: "M"
600
675
  },
601
676
  {
602
677
  ageMin: 18,
603
- range: { max: 36, min: 5, optimalMax: 25, optimalMin: 8, unit: "U/L" },
678
+ range: { max: 36, min: 5, minKind: "display", optimalMax: 25, optimalMin: 8, unit: "U/L" },
604
679
  sex: "F"
605
680
  }
606
681
  ]
607
682
  },
608
683
  Ghrelin: {
609
684
  default: { max: 1e3, min: 300, optimalMax: 800, optimalMin: 400, unit: "pg/mL" },
685
+ kind: "reference-interval",
610
686
  source: "tietz-7ed-2015"
611
687
  },
612
688
  Globulin: {
613
689
  default: { max: 3.5, min: 2, optimalMax: 3.2, optimalMin: 2.3, unit: "g/dL" },
690
+ kind: "reference-interval",
614
691
  source: "tietz-7ed-2015"
615
692
  },
616
693
  // A faixa é de jejum, então mora na definição que afirma jejum. Glicose
@@ -633,6 +710,7 @@ var biomarkerRangeDefinitions = {
633
710
  optimalMin: 70,
634
711
  unit: "mg/dL"
635
712
  },
713
+ kind: "decision-threshold",
636
714
  source: "sbd-diabetes-2024",
637
715
  variants: [
638
716
  // Gestação: DMG (IADPSG/SBD 2024) usa cortes mais restritivos na glicemia
@@ -654,10 +732,12 @@ var biomarkerRangeDefinitions = {
654
732
  },
655
733
  GlycoMark: {
656
734
  default: { max: 40, min: 10, optimalMax: 35, optimalMin: 15, unit: "mcg/mL" },
735
+ kind: "reference-interval",
657
736
  source: "tietz-7ed-2015"
658
737
  },
659
738
  GrowthHormone: {
660
739
  default: { max: 5, min: 0, optimalMax: 3, optimalMin: 0, unit: "ng/mL" },
740
+ kind: "reference-interval",
661
741
  source: "tietz-7ed-2015"
662
742
  },
663
743
  // HbA1c — SBD 2024 não estabelece piso de referência clinicamente acionável.
@@ -667,11 +747,13 @@ var biomarkerRangeDefinitions = {
667
747
  // criar flag clínico em valores fisiologicamente baixos. optimalMin preserva
668
748
  // o alvo fisiológico da fração glicada.
669
749
  HbA1c: {
670
- default: { max: 5.7, min: 2, optimalMax: 5.3, optimalMin: 4.5, unit: "%" },
750
+ default: { max: 5.7, min: 2, minKind: "display", optimalMax: 5.3, optimalMin: 4.5, unit: "%" },
751
+ kind: "decision-threshold",
671
752
  source: "sbd-diabetes-2024"
672
753
  },
673
754
  Hct: {
674
755
  default: { max: 50, min: 36, optimalMax: 48, optimalMin: 40, unit: "%" },
756
+ kind: "reference-interval",
675
757
  source: "pns-hemograma-2019",
676
758
  variants: [
677
759
  {
@@ -693,18 +775,40 @@ var biomarkerRangeDefinitions = {
693
775
  // não como ponto de corte clínico; consumidores devem tratar `direction:
694
776
  // higher-better` como sinal autoritativo.
695
777
  HDL: {
696
- default: { max: 100, min: 40, optimalMax: 100, optimalMin: 50, unit: "mg/dL" },
778
+ default: {
779
+ max: 100,
780
+ maxKind: "display",
781
+ min: 40,
782
+ optimalMax: 100,
783
+ optimalMin: 50,
784
+ unit: "mg/dL"
785
+ },
697
786
  direction: "higher-better",
787
+ kind: "decision-threshold",
698
788
  source: "sbc-lipids-2025",
699
789
  variants: [
700
790
  {
701
791
  ageMin: 18,
702
- range: { max: 100, min: 40, optimalMax: 100, optimalMin: 45, unit: "mg/dL" },
792
+ range: {
793
+ max: 100,
794
+ maxKind: "display",
795
+ min: 40,
796
+ optimalMax: 100,
797
+ optimalMin: 45,
798
+ unit: "mg/dL"
799
+ },
703
800
  sex: "M"
704
801
  },
705
802
  {
706
803
  ageMin: 18,
707
- range: { max: 100, min: 50, optimalMax: 100, optimalMin: 55, unit: "mg/dL" },
804
+ range: {
805
+ max: 100,
806
+ maxKind: "display",
807
+ min: 50,
808
+ optimalMax: 100,
809
+ optimalMin: 55,
810
+ unit: "mg/dL"
811
+ },
708
812
  sex: "F"
709
813
  }
710
814
  ]
@@ -712,12 +816,21 @@ var biomarkerRangeDefinitions = {
712
816
  HDL_Large: {
713
817
  // HDL Large: higher is better
714
818
  // Quest Ion Mobility reference: Male 4334-10815, Female 5038-17886 nmol/L, optimal >6729
715
- default: { max: 17886, min: 4334, optimalMax: 17886, optimalMin: 6729, unit: "nmol/L" },
819
+ default: {
820
+ max: 17886,
821
+ maxKind: "display",
822
+ min: 4334,
823
+ optimalMax: 17886,
824
+ optimalMin: 6729,
825
+ unit: "nmol/L"
826
+ },
716
827
  direction: "higher-better",
828
+ kind: "reference-interval",
717
829
  source: "caulfield-ionmobility-2008"
718
830
  },
719
831
  Hgb: {
720
832
  default: { max: 17.5, min: 12, optimalMax: 16, optimalMin: 13.5, unit: "g/dL" },
833
+ kind: "reference-interval",
721
834
  source: "pns-hemograma-2019",
722
835
  variants: [
723
836
  // Gestação: hemodiluição fisiológica reduz o piso aceitável.
@@ -773,19 +886,23 @@ var biomarkerRangeDefinitions = {
773
886
  warningMax: 2.71
774
887
  },
775
888
  direction: "lower-better",
889
+ kind: "decision-threshold",
776
890
  source: "geloneze-brams-2009"
777
891
  },
778
892
  Homocysteine: {
779
- default: { max: 15, min: 4, optimalMax: 10, optimalMin: 5, unit: "umol/L" },
893
+ default: { max: 15, min: 4, minKind: "display", optimalMax: 10, optimalMin: 5, unit: "umol/L" },
780
894
  direction: "lower-better",
895
+ kind: "reference-interval",
781
896
  source: "selhub-homocysteine-1999"
782
897
  },
783
898
  IGF1: {
784
899
  default: { max: 350, min: 100, optimalMax: 300, optimalMin: 150, unit: "ng/mL" },
900
+ kind: "reference-interval",
785
901
  source: "tietz-7ed-2015"
786
902
  },
787
903
  ImmatureGranulocytes: {
788
904
  default: { max: 1, min: 0, optimalMax: 0.5, optimalMin: 0, unit: "%" },
905
+ kind: "reference-interval",
789
906
  source: "tietz-7ed-2015"
790
907
  },
791
908
  Insulin: {
@@ -797,10 +914,12 @@ var biomarkerRangeDefinitions = {
797
914
  optimalMin: 3,
798
915
  unit: "uIU/mL"
799
916
  },
917
+ kind: "reference-interval",
800
918
  source: "tietz-7ed-2015"
801
919
  },
802
920
  Iron: {
803
921
  default: { max: 170, min: 60, optimalMax: 140, optimalMin: 80, unit: "mcg/dL" },
922
+ kind: "reference-interval",
804
923
  source: "sbpc-ml-2021",
805
924
  variants: [
806
925
  {
@@ -817,6 +936,7 @@ var biomarkerRangeDefinitions = {
817
936
  },
818
937
  Lactate: {
819
938
  default: { max: 2.2, min: 0.5, optimalMax: 1.8, optimalMin: 0.7, unit: "mmol/L" },
939
+ kind: "reference-interval",
820
940
  source: "tietz-7ed-2015"
821
941
  },
822
942
  // DHL/LDH — método IFCC a 37 °C (padrão atual na maioria dos laboratórios
@@ -828,6 +948,7 @@ var biomarkerRangeDefinitions = {
828
948
  LDH: {
829
949
  default: { max: 248, min: 0, optimalMax: 248, optimalMin: 0, unit: "U/L" },
830
950
  direction: "lower-better",
951
+ kind: "reference-interval",
831
952
  source: "schumann-ifcc-ldh-2002",
832
953
  variants: [
833
954
  {
@@ -845,59 +966,109 @@ var biomarkerRangeDefinitions = {
845
966
  LDL: {
846
967
  default: { max: 100, min: 0, optimalMax: 70, optimalMin: 0, unit: "mg/dL" },
847
968
  direction: "lower-better",
969
+ kind: "decision-threshold",
848
970
  source: "sbc-lipids-2025"
849
971
  },
850
972
  LDL_Medium: {
851
973
  // LDL Medium (LDL Média): lower is better
852
974
  // Quest Ion Mobility reference: Male 167-485, Female 121-397 nmol/L, optimal <215
853
- default: { max: 485, min: 121, optimalMax: 215, optimalMin: 121, unit: "nmol/L" },
975
+ default: {
976
+ max: 485,
977
+ min: 121,
978
+ minKind: "display",
979
+ optimalMax: 215,
980
+ optimalMin: 121,
981
+ unit: "nmol/L"
982
+ },
854
983
  direction: "lower-better",
984
+ kind: "reference-interval",
855
985
  source: "caulfield-ionmobility-2008"
856
986
  },
857
987
  LDL_ParticleNumber: {
858
988
  // LDL Particle Number: lower is better
859
989
  // Quest Ion Mobility reference: 1016-2185 nmol/L, optimal <1138
860
- default: { max: 2185, min: 1016, optimalMax: 1138, optimalMin: 1016, unit: "nmol/L" },
990
+ default: {
991
+ max: 2185,
992
+ min: 1016,
993
+ minKind: "display",
994
+ optimalMax: 1138,
995
+ optimalMin: 1016,
996
+ unit: "nmol/L"
997
+ },
861
998
  direction: "lower-better",
999
+ kind: "reference-interval",
862
1000
  source: "caulfield-ionmobility-2008"
863
1001
  },
864
1002
  LDL_Peak_Size: {
865
1003
  // LDL Peak Size: higher is better (larger particles less atherogenic)
866
1004
  // Quest Ion Mobility reference: optimal >222.9 Å (22.29 nm)
867
- default: { max: 250, min: 217.4, optimalMax: 250, optimalMin: 222.9, unit: "Angstrom" },
1005
+ default: {
1006
+ max: 250,
1007
+ maxKind: "display",
1008
+ min: 217.4,
1009
+ optimalMax: 250,
1010
+ optimalMin: 222.9,
1011
+ unit: "Angstrom"
1012
+ },
868
1013
  direction: "higher-better",
1014
+ kind: "reference-interval",
869
1015
  source: "caulfield-ionmobility-2008"
870
1016
  },
871
1017
  LDL_Small: {
872
1018
  // LDL Small (LDL Pequena): lower is better (small dense LDL is most atherogenic)
873
1019
  // Quest Ion Mobility reference: Male 123-441, Female 126-382 nmol/L, optimal <142
874
- default: { max: 441, min: 123, optimalMax: 142, optimalMin: 123, unit: "nmol/L" },
1020
+ default: {
1021
+ max: 441,
1022
+ min: 123,
1023
+ minKind: "display",
1024
+ optimalMax: 142,
1025
+ optimalMin: 123,
1026
+ unit: "nmol/L"
1027
+ },
875
1028
  direction: "lower-better",
1029
+ kind: "reference-interval",
876
1030
  source: "caulfield-ionmobility-2008"
877
1031
  },
878
1032
  Lead: {
879
1033
  default: { max: 5, min: 0, optimalMax: 2, optimalMin: 0, unit: "mcg/dL" },
1034
+ kind: "decision-threshold",
880
1035
  source: "nr7-pcmso-2020"
881
1036
  },
882
1037
  Leptin: {
883
- default: { max: 15, min: 2, optimalMax: 12, optimalMin: 3, unit: "ng/mL" },
1038
+ default: { max: 15, min: 2, minKind: "clinical", optimalMax: 12, optimalMin: 3, unit: "ng/mL" },
884
1039
  direction: "lower-better",
1040
+ kind: "reference-interval",
885
1041
  source: "tietz-7ed-2015",
886
1042
  variants: [
887
1043
  {
888
1044
  ageMin: 18,
889
- range: { max: 10, min: 1, optimalMax: 8, optimalMin: 2, unit: "ng/mL" },
1045
+ range: {
1046
+ max: 10,
1047
+ min: 1,
1048
+ minKind: "clinical",
1049
+ optimalMax: 8,
1050
+ optimalMin: 2,
1051
+ unit: "ng/mL"
1052
+ },
890
1053
  sex: "M"
891
1054
  },
892
1055
  {
893
1056
  ageMin: 18,
894
- range: { max: 25, min: 4, optimalMax: 18, optimalMin: 5, unit: "ng/mL" },
1057
+ range: {
1058
+ max: 25,
1059
+ min: 4,
1060
+ minKind: "clinical",
1061
+ optimalMax: 18,
1062
+ optimalMin: 5,
1063
+ unit: "ng/mL"
1064
+ },
895
1065
  sex: "F"
896
1066
  }
897
1067
  ]
898
1068
  },
899
1069
  LH: {
900
1070
  default: { max: 8.6, min: 1.7, optimalMax: 8, optimalMin: 2, unit: "mIU/mL" },
1071
+ kind: "reference-interval",
901
1072
  source: "tietz-7ed-2015",
902
1073
  variants: [
903
1074
  {
@@ -920,6 +1091,7 @@ var biomarkerRangeDefinitions = {
920
1091
  },
921
1092
  Omega6_LA: {
922
1093
  default: { max: 35, min: 15, optimalMax: 28, optimalMin: 18, unit: "%" },
1094
+ kind: "decision-threshold",
923
1095
  source: "simopoulos-omega-ratio-2002"
924
1096
  },
925
1097
  // Lp(a) — SBC 2025 (seção 3.1.1.2.7): níveis ≥ 50 mg/dL ou ≥ 125 nmol/L são
@@ -931,12 +1103,14 @@ var biomarkerRangeDefinitions = {
931
1103
  Lipoprotein_a: {
932
1104
  default: { max: 125, min: 0, optimalMax: 75, optimalMin: 0, unit: "nmol/L" },
933
1105
  direction: "lower-better",
1106
+ kind: "decision-threshold",
934
1107
  source: "sbc-lipids-2025"
935
1108
  },
936
1109
  // `Lymphocytes` (%) fica sem faixa de propósito e `Lymphocytes_Abs` usa os limites da
937
1110
  // Tabela 2 da PNS 2019. Ver o comentário em `Neutrophils_Abs`.
938
1111
  Lymphocytes_Abs: {
939
1112
  default: { max: 3.414, min: 0.72, unit: "K/uL" },
1113
+ kind: "reference-interval",
940
1114
  source: "pns-hemograma-2019",
941
1115
  variants: [
942
1116
  { ageMin: 18, range: { max: 3.37, min: 0.72, unit: "K/uL" }, sex: "M" },
@@ -945,40 +1119,49 @@ var biomarkerRangeDefinitions = {
945
1119
  },
946
1120
  Magnesium: {
947
1121
  default: { max: 2.2, min: 1.7, optimalMax: 2.1, optimalMin: 1.9, unit: "mg/dL" },
1122
+ kind: "reference-interval",
948
1123
  source: "tietz-7ed-2015"
949
1124
  },
950
1125
  Magnesium_RBC: {
951
1126
  default: { max: 6.8, min: 4, optimalMax: 6, optimalMin: 4.5, unit: "mg/dL" },
1127
+ kind: "reference-interval",
952
1128
  source: "tietz-7ed-2015"
953
1129
  },
954
1130
  MCH: {
955
1131
  default: { max: 33, min: 27, optimalMax: 32, optimalMin: 28, unit: "pg" },
1132
+ kind: "reference-interval",
956
1133
  source: "pns-hemograma-2019"
957
1134
  },
958
1135
  MCHC: {
959
1136
  default: { max: 36, min: 32, optimalMax: 35, optimalMin: 33, unit: "g/dL" },
1137
+ kind: "reference-interval",
960
1138
  source: "pns-hemograma-2019"
961
1139
  },
962
1140
  MCV: {
963
1141
  default: { max: 100, min: 80, optimalMax: 98, optimalMin: 82, unit: "fL" },
1142
+ kind: "reference-interval",
964
1143
  source: "pns-hemograma-2019"
965
1144
  },
966
1145
  Mercury: {
967
1146
  default: { max: 10, min: 0, optimalMax: 5, optimalMin: 0, unit: "mcg/L" },
1147
+ kind: "decision-threshold",
968
1148
  source: "nr7-pcmso-2020"
969
1149
  },
970
1150
  Microalbumin: {
971
1151
  default: { max: 30, min: 0, optimalMax: 20, optimalMin: 0, unit: "mg/L" },
1152
+ kind: "decision-threshold",
972
1153
  source: "kdigo-ckd-2024"
973
1154
  },
974
1155
  MMA: {
975
1156
  default: { max: 378, min: 0, optimalMax: 270, optimalMin: 0, unit: "nmol/L" },
1157
+ kind: "reference-interval",
976
1158
  source: "tietz-7ed-2015"
977
1159
  },
978
1160
  // `Monocytes` (%) fica sem faixa de propósito e `Monocytes_Abs` usa os limites da
979
1161
  // Tabela 2 da PNS 2019. Ver o comentário em `Neutrophils_Abs`.
980
1162
  Monocytes_Abs: {
981
1163
  default: { max: 0.812, min: 0.011, unit: "K/uL" },
1164
+ kind: "reference-interval",
982
1165
  source: "pns-hemograma-2019",
983
1166
  variants: [
984
1167
  { ageMin: 18, range: { max: 0.812, min: 0.011, unit: "K/uL" }, sex: "M" },
@@ -987,11 +1170,13 @@ var biomarkerRangeDefinitions = {
987
1170
  },
988
1171
  MPV: {
989
1172
  default: { max: 11.5, min: 7.5, optimalMax: 10.5, optimalMin: 8, unit: "fL" },
1173
+ kind: "reference-interval",
990
1174
  source: "pns-hemograma-2019"
991
1175
  },
992
1176
  // MPO: Meuwese 2007 (EPIC-Norfolk) — risco CV elevado >322 pmol/L
993
1177
  Myeloperoxidase: {
994
1178
  default: { max: 470, min: 0, optimalMax: 322, optimalMin: 0, unit: "pmol/L" },
1179
+ kind: "decision-threshold",
995
1180
  source: "meuwese-mpo-2007"
996
1181
  },
997
1182
  // Leucograma diferencial em percentual (`Neutrophils`, `Lymphocytes`,
@@ -1015,6 +1200,7 @@ var biomarkerRangeDefinitions = {
1015
1200
  // (menor mínimo e maior máximo entre homens e mulheres).
1016
1201
  Neutrophils_Abs: {
1017
1202
  default: { max: 6.474, min: 0.576, unit: "K/uL" },
1203
+ kind: "reference-interval",
1018
1204
  source: "pns-hemograma-2019",
1019
1205
  variants: [
1020
1206
  { ageMin: 18, range: { max: 5.971, min: 0.576, unit: "K/uL" }, sex: "M" },
@@ -1024,22 +1210,27 @@ var biomarkerRangeDefinitions = {
1024
1210
  NonHDL_Cholesterol: {
1025
1211
  default: { max: 130, min: 0, optimalMax: 100, optimalMin: 0, unit: "mg/dL" },
1026
1212
  direction: "lower-better",
1213
+ kind: "decision-threshold",
1027
1214
  source: "sbc-lipids-2025"
1028
1215
  },
1029
1216
  NRBC: {
1030
1217
  default: { max: 0, min: 0, optimalMax: 0, optimalMin: 0, unit: "/100WBC" },
1218
+ kind: "reference-interval",
1031
1219
  source: "tietz-7ed-2015"
1032
1220
  },
1033
1221
  NTproBNP: {
1034
1222
  default: { max: 125, min: 0, optimalMax: 75, optimalMin: 0, unit: "pg/mL" },
1223
+ kind: "decision-threshold",
1035
1224
  source: "sbc-ic-2018"
1036
1225
  },
1037
1226
  Oleic_Acid: {
1038
1227
  default: { max: 25, min: 15, optimalMax: 22, optimalMin: 18, unit: "%" },
1228
+ kind: "reference-interval",
1039
1229
  source: "tietz-7ed-2015"
1040
1230
  },
1041
1231
  Omega3_Index: {
1042
1232
  default: { max: 8, min: 4, optimalMax: 8, optimalMin: 5.5, unit: "%" },
1233
+ kind: "decision-threshold",
1043
1234
  source: "harris-omega3-2004"
1044
1235
  },
1045
1236
  // Ômega-3 Total (% de ácidos graxos eritrocitários) — Harris & von Schacky
@@ -1049,39 +1240,55 @@ var biomarkerRangeDefinitions = {
1049
1240
  // a literatura e o próprio texto educacional do `platform`.
1050
1241
  Omega3_Total: {
1051
1242
  default: { max: 12, min: 3, optimalMax: 10, optimalMin: 8, unit: "%" },
1243
+ kind: "decision-threshold",
1052
1244
  source: "harris-omega3-2004"
1053
1245
  },
1054
1246
  Omega6_Total: {
1055
1247
  default: { max: 40, min: 20, optimalMax: 35, optimalMin: 25, unit: "%" },
1248
+ kind: "decision-threshold",
1056
1249
  source: "simopoulos-omega-ratio-2002"
1057
1250
  },
1058
1251
  Omega6_Omega3_Ratio: {
1059
- default: { max: 10, min: 1, optimalMax: 4, optimalMin: 1, unit: "" },
1252
+ default: {
1253
+ max: 10,
1254
+ min: 1,
1255
+ minKind: "display",
1256
+ optimalMax: 4,
1257
+ optimalMin: 1,
1258
+ unit: ""
1259
+ },
1060
1260
  direction: "lower-better",
1261
+ kind: "decision-threshold",
1061
1262
  source: "simopoulos-omega-ratio-2002"
1062
1263
  },
1063
1264
  OmegaCheck: {
1064
1265
  default: { max: 8, min: 4, optimalMax: 8, optimalMin: 5.5, unit: "%" },
1266
+ kind: "decision-threshold",
1065
1267
  source: "harris-omega3-2004"
1066
1268
  },
1067
1269
  Palmitic_Acid: {
1068
1270
  default: { max: 30, min: 20, optimalMax: 27, optimalMin: 22, unit: "%" },
1271
+ kind: "reference-interval",
1069
1272
  source: "tietz-7ed-2015"
1070
1273
  },
1071
1274
  Phosphorus: {
1072
1275
  default: { max: 4.5, min: 2.5, optimalMax: 4, optimalMin: 3, unit: "mg/dL" },
1276
+ kind: "reference-interval",
1073
1277
  source: "tietz-7ed-2015"
1074
1278
  },
1075
1279
  Platelets: {
1076
1280
  default: { max: 400, min: 150, optimalMax: 350, optimalMin: 180, unit: "K/uL" },
1281
+ kind: "reference-interval",
1077
1282
  source: "pns-hemograma-2019"
1078
1283
  },
1079
1284
  Potassium: {
1080
1285
  default: { max: 5, min: 3.5, optimalMax: 4.6, optimalMin: 3.8, unit: "mEq/L" },
1286
+ kind: "reference-interval",
1081
1287
  source: "tietz-7ed-2015"
1082
1288
  },
1083
1289
  Prealbumin: {
1084
1290
  default: { max: 38, min: 18, optimalMax: 35, optimalMin: 20, unit: "mg/dL" },
1291
+ kind: "reference-interval",
1085
1292
  source: "tietz-7ed-2015"
1086
1293
  },
1087
1294
  // Progesterona — varia drasticamente com a fase do ciclo menstrual.
@@ -1092,6 +1299,7 @@ var biomarkerRangeDefinitions = {
1092
1299
  // ciclo, indisponível neste contexto.
1093
1300
  Progesterone: {
1094
1301
  default: { max: 0.9, min: 0.1, optimalMax: 0.7, optimalMin: 0.2, unit: "ng/mL" },
1302
+ kind: "reference-interval",
1095
1303
  source: "tietz-7ed-2015",
1096
1304
  variants: [
1097
1305
  {
@@ -1118,6 +1326,7 @@ var biomarkerRangeDefinitions = {
1118
1326
  },
1119
1327
  Prolactin: {
1120
1328
  default: { max: 18, min: 2, optimalMax: 15, optimalMin: 4, unit: "ng/mL" },
1329
+ kind: "reference-interval",
1121
1330
  source: "tietz-7ed-2015",
1122
1331
  variants: [
1123
1332
  {
@@ -1134,6 +1343,7 @@ var biomarkerRangeDefinitions = {
1134
1343
  },
1135
1344
  PSA: {
1136
1345
  default: { max: 4, min: 0, optimalMax: 2.5, optimalMin: 0, unit: "ng/mL" },
1346
+ kind: "reference-interval",
1137
1347
  source: "sturgeon-nacb-2008",
1138
1348
  variants: [
1139
1349
  {
@@ -1163,6 +1373,7 @@ var biomarkerRangeDefinitions = {
1163
1373
  },
1164
1374
  RBC: {
1165
1375
  default: { max: 5.5, min: 4, optimalMax: 5.2, optimalMin: 4.3, unit: "M/uL" },
1376
+ kind: "reference-interval",
1166
1377
  source: "pns-hemograma-2019",
1167
1378
  variants: [
1168
1379
  {
@@ -1179,22 +1390,27 @@ var biomarkerRangeDefinitions = {
1179
1390
  },
1180
1391
  RDW: {
1181
1392
  default: { max: 14.5, min: 11.5, optimalMax: 14, optimalMin: 12, unit: "%" },
1393
+ kind: "reference-interval",
1182
1394
  source: "pns-hemograma-2019"
1183
1395
  },
1184
1396
  Reticulocytes: {
1185
1397
  default: { max: 2.5, min: 0.5, optimalMax: 2, optimalMin: 0.8, unit: "%" },
1398
+ kind: "reference-interval",
1186
1399
  source: "pns-hemograma-2019"
1187
1400
  },
1188
1401
  SDMA: {
1189
1402
  default: { max: 0.6, min: 0.3, optimalMax: 0.5, optimalMin: 0.3, unit: "umol/L" },
1403
+ kind: "reference-interval",
1190
1404
  source: "schwedhelm-sdma-2011"
1191
1405
  },
1192
1406
  Selenium: {
1193
1407
  default: { max: 150, min: 70, optimalMax: 125, optimalMin: 85, unit: "\xB5g/L" },
1408
+ kind: "reference-interval",
1194
1409
  source: "tietz-7ed-2015"
1195
1410
  },
1196
1411
  SHBG: {
1197
1412
  default: { max: 54, min: 18, optimalMax: 50, optimalMin: 20, unit: "nmol/L" },
1413
+ kind: "reference-interval",
1198
1414
  source: "tietz-7ed-2015",
1199
1415
  variants: [
1200
1416
  {
@@ -1211,34 +1427,42 @@ var biomarkerRangeDefinitions = {
1211
1427
  },
1212
1428
  Sodium: {
1213
1429
  default: { max: 145, min: 136, optimalMax: 143, optimalMin: 138, unit: "mEq/L" },
1430
+ kind: "reference-interval",
1214
1431
  source: "tietz-7ed-2015"
1215
1432
  },
1216
1433
  SpecificGravity_Urine: {
1217
1434
  default: { max: 1.03, min: 1.005, optimalMax: 1.025, optimalMin: 1.01, unit: "SG" },
1435
+ kind: "reference-interval",
1218
1436
  source: "tietz-7ed-2015"
1219
1437
  },
1220
1438
  Stearic_Acid: {
1221
1439
  default: { max: 14, min: 8, optimalMax: 12, optimalMin: 10, unit: "%" },
1440
+ kind: "reference-interval",
1222
1441
  source: "tietz-7ed-2015"
1223
1442
  },
1224
1443
  T3Free: {
1225
1444
  default: { max: 4.2, min: 2.3, optimalMax: 3.8, optimalMin: 2.8, unit: "pg/mL" },
1445
+ kind: "reference-interval",
1226
1446
  source: "tietz-7ed-2015"
1227
1447
  },
1228
1448
  T3Reverse: {
1229
1449
  default: { max: 24, min: 10, optimalMax: 20, optimalMin: 12, unit: "ng/dL" },
1450
+ kind: "reference-interval",
1230
1451
  source: "tietz-7ed-2015"
1231
1452
  },
1232
1453
  T4Free: {
1233
1454
  default: { max: 1.8, min: 0.8, optimalMax: 1.5, optimalMin: 1, unit: "ng/dL" },
1455
+ kind: "reference-interval",
1234
1456
  source: "tietz-7ed-2015"
1235
1457
  },
1236
1458
  T4Total: {
1237
1459
  default: { max: 12, min: 4.5, optimalMax: 10, optimalMin: 6, unit: "ug/dL" },
1460
+ kind: "reference-interval",
1238
1461
  source: "tietz-7ed-2015"
1239
1462
  },
1240
1463
  Testosterone: {
1241
1464
  default: { max: 1e3, min: 300, optimalMax: 800, optimalMin: 500, unit: "ng/dL" },
1465
+ kind: "reference-interval",
1242
1466
  source: "tietz-7ed-2015",
1243
1467
  variants: [
1244
1468
  {
@@ -1261,12 +1485,14 @@ var biomarkerRangeDefinitions = {
1261
1485
  },
1262
1486
  TestosteroneBioavailable: {
1263
1487
  default: { max: 200, min: 50, optimalMax: 150, optimalMin: 80, unit: "ng/dL" },
1488
+ kind: "reference-interval",
1264
1489
  source: "tietz-7ed-2015"
1265
1490
  },
1266
1491
  // TestosteroneFree - using direct immunoassay ranges (Quest/LabCorp standard)
1267
1492
  // Previous values (9.3-26.5 pg/mL) were based on equilibrium dialysis method
1268
1493
  TestosteroneFree: {
1269
1494
  default: { max: 155, min: 35, optimalMax: 120, optimalMin: 50, unit: "pg/mL" },
1495
+ kind: "reference-interval",
1270
1496
  source: "tietz-7ed-2015",
1271
1497
  variants: [
1272
1498
  {
@@ -1289,22 +1515,27 @@ var biomarkerRangeDefinitions = {
1289
1515
  },
1290
1516
  TIBC: {
1291
1517
  default: { max: 370, min: 250, optimalMax: 350, optimalMin: 280, unit: "mcg/dL" },
1518
+ kind: "reference-interval",
1292
1519
  source: "tietz-7ed-2015"
1293
1520
  },
1294
1521
  TotalProtein: {
1295
1522
  default: { max: 8.3, min: 6, optimalMax: 7.8, optimalMin: 6.5, unit: "g/dL" },
1523
+ kind: "reference-interval",
1296
1524
  source: "tietz-7ed-2015"
1297
1525
  },
1298
1526
  Trans_Fat_Index: {
1299
1527
  default: { max: 1, min: 0, optimalMax: 0.5, optimalMin: 0, unit: "%" },
1528
+ kind: "reference-interval",
1300
1529
  source: "tietz-7ed-2015"
1301
1530
  },
1302
1531
  Transferrin: {
1303
1532
  default: { max: 360, min: 200, optimalMax: 340, optimalMin: 220, unit: "mg/dL" },
1533
+ kind: "reference-interval",
1304
1534
  source: "tietz-7ed-2015"
1305
1535
  },
1306
1536
  TransferrinSaturation: {
1307
1537
  default: { max: 50, min: 20, optimalMax: 45, optimalMin: 25, unit: "%" },
1538
+ kind: "reference-interval",
1308
1539
  source: "tietz-7ed-2015",
1309
1540
  variants: [
1310
1541
  {
@@ -1332,16 +1563,19 @@ var biomarkerRangeDefinitions = {
1332
1563
  unit: "mg/dL"
1333
1564
  },
1334
1565
  direction: "lower-better",
1566
+ kind: "decision-threshold",
1335
1567
  source: "sbc-lipids-2025"
1336
1568
  },
1337
1569
  // TroponinI: 0.04 ng/mL = percentil 99 (ensaio Siemens TnI-Ultra)
1338
1570
  TroponinI: {
1339
1571
  default: { max: 0.04, min: 0, optimalMax: 0.02, optimalMin: 0, unit: "ng/mL" },
1572
+ kind: "reference-interval",
1340
1573
  source: "keller-tni-2013"
1341
1574
  },
1342
1575
  // TroponinT: 14 ng/L = percentil 99 hs-cTnT (ensaio Roche Elecsys 5ª geração)
1343
1576
  TroponinT: {
1344
1577
  default: { max: 14, min: 0, optimalMax: 10, optimalMin: 0, unit: "ng/L" },
1578
+ kind: "reference-interval",
1345
1579
  source: "giannitsis-hstnt-2010"
1346
1580
  },
1347
1581
  // TSH — 0.4–4.0 é a faixa de referência adulta geral. O alvo 2.5 µIU/mL é
@@ -1351,6 +1585,7 @@ var biomarkerRangeDefinitions = {
1351
1585
  // expandido (tolerância fisiológica do eixo em idosos, SBEM 2013).
1352
1586
  TSH: {
1353
1587
  default: { max: 4, min: 0.4, optimalMax: 3, optimalMin: 1, unit: "uIU/mL" },
1588
+ kind: "reference-interval",
1354
1589
  source: "sbem-thyroid-2013",
1355
1590
  variants: [
1356
1591
  // Variantes gestacionais (ATA 2017 / SBEM): supressão fisiológica por hCG
@@ -1399,10 +1634,12 @@ var biomarkerRangeDefinitions = {
1399
1634
  // deve ser revisto em biomarkers.ts — ver issue #41.
1400
1635
  Urea: {
1401
1636
  default: { max: 50, min: 15, optimalMax: 40, optimalMin: 20, unit: "mg/dL" },
1637
+ kind: "reference-interval",
1402
1638
  source: "tietz-7ed-2015"
1403
1639
  },
1404
1640
  UricAcid: {
1405
1641
  default: { max: 7, min: 2.5, optimalMax: 5.5, optimalMin: 3, unit: "mg/dL" },
1642
+ kind: "reference-interval",
1406
1643
  source: "tietz-7ed-2015",
1407
1644
  variants: [
1408
1645
  {
@@ -1419,50 +1656,62 @@ var biomarkerRangeDefinitions = {
1419
1656
  },
1420
1657
  Urobilinogen_Urine: {
1421
1658
  default: { max: 1, min: 0.1, optimalMax: 1, optimalMin: 0.1, unit: "mg/dL" },
1659
+ kind: "reference-interval",
1422
1660
  source: "tietz-7ed-2015"
1423
1661
  },
1424
1662
  pH_Urine: {
1425
1663
  default: { max: 8, min: 4.5, optimalMax: 7, optimalMin: 5.5, unit: "pH" },
1664
+ kind: "reference-interval",
1426
1665
  source: "tietz-7ed-2015"
1427
1666
  },
1428
1667
  HyalineCasts_Urine: {
1429
1668
  default: { max: 2, min: 0, optimalMax: 1, optimalMin: 0, unit: "/LPF" },
1669
+ kind: "reference-interval",
1430
1670
  source: "tietz-7ed-2015"
1431
1671
  },
1432
1672
  RBC_Urine: {
1433
1673
  default: { max: 3, min: 0, optimalMax: 1, optimalMin: 0, unit: "/HPF" },
1674
+ kind: "reference-interval",
1434
1675
  source: "tietz-7ed-2015"
1435
1676
  },
1436
1677
  SquamousEpithelial_Urine: {
1437
1678
  default: { max: 15, min: 0, optimalMax: 5, optimalMin: 0, unit: "/HPF" },
1679
+ kind: "reference-interval",
1438
1680
  source: "tietz-7ed-2015"
1439
1681
  },
1440
1682
  Leukocytes_Urine: {
1441
1683
  default: { max: 5, min: 0, optimalMax: 2, optimalMin: 0, unit: "/HPF" },
1684
+ kind: "reference-interval",
1442
1685
  source: "tietz-7ed-2015"
1443
1686
  },
1444
1687
  Folate: {
1445
1688
  default: { max: 20, min: 3.9, optimalMax: 17, optimalMin: 5, unit: "ng/mL" },
1689
+ kind: "reference-interval",
1446
1690
  source: "tietz-7ed-2015"
1447
1691
  },
1448
1692
  VitaminA: {
1449
1693
  default: { max: 100, min: 20, optimalMax: 80, optimalMin: 30, unit: "mcg/dL" },
1694
+ kind: "reference-interval",
1450
1695
  source: "tietz-7ed-2015"
1451
1696
  },
1452
1697
  VitaminB1: {
1453
1698
  default: { max: 180, min: 70, optimalMax: 150, optimalMin: 80, unit: "nmol/L" },
1699
+ kind: "reference-interval",
1454
1700
  source: "tietz-7ed-2015"
1455
1701
  },
1456
1702
  VitaminB12: {
1457
1703
  default: { max: 900, min: 200, optimalMax: 800, optimalMin: 400, unit: "pg/mL" },
1704
+ kind: "reference-interval",
1458
1705
  source: "tietz-7ed-2015"
1459
1706
  },
1460
1707
  VitaminB6: {
1461
1708
  default: { max: 50, min: 5, optimalMax: 40, optimalMin: 10, unit: "ng/mL" },
1709
+ kind: "reference-interval",
1462
1710
  source: "tietz-7ed-2015"
1463
1711
  },
1464
1712
  VitaminC: {
1465
1713
  default: { max: 2, min: 0.4, optimalMax: 1.5, optimalMin: 0.6, unit: "mg/dL" },
1714
+ kind: "reference-interval",
1466
1715
  source: "tietz-7ed-2015"
1467
1716
  },
1468
1717
  // Vitamina D — posicionamento conjunto SBEM/SBPC-ML 2017:
@@ -1479,6 +1728,7 @@ var biomarkerRangeDefinitions = {
1479
1728
  // quando a modelagem de comorbidades chegar ao schema.
1480
1729
  VitaminD: {
1481
1730
  default: { max: 100, min: 20, optimalMax: 70, optimalMin: 40, unit: "ng/mL" },
1731
+ kind: "decision-threshold",
1482
1732
  source: "ferreira-vitd-2017",
1483
1733
  variants: [
1484
1734
  {
@@ -1490,10 +1740,12 @@ var biomarkerRangeDefinitions = {
1490
1740
  },
1491
1741
  VitaminD_1_25: {
1492
1742
  default: { max: 72, min: 18, optimalMax: 60, optimalMin: 25, unit: "pg/mL" },
1743
+ kind: "reference-interval",
1493
1744
  source: "tietz-7ed-2015"
1494
1745
  },
1495
1746
  VitaminE: {
1496
1747
  default: { max: 17, min: 5.5, optimalMax: 14, optimalMin: 7, unit: "mg/L" },
1748
+ kind: "reference-interval",
1497
1749
  source: "tietz-7ed-2015"
1498
1750
  },
1499
1751
  // VLDL — estimado clinicamente via TG/5 (método Friedewald). O corte de
@@ -1502,30 +1754,34 @@ var biomarkerRangeDefinitions = {
1502
1754
  // método de cálculo, mas a faixa de referência tem respaldo na diretriz
1503
1755
  // SBC 2025.
1504
1756
  VLDL: {
1505
- default: { max: 30, min: 2, optimalMax: 20, optimalMin: 5, unit: "mg/dL" },
1757
+ default: { max: 30, min: 2, minKind: "display", optimalMax: 20, optimalMin: 5, unit: "mg/dL" },
1758
+ kind: "decision-threshold",
1506
1759
  source: "sbc-lipids-2025"
1507
1760
  },
1508
1761
  WBC: {
1509
1762
  default: { max: 11, min: 4, optimalMax: 8, optimalMin: 5, unit: "K/uL" },
1763
+ kind: "reference-interval",
1510
1764
  source: "pns-hemograma-2019"
1511
1765
  },
1512
1766
  Zinc: {
1513
1767
  default: { max: 120, min: 60, optimalMax: 100, optimalMin: 70, unit: "mcg/dL" },
1768
+ kind: "reference-interval",
1514
1769
  source: "tietz-7ed-2015"
1515
1770
  },
1516
1771
  AndroidFatPct: {
1517
- default: { max: 35, min: 10, optimalMax: 25, optimalMin: 15, unit: "%" },
1772
+ default: { max: 35, min: 10, minKind: "display", optimalMax: 25, optimalMin: 15, unit: "%" },
1518
1773
  direction: "lower-better",
1774
+ kind: "population",
1519
1775
  source: "kelly-dxa-2009",
1520
1776
  variants: [
1521
1777
  {
1522
1778
  ageMin: 18,
1523
- range: { max: 30, min: 10, optimalMax: 22, optimalMin: 12, unit: "%" },
1779
+ range: { max: 30, min: 10, minKind: "display", optimalMax: 22, optimalMin: 12, unit: "%" },
1524
1780
  sex: "M"
1525
1781
  },
1526
1782
  {
1527
1783
  ageMin: 18,
1528
- range: { max: 42, min: 15, optimalMax: 32, optimalMin: 20, unit: "%" },
1784
+ range: { max: 42, min: 15, minKind: "display", optimalMax: 32, optimalMin: 20, unit: "%" },
1529
1785
  sex: "F"
1530
1786
  }
1531
1787
  ]
@@ -1576,6 +1832,7 @@ var biomarkerRangeDefinitions = {
1576
1832
  CalfCircumference: {
1577
1833
  default: { unit: "cm" },
1578
1834
  direction: "higher-better",
1835
+ kind: "decision-threshold",
1579
1836
  source: "ewgsop2-2019",
1580
1837
  // O corte não é específico por sexo na fonte; as duas variantes existem
1581
1838
  // porque `RangeVariant` exige o campo, e carregam o mesmo número.
@@ -1587,38 +1844,76 @@ var biomarkerRangeDefinitions = {
1587
1844
  WaistToHeightRatio: {
1588
1845
  default: { max: 0.5, unit: "" },
1589
1846
  direction: "lower-better",
1847
+ kind: "decision-threshold",
1590
1848
  source: "browning-ashwell-2010"
1591
1849
  },
1592
1850
  AndroidGynoidRatio: {
1593
- default: { max: 1.2, min: 0.5, optimalMax: 1, optimalMin: 0.6, unit: "" },
1851
+ default: { max: 1.2, min: 0.5, minKind: "display", optimalMax: 1, optimalMin: 0.6, unit: "" },
1594
1852
  direction: "lower-better",
1853
+ kind: "population",
1595
1854
  source: "kelly-dxa-2009",
1596
1855
  variants: [
1597
1856
  {
1598
1857
  ageMin: 18,
1599
- range: { max: 1.2, min: 0.6, optimalMax: 1, optimalMin: 0.7, unit: "" },
1858
+ range: {
1859
+ max: 1.2,
1860
+ min: 0.6,
1861
+ minKind: "display",
1862
+ optimalMax: 1,
1863
+ optimalMin: 0.7,
1864
+ unit: ""
1865
+ },
1600
1866
  sex: "M"
1601
1867
  },
1602
1868
  {
1603
1869
  ageMin: 18,
1604
- range: { max: 1, min: 0.4, optimalMax: 0.8, optimalMin: 0.5, unit: "" },
1870
+ range: {
1871
+ max: 1,
1872
+ min: 0.4,
1873
+ minKind: "display",
1874
+ optimalMax: 0.8,
1875
+ optimalMin: 0.5,
1876
+ unit: ""
1877
+ },
1605
1878
  sex: "F"
1606
1879
  }
1607
1880
  ]
1608
1881
  },
1609
1882
  BMC: {
1610
- default: { max: 3.5, min: 2, optimalMax: 3.2, optimalMin: 2.3, unit: "kg" },
1883
+ default: {
1884
+ max: 3.5,
1885
+ maxKind: "display",
1886
+ min: 2,
1887
+ optimalMax: 3.2,
1888
+ optimalMin: 2.3,
1889
+ unit: "kg"
1890
+ },
1611
1891
  direction: "higher-better",
1892
+ kind: "population",
1612
1893
  source: "kelly-dxa-2009",
1613
1894
  variants: [
1614
1895
  {
1615
1896
  ageMin: 18,
1616
- range: { max: 4, min: 2.5, optimalMax: 3.5, optimalMin: 2.8, unit: "kg" },
1897
+ range: {
1898
+ max: 4,
1899
+ maxKind: "display",
1900
+ min: 2.5,
1901
+ optimalMax: 3.5,
1902
+ optimalMin: 2.8,
1903
+ unit: "kg"
1904
+ },
1617
1905
  sex: "M"
1618
1906
  },
1619
1907
  {
1620
1908
  ageMin: 18,
1621
- range: { max: 3, min: 1.8, optimalMax: 2.7, optimalMin: 2, unit: "kg" },
1909
+ range: {
1910
+ max: 3,
1911
+ maxKind: "display",
1912
+ min: 1.8,
1913
+ optimalMax: 2.7,
1914
+ optimalMin: 2,
1915
+ unit: "kg"
1916
+ },
1622
1917
  sex: "F"
1623
1918
  }
1624
1919
  ]
@@ -1626,142 +1921,148 @@ var biomarkerRangeDefinitions = {
1626
1921
  // BodyFatPct — Age-bracketed ranges from Gallagher et al. Am J Clin Nutr 2000;72:694-701
1627
1922
  // (PMID: 10966886) and ACSM Guidelines for Exercise Testing, 11th Ed (2021)
1628
1923
  BodyFatPct: {
1629
- default: { max: 30, min: 10, optimalMax: 25, optimalMin: 15, unit: "%" },
1924
+ default: { max: 30, min: 10, minKind: "clinical", optimalMax: 25, optimalMin: 15, unit: "%" },
1630
1925
  direction: "lower-better",
1926
+ kind: "decision-threshold",
1631
1927
  source: "gallagher-bodyfat-2000",
1632
1928
  variants: [
1633
1929
  // Men — age brackets
1634
1930
  {
1635
1931
  ageMax: 25,
1636
1932
  ageMin: 18,
1637
- range: { max: 25, min: 5, optimalMax: 20, optimalMin: 10, unit: "%" },
1933
+ range: { max: 25, min: 5, minKind: "clinical", optimalMax: 20, optimalMin: 10, unit: "%" },
1638
1934
  sex: "M"
1639
1935
  },
1640
1936
  {
1641
1937
  ageMax: 35,
1642
1938
  ageMin: 26,
1643
- range: { max: 26, min: 5, optimalMax: 21, optimalMin: 11, unit: "%" },
1939
+ range: { max: 26, min: 5, minKind: "clinical", optimalMax: 21, optimalMin: 11, unit: "%" },
1644
1940
  sex: "M"
1645
1941
  },
1646
1942
  {
1647
1943
  ageMax: 45,
1648
1944
  ageMin: 36,
1649
- range: { max: 27, min: 5, optimalMax: 22, optimalMin: 12, unit: "%" },
1945
+ range: { max: 27, min: 5, minKind: "clinical", optimalMax: 22, optimalMin: 12, unit: "%" },
1650
1946
  sex: "M"
1651
1947
  },
1652
1948
  {
1653
1949
  ageMax: 55,
1654
1950
  ageMin: 46,
1655
- range: { max: 28, min: 5, optimalMax: 23, optimalMin: 13, unit: "%" },
1951
+ range: { max: 28, min: 5, minKind: "clinical", optimalMax: 23, optimalMin: 13, unit: "%" },
1656
1952
  sex: "M"
1657
1953
  },
1658
1954
  {
1659
1955
  ageMin: 56,
1660
- range: { max: 29, min: 5, optimalMax: 24, optimalMin: 14, unit: "%" },
1956
+ range: { max: 29, min: 5, minKind: "clinical", optimalMax: 24, optimalMin: 14, unit: "%" },
1661
1957
  sex: "M"
1662
1958
  },
1663
1959
  // Women — age brackets
1664
1960
  {
1665
1961
  ageMax: 25,
1666
1962
  ageMin: 18,
1667
- range: { max: 32, min: 13, optimalMax: 28, optimalMin: 18, unit: "%" },
1963
+ range: { max: 32, min: 13, minKind: "clinical", optimalMax: 28, optimalMin: 18, unit: "%" },
1668
1964
  sex: "F"
1669
1965
  },
1670
1966
  {
1671
1967
  ageMax: 35,
1672
1968
  ageMin: 26,
1673
- range: { max: 33, min: 13, optimalMax: 29, optimalMin: 18, unit: "%" },
1969
+ range: { max: 33, min: 13, minKind: "clinical", optimalMax: 29, optimalMin: 18, unit: "%" },
1674
1970
  sex: "F"
1675
1971
  },
1676
1972
  {
1677
1973
  ageMax: 45,
1678
1974
  ageMin: 36,
1679
- range: { max: 34, min: 13, optimalMax: 30, optimalMin: 19, unit: "%" },
1975
+ range: { max: 34, min: 13, minKind: "clinical", optimalMax: 30, optimalMin: 19, unit: "%" },
1680
1976
  sex: "F"
1681
1977
  },
1682
1978
  {
1683
1979
  ageMax: 55,
1684
1980
  ageMin: 46,
1685
- range: { max: 35, min: 13, optimalMax: 31, optimalMin: 20, unit: "%" },
1981
+ range: { max: 35, min: 13, minKind: "clinical", optimalMax: 31, optimalMin: 20, unit: "%" },
1686
1982
  sex: "F"
1687
1983
  },
1688
1984
  {
1689
1985
  ageMin: 56,
1690
- range: { max: 36, min: 13, optimalMax: 32, optimalMin: 20, unit: "%" },
1986
+ range: { max: 36, min: 13, minKind: "clinical", optimalMax: 32, optimalMin: 20, unit: "%" },
1691
1987
  sex: "F"
1692
1988
  }
1693
1989
  ]
1694
1990
  },
1695
1991
  FatFreeMass: {
1696
- default: { max: 80, min: 40, optimalMax: 70, optimalMin: 45, unit: "kg" },
1992
+ default: { max: 80, maxKind: "display", min: 40, optimalMax: 70, optimalMin: 45, unit: "kg" },
1697
1993
  direction: "higher-better",
1994
+ kind: "population",
1698
1995
  source: "kelly-dxa-2009",
1699
1996
  variants: [
1700
1997
  {
1701
1998
  ageMin: 18,
1702
- range: { max: 90, min: 50, optimalMax: 80, optimalMin: 55, unit: "kg" },
1999
+ range: { max: 90, maxKind: "display", min: 50, optimalMax: 80, optimalMin: 55, unit: "kg" },
1703
2000
  sex: "M"
1704
2001
  },
1705
2002
  {
1706
2003
  ageMin: 18,
1707
- range: { max: 60, min: 35, optimalMax: 52, optimalMin: 38, unit: "kg" },
2004
+ range: { max: 60, maxKind: "display", min: 35, optimalMax: 52, optimalMin: 38, unit: "kg" },
1708
2005
  sex: "F"
1709
2006
  }
1710
2007
  ]
1711
2008
  },
1712
2009
  FatMass: {
1713
- default: { max: 30, min: 5, optimalMax: 20, optimalMin: 8, unit: "kg" },
2010
+ default: { max: 30, min: 5, minKind: "clinical", optimalMax: 20, optimalMin: 8, unit: "kg" },
1714
2011
  direction: "lower-better",
2012
+ kind: "population",
1715
2013
  source: "kelly-dxa-2009",
1716
2014
  variants: [
1717
2015
  {
1718
2016
  ageMin: 18,
1719
- range: { max: 25, min: 5, optimalMax: 18, optimalMin: 7, unit: "kg" },
2017
+ range: { max: 25, min: 5, minKind: "clinical", optimalMax: 18, optimalMin: 7, unit: "kg" },
1720
2018
  sex: "M"
1721
2019
  },
1722
2020
  {
1723
2021
  ageMin: 18,
1724
- range: { max: 30, min: 8, optimalMax: 22, optimalMin: 10, unit: "kg" },
2022
+ range: { max: 30, min: 8, minKind: "clinical", optimalMax: 22, optimalMin: 10, unit: "kg" },
1725
2023
  sex: "F"
1726
2024
  }
1727
2025
  ]
1728
2026
  },
1729
2027
  GynoidFatPct: {
1730
- default: { max: 45, min: 15, optimalMax: 35, optimalMin: 20, unit: "%" },
2028
+ default: { max: 45, min: 15, minKind: "display", optimalMax: 35, optimalMin: 20, unit: "%" },
1731
2029
  direction: "lower-better",
2030
+ kind: "population",
1732
2031
  source: "kelly-dxa-2009",
1733
2032
  variants: [
1734
2033
  {
1735
2034
  ageMin: 18,
1736
- range: { max: 35, min: 12, optimalMax: 28, optimalMin: 15, unit: "%" },
2035
+ range: { max: 35, min: 12, minKind: "display", optimalMax: 28, optimalMin: 15, unit: "%" },
1737
2036
  sex: "M"
1738
2037
  },
1739
2038
  {
1740
2039
  ageMin: 18,
1741
- range: { max: 50, min: 20, optimalMax: 40, optimalMin: 25, unit: "%" },
2040
+ range: { max: 50, min: 20, minKind: "display", optimalMax: 40, optimalMin: 25, unit: "%" },
1742
2041
  sex: "F"
1743
2042
  }
1744
2043
  ]
1745
2044
  },
1746
2045
  LeanMass: {
1747
- default: { max: 75, min: 35, optimalMax: 65, optimalMin: 40, unit: "kg" },
2046
+ default: { max: 75, maxKind: "display", min: 35, optimalMax: 65, optimalMin: 40, unit: "kg" },
1748
2047
  direction: "higher-better",
2048
+ kind: "population",
1749
2049
  source: "kelly-dxa-2009",
1750
2050
  variants: [
1751
2051
  {
1752
2052
  ageMin: 18,
1753
- range: { max: 85, min: 45, optimalMax: 75, optimalMin: 50, unit: "kg" },
2053
+ range: { max: 85, maxKind: "display", min: 45, optimalMax: 75, optimalMin: 50, unit: "kg" },
1754
2054
  sex: "M"
1755
2055
  },
1756
2056
  {
1757
2057
  ageMin: 18,
1758
- range: { max: 55, min: 30, optimalMax: 48, optimalMin: 35, unit: "kg" },
2058
+ range: { max: 55, maxKind: "display", min: 30, optimalMax: 48, optimalMin: 35, unit: "kg" },
1759
2059
  sex: "F"
1760
2060
  }
1761
2061
  ]
1762
2062
  },
1763
2063
  TotalMass: {
1764
2064
  default: { max: 100, min: 50, optimalMax: 85, optimalMin: 55, unit: "kg" },
2065
+ kind: "population",
1765
2066
  source: "kelly-dxa-2009",
1766
2067
  variants: [
1767
2068
  {
@@ -1779,6 +2080,7 @@ var biomarkerRangeDefinitions = {
1779
2080
  VATMass: {
1780
2081
  default: { max: 1.5, min: 0, optimalMax: 0.8, optimalMin: 0, unit: "kg" },
1781
2082
  direction: "lower-better",
2083
+ kind: "population",
1782
2084
  source: "ofenheimer-vat-2020",
1783
2085
  variants: [
1784
2086
  {
@@ -1803,29 +2105,56 @@ var biomarkerRangeDefinitions = {
1803
2105
  warningMax: 1837
1804
2106
  },
1805
2107
  direction: "lower-better",
2108
+ kind: "decision-threshold",
1806
2109
  source: "ge-corescan"
1807
2110
  },
1808
2111
  BMD_Total: {
1809
- default: { max: 1.4, min: 0.9, optimalMax: 1.3, optimalMin: 1, unit: "g/cm\xB2" },
2112
+ default: {
2113
+ max: 1.4,
2114
+ maxKind: "display",
2115
+ min: 0.9,
2116
+ optimalMax: 1.3,
2117
+ optimalMin: 1,
2118
+ unit: "g/cm\xB2"
2119
+ },
1810
2120
  direction: "higher-better",
2121
+ kind: "decision-threshold",
1811
2122
  source: "who-osteoporosis-1994"
1812
2123
  },
1813
2124
  TScore_Total: {
1814
- default: { max: 4, min: -1, optimalMax: 2, optimalMin: -0.5, unit: "" },
2125
+ default: {
2126
+ max: 4,
2127
+ maxKind: "display",
2128
+ min: -1,
2129
+ optimalMax: 2,
2130
+ optimalMin: -0.5,
2131
+ unit: ""
2132
+ },
1815
2133
  direction: "higher-better",
2134
+ kind: "decision-threshold",
1816
2135
  source: "who-osteoporosis-1994"
1817
2136
  },
1818
2137
  ZScore_Total: {
1819
- default: { max: 2, min: -2, optimalMax: 1, optimalMin: -1, unit: "" },
2138
+ default: {
2139
+ max: 2,
2140
+ maxKind: "display",
2141
+ min: -2,
2142
+ optimalMax: 1,
2143
+ optimalMin: -1,
2144
+ unit: ""
2145
+ },
1820
2146
  direction: "higher-better",
2147
+ kind: "decision-threshold",
1821
2148
  source: "who-osteoporosis-1994"
1822
2149
  },
1823
2150
  Amylase: {
1824
2151
  default: { max: 100, min: 28, optimalMax: 90, optimalMin: 35, unit: "U/L" },
2152
+ kind: "reference-interval",
1825
2153
  source: "tietz-7ed-2015"
1826
2154
  },
1827
2155
  Creatinine_Urine: {
1828
2156
  default: { max: 300, min: 20, optimalMax: 250, optimalMin: 40, unit: "mg/dL" },
2157
+ kind: "reference-interval",
1829
2158
  source: "tietz-7ed-2015",
1830
2159
  variants: [
1831
2160
  {
@@ -1842,18 +2171,22 @@ var biomarkerRangeDefinitions = {
1842
2171
  },
1843
2172
  IgA: {
1844
2173
  default: { max: 400, min: 70, optimalMax: 350, optimalMin: 100, unit: "mg/dL" },
2174
+ kind: "reference-interval",
1845
2175
  source: "tietz-7ed-2015"
1846
2176
  },
1847
2177
  Lipase: {
1848
2178
  default: { max: 60, min: 0, optimalMax: 50, optimalMin: 10, unit: "U/L" },
2179
+ kind: "reference-interval",
1849
2180
  source: "tietz-7ed-2015"
1850
2181
  },
1851
2182
  Microalbumin_Urine: {
1852
2183
  default: { max: 30, min: 0, optimalMax: 20, optimalMin: 0, unit: "mg/L" },
2184
+ kind: "decision-threshold",
1853
2185
  source: "kdigo-ckd-2024"
1854
2186
  },
1855
2187
  PSA_Free: {
1856
2188
  default: { max: 1.5, min: 0, optimalMax: 1, optimalMin: 0, unit: "ng/mL" },
2189
+ kind: "reference-interval",
1857
2190
  source: "sturgeon-nacb-2008"
1858
2191
  },
1859
2192
  // Relação PSA livre/total — `higher-better`: razão maior = menor risco de
@@ -1864,13 +2197,23 @@ var biomarkerRangeDefinitions = {
1864
2197
  // piso do âmbar — o vermelho é estritamente abaixo de 10% (< 10%); 10%
1865
2198
  // pertence ao âmbar, conforme a faixa "10–15% moderado" da tabela.
1866
2199
  PSA_FreeRatio: {
1867
- default: { max: 100, min: 25, optimalMax: 100, optimalMin: 30, unit: "%", warningMin: 10 },
2200
+ default: {
2201
+ max: 100,
2202
+ maxKind: "display",
2203
+ min: 25,
2204
+ optimalMax: 100,
2205
+ optimalMin: 30,
2206
+ unit: "%",
2207
+ warningMin: 10
2208
+ },
1868
2209
  direction: "higher-better",
2210
+ kind: "decision-threshold",
1869
2211
  source: "sturgeon-nacb-2008"
1870
2212
  },
1871
2213
  // BMI - WHO classification: 18.5–24.9 normal, 25–29.9 overweight, ≥30 obese
1872
2214
  BMI: {
1873
2215
  default: { max: 30, min: 18.5, optimalMax: 24.9, optimalMin: 18.5, unit: "kg/m2" },
2216
+ kind: "decision-threshold",
1874
2217
  source: "who-obesity-2000"
1875
2218
  },
1876
2219
  // eAG — Estimated Average Glucose, derivada da HbA1c pela fórmula ADAG:
@@ -1900,22 +2243,34 @@ var biomarkerRangeDefinitions = {
1900
2243
  // max 154 = meta terapêutica do diabético, HbA1c 7 %), que classificava como
1901
2244
  // "Normal" valores já pré-diabéticos e diabéticos.
1902
2245
  eAG: {
1903
- default: { max: 117, min: 11, optimalMax: 105, optimalMin: 82, unit: "mg/dL", warningMax: 137 },
2246
+ default: {
2247
+ max: 117,
2248
+ min: 11,
2249
+ minKind: "display",
2250
+ optimalMax: 105,
2251
+ optimalMin: 82,
2252
+ unit: "mg/dL",
2253
+ warningMax: 137
2254
+ },
2255
+ kind: "decision-threshold",
1904
2256
  source: "sbd-diabetes-2024"
1905
2257
  },
1906
2258
  // INR - International Normalized Ratio (non-anticoagulated patients)
1907
2259
  INR: {
1908
2260
  default: { max: 1.2, min: 0.8, optimalMax: 1.1, optimalMin: 0.9, unit: "ratio" },
2261
+ kind: "reference-interval",
1909
2262
  source: "tietz-7ed-2015"
1910
2263
  },
1911
2264
  // Prothrombin Time
1912
2265
  ProthrombinTime: {
1913
2266
  default: { max: 13.5, min: 11, optimalMax: 13, optimalMin: 11, unit: "seconds" },
2267
+ kind: "reference-interval",
1914
2268
  source: "tietz-7ed-2015"
1915
2269
  },
1916
2270
  // DHT - Dihydrotestosterone (adult male reference; female values are much lower)
1917
2271
  DHT: {
1918
2272
  default: { max: 85, min: 30, optimalMax: 85, optimalMin: 30, unit: "ng/dL" },
2273
+ kind: "reference-interval",
1919
2274
  source: "tietz-7ed-2015",
1920
2275
  variants: [
1921
2276
  {
@@ -1934,36 +2289,48 @@ var biomarkerRangeDefinitions = {
1934
2289
  IgE_Total: {
1935
2290
  default: { max: 100, min: 0, optimalMax: 100, optimalMin: 0, unit: "IU/mL" },
1936
2291
  direction: "lower-better",
2292
+ kind: "reference-interval",
1937
2293
  source: "tietz-7ed-2015"
1938
2294
  },
1939
2295
  // IgG - Immunoglobulin G
1940
2296
  IgG: {
1941
2297
  default: { max: 1600, min: 700, optimalMax: 1600, optimalMin: 700, unit: "mg/dL" },
2298
+ kind: "reference-interval",
1942
2299
  source: "tietz-7ed-2015"
1943
2300
  },
1944
2301
  // IgE E1 Cat Dander - Class 0 (≤0.35 kU/L) = negative
1945
2302
  IgE_E1_CatDander: {
1946
2303
  default: { max: 0.35, min: 0, optimalMax: 0.35, optimalMin: 0, unit: "kU/L" },
1947
2304
  direction: "lower-better",
2305
+ kind: "decision-threshold",
1948
2306
  source: "tietz-7ed-2015"
1949
2307
  },
1950
2308
  // IgE GX1 Grasses - Class 0 (≤0.35 kU/L) = negative
1951
2309
  IgE_GX1_Grasses: {
1952
2310
  default: { max: 0.35, min: 0, optimalMax: 0.35, optimalMin: 0, unit: "kU/L" },
1953
2311
  direction: "lower-better",
2312
+ kind: "decision-threshold",
1954
2313
  source: "tietz-7ed-2015"
1955
2314
  }
1956
2315
  };
1957
2316
  var defaultReferenceRanges = Object.fromEntries(
1958
2317
  Object.entries(biomarkerRangeDefinitions).map(([code, def]) => [
1959
2318
  code,
1960
- def.source ? { ...def.default, source: def.source } : def.default
2319
+ {
2320
+ ...def.default,
2321
+ ...def.kind && { kind: def.kind },
2322
+ ...def.source && { source: def.source }
2323
+ }
1961
2324
  ])
1962
2325
  );
1963
2326
  function getReferenceRange(testCode, context) {
1964
2327
  const definition = biomarkerRangeDefinitions[testCode];
1965
2328
  if (!definition) return void 0;
1966
- const withSource = (range) => definition.source ? { ...range, source: definition.source } : range;
2329
+ const withSource = (range, kind = definition.kind) => ({
2330
+ ...range,
2331
+ ...kind && { kind },
2332
+ ...definition.source && { source: definition.source }
2333
+ });
1967
2334
  if (!context || !definition.variants || definition.variants.length === 0) {
1968
2335
  return withSource(definition.default);
1969
2336
  }
@@ -1987,13 +2354,28 @@ function getReferenceRange(testCode, context) {
1987
2354
  if (variant.ageMax !== void 0 && (age === void 0 || age > variant.ageMax)) {
1988
2355
  continue;
1989
2356
  }
1990
- return withSource(variant.range);
2357
+ return withSource(variant.range, variant.kind ?? definition.kind);
1991
2358
  }
1992
2359
  return withSource(definition.default);
1993
2360
  }
1994
2361
  function getRangeDirection(testCode) {
1995
2362
  return biomarkerRangeDefinitions[testCode]?.direction ?? "range";
1996
2363
  }
2364
+ function flagAgainstCatalogRange(testCode, value, context) {
2365
+ const range = getReferenceRange(testCode, context);
2366
+ if (!range) return "";
2367
+ if (range.max !== void 0 && range.maxKind !== "display" && value > range.max) return "H";
2368
+ if (range.min !== void 0 && range.minKind !== "display" && value < range.min) return "L";
2369
+ return "";
2370
+ }
2371
+ function referenceRangeMeaning(kind) {
2372
+ const system = "http://terminology.hl7.org/CodeSystem/referencerange-meaning";
2373
+ if (kind === "reference-interval") return { code: "normal", display: "Normal Range", system };
2374
+ if (kind === "decision-threshold") {
2375
+ return { code: "recommended", display: "Recommended Range", system };
2376
+ }
2377
+ return void 0;
2378
+ }
1997
2379
  function getFallbackReferenceRange(biomarkerCode) {
1998
2380
  const definition = biomarkerRangeDefinitions[biomarkerCode];
1999
2381
  if (!definition || definition.default.min === void 0 || definition.default.max === void 0) {
@@ -2035,7 +2417,9 @@ export {
2035
2417
  defaultReferenceRanges,
2036
2418
  getReferenceRange,
2037
2419
  getRangeDirection,
2420
+ flagAgainstCatalogRange,
2421
+ referenceRangeMeaning,
2038
2422
  getFallbackReferenceRange,
2039
2423
  applyFallbackReferenceRanges
2040
2424
  };
2041
- //# sourceMappingURL=chunk-WXCX5TJJ.js.map
2425
+ //# sourceMappingURL=chunk-O3FXUPW3.js.map