@oystehr/sdk
Version:
Oystehr SDK
32 lines (28 loc) • 1.44 kB
text/typescript
import { Encounter as EncounterR4B } from 'fhir/r4b';
import { Encounter as EncounterR5 } from 'fhir/r5';
export const ENCOUNTER_VS_EXTENSION_URL = 'https://extensions.fhir.zapehr.com/encounter-virtual-service-pre-release';
export const ENCOUNTER_VS_EXTENSION_RELATIVE_URL = 'addressString';
const ENCOUNTER_VS_CODING_SYSTEM = 'https://fhir.zapehr.com/virtual-service-type';
function isR5Encounter(encounter: EncounterR4B | EncounterR5): encounter is EncounterR5 {
return Object.hasOwn(encounter as EncounterR5, 'virtualService');
}
/**
* Helper function to get a conversationId from an encounter created as an Oystehr Conversation
* @param encounter well-formed FHIR R4B or R5 Encounter
* @returns conversationId
*/
export function getConversationIdFromEncounter(encounter: EncounterR4B | EncounterR5): string | undefined {
if (isR5Encounter(encounter)) {
const virtualService = encounter.virtualService?.find(
(vs) => vs.channelType?.system === ENCOUNTER_VS_CODING_SYSTEM
);
return virtualService?.addressString;
}
if (!encounter.extension) return;
const virtualServiceExtension = encounter.extension.find((extension) => extension.url === ENCOUNTER_VS_EXTENSION_URL);
if (!virtualServiceExtension?.extension) return;
const conversationId = virtualServiceExtension.extension?.find(
(extension) => extension.url === ENCOUNTER_VS_EXTENSION_RELATIVE_URL
)?.valueString;
return conversationId;
}