@precisa-saude/fhir 0.37.0 → 0.37.1

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 (46) hide show
  1. package/dist/biomarkers.cjs +2 -2
  2. package/dist/biomarkers.js +1 -1
  3. package/dist/{chunk-WKTDMR5P.cjs → chunk-A2R65X4X.cjs} +9 -9
  4. package/dist/{chunk-WKTDMR5P.cjs.map → chunk-A2R65X4X.cjs.map} +1 -1
  5. package/dist/{chunk-F7CC4SV5.cjs → chunk-AJUDODBT.cjs} +10 -10
  6. package/dist/{chunk-F7CC4SV5.cjs.map → chunk-AJUDODBT.cjs.map} +1 -1
  7. package/dist/{chunk-JES2ZLH5.cjs → chunk-BDS6CM7F.cjs} +30 -9
  8. package/dist/chunk-BDS6CM7F.cjs.map +1 -0
  9. package/dist/{chunk-YI5WYZCP.js → chunk-CVMOQDM2.js} +2 -2
  10. package/dist/{chunk-LWSKO7UV.js → chunk-CZLX33DZ.js} +2 -2
  11. package/dist/{chunk-H64L6SOV.cjs → chunk-DE7NHXIR.cjs} +7 -9
  12. package/dist/chunk-DE7NHXIR.cjs.map +1 -0
  13. package/dist/{chunk-M6AYGD7P.js → chunk-I6FCFMAO.js} +4 -4
  14. package/dist/{chunk-RPGJK7ZM.cjs → chunk-LSC7NHFE.cjs} +3 -3
  15. package/dist/{chunk-RPGJK7ZM.cjs.map → chunk-LSC7NHFE.cjs.map} +1 -1
  16. package/dist/{chunk-7TDZX5HO.js → chunk-O7SK2YUU.js} +6 -8
  17. package/dist/chunk-O7SK2YUU.js.map +1 -0
  18. package/dist/{chunk-AQTHAZLK.cjs → chunk-RWUFK5AN.cjs} +3 -3
  19. package/dist/{chunk-AQTHAZLK.cjs.map → chunk-RWUFK5AN.cjs.map} +1 -1
  20. package/dist/{chunk-3UCY4HPJ.js → chunk-VOBVUACD.js} +3 -3
  21. package/dist/{chunk-KTV4H2QQ.js → chunk-YCJUGK6D.js} +30 -9
  22. package/dist/chunk-YCJUGK6D.js.map +1 -0
  23. package/dist/cli.js +56 -15
  24. package/dist/converter.cjs +5 -5
  25. package/dist/converter.js +4 -4
  26. package/dist/importer.cjs +5 -5
  27. package/dist/importer.js +4 -4
  28. package/dist/index.cjs +33 -11
  29. package/dist/index.cjs.map +1 -1
  30. package/dist/index.js +28 -6
  31. package/dist/index.js.map +1 -1
  32. package/dist/reference-ranges.cjs +4 -4
  33. package/dist/reference-ranges.js +3 -3
  34. package/dist/units.cjs +3 -3
  35. package/dist/units.js +2 -2
  36. package/dist/validators.cjs +4 -4
  37. package/dist/validators.js +3 -3
  38. package/package.json +1 -1
  39. package/dist/chunk-7TDZX5HO.js.map +0 -1
  40. package/dist/chunk-H64L6SOV.cjs.map +0 -1
  41. package/dist/chunk-JES2ZLH5.cjs.map +0 -1
  42. package/dist/chunk-KTV4H2QQ.js.map +0 -1
  43. /package/dist/{chunk-YI5WYZCP.js.map → chunk-CVMOQDM2.js.map} +0 -0
  44. /package/dist/{chunk-LWSKO7UV.js.map → chunk-CZLX33DZ.js.map} +0 -0
  45. /package/dist/{chunk-M6AYGD7P.js.map → chunk-I6FCFMAO.js.map} +0 -0
  46. /package/dist/{chunk-3UCY4HPJ.js.map → chunk-VOBVUACD.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/fhir-brasil/fhir-brasil/packages/core/dist/index.cjs","../src/category-groups.ts","../src/intervention-converter.ts","../src/dexa-zone-data.ts","../src/screening-intervals.ts","../src/i18n.ts","../src/identifiers.ts","../src/extension-urls.ts","../src/specimen-types.ts","../src/loinc-snapshot.generated.ts","../src/loinc-axes.ts","../src/mapping-decisions.ts","../src/mapping-sheet.ts","../src/specimen-gate.ts"],"names":[],"mappings":"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C;AACd,EAAA;AACE,EAAA;AACjC;AAW2C;AACS,EAAA;AACE,EAAA;AACL,EAAA;AACjD;AHqNoD;AACA;AI3TqB;AAAA;AAEvE,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AAAA;AAGA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AAAA;AAGA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACF;AAKiG;AAC7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,MAAA;AACR,IAAA;AACY,IAAA;AACC,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACF,QAAA;AACb,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AAET,MAAA;AACM,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACK,QAAA;AACb,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AAET,MAAA;AACM,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACC,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACC,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AAET,MAAA;AACM,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACF,QAAA;AACb,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACC,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACC,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AAEP,MAAA;AAEA,MAAA;AACM,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AAET,MAAA;AACM,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACK,QAAA;AACb,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACK,QAAA;AACb,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AAET,MAAA;AACM,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AAET,MAAA;AACM,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AAET,MAAA;AACM,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AAET,MAAA;AACM,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACF,EAAA;AACF;ATmoBoD;AACA;AUriGiB;AAClC,EAAA;AACnC;AVuiGoD;AACA;AWlhGF;AACD,EAAA;AACjD;AAEkE;AAChC,EAAA;AACL,EAAA;AACI,EAAA;AACT,EAAA;AACI,EAAA;AACiB,EAAA;AACF,EAAA;AACH,EAAA;AAChB,EAAA;AACC,EAAA;AACG,EAAA;AACG,EAAA;AACO,EAAA;AACV,EAAA;AACF,EAAA;AACD,EAAA;AACU,EAAA;AACE,EAAA;AACb,EAAA;AACN,EAAA;AACP,IAAA;AACkB,IAAA;AACd,IAAA;AACO,IAAA;AAChB,MAAA;AACS,QAAA;AAEL,QAAA;AACJ,MAAA;AACF,IAAA;AACF,EAAA;AAC2B,EAAA;AACI,EAAA;AACJ,EAAA;AACN,EAAA;AACZ,IAAA;AACkB,IAAA;AACd,IAAA;AACO,IAAA;AAChB,MAAA;AACS,QAAA;AACC,QAAA;AACV,MAAA;AACF,IAAA;AACF,EAAA;AACkC,EAAA;AACA,EAAA;AACE,EAAA;AACH,EAAA;AACH,EAAA;AACP,EAAA;AACA,EAAA;AACO,EAAA;AACG,EAAA;AACM,EAAA;AAClB,EAAA;AACA,EAAA;AACI,EAAA;AACD,EAAA;AACC,EAAA;AACE,EAAA;AACW,EAAA;AAChB,EAAA;AACK,EAAA;AACG,EAAA;AACU,EAAA;AACnB,EAAA;AACC,EAAA;AACQ,EAAA;AACH,EAAA;AACE,EAAA;AACM,EAAA;AACb,EAAA;AACO,EAAA;AACrB,EAAA;AACC,IAAA;AACkB,IAAA;AACd,IAAA;AACO,IAAA;AAChB,MAAA;AACS,QAAA;AACC,QAAA;AACV,MAAA;AACF,IAAA;AACM,IAAA;AACR,EAAA;AACwB,EAAA;AACF,EAAA;AACC,EAAA;AACC,EAAA;AACK,EAAA;AACI,EAAA;AACtB,EAAA;AACF,IAAA;AA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ACX,IAAA;AACF,IAAA;AACR,EAAA;AACqB,EAAA;AACX,IAAA;AACF,IAAA;AACR,EAAA;AACoB,EAAA;AACV,IAAA;AACF,IAAA;AACR,EAAA;AACc,EAAA;AACJ,IAAA;AACF,IAAA;AACR,EAAA;AACc,EAAA;AACJ,IAAA;AACF,IAAA;AACR,EAAA;AACe,EAAA;AACL,IAAA;AACF,IAAA;AACR,EAAA;AACS,EAAA;AACC,IAAA;AACF,IAAA;AACR,EAAA;AACW,EAAA;AACD,IAAA;AACF,IAAA;AACR,EAAA;AACkB,EAAA;AACR,IAAA;AACF,IAAA;AACR,EAAA;AACkD,EAAA;AACpC,EAAA;AACJ,IAAA;AACF,IAAA;AACR,EAAA;AACF;AAE8E;AAC/C,EAAA;AAC/B;AAE8E;AAC9C,EAAA;AAChC;AX4gGoD;AACA;AY7hH2B;AAEvC,EAAA;AACrB,EAAA;AAE2B,EAAA;AACM,EAAA;AACV,EAAA;AACO,EAAA;AACL,EAAA;AACA,IAAA;AACxB,IAAA;AACa,MAAA;AAClB,MAAA;AACH,MAAA;AAC+B,MAAA;AACtC,IAAA;AACH,EAAA;AACkD,EAAA;AAChC,IAAA;AACa,MAAA;AAClB,MAAA;AACH,MAAA;AACC,MAAA;AACR,IAAA;AACH,EAAA;AAEO,EAAA;AACL,IAAA;AACU,IAAA;AACV,IAAA;AAC2B,IAAA;AACL,IAAA;AACI,IAAA;AACU,IAAA;AACR,IAAA;AAClB,IAAA;AACZ,EAAA;AACF;AZ4hHoD;AACA;AallHM;AAChD,EAAA;AACA,EAAA;AACF,EAAA;AACC,EAAA;AACT;AAGyD;AAClD,EAAA;AACC,EAAA;AACA,EAAA;AACD,EAAA;AACA,EAAA;AACS,EAAA;AACT,EAAA;AACO,EAAA;AACI,EAAA;AACT,EAAA;AACM,EAAA;AACf;AAIa;AAQgE;AACzB,EAAA;AACpD;AAG6E;AACtC,EAAA;AACO,EAAA;AAC9C;AAiB2F;AAC9C,EAAA;AACF,EAAA;AACM,EAAA;AACxC,EAAA;AACC,IAAA;AACN,IAAA;AACU,IAAA;AACF,IAAA;AACgC,IAAA;AAC1C,EAAA;AACF;AbsjHoD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/fhir-brasil/fhir-brasil/packages/core/dist/index.cjs","sourcesContent":[null,"/**\n * Agrupamento de categorias clínicas em 10 grupos de alto nível.\n *\n * `BiomarkerDefinition.category` armazena 20 sub-categorias (granularidade\n * fina, ex: `tireoide`, `pancreas`). Este módulo agrupa essas\n * sub-categorias em 10 buckets clínicos amplos para apresentação no\n * site, na API pública e em material de divulgação.\n *\n * As sub-categorias permanecem como fonte da verdade nos dados; este\n * agrupamento é uma camada derivada.\n */\n\nexport type CategoryGroup =\n | 'cardiovascular'\n | 'metabolico-endocrino'\n | 'renal-eletrolitico'\n | 'hepatico-biliar'\n | 'hematologico'\n | 'imunologico'\n | 'oncologico'\n | 'nutricional-ambiental'\n | 'saude-reprodutiva'\n | 'composicao-envelhecimento';\n\nexport interface CategoryGroupInfo {\n /** Rótulo em inglês */\n en: string;\n /** Rótulo em português */\n pt: string;\n /** Slug (kebab-case, sem acento) */\n slug: CategoryGroup;\n /** Sub-categorias da fonte agrupadas neste bucket */\n subcategories: readonly string[];\n}\n\nexport const CATEGORY_GROUPS: Record<CategoryGroup, CategoryGroupInfo> = {\n cardiovascular: {\n en: 'Cardiovascular',\n pt: 'Cardiovascular',\n slug: 'cardiovascular',\n subcategories: ['coracao'],\n },\n 'composicao-envelhecimento': {\n en: 'Body Composition & Aging',\n pt: 'Composição Corporal e Envelhecimento',\n slug: 'composicao-envelhecimento',\n subcategories: ['composicao-corporal', 'densidade-ossea', 'estresse-envelhecimento'],\n },\n hematologico: {\n en: 'Hematology',\n pt: 'Hematológico',\n slug: 'hematologico',\n subcategories: ['sangue'],\n },\n 'hepatico-biliar': {\n en: 'Hepatic & Biliary',\n pt: 'Hepático e Biliar',\n slug: 'hepatico-biliar',\n subcategories: ['figado'],\n },\n imunologico: {\n en: 'Immunology',\n pt: 'Imunológico',\n slug: 'imunologico',\n subcategories: ['autoimunidade', 'regulacao-imunologica'],\n },\n 'metabolico-endocrino': {\n en: 'Metabolic & Endocrine',\n pt: 'Metabólico e Endócrino',\n slug: 'metabolico-endocrino',\n subcategories: ['metabolico', 'pancreas', 'hormonios', 'tireoide'],\n },\n 'nutricional-ambiental': {\n en: 'Nutrition & Environmental Exposure',\n pt: 'Nutricional e Exposição Ambiental',\n slug: 'nutricional-ambiental',\n subcategories: ['nutrientes', 'toxinas-ambientais'],\n },\n oncologico: {\n en: 'Oncology',\n pt: 'Oncológico',\n slug: 'oncologico',\n subcategories: ['marcadores-tumorais'],\n },\n 'renal-eletrolitico': {\n en: 'Renal & Electrolytes',\n pt: 'Renal e Eletrolítico',\n slug: 'renal-eletrolitico',\n subcategories: ['rins', 'urina', 'eletrolitos'],\n },\n 'saude-reprodutiva': {\n en: 'Reproductive Health',\n pt: 'Saúde Reprodutiva',\n slug: 'saude-reprodutiva',\n subcategories: ['saude-feminina', 'saude-masculina'],\n },\n};\n\nconst SUBCATEGORY_TO_GROUP = new Map<string, CategoryGroup>();\nfor (const group of Object.values(CATEGORY_GROUPS)) {\n for (const sub of group.subcategories) {\n SUBCATEGORY_TO_GROUP.set(sub, group.slug);\n }\n}\n\n/**\n * Resolve a sub-categoria (granular) para o grupo de alto nível (10 buckets).\n */\nexport function getCategoryGroup(subcategory: string): CategoryGroup | undefined {\n return SUBCATEGORY_TO_GROUP.get(subcategory);\n}\n\n/**\n * Lista todas as sub-categorias mapeadas em algum grupo.\n */\nexport function listMappedSubcategories(): readonly string[] {\n return [...SUBCATEGORY_TO_GROUP.keys()];\n}\n","/**\n * FHIR Intervention Converter\n *\n * Converts interventions (medication, supplement, diet, exercise, sleep)\n * to FHIR R4 MedicationStatement and Observation resources.\n */\n\nimport { type Addressable, entryFullUrl } from './bundle-urls';\nimport { userProfileToFHIR } from './converter';\nimport type { FHIRBundle, FHIRMedicationStatement, FHIRObservation } from './fhir-types';\nimport type { InterventionData, UserProfileData } from './types';\n\n/**\n * Determine MedicationStatement/Observation status based on end date\n */\nfunction interventionStatus(endDate?: string): 'active' | 'completed' {\n if (!endDate) return 'active';\n return new Date(endDate) < new Date() ? 'completed' : 'active';\n}\n\n/**\n * LOINC-like codes for lifestyle observation types\n */\nconst LIFESTYLE_CODES: Record<string, { code: string; display: string }> = {\n diet: { code: '81259-4', display: 'Diet' },\n exercise: { code: '73985-4', display: 'Exercise activity' },\n sleep: { code: '93832-4', display: 'Sleep duration' },\n};\n\n/**\n * Convert medication/supplement intervention to FHIR MedicationStatement\n */\nexport function interventionToFHIRMedicationStatement(\n intervention: InterventionData,\n patientId: string,\n): Addressable<FHIRMedicationStatement> {\n const statement: Addressable<FHIRMedicationStatement> = {\n category: {\n coding: [\n {\n code: 'patientspecified',\n display: 'Patient Specified',\n system: 'http://terminology.hl7.org/CodeSystem/medication-statement-category',\n },\n ],\n },\n dateAsserted: intervention.startDate,\n effectivePeriod: {\n end: intervention.endDate,\n start: intervention.startDate,\n },\n id: `intervention-${intervention.interventionId}`,\n medicationCodeableConcept: {\n text: intervention.name,\n },\n resourceType: 'MedicationStatement',\n status: interventionStatus(intervention.endDate),\n subject: {\n reference: `Patient/${patientId}`,\n },\n };\n\n if (intervention.notes) {\n statement.note = [{ text: intervention.notes }];\n }\n\n return statement;\n}\n\n/**\n * Convert diet/exercise/sleep intervention to FHIR Observation (social-history)\n */\nexport function interventionToFHIRObservation(\n intervention: InterventionData,\n patientId: string,\n): Addressable<FHIRObservation> {\n const lifestyleCode = LIFESTYLE_CODES[intervention.type];\n\n const observation: Addressable<FHIRObservation> = {\n category: [\n {\n coding: [\n {\n code: 'social-history',\n display: 'Social History',\n system: 'http://terminology.hl7.org/CodeSystem/observation-category',\n },\n ],\n },\n ],\n code: {\n coding: lifestyleCode\n ? [\n {\n code: lifestyleCode.code,\n display: lifestyleCode.display,\n system: 'http://loinc.org',\n },\n ]\n : [],\n text: intervention.name,\n },\n effectivePeriod: {\n end: intervention.endDate,\n start: intervention.startDate,\n },\n id: `intervention-${intervention.interventionId}`,\n resourceType: 'Observation',\n status: 'final',\n subject: {\n reference: `Patient/${patientId}`,\n },\n valueString: intervention.name,\n };\n\n if (intervention.notes) {\n observation.note = [{ text: intervention.notes }];\n }\n\n return observation;\n}\n\n/**\n * Convert all interventions to a FHIR Bundle\n */\nexport function interventionsToFHIRBundle(\n interventions: InterventionData[],\n userProfile: UserProfileData,\n): FHIRBundle {\n const patientId = userProfile.userId;\n const fhirPatient = userProfileToFHIR(userProfile);\n\n const entries = interventions.map((intervention) => {\n const isMedication = intervention.type === 'medication' || intervention.type === 'supplement';\n const resource = isMedication\n ? interventionToFHIRMedicationStatement(intervention, patientId)\n : interventionToFHIRObservation(intervention, patientId);\n\n return { fullUrl: entryFullUrl(resource), resource };\n });\n\n return {\n entry: [{ fullUrl: entryFullUrl(fhirPatient), resource: fhirPatient }, ...entries],\n resourceType: 'Bundle',\n type: 'collection',\n };\n}\n","/**\n * Structured zone data for DEXA body composition and bone density charts.\n *\n * Body fat zones derived from Gallagher et al. Am J Clin Nutr 2000;72:694-701 (PMID: 10966886)\n * and ACSM Guidelines for Exercise Testing, 11th Ed (2021).\n *\n * T-Score zones from WHO criteria (Kanis JA, Osteoporos Int, PMID: 7696835).\n */\n\nexport interface BodyFatZone {\n ageMax: number;\n ageMin: number;\n color: string;\n fatPctMax: number;\n fatPctMin: number;\n label: string;\n sex: 'F' | 'M';\n}\n\ninterface AgeBracket {\n ageMax: number;\n ageMin: number;\n label: string;\n}\n\nconst AGE_BRACKETS: AgeBracket[] = [\n { ageMax: 25, ageMin: 18, label: '18-25' },\n { ageMax: 35, ageMin: 26, label: '26-35' },\n { ageMax: 45, ageMin: 36, label: '36-45' },\n { ageMax: 55, ageMin: 46, label: '46-55' },\n { ageMax: 99, ageMin: 56, label: '56+' },\n];\n\n// Zone boundaries per age bracket for men: [essential, athletic, fitness, average, obese]\n// Each value is the upper bound of the zone\nconst MALE_ZONES: number[][] = [\n [5, 10, 20, 25, 40],\n [5, 11, 21, 26, 40],\n [5, 12, 22, 27, 40],\n [5, 13, 23, 28, 40],\n [5, 14, 24, 29, 40],\n];\n\nconst FEMALE_ZONES: number[][] = [\n [13, 18, 28, 32, 45],\n [13, 18, 29, 33, 45],\n [13, 19, 30, 34, 45],\n [13, 20, 31, 35, 45],\n [13, 20, 32, 36, 45],\n];\n\ninterface ZoneDefinition {\n color: string;\n label: string;\n}\n\nconst ZONE_DEFS: ZoneDefinition[] = [\n { color: '#3b82f6', label: 'Essencial' },\n { color: '#06b6d4', label: 'Atlético' },\n { color: '#22c55e', label: 'Fitness' },\n { color: '#eab308', label: 'Média' },\n { color: '#ef4444', label: 'Obeso' },\n];\n\nfunction buildZones(sex: 'F' | 'M', zoneData: number[][]): BodyFatZone[] {\n const zones: BodyFatZone[] = [];\n for (let i = 0; i < AGE_BRACKETS.length; i++) {\n const bracket = AGE_BRACKETS[i]!;\n const b = zoneData[i]!;\n zones.push({\n ...bracket,\n color: ZONE_DEFS[0]!.color,\n fatPctMax: b[0]!,\n fatPctMin: 0,\n label: ZONE_DEFS[0]!.label,\n sex,\n });\n zones.push({\n ...bracket,\n color: ZONE_DEFS[1]!.color,\n fatPctMax: b[1]!,\n fatPctMin: b[0]!,\n label: ZONE_DEFS[1]!.label,\n sex,\n });\n zones.push({\n ...bracket,\n color: ZONE_DEFS[2]!.color,\n fatPctMax: b[2]!,\n fatPctMin: b[1]!,\n label: ZONE_DEFS[2]!.label,\n sex,\n });\n zones.push({\n ...bracket,\n color: ZONE_DEFS[3]!.color,\n fatPctMax: b[3]!,\n fatPctMin: b[2]!,\n label: ZONE_DEFS[3]!.label,\n sex,\n });\n zones.push({\n ...bracket,\n color: ZONE_DEFS[4]!.color,\n fatPctMax: b[4]!,\n fatPctMin: b[3]!,\n label: ZONE_DEFS[4]!.label,\n sex,\n });\n }\n return zones;\n}\n\nexport const BODY_FAT_ZONES: BodyFatZone[] = [\n ...buildZones('M', MALE_ZONES),\n ...buildZones('F', FEMALE_ZONES),\n];\n\nexport { AGE_BRACKETS, ZONE_DEFS };\n\nexport interface TScoreZone {\n color: string;\n label: string;\n max: number;\n min: number;\n}\n\nexport const T_SCORE_ZONES: TScoreZone[] = [\n { color: '#22c55e', label: 'Normal', max: 4, min: -1.0 },\n { color: '#eab308', label: 'Osteopenia', max: -1.0, min: -2.5 },\n { color: '#ef4444', label: 'Osteoporose', max: -2.5, min: -5 },\n];\n","/**\n * Screening Intervals Configuration\n *\n * Defines recommended screening intervals for different biomarker categories\n * based on clinical guidelines and best practices.\n */\n\n/**\n * Screening interval in months\n */\nexport type ScreeningIntervalMonths = 3 | 6 | 12;\n\n/**\n * Biomarker category with its recommended screening interval\n */\nexport interface CategoryScreeningInterval {\n category: string;\n intervalMonths: ScreeningIntervalMonths;\n nameEn: string;\n namePt: string;\n}\n\n/**\n * Screening interval configuration for each category\n *\n * Categories are grouped by their recommended screening intervals:\n * - 3 months: Body composition and bone density (frequently changing metrics)\n * - 6 months: Metabolic panel and nutrients (moderate change rate)\n * - 12 months: Standard blood panels (stable long-term markers)\n */\nexport const CATEGORY_SCREENING_INTERVALS: CategoryScreeningInterval[] = [\n // 3-month intervals - Body composition (frequently changing)\n {\n category: 'composicao-corporal',\n intervalMonths: 3,\n nameEn: 'Body Composition',\n namePt: 'Composição Corporal',\n },\n {\n category: 'densidade-ossea',\n intervalMonths: 3,\n nameEn: 'Bone Density',\n namePt: 'Densidade Óssea',\n },\n\n // 6-month intervals - Metabolic and nutrients\n {\n category: 'metabolico',\n intervalMonths: 6,\n nameEn: 'Metabolic Panel',\n namePt: 'Painel Metabólico',\n },\n {\n category: 'nutrientes',\n intervalMonths: 6,\n nameEn: 'Nutrients',\n namePt: 'Nutrientes',\n },\n {\n category: 'pancreas',\n intervalMonths: 6,\n nameEn: 'Pancreas',\n namePt: 'Pâncreas',\n },\n\n // 12-month intervals - Standard blood panels\n {\n category: 'coracao',\n intervalMonths: 12,\n nameEn: 'Heart Health',\n namePt: 'Saúde Cardiovascular',\n },\n {\n category: 'tireoide',\n intervalMonths: 12,\n nameEn: 'Thyroid',\n namePt: 'Tireoide',\n },\n {\n category: 'sangue',\n intervalMonths: 12,\n nameEn: 'Blood Count',\n namePt: 'Hemograma',\n },\n {\n category: 'figado',\n intervalMonths: 12,\n nameEn: 'Liver Function',\n namePt: 'Função Hepática',\n },\n {\n category: 'rins',\n intervalMonths: 12,\n nameEn: 'Kidney Function',\n namePt: 'Função Renal',\n },\n {\n category: 'saude-feminina',\n intervalMonths: 12,\n nameEn: \"Women's Health\",\n namePt: 'Saúde Feminina',\n },\n {\n category: 'saude-masculina',\n intervalMonths: 12,\n nameEn: \"Men's Health\",\n namePt: 'Saúde Masculina',\n },\n {\n category: 'eletrolitos',\n intervalMonths: 12,\n nameEn: 'Electrolytes',\n namePt: 'Eletrólitos',\n },\n {\n category: 'estresse-envelhecimento',\n intervalMonths: 12,\n nameEn: 'Stress & Aging',\n namePt: 'Estresse e Envelhecimento',\n },\n {\n category: 'autoimunidade',\n intervalMonths: 12,\n nameEn: 'Autoimmunity',\n namePt: 'Autoimunidade',\n },\n {\n category: 'regulacao-imunologica',\n intervalMonths: 12,\n nameEn: 'Immune Regulation',\n namePt: 'Regulação Imunológica',\n },\n {\n category: 'toxinas-ambientais',\n intervalMonths: 12,\n nameEn: 'Environmental Toxins',\n namePt: 'Toxinas Ambientais',\n },\n {\n category: 'urina',\n intervalMonths: 12,\n nameEn: 'Urinalysis',\n namePt: 'Urina',\n },\n];\n\n/**\n * Get screening interval for a category\n */\nexport const getScreeningInterval = (category: string): CategoryScreeningInterval | undefined => {\n return CATEGORY_SCREENING_INTERVALS.find((c) => c.category === category);\n};\n\n/**\n * Get all categories with a specific interval\n */\nexport const getCategoriesByInterval = (\n intervalMonths: ScreeningIntervalMonths,\n): CategoryScreeningInterval[] => {\n return CATEGORY_SCREENING_INTERVALS.filter((c) => c.intervalMonths === intervalMonths);\n};\n\n/**\n * Calculate next screening date based on last test date and category\n */\nexport const calculateNextScreeningDate = (lastTestDate: Date, category: string): Date | null => {\n const interval = getScreeningInterval(category);\n if (!interval) return null;\n\n const nextDate = new Date(lastTestDate);\n nextDate.setMonth(nextDate.getMonth() + interval.intervalMonths);\n return nextDate;\n};\n\n/**\n * Check if a category is due for screening\n */\nexport const isScreeningDue = (\n lastTestDate: Date,\n category: string,\n referenceDate: Date = new Date(),\n): boolean => {\n const nextDate = calculateNextScreeningDate(lastTestDate, category);\n if (!nextDate) return false;\n return referenceDate >= nextDate;\n};\n\n/**\n * Get categories that are due for screening based on last test dates\n */\nexport const getDueCategories = (\n lastTestDates: Record<string, Date>,\n referenceDate: Date = new Date(),\n): CategoryScreeningInterval[] => {\n return CATEGORY_SCREENING_INTERVALS.filter((interval) => {\n const lastDate = lastTestDates[interval.category];\n if (!lastDate) return true; // Never tested = due\n return isScreeningDue(lastDate, interval.category, referenceDate);\n });\n};\n\n/**\n * Get days until next screening for a category\n */\nexport const getDaysUntilScreening = (\n lastTestDate: Date,\n category: string,\n referenceDate: Date = new Date(),\n): number | null => {\n const nextDate = calculateNextScreeningDate(lastTestDate, category);\n if (!nextDate) return null;\n\n const diffTime = nextDate.getTime() - referenceDate.getTime();\n return Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n};\n","/**\n * Portuguese pluralization utility using native Intl.PluralRules\n * Provides automatic pluralization for common words used in the app\n */\n\nconst pluralRules = new Intl.PluralRules('pt-BR');\n\n/**\n * Dictionary of Portuguese words with their plural forms\n * Key is the singular form, value is the plural form\n */\nconst dictionary: Record<string, string> = {\n // Common nouns\n arquivo: 'arquivos',\n biomarcador: 'biomarcadores',\n // Past participles (masculine)\n cadastrado: 'cadastrados',\n // Past participles (feminine)\n concluída: 'concluídas',\n confirmado: 'confirmados',\n convertido: 'convertidos',\n convidado: 'convidados',\n convite: 'convites',\n disponível: 'disponíveis',\n documento: 'documentos',\n enviado: 'enviados',\n exame: 'exames',\n excluída: 'excluídas',\n\n excluído: 'excluídos',\n // Verbs (3rd person)\n falhou: 'falharam',\n falta: 'faltam',\n ignorado: 'ignorados',\n item: 'itens',\n outro: 'outros',\n página: 'páginas',\n pendente: 'pendentes',\n registro: 'registros',\n removido: 'removidos',\n\n resultado: 'resultados',\n revisão: 'revisões',\n\n revogado: 'revogados',\n usuário: 'usuários',\n};\n\n/**\n * Get the plural form of a word from the dictionary\n * Falls back to adding 's' if word is not in dictionary\n */\nconst getPluralForm = (singular: string): string => {\n return dictionary[singular] ?? `${singular}s`;\n};\n\n/**\n * Returns the correct singular or plural form based on count\n * Uses Intl.PluralRules for proper locale-aware pluralization\n *\n * @example\n * plural(1, 'usuário') // 'usuário'\n * plural(3, 'usuário') // 'usuários'\n * plural(0, 'registro') // 'registros'\n */\nexport const plural = (count: number, word: string): string => {\n const rule = pluralRules.select(count);\n return rule === 'one' ? word : getPluralForm(word);\n};\n\n/**\n * Returns count with the correct singular or plural form\n *\n * @example\n * pluralCount(1, 'usuário') // '1 usuário'\n * pluralCount(3, 'usuário') // '3 usuários'\n */\nexport const pluralCount = (count: number, word: string): string => {\n return `${count} ${plural(count, word)}`;\n};\n\n/**\n * Returns the correct form for compound phrases (noun + adjective)\n * Both words are pluralized together\n *\n * @example\n * pluralPhrase(1, 'usuário', 'cadastrado') // 'usuário cadastrado'\n * pluralPhrase(3, 'usuário', 'cadastrado') // 'usuários cadastrados'\n * pluralPhrase(2, 'revisão', 'excluída') // 'revisões excluídas'\n */\nexport const pluralPhrase = (count: number, noun: string, adjective: string): string => {\n const rule = pluralRules.select(count);\n if (rule === 'one') {\n return `${noun} ${adjective}`;\n }\n return `${getPluralForm(noun)} ${getPluralForm(adjective)}`;\n};\n\n/**\n * Returns count with the correct compound phrase form\n *\n * @example\n * pluralPhraseCount(1, 'usuário', 'cadastrado') // '1 usuário cadastrado'\n * pluralPhraseCount(3, 'convite', 'enviado') // '3 convites enviados'\n */\nexport const pluralPhraseCount = (count: number, noun: string, adjective: string): string => {\n return `${count} ${pluralPhrase(count, noun, adjective)}`;\n};\n","/**\n * Helpers para identificadores brasileiros — CPF e CNS\n *\n * Validação, formatação e conversão para FHIR Identifier.\n * Algoritmos de validação baseados nas especificações oficiais:\n * - CPF: Receita Federal (mod-11, dois dígitos verificadores)\n * - CNS: Ministério da Saúde (mod-11 para definitivos, soma ponderada para provisórios)\n */\n\nimport type { FHIRIdentifier } from './fhir-types';\n\nconst CPF_SYSTEM = 'http://rnds.saude.gov.br/fhir/r4/NamingSystem/cpf';\nconst CNS_SYSTEM = 'http://rnds.saude.gov.br/fhir/r4/NamingSystem/cns';\n\n/**\n * Remove caracteres não-numéricos de uma string.\n */\nfunction digitsOnly(value: string): string {\n return value.replace(/\\D/g, '');\n}\n\n/**\n * Valida um CPF brasileiro usando algoritmo mod-11.\n *\n * @param cpf — CPF com ou sem formatação (ex: \"123.456.789-09\" ou \"12345678909\")\n * @returns true se o CPF é estruturalmente válido\n */\nexport function validateCPF(cpf: string): boolean {\n const digits = digitsOnly(cpf);\n\n if (digits.length !== 11) return false;\n\n // Rejeitar sequências de dígitos iguais (ex: 111.111.111-11)\n if (/^(\\d)\\1{10}$/.test(digits)) return false;\n\n // Primeiro dígito verificador\n let sum = 0;\n for (let i = 0; i < 9; i++) {\n sum += Number(digits[i]) * (10 - i);\n }\n let remainder = (sum * 10) % 11;\n if (remainder === 10) remainder = 0;\n if (remainder !== Number(digits[9])) return false;\n\n // Segundo dígito verificador\n sum = 0;\n for (let i = 0; i < 10; i++) {\n sum += Number(digits[i]) * (11 - i);\n }\n remainder = (sum * 10) % 11;\n if (remainder === 10) remainder = 0;\n if (remainder !== Number(digits[10])) return false;\n\n return true;\n}\n\n/**\n * Valida um CNS (Cartão Nacional de Saúde) brasileiro.\n *\n * CNS definitivos começam com 1 ou 2 (mod-11).\n * CNS provisórios começam com 7, 8 ou 9 (soma ponderada mod-11 = 0).\n *\n * @param cns — CNS com 15 dígitos\n * @returns true se o CNS é estruturalmente válido\n */\nexport function validateCNS(cns: string): boolean {\n const digits = digitsOnly(cns);\n\n if (digits.length !== 15) return false;\n\n const firstDigit = digits[0]!;\n\n // CNS deve começar com 1, 2 (definitivo) ou 7, 8, 9 (provisório)\n if (!['1', '2', '7', '8', '9'].includes(firstDigit)) return false;\n\n // Ambos os tipos usam soma ponderada mod-11 = 0\n let sum = 0;\n for (let i = 0; i < 15; i++) {\n sum += Number(digits[i]) * (15 - i);\n }\n return sum % 11 === 0;\n}\n\n/**\n * Formata um CPF como XXX.XXX.XXX-XX.\n *\n * @param cpf — CPF com 11 dígitos (com ou sem formatação)\n * @returns CPF formatado ou a string original se inválido\n */\nexport function formatCPF(cpf: string): string {\n const digits = digitsOnly(cpf);\n if (digits.length !== 11) return cpf;\n return `${digits.slice(0, 3)}.${digits.slice(3, 6)}.${digits.slice(6, 9)}-${digits.slice(9)}`;\n}\n\n/**\n * Formata um CNS como XXX XXXX XXXX XXXX.\n *\n * @param cns — CNS com 15 dígitos\n * @returns CNS formatado ou a string original se inválido\n */\nexport function formatCNS(cns: string): string {\n const digits = digitsOnly(cns);\n if (digits.length !== 15) return cns;\n return `${digits.slice(0, 3)} ${digits.slice(3, 7)} ${digits.slice(7, 11)} ${digits.slice(11)}`;\n}\n\n/**\n * Converte um CPF para um FHIR Identifier.\n *\n * @param cpf — CPF com 11 dígitos (com ou sem formatação)\n * @returns FHIR Identifier com sistema RNDS para CPF\n * @throws Error se o CPF for inválido\n */\nexport function cpfToFHIRIdentifier(cpf: string): FHIRIdentifier {\n if (!validateCPF(cpf)) {\n throw new Error('CPF inválido');\n }\n return {\n system: CPF_SYSTEM,\n use: 'official',\n value: digitsOnly(cpf),\n };\n}\n\n/**\n * Converte um CNS para um FHIR Identifier.\n *\n * @param cns — CNS com 15 dígitos\n * @returns FHIR Identifier com sistema RNDS para CNS\n * @throws Error se o CNS for inválido\n */\nexport function cnsToFHIRIdentifier(cns: string): FHIRIdentifier {\n if (!validateCNS(cns)) {\n throw new Error('CNS inválido');\n }\n return {\n system: CNS_SYSTEM,\n use: 'official',\n value: digitsOnly(cns),\n };\n}\n","/**\n * URLs das extensões do IG do fhir-brasil.\n *\n * Quem emite a extensão e quem a lê precisam concordar literalmente na URL: um\n * consumidor procura a extensão pelo `url`, e uma grafia divergente faz o dado\n * sumir sem erro. O teste confere cada uma contra o `Id:` do FSH em\n * `ig/input/fsh/extensions/`, então extensão nova no IG sem constante aqui, ou\n * o inverso, reprova.\n */\n\n/** Canonical do IG, como está no `sushi-config.yaml`. */\nexport const IG_CANONICAL = 'https://fhir-brasil.dev.br/ig';\n\nconst structureDefinition = (id: string): string => `${IG_CANONICAL}/StructureDefinition/${id}`;\n\n/**\n * Extensões do IG, pela URL.\n *\n * As que têm partes (`extractionSource`, `extractionConfidence`, `asPrinted`)\n * levam as partes em `extension[]` aninhado, cada uma com `url` relativo: o\n * nome da parte, como `page` ou `reading`. Ver o FSH de cada uma.\n */\nexport const FHIR_BRASIL_EXTENSIONS = {\n /** `Observation`: valor e faixa como impressos, quando a Observation traz outros. */\n asPrinted: structureDefinition('as-printed'),\n /** `Observation`: extraída de PDF via OCR. */\n derivedFromOCR: structureDefinition('derived-from-ocr'),\n /** `Observation`: confiança na leitura e na interpretação, de 0 a 1. */\n extractionConfidence: structureDefinition('extraction-confidence'),\n /** `Observation`: páginas, trecho citado e caixa do trecho no documento. */\n extractionSource: structureDefinition('extraction-source'),\n /** `DiagnosticReport`: lido da tabela de histórico de outro laudo. */\n reprintedIn: structureDefinition('reprinted-in'),\n /** `Observation`: lido do documento, mas substituído por outro valor do mesmo laudo. */\n superseded: structureDefinition('superseded'),\n /** `Observation`: unidade impressa ao lado de um resultado em texto. */\n textValueUnit: structureDefinition('text-value-unit'),\n} as const;\n","/**\n * Código do tipo de amostra a partir do material impresso no laudo.\n *\n * O perfil `BRAmostraBiologica-1.0` da RNDS vincula `Specimen.type` ao ValueSet\n * `BRTipoAmostra-1.0` com força `required`, exige `type.coding` (1..1) e proíbe\n * `type.text` (0..0). Um `Specimen` só com o texto do laudo não passa, e é o que\n * a extração produzia.\n *\n * O ValueSet tem 63 códigos, e quase todos são de vigilância respiratória vindos\n * do GAL: swab nasofaríngeo, lavado brônquico, fragmento de órgão. Para laudo de\n * rotina sobram seis, e esses seis cobrem o que um painel de sangue e urina\n * imprime.\n *\n * Não há código para fezes no ValueSet. Isso não afeta a extração, cujo catálogo\n * não tem nenhum biomarcador de origem fecal: um parasitológico não vira\n * `Observation`, então não chega a pedir `Specimen`.\n *\n * @see https://rnds-fhir.saude.gov.br/StructureDefinition-BRAmostraBiologica-1.0.html\n * @see https://rnds-fhir.saude.gov.br/ValueSet-BRTipoAmostra-1.0.html\n */\nimport type { FHIRCoding } from './fhir-types';\n\n/** ValueSet ao qual `Specimen.type` está vinculado no `BRAmostraBiologica`. */\nexport const BR_TIPO_AMOSTRA_VALUESET = 'https://rnds-fhir.saude.gov.br/ValueSet/BRTipoAmostra-1.0';\n\n/**\n * CodeSystem dos códigos que este módulo emite.\n *\n * O ValueSet também inclui o `BRTipoAmostraGAL`, que traz \"Sangue\" e \"Sangue com\n * EDTA\" soltos. Ficaram de fora porque a URL canônica daquele CodeSystem não foi\n * confirmada na fonte, e código de terminologia não se deduz de slug. Material\n * assim cai no caminho de não mapeado até alguém abrir o IG e confirmar.\n */\nexport const HL7_SPECIMEN_TYPE_SYSTEM = 'http://terminology.hl7.org/CodeSystem/v2-0487';\n\n/**\n * Os `display` são cópia literal do ValueSet, com a caixa dele.\n *\n * A chave é o texto já normalizado, e por enquanto é só o próprio display. Não\n * há sinônimo inventado aqui: a extração copia o material verbatim do laudo, e a\n * lista de variações que os laboratórios de fato imprimem ainda não foi medida\n * (a captura de material entrou em produção em 05/09/2026). Variação real\n * observada entra depois, com o laudo que a produziu.\n */\nconst CODINGS: ReadonlyArray<{ code: string; display: string }> = [\n { code: 'SER', display: 'Soro' },\n { code: 'PLAS', display: 'Plasma' },\n { code: 'WB', display: 'Sangue Total' },\n { code: 'UR', display: 'Urina' },\n { code: 'CSF', display: 'Líquor' },\n { code: 'SAL', display: 'Saliva' },\n];\n\n/**\n * Caixa, acento e espaço sobrando não distinguem material.\n *\n * Só isso. Não separa `camelCase` nem troca barra por espaço, ao contrário do\n * normalizador de nomes de biomarcador: \"Soro/Plasma\" impresso numa linha só é\n * ambíguo de verdade, e escolher um dos dois seria inferência. Sem casar, ele\n * segue o caminho do não mapeado.\n *\n * Os caracteres invisíveis saem antes, e a divisão entre as duas regras é a do\n * próprio Unicode: `\\p{Cf}` são os de formatação, que não ocupam espaço e por\n * isso são apagados, e `\\s` são os de espaço, que são colapsados. A camada de\n * texto de PDF emite os dois tipos, e um U+200B no meio de \"Soro\" derruba o\n * casamento sem deixar rastro na tela.\n *\n * Vale a categoria em vez da lista porque a lista nunca fecha. Enumerando, o\n * hífen opcional (U+00AD) tinha ficado de fora, e ele aparece justamente onde\n * um nome composto como \"Sangue Total\" quebra de linha.\n */\nconst INVISIBLE = /\\p{Cf}/gu;\n\nconst normalize = (text: string): string =>\n text\n .replace(INVISIBLE, '')\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n .replace(/\\s+/g, ' ')\n .trim();\n\nconst BY_NORMALIZED_TEXT = new Map(\n CODINGS.map(({ code, display }) => [\n normalize(display),\n { code, display, system: HL7_SPECIMEN_TYPE_SYSTEM } satisfies FHIRCoding,\n ]),\n);\n\n/**\n * Coding do ValueSet para o material impresso, ou `undefined` sem casar.\n *\n * `undefined` é resposta legítima e não erro: o laudo pode trazer um material\n * fora do ValueSet, ou uma grafia que ninguém viu ainda. Quem chama decide o que\n * fazer, e a decisão que não existe é preencher com um código aproximado.\n */\nexport const specimenTypeCoding = (text: string): FHIRCoding | undefined =>\n BY_NORMALIZED_TEXT.get(normalize(text));\n","// Gerado por scripts/generate-loinc-snapshot-module.ts a partir de\n// scripts/loinc-snapshot.json. Não editar à mão: rode o gerador.\nimport type { LoincSnapshot } from './loinc-axes';\n\nexport const LOINC_SNAPSHOT: LoincSnapshot = {\n _checkedAt: '2026-10-06',\n _loincVersion: '2.83',\n _notice:\n 'This material contains content from LOINC (http://loinc.org). LOINC is copyright © Regenstrief Institute, Inc. and the Logical Observation Identifiers Names and Codes (LOINC) Committee and is available at no cost under the license at http://loinc.org/license. LOINC® is a registered United States trademark of Regenstrief Institute, Inc.',\n codes: {\n '101683-1': {\n component: 'Body water',\n display: 'Body water mass',\n method: null,\n property: 'Mass',\n scale: 'Qn',\n status: 'ACTIVE',\n system: '^Patient',\n time: 'Pt',\n },\n '101684-9': {\n component: 'Body water',\n display: 'Percentage of body water',\n method: 'Measured',\n property: 'MFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: '^Patient',\n time: 'Pt',\n },\n '10331-7': {\n component: 'Rh',\n display: 'Rh [Type] in Blood',\n method: null,\n property: 'Type',\n scale: 'Nom',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '10334-1': {\n component: 'Cancer Ag 125',\n display: 'Cancer Ag 125 [Units/volume] in Serum or Plasma',\n groups: {\n 'LG108-7': 'Cancer Ag 125|ACnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '10501-5': {\n component: 'Lutropin',\n display: 'Lutropin [Units/volume] in Serum or Plasma',\n groups: {\n 'LG151-7': 'Lutropin|ACnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '107112-5': {\n component: 'Calf circumference',\n display: 'Calf circumference',\n method: null,\n property: 'Len',\n scale: 'Qn',\n status: 'ACTIVE',\n system: '^Patient',\n time: 'Pt',\n },\n '107160-4': {\n component: 'Phase angle Xc/R',\n display: 'Phase angle Xc/R [Ratio] Bioelectrical impedance analysis',\n method: 'BIA',\n property: 'Ratio',\n scale: 'Qn',\n status: 'ACTIVE',\n system: '^Patient',\n time: 'Pt',\n },\n '10835-7': {\n component: 'Lipoprotein (little a)',\n display: 'Lipoprotein a [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG45404-7': 'Lipoprotein (little a)|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '10886-0': {\n component: 'Prostate specific Ag.free',\n display: 'Prostate Specific Ag Free [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG46508-4': 'Prostate specific Ag.free|Pt|Ser/Plas',\n 'LG474-3': 'Prostate specific Ag.free|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '11277-1': {\n component: 'Epithelial cells.squamous',\n display:\n 'Epithelial cells.squamous [#/area] in Urine sediment by Microscopy high power field',\n groups: {\n 'LG40856-3': 'Epithelial cells.squamous|Urine/Urine sed',\n },\n method: 'Microscopy.light.HPF',\n property: 'Naric',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Urine sed',\n time: 'Pt',\n },\n '11572-5': {\n component: 'Rheumatoid factor',\n display: 'Rheumatoid factor [Units/volume] in Serum or Plasma',\n groups: {\n 'LG357-0': 'Rheumatoid factor|ACnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '12841-3': {\n component: 'Prostate specific Ag.free/Prostate specific Ag.total',\n display: 'Prostate Specific Ag Free/Prostate specific Ag.total in Serum or Plasma',\n groups: {\n 'LG2277-4': 'Prostate specific Ag.free/Prostate specific Ag.total|MFr|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '13457-7': {\n component: 'Cholesterol.in LDL',\n display: 'Cholesterol in LDL [Mass/volume] in Serum or Plasma by calculation',\n groups: {\n 'LG43020-3': 'Cholesterol.in LDL|Pt|Ser/Plas|Calculated',\n },\n method: 'Calculated',\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '13458-5': {\n component: 'Cholesterol.in VLDL',\n display: 'Cholesterol in VLDL [Mass/volume] in Serum or Plasma by calculation',\n groups: {\n 'LG43739-8': 'Cholesterol.in VLDL|Pt|Ser/Plas|Calculated',\n },\n method: 'Calculated',\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '13945-1': {\n component: 'Erythrocytes',\n display: 'Erythrocytes [#/area] in Urine sediment by Microscopy high power field',\n groups: {\n 'LG40868-8': 'Erythrocytes|Urine/Urine sed',\n },\n method: 'Microscopy.light.HPF',\n property: 'Naric',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Urine sed',\n time: 'Pt',\n },\n '13964-2': {\n component: 'Methylmalonate',\n display: 'Methylmalonate [Moles/volume] in Serum or Plasma',\n groups: {\n 'LG47301-3': 'Methylmalonate|Pt|Ser/Plas|118.088 g/mole',\n },\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '13965-9': {\n component: 'Homocysteine',\n display: 'Homocysteine [Moles/volume] in Serum or Plasma',\n groups: {\n 'LG48762-5': 'Homocysteine|Pt|Ser/Plas',\n },\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '13967-5': {\n component: 'Sex hormone binding globulin',\n display: 'Sex hormone binding globulin [Moles/volume] in Serum or Plasma',\n groups: {\n 'LG46684-3': 'Sex hormone binding globulin|Pt|Ser/Plas',\n },\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '14804-9': {\n component: 'Lactate dehydrogenase',\n display:\n 'Lactate dehydrogenase [Enzymatic activity/volume] in Serum or Plasma by Lactate to pyruvate reaction',\n method: 'Reaction: lactate to pyruvate',\n property: 'CCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '14957-5': {\n component: 'Albumin',\n display: 'Microalbumin [Mass/volume] in Urine',\n groups: {\n 'LG37542-4': 'Microalbumin|MCnc|Urine',\n },\n method: 'Detection limit <= 20 mg/L',\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '15067-2': {\n component: 'Follitropin',\n display: 'Follitropin [Units/volume] in Serum or Plasma',\n groups: {\n 'LG3268-2': 'Follitropin|ACnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1558-6': {\n component: 'Glucose^post CFst',\n display: 'Fasting glucose [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG50685-3': 'Glucose^post CFst|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1742-6': {\n component: 'Alanine aminotransferase',\n display: 'Alanine aminotransferase [Enzymatic activity/volume] in Serum or Plasma',\n groups: {\n 'LG5272-2': 'Alanine aminotransferase|CCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'CCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1751-7': {\n component: 'Albumin',\n display: 'Albumin [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG49829-1': 'Albumin|Pt|Ser/Plas|66.439 kDa g/mole',\n 'LG5465-2': 'Albumin|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1759-0': {\n component: 'Albumin/Globulin',\n display: 'Albumin/Globulin [Mass Ratio] in Serum or Plasma',\n groups: {\n 'LG5164-1': 'Albumin/Globulin|MRto|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MRto',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '17782-4': {\n component: 'Lipoprotein.beta.subparticle',\n display: 'Lipoprotein.beta.subparticle [Entitic length] in Serum or Plasma',\n method: null,\n property: 'EntLen',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '17861-6': {\n component: 'Calcium',\n display: 'Calcium [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG49864-8': 'Calcium|Pt|Ser/Plas|40.078 g/mole',\n 'LG7247-2': 'Calcium|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1798-8': {\n component: 'Amylase',\n display: 'Amylase [Enzymatic activity/volume] in Serum or Plasma',\n groups: {\n 'LG5805-9': 'Amylase|CCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'CCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '18262-6': {\n component: 'Cholesterol.in LDL',\n display: 'Cholesterol in LDL [Mass/volume] in Serum or Plasma by Direct assay',\n groups: {\n 'LG43023-7': 'Cholesterol.in LDL|Pt|Ser/Plas|Direct assay',\n 'LG6248-1': 'Cholesterol.in LDL|MCnc|Pt|ANYBldSerPl',\n },\n method: 'Direct assay',\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1834-1': {\n component: 'Alpha-1-Fetoprotein',\n display: 'Alpha-1-Fetoprotein [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG42656-5': 'Alpha-1-Fetoprotein|Pt|Ser/Plas',\n 'LG5597-2': 'Alpha-1-Fetoprotein|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1848-1': {\n component: 'Androstanolone',\n display: 'Androstanolone [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG42603-7': 'Androstanolone|Pt|Ser/Plas|290.447 g/mole',\n 'LG6115-2': 'Androstanolone|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1869-7': {\n component: 'Apolipoprotein A-I',\n display: 'Apolipoprotein A-I [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG44102-8': 'Apolipoprotein A-I|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1884-6': {\n component: 'Apolipoprotein B',\n display: 'Apolipoprotein B [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG42611-0': 'Apolipoprotein B|Pt|Ser/Plas',\n 'LG5705-1': 'Apolipoprotein B|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1903-4': {\n component: 'Ascorbate',\n display: 'Ascorbate [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG42630-0': 'Ascorbate|Pt|Ser/Plas|176.124 g/mole',\n 'LG5723-4': 'Ascorbate|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '19080-1': {\n component: 'Choriogonadotropin',\n display: 'Choriogonadotropin [Units/volume] in Serum or Plasma',\n groups: {\n 'LG5747-3': 'Choriogonadotropin|ACnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '19113-0': {\n component: 'IgE',\n display: 'IgE [Units/volume] in Serum or Plasma',\n groups: {\n 'LG5901-6': 'IgE|ACnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '19123-9': {\n component: 'Magnesium',\n display: 'Magnesium [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG50041-9': 'Magnesium|Pt|Ser/Plas|24.305 g/mole',\n 'LG5903-2': 'Magnesium|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1920-8': {\n component: 'Aspartate aminotransferase',\n display: 'Aspartate aminotransferase [Enzymatic activity/volume] in Serum or Plasma',\n groups: {\n 'LG6033-7': 'Aspartate aminotransferase|CCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'CCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1968-7': {\n component: 'Bilirubin.glucuronidated+Bilirubin.albumin bound',\n display: 'Bilirubin.direct [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG43215-9': 'Bilirubin.glucuronidated+Bilirubin.albumin bound|Pt|Ser/Plas',\n 'LG6165-7': 'Bilirubin.glucuronidated+Bilirubin.albumin bound|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1971-1': {\n component: 'Bilirubin.non-glucuronidated',\n display: 'Bilirubin.indirect [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG3235-1': 'Bilirubin.non-glucuronidated|MCnc|Pt|ANYBldSerPl',\n 'LG43430-4': 'Bilirubin.non-glucuronidated|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1975-2': {\n component: 'Bilirubin',\n display: 'Bilirubin.total [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG49848-1': 'Bilirubin|Pt|Ser/Plas|584.673 g/mole',\n 'LG6199-6': 'Bilirubin|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1988-5': {\n component: 'C reactive protein',\n display: 'C reactive protein [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG48228-7': 'C reactive protein|Pt|Ser/Plas',\n 'LG52057-3': 'C reactive protein|Pt|ANYBldSerPl|',\n 'LG6212-7': 'C reactive protein|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1989-3': {\n component: 'Calcidiol',\n display: '25-hydroxyvitamin D3 [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG43465-0': 'Calcidiol|Pt|Ser/Plas|400.647 g/mole',\n 'LG51030-1': 'Calcidiol|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2028-9': {\n component: 'Carbon dioxide',\n display: 'Carbon dioxide, total [Moles/volume] in Serum or Plasma',\n groups: {\n 'LG4454-7': 'Carbon dioxide|SCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2039-6': {\n component: 'Carcinoembryonic Ag',\n display: 'Carcinoembryonic Ag [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG44728-0': 'Carcinoembryonic Ag|Pt|Ser/Plas',\n 'LG6799-3': 'Carcinoembryonic Ag|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '20405-7': {\n component: 'Urobilinogen',\n display: 'Urobilinogen [Mass/volume] in Urine by Test strip',\n groups: {\n 'LG35156-5': 'Urobilinogen|MCnc|Urine',\n 'LG40864-7': 'Urobilinogen|Urine/Urine sed',\n 'LG47120-7': 'Urobilinogen|Pt|Urine|Test strip|592.737 g/mole',\n },\n method: 'Test strip',\n property: 'MCnc',\n scale: 'SemiQn',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '20448-7': {\n component: 'Insulin',\n display: 'Insulin [Units/volume] in Serum or Plasma',\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2075-0': {\n component: 'Chloride',\n display: 'Chloride [Moles/volume] in Serum or Plasma',\n groups: {\n 'LG6373-7': 'Chloride|SCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2085-9': {\n component: 'Cholesterol.in HDL',\n display: 'Cholesterol in HDL [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG43009-6': 'Cholesterol.in HDL|Pt|Ser/Plas',\n 'LG6644-1': 'Cholesterol.in HDL|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2089-1': {\n component: 'Cholesterol.in LDL',\n display: 'Cholesterol in LDL [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG43021-1': 'Cholesterol.in LDL|Pt|Ser/Plas',\n 'LG6248-1': 'Cholesterol.in LDL|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2093-3': {\n component: 'Cholesterol',\n display: 'Cholesterol [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG50009-6': 'Cholesterol|Pt|Ser/Plas|386.664 g/mole',\n 'LG6416-4': 'Cholesterol|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2132-9': {\n component: 'Cobalamins',\n display: 'Cobalamin (Vitamin B12) [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG4793-8': 'Cobalamins|MCnc|Pt|ANYBldSerPl',\n 'LG48386-3': 'Cobalamins|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '21365-2': {\n component: 'Leptin',\n display: 'Leptin [Mass/volume] in Serum or Plasma',\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2143-6': {\n component: 'Cortisol',\n display: 'Cortisol [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG43168-0': 'Cortisol|Pt|Ser/Plas|362.466 g/mole',\n 'LG7018-7': 'Cortisol|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2157-6': {\n component: 'Creatine kinase',\n display: 'Creatine kinase [Enzymatic activity/volume] in Serum or Plasma',\n method: null,\n property: 'CCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2160-0': {\n component: 'Creatinine',\n display: 'Creatinine [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG50024-5': 'Creatinine|Pt|Ser/Plas|113.12 g/mole',\n 'LG52058-1': 'Creatinine|Pt|ANYBldSerPl|113.12 g/mole',\n 'LG6657-3': 'Creatinine|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2161-8': {\n component: 'Creatinine',\n display: 'Creatinine [Mass/volume] in Urine',\n groups: {\n 'LG35227-4': 'Creatinine|MCnc|Urine',\n 'LG50025-2': 'Creatinine|Pt|Urine|113.12 g/mole',\n 'LG7133-4': 'Creatinine|MCnc|Pt|ANYUrine',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '21619-2': {\n component: 'APOE gene mutations',\n display:\n 'APOE gene mutations found [Identifier] in Blood or Tissue by Targeted gene mutation analysis Nominal',\n method: 'Targeted gene mutation analysis',\n property: 'Prid',\n scale: 'Nom',\n status: 'ACTIVE',\n system: 'Bld/Tiss',\n time: 'Pt',\n },\n '2191-5': {\n component: 'Dehydroepiandrosterone sulfate',\n display: 'Dehydroepiandrosterone sulfate (DHEA-S) [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG45903-8': 'Dehydroepiandrosterone sulfate|Pt|Ser/Plas',\n 'LG51787-6': 'Dehydroepiandrosterone sulfate|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2243-4': {\n component: 'Estradiol',\n display: 'Estradiol (E2) [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG46249-5': 'Estradiol|Pt|Ser/Plas|272.388 g/mole',\n 'LG668-0': 'Estradiol|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2276-4': {\n component: 'Ferritin',\n display: 'Ferritin [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG43688-7': 'Ferritin|Pt|Ser/Plas',\n 'LG6299-4': 'Ferritin|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2284-8': {\n component: 'Folate',\n display: 'Folate [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG46599-3': 'Folate|Pt|Ser/Plas|441.404 g/mole',\n 'LG8004-6': 'Folate|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2324-2': {\n component: 'Gamma glutamyl transferase',\n display: 'Gamma glutamyl transferase [Enzymatic activity/volume] in Serum or Plasma',\n method: null,\n property: 'CCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2336-6': {\n component: 'Globulin',\n display: 'Globulin [Mass/volume] in Serum',\n groups: {\n 'LG1776-6': 'Globulin|MCnc|Pt|ANYBldSerPl',\n 'LG52056-5': 'Globulin|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser',\n time: 'Pt',\n },\n '2345-7': {\n component: 'Glucose',\n display: 'Glucose [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG49881-2': 'Glucose|Pt|Ser/Plas|180.156 g/mole',\n 'LG7967-5': 'Glucose|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '24108-3': {\n component: 'Cancer Ag 19-9',\n display: 'Cancer Ag 19-9 [Units/volume] in Serum or Plasma',\n groups: {\n 'LG6230-9': 'Cancer Ag 19-9|ACnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2458-8': {\n component: 'IgA',\n display: 'IgA [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG46917-7': 'IgA|Pt|Ser/Plas',\n 'LG9788-3': 'IgA|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2465-3': {\n component: 'IgG',\n display: 'IgG [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG45120-9': 'IgG|Pt|Ser/Plas',\n 'LG9795-8': 'IgG|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2472-9': {\n component: 'IgM',\n display: 'IgM [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG48822-7': 'IgM|Pt|Ser/Plas',\n 'LG9802-2': 'IgM|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2498-4': {\n component: 'Iron',\n display: 'Iron [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG48872-2': 'Iron|Pt|Ser/Plas|55.845 g/mole',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2500-7': {\n component: 'Iron binding capacity',\n display: 'Iron binding capacity [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG48875-5': 'Iron binding capacity|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2502-3': {\n component: 'Iron saturation',\n display: 'Iron saturation [Mass Fraction] in Serum or Plasma',\n method: null,\n property: 'MFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2571-8': {\n component: 'Triglyceride',\n display: 'Triglyceride [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG47044-9': 'Triglyceride|Pt|Ser/Plas',\n 'LG9600-0': 'Triglyceride|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '26746-8': {\n component: 'Magnesium',\n display: 'Magnesium [Mass/volume] in Red Blood Cells',\n groups: {\n 'LG50044-3': 'Magnesium|Pt|RBC|24.305 g/mole',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'RBC',\n time: 'Pt',\n },\n '2731-8': {\n component: 'Parathyrin.intact',\n display: 'Parathyrin.intact [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG47482-1': 'Parathyrin.intact|Pt|Ser/Plas',\n 'LG52635-6': 'Parathyrin.intact|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '27353-2': {\n component: 'Estimated average glucose',\n display: 'Glucose mean value [Mass/volume] in Blood Estimated from glycated hemoglobin',\n groups: {\n 'LG48562-9': 'Estimated average glucose|Pt|Bld|Estimated from glycated hemoglobin',\n },\n method: 'Estimated from glycated hemoglobin',\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '2823-3': {\n component: 'Potassium',\n display: 'Potassium [Moles/volume] in Serum or Plasma',\n groups: {\n 'LG10990-6': 'Potassium|SCnc|Pt|ANYBldSerPl',\n 'LG49936-4': 'Potassium|Pt|Ser/Plas|39.098 g/mole',\n },\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2839-9': {\n component: 'Progesterone',\n display: 'Progesterone [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG11006-0': 'Progesterone|MCnc|Pt|ANYBldSerPl',\n 'LG49385-4': 'Progesterone|Pt|Ser/Plas|314.469 g/mole',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2842-3': {\n component: 'Prolactin',\n display: 'Prolactin [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG6300-0': 'Prolactin|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2857-1': {\n component: 'Prostate specific Ag',\n display: 'Prostate specific Ag [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG11034-2': 'Prostate specific Ag|MCnc|Pt|ANYBldSerPl',\n 'LG47752-7': 'Prostate specific Ag|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2885-2': {\n component: 'Protein',\n display: 'Protein [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG1777-4': 'Protein|MCnc|Pt|ANYBldSerPl',\n 'LG49422-5': 'Protein|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2923-1': {\n component: 'Retinol',\n display: 'Retinol [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG11471-6': 'Retinol|MCnc|Pt|ANYBldSerPl',\n 'LG45808-9': 'Retinol|Pt|Ser/Plas|286.459 g/mole',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '29463-7': {\n component: 'Body weight',\n display: 'Body weight',\n groups: {\n 'LG34372-9': 'Body weight|Mass|Pt|^Patient',\n },\n method: null,\n property: 'Mass',\n scale: 'Qn',\n status: 'ACTIVE',\n system: '^Patient',\n time: 'Pt',\n },\n '2951-2': {\n component: 'Sodium',\n display: 'Sodium [Moles/volume] in Serum or Plasma',\n groups: {\n 'LG11363-5': 'Sodium|SCnc|Pt|ANYBldSerPl',\n 'LG51978-1': 'Sodium|Pt|Ser/Plas|22.99 g/mole',\n },\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2986-8': {\n component: 'Testosterone',\n display: 'Testosterone [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG11398-1': 'Testosterone|MCnc|Pt|ANYBldSerPl',\n 'LG49980-2': 'Testosterone|Pt|Ser/Plas|288.431 g/mole',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2991-8': {\n component: 'Testosterone.free',\n display: 'Testosterone Free [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG11447-6': 'Testosterone.free|MCnc|Pt|ANYBldSerPl',\n 'LG47914-3': 'Testosterone.free|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '3013-0': {\n component: 'Thyroglobulin',\n display: 'Thyroglobulin [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG49663-4': 'Thyroglobulin|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '3016-3': {\n component: 'Thyrotropin',\n display: 'Thyrotropin [Units/volume] in Serum or Plasma',\n groups: {\n 'LG11757-8': 'Thyrotropin|ACnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '30189-5': {\n component:\n '(Dactylis glomerata+Festuca elatior+Lolium perenne+Phleum pratense+Poa pratensis) Ab.IgE',\n display:\n 'Grass Allergen Mix 1 (Orchard grass+Meadow Fescue+Perennial rye grass+Timothy+Kentucky blue grass) IgE Ab [Units/volume] in Serum by Multidisk',\n method: 'Multidisk',\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser',\n time: 'Pt',\n },\n '3024-7': {\n component: 'Thyroxine.free',\n display: 'Thyroxine (T4) free [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG12004-4': 'Thyroxine.free|MCnc|Pt|ANYBldSerPl',\n 'LG49672-5': 'Thyroxine.free|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '3026-2': {\n component: 'Thyroxine',\n display: 'Thyroxine (T4) [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG12009-3': 'Thyroxine|MCnc|Pt|ANYBldSerPl',\n 'LG46307-1': 'Thyroxine|Pt|Ser/Plas|776.874 g/mole',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '30341-2': {\n component: 'Erythrocyte',\n display: 'Erythrocyte [Sedimentation Rate] in Blood',\n method: null,\n property: 'Sedimentation Rate',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '3040-3': {\n component: 'Triacylglycerol lipase',\n display: 'Lipase [Enzymatic activity/volume] in Serum or Plasma',\n method: null,\n property: 'CCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '3051-0': {\n component: 'Triiodothyronine.free',\n display: 'Triiodothyronine (T3) Free [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG11488-0': 'Triiodothyronine.free|MCnc|Pt|ANYBldSerPl',\n 'LG46407-9': 'Triiodothyronine.free|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '3084-1': {\n component: 'Urate',\n display: 'Urate [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG49755-8': 'Urate|Pt|Ser/Plas|168.112 g/mole',\n 'LG51310-7': 'Urate|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '3091-6': {\n component: 'Urea',\n display: 'Urea [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG49993-5': 'Urea|Pt|Ser/Plas|60.056 g/mole',\n 'LG6460-2': 'Urea|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '30934-4': {\n component: 'Natriuretic peptide.B',\n display: 'Natriuretic peptide B [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG12080-4': 'Natriuretic peptide.B|MCnc|Pt|ANYBldSerPl',\n 'LG44906-2': 'Natriuretic peptide.B|Pt|Ser/Plas',\n 'LG52049-0': 'Natriuretic peptide.B|Pt|ANYBldSerPl|3464.0 g/mole',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '3097-3': {\n component: 'Urea nitrogen/Creatinine',\n display: 'Urea nitrogen/Creatinine [Mass Ratio] in Serum or Plasma',\n groups: {\n 'LG12083-8': 'Urea nitrogen/Creatinine|MRto|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MRto',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '31017-7': {\n component: 'Tissue transglutaminase Ab.IgA',\n display: 'Tissue transglutaminase IgA Ab [Units/volume] in Serum',\n groups: {\n 'LG12238-8': 'Tissue transglutaminase Ab.IgA|ACnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser',\n time: 'Pt',\n },\n '3255-7': {\n component: 'Fibrinogen',\n display: 'Fibrinogen [Mass/volume] in Platelet poor plasma by Coagulation assay',\n groups: {\n 'LG51979-9': 'Fibrinogen|Pt|PPP|Coag',\n },\n method: 'Coag',\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'PPP',\n time: 'Pt',\n },\n '32623-1': {\n component: 'Platelet',\n display: 'Platelet [Entitic mean volume] in Blood by Automated count',\n method: 'Automated count',\n property: 'EntMeanVol',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '32998-7': {\n component: 'Tissue transglutaminase Ab.IgG',\n display: 'Tissue transglutaminase IgG Ab [Units/volume] in Serum',\n groups: {\n 'LG13588-5': 'Tissue transglutaminase Ab.IgG|ACnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser',\n time: 'Pt',\n },\n '33762-6': {\n component: 'Natriuretic peptide.B prohormone N-Terminal',\n display: 'Natriuretic peptide.B prohormone N-Terminal [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG13322-9': 'Natriuretic peptide.B prohormone N-Terminal|MCnc|Pt|ANYBldSerPl',\n 'LG47358-3': 'Natriuretic peptide.B prohormone N-Terminal|Pt|Ser/Plas',\n 'LG52052-4': 'Natriuretic peptide.B prohormone N-Terminal|Pt|BldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '33863-2': {\n component: 'Cystatin C',\n display: 'Cystatin C [Mass/volume] in Serum or Plasma',\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '35177-5': {\n component: 'Fatty acids.polyunsaturated',\n display: 'Polyunsaturated fatty acids [Moles/volume] in Serum or Plasma',\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '35505-7': {\n component: 'Lipoprotein.beta.subparticle',\n display: 'Lipoprotein.beta.subparticle [Type] in Serum or Plasma',\n method: null,\n property: 'Type',\n scale: 'Nom',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '38476-8': {\n component: 'Mullerian inhibiting substance',\n display: 'Mullerian inhibiting substance [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG15084-3': 'Mullerian inhibiting substance|MCnc|Pt|ANYBldSerPl',\n 'LG49114-8': 'Mullerian inhibiting substance|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '39156-5': {\n component: 'Body mass index',\n display: 'Body mass index (BMI) [Ratio]',\n method: null,\n property: 'Ratio',\n scale: 'Qn',\n status: 'ACTIVE',\n system: '^Patient',\n time: 'Pt',\n },\n '41982-0': {\n component: 'Body fat percentage',\n display: 'Percentage of body fat Measured',\n method: 'Measured',\n property: 'MFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: '^Patient',\n time: 'Pt',\n },\n '43396-1': {\n component: 'Cholesterol.non HDL',\n display: 'Cholesterol non HDL [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG43747-1': 'Cholesterol.non HDL|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '43583-4': {\n component: 'Lipoprotein (little a)',\n display: 'Lipoprotein a [Moles/volume] in Serum or Plasma',\n groups: {\n 'LG45404-7': 'Lipoprotein (little a)|Pt|Ser/Plas',\n },\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '43727-7': {\n component: 'Lipoprotein.beta.subparticle.small',\n display: 'Lipoprotein.beta.subparticle.small [Moles/volume] in Serum or Plasma',\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '43729-3': {\n component: 'Lipoprotein.alpha.subparticle.large',\n display: 'Lipoprotein.alpha.subparticle.large [Moles/volume] in Serum or Plasma',\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '4485-9': {\n component: 'Complement C3',\n display: 'Complement C3 [Mass/volume] in Serum or Plasma',\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '4498-2': {\n component: 'Complement C4',\n display: 'Complement C4 [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG43109-4': 'Complement C4|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '4544-3': {\n component: 'Erythrocyte/Blood',\n display: 'Hematocrit [Volume Fraction] of Blood by Automated count',\n method: 'Automated count',\n property: 'VFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '4548-4': {\n component: 'Hemoglobin A1c/Hemoglobin.total',\n display: 'Hemoglobin A1c/Hemoglobin.total in Blood',\n groups: {\n 'LG51070-7': 'Hemoglobin A1c/Hemoglobin.total|MFr|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '4679-7': {\n component: 'Reticulocytes/Erythrocytes',\n display: 'Reticulocytes/Erythrocytes in Blood',\n method: null,\n property: 'NFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '47214-2': {\n component: 'Homeostasis model assessment',\n display: 'Homeostasis model assessment',\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '47828-9': {\n component: 'Adiponectin',\n display: 'Adiponectin [Mass/volume] in Serum or Plasma',\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '48065-7': {\n component: 'Fibrin D-dimer',\n display: 'Fibrin D-dimer FEU [Mass/volume] in Platelet poor plasma',\n groups: {\n 'LG52053-2': 'Fibrin D-dimer|Pt|ANYBldPPP',\n },\n method: 'FEU',\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'PPP',\n time: 'Pt',\n },\n '48066-5': {\n component: 'Fibrin D-dimer',\n display: 'Fibrin D-dimer DDU [Mass/volume] in Platelet poor plasma',\n groups: {\n 'LG52053-2': 'Fibrin D-dimer|Pt|ANYBldPPP',\n },\n method: 'DDU',\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'PPP',\n time: 'Pt',\n },\n '49563-0': {\n component: 'Troponin I.cardiac',\n display:\n 'Troponin I.cardiac [Mass/volume] in Serum or Plasma by Detection limit <= 0.01 ng/mL',\n method: 'Detection limit <= 0.01 ng/mL',\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '53060-0': {\n component: 'Butyrylcarnitine (C4)',\n display: 'Butyrylcarnitine (C4) [Moles/volume] in Amniotic fluid',\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Amnio fld',\n time: 'Pt',\n },\n '54434-6': {\n component: 'Lipoprotein.beta.subparticle',\n display: 'Lipoprotein.beta.subparticle [Moles/volume] in Serum or Plasma',\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '5685-3': {\n component: 'Mercury',\n display: 'Mercury [Mass/volume] in Blood',\n groups: {\n 'LG23471-2': 'Mercury|MCnc|Pt|ANYBldSerPl',\n 'LG49912-5': 'Mercury|Pt|Bld|200.59 g/mole',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '5724-0': {\n component: 'Selenium',\n display: 'Selenium [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG23524-8': 'Selenium|MCnc|Pt|ANYBldSerPl',\n 'LG46672-8': 'Selenium|Pt|Ser/Plas|78.971 g/mole',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '5763-8': {\n component: 'Zinc',\n display: 'Zinc [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG23959-6': 'Zinc|MCnc|Pt|ANYBldSerPl',\n 'LG49988-5': 'Zinc|Pt|Ser/Plas|65.38 g/mole',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '5767-9': {\n component: 'Observation',\n display: 'Appearance of Urine',\n method: null,\n property: 'Aper',\n scale: 'Nom',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '5769-5': {\n component: 'Bacteria',\n display: 'Bacteria [#/area] in Urine sediment by Microscopy high power field',\n groups: {\n 'LG40875-3': 'Bacteria|Urine/Urine sed',\n },\n method: 'Microscopy.light.HPF',\n property: 'Naric',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Urine sed',\n time: 'Pt',\n },\n '5770-3': {\n component: 'Bilirubin',\n display: 'Bilirubin.total [Presence] in Urine by Test strip',\n groups: {\n 'LG35153-2': 'Bilirubin|PrThr|Urine',\n 'LG40907-4': 'Bilirubin|Urine/Urine sed',\n },\n method: 'Test strip',\n property: 'PrThr',\n scale: 'Ord',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '5778-6': {\n component: 'Observation',\n display: 'Color of Urine',\n groups: {\n 'LG36556-5': 'Observation|Color|Urine',\n },\n method: null,\n property: 'Color',\n scale: 'Nom',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '5792-7': {\n component: 'Glucose',\n display: 'Glucose [Mass/volume] in Urine by Test strip',\n groups: {\n 'LG33250-8': 'Glucose|Pt|Urine|Test strip|180.156 g/mole',\n 'LG35166-4': 'Glucose|MCnc|Urine',\n 'LG40865-4': 'Glucose|Urine/Urine sed',\n },\n method: 'Test strip',\n property: 'MCnc',\n scale: 'SemiQn',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '5794-3': {\n component: 'Hemoglobin',\n display: 'Hemoglobin [Presence] in Urine by Test strip',\n groups: {\n 'LG36977-3': 'Hemoglobin|PrThr|Urine',\n 'LG40952-0': 'Hemoglobin|Urine/Urine sed',\n },\n method: 'Test strip',\n property: 'PrThr',\n scale: 'Ord',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '5796-8': {\n component: 'Hyaline casts',\n display: 'Hyaline casts [#/area] in Urine sediment by Microscopy low power field',\n groups: {\n 'LG40890-2': 'Hyaline casts|Urine/Urine sed',\n },\n method: 'Microscopy.light.LPF',\n property: 'Naric',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Urine sed',\n time: 'Pt',\n },\n '5797-6': {\n component: 'Ketones',\n display: 'Ketones [Mass/volume] in Urine by Test strip',\n groups: {\n 'LG36553-2': 'Ketones|MCnc|Urine',\n 'LG40908-2': 'Ketones|Urine/Urine sed',\n 'LG48911-8': 'Ketones|Pt|Urine|Test strip',\n },\n method: 'Test strip',\n property: 'MCnc',\n scale: 'SemiQn',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '5799-2': {\n component: 'Leukocyte esterase',\n display: 'Leukocyte esterase [Presence] in Urine by Test strip',\n groups: {\n 'LG36980-7': 'Leukocyte esterase|PrThr|Urine',\n 'LG40953-8': 'Leukocyte esterase|Urine/Urine sed',\n },\n method: 'Test strip',\n property: 'PrThr',\n scale: 'Ord',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '5802-4': {\n component: 'Nitrite',\n display: 'Nitrite [Presence] in Urine by Test strip',\n groups: {\n 'LG35986-5': 'Nitrite|PrThr|Urine',\n 'LG40866-2': 'Nitrite|Urine/Urine sed',\n },\n method: 'Test strip',\n property: 'PrThr',\n scale: 'Ord',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '5803-2': {\n component: 'pH',\n display: 'pH of Urine by Test strip',\n groups: {\n 'LG35753-9': 'pH|LsCnc|Urine',\n 'LG40956-1': 'pH|Urine/Urine sed',\n },\n method: 'Test strip',\n property: 'LsCnc',\n scale: 'SemiQn',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '5804-0': {\n component: 'Protein',\n display: 'Protein [Mass/volume] in Urine by Test strip',\n groups: {\n 'LG34512-0': 'Protein|MCnc|Urine',\n 'LG40870-4': 'Protein|Urine/Urine sed',\n },\n method: 'Test strip',\n property: 'MCnc',\n scale: 'SemiQn',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '5808-1': {\n component: 'Erythrocytes',\n display: 'Erythrocytes [#/volume] in Urine sediment by Microscopy high power field',\n groups: {\n 'LG40868-8': 'Erythrocytes|Urine/Urine sed',\n },\n method: 'Microscopy.light.HPF',\n property: 'NCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Urine sed',\n time: 'Pt',\n },\n '5811-5': {\n component: 'Observation',\n display: 'Specific gravity of Urine by Test strip',\n groups: {\n 'LG35800-8': 'Observation|SpGrav|Urine',\n 'LG40859-7': 'Observation|Urine/Urine sed',\n },\n method: 'Test strip',\n property: 'SpGrav',\n scale: 'SemiQn',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '5821-4': {\n component: 'Leukocytes',\n display: 'Leukocytes [#/area] in Urine sediment by Microscopy high power field',\n groups: {\n 'LG40867-0': 'Leukocytes|Urine/Urine sed',\n },\n method: 'Microscopy.light.HPF',\n property: 'Naric',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Urine sed',\n time: 'Pt',\n },\n '5902-2': {\n component: 'Coagulation',\n display: 'Prothrombin time (PT)',\n method: 'Coag.tissue factor induced',\n property: 'Time',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'PPP',\n time: 'Pt',\n },\n '5905-5': {\n component: 'Monocytes/leukocytes',\n display: 'Monocytes/Leukocytes in Blood by Automated count',\n method: 'Automated count',\n property: 'NFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '62292-8': {\n component: 'Calcidiol+ercalcidiol',\n display: '25-Hydroxyvitamin D3+25-Hydroxyvitamin D2 [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG25965-1': 'Calcidiol+ercalcidiol|MCnc|Pt|ANYBldSerPl',\n 'LG42015-4': 'Calcidiol+ercalcidiol|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '630-4': {\n component: 'Bacteria',\n display: 'Bacteria identified in Urine by Culture',\n groups: {\n 'LG34664-9': 'Bacteria|Prid|Urine',\n 'LG51652-2': 'Bacteria|Prid|Sys:ANYGU',\n },\n method: 'Culture',\n property: 'Prid',\n scale: 'Nom',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '6301-6': {\n component: 'Coagulation',\n display: 'INR in Platelet poor plasma by Coagulation assay',\n method: 'Coag.tissue factor induced.INR',\n property: 'RelTime',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'PPP',\n time: 'Pt',\n },\n '63453-5': {\n component: 'Gliadin peptide Ab.IgA',\n display: 'Gliadin peptide IgA Ab [Units/volume] in Serum by Immunoassay',\n groups: {\n 'LG24120-4': 'Gliadin peptide Ab.IgA|ACnc|Pt|ANYBldSerPl',\n },\n method: 'IA',\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser',\n time: 'Pt',\n },\n '63459-2': {\n component: 'Gliadin peptide Ab.IgG',\n display: 'Gliadin peptide IgG Ab [Units/volume] in Serum by Immunoassay',\n groups: {\n 'LG24121-2': 'Gliadin peptide Ab.IgG|ACnc|Pt|ANYBldSerPl',\n },\n method: 'IA',\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser',\n time: 'Pt',\n },\n '6598-7': {\n component: 'Troponin T.cardiac',\n display: 'Troponin T.cardiac [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG19584-8': 'Troponin T.cardiac|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '6690-2': {\n component: 'Leukocytes',\n display: 'Leukocytes [#/volume] in Blood by Automated count',\n groups: {\n 'LG32857-1': 'Leukocytes|NCnc|Pt|Bld',\n },\n method: 'Automated count',\n property: 'NCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '6768-6': {\n component: 'Alkaline phosphatase',\n display: 'Alkaline phosphatase [Enzymatic activity/volume] in Serum or Plasma',\n groups: {\n 'LG5665-7': 'Alkaline phosphatase|CCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'CCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '6833-8': {\n component: 'Cat dander Ab.IgE',\n display: 'Cat dander IgE Ab [Units/volume] in Serum',\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser',\n time: 'Pt',\n },\n '6873-4': {\n component: 'Beta hydroxybutyrate',\n display: 'Beta hydroxybutyrate [Moles/volume] in Serum or Plasma',\n groups: {\n 'LG26613-6': 'Beta hydroxybutyrate|SCnc|Pt|ANYBldSerPl',\n 'LG43202-7': 'Beta hydroxybutyrate|Pt|Ser/Plas',\n },\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '6875-9': {\n component: 'Cancer Ag 15-3',\n display: 'Cancer Ag 15-3 [Units/volume] in Serum or Plasma',\n groups: {\n 'LG26852-0': 'Cancer Ag 15-3|ACnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '704-7': {\n component: 'Basophils',\n display: 'Basophils [#/volume] in Blood by Automated count',\n groups: {\n 'LG32848-0': 'Basophils|NCnc|Pt|Bld',\n },\n method: 'Automated count',\n property: 'NCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '706-2': {\n component: 'Basophils/leukocytes',\n display: 'Basophils/Leukocytes in Blood by Automated count',\n method: 'Automated count',\n property: 'NFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '711-2': {\n component: 'Eosinophils',\n display: 'Eosinophils [#/volume] in Blood by Automated count',\n groups: {\n 'LG32849-8': 'Eosinophils|NCnc|Pt|Bld',\n },\n method: 'Automated count',\n property: 'NCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '713-8': {\n component: 'Eosinophils/leukocytes',\n display: 'Eosinophils/Leukocytes in Blood by Automated count',\n method: 'Automated count',\n property: 'NFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '718-7': {\n component: 'Hemoglobin',\n display: 'Hemoglobin [Mass/volume] in Blood',\n groups: {\n 'LG44868-4': 'Hemoglobin|Pt|Bld',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '731-0': {\n component: 'Lymphocytes',\n display: 'Lymphocytes [#/volume] in Blood by Automated count',\n groups: {\n 'LG32863-9': 'Lymphocytes|NCnc|Pt|Bld',\n },\n method: 'Automated count',\n property: 'NCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '736-9': {\n component: 'Lymphocytes/leukocytes',\n display: 'Lymphocytes/Leukocytes in Blood by Automated count',\n method: 'Automated count',\n property: 'NFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '73708-0': {\n component: 'Body fat mass',\n display: 'Body fat [Mass] Calculated',\n method: 'Calculated',\n property: 'Mass',\n scale: 'Qn',\n status: 'ACTIVE',\n system: '^Patient',\n time: 'Pt',\n },\n '73964-9': {\n component: 'Body muscle mass',\n display: 'Body muscle mass Calculated',\n method: 'Calculated',\n property: 'Mass',\n scale: 'Qn',\n status: 'ACTIVE',\n system: '^Patient',\n time: 'Pt',\n },\n '742-7': {\n component: 'Monocytes',\n display: 'Monocytes [#/volume] in Blood by Automated count',\n groups: {\n 'LG32885-2': 'Monocytes|NCnc|Pt|Bld',\n },\n method: 'Automated count',\n property: 'NCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '751-8': {\n component: 'Neutrophils',\n display: 'Neutrophils [#/volume] in Blood by Automated count',\n groups: {\n 'LG32886-0': 'Neutrophils|NCnc|Pt|Bld',\n },\n method: 'Automated count',\n property: 'NCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '770-8': {\n component: 'Neutrophils/leukocytes',\n display: 'Neutrophils/Leukocytes in Blood by Automated count',\n method: 'Automated count',\n property: 'NFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '77307-7': {\n component: 'Lead',\n display: 'Lead [Mass/volume] in Venous blood',\n groups: {\n 'LG140-0': 'Lead|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'BldV',\n time: 'Pt',\n },\n '777-3': {\n component: 'Platelets',\n display: 'Platelets [#/volume] in Blood by Automated count',\n groups: {\n 'LG32892-8': 'Platelets|NCnc|Pt|Bld',\n },\n method: 'Automated count',\n property: 'NCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '785-6': {\n component: 'Hemoglobin',\n display: 'MCH [Entitic mass] by Automated count',\n method: 'Automated count',\n property: 'EntMass',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'RBC',\n time: 'Pt',\n },\n '786-4': {\n component: 'Hemoglobin',\n display: 'MCHC [Entitic Mass/volume] in Red Blood Cells by Automated count',\n method: 'Automated count',\n property: 'EntMCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'RBC',\n time: 'Pt',\n },\n '787-2': {\n component: 'Observation',\n display: 'MCV [Entitic mean volume] in Red Blood Cells by Automated count',\n method: 'Automated count',\n property: 'EntMeanVol',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'RBC',\n time: 'Pt',\n },\n '788-0': {\n component: 'Erythrocyte',\n display: 'Erythrocyte [DistWidth] in Blood by Automated count',\n method: 'Automated count',\n property: 'DistWidth',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '789-8': {\n component: 'Erythrocytes',\n display: 'Erythrocytes [#/volume] in Blood by Automated count',\n groups: {\n 'LG32850-6': 'Erythrocytes|NCnc|Pt|Bld',\n },\n method: 'Automated count',\n property: 'NCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '8061-4': {\n component: 'Nuclear Ab',\n display: 'Nuclear Ab [Presence] in Serum',\n groups: {\n 'LG4652-6': 'Nuclear Ab|PrThr|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'PrThr',\n scale: 'Ord',\n status: 'ACTIVE',\n system: 'Ser',\n time: 'Pt',\n },\n '8098-6': {\n component: 'Thyroglobulin Ab',\n display: 'Thyroglobulin Ab [Units/volume] in Serum or Plasma',\n groups: {\n 'LG21864-0': 'Thyroglobulin Ab|ACnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '8099-4': {\n component: 'Thyroperoxidase Ab',\n display: 'Thyroperoxidase Ab [Units/volume] in Serum or Plasma',\n groups: {\n 'LG359-6': 'Thyroperoxidase Ab|ACnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '8245-3': {\n component: 'Zinc',\n display: 'Zinc [Mass/volume] in Blood',\n groups: {\n 'LG23959-6': 'Zinc|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '8280-0': {\n component: 'Circumference.at umbilicus',\n display: 'Waist Circumference at umbilicus by Tape measure',\n method: 'Tape measure',\n property: 'Len',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Abdomen.mid',\n time: 'Pt',\n },\n '8353-5': {\n component: 'Skin fold thickness',\n display: 'Skin fold thickness Thigh',\n method: null,\n property: 'Len',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Thigh',\n time: 'Pt',\n },\n '8354-3': {\n component: 'Skin fold thickness',\n display: 'Skin fold thickness Triceps',\n method: null,\n property: 'Len',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Triceps',\n time: 'Pt',\n },\n '8355-0': {\n component: 'Skin fold thickness',\n display: 'Skin fold thickness Waist',\n method: null,\n property: 'Len',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Waist',\n time: 'Pt',\n },\n '883-9': {\n component: 'ABO group',\n display: 'ABO group [Type] in Blood',\n method: null,\n property: 'Type',\n scale: 'Nom',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '90908-5': {\n component: 'Eicosapentaenoate+Docosapentaenate w3+Docosahexaenoate/Fatty acids.C14-C22 risk',\n display:\n 'Eicosapentaenoate (C20:5w3)+Docosapentaenate (C22:5w3)+Docosahexaenoate (C22:6w3)/Fatty acids.C14-C22 risk [Interpretation] in Blood Qualitative',\n method: null,\n property: 'Imp',\n scale: 'Ord',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '90909-3': {\n component: 'Arachidonate/Eicosapentaenoate',\n display: 'Arachidonate (C20:4w6)/Eicosapentaenoate (C20:5w3) [Mass Ratio] in Blood',\n method: null,\n property: 'MRto',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '90910-1': {\n component: 'Fatty acids.omega 6/Fatty acids.omega 3',\n display: 'Omega 6 fatty acids (w6)/Omega 3 fatty acids (w3) [Mass Ratio] in Blood',\n method: null,\n property: 'MRto',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '90911-9': {\n component: 'Eicosapentaenoate+Docosapentaenate w3+Docosahexaenoate/Fatty acids.C14-C22',\n display:\n 'Eicosapentaenoate (C20:5w3)+Docosapentaenate (C22:5w3)+Docosahexaenoate (C22:6w3)/Fatty acids.C14-C22 in Blood',\n method: null,\n property: 'MFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '90912-7': {\n component: 'Eicosapentaenoate/Fatty acids.C14-C22',\n display: 'Eicosapentaenoate (C20:5w3)/Fatty acids.C14-C22 in Blood',\n method: null,\n property: 'MFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '90913-5': {\n component: 'Docosapentaenate w3/Fatty acids.C14-C22',\n display: 'Docosapentaenate (C22:5w3)/Fatty acids.C14-C22 in Blood',\n method: null,\n property: 'MFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '90914-3': {\n component: 'Docosahexaenoate/Fatty acids.C14-C22',\n display: 'Docosahexaenoate (C22:6w3)/Fatty acids.C14-C22 in Blood',\n method: null,\n property: 'MFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '90916-8': {\n component: 'Arachidonate/Fatty acids.C14-C22',\n display: 'Arachidonate (C20:4w6)/Fatty acids.C14-C22 in Blood',\n method: null,\n property: 'MFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '90917-6': {\n component: 'Linoleate/Fatty acids.C14-C22',\n display: 'Linoleate (C18:2w6)/Fatty acids.C14-C22 in Blood',\n method: null,\n property: 'MFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '9318-7': {\n component: 'Albumin/Creatinine',\n display: 'Albumin/Creatinine [Mass Ratio] in Urine',\n groups: {\n 'LG34557-5': 'Albumin/Creatinine|MRto|Urine',\n 'LG51020-2': 'Albumin/Creatinine|MRto|Pt|ANYUrine',\n },\n method: null,\n property: 'MRto',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '96259-7': {\n component: 'Cholesterol.in LDL',\n display:\n 'Cholesterol in LDL [Mass/volume] in Serum or Plasma by Calculated by Martin-Hopkins',\n groups: {\n 'LG51050-9': 'Cholesterol.in LDL|Pt|Ser/Plas|Calculated.Martin-Hopkins',\n 'LG6248-1': 'Cholesterol.in LDL|MCnc|Pt|ANYBldSerPl',\n },\n method: 'Calculated.Martin-Hopkins',\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '96735-6': {\n component: 'Lipoprotein.beta.subparticle.medium',\n display: 'Lipoprotein.beta.subparticle.medium [Moles/volume] in Serum',\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser',\n time: 'Pt',\n },\n '9830-1': {\n component: 'Cholesterol.total/Cholesterol.in HDL',\n display: 'Cholesterol.total/Cholesterol in HDL [Mass Ratio] in Serum or Plasma',\n method: null,\n property: 'MRto',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '98979-8': {\n component: 'Glomerular filtration rate',\n display:\n 'Glomerular filtration rate [Volume Rate/Area] in Serum, Plasma or Blood by Creatinine-based formula (CKD-EPI 2021)/1.73 sq M',\n groups: {\n 'LG50986-5': 'Glomerular filtration rate|ArVRat|Pt|ANYBldSerPl',\n },\n method: 'Creatinine-based formula (CKD-EPI 2021)/1.73 sq M',\n property: 'ArVRat',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas/Bld',\n time: 'Pt',\n },\n '99620-7': {\n component: 'Fatty acids.omega 3',\n display: 'Omega 3 fatty acids (w3) [Moles/volume] in RBC.lysate',\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'RBC.lysate',\n time: 'Pt',\n },\n '99621-5': {\n component: 'Fatty acids.omega 6',\n display: 'Omega 6 fatty acids (w6) [Moles/volume] in RBC.lysate',\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'RBC.lysate',\n time: 'Pt',\n },\n },\n};\n","/**\n * Os eixos e os grupos LOINC de cada código do catálogo, como o servidor\n * oficial os publica, conferidos todo mês pelo `scripts/verify-loinc.ts`.\n *\n * Os dados vêm de `loinc-snapshot.generated.ts`, cópia do\n * `scripts/loinc-snapshot.json` feita pelo gerador. Toda leitura daqui carrega\n * o código e o display juntos, e quem republicar deve levar `LOINC_SNAPSHOT._notice`.\n */\nimport { LOINC_SNAPSHOT } from './loinc-snapshot.generated';\n\n/** Um código LOINC no snapshot, com os eixos na grafia em que o LOINC os exibe. */\nexport interface LoincEntry {\n component: string | null;\n display: string;\n /** LOINC Groups (`LG…`) a que o código pertence, com o nome de cada um. */\n groups?: Record<string, string>;\n /** Único eixo opcional: a maioria dos códigos não afirma método. */\n method: string | null;\n property: string | null;\n scale: string | null;\n status: string | null;\n system: string | null;\n time: string | null;\n}\n\nexport interface LoincSnapshot {\n _checkedAt: string;\n _loincVersion: string | null;\n /** Aviso da seção 10.1 da licença do LOINC. */\n _notice: string;\n codes: Record<string, LoincEntry>;\n}\n\nexport { LOINC_SNAPSHOT };\n\n/** Os eixos de um código do catálogo, ou `undefined` se ele não está no snapshot. */\nexport function getLoincEntry(loinc: string): LoincEntry | undefined {\n return LOINC_SNAPSHOT.codes[loinc];\n}\n","/**\n * Registro de decisão de cada mapeamento LOINC do catálogo.\n *\n * O catálogo em `biomarkers.ts` guarda a conclusão (o código). Este arquivo\n * guarda por que aquele código e não outro: o que o laudo mostrou, o que\n * decidiu, os irmãos descartados e quem revisou. É o diff que uma revisão de\n * mapeamento lê.\n *\n * A maioria das entradas é `nameOnly`: o código foi escolhido pelo nome do\n * exame, sem registro de unidade, método, material ou bula, e ninguém revisou\n * de fora. É o registro honesto do que existe, e não justificativa inventada.\n * As entradas com evidência vieram dos comentários em `biomarkers.ts` que já\n * documentavam a troca. `reviewer` fica vazio até uma revisão independente.\n *\n * `loinc` repete o código do catálogo de propósito: trocar o código em\n * `biomarkers.ts` sem tocar aqui falha em `mapping-decisions.test.ts`, e a\n * troca chega à revisão com o registro ao lado.\n *\n * Sem import em runtime: o `scripts/verify-loinc.ts` lê este arquivo direto com\n * o type stripping do Node, que não resolve import sem extensão. A ficha que\n * junta registro, catálogo e eixos fica em `mapping-sheet.ts`.\n */\n/** O que o laudo mostrou e pesou na escolha do código. */\nexport type MappingEvidence = 'assay-insert' | 'method-line' | 'name' | 'specimen' | 'unit';\n\nexport interface RejectedSibling {\n loinc: string;\n reason: string;\n}\n\nexport interface MappingDecision {\n evidence: MappingEvidence[];\n /** O código escolhido. Tem que ser o `loinc` do biomarcador no catálogo. */\n loinc: string;\n /** Versão do LOINC em que a revisão conferiu o código. */\n loincVersion?: string;\n note?: string;\n reviewedAt?: string;\n reviewer?: string;\n /** Qual evidência decidiu. Está sempre em `evidence`. */\n settledBy: MappingEvidence;\n siblingsRejected: RejectedSibling[];\n}\n\n/**\n * Por que uma entrada não tem LOINC.\n *\n * - `no-concept`: procurado, e o LOINC não tem o conceito.\n * - `ambiguous`: há candidatos, e nenhum é a mesma grandeza.\n * - `pending-review`: ninguém registrou a busca.\n * - `not-lab`: fora do escopo de exame laboratorial.\n */\nexport type NoLoincReason = 'ambiguous' | 'no-concept' | 'not-lab' | 'pending-review';\n\nexport interface NoLoincDecision {\n note: string;\n reason: NoLoincReason;\n}\n\n/** Escolhido pelo nome, sem outra evidência registrada nem revisão. */\nfunction nameOnly(loinc: string): MappingDecision {\n return { evidence: ['name'], loinc, settledBy: 'name', siblingsRejected: [] };\n}\n\nexport const MAPPING_DECISIONS: Record<string, MappingDecision> = {\n AA_EPA_Ratio: nameOnly('90909-3'),\n ABO_Group: nameOnly('883-9'),\n Adiponectin: nameOnly('47828-9'),\n AFP: nameOnly('1834-1'),\n Albumin: nameOnly('1751-7'),\n Albumin_Creatinine_Ratio: nameOnly('9318-7'),\n Albumin_Globulin_Ratio: nameOnly('1759-0'),\n AlkalinePhosphatase: nameOnly('6768-6'),\n ALT: nameOnly('1742-6'),\n AMH: nameOnly('38476-8'),\n Amylase: nameOnly('1798-8'),\n ANA_Screen: nameOnly('8061-4'),\n AntiThyroglobulin: nameOnly('8098-6'),\n AntiTPO: nameOnly('8099-4'),\n ApoA1: nameOnly('1869-7'),\n ApoB: nameOnly('1884-6'),\n APOE_Genotype: nameOnly('21619-2'),\n Appearance_Urine: nameOnly('5767-9'),\n AST: nameOnly('1920-8'),\n Bacteria_Urine: {\n loinc: '5769-5',\n evidence: ['name', 'unit'],\n settledBy: 'unit',\n siblingsRejected: [\n {\n loinc: '630-4',\n reason:\n 'urocultura, que identifica a espécie (nominal), e não a contagem do sedimento em /HPF',\n },\n ],\n },\n Basophils: nameOnly('706-2'),\n Basophils_Abs: nameOnly('704-7'),\n BetaHCG: nameOnly('19080-1'),\n BetaHydroxybutyrate: {\n loinc: '6873-4',\n evidence: ['name', 'unit'],\n settledBy: 'name',\n siblingsRejected: [\n {\n loinc: '53060-0',\n reason: 'butirilcarnitina (C4) em líquido amniótico: analito e material errados',\n },\n ],\n },\n Bilirubin_Urine: nameOnly('5770-3'),\n BilirubinDirect: nameOnly('1968-7'),\n BilirubinIndirect: nameOnly('1971-1'),\n BilirubinTotal: nameOnly('1975-2'),\n Blood_Urine: nameOnly('5794-3'),\n BMI: nameOnly('39156-5'),\n BNP: nameOnly('30934-4'),\n BodyFatPct: nameOnly('41982-0'),\n BodyWaterPct: nameOnly('101684-9'),\n BUN_Creatinine_Ratio: nameOnly('3097-3'),\n C3: nameOnly('4485-9'),\n C4: nameOnly('4498-2'),\n CA125: nameOnly('10334-1'),\n CA153: nameOnly('6875-9'),\n CA199: nameOnly('24108-3'),\n Calcium: nameOnly('17861-6'),\n CalfCircumference: nameOnly('107112-5'),\n CEA: nameOnly('2039-6'),\n Chloride: nameOnly('2075-0'),\n Cholesterol: nameOnly('2093-3'),\n Cholesterol_HDL_Ratio: nameOnly('9830-1'),\n CK: nameOnly('2157-6'),\n CO2: nameOnly('2028-9'),\n Color_Urine: nameOnly('5778-6'),\n Cortisol: nameOnly('2143-6'),\n Creatinine: nameOnly('2160-0'),\n Creatinine_Urine: nameOnly('2161-8'),\n CRP: nameOnly('1988-5'),\n CystatinC: nameOnly('33863-2'),\n DDimer: {\n loinc: '48065-7',\n evidence: ['name', 'unit'],\n settledBy: 'unit',\n siblingsRejected: [\n {\n loinc: '48066-5',\n reason: 'DDU, que vale cerca de metade do FEU que a faixa do catálogo pressupõe',\n },\n ],\n note: 'Laudo que imprime só \"ng/mL\" não diz a convenção; o FEU é o que a faixa pressupõe.',\n },\n DHEAS: nameOnly('2191-5'),\n DHT: nameOnly('1848-1'),\n eAG: nameOnly('27353-2'),\n eGFR: nameOnly('98979-8'),\n Eosinophils: nameOnly('713-8'),\n Eosinophils_Abs: nameOnly('711-2'),\n EPADPADHA: {\n loinc: '90911-9',\n evidence: ['name', 'unit'],\n settledBy: 'unit',\n siblingsRejected: [\n {\n loinc: '90908-5',\n reason:\n 'interpretação ordinal do mesmo valor (risco alto, moderado, baixo), e não o número',\n },\n ],\n },\n ESR: nameOnly('30341-2'),\n Estradiol: nameOnly('2243-4'),\n FatMass: nameOnly('73708-0'),\n Ferritin: nameOnly('2276-4'),\n Fibrinogen: nameOnly('3255-7'),\n Folate: nameOnly('2284-8'),\n FSH: nameOnly('15067-2'),\n GGT: nameOnly('2324-2'),\n Gliadin_Deamidated_IgA: nameOnly('63453-5'),\n Gliadin_Deamidated_IgG: nameOnly('63459-2'),\n Globulin: nameOnly('2336-6'),\n Glucose: {\n loinc: '2345-7',\n evidence: ['name'],\n settledBy: 'name',\n siblingsRejected: [\n {\n loinc: '1558-6',\n reason: 'afirma jejum (Glucose^post CFst), e a grafia \"Glicose\" não declara jejum',\n },\n ],\n },\n Glucose_Fasting: {\n loinc: '1558-6',\n evidence: ['name'],\n settledBy: 'name',\n siblingsRejected: [{ loinc: '2345-7', reason: 'não afirma jejum, e a grafia declara' }],\n },\n Glucose_Urine: nameOnly('5792-7'),\n HbA1c: nameOnly('4548-4'),\n Hct: nameOnly('4544-3'),\n HDL: nameOnly('2085-9'),\n HDL_Large: nameOnly('43729-3'),\n Hgb: nameOnly('718-7'),\n HOMA_IR: nameOnly('47214-2'),\n Homocysteine: nameOnly('13965-9'),\n HyalineCasts_Urine: nameOnly('5796-8'),\n IgA: nameOnly('2458-8'),\n IgE_E1_CatDander: nameOnly('6833-8'),\n IgE_GX1_Grasses: nameOnly('30189-5'),\n IgE_Total: nameOnly('19113-0'),\n IgG: nameOnly('2465-3'),\n IgM: nameOnly('2472-9'),\n INR: nameOnly('6301-6'),\n Insulin: nameOnly('20448-7'),\n Iron: nameOnly('2498-4'),\n Ketones_Urine: nameOnly('5797-6'),\n LDH: nameOnly('14804-9'),\n LDL: {\n loinc: '2089-1',\n evidence: ['name'],\n settledBy: 'name',\n siblingsRejected: [],\n note: 'Código sem método. A linha de método do laudo escolhe a variante (13457-7, 18262-6, 96259-7).',\n },\n LDL_Medium: nameOnly('96735-6'),\n LDL_ParticleNumber: nameOnly('54434-6'),\n LDL_Pattern: nameOnly('35505-7'),\n LDL_Peak_Size: nameOnly('17782-4'),\n LDL_Small: nameOnly('43727-7'),\n Lead: nameOnly('77307-7'),\n Leptin: nameOnly('21365-2'),\n LeukocyteEsterase_Urine: nameOnly('5799-2'),\n Leukocytes_Urine: nameOnly('5821-4'),\n LH: nameOnly('10501-5'),\n Lipase: nameOnly('3040-3'),\n Lipoprotein_a: {\n loinc: '43583-4',\n evidence: ['name', 'unit'],\n settledBy: 'unit',\n siblingsRejected: [\n {\n loinc: '10835-7',\n reason:\n 'massa/volume (mg/dL), incompatível com o nmol/L declarado; a SBC 2025 recomenda ensaio independente de isoforma em nmol/L',\n },\n ],\n },\n Lymphocytes: nameOnly('736-9'),\n Lymphocytes_Abs: nameOnly('731-0'),\n Magnesium: nameOnly('19123-9'),\n Magnesium_RBC: nameOnly('26746-8'),\n MCH: nameOnly('785-6'),\n MCHC: nameOnly('786-4'),\n MCV: nameOnly('787-2'),\n Mercury: nameOnly('5685-3'),\n Microalbumin_Urine: nameOnly('14957-5'),\n MMA: nameOnly('13964-2'),\n Monocytes: nameOnly('5905-5'),\n Monocytes_Abs: nameOnly('742-7'),\n MPV: nameOnly('32623-1'),\n MuscleMass: nameOnly('73964-9'),\n Neutrophils: nameOnly('770-8'),\n Neutrophils_Abs: nameOnly('751-8'),\n Nitrite_Urine: nameOnly('5802-4'),\n NonHDL_Cholesterol: nameOnly('43396-1'),\n NTproBNP: nameOnly('33762-6'),\n Omega3_DHA: {\n loinc: '90914-3',\n evidence: ['name', 'unit'],\n settledBy: 'unit',\n siblingsRejected: [],\n note: 'Fração do total de ácidos graxos (painel 90918-4), que é o % impresso.',\n },\n Omega3_DPA: {\n loinc: '90913-5',\n evidence: ['name', 'unit'],\n settledBy: 'unit',\n siblingsRejected: [],\n note: 'Fração do total de ácidos graxos (painel 90918-4), que é o % impresso.',\n },\n Omega3_EPA: {\n loinc: '90912-7',\n evidence: ['name', 'unit'],\n settledBy: 'unit',\n siblingsRejected: [],\n note: 'Fração do total de ácidos graxos (painel 90918-4), que é o % impresso.',\n },\n Omega3_Total: {\n loinc: '99620-7',\n evidence: ['name'],\n settledBy: 'name',\n siblingsRejected: [],\n note: 'Moles/volume em RBC.lysate, e o laudo imprime %: não há código de fração para o total.',\n },\n Omega6_AA: {\n loinc: '90916-8',\n evidence: ['name', 'unit'],\n settledBy: 'unit',\n siblingsRejected: [],\n note: 'Fração do total de ácidos graxos (painel 90918-4), que é o % impresso.',\n },\n Omega6_LA: {\n loinc: '90917-6',\n evidence: ['name', 'unit'],\n settledBy: 'unit',\n siblingsRejected: [],\n note: 'Fração do total de ácidos graxos (painel 90918-4), que é o % impresso.',\n },\n Omega6_Omega3_Ratio: nameOnly('90910-1'),\n Omega6_Total: {\n loinc: '99621-5',\n evidence: ['name'],\n settledBy: 'name',\n siblingsRejected: [\n {\n loinc: '35177-5',\n reason:\n 'ácidos graxos poli-insaturados totais, ômega-3 e ômega-6 somados: outro componente',\n },\n ],\n note: 'Moles/volume em RBC.lysate, e o laudo imprime %: não há código de fração para o total.',\n },\n pH_Urine: nameOnly('5803-2'),\n PhaseAngle: {\n loinc: '107160-4',\n evidence: ['name'],\n settledBy: 'name',\n siblingsRejected: [],\n note: 'Único código de ângulo de fase; declara razão e o aparelho imprime graus.',\n },\n Platelets: nameOnly('777-3'),\n Potassium: nameOnly('2823-3'),\n Progesterone: nameOnly('2839-9'),\n Prolactin: nameOnly('2842-3'),\n Protein_Urine: nameOnly('5804-0'),\n ProthrombinTime: nameOnly('5902-2'),\n PSA: nameOnly('2857-1'),\n PSA_Free: nameOnly('10886-0'),\n PSA_FreeRatio: nameOnly('12841-3'),\n PTH: nameOnly('2731-8'),\n RBC: nameOnly('789-8'),\n RBC_Urine: {\n loinc: '13945-1',\n evidence: ['name', 'unit'],\n settledBy: 'unit',\n siblingsRejected: [\n { loinc: '5808-1', reason: 'o mesmo exame em #/volume (por mL), e o laudo imprime /HPF' },\n ],\n },\n RDW: nameOnly('788-0'),\n Reticulocytes: nameOnly('4679-7'),\n Rh_Type: nameOnly('10331-7'),\n RheumatoidFactor: nameOnly('11572-5'),\n Selenium: nameOnly('5724-0'),\n SHBG: nameOnly('13967-5'),\n SkinfoldAbdominal: nameOnly('8355-0'),\n SkinfoldThigh: nameOnly('8353-5'),\n SkinfoldTriceps: nameOnly('8354-3'),\n Sodium: nameOnly('2951-2'),\n SpecificGravity_Urine: nameOnly('5811-5'),\n SquamousEpithelial_Urine: nameOnly('11277-1'),\n T3Free: nameOnly('3051-0'),\n T4Free: nameOnly('3024-7'),\n T4Total: nameOnly('3026-2'),\n Testosterone: nameOnly('2986-8'),\n TestosteroneFree: nameOnly('2991-8'),\n Thyroglobulin: nameOnly('3013-0'),\n TIBC: nameOnly('2500-7'),\n TotalBodyWater: {\n loinc: '101683-1',\n evidence: ['name', 'unit'],\n settledBy: 'name',\n siblingsRejected: [],\n note: 'Único código de água corporal total; é massa (kg) e o aparelho imprime litros, o mesmo número para água.',\n },\n TotalMass: nameOnly('29463-7'),\n TotalProtein: nameOnly('2885-2'),\n TransferrinSaturation: nameOnly('2502-3'),\n Triglycerides: nameOnly('2571-8'),\n TroponinI: {\n loinc: '49563-0',\n evidence: ['name', 'unit'],\n settledBy: 'unit',\n siblingsRejected: [],\n note: '49563-0 afirma o ensaio de alta sensibilidade; troponina I convencional pede 10839-9, sem método.',\n },\n TroponinT: {\n loinc: '6598-7',\n evidence: ['name', 'unit'],\n settledBy: 'name',\n siblingsRejected: [],\n note: '6598-7 não afirma método e cobre o ensaio convencional e o ultrassensível; o código hs entra como variante por método.',\n },\n TSH: nameOnly('3016-3'),\n tTG_IgA: nameOnly('31017-7'),\n tTG_IgG: nameOnly('32998-7'),\n Urea: nameOnly('3091-6'),\n UricAcid: nameOnly('3084-1'),\n Urobilinogen_Urine: nameOnly('20405-7'),\n VitaminA: nameOnly('2923-1'),\n VitaminB12: nameOnly('2132-9'),\n VitaminC: nameOnly('1903-4'),\n VitaminD: {\n loinc: '62292-8',\n evidence: ['name', 'assay-insert'],\n settledBy: 'assay-insert',\n siblingsRejected: [\n { loinc: '1989-3', reason: 'só a fração D3; os imunoensaios reportam D2 + D3' },\n ],\n },\n VLDL: nameOnly('13458-5'),\n WaistCircumference: nameOnly('8280-0'),\n WBC: nameOnly('6690-2'),\n Zinc: {\n loinc: '5763-8',\n evidence: ['name', 'specimen'],\n settledBy: 'specimen',\n siblingsRejected: [\n { loinc: '8245-3', reason: 'sangue total, outro material com faixa própria' },\n ],\n },\n};\n\nexport const NO_LOINC_DECISIONS: Record<string, NoLoincDecision> = {\n AndroidFatPct: {\n reason: 'no-concept',\n note: 'DEXA: o LOINC não tem o conceito para corpo inteiro ou região.',\n },\n AndroidGynoidRatio: {\n reason: 'no-concept',\n note: 'DEXA: o LOINC não tem o conceito para corpo inteiro ou região.',\n },\n AorticValveCalcium: {\n reason: 'pending-review',\n note: 'Escore de cálcio por tomografia; nenhuma busca registrada.',\n },\n ArmsFatMass: {\n reason: 'no-concept',\n note: 'DEXA: o LOINC não tem o conceito para corpo inteiro ou região.',\n },\n ArmsLeanMass: {\n reason: 'no-concept',\n note: 'DEXA: o LOINC não tem o conceito para corpo inteiro ou região.',\n },\n BMC: {\n reason: 'no-concept',\n note: 'DEXA: o LOINC não tem o conceito para corpo inteiro ou região.',\n },\n BMD_Total: {\n reason: 'no-concept',\n note: 'O LOINC só tem densitometria por sítio, não corpo inteiro.',\n },\n BasalMetabolicRate: {\n reason: 'ambiguous',\n note: 'Candidatos são índice (50042-1) ou RMR medido ou previsto (82278-3, 82286-6), e o aparelho estima TMB.',\n },\n CAC: {\n reason: 'pending-review',\n note: 'Escore de cálcio por tomografia; nenhuma busca registrada.',\n },\n CAC_LAD: {\n reason: 'pending-review',\n note: 'Escore de cálcio por tomografia; nenhuma busca registrada.',\n },\n CAC_LCX: {\n reason: 'pending-review',\n note: 'Escore de cálcio por tomografia; nenhuma busca registrada.',\n },\n CAC_LMA: {\n reason: 'pending-review',\n note: 'Escore de cálcio por tomografia; nenhuma busca registrada.',\n },\n CAC_Percentile: {\n reason: 'pending-review',\n note: 'Escore de cálcio por tomografia; nenhuma busca registrada.',\n },\n CAC_RCA: {\n reason: 'pending-review',\n note: 'Escore de cálcio por tomografia; nenhuma busca registrada.',\n },\n ConicityIndex: { reason: 'no-concept', note: 'Índice derivado, sem conceito próprio.' },\n ECWToTBWRatio: { reason: 'no-concept', note: 'Razão derivada, sem conceito próprio.' },\n Estrone: {\n reason: 'no-concept',\n note: 'Em soro só há a fração não conjugada (2261-6); não há estrona total.',\n },\n ExtracellularWater: { reason: 'no-concept', note: '\"extracellular water\" não devolve código.' },\n FatFreeMass: {\n reason: 'no-concept',\n note: 'DEXA: o LOINC não tem o conceito para corpo inteiro ou região.',\n },\n GynoidFatPct: {\n reason: 'no-concept',\n note: 'DEXA: o LOINC não tem o conceito para corpo inteiro ou região.',\n },\n IntracellularWater: { reason: 'no-concept', note: '\"intracellular water\" não devolve código.' },\n LeanMass: {\n reason: 'no-concept',\n note: 'Massa magra não é massa muscular (73964-9); não há LOINC para massa magra.',\n },\n LegsFatMass: {\n reason: 'no-concept',\n note: 'DEXA: o LOINC não tem o conceito para corpo inteiro ou região.',\n },\n LegsLeanMass: {\n reason: 'no-concept',\n note: 'DEXA: o LOINC não tem o conceito para corpo inteiro ou região.',\n },\n MuscleMassIndex: {\n reason: 'no-concept',\n note: 'Índice derivado de massa muscular total; os cortes publicados são sobre massa apendicular.',\n },\n ResidualMass: {\n reason: 'no-concept',\n note: 'Conceito de fracionamento antropométrico, sem código.',\n },\n SkinfoldChest: { reason: 'no-concept', note: 'O LOINC só tem dobra de tríceps, coxa e cintura.' },\n SkinfoldMidaxillary: {\n reason: 'no-concept',\n note: 'O LOINC só tem dobra de tríceps, coxa e cintura.',\n },\n SkinfoldSubscapular: {\n reason: 'no-concept',\n note: 'O LOINC só tem dobra de tríceps, coxa e cintura.',\n },\n SkinfoldSuprailiac: {\n reason: 'no-concept',\n note: 'O LOINC só tem dobra de tríceps, coxa e cintura.',\n },\n TScore_Total: {\n reason: 'no-concept',\n note: 'O LOINC só tem densitometria por sítio, não corpo inteiro.',\n },\n TrunkFatMass: {\n reason: 'no-concept',\n note: 'DEXA: o LOINC não tem o conceito para corpo inteiro ou região.',\n },\n TrunkLeanMass: {\n reason: 'no-concept',\n note: 'DEXA: o LOINC não tem o conceito para corpo inteiro ou região.',\n },\n VATMass: {\n reason: 'no-concept',\n note: 'DEXA: o LOINC não tem o conceito para corpo inteiro ou região.',\n },\n VATVolume: {\n reason: 'no-concept',\n note: 'DEXA: o LOINC não tem o conceito para corpo inteiro ou região.',\n },\n VisceralFatLevel: {\n reason: 'no-concept',\n note: 'Índice de 1 a 20; 73707-2 é área, outra grandeza.',\n },\n WaistToHeightRatio: { reason: 'no-concept', note: '\"waist to height\" não devolve código.' },\n ZScore_Total: {\n reason: 'no-concept',\n note: 'O LOINC só tem densitometria por sítio, não corpo inteiro.',\n },\n};\n\nexport function getMappingDecision(code: string): MappingDecision | undefined {\n return MAPPING_DECISIONS[code];\n}\n\nexport function getNoLoincDecision(code: string): NoLoincDecision | undefined {\n return NO_LOINC_DECISIONS[code];\n}\n","/**\n * A ficha de um mapeamento LOINC no formato da planilha de um mapeador: nome\n * local, unidade, material, método, candidatos com os eixos, escolhido,\n * rejeitados, grupos, revisor e versão. É o que `fhir-bio decision` imprime.\n */\nimport { type BiomarkerDefinition, getDefinitionByCode, getDefinitionByLoinc } from './biomarkers';\nimport { getLoincEntry, type LoincEntry } from './loinc-axes';\nimport {\n getMappingDecision,\n getNoLoincDecision,\n type MappingDecision,\n type NoLoincDecision,\n} from './mapping-decisions';\n\n/** Um código candidato com os eixos que o snapshot guarda dele. */\nexport interface MappingCandidate {\n axes?: LoincEntry;\n loinc: string;\n role: 'chosen' | 'method-variant' | 'rejected';\n /** Pista impressa da variante, ou o motivo da rejeição. */\n why?: string;\n}\n\n/** A ficha de um mapeamento, no formato da planilha de um mapeador. */\nexport interface MappingSheet {\n candidates: MappingCandidate[];\n code: string;\n decision?: MappingDecision;\n /** LOINC Groups do código escolhido. */\n groups: Record<string, string>;\n localNames: string[];\n method: string | null;\n noLoinc?: NoLoincDecision;\n specimen: string | null;\n unit?: string;\n}\n\n/** Aceita o código interno ou qualquer LOINC que resolva para o biomarcador. */\nexport function getMappingSheet(codeOrLoinc: string): MappingSheet | undefined {\n const def: BiomarkerDefinition | undefined =\n getDefinitionByCode(codeOrLoinc) ?? getDefinitionByLoinc(codeOrLoinc);\n if (!def) return undefined;\n\n const decision = getMappingDecision(def.code);\n const chosen = def.loinc ? getLoincEntry(def.loinc) : undefined;\n const candidates: MappingCandidate[] = [];\n if (def.loinc) candidates.push({ axes: chosen, loinc: def.loinc, role: 'chosen' });\n for (const v of def.methodVariants ?? []) {\n const cues = [...v.cues.pt, ...v.cues.en];\n candidates.push({\n axes: getLoincEntry(v.loinc),\n loinc: v.loinc,\n role: 'method-variant',\n why: cues.length ? cues.join('; ') : undefined,\n });\n }\n for (const s of decision?.siblingsRejected ?? []) {\n candidates.push({\n axes: getLoincEntry(s.loinc),\n loinc: s.loinc,\n role: 'rejected',\n why: s.reason,\n });\n }\n\n return {\n candidates,\n code: def.code,\n decision,\n groups: chosen?.groups ?? {},\n localNames: def.names.pt,\n method: chosen?.method ?? null,\n noLoinc: getNoLoincDecision(def.code),\n specimen: chosen?.system ?? null,\n unit: def.unit,\n };\n}\n","/**\n * Material impresso contra o sistema LOINC do código.\n *\n * O laudo imprime o material de cada exame (\"Material: Urina de 24 horas\",\n * \"Material: Soro\"), e o código LOINC carrega o dele no eixo System. Quando os\n * dois discordam, o código está errado para aquele resultado: \"Sódio\" numa\n * seção de urina casa pelo nome com o sódio sérico, e sair com o código de soro\n * afirma uma grandeza que o laboratório não mediu.\n *\n * A comparação é por classe, sangue ou urina, e não por código de material. O\n * `specimenTypeCoding` não casa \"Urina de 24 horas\", de propósito, porque não\n * inventa sinônimo para codificar `Specimen.type`. Para barrar um código basta\n * saber que é urina, e a primeira palavra diz isso sem afirmar mais nada.\n *\n * Material que não começa por uma palavra conhecida, e sistema fora das duas\n * classes (antropometria, `Bld/Tiss`), não barram nada: sem classe dos dois\n * lados não há conflito a afirmar.\n */\nimport { getLoincEntry } from './loinc-axes';\n\nexport type SpecimenClass = 'blood' | 'urine';\n\n/** Palavra inicial do material impresso, já sem acento e em minúsculas. */\nconst CLASSE_DO_MATERIAL: Record<string, SpecimenClass> = {\n plasma: 'blood',\n sangue: 'blood',\n soro: 'blood',\n urina: 'urine',\n};\n\n/** Sistemas do LOINC por classe. `Bld/Tiss` fica de fora: não é só sangue. */\nconst CLASSE_DO_SISTEMA: Record<string, SpecimenClass> = {\n Bld: 'blood',\n BldV: 'blood',\n Plas: 'blood',\n PPP: 'blood',\n RBC: 'blood',\n 'RBC.lysate': 'blood',\n Ser: 'blood',\n 'Ser/Plas': 'blood',\n 'Ser/Plas/Bld': 'blood',\n Urine: 'urine',\n 'Urine sed': 'urine',\n};\n\nconst primeiraPalavra = (texto: string): string =>\n texto\n .replace(/\\p{Cf}/gu, '')\n .normalize('NFD')\n .replace(/[̀-ͯ]/g, '')\n .toLowerCase()\n .trim()\n .split(/[^a-z]+/)[0] ?? '';\n\n/** Classe do material impresso, ou `undefined` quando a palavra inicial não diz. */\nexport function specimenClassOf(material: string): SpecimenClass | undefined {\n return CLASSE_DO_MATERIAL[primeiraPalavra(material)];\n}\n\n/** Classe do eixo System do código, ou `undefined` fora do snapshot ou das duas classes. */\nexport function loincSpecimenClass(loinc: string): SpecimenClass | undefined {\n const system = getLoincEntry(loinc)?.system;\n return system ? CLASSE_DO_SISTEMA[system] : undefined;\n}\n\nexport interface SpecimenMismatch {\n /** Classe do eixo System do código. */\n code: SpecimenClass;\n loinc: string;\n /** Classe do material impresso. */\n material: SpecimenClass;\n reason: 'specimen-mismatch';\n system: string;\n}\n\n/**\n * O conflito entre o material impresso e o código, ou `null` sem conflito\n * afirmável. Quem chama decide o que fazer com o resultado, e a decisão que não\n * existe é trocar o código por um palpite: conflito é lacuna, e sai como tal.\n */\nexport function specimenMismatch(material: string, loinc: string): SpecimenMismatch | null {\n const doMaterial = specimenClassOf(material);\n const doCodigo = loincSpecimenClass(loinc);\n if (!doMaterial || !doCodigo || doMaterial === doCodigo) return null;\n return {\n code: doCodigo,\n loinc,\n material: doMaterial,\n reason: 'specimen-mismatch',\n system: getLoincEntry(loinc)?.system ?? '',\n };\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/fhir-brasil/fhir-brasil/packages/core/dist/index.cjs","../src/category-groups.ts","../src/intervention-converter.ts","../src/dexa-zone-data.ts","../src/screening-intervals.ts","../src/i18n.ts","../src/identifiers.ts","../src/extension-urls.ts","../src/specimen-types.ts","../src/loinc-snapshot.generated.ts","../src/loinc-axes.ts","../src/mapping-decisions.ts","../src/mapping-sheet.ts","../src/specimen-gate.ts"],"names":[],"mappings":"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C;AACd,EAAA;AACE,EAAA;AACjC;AAW2C;AACS,EAAA;AACE,EAAA;AACL,EAAA;AACjD;AHqNoD;AACA;AI3TqB;AAAA;AAEvE,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AAAA;AAGA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AAAA;AAGA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACA,EAAA;AACY,IAAA;AACM,IAAA;AACR,IAAA;AACA,IAAA;AACV,EAAA;AACF;AAKiG;AAC7C,EAAA;AACpD;AAOkC;AACkB,EAAA;AACpD;AAK+D;AACf,EAAA;AACxB,EAAA;AAEgB,EAAA;AACW,EAAA;AAC1C,EAAA;AACT;AAQE;AAE4C,EAAA;AACtB,EAAA;AACE,EAAA;AAC1B;AAOE;AAE4C,EAAA;AACM,IAAA;AAC1B,IAAA;AACmB,IAAA;AAC1C,EAAA;AACH;AAOE;AAG4C,EAAA;AACtB,EAAA;AAEgB,EAAA;AACW,EAAA;AACnD;AJoRoD;AACA;AKteJ;AAML;AAAA;AAEhC,EAAA;AACI,EAAA;AAAA;AAED,EAAA;AAAA;AAED,EAAA;AACC,EAAA;AACA,EAAA;AACD,EAAA;AACF,EAAA;AACG,EAAA;AACD,EAAA;AACF,EAAA;AACF,EAAA;AACG,EAAA;AAEA,EAAA;AAAA;AAEF,EAAA;AACD,EAAA;AACG,EAAA;AACJ,EAAA;AACC,EAAA;AACC,EAAA;AACE,EAAA;AACA,EAAA;AACA,EAAA;AAEC,EAAA;AACF,EAAA;AAEC,EAAA;AACD,EAAA;AACX;AAMoD;AACR,EAAA;AAC5C;AAW+D;AACxB,EAAA;AACY,EAAA;AACnD;AASoE;AAC5B,EAAA;AACxC;AAWwF;AACjD,EAAA;AACjB,EAAA;AACS,IAAA;AAC7B,EAAA;AAC+C,EAAA;AACjD;AAS6F;AAC9C,EAAA;AAC/C;ALuboD;AACA;AMxhBjC;AACA;AAKwB;AACX,EAAA;AAChC;AAQkD;AACnB,EAAA;AAEI,EAAA;AAGO,EAAA;AAG9B,EAAA;AACkB,EAAA;AACO,IAAA;AACnC,EAAA;AAC6B,EAAA;AACK,EAAA;AACU,EAAA;AAGtC,EAAA;AACuB,EAAA;AACM,IAAA;AACnC,EAAA;AACyB,EAAA;AACS,EAAA;AACW,EAAA;AAEtC,EAAA;AACT;AAWkD;AACnB,EAAA;AAEI,EAAA;AAEN,EAAA;AAGuB,EAAA;AAGxC,EAAA;AACmB,EAAA;AACM,IAAA;AACnC,EAAA;AACoB,EAAA;AACtB;AAQ+C;AAChB,EAAA;AACI,EAAA;AACiB,EAAA;AACpD;AAQ+C;AAChB,EAAA;AACI,EAAA;AACiB,EAAA;AACpD;AASiE;AACxC,EAAA;AACS,IAAA;AAChC,EAAA;AACO,EAAA;AACG,IAAA;AACH,IAAA;AACgB,IAAA;AACvB,EAAA;AACF;AASiE;AACxC,EAAA;AACS,IAAA;AAChC,EAAA;AACO,EAAA;AACG,IAAA;AACH,IAAA;AACgB,IAAA;AACvB,EAAA;AACF;ANydoD;AACA;AO5lBxB;AAEuC;AAS7B;AAAA;AAEO,EAAA;AAAA;AAEP,EAAA;AAAkB;AAEZ,EAAA;AAAuB;AAE3B,EAAA;AAAmB;AAEV,EAAA;AAAA;AAEH,EAAA;AAAA;AAET,EAAA;AACrC;APqlBoD;AACA;AQpmBZ;AAUA;AAW0B;AACjC,EAAA;AACG,EAAA;AACI,EAAA;AACP,EAAA;AACE,EAAA;AACA,EAAA;AACnC;AAoBkB;AAIQ;AAOK;AACM,EAAA;AAChB,IAAA;AACQ,IAAA;AAC1B,EAAA;AACH;AAUE;AR8iBkD;AACA;AS5oBP;AAC/B,EAAA;AACG,EAAA;AAEb,EAAA;AACK,EAAA;AACO,IAAA;AACC,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACY,IAAA;AACC,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACK,QAAA;AACb,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACK,QAAA;AACb,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACY,IAAA;AACC,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACY,IAAA;AACC,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACF,QAAA;AACb,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AAET,MAAA;AACM,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACK,QAAA;AACb,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AAET,MAAA;AACM,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACC,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACC,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AAET,MAAA;AACM,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACF,QAAA;AACb,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACC,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACC,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AAEP,MAAA;AAEA,MAAA;AACM,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AAET,MAAA;AACM,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACK,QAAA;AACb,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACM,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACK,QAAA;AACb,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACS,IAAA;AACI,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AAET,MAAA;AACM,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AAET,MAAA;AACM,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACO,QAAA;AACA,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AAET,MAAA;AACM,MAAA;AACO,QAAA;AACD,QAAA;AACd,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACU,IAAA;AACG,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AAET,MAAA;AACM,MAAA;AACO,QAAA;AACf,MAAA;AACQ,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACW,IAAA;AACE,MAAA;AACF,MAAA;AACD,MAAA;AACE,MAAA;AACH,MAAA;AACC,MAAA;AACA,MAAA;AACF,MAAA;AACR,IAAA;AACF,EAAA;AACF;ATmoBoD;AACA;AU/iGiB;AAClC,EAAA;AACnC;AVijGoD;AACA;AW5hGF;AACD,EAAA;AACjD;AAEkE;AAChC,EAAA;AACL,EAAA;AACI,EAAA;AACT,EAAA;AACI,EAAA;AACiB,EAAA;AACF,EAAA;AACH,EAAA;AAChB,EAAA;AACC,EAAA;AACG,EAAA;AACG,EAAA;AACO,EAAA;AACV,EAAA;AACF,EAAA;AACD,EAAA;AACU,EAAA;AACE,EAAA;AACb,EAAA;AACN,EAAA;AACP,IAAA;AACkB,IAAA;AACd,IAAA;AACO,IAAA;AAChB,MAAA;AACS,QAAA;AAEL,QAAA;AACJ,MAAA;AACF,IAAA;AACF,EAAA;AAC2B,EAAA;AACI,EAAA;AACJ,EAAA;AACN,EAAA;AACZ,IAAA;AACkB,IAAA;AACd,IAAA;AACO,IAAA;AAChB,MAAA;AACS,QAAA;AACC,QAAA;AACV,MAAA;AACF,IAAA;AACF,EAAA;AACkC,EAAA;AACA,EAAA;AACE,EAAA;AACH,EAAA;AACH,EAAA;AACP,EAAA;AACA,EAAA;AACO,EAAA;AACG,EAAA;AACM,EAAA;AAClB,EAAA;AACA,EAAA;AACI,EAAA;AACD,EAAA;AACC,EAAA;AACE,EAAA;AACW,EAAA;AAChB,EAAA;AACK,EAAA;AACG,EAAA;AACU,EAAA;AACnB,EAAA;AACC,EAAA;AACQ,EAAA;AACH,EAAA;AACE,EAAA;AACM,EAAA;AACb,EAAA;AACO,EAAA;AACrB,EAAA;AACC,IAAA;AACkB,IAAA;AACd,IAAA;AACO,IAAA;AAChB,MAAA;AACS,QAAA;AACC,QAAA;AACV,MAAA;AACF,IAAA;AACM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CO,EAAA;AACI,EAAA;AACT,EAAA;AACM,EAAA;AACf;AAIa;AAQgE;AACzB,EAAA;AACpD;AAG6E;AACtC,EAAA;AACO,EAAA;AAC9C;AAiB2F;AAC9C,EAAA;AACF,EAAA;AACM,EAAA;AACxC,EAAA;AACC,IAAA;AACN,IAAA;AACU,IAAA;AACF,IAAA;AACgC,IAAA;AAC1C,EAAA;AACF;Ab4kHoD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/fhir-brasil/fhir-brasil/packages/core/dist/index.cjs","sourcesContent":[null,"/**\n * Agrupamento de categorias clínicas em 10 grupos de alto nível.\n *\n * `BiomarkerDefinition.category` armazena 20 sub-categorias (granularidade\n * fina, ex: `tireoide`, `pancreas`). Este módulo agrupa essas\n * sub-categorias em 10 buckets clínicos amplos para apresentação no\n * site, na API pública e em material de divulgação.\n *\n * As sub-categorias permanecem como fonte da verdade nos dados; este\n * agrupamento é uma camada derivada.\n */\n\nexport type CategoryGroup =\n | 'cardiovascular'\n | 'metabolico-endocrino'\n | 'renal-eletrolitico'\n | 'hepatico-biliar'\n | 'hematologico'\n | 'imunologico'\n | 'oncologico'\n | 'nutricional-ambiental'\n | 'saude-reprodutiva'\n | 'composicao-envelhecimento';\n\nexport interface CategoryGroupInfo {\n /** Rótulo em inglês */\n en: string;\n /** Rótulo em português */\n pt: string;\n /** Slug (kebab-case, sem acento) */\n slug: CategoryGroup;\n /** Sub-categorias da fonte agrupadas neste bucket */\n subcategories: readonly string[];\n}\n\nexport const CATEGORY_GROUPS: Record<CategoryGroup, CategoryGroupInfo> = {\n cardiovascular: {\n en: 'Cardiovascular',\n pt: 'Cardiovascular',\n slug: 'cardiovascular',\n subcategories: ['coracao'],\n },\n 'composicao-envelhecimento': {\n en: 'Body Composition & Aging',\n pt: 'Composição Corporal e Envelhecimento',\n slug: 'composicao-envelhecimento',\n subcategories: ['composicao-corporal', 'densidade-ossea', 'estresse-envelhecimento'],\n },\n hematologico: {\n en: 'Hematology',\n pt: 'Hematológico',\n slug: 'hematologico',\n subcategories: ['sangue'],\n },\n 'hepatico-biliar': {\n en: 'Hepatic & Biliary',\n pt: 'Hepático e Biliar',\n slug: 'hepatico-biliar',\n subcategories: ['figado'],\n },\n imunologico: {\n en: 'Immunology',\n pt: 'Imunológico',\n slug: 'imunologico',\n subcategories: ['autoimunidade', 'regulacao-imunologica'],\n },\n 'metabolico-endocrino': {\n en: 'Metabolic & Endocrine',\n pt: 'Metabólico e Endócrino',\n slug: 'metabolico-endocrino',\n subcategories: ['metabolico', 'pancreas', 'hormonios', 'tireoide'],\n },\n 'nutricional-ambiental': {\n en: 'Nutrition & Environmental Exposure',\n pt: 'Nutricional e Exposição Ambiental',\n slug: 'nutricional-ambiental',\n subcategories: ['nutrientes', 'toxinas-ambientais'],\n },\n oncologico: {\n en: 'Oncology',\n pt: 'Oncológico',\n slug: 'oncologico',\n subcategories: ['marcadores-tumorais'],\n },\n 'renal-eletrolitico': {\n en: 'Renal & Electrolytes',\n pt: 'Renal e Eletrolítico',\n slug: 'renal-eletrolitico',\n subcategories: ['rins', 'urina', 'eletrolitos'],\n },\n 'saude-reprodutiva': {\n en: 'Reproductive Health',\n pt: 'Saúde Reprodutiva',\n slug: 'saude-reprodutiva',\n subcategories: ['saude-feminina', 'saude-masculina'],\n },\n};\n\nconst SUBCATEGORY_TO_GROUP = new Map<string, CategoryGroup>();\nfor (const group of Object.values(CATEGORY_GROUPS)) {\n for (const sub of group.subcategories) {\n SUBCATEGORY_TO_GROUP.set(sub, group.slug);\n }\n}\n\n/**\n * Resolve a sub-categoria (granular) para o grupo de alto nível (10 buckets).\n */\nexport function getCategoryGroup(subcategory: string): CategoryGroup | undefined {\n return SUBCATEGORY_TO_GROUP.get(subcategory);\n}\n\n/**\n * Lista todas as sub-categorias mapeadas em algum grupo.\n */\nexport function listMappedSubcategories(): readonly string[] {\n return [...SUBCATEGORY_TO_GROUP.keys()];\n}\n","/**\n * FHIR Intervention Converter\n *\n * Converts interventions (medication, supplement, diet, exercise, sleep)\n * to FHIR R4 MedicationStatement and Observation resources.\n */\n\nimport { type Addressable, entryFullUrl } from './bundle-urls';\nimport { userProfileToFHIR } from './converter';\nimport type { FHIRBundle, FHIRMedicationStatement, FHIRObservation } from './fhir-types';\nimport type { InterventionData, UserProfileData } from './types';\n\n/**\n * Determine MedicationStatement/Observation status based on end date\n */\nfunction interventionStatus(endDate?: string): 'active' | 'completed' {\n if (!endDate) return 'active';\n return new Date(endDate) < new Date() ? 'completed' : 'active';\n}\n\n/**\n * LOINC-like codes for lifestyle observation types\n */\nconst LIFESTYLE_CODES: Record<string, { code: string; display: string }> = {\n diet: { code: '81259-4', display: 'Diet' },\n exercise: { code: '73985-4', display: 'Exercise activity' },\n sleep: { code: '93832-4', display: 'Sleep duration' },\n};\n\n/**\n * Convert medication/supplement intervention to FHIR MedicationStatement\n */\nexport function interventionToFHIRMedicationStatement(\n intervention: InterventionData,\n patientId: string,\n): Addressable<FHIRMedicationStatement> {\n const statement: Addressable<FHIRMedicationStatement> = {\n category: {\n coding: [\n {\n code: 'patientspecified',\n display: 'Patient Specified',\n system: 'http://terminology.hl7.org/CodeSystem/medication-statement-category',\n },\n ],\n },\n dateAsserted: intervention.startDate,\n effectivePeriod: {\n end: intervention.endDate,\n start: intervention.startDate,\n },\n id: `intervention-${intervention.interventionId}`,\n medicationCodeableConcept: {\n text: intervention.name,\n },\n resourceType: 'MedicationStatement',\n status: interventionStatus(intervention.endDate),\n subject: {\n reference: `Patient/${patientId}`,\n },\n };\n\n if (intervention.notes) {\n statement.note = [{ text: intervention.notes }];\n }\n\n return statement;\n}\n\n/**\n * Convert diet/exercise/sleep intervention to FHIR Observation (social-history)\n */\nexport function interventionToFHIRObservation(\n intervention: InterventionData,\n patientId: string,\n): Addressable<FHIRObservation> {\n const lifestyleCode = LIFESTYLE_CODES[intervention.type];\n\n const observation: Addressable<FHIRObservation> = {\n category: [\n {\n coding: [\n {\n code: 'social-history',\n display: 'Social History',\n system: 'http://terminology.hl7.org/CodeSystem/observation-category',\n },\n ],\n },\n ],\n code: {\n coding: lifestyleCode\n ? [\n {\n code: lifestyleCode.code,\n display: lifestyleCode.display,\n system: 'http://loinc.org',\n },\n ]\n : [],\n text: intervention.name,\n },\n effectivePeriod: {\n end: intervention.endDate,\n start: intervention.startDate,\n },\n id: `intervention-${intervention.interventionId}`,\n resourceType: 'Observation',\n status: 'final',\n subject: {\n reference: `Patient/${patientId}`,\n },\n valueString: intervention.name,\n };\n\n if (intervention.notes) {\n observation.note = [{ text: intervention.notes }];\n }\n\n return observation;\n}\n\n/**\n * Convert all interventions to a FHIR Bundle\n */\nexport function interventionsToFHIRBundle(\n interventions: InterventionData[],\n userProfile: UserProfileData,\n): FHIRBundle {\n const patientId = userProfile.userId;\n const fhirPatient = userProfileToFHIR(userProfile);\n\n const entries = interventions.map((intervention) => {\n const isMedication = intervention.type === 'medication' || intervention.type === 'supplement';\n const resource = isMedication\n ? interventionToFHIRMedicationStatement(intervention, patientId)\n : interventionToFHIRObservation(intervention, patientId);\n\n return { fullUrl: entryFullUrl(resource), resource };\n });\n\n return {\n entry: [{ fullUrl: entryFullUrl(fhirPatient), resource: fhirPatient }, ...entries],\n resourceType: 'Bundle',\n type: 'collection',\n };\n}\n","/**\n * Structured zone data for DEXA body composition and bone density charts.\n *\n * Body fat zones derived from Gallagher et al. Am J Clin Nutr 2000;72:694-701 (PMID: 10966886)\n * and ACSM Guidelines for Exercise Testing, 11th Ed (2021).\n *\n * T-Score zones from WHO criteria (Kanis JA, Osteoporos Int, PMID: 7696835).\n */\n\nexport interface BodyFatZone {\n ageMax: number;\n ageMin: number;\n color: string;\n fatPctMax: number;\n fatPctMin: number;\n label: string;\n sex: 'F' | 'M';\n}\n\ninterface AgeBracket {\n ageMax: number;\n ageMin: number;\n label: string;\n}\n\nconst AGE_BRACKETS: AgeBracket[] = [\n { ageMax: 25, ageMin: 18, label: '18-25' },\n { ageMax: 35, ageMin: 26, label: '26-35' },\n { ageMax: 45, ageMin: 36, label: '36-45' },\n { ageMax: 55, ageMin: 46, label: '46-55' },\n { ageMax: 99, ageMin: 56, label: '56+' },\n];\n\n// Zone boundaries per age bracket for men: [essential, athletic, fitness, average, obese]\n// Each value is the upper bound of the zone\nconst MALE_ZONES: number[][] = [\n [5, 10, 20, 25, 40],\n [5, 11, 21, 26, 40],\n [5, 12, 22, 27, 40],\n [5, 13, 23, 28, 40],\n [5, 14, 24, 29, 40],\n];\n\nconst FEMALE_ZONES: number[][] = [\n [13, 18, 28, 32, 45],\n [13, 18, 29, 33, 45],\n [13, 19, 30, 34, 45],\n [13, 20, 31, 35, 45],\n [13, 20, 32, 36, 45],\n];\n\ninterface ZoneDefinition {\n color: string;\n label: string;\n}\n\nconst ZONE_DEFS: ZoneDefinition[] = [\n { color: '#3b82f6', label: 'Essencial' },\n { color: '#06b6d4', label: 'Atlético' },\n { color: '#22c55e', label: 'Fitness' },\n { color: '#eab308', label: 'Média' },\n { color: '#ef4444', label: 'Obeso' },\n];\n\nfunction buildZones(sex: 'F' | 'M', zoneData: number[][]): BodyFatZone[] {\n const zones: BodyFatZone[] = [];\n for (let i = 0; i < AGE_BRACKETS.length; i++) {\n const bracket = AGE_BRACKETS[i]!;\n const b = zoneData[i]!;\n zones.push({\n ...bracket,\n color: ZONE_DEFS[0]!.color,\n fatPctMax: b[0]!,\n fatPctMin: 0,\n label: ZONE_DEFS[0]!.label,\n sex,\n });\n zones.push({\n ...bracket,\n color: ZONE_DEFS[1]!.color,\n fatPctMax: b[1]!,\n fatPctMin: b[0]!,\n label: ZONE_DEFS[1]!.label,\n sex,\n });\n zones.push({\n ...bracket,\n color: ZONE_DEFS[2]!.color,\n fatPctMax: b[2]!,\n fatPctMin: b[1]!,\n label: ZONE_DEFS[2]!.label,\n sex,\n });\n zones.push({\n ...bracket,\n color: ZONE_DEFS[3]!.color,\n fatPctMax: b[3]!,\n fatPctMin: b[2]!,\n label: ZONE_DEFS[3]!.label,\n sex,\n });\n zones.push({\n ...bracket,\n color: ZONE_DEFS[4]!.color,\n fatPctMax: b[4]!,\n fatPctMin: b[3]!,\n label: ZONE_DEFS[4]!.label,\n sex,\n });\n }\n return zones;\n}\n\nexport const BODY_FAT_ZONES: BodyFatZone[] = [\n ...buildZones('M', MALE_ZONES),\n ...buildZones('F', FEMALE_ZONES),\n];\n\nexport { AGE_BRACKETS, ZONE_DEFS };\n\nexport interface TScoreZone {\n color: string;\n label: string;\n max: number;\n min: number;\n}\n\nexport const T_SCORE_ZONES: TScoreZone[] = [\n { color: '#22c55e', label: 'Normal', max: 4, min: -1.0 },\n { color: '#eab308', label: 'Osteopenia', max: -1.0, min: -2.5 },\n { color: '#ef4444', label: 'Osteoporose', max: -2.5, min: -5 },\n];\n","/**\n * Screening Intervals Configuration\n *\n * Defines recommended screening intervals for different biomarker categories\n * based on clinical guidelines and best practices.\n */\n\n/**\n * Screening interval in months\n */\nexport type ScreeningIntervalMonths = 3 | 6 | 12;\n\n/**\n * Biomarker category with its recommended screening interval\n */\nexport interface CategoryScreeningInterval {\n category: string;\n intervalMonths: ScreeningIntervalMonths;\n nameEn: string;\n namePt: string;\n}\n\n/**\n * Screening interval configuration for each category\n *\n * Categories are grouped by their recommended screening intervals:\n * - 3 months: Body composition and bone density (frequently changing metrics)\n * - 6 months: Metabolic panel and nutrients (moderate change rate)\n * - 12 months: Standard blood panels (stable long-term markers)\n */\nexport const CATEGORY_SCREENING_INTERVALS: CategoryScreeningInterval[] = [\n // 3-month intervals - Body composition (frequently changing)\n {\n category: 'composicao-corporal',\n intervalMonths: 3,\n nameEn: 'Body Composition',\n namePt: 'Composição Corporal',\n },\n {\n category: 'densidade-ossea',\n intervalMonths: 3,\n nameEn: 'Bone Density',\n namePt: 'Densidade Óssea',\n },\n\n // 6-month intervals - Metabolic and nutrients\n {\n category: 'metabolico',\n intervalMonths: 6,\n nameEn: 'Metabolic Panel',\n namePt: 'Painel Metabólico',\n },\n {\n category: 'nutrientes',\n intervalMonths: 6,\n nameEn: 'Nutrients',\n namePt: 'Nutrientes',\n },\n {\n category: 'pancreas',\n intervalMonths: 6,\n nameEn: 'Pancreas',\n namePt: 'Pâncreas',\n },\n\n // 12-month intervals - Standard blood panels\n {\n category: 'coracao',\n intervalMonths: 12,\n nameEn: 'Heart Health',\n namePt: 'Saúde Cardiovascular',\n },\n {\n category: 'tireoide',\n intervalMonths: 12,\n nameEn: 'Thyroid',\n namePt: 'Tireoide',\n },\n {\n category: 'sangue',\n intervalMonths: 12,\n nameEn: 'Blood Count',\n namePt: 'Hemograma',\n },\n {\n category: 'figado',\n intervalMonths: 12,\n nameEn: 'Liver Function',\n namePt: 'Função Hepática',\n },\n {\n category: 'rins',\n intervalMonths: 12,\n nameEn: 'Kidney Function',\n namePt: 'Função Renal',\n },\n {\n category: 'saude-feminina',\n intervalMonths: 12,\n nameEn: \"Women's Health\",\n namePt: 'Saúde Feminina',\n },\n {\n category: 'saude-masculina',\n intervalMonths: 12,\n nameEn: \"Men's Health\",\n namePt: 'Saúde Masculina',\n },\n {\n category: 'eletrolitos',\n intervalMonths: 12,\n nameEn: 'Electrolytes',\n namePt: 'Eletrólitos',\n },\n {\n category: 'estresse-envelhecimento',\n intervalMonths: 12,\n nameEn: 'Stress & Aging',\n namePt: 'Estresse e Envelhecimento',\n },\n {\n category: 'autoimunidade',\n intervalMonths: 12,\n nameEn: 'Autoimmunity',\n namePt: 'Autoimunidade',\n },\n {\n category: 'regulacao-imunologica',\n intervalMonths: 12,\n nameEn: 'Immune Regulation',\n namePt: 'Regulação Imunológica',\n },\n {\n category: 'toxinas-ambientais',\n intervalMonths: 12,\n nameEn: 'Environmental Toxins',\n namePt: 'Toxinas Ambientais',\n },\n {\n category: 'urina',\n intervalMonths: 12,\n nameEn: 'Urinalysis',\n namePt: 'Urina',\n },\n];\n\n/**\n * Get screening interval for a category\n */\nexport const getScreeningInterval = (category: string): CategoryScreeningInterval | undefined => {\n return CATEGORY_SCREENING_INTERVALS.find((c) => c.category === category);\n};\n\n/**\n * Get all categories with a specific interval\n */\nexport const getCategoriesByInterval = (\n intervalMonths: ScreeningIntervalMonths,\n): CategoryScreeningInterval[] => {\n return CATEGORY_SCREENING_INTERVALS.filter((c) => c.intervalMonths === intervalMonths);\n};\n\n/**\n * Calculate next screening date based on last test date and category\n */\nexport const calculateNextScreeningDate = (lastTestDate: Date, category: string): Date | null => {\n const interval = getScreeningInterval(category);\n if (!interval) return null;\n\n const nextDate = new Date(lastTestDate);\n nextDate.setMonth(nextDate.getMonth() + interval.intervalMonths);\n return nextDate;\n};\n\n/**\n * Check if a category is due for screening\n */\nexport const isScreeningDue = (\n lastTestDate: Date,\n category: string,\n referenceDate: Date = new Date(),\n): boolean => {\n const nextDate = calculateNextScreeningDate(lastTestDate, category);\n if (!nextDate) return false;\n return referenceDate >= nextDate;\n};\n\n/**\n * Get categories that are due for screening based on last test dates\n */\nexport const getDueCategories = (\n lastTestDates: Record<string, Date>,\n referenceDate: Date = new Date(),\n): CategoryScreeningInterval[] => {\n return CATEGORY_SCREENING_INTERVALS.filter((interval) => {\n const lastDate = lastTestDates[interval.category];\n if (!lastDate) return true; // Never tested = due\n return isScreeningDue(lastDate, interval.category, referenceDate);\n });\n};\n\n/**\n * Get days until next screening for a category\n */\nexport const getDaysUntilScreening = (\n lastTestDate: Date,\n category: string,\n referenceDate: Date = new Date(),\n): number | null => {\n const nextDate = calculateNextScreeningDate(lastTestDate, category);\n if (!nextDate) return null;\n\n const diffTime = nextDate.getTime() - referenceDate.getTime();\n return Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n};\n","/**\n * Portuguese pluralization utility using native Intl.PluralRules\n * Provides automatic pluralization for common words used in the app\n */\n\nconst pluralRules = new Intl.PluralRules('pt-BR');\n\n/**\n * Dictionary of Portuguese words with their plural forms\n * Key is the singular form, value is the plural form\n */\nconst dictionary: Record<string, string> = {\n // Common nouns\n arquivo: 'arquivos',\n biomarcador: 'biomarcadores',\n // Past participles (masculine)\n cadastrado: 'cadastrados',\n // Past participles (feminine)\n concluída: 'concluídas',\n confirmado: 'confirmados',\n convertido: 'convertidos',\n convidado: 'convidados',\n convite: 'convites',\n disponível: 'disponíveis',\n documento: 'documentos',\n enviado: 'enviados',\n exame: 'exames',\n excluída: 'excluídas',\n\n excluído: 'excluídos',\n // Verbs (3rd person)\n falhou: 'falharam',\n falta: 'faltam',\n ignorado: 'ignorados',\n item: 'itens',\n outro: 'outros',\n página: 'páginas',\n pendente: 'pendentes',\n registro: 'registros',\n removido: 'removidos',\n\n resultado: 'resultados',\n revisão: 'revisões',\n\n revogado: 'revogados',\n usuário: 'usuários',\n};\n\n/**\n * Get the plural form of a word from the dictionary\n * Falls back to adding 's' if word is not in dictionary\n */\nconst getPluralForm = (singular: string): string => {\n return dictionary[singular] ?? `${singular}s`;\n};\n\n/**\n * Returns the correct singular or plural form based on count\n * Uses Intl.PluralRules for proper locale-aware pluralization\n *\n * @example\n * plural(1, 'usuário') // 'usuário'\n * plural(3, 'usuário') // 'usuários'\n * plural(0, 'registro') // 'registros'\n */\nexport const plural = (count: number, word: string): string => {\n const rule = pluralRules.select(count);\n return rule === 'one' ? word : getPluralForm(word);\n};\n\n/**\n * Returns count with the correct singular or plural form\n *\n * @example\n * pluralCount(1, 'usuário') // '1 usuário'\n * pluralCount(3, 'usuário') // '3 usuários'\n */\nexport const pluralCount = (count: number, word: string): string => {\n return `${count} ${plural(count, word)}`;\n};\n\n/**\n * Returns the correct form for compound phrases (noun + adjective)\n * Both words are pluralized together\n *\n * @example\n * pluralPhrase(1, 'usuário', 'cadastrado') // 'usuário cadastrado'\n * pluralPhrase(3, 'usuário', 'cadastrado') // 'usuários cadastrados'\n * pluralPhrase(2, 'revisão', 'excluída') // 'revisões excluídas'\n */\nexport const pluralPhrase = (count: number, noun: string, adjective: string): string => {\n const rule = pluralRules.select(count);\n if (rule === 'one') {\n return `${noun} ${adjective}`;\n }\n return `${getPluralForm(noun)} ${getPluralForm(adjective)}`;\n};\n\n/**\n * Returns count with the correct compound phrase form\n *\n * @example\n * pluralPhraseCount(1, 'usuário', 'cadastrado') // '1 usuário cadastrado'\n * pluralPhraseCount(3, 'convite', 'enviado') // '3 convites enviados'\n */\nexport const pluralPhraseCount = (count: number, noun: string, adjective: string): string => {\n return `${count} ${pluralPhrase(count, noun, adjective)}`;\n};\n","/**\n * Helpers para identificadores brasileiros — CPF e CNS\n *\n * Validação, formatação e conversão para FHIR Identifier.\n * Algoritmos de validação baseados nas especificações oficiais:\n * - CPF: Receita Federal (mod-11, dois dígitos verificadores)\n * - CNS: Ministério da Saúde (mod-11 para definitivos, soma ponderada para provisórios)\n */\n\nimport type { FHIRIdentifier } from './fhir-types';\n\nconst CPF_SYSTEM = 'http://rnds.saude.gov.br/fhir/r4/NamingSystem/cpf';\nconst CNS_SYSTEM = 'http://rnds.saude.gov.br/fhir/r4/NamingSystem/cns';\n\n/**\n * Remove caracteres não-numéricos de uma string.\n */\nfunction digitsOnly(value: string): string {\n return value.replace(/\\D/g, '');\n}\n\n/**\n * Valida um CPF brasileiro usando algoritmo mod-11.\n *\n * @param cpf — CPF com ou sem formatação (ex: \"123.456.789-09\" ou \"12345678909\")\n * @returns true se o CPF é estruturalmente válido\n */\nexport function validateCPF(cpf: string): boolean {\n const digits = digitsOnly(cpf);\n\n if (digits.length !== 11) return false;\n\n // Rejeitar sequências de dígitos iguais (ex: 111.111.111-11)\n if (/^(\\d)\\1{10}$/.test(digits)) return false;\n\n // Primeiro dígito verificador\n let sum = 0;\n for (let i = 0; i < 9; i++) {\n sum += Number(digits[i]) * (10 - i);\n }\n let remainder = (sum * 10) % 11;\n if (remainder === 10) remainder = 0;\n if (remainder !== Number(digits[9])) return false;\n\n // Segundo dígito verificador\n sum = 0;\n for (let i = 0; i < 10; i++) {\n sum += Number(digits[i]) * (11 - i);\n }\n remainder = (sum * 10) % 11;\n if (remainder === 10) remainder = 0;\n if (remainder !== Number(digits[10])) return false;\n\n return true;\n}\n\n/**\n * Valida um CNS (Cartão Nacional de Saúde) brasileiro.\n *\n * CNS definitivos começam com 1 ou 2 (mod-11).\n * CNS provisórios começam com 7, 8 ou 9 (soma ponderada mod-11 = 0).\n *\n * @param cns — CNS com 15 dígitos\n * @returns true se o CNS é estruturalmente válido\n */\nexport function validateCNS(cns: string): boolean {\n const digits = digitsOnly(cns);\n\n if (digits.length !== 15) return false;\n\n const firstDigit = digits[0]!;\n\n // CNS deve começar com 1, 2 (definitivo) ou 7, 8, 9 (provisório)\n if (!['1', '2', '7', '8', '9'].includes(firstDigit)) return false;\n\n // Ambos os tipos usam soma ponderada mod-11 = 0\n let sum = 0;\n for (let i = 0; i < 15; i++) {\n sum += Number(digits[i]) * (15 - i);\n }\n return sum % 11 === 0;\n}\n\n/**\n * Formata um CPF como XXX.XXX.XXX-XX.\n *\n * @param cpf — CPF com 11 dígitos (com ou sem formatação)\n * @returns CPF formatado ou a string original se inválido\n */\nexport function formatCPF(cpf: string): string {\n const digits = digitsOnly(cpf);\n if (digits.length !== 11) return cpf;\n return `${digits.slice(0, 3)}.${digits.slice(3, 6)}.${digits.slice(6, 9)}-${digits.slice(9)}`;\n}\n\n/**\n * Formata um CNS como XXX XXXX XXXX XXXX.\n *\n * @param cns — CNS com 15 dígitos\n * @returns CNS formatado ou a string original se inválido\n */\nexport function formatCNS(cns: string): string {\n const digits = digitsOnly(cns);\n if (digits.length !== 15) return cns;\n return `${digits.slice(0, 3)} ${digits.slice(3, 7)} ${digits.slice(7, 11)} ${digits.slice(11)}`;\n}\n\n/**\n * Converte um CPF para um FHIR Identifier.\n *\n * @param cpf — CPF com 11 dígitos (com ou sem formatação)\n * @returns FHIR Identifier com sistema RNDS para CPF\n * @throws Error se o CPF for inválido\n */\nexport function cpfToFHIRIdentifier(cpf: string): FHIRIdentifier {\n if (!validateCPF(cpf)) {\n throw new Error('CPF inválido');\n }\n return {\n system: CPF_SYSTEM,\n use: 'official',\n value: digitsOnly(cpf),\n };\n}\n\n/**\n * Converte um CNS para um FHIR Identifier.\n *\n * @param cns — CNS com 15 dígitos\n * @returns FHIR Identifier com sistema RNDS para CNS\n * @throws Error se o CNS for inválido\n */\nexport function cnsToFHIRIdentifier(cns: string): FHIRIdentifier {\n if (!validateCNS(cns)) {\n throw new Error('CNS inválido');\n }\n return {\n system: CNS_SYSTEM,\n use: 'official',\n value: digitsOnly(cns),\n };\n}\n","/**\n * URLs das extensões do IG do fhir-brasil.\n *\n * Quem emite a extensão e quem a lê precisam concordar literalmente na URL: um\n * consumidor procura a extensão pelo `url`, e uma grafia divergente faz o dado\n * sumir sem erro. O teste confere cada uma contra o `Id:` do FSH em\n * `ig/input/fsh/extensions/`, então extensão nova no IG sem constante aqui, ou\n * o inverso, reprova.\n */\n\n/** Canonical do IG, como está no `sushi-config.yaml`. */\nexport const IG_CANONICAL = 'https://fhir-brasil.dev.br/ig';\n\nconst structureDefinition = (id: string): string => `${IG_CANONICAL}/StructureDefinition/${id}`;\n\n/**\n * Extensões do IG, pela URL.\n *\n * As que têm partes (`extractionSource`, `extractionConfidence`, `asPrinted`)\n * levam as partes em `extension[]` aninhado, cada uma com `url` relativo: o\n * nome da parte, como `page` ou `reading`. Ver o FSH de cada uma.\n */\nexport const FHIR_BRASIL_EXTENSIONS = {\n /** `Observation`: valor e faixa como impressos, quando a Observation traz outros. */\n asPrinted: structureDefinition('as-printed'),\n /** `Observation`: extraída de PDF via OCR. */\n derivedFromOCR: structureDefinition('derived-from-ocr'),\n /** `Observation`: confiança na leitura e na interpretação, de 0 a 1. */\n extractionConfidence: structureDefinition('extraction-confidence'),\n /** `Observation`: páginas, trecho citado e caixa do trecho no documento. */\n extractionSource: structureDefinition('extraction-source'),\n /** `DiagnosticReport`: lido da tabela de histórico de outro laudo. */\n reprintedIn: structureDefinition('reprinted-in'),\n /** `Observation`: lido do documento, mas substituído por outro valor do mesmo laudo. */\n superseded: structureDefinition('superseded'),\n /** `Observation`: unidade impressa ao lado de um resultado em texto. */\n textValueUnit: structureDefinition('text-value-unit'),\n} as const;\n","/**\n * Código do tipo de amostra a partir do material impresso no laudo.\n *\n * O perfil `BRAmostraBiologica-1.0` da RNDS vincula `Specimen.type` ao ValueSet\n * `BRTipoAmostra-1.0` com força `required`, exige `type.coding` (1..1) e proíbe\n * `type.text` (0..0). Um `Specimen` só com o texto do laudo não passa, e é o que\n * a extração produzia.\n *\n * O ValueSet tem 63 códigos, e quase todos são de vigilância respiratória vindos\n * do GAL: swab nasofaríngeo, lavado brônquico, fragmento de órgão. Para laudo de\n * rotina sobram seis, e esses seis cobrem o que um painel de sangue e urina\n * imprime.\n *\n * Não há código para fezes no ValueSet. Isso não afeta a extração, cujo catálogo\n * não tem nenhum biomarcador de origem fecal: um parasitológico não vira\n * `Observation`, então não chega a pedir `Specimen`.\n *\n * @see https://rnds-fhir.saude.gov.br/StructureDefinition-BRAmostraBiologica-1.0.html\n * @see https://rnds-fhir.saude.gov.br/ValueSet-BRTipoAmostra-1.0.html\n */\nimport type { FHIRCoding } from './fhir-types';\n\n/** ValueSet ao qual `Specimen.type` está vinculado no `BRAmostraBiologica`. */\nexport const BR_TIPO_AMOSTRA_VALUESET = 'https://rnds-fhir.saude.gov.br/ValueSet/BRTipoAmostra-1.0';\n\n/**\n * CodeSystem dos códigos que este módulo emite.\n *\n * O ValueSet também inclui o `BRTipoAmostraGAL`, que traz \"Sangue\" e \"Sangue com\n * EDTA\" soltos. Ficaram de fora porque a URL canônica daquele CodeSystem não foi\n * confirmada na fonte, e código de terminologia não se deduz de slug. Material\n * assim cai no caminho de não mapeado até alguém abrir o IG e confirmar.\n */\nexport const HL7_SPECIMEN_TYPE_SYSTEM = 'http://terminology.hl7.org/CodeSystem/v2-0487';\n\n/**\n * Os `display` são cópia literal do ValueSet, com a caixa dele.\n *\n * A chave é o texto já normalizado, e por enquanto é só o próprio display. Não\n * há sinônimo inventado aqui: a extração copia o material verbatim do laudo, e a\n * lista de variações que os laboratórios de fato imprimem ainda não foi medida\n * (a captura de material entrou em produção em 05/09/2026). Variação real\n * observada entra depois, com o laudo que a produziu.\n */\nconst CODINGS: ReadonlyArray<{ code: string; display: string }> = [\n { code: 'SER', display: 'Soro' },\n { code: 'PLAS', display: 'Plasma' },\n { code: 'WB', display: 'Sangue Total' },\n { code: 'UR', display: 'Urina' },\n { code: 'CSF', display: 'Líquor' },\n { code: 'SAL', display: 'Saliva' },\n];\n\n/**\n * Caixa, acento e espaço sobrando não distinguem material.\n *\n * Só isso. Não separa `camelCase` nem troca barra por espaço, ao contrário do\n * normalizador de nomes de biomarcador: \"Soro/Plasma\" impresso numa linha só é\n * ambíguo de verdade, e escolher um dos dois seria inferência. Sem casar, ele\n * segue o caminho do não mapeado.\n *\n * Os caracteres invisíveis saem antes, e a divisão entre as duas regras é a do\n * próprio Unicode: `\\p{Cf}` são os de formatação, que não ocupam espaço e por\n * isso são apagados, e `\\s` são os de espaço, que são colapsados. A camada de\n * texto de PDF emite os dois tipos, e um U+200B no meio de \"Soro\" derruba o\n * casamento sem deixar rastro na tela.\n *\n * Vale a categoria em vez da lista porque a lista nunca fecha. Enumerando, o\n * hífen opcional (U+00AD) tinha ficado de fora, e ele aparece justamente onde\n * um nome composto como \"Sangue Total\" quebra de linha.\n */\nconst INVISIBLE = /\\p{Cf}/gu;\n\nconst normalize = (text: string): string =>\n text\n .replace(INVISIBLE, '')\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase()\n .replace(/\\s+/g, ' ')\n .trim();\n\nconst BY_NORMALIZED_TEXT = new Map(\n CODINGS.map(({ code, display }) => [\n normalize(display),\n { code, display, system: HL7_SPECIMEN_TYPE_SYSTEM } satisfies FHIRCoding,\n ]),\n);\n\n/**\n * Coding do ValueSet para o material impresso, ou `undefined` sem casar.\n *\n * `undefined` é resposta legítima e não erro: o laudo pode trazer um material\n * fora do ValueSet, ou uma grafia que ninguém viu ainda. Quem chama decide o que\n * fazer, e a decisão que não existe é preencher com um código aproximado.\n */\nexport const specimenTypeCoding = (text: string): FHIRCoding | undefined =>\n BY_NORMALIZED_TEXT.get(normalize(text));\n","// Gerado por scripts/generate-loinc-snapshot-module.ts a partir de\n// scripts/loinc-snapshot.json. Não editar à mão: rode o gerador.\nimport type { LoincSnapshot } from './loinc-axes';\n\nexport const LOINC_SNAPSHOT: LoincSnapshot = {\n _checkedAt: '2026-10-06',\n _loincVersion: '2.83',\n _notice:\n 'This material contains content from LOINC (http://loinc.org). LOINC is copyright © Regenstrief Institute, Inc. and the Logical Observation Identifiers Names and Codes (LOINC) Committee and is available at no cost under the license at http://loinc.org/license. LOINC® is a registered United States trademark of Regenstrief Institute, Inc.',\n codes: {\n '101683-1': {\n component: 'Body water',\n display: 'Body water mass',\n method: null,\n property: 'Mass',\n scale: 'Qn',\n status: 'ACTIVE',\n system: '^Patient',\n time: 'Pt',\n },\n '101684-9': {\n component: 'Body water',\n display: 'Percentage of body water',\n method: 'Measured',\n property: 'MFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: '^Patient',\n time: 'Pt',\n },\n '10331-7': {\n component: 'Rh',\n display: 'Rh [Type] in Blood',\n method: null,\n property: 'Type',\n scale: 'Nom',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '10334-1': {\n component: 'Cancer Ag 125',\n display: 'Cancer Ag 125 [Units/volume] in Serum or Plasma',\n groups: {\n 'LG108-7': 'Cancer Ag 125|ACnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '10501-5': {\n component: 'Lutropin',\n display: 'Lutropin [Units/volume] in Serum or Plasma',\n groups: {\n 'LG151-7': 'Lutropin|ACnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '107112-5': {\n component: 'Calf circumference',\n display: 'Calf circumference',\n method: null,\n property: 'Len',\n scale: 'Qn',\n status: 'ACTIVE',\n system: '^Patient',\n time: 'Pt',\n },\n '107160-4': {\n component: 'Phase angle Xc/R',\n display: 'Phase angle Xc/R [Ratio] Bioelectrical impedance analysis',\n method: 'BIA',\n property: 'Ratio',\n scale: 'Qn',\n status: 'ACTIVE',\n system: '^Patient',\n time: 'Pt',\n },\n '10835-7': {\n component: 'Lipoprotein (little a)',\n display: 'Lipoprotein a [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG45404-7': 'Lipoprotein (little a)|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '10886-0': {\n component: 'Prostate specific Ag.free',\n display: 'Prostate Specific Ag Free [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG46508-4': 'Prostate specific Ag.free|Pt|Ser/Plas',\n 'LG474-3': 'Prostate specific Ag.free|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '11277-1': {\n component: 'Epithelial cells.squamous',\n display:\n 'Epithelial cells.squamous [#/area] in Urine sediment by Microscopy high power field',\n groups: {\n 'LG40856-3': 'Epithelial cells.squamous|Urine/Urine sed',\n },\n method: 'Microscopy.light.HPF',\n property: 'Naric',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Urine sed',\n time: 'Pt',\n },\n '11572-5': {\n component: 'Rheumatoid factor',\n display: 'Rheumatoid factor [Units/volume] in Serum or Plasma',\n groups: {\n 'LG357-0': 'Rheumatoid factor|ACnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '12841-3': {\n component: 'Prostate specific Ag.free/Prostate specific Ag.total',\n display: 'Prostate Specific Ag Free/Prostate specific Ag.total in Serum or Plasma',\n groups: {\n 'LG2277-4': 'Prostate specific Ag.free/Prostate specific Ag.total|MFr|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '13457-7': {\n component: 'Cholesterol.in LDL',\n display: 'Cholesterol in LDL [Mass/volume] in Serum or Plasma by calculation',\n groups: {\n 'LG43020-3': 'Cholesterol.in LDL|Pt|Ser/Plas|Calculated',\n },\n method: 'Calculated',\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '13458-5': {\n component: 'Cholesterol.in VLDL',\n display: 'Cholesterol in VLDL [Mass/volume] in Serum or Plasma by calculation',\n groups: {\n 'LG43739-8': 'Cholesterol.in VLDL|Pt|Ser/Plas|Calculated',\n },\n method: 'Calculated',\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '13945-1': {\n component: 'Erythrocytes',\n display: 'Erythrocytes [#/area] in Urine sediment by Microscopy high power field',\n groups: {\n 'LG40868-8': 'Erythrocytes|Urine/Urine sed',\n },\n method: 'Microscopy.light.HPF',\n property: 'Naric',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Urine sed',\n time: 'Pt',\n },\n '13964-2': {\n component: 'Methylmalonate',\n display: 'Methylmalonate [Moles/volume] in Serum or Plasma',\n groups: {\n 'LG47301-3': 'Methylmalonate|Pt|Ser/Plas|118.088 g/mole',\n },\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '13965-9': {\n component: 'Homocysteine',\n display: 'Homocysteine [Moles/volume] in Serum or Plasma',\n groups: {\n 'LG48762-5': 'Homocysteine|Pt|Ser/Plas',\n },\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '13967-5': {\n component: 'Sex hormone binding globulin',\n display: 'Sex hormone binding globulin [Moles/volume] in Serum or Plasma',\n groups: {\n 'LG46684-3': 'Sex hormone binding globulin|Pt|Ser/Plas',\n },\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '14804-9': {\n component: 'Lactate dehydrogenase',\n display:\n 'Lactate dehydrogenase [Enzymatic activity/volume] in Serum or Plasma by Lactate to pyruvate reaction',\n method: 'Reaction: lactate to pyruvate',\n property: 'CCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '14957-5': {\n component: 'Albumin',\n display: 'Microalbumin [Mass/volume] in Urine',\n groups: {\n 'LG37542-4': 'Microalbumin|MCnc|Urine',\n },\n method: 'Detection limit <= 20 mg/L',\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '15067-2': {\n component: 'Follitropin',\n display: 'Follitropin [Units/volume] in Serum or Plasma',\n groups: {\n 'LG3268-2': 'Follitropin|ACnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1558-6': {\n component: 'Glucose^post CFst',\n display: 'Fasting glucose [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG50685-3': 'Glucose^post CFst|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1742-6': {\n component: 'Alanine aminotransferase',\n display: 'Alanine aminotransferase [Enzymatic activity/volume] in Serum or Plasma',\n groups: {\n 'LG5272-2': 'Alanine aminotransferase|CCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'CCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1751-7': {\n component: 'Albumin',\n display: 'Albumin [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG49829-1': 'Albumin|Pt|Ser/Plas|66.439 kDa g/mole',\n 'LG5465-2': 'Albumin|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1759-0': {\n component: 'Albumin/Globulin',\n display: 'Albumin/Globulin [Mass Ratio] in Serum or Plasma',\n groups: {\n 'LG5164-1': 'Albumin/Globulin|MRto|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MRto',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '17782-4': {\n component: 'Lipoprotein.beta.subparticle',\n display: 'Lipoprotein.beta.subparticle [Entitic length] in Serum or Plasma',\n method: null,\n property: 'EntLen',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '17861-6': {\n component: 'Calcium',\n display: 'Calcium [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG49864-8': 'Calcium|Pt|Ser/Plas|40.078 g/mole',\n 'LG7247-2': 'Calcium|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1798-8': {\n component: 'Amylase',\n display: 'Amylase [Enzymatic activity/volume] in Serum or Plasma',\n groups: {\n 'LG5805-9': 'Amylase|CCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'CCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '18262-6': {\n component: 'Cholesterol.in LDL',\n display: 'Cholesterol in LDL [Mass/volume] in Serum or Plasma by Direct assay',\n groups: {\n 'LG43023-7': 'Cholesterol.in LDL|Pt|Ser/Plas|Direct assay',\n 'LG6248-1': 'Cholesterol.in LDL|MCnc|Pt|ANYBldSerPl',\n },\n method: 'Direct assay',\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1834-1': {\n component: 'Alpha-1-Fetoprotein',\n display: 'Alpha-1-Fetoprotein [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG42656-5': 'Alpha-1-Fetoprotein|Pt|Ser/Plas',\n 'LG5597-2': 'Alpha-1-Fetoprotein|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1848-1': {\n component: 'Androstanolone',\n display: 'Androstanolone [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG42603-7': 'Androstanolone|Pt|Ser/Plas|290.447 g/mole',\n 'LG6115-2': 'Androstanolone|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1869-7': {\n component: 'Apolipoprotein A-I',\n display: 'Apolipoprotein A-I [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG44102-8': 'Apolipoprotein A-I|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1884-6': {\n component: 'Apolipoprotein B',\n display: 'Apolipoprotein B [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG42611-0': 'Apolipoprotein B|Pt|Ser/Plas',\n 'LG5705-1': 'Apolipoprotein B|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1903-4': {\n component: 'Ascorbate',\n display: 'Ascorbate [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG42630-0': 'Ascorbate|Pt|Ser/Plas|176.124 g/mole',\n 'LG5723-4': 'Ascorbate|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '19080-1': {\n component: 'Choriogonadotropin',\n display: 'Choriogonadotropin [Units/volume] in Serum or Plasma',\n groups: {\n 'LG5747-3': 'Choriogonadotropin|ACnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '19113-0': {\n component: 'IgE',\n display: 'IgE [Units/volume] in Serum or Plasma',\n groups: {\n 'LG5901-6': 'IgE|ACnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '19123-9': {\n component: 'Magnesium',\n display: 'Magnesium [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG50041-9': 'Magnesium|Pt|Ser/Plas|24.305 g/mole',\n 'LG5903-2': 'Magnesium|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1920-8': {\n component: 'Aspartate aminotransferase',\n display: 'Aspartate aminotransferase [Enzymatic activity/volume] in Serum or Plasma',\n groups: {\n 'LG6033-7': 'Aspartate aminotransferase|CCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'CCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1968-7': {\n component: 'Bilirubin.glucuronidated+Bilirubin.albumin bound',\n display: 'Bilirubin.direct [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG43215-9': 'Bilirubin.glucuronidated+Bilirubin.albumin bound|Pt|Ser/Plas',\n 'LG6165-7': 'Bilirubin.glucuronidated+Bilirubin.albumin bound|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1971-1': {\n component: 'Bilirubin.non-glucuronidated',\n display: 'Bilirubin.indirect [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG3235-1': 'Bilirubin.non-glucuronidated|MCnc|Pt|ANYBldSerPl',\n 'LG43430-4': 'Bilirubin.non-glucuronidated|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1975-2': {\n component: 'Bilirubin',\n display: 'Bilirubin.total [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG49848-1': 'Bilirubin|Pt|Ser/Plas|584.673 g/mole',\n 'LG6199-6': 'Bilirubin|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1988-5': {\n component: 'C reactive protein',\n display: 'C reactive protein [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG48228-7': 'C reactive protein|Pt|Ser/Plas',\n 'LG52057-3': 'C reactive protein|Pt|ANYBldSerPl|',\n 'LG6212-7': 'C reactive protein|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '1989-3': {\n component: 'Calcidiol',\n display: '25-hydroxyvitamin D3 [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG43465-0': 'Calcidiol|Pt|Ser/Plas|400.647 g/mole',\n 'LG51030-1': 'Calcidiol|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2028-9': {\n component: 'Carbon dioxide',\n display: 'Carbon dioxide, total [Moles/volume] in Serum or Plasma',\n groups: {\n 'LG4454-7': 'Carbon dioxide|SCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2039-6': {\n component: 'Carcinoembryonic Ag',\n display: 'Carcinoembryonic Ag [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG44728-0': 'Carcinoembryonic Ag|Pt|Ser/Plas',\n 'LG6799-3': 'Carcinoembryonic Ag|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '20405-7': {\n component: 'Urobilinogen',\n display: 'Urobilinogen [Mass/volume] in Urine by Test strip',\n groups: {\n 'LG35156-5': 'Urobilinogen|MCnc|Urine',\n 'LG40864-7': 'Urobilinogen|Urine/Urine sed',\n 'LG47120-7': 'Urobilinogen|Pt|Urine|Test strip|592.737 g/mole',\n },\n method: 'Test strip',\n property: 'MCnc',\n scale: 'SemiQn',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '20448-7': {\n component: 'Insulin',\n display: 'Insulin [Units/volume] in Serum or Plasma',\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2075-0': {\n component: 'Chloride',\n display: 'Chloride [Moles/volume] in Serum or Plasma',\n groups: {\n 'LG6373-7': 'Chloride|SCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2085-9': {\n component: 'Cholesterol.in HDL',\n display: 'Cholesterol in HDL [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG43009-6': 'Cholesterol.in HDL|Pt|Ser/Plas',\n 'LG6644-1': 'Cholesterol.in HDL|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2089-1': {\n component: 'Cholesterol.in LDL',\n display: 'Cholesterol in LDL [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG43021-1': 'Cholesterol.in LDL|Pt|Ser/Plas',\n 'LG6248-1': 'Cholesterol.in LDL|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2093-3': {\n component: 'Cholesterol',\n display: 'Cholesterol [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG50009-6': 'Cholesterol|Pt|Ser/Plas|386.664 g/mole',\n 'LG6416-4': 'Cholesterol|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2132-9': {\n component: 'Cobalamins',\n display: 'Cobalamin (Vitamin B12) [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG4793-8': 'Cobalamins|MCnc|Pt|ANYBldSerPl',\n 'LG48386-3': 'Cobalamins|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '21365-2': {\n component: 'Leptin',\n display: 'Leptin [Mass/volume] in Serum or Plasma',\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2143-6': {\n component: 'Cortisol',\n display: 'Cortisol [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG43168-0': 'Cortisol|Pt|Ser/Plas|362.466 g/mole',\n 'LG7018-7': 'Cortisol|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2157-6': {\n component: 'Creatine kinase',\n display: 'Creatine kinase [Enzymatic activity/volume] in Serum or Plasma',\n method: null,\n property: 'CCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2160-0': {\n component: 'Creatinine',\n display: 'Creatinine [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG50024-5': 'Creatinine|Pt|Ser/Plas|113.12 g/mole',\n 'LG52058-1': 'Creatinine|Pt|ANYBldSerPl|113.12 g/mole',\n 'LG6657-3': 'Creatinine|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2161-8': {\n component: 'Creatinine',\n display: 'Creatinine [Mass/volume] in Urine',\n groups: {\n 'LG35227-4': 'Creatinine|MCnc|Urine',\n 'LG50025-2': 'Creatinine|Pt|Urine|113.12 g/mole',\n 'LG7133-4': 'Creatinine|MCnc|Pt|ANYUrine',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '21619-2': {\n component: 'APOE gene mutations',\n display:\n 'APOE gene mutations found [Identifier] in Blood or Tissue by Targeted gene mutation analysis Nominal',\n method: 'Targeted gene mutation analysis',\n property: 'Prid',\n scale: 'Nom',\n status: 'ACTIVE',\n system: 'Bld/Tiss',\n time: 'Pt',\n },\n '2191-5': {\n component: 'Dehydroepiandrosterone sulfate',\n display: 'Dehydroepiandrosterone sulfate (DHEA-S) [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG45903-8': 'Dehydroepiandrosterone sulfate|Pt|Ser/Plas',\n 'LG51787-6': 'Dehydroepiandrosterone sulfate|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2243-4': {\n component: 'Estradiol',\n display: 'Estradiol (E2) [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG46249-5': 'Estradiol|Pt|Ser/Plas|272.388 g/mole',\n 'LG668-0': 'Estradiol|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2276-4': {\n component: 'Ferritin',\n display: 'Ferritin [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG43688-7': 'Ferritin|Pt|Ser/Plas',\n 'LG6299-4': 'Ferritin|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2284-8': {\n component: 'Folate',\n display: 'Folate [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG46599-3': 'Folate|Pt|Ser/Plas|441.404 g/mole',\n 'LG8004-6': 'Folate|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2324-2': {\n component: 'Gamma glutamyl transferase',\n display: 'Gamma glutamyl transferase [Enzymatic activity/volume] in Serum or Plasma',\n method: null,\n property: 'CCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2336-6': {\n component: 'Globulin',\n display: 'Globulin [Mass/volume] in Serum',\n groups: {\n 'LG1776-6': 'Globulin|MCnc|Pt|ANYBldSerPl',\n 'LG52056-5': 'Globulin|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser',\n time: 'Pt',\n },\n '2345-7': {\n component: 'Glucose',\n display: 'Glucose [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG49881-2': 'Glucose|Pt|Ser/Plas|180.156 g/mole',\n 'LG7967-5': 'Glucose|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '24108-3': {\n component: 'Cancer Ag 19-9',\n display: 'Cancer Ag 19-9 [Units/volume] in Serum or Plasma',\n groups: {\n 'LG6230-9': 'Cancer Ag 19-9|ACnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2458-8': {\n component: 'IgA',\n display: 'IgA [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG46917-7': 'IgA|Pt|Ser/Plas',\n 'LG9788-3': 'IgA|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2465-3': {\n component: 'IgG',\n display: 'IgG [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG45120-9': 'IgG|Pt|Ser/Plas',\n 'LG9795-8': 'IgG|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2472-9': {\n component: 'IgM',\n display: 'IgM [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG48822-7': 'IgM|Pt|Ser/Plas',\n 'LG9802-2': 'IgM|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2498-4': {\n component: 'Iron',\n display: 'Iron [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG48872-2': 'Iron|Pt|Ser/Plas|55.845 g/mole',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2500-7': {\n component: 'Iron binding capacity',\n display: 'Iron binding capacity [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG48875-5': 'Iron binding capacity|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2502-3': {\n component: 'Iron saturation',\n display: 'Iron saturation [Mass Fraction] in Serum or Plasma',\n method: null,\n property: 'MFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2571-8': {\n component: 'Triglyceride',\n display: 'Triglyceride [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG47044-9': 'Triglyceride|Pt|Ser/Plas',\n 'LG9600-0': 'Triglyceride|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '26746-8': {\n component: 'Magnesium',\n display: 'Magnesium [Mass/volume] in Red Blood Cells',\n groups: {\n 'LG50044-3': 'Magnesium|Pt|RBC|24.305 g/mole',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'RBC',\n time: 'Pt',\n },\n '2731-8': {\n component: 'Parathyrin.intact',\n display: 'Parathyrin.intact [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG47482-1': 'Parathyrin.intact|Pt|Ser/Plas',\n 'LG52635-6': 'Parathyrin.intact|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '27353-2': {\n component: 'Estimated average glucose',\n display: 'Glucose mean value [Mass/volume] in Blood Estimated from glycated hemoglobin',\n groups: {\n 'LG48562-9': 'Estimated average glucose|Pt|Bld|Estimated from glycated hemoglobin',\n },\n method: 'Estimated from glycated hemoglobin',\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '2823-3': {\n component: 'Potassium',\n display: 'Potassium [Moles/volume] in Serum or Plasma',\n groups: {\n 'LG10990-6': 'Potassium|SCnc|Pt|ANYBldSerPl',\n 'LG49936-4': 'Potassium|Pt|Ser/Plas|39.098 g/mole',\n },\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2839-9': {\n component: 'Progesterone',\n display: 'Progesterone [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG11006-0': 'Progesterone|MCnc|Pt|ANYBldSerPl',\n 'LG49385-4': 'Progesterone|Pt|Ser/Plas|314.469 g/mole',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2842-3': {\n component: 'Prolactin',\n display: 'Prolactin [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG6300-0': 'Prolactin|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2857-1': {\n component: 'Prostate specific Ag',\n display: 'Prostate specific Ag [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG11034-2': 'Prostate specific Ag|MCnc|Pt|ANYBldSerPl',\n 'LG47752-7': 'Prostate specific Ag|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2885-2': {\n component: 'Protein',\n display: 'Protein [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG1777-4': 'Protein|MCnc|Pt|ANYBldSerPl',\n 'LG49422-5': 'Protein|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2923-1': {\n component: 'Retinol',\n display: 'Retinol [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG11471-6': 'Retinol|MCnc|Pt|ANYBldSerPl',\n 'LG45808-9': 'Retinol|Pt|Ser/Plas|286.459 g/mole',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '29463-7': {\n component: 'Body weight',\n display: 'Body weight',\n groups: {\n 'LG34372-9': 'Body weight|Mass|Pt|^Patient',\n },\n method: null,\n property: 'Mass',\n scale: 'Qn',\n status: 'ACTIVE',\n system: '^Patient',\n time: 'Pt',\n },\n '2951-2': {\n component: 'Sodium',\n display: 'Sodium [Moles/volume] in Serum or Plasma',\n groups: {\n 'LG11363-5': 'Sodium|SCnc|Pt|ANYBldSerPl',\n 'LG51978-1': 'Sodium|Pt|Ser/Plas|22.99 g/mole',\n },\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2986-8': {\n component: 'Testosterone',\n display: 'Testosterone [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG11398-1': 'Testosterone|MCnc|Pt|ANYBldSerPl',\n 'LG49980-2': 'Testosterone|Pt|Ser/Plas|288.431 g/mole',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '2991-8': {\n component: 'Testosterone.free',\n display: 'Testosterone Free [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG11447-6': 'Testosterone.free|MCnc|Pt|ANYBldSerPl',\n 'LG47914-3': 'Testosterone.free|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '3013-0': {\n component: 'Thyroglobulin',\n display: 'Thyroglobulin [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG49663-4': 'Thyroglobulin|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '3016-3': {\n component: 'Thyrotropin',\n display: 'Thyrotropin [Units/volume] in Serum or Plasma',\n groups: {\n 'LG11757-8': 'Thyrotropin|ACnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '30189-5': {\n component:\n '(Dactylis glomerata+Festuca elatior+Lolium perenne+Phleum pratense+Poa pratensis) Ab.IgE',\n display:\n 'Grass Allergen Mix 1 (Orchard grass+Meadow Fescue+Perennial rye grass+Timothy+Kentucky blue grass) IgE Ab [Units/volume] in Serum by Multidisk',\n method: 'Multidisk',\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser',\n time: 'Pt',\n },\n '3024-7': {\n component: 'Thyroxine.free',\n display: 'Thyroxine (T4) free [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG12004-4': 'Thyroxine.free|MCnc|Pt|ANYBldSerPl',\n 'LG49672-5': 'Thyroxine.free|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '3026-2': {\n component: 'Thyroxine',\n display: 'Thyroxine (T4) [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG12009-3': 'Thyroxine|MCnc|Pt|ANYBldSerPl',\n 'LG46307-1': 'Thyroxine|Pt|Ser/Plas|776.874 g/mole',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '30341-2': {\n component: 'Erythrocyte',\n display: 'Erythrocyte [Sedimentation Rate] in Blood',\n method: null,\n property: 'Sedimentation Rate',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '3040-3': {\n component: 'Triacylglycerol lipase',\n display: 'Lipase [Enzymatic activity/volume] in Serum or Plasma',\n method: null,\n property: 'CCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '3051-0': {\n component: 'Triiodothyronine.free',\n display: 'Triiodothyronine (T3) Free [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG11488-0': 'Triiodothyronine.free|MCnc|Pt|ANYBldSerPl',\n 'LG46407-9': 'Triiodothyronine.free|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '3084-1': {\n component: 'Urate',\n display: 'Urate [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG49755-8': 'Urate|Pt|Ser/Plas|168.112 g/mole',\n 'LG51310-7': 'Urate|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '3091-6': {\n component: 'Urea',\n display: 'Urea [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG49993-5': 'Urea|Pt|Ser/Plas|60.056 g/mole',\n 'LG6460-2': 'Urea|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '30934-4': {\n component: 'Natriuretic peptide.B',\n display: 'Natriuretic peptide B [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG12080-4': 'Natriuretic peptide.B|MCnc|Pt|ANYBldSerPl',\n 'LG44906-2': 'Natriuretic peptide.B|Pt|Ser/Plas',\n 'LG52049-0': 'Natriuretic peptide.B|Pt|ANYBldSerPl|3464.0 g/mole',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '3097-3': {\n component: 'Urea nitrogen/Creatinine',\n display: 'Urea nitrogen/Creatinine [Mass Ratio] in Serum or Plasma',\n groups: {\n 'LG12083-8': 'Urea nitrogen/Creatinine|MRto|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MRto',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '31017-7': {\n component: 'Tissue transglutaminase Ab.IgA',\n display: 'Tissue transglutaminase IgA Ab [Units/volume] in Serum',\n groups: {\n 'LG12238-8': 'Tissue transglutaminase Ab.IgA|ACnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser',\n time: 'Pt',\n },\n '3255-7': {\n component: 'Fibrinogen',\n display: 'Fibrinogen [Mass/volume] in Platelet poor plasma by Coagulation assay',\n groups: {\n 'LG51979-9': 'Fibrinogen|Pt|PPP|Coag',\n },\n method: 'Coag',\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'PPP',\n time: 'Pt',\n },\n '32623-1': {\n component: 'Platelet',\n display: 'Platelet [Entitic mean volume] in Blood by Automated count',\n method: 'Automated count',\n property: 'EntMeanVol',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '32998-7': {\n component: 'Tissue transglutaminase Ab.IgG',\n display: 'Tissue transglutaminase IgG Ab [Units/volume] in Serum',\n groups: {\n 'LG13588-5': 'Tissue transglutaminase Ab.IgG|ACnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser',\n time: 'Pt',\n },\n '33762-6': {\n component: 'Natriuretic peptide.B prohormone N-Terminal',\n display: 'Natriuretic peptide.B prohormone N-Terminal [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG13322-9': 'Natriuretic peptide.B prohormone N-Terminal|MCnc|Pt|ANYBldSerPl',\n 'LG47358-3': 'Natriuretic peptide.B prohormone N-Terminal|Pt|Ser/Plas',\n 'LG52052-4': 'Natriuretic peptide.B prohormone N-Terminal|Pt|BldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '33863-2': {\n component: 'Cystatin C',\n display: 'Cystatin C [Mass/volume] in Serum or Plasma',\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '35177-5': {\n component: 'Fatty acids.polyunsaturated',\n display: 'Polyunsaturated fatty acids [Moles/volume] in Serum or Plasma',\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '35505-7': {\n component: 'Lipoprotein.beta.subparticle',\n display: 'Lipoprotein.beta.subparticle [Type] in Serum or Plasma',\n method: null,\n property: 'Type',\n scale: 'Nom',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '38476-8': {\n component: 'Mullerian inhibiting substance',\n display: 'Mullerian inhibiting substance [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG15084-3': 'Mullerian inhibiting substance|MCnc|Pt|ANYBldSerPl',\n 'LG49114-8': 'Mullerian inhibiting substance|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '39156-5': {\n component: 'Body mass index',\n display: 'Body mass index (BMI) [Ratio]',\n method: null,\n property: 'Ratio',\n scale: 'Qn',\n status: 'ACTIVE',\n system: '^Patient',\n time: 'Pt',\n },\n '41982-0': {\n component: 'Body fat percentage',\n display: 'Percentage of body fat Measured',\n method: 'Measured',\n property: 'MFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: '^Patient',\n time: 'Pt',\n },\n '43396-1': {\n component: 'Cholesterol.non HDL',\n display: 'Cholesterol non HDL [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG43747-1': 'Cholesterol.non HDL|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '43583-4': {\n component: 'Lipoprotein (little a)',\n display: 'Lipoprotein a [Moles/volume] in Serum or Plasma',\n groups: {\n 'LG45404-7': 'Lipoprotein (little a)|Pt|Ser/Plas',\n },\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '43727-7': {\n component: 'Lipoprotein.beta.subparticle.small',\n display: 'Lipoprotein.beta.subparticle.small [Moles/volume] in Serum or Plasma',\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '43729-3': {\n component: 'Lipoprotein.alpha.subparticle.large',\n display: 'Lipoprotein.alpha.subparticle.large [Moles/volume] in Serum or Plasma',\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '4485-9': {\n component: 'Complement C3',\n display: 'Complement C3 [Mass/volume] in Serum or Plasma',\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '4498-2': {\n component: 'Complement C4',\n display: 'Complement C4 [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG43109-4': 'Complement C4|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '4544-3': {\n component: 'Erythrocyte/Blood',\n display: 'Hematocrit [Volume Fraction] of Blood by Automated count',\n method: 'Automated count',\n property: 'VFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '4548-4': {\n component: 'Hemoglobin A1c/Hemoglobin.total',\n display: 'Hemoglobin A1c/Hemoglobin.total in Blood',\n groups: {\n 'LG51070-7': 'Hemoglobin A1c/Hemoglobin.total|MFr|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '4679-7': {\n component: 'Reticulocytes/Erythrocytes',\n display: 'Reticulocytes/Erythrocytes in Blood',\n method: null,\n property: 'NFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '47214-2': {\n component: 'Homeostasis model assessment',\n display: 'Homeostasis model assessment',\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '47828-9': {\n component: 'Adiponectin',\n display: 'Adiponectin [Mass/volume] in Serum or Plasma',\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '48065-7': {\n component: 'Fibrin D-dimer',\n display: 'Fibrin D-dimer FEU [Mass/volume] in Platelet poor plasma',\n groups: {\n 'LG52053-2': 'Fibrin D-dimer|Pt|ANYBldPPP',\n },\n method: 'FEU',\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'PPP',\n time: 'Pt',\n },\n '48066-5': {\n component: 'Fibrin D-dimer',\n display: 'Fibrin D-dimer DDU [Mass/volume] in Platelet poor plasma',\n groups: {\n 'LG52053-2': 'Fibrin D-dimer|Pt|ANYBldPPP',\n },\n method: 'DDU',\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'PPP',\n time: 'Pt',\n },\n '49563-0': {\n component: 'Troponin I.cardiac',\n display:\n 'Troponin I.cardiac [Mass/volume] in Serum or Plasma by Detection limit <= 0.01 ng/mL',\n method: 'Detection limit <= 0.01 ng/mL',\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '53060-0': {\n component: 'Butyrylcarnitine (C4)',\n display: 'Butyrylcarnitine (C4) [Moles/volume] in Amniotic fluid',\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Amnio fld',\n time: 'Pt',\n },\n '54434-6': {\n component: 'Lipoprotein.beta.subparticle',\n display: 'Lipoprotein.beta.subparticle [Moles/volume] in Serum or Plasma',\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '5685-3': {\n component: 'Mercury',\n display: 'Mercury [Mass/volume] in Blood',\n groups: {\n 'LG23471-2': 'Mercury|MCnc|Pt|ANYBldSerPl',\n 'LG49912-5': 'Mercury|Pt|Bld|200.59 g/mole',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '56997-0': {\n component: 'Urea/Creatinine',\n display: 'Urea/Creatinine [Mass Ratio] in Serum or Plasma',\n method: null,\n property: 'MRto',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '5724-0': {\n component: 'Selenium',\n display: 'Selenium [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG23524-8': 'Selenium|MCnc|Pt|ANYBldSerPl',\n 'LG46672-8': 'Selenium|Pt|Ser/Plas|78.971 g/mole',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '5763-8': {\n component: 'Zinc',\n display: 'Zinc [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG23959-6': 'Zinc|MCnc|Pt|ANYBldSerPl',\n 'LG49988-5': 'Zinc|Pt|Ser/Plas|65.38 g/mole',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '5767-9': {\n component: 'Observation',\n display: 'Appearance of Urine',\n method: null,\n property: 'Aper',\n scale: 'Nom',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '5769-5': {\n component: 'Bacteria',\n display: 'Bacteria [#/area] in Urine sediment by Microscopy high power field',\n groups: {\n 'LG40875-3': 'Bacteria|Urine/Urine sed',\n },\n method: 'Microscopy.light.HPF',\n property: 'Naric',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Urine sed',\n time: 'Pt',\n },\n '5770-3': {\n component: 'Bilirubin',\n display: 'Bilirubin.total [Presence] in Urine by Test strip',\n groups: {\n 'LG35153-2': 'Bilirubin|PrThr|Urine',\n 'LG40907-4': 'Bilirubin|Urine/Urine sed',\n },\n method: 'Test strip',\n property: 'PrThr',\n scale: 'Ord',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '5778-6': {\n component: 'Observation',\n display: 'Color of Urine',\n groups: {\n 'LG36556-5': 'Observation|Color|Urine',\n },\n method: null,\n property: 'Color',\n scale: 'Nom',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '5792-7': {\n component: 'Glucose',\n display: 'Glucose [Mass/volume] in Urine by Test strip',\n groups: {\n 'LG33250-8': 'Glucose|Pt|Urine|Test strip|180.156 g/mole',\n 'LG35166-4': 'Glucose|MCnc|Urine',\n 'LG40865-4': 'Glucose|Urine/Urine sed',\n },\n method: 'Test strip',\n property: 'MCnc',\n scale: 'SemiQn',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '5794-3': {\n component: 'Hemoglobin',\n display: 'Hemoglobin [Presence] in Urine by Test strip',\n groups: {\n 'LG36977-3': 'Hemoglobin|PrThr|Urine',\n 'LG40952-0': 'Hemoglobin|Urine/Urine sed',\n },\n method: 'Test strip',\n property: 'PrThr',\n scale: 'Ord',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '5796-8': {\n component: 'Hyaline casts',\n display: 'Hyaline casts [#/area] in Urine sediment by Microscopy low power field',\n groups: {\n 'LG40890-2': 'Hyaline casts|Urine/Urine sed',\n },\n method: 'Microscopy.light.LPF',\n property: 'Naric',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Urine sed',\n time: 'Pt',\n },\n '5797-6': {\n component: 'Ketones',\n display: 'Ketones [Mass/volume] in Urine by Test strip',\n groups: {\n 'LG36553-2': 'Ketones|MCnc|Urine',\n 'LG40908-2': 'Ketones|Urine/Urine sed',\n 'LG48911-8': 'Ketones|Pt|Urine|Test strip',\n },\n method: 'Test strip',\n property: 'MCnc',\n scale: 'SemiQn',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '5799-2': {\n component: 'Leukocyte esterase',\n display: 'Leukocyte esterase [Presence] in Urine by Test strip',\n groups: {\n 'LG36980-7': 'Leukocyte esterase|PrThr|Urine',\n 'LG40953-8': 'Leukocyte esterase|Urine/Urine sed',\n },\n method: 'Test strip',\n property: 'PrThr',\n scale: 'Ord',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '5802-4': {\n component: 'Nitrite',\n display: 'Nitrite [Presence] in Urine by Test strip',\n groups: {\n 'LG35986-5': 'Nitrite|PrThr|Urine',\n 'LG40866-2': 'Nitrite|Urine/Urine sed',\n },\n method: 'Test strip',\n property: 'PrThr',\n scale: 'Ord',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '5803-2': {\n component: 'pH',\n display: 'pH of Urine by Test strip',\n groups: {\n 'LG35753-9': 'pH|LsCnc|Urine',\n 'LG40956-1': 'pH|Urine/Urine sed',\n },\n method: 'Test strip',\n property: 'LsCnc',\n scale: 'SemiQn',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '5804-0': {\n component: 'Protein',\n display: 'Protein [Mass/volume] in Urine by Test strip',\n groups: {\n 'LG34512-0': 'Protein|MCnc|Urine',\n 'LG40870-4': 'Protein|Urine/Urine sed',\n },\n method: 'Test strip',\n property: 'MCnc',\n scale: 'SemiQn',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '5808-1': {\n component: 'Erythrocytes',\n display: 'Erythrocytes [#/volume] in Urine sediment by Microscopy high power field',\n groups: {\n 'LG40868-8': 'Erythrocytes|Urine/Urine sed',\n },\n method: 'Microscopy.light.HPF',\n property: 'NCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Urine sed',\n time: 'Pt',\n },\n '5811-5': {\n component: 'Observation',\n display: 'Specific gravity of Urine by Test strip',\n groups: {\n 'LG35800-8': 'Observation|SpGrav|Urine',\n 'LG40859-7': 'Observation|Urine/Urine sed',\n },\n method: 'Test strip',\n property: 'SpGrav',\n scale: 'SemiQn',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '5821-4': {\n component: 'Leukocytes',\n display: 'Leukocytes [#/area] in Urine sediment by Microscopy high power field',\n groups: {\n 'LG40867-0': 'Leukocytes|Urine/Urine sed',\n },\n method: 'Microscopy.light.HPF',\n property: 'Naric',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Urine sed',\n time: 'Pt',\n },\n '5902-2': {\n component: 'Coagulation',\n display: 'Prothrombin time (PT)',\n method: 'Coag.tissue factor induced',\n property: 'Time',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'PPP',\n time: 'Pt',\n },\n '5905-5': {\n component: 'Monocytes/leukocytes',\n display: 'Monocytes/Leukocytes in Blood by Automated count',\n method: 'Automated count',\n property: 'NFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '62292-8': {\n component: 'Calcidiol+ercalcidiol',\n display: '25-Hydroxyvitamin D3+25-Hydroxyvitamin D2 [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG25965-1': 'Calcidiol+ercalcidiol|MCnc|Pt|ANYBldSerPl',\n 'LG42015-4': 'Calcidiol+ercalcidiol|Pt|Ser/Plas',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '630-4': {\n component: 'Bacteria',\n display: 'Bacteria identified in Urine by Culture',\n groups: {\n 'LG34664-9': 'Bacteria|Prid|Urine',\n 'LG51652-2': 'Bacteria|Prid|Sys:ANYGU',\n },\n method: 'Culture',\n property: 'Prid',\n scale: 'Nom',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '6301-6': {\n component: 'Coagulation',\n display: 'INR in Platelet poor plasma by Coagulation assay',\n method: 'Coag.tissue factor induced.INR',\n property: 'RelTime',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'PPP',\n time: 'Pt',\n },\n '63453-5': {\n component: 'Gliadin peptide Ab.IgA',\n display: 'Gliadin peptide IgA Ab [Units/volume] in Serum by Immunoassay',\n groups: {\n 'LG24120-4': 'Gliadin peptide Ab.IgA|ACnc|Pt|ANYBldSerPl',\n },\n method: 'IA',\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser',\n time: 'Pt',\n },\n '63459-2': {\n component: 'Gliadin peptide Ab.IgG',\n display: 'Gliadin peptide IgG Ab [Units/volume] in Serum by Immunoassay',\n groups: {\n 'LG24121-2': 'Gliadin peptide Ab.IgG|ACnc|Pt|ANYBldSerPl',\n },\n method: 'IA',\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser',\n time: 'Pt',\n },\n '6598-7': {\n component: 'Troponin T.cardiac',\n display: 'Troponin T.cardiac [Mass/volume] in Serum or Plasma',\n groups: {\n 'LG19584-8': 'Troponin T.cardiac|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '6690-2': {\n component: 'Leukocytes',\n display: 'Leukocytes [#/volume] in Blood by Automated count',\n groups: {\n 'LG32857-1': 'Leukocytes|NCnc|Pt|Bld',\n },\n method: 'Automated count',\n property: 'NCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '6768-6': {\n component: 'Alkaline phosphatase',\n display: 'Alkaline phosphatase [Enzymatic activity/volume] in Serum or Plasma',\n groups: {\n 'LG5665-7': 'Alkaline phosphatase|CCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'CCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '6833-8': {\n component: 'Cat dander Ab.IgE',\n display: 'Cat dander IgE Ab [Units/volume] in Serum',\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser',\n time: 'Pt',\n },\n '6873-4': {\n component: 'Beta hydroxybutyrate',\n display: 'Beta hydroxybutyrate [Moles/volume] in Serum or Plasma',\n groups: {\n 'LG26613-6': 'Beta hydroxybutyrate|SCnc|Pt|ANYBldSerPl',\n 'LG43202-7': 'Beta hydroxybutyrate|Pt|Ser/Plas',\n },\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '6875-9': {\n component: 'Cancer Ag 15-3',\n display: 'Cancer Ag 15-3 [Units/volume] in Serum or Plasma',\n groups: {\n 'LG26852-0': 'Cancer Ag 15-3|ACnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '704-7': {\n component: 'Basophils',\n display: 'Basophils [#/volume] in Blood by Automated count',\n groups: {\n 'LG32848-0': 'Basophils|NCnc|Pt|Bld',\n },\n method: 'Automated count',\n property: 'NCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '706-2': {\n component: 'Basophils/leukocytes',\n display: 'Basophils/Leukocytes in Blood by Automated count',\n method: 'Automated count',\n property: 'NFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '711-2': {\n component: 'Eosinophils',\n display: 'Eosinophils [#/volume] in Blood by Automated count',\n groups: {\n 'LG32849-8': 'Eosinophils|NCnc|Pt|Bld',\n },\n method: 'Automated count',\n property: 'NCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '713-8': {\n component: 'Eosinophils/leukocytes',\n display: 'Eosinophils/Leukocytes in Blood by Automated count',\n method: 'Automated count',\n property: 'NFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '718-7': {\n component: 'Hemoglobin',\n display: 'Hemoglobin [Mass/volume] in Blood',\n groups: {\n 'LG44868-4': 'Hemoglobin|Pt|Bld',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '731-0': {\n component: 'Lymphocytes',\n display: 'Lymphocytes [#/volume] in Blood by Automated count',\n groups: {\n 'LG32863-9': 'Lymphocytes|NCnc|Pt|Bld',\n },\n method: 'Automated count',\n property: 'NCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '736-9': {\n component: 'Lymphocytes/leukocytes',\n display: 'Lymphocytes/Leukocytes in Blood by Automated count',\n method: 'Automated count',\n property: 'NFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '73708-0': {\n component: 'Body fat mass',\n display: 'Body fat [Mass] Calculated',\n method: 'Calculated',\n property: 'Mass',\n scale: 'Qn',\n status: 'ACTIVE',\n system: '^Patient',\n time: 'Pt',\n },\n '73964-9': {\n component: 'Body muscle mass',\n display: 'Body muscle mass Calculated',\n method: 'Calculated',\n property: 'Mass',\n scale: 'Qn',\n status: 'ACTIVE',\n system: '^Patient',\n time: 'Pt',\n },\n '742-7': {\n component: 'Monocytes',\n display: 'Monocytes [#/volume] in Blood by Automated count',\n groups: {\n 'LG32885-2': 'Monocytes|NCnc|Pt|Bld',\n },\n method: 'Automated count',\n property: 'NCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '751-8': {\n component: 'Neutrophils',\n display: 'Neutrophils [#/volume] in Blood by Automated count',\n groups: {\n 'LG32886-0': 'Neutrophils|NCnc|Pt|Bld',\n },\n method: 'Automated count',\n property: 'NCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '770-8': {\n component: 'Neutrophils/leukocytes',\n display: 'Neutrophils/Leukocytes in Blood by Automated count',\n method: 'Automated count',\n property: 'NFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '77307-7': {\n component: 'Lead',\n display: 'Lead [Mass/volume] in Venous blood',\n groups: {\n 'LG140-0': 'Lead|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'BldV',\n time: 'Pt',\n },\n '777-3': {\n component: 'Platelets',\n display: 'Platelets [#/volume] in Blood by Automated count',\n groups: {\n 'LG32892-8': 'Platelets|NCnc|Pt|Bld',\n },\n method: 'Automated count',\n property: 'NCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '785-6': {\n component: 'Hemoglobin',\n display: 'MCH [Entitic mass] by Automated count',\n method: 'Automated count',\n property: 'EntMass',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'RBC',\n time: 'Pt',\n },\n '786-4': {\n component: 'Hemoglobin',\n display: 'MCHC [Entitic Mass/volume] in Red Blood Cells by Automated count',\n method: 'Automated count',\n property: 'EntMCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'RBC',\n time: 'Pt',\n },\n '787-2': {\n component: 'Observation',\n display: 'MCV [Entitic mean volume] in Red Blood Cells by Automated count',\n method: 'Automated count',\n property: 'EntMeanVol',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'RBC',\n time: 'Pt',\n },\n '788-0': {\n component: 'Erythrocyte',\n display: 'Erythrocyte [DistWidth] in Blood by Automated count',\n method: 'Automated count',\n property: 'DistWidth',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '789-8': {\n component: 'Erythrocytes',\n display: 'Erythrocytes [#/volume] in Blood by Automated count',\n groups: {\n 'LG32850-6': 'Erythrocytes|NCnc|Pt|Bld',\n },\n method: 'Automated count',\n property: 'NCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '8061-4': {\n component: 'Nuclear Ab',\n display: 'Nuclear Ab [Presence] in Serum',\n groups: {\n 'LG4652-6': 'Nuclear Ab|PrThr|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'PrThr',\n scale: 'Ord',\n status: 'ACTIVE',\n system: 'Ser',\n time: 'Pt',\n },\n '8098-6': {\n component: 'Thyroglobulin Ab',\n display: 'Thyroglobulin Ab [Units/volume] in Serum or Plasma',\n groups: {\n 'LG21864-0': 'Thyroglobulin Ab|ACnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '8099-4': {\n component: 'Thyroperoxidase Ab',\n display: 'Thyroperoxidase Ab [Units/volume] in Serum or Plasma',\n groups: {\n 'LG359-6': 'Thyroperoxidase Ab|ACnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'ACnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '8245-3': {\n component: 'Zinc',\n display: 'Zinc [Mass/volume] in Blood',\n groups: {\n 'LG23959-6': 'Zinc|MCnc|Pt|ANYBldSerPl',\n },\n method: null,\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '8280-0': {\n component: 'Circumference.at umbilicus',\n display: 'Waist Circumference at umbilicus by Tape measure',\n method: 'Tape measure',\n property: 'Len',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Abdomen.mid',\n time: 'Pt',\n },\n '8353-5': {\n component: 'Skin fold thickness',\n display: 'Skin fold thickness Thigh',\n method: null,\n property: 'Len',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Thigh',\n time: 'Pt',\n },\n '8354-3': {\n component: 'Skin fold thickness',\n display: 'Skin fold thickness Triceps',\n method: null,\n property: 'Len',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Triceps',\n time: 'Pt',\n },\n '8355-0': {\n component: 'Skin fold thickness',\n display: 'Skin fold thickness Waist',\n method: null,\n property: 'Len',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Waist',\n time: 'Pt',\n },\n '883-9': {\n component: 'ABO group',\n display: 'ABO group [Type] in Blood',\n method: null,\n property: 'Type',\n scale: 'Nom',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '90908-5': {\n component: 'Eicosapentaenoate+Docosapentaenate w3+Docosahexaenoate/Fatty acids.C14-C22 risk',\n display:\n 'Eicosapentaenoate (C20:5w3)+Docosapentaenate (C22:5w3)+Docosahexaenoate (C22:6w3)/Fatty acids.C14-C22 risk [Interpretation] in Blood Qualitative',\n method: null,\n property: 'Imp',\n scale: 'Ord',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '90909-3': {\n component: 'Arachidonate/Eicosapentaenoate',\n display: 'Arachidonate (C20:4w6)/Eicosapentaenoate (C20:5w3) [Mass Ratio] in Blood',\n method: null,\n property: 'MRto',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '90910-1': {\n component: 'Fatty acids.omega 6/Fatty acids.omega 3',\n display: 'Omega 6 fatty acids (w6)/Omega 3 fatty acids (w3) [Mass Ratio] in Blood',\n method: null,\n property: 'MRto',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '90911-9': {\n component: 'Eicosapentaenoate+Docosapentaenate w3+Docosahexaenoate/Fatty acids.C14-C22',\n display:\n 'Eicosapentaenoate (C20:5w3)+Docosapentaenate (C22:5w3)+Docosahexaenoate (C22:6w3)/Fatty acids.C14-C22 in Blood',\n method: null,\n property: 'MFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '90912-7': {\n component: 'Eicosapentaenoate/Fatty acids.C14-C22',\n display: 'Eicosapentaenoate (C20:5w3)/Fatty acids.C14-C22 in Blood',\n method: null,\n property: 'MFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '90913-5': {\n component: 'Docosapentaenate w3/Fatty acids.C14-C22',\n display: 'Docosapentaenate (C22:5w3)/Fatty acids.C14-C22 in Blood',\n method: null,\n property: 'MFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '90914-3': {\n component: 'Docosahexaenoate/Fatty acids.C14-C22',\n display: 'Docosahexaenoate (C22:6w3)/Fatty acids.C14-C22 in Blood',\n method: null,\n property: 'MFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '90916-8': {\n component: 'Arachidonate/Fatty acids.C14-C22',\n display: 'Arachidonate (C20:4w6)/Fatty acids.C14-C22 in Blood',\n method: null,\n property: 'MFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '90917-6': {\n component: 'Linoleate/Fatty acids.C14-C22',\n display: 'Linoleate (C18:2w6)/Fatty acids.C14-C22 in Blood',\n method: null,\n property: 'MFr',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Bld',\n time: 'Pt',\n },\n '9318-7': {\n component: 'Albumin/Creatinine',\n display: 'Albumin/Creatinine [Mass Ratio] in Urine',\n groups: {\n 'LG34557-5': 'Albumin/Creatinine|MRto|Urine',\n 'LG51020-2': 'Albumin/Creatinine|MRto|Pt|ANYUrine',\n },\n method: null,\n property: 'MRto',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Urine',\n time: 'Pt',\n },\n '96259-7': {\n component: 'Cholesterol.in LDL',\n display:\n 'Cholesterol in LDL [Mass/volume] in Serum or Plasma by Calculated by Martin-Hopkins',\n groups: {\n 'LG51050-9': 'Cholesterol.in LDL|Pt|Ser/Plas|Calculated.Martin-Hopkins',\n 'LG6248-1': 'Cholesterol.in LDL|MCnc|Pt|ANYBldSerPl',\n },\n method: 'Calculated.Martin-Hopkins',\n property: 'MCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '96735-6': {\n component: 'Lipoprotein.beta.subparticle.medium',\n display: 'Lipoprotein.beta.subparticle.medium [Moles/volume] in Serum',\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser',\n time: 'Pt',\n },\n '9830-1': {\n component: 'Cholesterol.total/Cholesterol.in HDL',\n display: 'Cholesterol.total/Cholesterol in HDL [Mass Ratio] in Serum or Plasma',\n method: null,\n property: 'MRto',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas',\n time: 'Pt',\n },\n '98979-8': {\n component: 'Glomerular filtration rate',\n display:\n 'Glomerular filtration rate [Volume Rate/Area] in Serum, Plasma or Blood by Creatinine-based formula (CKD-EPI 2021)/1.73 sq M',\n groups: {\n 'LG50986-5': 'Glomerular filtration rate|ArVRat|Pt|ANYBldSerPl',\n },\n method: 'Creatinine-based formula (CKD-EPI 2021)/1.73 sq M',\n property: 'ArVRat',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'Ser/Plas/Bld',\n time: 'Pt',\n },\n '99620-7': {\n component: 'Fatty acids.omega 3',\n display: 'Omega 3 fatty acids (w3) [Moles/volume] in RBC.lysate',\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'RBC.lysate',\n time: 'Pt',\n },\n '99621-5': {\n component: 'Fatty acids.omega 6',\n display: 'Omega 6 fatty acids (w6) [Moles/volume] in RBC.lysate',\n method: null,\n property: 'SCnc',\n scale: 'Qn',\n status: 'ACTIVE',\n system: 'RBC.lysate',\n time: 'Pt',\n },\n },\n};\n","/**\n * Os eixos e os grupos LOINC de cada código do catálogo, como o servidor\n * oficial os publica, conferidos todo mês pelo `scripts/verify-loinc.ts`.\n *\n * Os dados vêm de `loinc-snapshot.generated.ts`, cópia do\n * `scripts/loinc-snapshot.json` feita pelo gerador. Toda leitura daqui carrega\n * o código e o display juntos, e quem republicar deve levar `LOINC_SNAPSHOT._notice`.\n */\nimport { LOINC_SNAPSHOT } from './loinc-snapshot.generated';\n\n/** Um código LOINC no snapshot, com os eixos na grafia em que o LOINC os exibe. */\nexport interface LoincEntry {\n component: string | null;\n display: string;\n /** LOINC Groups (`LG…`) a que o código pertence, com o nome de cada um. */\n groups?: Record<string, string>;\n /** Único eixo opcional: a maioria dos códigos não afirma método. */\n method: string | null;\n property: string | null;\n scale: string | null;\n status: string | null;\n system: string | null;\n time: string | null;\n}\n\nexport interface LoincSnapshot {\n _checkedAt: string;\n _loincVersion: string | null;\n /** Aviso da seção 10.1 da licença do LOINC. */\n _notice: string;\n codes: Record<string, LoincEntry>;\n}\n\nexport { LOINC_SNAPSHOT };\n\n/** Os eixos de um código do catálogo, ou `undefined` se ele não está no snapshot. */\nexport function getLoincEntry(loinc: string): LoincEntry | undefined {\n return LOINC_SNAPSHOT.codes[loinc];\n}\n","/**\n * Registro de decisão de cada mapeamento LOINC do catálogo.\n *\n * O catálogo em `biomarkers.ts` guarda a conclusão (o código). Este arquivo\n * guarda por que aquele código e não outro: o que o laudo mostrou, o que\n * decidiu, os irmãos descartados e quem revisou. É o diff que uma revisão de\n * mapeamento lê.\n *\n * A maioria das entradas é `nameOnly`: o código foi escolhido pelo nome do\n * exame, sem registro de unidade, método, material ou bula, e ninguém revisou\n * de fora. É o registro honesto do que existe, e não justificativa inventada.\n * As entradas com evidência vieram dos comentários em `biomarkers.ts` que já\n * documentavam a troca. `reviewer` fica vazio até uma revisão independente.\n *\n * `loinc` repete o código do catálogo de propósito: trocar o código em\n * `biomarkers.ts` sem tocar aqui falha em `mapping-decisions.test.ts`, e a\n * troca chega à revisão com o registro ao lado.\n *\n * Sem import em runtime: o `scripts/verify-loinc.ts` lê este arquivo direto com\n * o type stripping do Node, que não resolve import sem extensão. A ficha que\n * junta registro, catálogo e eixos fica em `mapping-sheet.ts`.\n */\n/** O que o laudo mostrou e pesou na escolha do código. */\nexport type MappingEvidence = 'assay-insert' | 'method-line' | 'name' | 'specimen' | 'unit';\n\nexport interface RejectedSibling {\n loinc: string;\n reason: string;\n}\n\nexport interface MappingDecision {\n evidence: MappingEvidence[];\n /** O código escolhido. Tem que ser o `loinc` do biomarcador no catálogo. */\n loinc: string;\n /** Versão do LOINC em que a revisão conferiu o código. */\n loincVersion?: string;\n note?: string;\n reviewedAt?: string;\n reviewer?: string;\n /** Qual evidência decidiu. Está sempre em `evidence`. */\n settledBy: MappingEvidence;\n siblingsRejected: RejectedSibling[];\n}\n\n/**\n * Por que uma entrada não tem LOINC.\n *\n * - `no-concept`: procurado, e o LOINC não tem o conceito.\n * - `ambiguous`: há candidatos, e nenhum é a mesma grandeza.\n * - `pending-review`: ninguém registrou a busca.\n * - `not-lab`: fora do escopo de exame laboratorial.\n */\nexport type NoLoincReason = 'ambiguous' | 'no-concept' | 'not-lab' | 'pending-review';\n\nexport interface NoLoincDecision {\n note: string;\n reason: NoLoincReason;\n}\n\n/** Escolhido pelo nome, sem outra evidência registrada nem revisão. */\nfunction nameOnly(loinc: string): MappingDecision {\n return { evidence: ['name'], loinc, settledBy: 'name', siblingsRejected: [] };\n}\n\nexport const MAPPING_DECISIONS: Record<string, MappingDecision> = {\n AA_EPA_Ratio: nameOnly('90909-3'),\n ABO_Group: nameOnly('883-9'),\n Adiponectin: nameOnly('47828-9'),\n AFP: nameOnly('1834-1'),\n Albumin: nameOnly('1751-7'),\n Albumin_Creatinine_Ratio: nameOnly('9318-7'),\n Albumin_Globulin_Ratio: nameOnly('1759-0'),\n AlkalinePhosphatase: nameOnly('6768-6'),\n ALT: nameOnly('1742-6'),\n AMH: nameOnly('38476-8'),\n Amylase: nameOnly('1798-8'),\n ANA_Screen: nameOnly('8061-4'),\n AntiThyroglobulin: nameOnly('8098-6'),\n AntiTPO: nameOnly('8099-4'),\n ApoA1: nameOnly('1869-7'),\n ApoB: nameOnly('1884-6'),\n APOE_Genotype: nameOnly('21619-2'),\n Appearance_Urine: nameOnly('5767-9'),\n AST: nameOnly('1920-8'),\n Bacteria_Urine: {\n loinc: '5769-5',\n evidence: ['name', 'unit'],\n settledBy: 'unit',\n siblingsRejected: [\n {\n loinc: '630-4',\n reason:\n 'urocultura, que identifica a espécie (nominal), e não a contagem do sedimento em /HPF',\n },\n ],\n },\n Basophils: nameOnly('706-2'),\n Basophils_Abs: nameOnly('704-7'),\n BetaHCG: nameOnly('19080-1'),\n BetaHydroxybutyrate: {\n loinc: '6873-4',\n evidence: ['name', 'unit'],\n settledBy: 'name',\n siblingsRejected: [\n {\n loinc: '53060-0',\n reason: 'butirilcarnitina (C4) em líquido amniótico: analito e material errados',\n },\n ],\n },\n Bilirubin_Urine: nameOnly('5770-3'),\n BilirubinDirect: nameOnly('1968-7'),\n BilirubinIndirect: nameOnly('1971-1'),\n BilirubinTotal: nameOnly('1975-2'),\n Blood_Urine: nameOnly('5794-3'),\n BMI: nameOnly('39156-5'),\n BNP: nameOnly('30934-4'),\n BodyFatPct: nameOnly('41982-0'),\n BodyWaterPct: nameOnly('101684-9'),\n BUN_Creatinine_Ratio: nameOnly('3097-3'),\n C3: nameOnly('4485-9'),\n C4: nameOnly('4498-2'),\n CA125: nameOnly('10334-1'),\n CA153: nameOnly('6875-9'),\n CA199: nameOnly('24108-3'),\n Calcium: nameOnly('17861-6'),\n CalfCircumference: nameOnly('107112-5'),\n CEA: nameOnly('2039-6'),\n Chloride: nameOnly('2075-0'),\n Cholesterol: nameOnly('2093-3'),\n Cholesterol_HDL_Ratio: nameOnly('9830-1'),\n CK: nameOnly('2157-6'),\n CO2: nameOnly('2028-9'),\n Color_Urine: nameOnly('5778-6'),\n Cortisol: nameOnly('2143-6'),\n Creatinine: nameOnly('2160-0'),\n Creatinine_Urine: nameOnly('2161-8'),\n CRP: nameOnly('1988-5'),\n CystatinC: nameOnly('33863-2'),\n DDimer: {\n loinc: '48065-7',\n evidence: ['name', 'unit'],\n settledBy: 'unit',\n siblingsRejected: [\n {\n loinc: '48066-5',\n reason: 'DDU, que vale cerca de metade do FEU que a faixa do catálogo pressupõe',\n },\n ],\n note: 'Laudo que imprime só \"ng/mL\" não diz a convenção; o FEU é o que a faixa pressupõe.',\n },\n DHEAS: nameOnly('2191-5'),\n DHT: nameOnly('1848-1'),\n eAG: nameOnly('27353-2'),\n eGFR: nameOnly('98979-8'),\n Eosinophils: nameOnly('713-8'),\n Eosinophils_Abs: nameOnly('711-2'),\n EPADPADHA: {\n loinc: '90911-9',\n evidence: ['name', 'unit'],\n settledBy: 'unit',\n siblingsRejected: [\n {\n loinc: '90908-5',\n reason:\n 'interpretação ordinal do mesmo valor (risco alto, moderado, baixo), e não o número',\n },\n ],\n },\n ESR: nameOnly('30341-2'),\n Estradiol: nameOnly('2243-4'),\n FatMass: nameOnly('73708-0'),\n Ferritin: nameOnly('2276-4'),\n Fibrinogen: nameOnly('3255-7'),\n Folate: nameOnly('2284-8'),\n FSH: nameOnly('15067-2'),\n GGT: nameOnly('2324-2'),\n Gliadin_Deamidated_IgA: nameOnly('63453-5'),\n Gliadin_Deamidated_IgG: nameOnly('63459-2'),\n Globulin: nameOnly('2336-6'),\n Glucose: {\n loinc: '2345-7',\n evidence: ['name'],\n settledBy: 'name',\n siblingsRejected: [\n {\n loinc: '1558-6',\n reason: 'afirma jejum (Glucose^post CFst), e a grafia \"Glicose\" não declara jejum',\n },\n ],\n },\n Glucose_Fasting: {\n loinc: '1558-6',\n evidence: ['name'],\n settledBy: 'name',\n siblingsRejected: [{ loinc: '2345-7', reason: 'não afirma jejum, e a grafia declara' }],\n },\n Glucose_Urine: nameOnly('5792-7'),\n HbA1c: nameOnly('4548-4'),\n Hct: nameOnly('4544-3'),\n HDL: nameOnly('2085-9'),\n HDL_Large: nameOnly('43729-3'),\n Hgb: nameOnly('718-7'),\n HOMA_IR: nameOnly('47214-2'),\n Homocysteine: nameOnly('13965-9'),\n HyalineCasts_Urine: nameOnly('5796-8'),\n IgA: nameOnly('2458-8'),\n IgE_E1_CatDander: nameOnly('6833-8'),\n IgE_GX1_Grasses: nameOnly('30189-5'),\n IgE_Total: nameOnly('19113-0'),\n IgG: nameOnly('2465-3'),\n IgM: nameOnly('2472-9'),\n INR: nameOnly('6301-6'),\n Insulin: nameOnly('20448-7'),\n Iron: nameOnly('2498-4'),\n Ketones_Urine: nameOnly('5797-6'),\n LDH: nameOnly('14804-9'),\n LDL: {\n loinc: '2089-1',\n evidence: ['name'],\n settledBy: 'name',\n siblingsRejected: [],\n note: 'Código sem método. A linha de método do laudo escolhe a variante (13457-7, 18262-6, 96259-7).',\n },\n LDL_Medium: nameOnly('96735-6'),\n LDL_ParticleNumber: nameOnly('54434-6'),\n LDL_Pattern: nameOnly('35505-7'),\n LDL_Peak_Size: nameOnly('17782-4'),\n LDL_Small: nameOnly('43727-7'),\n Lead: nameOnly('77307-7'),\n Leptin: nameOnly('21365-2'),\n LeukocyteEsterase_Urine: nameOnly('5799-2'),\n Leukocytes_Urine: nameOnly('5821-4'),\n LH: nameOnly('10501-5'),\n Lipase: nameOnly('3040-3'),\n Lipoprotein_a: {\n loinc: '43583-4',\n evidence: ['name', 'unit'],\n settledBy: 'unit',\n siblingsRejected: [\n {\n loinc: '10835-7',\n reason:\n 'massa/volume (mg/dL), incompatível com o nmol/L declarado; a SBC 2025 recomenda ensaio independente de isoforma em nmol/L',\n },\n ],\n },\n Lymphocytes: nameOnly('736-9'),\n Lymphocytes_Abs: nameOnly('731-0'),\n Magnesium: nameOnly('19123-9'),\n Magnesium_RBC: nameOnly('26746-8'),\n MCH: nameOnly('785-6'),\n MCHC: nameOnly('786-4'),\n MCV: nameOnly('787-2'),\n Mercury: nameOnly('5685-3'),\n Microalbumin_Urine: nameOnly('14957-5'),\n MMA: nameOnly('13964-2'),\n Monocytes: nameOnly('5905-5'),\n Monocytes_Abs: nameOnly('742-7'),\n MPV: nameOnly('32623-1'),\n MuscleMass: nameOnly('73964-9'),\n Neutrophils: nameOnly('770-8'),\n Neutrophils_Abs: nameOnly('751-8'),\n Nitrite_Urine: nameOnly('5802-4'),\n NonHDL_Cholesterol: nameOnly('43396-1'),\n NTproBNP: nameOnly('33762-6'),\n Omega3_DHA: {\n loinc: '90914-3',\n evidence: ['name', 'unit'],\n settledBy: 'unit',\n siblingsRejected: [],\n note: 'Fração do total de ácidos graxos (painel 90918-4), que é o % impresso.',\n },\n Omega3_DPA: {\n loinc: '90913-5',\n evidence: ['name', 'unit'],\n settledBy: 'unit',\n siblingsRejected: [],\n note: 'Fração do total de ácidos graxos (painel 90918-4), que é o % impresso.',\n },\n Omega3_EPA: {\n loinc: '90912-7',\n evidence: ['name', 'unit'],\n settledBy: 'unit',\n siblingsRejected: [],\n note: 'Fração do total de ácidos graxos (painel 90918-4), que é o % impresso.',\n },\n Omega3_Total: {\n loinc: '99620-7',\n evidence: ['name'],\n settledBy: 'name',\n siblingsRejected: [],\n note: 'Moles/volume em RBC.lysate, e o laudo imprime %: não há código de fração para o total.',\n },\n Omega6_AA: {\n loinc: '90916-8',\n evidence: ['name', 'unit'],\n settledBy: 'unit',\n siblingsRejected: [],\n note: 'Fração do total de ácidos graxos (painel 90918-4), que é o % impresso.',\n },\n Omega6_LA: {\n loinc: '90917-6',\n evidence: ['name', 'unit'],\n settledBy: 'unit',\n siblingsRejected: [],\n note: 'Fração do total de ácidos graxos (painel 90918-4), que é o % impresso.',\n },\n Omega6_Omega3_Ratio: nameOnly('90910-1'),\n Omega6_Total: {\n loinc: '99621-5',\n evidence: ['name'],\n settledBy: 'name',\n siblingsRejected: [\n {\n loinc: '35177-5',\n reason:\n 'ácidos graxos poli-insaturados totais, ômega-3 e ômega-6 somados: outro componente',\n },\n ],\n note: 'Moles/volume em RBC.lysate, e o laudo imprime %: não há código de fração para o total.',\n },\n pH_Urine: nameOnly('5803-2'),\n PhaseAngle: {\n loinc: '107160-4',\n evidence: ['name'],\n settledBy: 'name',\n siblingsRejected: [],\n note: 'Único código de ângulo de fase; declara razão e o aparelho imprime graus.',\n },\n Platelets: nameOnly('777-3'),\n Potassium: nameOnly('2823-3'),\n Progesterone: nameOnly('2839-9'),\n Prolactin: nameOnly('2842-3'),\n Protein_Urine: nameOnly('5804-0'),\n ProthrombinTime: nameOnly('5902-2'),\n PSA: nameOnly('2857-1'),\n PSA_Free: nameOnly('10886-0'),\n PSA_FreeRatio: nameOnly('12841-3'),\n PTH: nameOnly('2731-8'),\n RBC: nameOnly('789-8'),\n RBC_Urine: {\n loinc: '13945-1',\n evidence: ['name', 'unit'],\n settledBy: 'unit',\n siblingsRejected: [\n { loinc: '5808-1', reason: 'o mesmo exame em #/volume (por mL), e o laudo imprime /HPF' },\n ],\n },\n RDW: nameOnly('788-0'),\n Reticulocytes: nameOnly('4679-7'),\n Rh_Type: nameOnly('10331-7'),\n RheumatoidFactor: nameOnly('11572-5'),\n Selenium: nameOnly('5724-0'),\n SHBG: nameOnly('13967-5'),\n SkinfoldAbdominal: nameOnly('8355-0'),\n SkinfoldThigh: nameOnly('8353-5'),\n SkinfoldTriceps: nameOnly('8354-3'),\n Sodium: nameOnly('2951-2'),\n SpecificGravity_Urine: nameOnly('5811-5'),\n SquamousEpithelial_Urine: nameOnly('11277-1'),\n T3Free: nameOnly('3051-0'),\n T4Free: nameOnly('3024-7'),\n T4Total: nameOnly('3026-2'),\n Testosterone: nameOnly('2986-8'),\n TestosteroneFree: nameOnly('2991-8'),\n Thyroglobulin: nameOnly('3013-0'),\n TIBC: nameOnly('2500-7'),\n TotalBodyWater: {\n loinc: '101683-1',\n evidence: ['name', 'unit'],\n settledBy: 'name',\n siblingsRejected: [],\n note: 'Único código de água corporal total; é massa (kg) e o aparelho imprime litros, o mesmo número para água.',\n },\n TotalMass: nameOnly('29463-7'),\n TotalProtein: nameOnly('2885-2'),\n TransferrinSaturation: nameOnly('2502-3'),\n Triglycerides: nameOnly('2571-8'),\n TroponinI: {\n loinc: '49563-0',\n evidence: ['name', 'unit'],\n settledBy: 'unit',\n siblingsRejected: [],\n note: '49563-0 afirma o ensaio de alta sensibilidade; troponina I convencional pede 10839-9, sem método.',\n },\n TroponinT: {\n loinc: '6598-7',\n evidence: ['name', 'unit'],\n settledBy: 'name',\n siblingsRejected: [],\n note: '6598-7 não afirma método e cobre o ensaio convencional e o ultrassensível; o código hs entra como variante por método.',\n },\n TSH: nameOnly('3016-3'),\n tTG_IgA: nameOnly('31017-7'),\n tTG_IgG: nameOnly('32998-7'),\n Urea: nameOnly('3091-6'),\n Urea_Creatinine_Ratio: {\n loinc: '56997-0',\n evidence: ['name'],\n settledBy: 'name',\n note: 'separado de BUN_Creatinine_Ratio em out/2026: o laudo brasileiro dosa ureia (3091-6), e a razão impressa é ureia/creatinina',\n siblingsRejected: [\n {\n loinc: '3097-3',\n reason:\n 'nitrogênio ureico (BUN)/creatinina: outro componente, valor cerca de 2,14 vezes menor e faixa da convenção BUN',\n },\n ],\n },\n UricAcid: nameOnly('3084-1'),\n Urobilinogen_Urine: nameOnly('20405-7'),\n VitaminA: nameOnly('2923-1'),\n VitaminB12: nameOnly('2132-9'),\n VitaminC: nameOnly('1903-4'),\n VitaminD: {\n loinc: '62292-8',\n evidence: ['name', 'assay-insert'],\n settledBy: 'assay-insert',\n siblingsRejected: [\n { loinc: '1989-3', reason: 'só a fração D3; os imunoensaios reportam D2 + D3' },\n ],\n },\n VLDL: nameOnly('13458-5'),\n WaistCircumference: nameOnly('8280-0'),\n WBC: nameOnly('6690-2'),\n Zinc: {\n loinc: '5763-8',\n evidence: ['name', 'specimen'],\n settledBy: 'specimen',\n siblingsRejected: [\n { loinc: '8245-3', reason: 'sangue total, outro material com faixa própria' },\n ],\n },\n};\n\nexport const NO_LOINC_DECISIONS: Record<string, NoLoincDecision> = {\n AndroidFatPct: {\n reason: 'no-concept',\n note: 'DEXA: o LOINC não tem o conceito para corpo inteiro ou região.',\n },\n AndroidGynoidRatio: {\n reason: 'no-concept',\n note: 'DEXA: o LOINC não tem o conceito para corpo inteiro ou região.',\n },\n AorticValveCalcium: {\n reason: 'pending-review',\n note: 'Escore de cálcio por tomografia; nenhuma busca registrada.',\n },\n ArmsFatMass: {\n reason: 'no-concept',\n note: 'DEXA: o LOINC não tem o conceito para corpo inteiro ou região.',\n },\n ArmsLeanMass: {\n reason: 'no-concept',\n note: 'DEXA: o LOINC não tem o conceito para corpo inteiro ou região.',\n },\n BMC: {\n reason: 'no-concept',\n note: 'DEXA: o LOINC não tem o conceito para corpo inteiro ou região.',\n },\n BMD_Total: {\n reason: 'no-concept',\n note: 'O LOINC só tem densitometria por sítio, não corpo inteiro.',\n },\n BasalMetabolicRate: {\n reason: 'ambiguous',\n note: 'Candidatos são índice (50042-1) ou RMR medido ou previsto (82278-3, 82286-6), e o aparelho estima TMB.',\n },\n CAC: {\n reason: 'pending-review',\n note: 'Escore de cálcio por tomografia; nenhuma busca registrada.',\n },\n CAC_LAD: {\n reason: 'pending-review',\n note: 'Escore de cálcio por tomografia; nenhuma busca registrada.',\n },\n CAC_LCX: {\n reason: 'pending-review',\n note: 'Escore de cálcio por tomografia; nenhuma busca registrada.',\n },\n CAC_LMA: {\n reason: 'pending-review',\n note: 'Escore de cálcio por tomografia; nenhuma busca registrada.',\n },\n CAC_Percentile: {\n reason: 'pending-review',\n note: 'Escore de cálcio por tomografia; nenhuma busca registrada.',\n },\n CAC_RCA: {\n reason: 'pending-review',\n note: 'Escore de cálcio por tomografia; nenhuma busca registrada.',\n },\n ConicityIndex: { reason: 'no-concept', note: 'Índice derivado, sem conceito próprio.' },\n ECWToTBWRatio: { reason: 'no-concept', note: 'Razão derivada, sem conceito próprio.' },\n Estrone: {\n reason: 'no-concept',\n note: 'Em soro só há a fração não conjugada (2261-6); não há estrona total.',\n },\n ExtracellularWater: { reason: 'no-concept', note: '\"extracellular water\" não devolve código.' },\n FatFreeMass: {\n reason: 'no-concept',\n note: 'DEXA: o LOINC não tem o conceito para corpo inteiro ou região.',\n },\n GynoidFatPct: {\n reason: 'no-concept',\n note: 'DEXA: o LOINC não tem o conceito para corpo inteiro ou região.',\n },\n IntracellularWater: { reason: 'no-concept', note: '\"intracellular water\" não devolve código.' },\n LeanMass: {\n reason: 'no-concept',\n note: 'Massa magra não é massa muscular (73964-9); não há LOINC para massa magra.',\n },\n LegsFatMass: {\n reason: 'no-concept',\n note: 'DEXA: o LOINC não tem o conceito para corpo inteiro ou região.',\n },\n LegsLeanMass: {\n reason: 'no-concept',\n note: 'DEXA: o LOINC não tem o conceito para corpo inteiro ou região.',\n },\n MuscleMassIndex: {\n reason: 'no-concept',\n note: 'Índice derivado de massa muscular total; os cortes publicados são sobre massa apendicular.',\n },\n ResidualMass: {\n reason: 'no-concept',\n note: 'Conceito de fracionamento antropométrico, sem código.',\n },\n SkinfoldChest: { reason: 'no-concept', note: 'O LOINC só tem dobra de tríceps, coxa e cintura.' },\n SkinfoldMidaxillary: {\n reason: 'no-concept',\n note: 'O LOINC só tem dobra de tríceps, coxa e cintura.',\n },\n SkinfoldSubscapular: {\n reason: 'no-concept',\n note: 'O LOINC só tem dobra de tríceps, coxa e cintura.',\n },\n SkinfoldSuprailiac: {\n reason: 'no-concept',\n note: 'O LOINC só tem dobra de tríceps, coxa e cintura.',\n },\n TScore_Total: {\n reason: 'no-concept',\n note: 'O LOINC só tem densitometria por sítio, não corpo inteiro.',\n },\n TrunkFatMass: {\n reason: 'no-concept',\n note: 'DEXA: o LOINC não tem o conceito para corpo inteiro ou região.',\n },\n TrunkLeanMass: {\n reason: 'no-concept',\n note: 'DEXA: o LOINC não tem o conceito para corpo inteiro ou região.',\n },\n VATMass: {\n reason: 'no-concept',\n note: 'DEXA: o LOINC não tem o conceito para corpo inteiro ou região.',\n },\n VATVolume: {\n reason: 'no-concept',\n note: 'DEXA: o LOINC não tem o conceito para corpo inteiro ou região.',\n },\n VisceralFatLevel: {\n reason: 'no-concept',\n note: 'Índice de 1 a 20; 73707-2 é área, outra grandeza.',\n },\n WaistToHeightRatio: { reason: 'no-concept', note: '\"waist to height\" não devolve código.' },\n ZScore_Total: {\n reason: 'no-concept',\n note: 'O LOINC só tem densitometria por sítio, não corpo inteiro.',\n },\n};\n\nexport function getMappingDecision(code: string): MappingDecision | undefined {\n return MAPPING_DECISIONS[code];\n}\n\nexport function getNoLoincDecision(code: string): NoLoincDecision | undefined {\n return NO_LOINC_DECISIONS[code];\n}\n","/**\n * A ficha de um mapeamento LOINC no formato da planilha de um mapeador: nome\n * local, unidade, material, método, candidatos com os eixos, escolhido,\n * rejeitados, grupos, revisor e versão. É o que `fhir-bio decision` imprime.\n */\nimport { type BiomarkerDefinition, getDefinitionByCode, getDefinitionByLoinc } from './biomarkers';\nimport { getLoincEntry, type LoincEntry } from './loinc-axes';\nimport {\n getMappingDecision,\n getNoLoincDecision,\n type MappingDecision,\n type NoLoincDecision,\n} from './mapping-decisions';\n\n/** Um código candidato com os eixos que o snapshot guarda dele. */\nexport interface MappingCandidate {\n axes?: LoincEntry;\n loinc: string;\n role: 'chosen' | 'method-variant' | 'rejected';\n /** Pista impressa da variante, ou o motivo da rejeição. */\n why?: string;\n}\n\n/** A ficha de um mapeamento, no formato da planilha de um mapeador. */\nexport interface MappingSheet {\n candidates: MappingCandidate[];\n code: string;\n decision?: MappingDecision;\n /** LOINC Groups do código escolhido. */\n groups: Record<string, string>;\n localNames: string[];\n method: string | null;\n noLoinc?: NoLoincDecision;\n specimen: string | null;\n unit?: string;\n}\n\n/** Aceita o código interno ou qualquer LOINC que resolva para o biomarcador. */\nexport function getMappingSheet(codeOrLoinc: string): MappingSheet | undefined {\n const def: BiomarkerDefinition | undefined =\n getDefinitionByCode(codeOrLoinc) ?? getDefinitionByLoinc(codeOrLoinc);\n if (!def) return undefined;\n\n const decision = getMappingDecision(def.code);\n const chosen = def.loinc ? getLoincEntry(def.loinc) : undefined;\n const candidates: MappingCandidate[] = [];\n if (def.loinc) candidates.push({ axes: chosen, loinc: def.loinc, role: 'chosen' });\n for (const v of def.methodVariants ?? []) {\n const cues = [...v.cues.pt, ...v.cues.en];\n candidates.push({\n axes: getLoincEntry(v.loinc),\n loinc: v.loinc,\n role: 'method-variant',\n why: cues.length ? cues.join('; ') : undefined,\n });\n }\n for (const s of decision?.siblingsRejected ?? []) {\n candidates.push({\n axes: getLoincEntry(s.loinc),\n loinc: s.loinc,\n role: 'rejected',\n why: s.reason,\n });\n }\n\n return {\n candidates,\n code: def.code,\n decision,\n groups: chosen?.groups ?? {},\n localNames: def.names.pt,\n method: chosen?.method ?? null,\n noLoinc: getNoLoincDecision(def.code),\n specimen: chosen?.system ?? null,\n unit: def.unit,\n };\n}\n","/**\n * Material impresso contra o sistema LOINC do código.\n *\n * O laudo imprime o material de cada exame (\"Material: Urina de 24 horas\",\n * \"Material: Soro\"), e o código LOINC carrega o dele no eixo System. Quando os\n * dois discordam, o código está errado para aquele resultado: \"Sódio\" numa\n * seção de urina casa pelo nome com o sódio sérico, e sair com o código de soro\n * afirma uma grandeza que o laboratório não mediu.\n *\n * A comparação é por classe, sangue ou urina, e não por código de material. O\n * `specimenTypeCoding` não casa \"Urina de 24 horas\", de propósito, porque não\n * inventa sinônimo para codificar `Specimen.type`. Para barrar um código basta\n * saber que é urina, e a primeira palavra diz isso sem afirmar mais nada.\n *\n * Material que não começa por uma palavra conhecida, e sistema fora das duas\n * classes (antropometria, `Bld/Tiss`), não barram nada: sem classe dos dois\n * lados não há conflito a afirmar.\n */\nimport { getLoincEntry } from './loinc-axes';\n\nexport type SpecimenClass = 'blood' | 'urine';\n\n/** Palavra inicial do material impresso, já sem acento e em minúsculas. */\nconst CLASSE_DO_MATERIAL: Record<string, SpecimenClass> = {\n plasma: 'blood',\n sangue: 'blood',\n soro: 'blood',\n urina: 'urine',\n};\n\n/** Sistemas do LOINC por classe. `Bld/Tiss` fica de fora: não é só sangue. */\nconst CLASSE_DO_SISTEMA: Record<string, SpecimenClass> = {\n Bld: 'blood',\n BldV: 'blood',\n Plas: 'blood',\n PPP: 'blood',\n RBC: 'blood',\n 'RBC.lysate': 'blood',\n Ser: 'blood',\n 'Ser/Plas': 'blood',\n 'Ser/Plas/Bld': 'blood',\n Urine: 'urine',\n 'Urine sed': 'urine',\n};\n\nconst primeiraPalavra = (texto: string): string =>\n texto\n .replace(/\\p{Cf}/gu, '')\n .normalize('NFD')\n .replace(/[̀-ͯ]/g, '')\n .toLowerCase()\n .trim()\n .split(/[^a-z]+/)[0] ?? '';\n\n/** Classe do material impresso, ou `undefined` quando a palavra inicial não diz. */\nexport function specimenClassOf(material: string): SpecimenClass | undefined {\n return CLASSE_DO_MATERIAL[primeiraPalavra(material)];\n}\n\n/** Classe do eixo System do código, ou `undefined` fora do snapshot ou das duas classes. */\nexport function loincSpecimenClass(loinc: string): SpecimenClass | undefined {\n const system = getLoincEntry(loinc)?.system;\n return system ? CLASSE_DO_SISTEMA[system] : undefined;\n}\n\nexport interface SpecimenMismatch {\n /** Classe do eixo System do código. */\n code: SpecimenClass;\n loinc: string;\n /** Classe do material impresso. */\n material: SpecimenClass;\n reason: 'specimen-mismatch';\n system: string;\n}\n\n/**\n * O conflito entre o material impresso e o código, ou `null` sem conflito\n * afirmável. Quem chama decide o que fazer com o resultado, e a decisão que não\n * existe é trocar o código por um palpite: conflito é lacuna, e sai como tal.\n */\nexport function specimenMismatch(material: string, loinc: string): SpecimenMismatch | null {\n const doMaterial = specimenClassOf(material);\n const doCodigo = loincSpecimenClass(loinc);\n if (!doMaterial || !doCodigo || doMaterial === doCodigo) return null;\n return {\n code: doCodigo,\n loinc,\n material: doMaterial,\n reason: 'specimen-mismatch',\n system: getLoincEntry(loinc)?.system ?? '',\n };\n}\n"]}