Skip to main content
Glama
systems.test.ts4.35 kB
// SPDX-FileCopyrightText: Copyright Orangebot, Inc. and Medplum contributors // SPDX-License-Identifier: Apache-2.0 import { LOINC, SNOMED } from '@medplum/core'; import { OID_SNOMED_CT_CODE_SYSTEM } from './oids'; import { EnumMapper, mapCcdaCodeToCodeableConcept, mapCodeableConceptToCcdaCode } from './systems'; describe('EnumMapper', () => { const mapper = new EnumMapper<string, string>( { ccdaSystemOid: OID_SNOMED_CT_CODE_SYSTEM, fhirSystemUrl: SNOMED, }, [ { ccdaValue: 'c0', fhirValue: 'f0', displayName: 'd0' }, { ccdaValue: 'c1', fhirValue: 'f1', displayName: 'd1' }, { ccdaValue: 'c2', fhirValue: 'f2', displayName: 'd2' }, ] ); test('getEntryByFhir', () => { expect(mapper.getEntryByFhir('f0')?.ccdaValue).toBe('c0'); expect(mapper.getEntryByFhir('c0')).toBeUndefined(); }); test('mapCcdaToFhir', () => { expect(mapper.mapCcdaToFhir('c0')).toBe('f0'); expect(mapper.mapCcdaToFhir('f0')).toBeUndefined(); expect(mapper.mapCcdaToFhir('')).toBeUndefined(); }); test('mapCcdaToFhirWithDefault', () => { expect(mapper.mapCcdaToFhirWithDefault('c0', 'f1')).toBe('f0'); expect(mapper.mapCcdaToFhirWithDefault('c3', 'f1')).toBe('f1'); }); test('mapFhirToCcdaWithDefault', () => { expect(mapper.mapFhirToCcdaWithDefault('f0', 'c1')).toBe('c0'); expect(mapper.mapFhirToCcdaWithDefault('f3', 'c1')).toBe('c1'); }); test('mapCcdaToFhirCodeableConcept', () => { const r1 = mapper.mapCcdaToFhirCodeableConcept('c0'); expect(r1?.coding?.[0]?.code).toBe('f0'); expect(r1?.coding?.[0]?.system).toBe(SNOMED); expect(r1?.text).toBe('d0'); const r2 = mapper.mapCcdaToFhirCodeableConcept('c3'); expect(r2).toBeUndefined(); }); test('mapCcdaCodeToCodeableConcept', () => { const r0 = mapCcdaCodeToCodeableConcept(undefined); expect(r0).toBeUndefined(); const r1 = mapCcdaCodeToCodeableConcept({ '@_codeSystem': OID_SNOMED_CT_CODE_SYSTEM, '@_code': 'c0', '@_displayName': 'd0', }); expect(r1?.coding?.[0]?.code).toBe('c0'); expect(r1?.coding?.[0]?.system).toBe(SNOMED); expect(r1?.text).toBe('d0'); const r2 = mapCcdaCodeToCodeableConcept({ '@_codeSystem': OID_SNOMED_CT_CODE_SYSTEM, '@_code': 'c1', '@_displayName': 'd1', translation: [ { '@_codeSystem': '2.16.840.1.113883.6.1', '@_code': 'c3', '@_displayName': 'd3' }, { '@_code': 'c4' }, ], }); expect(r2?.coding?.length).toBe(2); expect(r2?.coding?.[0]?.code).toBe('c1'); expect(r2?.coding?.[0]?.system).toBe(SNOMED); expect(r2?.text).toBe('d1'); }); test('mapFhirToCcda', () => { expect(mapper.mapFhirToCcda('f0')).toBe('c0'); expect(mapper.mapFhirToCcda('c0')).toBeUndefined(); expect(mapper.mapFhirToCcda('')).toBeUndefined(); }); test('mapFhirToCcdaCode', () => { const r1 = mapper.mapFhirToCcdaCode('f0'); expect(r1?.['@_code']).toBe('c0'); expect(r1?.['@_codeSystem']).toBe(OID_SNOMED_CT_CODE_SYSTEM); expect(r1?.['@_codeSystemName']).toBe('SNOMED CT'); expect(r1?.['@_displayName']).toBe('d0'); const r2 = mapper.mapFhirToCcdaCode('c3'); expect(r2).toBeUndefined(); const r3 = mapper.mapFhirToCcdaCode(''); expect(r3).toBeUndefined(); }); test('mapCodeableConceptToCcdaCode', () => { const r1 = mapCodeableConceptToCcdaCode({ text: 'test' }); expect(r1).toBeUndefined(); const r2 = mapCodeableConceptToCcdaCode({ coding: [{ code: 'foo' }] }); expect(r2).toMatchObject({ '@_code': 'foo' }); const r3 = mapCodeableConceptToCcdaCode({ coding: [ { system: SNOMED, code: 'foo', display: 'Foo' }, { system: LOINC, code: 'bar', display: 'Bar' }, ], }); expect(r3).toMatchObject({ '@_code': 'foo', '@_codeSystem': '2.16.840.1.113883.6.96', '@_codeSystemName': 'SNOMED CT', '@_displayName': 'Foo', translation: [ { '@_code': 'bar', '@_codeSystem': '2.16.840.1.113883.6.1', '@_codeSystemName': 'LOINC', '@_displayName': 'Bar', }, ], }); const r4 = mapCodeableConceptToCcdaCode({ coding: [{ code: 'foo', system: 'urn:oid:9.9.9.9' }] }); expect(r4).toMatchObject({ '@_code': 'foo', '@_codeSystem': '9.9.9.9' }); }); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/medplum/medplum'

If you have feedback or need assistance with the MCP directory API, please join our Discord server