@precisa-saude/fhir 0.17.4 → 0.19.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 (35) hide show
  1. package/dist/biomarkers.cjs +2 -2
  2. package/dist/biomarkers.js +1 -1
  3. package/dist/{chunk-R6FI2RNB.cjs → chunk-6HKQY6VO.cjs} +6 -6
  4. package/dist/chunk-6HKQY6VO.cjs.map +1 -0
  5. package/dist/{chunk-NAUVJPLC.js → chunk-EXG2IU2O.js} +4 -4
  6. package/dist/chunk-EXG2IU2O.js.map +1 -0
  7. package/dist/{chunk-NP4YZFUI.cjs → chunk-J3QVVVVH.cjs} +3 -3
  8. package/dist/{chunk-NP4YZFUI.cjs.map → chunk-J3QVVVVH.cjs.map} +1 -1
  9. package/dist/{chunk-LPYXISLF.js → chunk-LCXTQE2B.js} +2 -2
  10. package/dist/{chunk-CBGEU6SG.cjs → chunk-MMO356YH.cjs} +13 -1
  11. package/dist/chunk-MMO356YH.cjs.map +1 -0
  12. package/dist/{chunk-7O6VUA2B.js → chunk-MTWOF55H.js} +287 -2
  13. package/dist/chunk-MTWOF55H.js.map +1 -0
  14. package/dist/{chunk-LR2OUVOA.js → chunk-XTEKGGYQ.js} +13 -1
  15. package/dist/{chunk-LR2OUVOA.js.map → chunk-XTEKGGYQ.js.map} +1 -1
  16. package/dist/{chunk-ONRVND6U.cjs → chunk-Z5VH5QGC.cjs} +287 -2
  17. package/dist/chunk-Z5VH5QGC.cjs.map +1 -0
  18. package/dist/cli.js +301 -4
  19. package/dist/converter.cjs +3 -3
  20. package/dist/converter.js +2 -2
  21. package/dist/importer.cjs +3 -3
  22. package/dist/importer.d.cts +13 -1
  23. package/dist/importer.d.ts +13 -1
  24. package/dist/importer.js +2 -2
  25. package/dist/index.cjs +6 -6
  26. package/dist/index.js +4 -4
  27. package/dist/reference-ranges.cjs +2 -2
  28. package/dist/reference-ranges.js +1 -1
  29. package/package.json +1 -1
  30. package/dist/chunk-7O6VUA2B.js.map +0 -1
  31. package/dist/chunk-CBGEU6SG.cjs.map +0 -1
  32. package/dist/chunk-NAUVJPLC.js.map +0 -1
  33. package/dist/chunk-ONRVND6U.cjs.map +0 -1
  34. package/dist/chunk-R6FI2RNB.cjs.map +0 -1
  35. /package/dist/{chunk-LPYXISLF.js.map → chunk-LCXTQE2B.js.map} +0 -0
package/dist/cli.js CHANGED
@@ -2038,10 +2038,20 @@ var BIOMARKER_DEFINITIONS = [
2038
2038
  },
2039
2039
  unit: "kg"
2040
2040
  },
2041
+ // Sem `loinc` de propósito. A entrada apontava para 73964-9, cujo nome
2042
+ // oficial é "Body muscle mass Calculated", e massa magra não é massa
2043
+ // muscular: em DEXA, massa magra é tudo que não é gordura nem mineral
2044
+ // ósseo, incluindo órgãos, água e tecido conjuntivo. Massa muscular é um
2045
+ // subconjunto dela.
2046
+ //
2047
+ // O campo sai em bundle FHIR, então a aproximação não ficava só aqui — um
2048
+ // consumidor externo leria massa muscular onde escrevemos massa magra. Não
2049
+ // há LOINC para massa magra (busca por "lean body mass" só devolve códigos
2050
+ // de urina ajustados por LBM), então o certo é não ter código, como já se
2051
+ // faz com FatFreeMass. Quem quer massa muscular usa MuscleMass, abaixo.
2041
2052
  {
2042
2053
  category: "composicao-corporal",
2043
2054
  code: "LeanMass",
2044
- loinc: "73964-9",
2045
2055
  names: {
2046
2056
  en: ["Lean Mass", "Lean Body Mass", "Lean Tissue Mass", "Total Lean Mass", "LBM"],
2047
2057
  pt: ["Massa Magra", "Massa Corporal Magra", "Tecido Magro", "Massa Magra Total"]
@@ -2210,6 +2220,281 @@ var BIOMARKER_DEFINITIONS = [
2210
2220
  },
2211
2221
  unit: "kg"
2212
2222
  },
2223
+ // ===========================================================================
2224
+ // Composição corporal por bioimpedância, adipometria e antropometria
2225
+ // ===========================================================================
2226
+ //
2227
+ // POLÍTICA DE `loinc` AUSENTE, e o que ela custa
2228
+ //
2229
+ // Várias entradas abaixo não têm `loinc`. Isso não é pendência esquecida: é
2230
+ // o resultado de procurar e não achar, e a decisão tem consequência que
2231
+ // vale enunciar uma vez.
2232
+ //
2233
+ // O que muda sem o código: a observação continua sendo exportada em FHIR e
2234
+ // continua aparecendo para o usuário, mas o `Observation.code` sai só com o
2235
+ // nosso código interno, sem identificador interoperável. Um consumidor
2236
+ // externo consegue ler o valor e a unidade, e não consegue mapear a medida
2237
+ // para o vocabulário dele sem acordo bilateral. Na prática: exibível
2238
+ // sempre, comparável entre sistemas só quando há LOINC.
2239
+ //
2240
+ // Por que ainda assim é o certo: código errado é pior que código ausente.
2241
+ // Ausente o consumidor sabe que precisa perguntar; errado ele integra com
2242
+ // confiança e erra em silêncio. Esta mesma PR corrige um caso desses, em
2243
+ // que `LeanMass` apontava para "Body muscle mass" e o IG publicava massa
2244
+ // muscular sob o rótulo de massa magra.
2245
+ //
2246
+ // Como preencher depois: quando a LOINC publicar o conceito, basta somar o
2247
+ // campo `loinc` — o código interno não muda, e as observações já gravadas
2248
+ // não precisam ser reescritas, porque a chave é o nosso código.
2249
+ //
2250
+ // Todos os códigos aqui foram conferidos na API pública da NLM (Clinical
2251
+ // Table Search Service), e a ausência só foi registrada depois de tentar
2252
+ // múltiplas formulações: "total body water" não devolve nada, "body water"
2253
+ // devolve os dois códigos abaixo.
2254
+ //
2255
+ // As 12 entradas sem código, e o motivo de cada uma:
2256
+ //
2257
+ // VisceralFatLevel índice de 1 a 20; 73707-2 é área, outra grandeza
2258
+ // ResidualMass conceito de fracionamento antropométrico, não LOINC
2259
+ // BasalMetabolicRate candidatos são índice ou RMR medido, ver nota local
2260
+ // ExtracellularWater "extracellular water" não devolve nada
2261
+ // IntracellularWater "intracellular water" não devolve nada
2262
+ // ECWToTBWRatio razão derivada, sem conceito próprio
2263
+ // WaistToHeightRatio "waist to height" não devolve nada
2264
+ // ConicityIndex índice derivado, sem conceito próprio
2265
+ // SkinfoldSubscapular LOINC só tem tríceps, coxa e cintura
2266
+ // SkinfoldSuprailiac idem
2267
+ // SkinfoldChest idem
2268
+ // SkinfoldMidaxillary idem
2269
+ // Bioimpedância (BIA)
2270
+ {
2271
+ category: "composicao-corporal",
2272
+ code: "TotalBodyWater",
2273
+ loinc: "101683-1",
2274
+ names: {
2275
+ en: ["Total Body Water", "Body Water", "TBW", "Total Water"],
2276
+ pt: ["\xC1gua Corporal Total", "\xC1gua Corporal", "ACT", "\xC1gua Total"]
2277
+ },
2278
+ unit: "L"
2279
+ },
2280
+ {
2281
+ category: "composicao-corporal",
2282
+ code: "BodyWaterPct",
2283
+ loinc: "101684-9",
2284
+ names: {
2285
+ en: ["Body Water Percentage", "Percentage of Body Water", "% Body Water", "Water %"],
2286
+ pt: ["Percentual de \xC1gua Corporal", "% \xC1gua Corporal", "\xC1gua Corporal %"]
2287
+ },
2288
+ unit: "%"
2289
+ },
2290
+ {
2291
+ category: "composicao-corporal",
2292
+ code: "MuscleMass",
2293
+ loinc: "73964-9",
2294
+ names: {
2295
+ en: ["Muscle Mass", "Skeletal Muscle Mass", "SMM", "Body Muscle Mass"],
2296
+ pt: [
2297
+ "Massa Muscular",
2298
+ "Massa Muscular Esquel\xE9tica",
2299
+ "MME",
2300
+ "Massa Muscular Corporal",
2301
+ "M\xFAsculo"
2302
+ ]
2303
+ },
2304
+ unit: "kg"
2305
+ },
2306
+ {
2307
+ category: "composicao-corporal",
2308
+ code: "PhaseAngle",
2309
+ loinc: "107160-4",
2310
+ names: {
2311
+ en: ["Phase Angle", "Whole Body Phase Angle", "PhA", "AnglePhase"],
2312
+ pt: ["\xC2ngulo de Fase", "\xC2ngulo de Fase Corporal"]
2313
+ },
2314
+ unit: "deg"
2315
+ },
2316
+ // O nível de gordura visceral do InBody e similares é um índice
2317
+ // adimensional de 1 a 20, e NÃO é o mesmo que VATMass ou VATVolume, que
2318
+ // vêm de DEXA em massa e volume. LOINC 73707-2 é "Visceral fat [Area]", em
2319
+ // área, então também não serve. Fica sem código, com unidade vazia, para
2320
+ // não ser confundido com nenhum dos três.
2321
+ {
2322
+ category: "composicao-corporal",
2323
+ code: "VisceralFatLevel",
2324
+ names: {
2325
+ en: ["Visceral Fat Level", "Visceral Fat Index", "VFL"],
2326
+ pt: ["N\xEDvel de Gordura Visceral", "\xCDndice de Gordura Visceral", "Gordura Visceral N\xEDvel"]
2327
+ },
2328
+ unit: ""
2329
+ },
2330
+ // Compartimentos de água. Sem LOINC: busca por "extracellular water" e
2331
+ // "intracellular water" não devolve nada, ao contrário de "body water",
2332
+ // que rendeu os dois códigos usados acima.
2333
+ {
2334
+ category: "composicao-corporal",
2335
+ code: "ExtracellularWater",
2336
+ names: {
2337
+ en: ["Extracellular Water", "ECW"],
2338
+ pt: ["\xC1gua Extracelular", "AEC"]
2339
+ },
2340
+ unit: "L"
2341
+ },
2342
+ {
2343
+ category: "composicao-corporal",
2344
+ code: "IntracellularWater",
2345
+ names: {
2346
+ en: ["Intracellular Water", "ICW"],
2347
+ pt: ["\xC1gua Intracelular", "AIC"]
2348
+ },
2349
+ unit: "L"
2350
+ },
2351
+ // Razão entre água extracelular e total. É o marcador de retenção hídrica
2352
+ // e de estado inflamatório que os aparelhos de bioimpedância reportam, e
2353
+ // vem adimensional.
2354
+ {
2355
+ category: "composicao-corporal",
2356
+ code: "ECWToTBWRatio",
2357
+ names: {
2358
+ en: ["ECW/TBW", "ECW_TBW", "ECW to TBW Ratio", "Extracellular Water Ratio"],
2359
+ pt: ["Rela\xE7\xE3o AEC/ACT", "Raz\xE3o \xC1gua Extracelular"]
2360
+ },
2361
+ unit: ""
2362
+ },
2363
+ {
2364
+ category: "composicao-corporal",
2365
+ code: "ResidualMass",
2366
+ names: {
2367
+ en: ["Residual Mass", "Residual Weight"],
2368
+ pt: ["Massa Residual", "Peso Residual"]
2369
+ },
2370
+ unit: "kg"
2371
+ },
2372
+ // Sem `loinc` até alguém decidir com a definição completa em mãos. Os
2373
+ // candidatos não servem como estão: 50042-1 é "Basal metabolic rate
2374
+ // index", um índice e não kcal/dia; 82278-3 é "Measured RMR", medido por
2375
+ // calorimetria indireta, enquanto o aparelho de bioimpedância *estima* a
2376
+ // partir da massa magra; 82286-6 "Predicted RMR" é o mais próximo, mas
2377
+ // ainda é RMR e não TMB. Colocar qualquer um deles repetiria o erro que
2378
+ // esta mesma PR corrige em LeanMass.
2379
+ {
2380
+ category: "composicao-corporal",
2381
+ code: "BasalMetabolicRate",
2382
+ names: {
2383
+ en: ["Basal Metabolic Rate", "BMR"],
2384
+ pt: ["Taxa Metab\xF3lica Basal", "TMB", "Metabolismo Basal", "Gasto Energ\xE9tico Basal"]
2385
+ },
2386
+ unit: "kcal/d"
2387
+ },
2388
+ // Antropometria
2389
+ {
2390
+ category: "composicao-corporal",
2391
+ code: "WaistCircumference",
2392
+ // 8280-0 é a medida em si. 56086-2, que parecia o óbvio pela busca, é
2393
+ // "Adult Waist Circumference Protocol", um protocolo PhenX e não um
2394
+ // resultado.
2395
+ loinc: "8280-0",
2396
+ names: {
2397
+ en: ["Waist Circumference", "Abdominal Circumference", "Waist"],
2398
+ pt: [
2399
+ "Circunfer\xEAncia de Cintura",
2400
+ "Circunfer\xEAncia Abdominal",
2401
+ "Per\xEDmetro Abdominal",
2402
+ "Cintura"
2403
+ ]
2404
+ },
2405
+ unit: "cm"
2406
+ },
2407
+ {
2408
+ category: "composicao-corporal",
2409
+ code: "WaistToHeightRatio",
2410
+ names: {
2411
+ en: ["Waist to Height Ratio", "Waist-to-Height Ratio", "WHtR"],
2412
+ pt: ["Raz\xE3o Cintura-Altura", "Rela\xE7\xE3o Cintura-Estatura", "RCEst"]
2413
+ },
2414
+ unit: ""
2415
+ },
2416
+ {
2417
+ category: "composicao-corporal",
2418
+ code: "ConicityIndex",
2419
+ names: {
2420
+ en: ["Conicity Index", "C Index"],
2421
+ pt: ["\xCDndice de Conicidade", "\xCDndice C"]
2422
+ },
2423
+ unit: ""
2424
+ },
2425
+ // Dobras cutâneas (adipometria)
2426
+ //
2427
+ // A LOINC tem apenas três sítios: tríceps, coxa e cintura. Os outros quatro
2428
+ // que os protocolos brasileiros medem ficam sem código, e é por ausência
2429
+ // confirmada, não por falta de busca. Entram individualmente porque o
2430
+ // protocolo de somatório varia (Pollock 3 ou 7 dobras, Faulkner, Guedes) e
2431
+ // guardar só a soma perderia o dado de origem.
2432
+ {
2433
+ category: "composicao-corporal",
2434
+ code: "SkinfoldTriceps",
2435
+ loinc: "8354-3",
2436
+ names: {
2437
+ en: ["Triceps Skinfold", "Tricipital Skinfold", "Skin Fold Thickness Triceps"],
2438
+ pt: ["Dobra Tricipital", "Dobra Cut\xE2nea Tricipital", "Tricipital", "DCT"]
2439
+ },
2440
+ unit: "mm"
2441
+ },
2442
+ {
2443
+ category: "composicao-corporal",
2444
+ code: "SkinfoldThigh",
2445
+ loinc: "8353-5",
2446
+ names: {
2447
+ en: ["Thigh Skinfold", "Skin Fold Thickness Thigh"],
2448
+ pt: ["Dobra da Coxa", "Dobra Cut\xE2nea Coxa", "Coxa"]
2449
+ },
2450
+ unit: "mm"
2451
+ },
2452
+ {
2453
+ category: "composicao-corporal",
2454
+ code: "SkinfoldAbdominal",
2455
+ loinc: "8355-0",
2456
+ names: {
2457
+ en: ["Abdominal Skinfold", "Waist Skinfold", "Skin Fold Thickness Waist"],
2458
+ pt: ["Dobra Abdominal", "Dobra Cut\xE2nea Abdominal", "Abdominal"]
2459
+ },
2460
+ unit: "mm"
2461
+ },
2462
+ {
2463
+ category: "composicao-corporal",
2464
+ code: "SkinfoldSubscapular",
2465
+ names: {
2466
+ en: ["Subscapular Skinfold"],
2467
+ pt: ["Dobra Subescapular", "Dobra Cut\xE2nea Subescapular", "Subescapular"]
2468
+ },
2469
+ unit: "mm"
2470
+ },
2471
+ {
2472
+ category: "composicao-corporal",
2473
+ code: "SkinfoldSuprailiac",
2474
+ names: {
2475
+ en: ["Suprailiac Skinfold", "Supra-iliac Skinfold"],
2476
+ pt: ["Dobra Supra-il\xEDaca", "Dobra Cut\xE2nea Supra-il\xEDaca", "Supra-il\xEDaca", "Suprailiaca"]
2477
+ },
2478
+ unit: "mm"
2479
+ },
2480
+ {
2481
+ category: "composicao-corporal",
2482
+ code: "SkinfoldChest",
2483
+ names: {
2484
+ en: ["Chest Skinfold", "Pectoral Skinfold"],
2485
+ pt: ["Dobra Peitoral", "Dobra Cut\xE2nea Peitoral", "Peitoral", "Dobra Tor\xE1cica"]
2486
+ },
2487
+ unit: "mm"
2488
+ },
2489
+ {
2490
+ category: "composicao-corporal",
2491
+ code: "SkinfoldMidaxillary",
2492
+ names: {
2493
+ en: ["Midaxillary Skinfold", "Mid-axillary Skinfold"],
2494
+ pt: ["Dobra Axilar M\xE9dia", "Dobra Cut\xE2nea Axilar M\xE9dia", "Axilar M\xE9dia"]
2495
+ },
2496
+ unit: "mm"
2497
+ },
2213
2498
  // Regional Body Composition (DEXA)
2214
2499
  // Note: No official LOINC codes exist for regional lean/fat mass measurements
2215
2500
  // Hidden from UI for now - may be shown in future regional breakdown view
@@ -3888,8 +4173,8 @@ function validateFHIRImportBundle(data) {
3888
4173
  }
3889
4174
 
3890
4175
  // src/importer.ts
3891
- var MAX_OBSERVATIONS = 1e3;
3892
- var MAX_FILE_SIZE = 5 * 1024 * 1024;
4176
+ var MAX_OBSERVATIONS = 5e3;
4177
+ var MAX_FILE_SIZE = 15 * 1024 * 1024;
3893
4178
  function extractLoincCode(observation) {
3894
4179
  if (!observation.code?.coding) return void 0;
3895
4180
  const loincCoding = observation.code.coding.find((c) => c.system === "http://loinc.org");
@@ -5643,6 +5928,18 @@ var biomarkerRangeDefinitions = {
5643
5928
  }
5644
5929
  ]
5645
5930
  },
5931
+ // Revisão sistemática de 78 estudos, catorze países, incluindo população
5932
+ // centro-americana: o limite médio ficou em 0,50 para homens e para
5933
+ // mulheres, e é o mesmo para os dois sexos, daí não haver variantes.
5934
+ //
5935
+ // Só `max`. O limite inferior não entra porque a revisão não estabelece
5936
+ // piso, e inventar um transformaria em alteração um valor que a fonte não
5937
+ // classifica.
5938
+ WaistToHeightRatio: {
5939
+ default: { max: 0.5, unit: "" },
5940
+ direction: "lower-better",
5941
+ source: "browning-ashwell-2010"
5942
+ },
5646
5943
  AndroidGynoidRatio: {
5647
5944
  default: { max: 1.2, min: 0.5, optimalMax: 1, optimalMin: 0.6, unit: "" },
5648
5945
  direction: "lower-better",
@@ -6192,7 +6489,7 @@ async function main() {
6192
6489
  strict: false
6193
6490
  });
6194
6491
  if (values.version) {
6195
- process.stdout.write(`${"0.17.4"}
6492
+ process.stdout.write(`${"0.19.0"}
6196
6493
  `);
6197
6494
  return;
6198
6495
  }
@@ -3,13 +3,13 @@
3
3
 
4
4
 
5
5
 
6
- var _chunkNP4YZFUIcjs = require('./chunk-NP4YZFUI.cjs');
7
- require('./chunk-ONRVND6U.cjs');
6
+ var _chunkJ3QVVVVHcjs = require('./chunk-J3QVVVVH.cjs');
7
+ require('./chunk-Z5VH5QGC.cjs');
8
8
  require('./chunk-MJ254F5K.cjs');
9
9
 
10
10
 
11
11
 
12
12
 
13
13
 
14
- exports.labObservationToFHIR = _chunkNP4YZFUIcjs.labObservationToFHIR; exports.labReportToFHIR = _chunkNP4YZFUIcjs.labReportToFHIR; exports.labResultToFHIRBundle = _chunkNP4YZFUIcjs.labResultToFHIRBundle; exports.userProfileToFHIR = _chunkNP4YZFUIcjs.userProfileToFHIR;
14
+ exports.labObservationToFHIR = _chunkJ3QVVVVHcjs.labObservationToFHIR; exports.labReportToFHIR = _chunkJ3QVVVVHcjs.labReportToFHIR; exports.labResultToFHIRBundle = _chunkJ3QVVVVHcjs.labResultToFHIRBundle; exports.userProfileToFHIR = _chunkJ3QVVVVHcjs.userProfileToFHIR;
15
15
  //# sourceMappingURL=converter.cjs.map
package/dist/converter.js CHANGED
@@ -3,8 +3,8 @@ import {
3
3
  labReportToFHIR,
4
4
  labResultToFHIRBundle,
5
5
  userProfileToFHIR
6
- } from "./chunk-LPYXISLF.js";
7
- import "./chunk-7O6VUA2B.js";
6
+ } from "./chunk-LCXTQE2B.js";
7
+ import "./chunk-MTWOF55H.js";
8
8
  import "./chunk-R4MUCMO3.js";
9
9
  export {
10
10
  labObservationToFHIR,
package/dist/importer.cjs CHANGED
@@ -4,8 +4,8 @@
4
4
 
5
5
 
6
6
 
7
- var _chunkR6FI2RNBcjs = require('./chunk-R6FI2RNB.cjs');
8
- require('./chunk-ONRVND6U.cjs');
7
+ var _chunk6HKQY6VOcjs = require('./chunk-6HKQY6VO.cjs');
8
+ require('./chunk-Z5VH5QGC.cjs');
9
9
  require('./chunk-3ILBFLVQ.cjs');
10
10
 
11
11
 
@@ -13,5 +13,5 @@ require('./chunk-3ILBFLVQ.cjs');
13
13
 
14
14
 
15
15
 
16
- exports.MAX_FILE_SIZE = _chunkR6FI2RNBcjs.MAX_FILE_SIZE; exports.MAX_OBSERVATIONS = _chunkR6FI2RNBcjs.MAX_OBSERVATIONS; exports.extractObservationsFromBundle = _chunkR6FI2RNBcjs.extractObservationsFromBundle; exports.mapFHIRObservationToInternal = _chunkR6FI2RNBcjs.mapFHIRObservationToInternal; exports.processImportBundle = _chunkR6FI2RNBcjs.processImportBundle;
16
+ exports.MAX_FILE_SIZE = _chunk6HKQY6VOcjs.MAX_FILE_SIZE; exports.MAX_OBSERVATIONS = _chunk6HKQY6VOcjs.MAX_OBSERVATIONS; exports.extractObservationsFromBundle = _chunk6HKQY6VOcjs.extractObservationsFromBundle; exports.mapFHIRObservationToInternal = _chunk6HKQY6VOcjs.mapFHIRObservationToInternal; exports.processImportBundle = _chunk6HKQY6VOcjs.processImportBundle;
17
17
  //# sourceMappingURL=importer.cjs.map
@@ -35,7 +35,19 @@ interface FHIRImportResult {
35
35
  skipped: SkippedEntry[];
36
36
  totalProcessed: number;
37
37
  }
38
- declare const MAX_OBSERVATIONS = 1000;
38
+ /**
39
+ * Limites de importação.
40
+ *
41
+ * Uma Observation exportada ocupa cerca de 1,25KB em JSON compacto e 2,75KB
42
+ * quando o arquivo vem indentado, medido sobre um histórico real de 998
43
+ * Observations em 61 laudos. Nesse tamanho, 5000 Observations dão 6,0MB
44
+ * compactos ou 13,1MB indentados, e por isso o teto de arquivo é 15MB: cobre
45
+ * as duas formas com folga.
46
+ *
47
+ * Na densidade desse mesmo histórico (16 Observations por laudo), 5000
48
+ * equivalem a cerca de 300 laudos.
49
+ */
50
+ declare const MAX_OBSERVATIONS = 5000;
39
51
  declare const MAX_FILE_SIZE: number;
40
52
  /**
41
53
  * Extract Observation resources from a FHIR Bundle
@@ -35,7 +35,19 @@ interface FHIRImportResult {
35
35
  skipped: SkippedEntry[];
36
36
  totalProcessed: number;
37
37
  }
38
- declare const MAX_OBSERVATIONS = 1000;
38
+ /**
39
+ * Limites de importação.
40
+ *
41
+ * Uma Observation exportada ocupa cerca de 1,25KB em JSON compacto e 2,75KB
42
+ * quando o arquivo vem indentado, medido sobre um histórico real de 998
43
+ * Observations em 61 laudos. Nesse tamanho, 5000 Observations dão 6,0MB
44
+ * compactos ou 13,1MB indentados, e por isso o teto de arquivo é 15MB: cobre
45
+ * as duas formas com folga.
46
+ *
47
+ * Na densidade desse mesmo histórico (16 Observations por laudo), 5000
48
+ * equivalem a cerca de 300 laudos.
49
+ */
50
+ declare const MAX_OBSERVATIONS = 5000;
39
51
  declare const MAX_FILE_SIZE: number;
40
52
  /**
41
53
  * Extract Observation resources from a FHIR Bundle
package/dist/importer.js CHANGED
@@ -4,8 +4,8 @@ import {
4
4
  extractObservationsFromBundle,
5
5
  mapFHIRObservationToInternal,
6
6
  processImportBundle
7
- } from "./chunk-NAUVJPLC.js";
8
- import "./chunk-7O6VUA2B.js";
7
+ } from "./chunk-EXG2IU2O.js";
8
+ import "./chunk-MTWOF55H.js";
9
9
  import "./chunk-N3ZCOLG2.js";
10
10
  export {
11
11
  MAX_FILE_SIZE,
package/dist/index.cjs CHANGED
@@ -3,14 +3,14 @@
3
3
 
4
4
 
5
5
 
6
- var _chunkNP4YZFUIcjs = require('./chunk-NP4YZFUI.cjs');
6
+ var _chunkJ3QVVVVHcjs = require('./chunk-J3QVVVVH.cjs');
7
7
 
8
8
 
9
9
 
10
10
 
11
11
 
12
12
 
13
- var _chunkR6FI2RNBcjs = require('./chunk-R6FI2RNB.cjs');
13
+ var _chunk6HKQY6VOcjs = require('./chunk-6HKQY6VO.cjs');
14
14
 
15
15
 
16
16
 
@@ -43,7 +43,7 @@ var _chunkR6FI2RNBcjs = require('./chunk-R6FI2RNB.cjs');
43
43
 
44
44
 
45
45
 
46
- var _chunkONRVND6Ucjs = require('./chunk-ONRVND6U.cjs');
46
+ var _chunkZ5VH5QGCcjs = require('./chunk-Z5VH5QGC.cjs');
47
47
 
48
48
 
49
49
 
@@ -51,7 +51,7 @@ var _chunkONRVND6Ucjs = require('./chunk-ONRVND6U.cjs');
51
51
 
52
52
 
53
53
 
54
- var _chunkCBGEU6SGcjs = require('./chunk-CBGEU6SG.cjs');
54
+ var _chunkMMO356YHcjs = require('./chunk-MMO356YH.cjs');
55
55
 
56
56
 
57
57
 
@@ -228,7 +228,7 @@ function interventionToFHIRObservation(intervention, patientId) {
228
228
  }
229
229
  function interventionsToFHIRBundle(interventions, userProfile) {
230
230
  const patientId = userProfile.userId;
231
- const fhirPatient = _chunkNP4YZFUIcjs.userProfileToFHIR.call(void 0, userProfile);
231
+ const fhirPatient = _chunkJ3QVVVVHcjs.userProfileToFHIR.call(void 0, userProfile);
232
232
  const entries = interventions.map((intervention) => {
233
233
  const isMedication = intervention.type === "medication" || intervention.type === "supplement";
234
234
  const resource = isMedication ? interventionToFHIRMedicationStatement(intervention, patientId) : interventionToFHIRObservation(intervention, patientId);
@@ -691,5 +691,5 @@ function cnsToFHIRIdentifier(cns) {
691
691
 
692
692
 
693
693
 
694
- exports.AGE_BRACKETS = AGE_BRACKETS; exports.BIOMARKER_DEFAULT_UNIT = _chunkMJ254F5Kcjs.BIOMARKER_DEFAULT_UNIT; exports.BIOMARKER_DEFINITIONS = _chunkONRVND6Ucjs.BIOMARKER_DEFINITIONS; exports.BIOMARKER_UNITS = _chunkMJ254F5Kcjs.BIOMARKER_UNITS; exports.BODY_FAT_ZONES = BODY_FAT_ZONES; exports.CAC_INDICATOR_CODES = _chunkONRVND6Ucjs.CAC_INDICATOR_CODES; exports.CATEGORY_GROUPS = CATEGORY_GROUPS; exports.CATEGORY_SCREENING_INTERVALS = CATEGORY_SCREENING_INTERVALS; exports.DEXA_CATEGORIES = _chunkONRVND6Ucjs.DEXA_CATEGORIES; exports.DEXA_INDICATOR_CODES = _chunkONRVND6Ucjs.DEXA_INDICATOR_CODES; exports.MAX_FILE_SIZE = _chunkR6FI2RNBcjs.MAX_FILE_SIZE; exports.MAX_OBSERVATIONS = _chunkR6FI2RNBcjs.MAX_OBSERVATIONS; exports.T_SCORE_ZONES = T_SCORE_ZONES; exports.UNIT_TO_UCUM = _chunkMJ254F5Kcjs.UNIT_TO_UCUM; exports.ZONE_DEFS = ZONE_DEFS; exports.applyFallbackReferenceRanges = _chunkCBGEU6SGcjs.applyFallbackReferenceRanges; exports.biomarkerRangeDefinitions = _chunkCBGEU6SGcjs.biomarkerRangeDefinitions; exports.calculateNextScreeningDate = calculateNextScreeningDate; exports.cnsToFHIRIdentifier = cnsToFHIRIdentifier; exports.codeToLoinc = _chunkONRVND6Ucjs.codeToLoinc; exports.convertUnit = _chunkMJ254F5Kcjs.convertUnit; exports.cpfToFHIRIdentifier = cpfToFHIRIdentifier; exports.defaultReferenceRanges = _chunkCBGEU6SGcjs.defaultReferenceRanges; exports.extractObservationsFromBundle = _chunkR6FI2RNBcjs.extractObservationsFromBundle; exports.filterVisibleBiomarkers = _chunkONRVND6Ucjs.filterVisibleBiomarkers; exports.findCodeByName = _chunkONRVND6Ucjs.findCodeByName; exports.formatCNS = formatCNS; exports.formatCPF = formatCPF; exports.generateCacFullReference = _chunkONRVND6Ucjs.generateCacFullReference; exports.generateDexaFullReference = _chunkONRVND6Ucjs.generateDexaFullReference; exports.generateFilteredLLMReference = _chunkONRVND6Ucjs.generateFilteredLLMReference; exports.generateLLMReference = _chunkONRVND6Ucjs.generateLLMReference; exports.getAllCodes = _chunkONRVND6Ucjs.getAllCodes; exports.getAllDefinitions = _chunkONRVND6Ucjs.getAllDefinitions; exports.getAllLoincCodes = _chunkONRVND6Ucjs.getAllLoincCodes; exports.getAllSearchPatterns = _chunkONRVND6Ucjs.getAllSearchPatterns; exports.getBiomarkersByCategory = _chunkONRVND6Ucjs.getBiomarkersByCategory; exports.getBiomarkersForCategories = _chunkONRVND6Ucjs.getBiomarkersForCategories; exports.getCanonicalUnit = _chunkMJ254F5Kcjs.getCanonicalUnit; exports.getCategoriesByInterval = getCategoriesByInterval; exports.getCategoryGroup = getCategoryGroup; exports.getDaysUntilScreening = getDaysUntilScreening; exports.getDefaultUnit = _chunkMJ254F5Kcjs.getDefaultUnit; exports.getDefinitionByCode = _chunkONRVND6Ucjs.getDefinitionByCode; exports.getDefinitionByLoinc = _chunkONRVND6Ucjs.getDefinitionByLoinc; exports.getDefinitionsBySex = _chunkONRVND6Ucjs.getDefinitionsBySex; exports.getDueCategories = getDueCategories; exports.getFallbackReferenceRange = _chunkCBGEU6SGcjs.getFallbackReferenceRange; exports.getRangeDirection = _chunkCBGEU6SGcjs.getRangeDirection; exports.getReferenceRange = _chunkCBGEU6SGcjs.getReferenceRange; exports.getSIUnit = _chunkMJ254F5Kcjs.getSIUnit; exports.getScreeningInterval = getScreeningInterval; exports.getSexForCode = _chunkONRVND6Ucjs.getSexForCode; exports.getVisibleDefinitions = _chunkONRVND6Ucjs.getVisibleDefinitions; exports.interventionToFHIRMedicationStatement = interventionToFHIRMedicationStatement; exports.interventionToFHIRObservation = interventionToFHIRObservation; exports.interventionsToFHIRBundle = interventionsToFHIRBundle; exports.isBiomarkerVisible = _chunkONRVND6Ucjs.isBiomarkerVisible; exports.isCacDocument = _chunkONRVND6Ucjs.isCacDocument; exports.isDexaDocument = _chunkONRVND6Ucjs.isDexaDocument; exports.isScreeningDue = isScreeningDue; exports.isValidCode = _chunkONRVND6Ucjs.isValidCode; exports.isValidLoinc = _chunkONRVND6Ucjs.isValidLoinc; exports.labObservationToFHIR = _chunkNP4YZFUIcjs.labObservationToFHIR; exports.labReportToFHIR = _chunkNP4YZFUIcjs.labReportToFHIR; exports.labResultToFHIRBundle = _chunkNP4YZFUIcjs.labResultToFHIRBundle; exports.listMappedSubcategories = listMappedSubcategories; exports.loincToCode = _chunkONRVND6Ucjs.loincToCode; exports.mapFHIRObservationToInternal = _chunkR6FI2RNBcjs.mapFHIRObservationToInternal; exports.normalizeCode = _chunkONRVND6Ucjs.normalizeCode; exports.plural = plural; exports.pluralCount = pluralCount; exports.pluralPhrase = pluralPhrase; exports.pluralPhraseCount = pluralPhraseCount; exports.processImportBundle = _chunkR6FI2RNBcjs.processImportBundle; exports.toBiomarkerTests = _chunkONRVND6Ucjs.toBiomarkerTests; exports.unitToUCUM = _chunkMJ254F5Kcjs.unitToUCUM; exports.userProfileToFHIR = _chunkNP4YZFUIcjs.userProfileToFHIR; exports.validateCNS = validateCNS; exports.validateCPF = validateCPF; exports.validateFHIRDiagnosticReport = _chunk3ILBFLVQcjs.validateFHIRDiagnosticReport; exports.validateFHIRImportBundle = _chunk3ILBFLVQcjs.validateFHIRImportBundle; exports.validateFHIRObservation = _chunk3ILBFLVQcjs.validateFHIRObservation; exports.validateLoincNameMatch = _chunkONRVND6Ucjs.validateLoincNameMatch;
694
+ exports.AGE_BRACKETS = AGE_BRACKETS; exports.BIOMARKER_DEFAULT_UNIT = _chunkMJ254F5Kcjs.BIOMARKER_DEFAULT_UNIT; exports.BIOMARKER_DEFINITIONS = _chunkZ5VH5QGCcjs.BIOMARKER_DEFINITIONS; exports.BIOMARKER_UNITS = _chunkMJ254F5Kcjs.BIOMARKER_UNITS; exports.BODY_FAT_ZONES = BODY_FAT_ZONES; exports.CAC_INDICATOR_CODES = _chunkZ5VH5QGCcjs.CAC_INDICATOR_CODES; exports.CATEGORY_GROUPS = CATEGORY_GROUPS; exports.CATEGORY_SCREENING_INTERVALS = CATEGORY_SCREENING_INTERVALS; exports.DEXA_CATEGORIES = _chunkZ5VH5QGCcjs.DEXA_CATEGORIES; exports.DEXA_INDICATOR_CODES = _chunkZ5VH5QGCcjs.DEXA_INDICATOR_CODES; exports.MAX_FILE_SIZE = _chunk6HKQY6VOcjs.MAX_FILE_SIZE; exports.MAX_OBSERVATIONS = _chunk6HKQY6VOcjs.MAX_OBSERVATIONS; exports.T_SCORE_ZONES = T_SCORE_ZONES; exports.UNIT_TO_UCUM = _chunkMJ254F5Kcjs.UNIT_TO_UCUM; exports.ZONE_DEFS = ZONE_DEFS; exports.applyFallbackReferenceRanges = _chunkMMO356YHcjs.applyFallbackReferenceRanges; exports.biomarkerRangeDefinitions = _chunkMMO356YHcjs.biomarkerRangeDefinitions; exports.calculateNextScreeningDate = calculateNextScreeningDate; exports.cnsToFHIRIdentifier = cnsToFHIRIdentifier; exports.codeToLoinc = _chunkZ5VH5QGCcjs.codeToLoinc; exports.convertUnit = _chunkMJ254F5Kcjs.convertUnit; exports.cpfToFHIRIdentifier = cpfToFHIRIdentifier; exports.defaultReferenceRanges = _chunkMMO356YHcjs.defaultReferenceRanges; exports.extractObservationsFromBundle = _chunk6HKQY6VOcjs.extractObservationsFromBundle; exports.filterVisibleBiomarkers = _chunkZ5VH5QGCcjs.filterVisibleBiomarkers; exports.findCodeByName = _chunkZ5VH5QGCcjs.findCodeByName; exports.formatCNS = formatCNS; exports.formatCPF = formatCPF; exports.generateCacFullReference = _chunkZ5VH5QGCcjs.generateCacFullReference; exports.generateDexaFullReference = _chunkZ5VH5QGCcjs.generateDexaFullReference; exports.generateFilteredLLMReference = _chunkZ5VH5QGCcjs.generateFilteredLLMReference; exports.generateLLMReference = _chunkZ5VH5QGCcjs.generateLLMReference; exports.getAllCodes = _chunkZ5VH5QGCcjs.getAllCodes; exports.getAllDefinitions = _chunkZ5VH5QGCcjs.getAllDefinitions; exports.getAllLoincCodes = _chunkZ5VH5QGCcjs.getAllLoincCodes; exports.getAllSearchPatterns = _chunkZ5VH5QGCcjs.getAllSearchPatterns; exports.getBiomarkersByCategory = _chunkZ5VH5QGCcjs.getBiomarkersByCategory; exports.getBiomarkersForCategories = _chunkZ5VH5QGCcjs.getBiomarkersForCategories; exports.getCanonicalUnit = _chunkMJ254F5Kcjs.getCanonicalUnit; exports.getCategoriesByInterval = getCategoriesByInterval; exports.getCategoryGroup = getCategoryGroup; exports.getDaysUntilScreening = getDaysUntilScreening; exports.getDefaultUnit = _chunkMJ254F5Kcjs.getDefaultUnit; exports.getDefinitionByCode = _chunkZ5VH5QGCcjs.getDefinitionByCode; exports.getDefinitionByLoinc = _chunkZ5VH5QGCcjs.getDefinitionByLoinc; exports.getDefinitionsBySex = _chunkZ5VH5QGCcjs.getDefinitionsBySex; exports.getDueCategories = getDueCategories; exports.getFallbackReferenceRange = _chunkMMO356YHcjs.getFallbackReferenceRange; exports.getRangeDirection = _chunkMMO356YHcjs.getRangeDirection; exports.getReferenceRange = _chunkMMO356YHcjs.getReferenceRange; exports.getSIUnit = _chunkMJ254F5Kcjs.getSIUnit; exports.getScreeningInterval = getScreeningInterval; exports.getSexForCode = _chunkZ5VH5QGCcjs.getSexForCode; exports.getVisibleDefinitions = _chunkZ5VH5QGCcjs.getVisibleDefinitions; exports.interventionToFHIRMedicationStatement = interventionToFHIRMedicationStatement; exports.interventionToFHIRObservation = interventionToFHIRObservation; exports.interventionsToFHIRBundle = interventionsToFHIRBundle; exports.isBiomarkerVisible = _chunkZ5VH5QGCcjs.isBiomarkerVisible; exports.isCacDocument = _chunkZ5VH5QGCcjs.isCacDocument; exports.isDexaDocument = _chunkZ5VH5QGCcjs.isDexaDocument; exports.isScreeningDue = isScreeningDue; exports.isValidCode = _chunkZ5VH5QGCcjs.isValidCode; exports.isValidLoinc = _chunkZ5VH5QGCcjs.isValidLoinc; exports.labObservationToFHIR = _chunkJ3QVVVVHcjs.labObservationToFHIR; exports.labReportToFHIR = _chunkJ3QVVVVHcjs.labReportToFHIR; exports.labResultToFHIRBundle = _chunkJ3QVVVVHcjs.labResultToFHIRBundle; exports.listMappedSubcategories = listMappedSubcategories; exports.loincToCode = _chunkZ5VH5QGCcjs.loincToCode; exports.mapFHIRObservationToInternal = _chunk6HKQY6VOcjs.mapFHIRObservationToInternal; exports.normalizeCode = _chunkZ5VH5QGCcjs.normalizeCode; exports.plural = plural; exports.pluralCount = pluralCount; exports.pluralPhrase = pluralPhrase; exports.pluralPhraseCount = pluralPhraseCount; exports.processImportBundle = _chunk6HKQY6VOcjs.processImportBundle; exports.toBiomarkerTests = _chunkZ5VH5QGCcjs.toBiomarkerTests; exports.unitToUCUM = _chunkMJ254F5Kcjs.unitToUCUM; exports.userProfileToFHIR = _chunkJ3QVVVVHcjs.userProfileToFHIR; exports.validateCNS = validateCNS; exports.validateCPF = validateCPF; exports.validateFHIRDiagnosticReport = _chunk3ILBFLVQcjs.validateFHIRDiagnosticReport; exports.validateFHIRImportBundle = _chunk3ILBFLVQcjs.validateFHIRImportBundle; exports.validateFHIRObservation = _chunk3ILBFLVQcjs.validateFHIRObservation; exports.validateLoincNameMatch = _chunkZ5VH5QGCcjs.validateLoincNameMatch;
695
695
  //# sourceMappingURL=index.cjs.map
package/dist/index.js CHANGED
@@ -3,14 +3,14 @@ import {
3
3
  labReportToFHIR,
4
4
  labResultToFHIRBundle,
5
5
  userProfileToFHIR
6
- } from "./chunk-LPYXISLF.js";
6
+ } from "./chunk-LCXTQE2B.js";
7
7
  import {
8
8
  MAX_FILE_SIZE,
9
9
  MAX_OBSERVATIONS,
10
10
  extractObservationsFromBundle,
11
11
  mapFHIRObservationToInternal,
12
12
  processImportBundle
13
- } from "./chunk-NAUVJPLC.js";
13
+ } from "./chunk-EXG2IU2O.js";
14
14
  import {
15
15
  BIOMARKER_DEFINITIONS,
16
16
  CAC_INDICATOR_CODES,
@@ -43,7 +43,7 @@ import {
43
43
  normalizeCode,
44
44
  toBiomarkerTests,
45
45
  validateLoincNameMatch
46
- } from "./chunk-7O6VUA2B.js";
46
+ } from "./chunk-MTWOF55H.js";
47
47
  import {
48
48
  applyFallbackReferenceRanges,
49
49
  biomarkerRangeDefinitions,
@@ -51,7 +51,7 @@ import {
51
51
  getFallbackReferenceRange,
52
52
  getRangeDirection,
53
53
  getReferenceRange
54
- } from "./chunk-LR2OUVOA.js";
54
+ } from "./chunk-XTEKGGYQ.js";
55
55
  import {
56
56
  BIOMARKER_DEFAULT_UNIT,
57
57
  BIOMARKER_UNITS,
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
 
8
- var _chunkCBGEU6SGcjs = require('./chunk-CBGEU6SG.cjs');
8
+ var _chunkMMO356YHcjs = require('./chunk-MMO356YH.cjs');
9
9
  require('./chunk-MJ254F5K.cjs');
10
10
 
11
11
 
@@ -14,5 +14,5 @@ require('./chunk-MJ254F5K.cjs');
14
14
 
15
15
 
16
16
 
17
- exports.applyFallbackReferenceRanges = _chunkCBGEU6SGcjs.applyFallbackReferenceRanges; exports.biomarkerRangeDefinitions = _chunkCBGEU6SGcjs.biomarkerRangeDefinitions; exports.defaultReferenceRanges = _chunkCBGEU6SGcjs.defaultReferenceRanges; exports.getFallbackReferenceRange = _chunkCBGEU6SGcjs.getFallbackReferenceRange; exports.getRangeDirection = _chunkCBGEU6SGcjs.getRangeDirection; exports.getReferenceRange = _chunkCBGEU6SGcjs.getReferenceRange;
17
+ exports.applyFallbackReferenceRanges = _chunkMMO356YHcjs.applyFallbackReferenceRanges; exports.biomarkerRangeDefinitions = _chunkMMO356YHcjs.biomarkerRangeDefinitions; exports.defaultReferenceRanges = _chunkMMO356YHcjs.defaultReferenceRanges; exports.getFallbackReferenceRange = _chunkMMO356YHcjs.getFallbackReferenceRange; exports.getRangeDirection = _chunkMMO356YHcjs.getRangeDirection; exports.getReferenceRange = _chunkMMO356YHcjs.getReferenceRange;
18
18
  //# sourceMappingURL=reference-ranges.cjs.map
@@ -5,7 +5,7 @@ import {
5
5
  getFallbackReferenceRange,
6
6
  getRangeDirection,
7
7
  getReferenceRange
8
- } from "./chunk-LR2OUVOA.js";
8
+ } from "./chunk-XTEKGGYQ.js";
9
9
  import "./chunk-R4MUCMO3.js";
10
10
  export {
11
11
  applyFallbackReferenceRanges,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@precisa-saude/fhir",
3
- "version": "0.17.4",
3
+ "version": "0.19.0",
4
4
  "description": "Tipos FHIR R4, definições de biomarcadores, faixas de referência e conversores para o ecossistema de saúde brasileiro",
5
5
  "keywords": [
6
6
  "fhir",