@causalfoundry/js-sdk
Version:
Causal Foundry WEB SDK (JS/TS)
86 lines (79 loc) • 2.27 kB
text/typescript
import { injectEvent } from "../../core/injector";
import {
AppointmentProperties,
EncounterProperties,
HcwCatalogModel,
PatientCatalogModel,
PatientProperties,
PatientMgmtCatalogType,
PatientMgmtEventType,
DiagnosisProperties,
} from "./typings";
import {
validateAppointmentEvent,
validateDiagnosisEvent,
validateEncounterEvent,
validatePatientEvent,
} from "./validators";
import {
validateAndSaveHCWCatalog,
validateAndSavePatientCatalog,
} from "./validators/PatientMgmtCatalogValidator";
/**
* logPatientModuleEvent is to log the selection of the module selected by the user in the app.
*/
const logIngestEvent = async (
eventType: PatientMgmtEventType,
properties: PatientProperties | EncounterProperties | AppointmentProperties,
sendNow = false,
eventTime?: string
) => {
let checkProps:
| PatientProperties
| EncounterProperties
| AppointmentProperties
| null = null;
switch (eventType) {
case PatientMgmtEventType.Patient:
checkProps = validatePatientEvent(properties as PatientProperties);
break;
case PatientMgmtEventType.Encounter:
checkProps = validateEncounterEvent(properties as EncounterProperties);
break;
case PatientMgmtEventType.Appointment:
checkProps = validateAppointmentEvent(
properties as AppointmentProperties
);
break;
case PatientMgmtEventType.Diagnosis:
checkProps = validateDiagnosisEvent(properties as DiagnosisProperties);
break;
default:
return; // Exit early if eventType is unrecognized
}
if (!checkProps) {
return; // Exit if the properties validation failed
}
injectEvent(eventType, properties.action, properties, sendNow, "", eventTime);
};
const logCatalogEvent = (
subjectId: string,
catalogType: PatientMgmtCatalogType,
catalogModel: HcwCatalogModel | PatientCatalogModel
) => {
switch (catalogType) {
case PatientMgmtCatalogType.UserHcw:
validateAndSaveHCWCatalog(subjectId, catalogModel as HcwCatalogModel);
break;
case PatientMgmtCatalogType.Patient:
validateAndSavePatientCatalog(
subjectId,
catalogModel as PatientCatalogModel
);
break;
}
};
export default {
logIngestEvent,
logCatalogEvent,
};