emr-types
Version:
Comprehensive TypeScript Types Library for Electronic Medical Record (EMR) Applications - Domain-Driven Design with Zod Validation
102 lines • 3.2 kB
JavaScript
// ============================================================================
// EVENT FACTORIES
// ============================================================================
/**
* Factory functions for creating patient domain events
*/
export const PatientEventFactory = {
/**
* Create a PatientRegisteredEvent
*/
createPatientRegisteredEvent(patient, registeredBy, registrationMethod, source) {
return {
eventId: crypto.randomUUID(),
eventType: 'PatientRegistered',
occurredAt: new Date(),
aggregateId: patient.id.value,
aggregateVersion: 1,
patientId: patient.id,
tenantId: patient.tenantId,
data: {
patient,
registeredBy,
registrationMethod,
...(source && { source })
}
};
},
/**
* Create a PatientUpdatedEvent
*/
createPatientUpdatedEvent(patient, updatedBy, changes, updateReason) {
return {
eventId: crypto.randomUUID(),
eventType: 'PatientUpdated',
occurredAt: new Date(),
aggregateId: patient.id.value,
aggregateVersion: 1,
patientId: patient.id,
tenantId: patient.tenantId,
data: {
patient,
updatedBy,
changes,
...(updateReason && { updateReason })
}
};
},
/**
* Create a PatientStatusChangedEvent
*/
createPatientStatusChangedEvent(patient, oldStatus, newStatus, changedBy, reason) {
return {
eventId: crypto.randomUUID(),
eventType: 'PatientStatusChanged',
occurredAt: new Date(),
aggregateId: patient.id.value,
aggregateVersion: 1,
patientId: patient.id,
tenantId: patient.tenantId,
data: {
patient,
oldStatus,
newStatus,
changedBy,
effectiveDate: new Date(),
...(reason && { reason })
}
};
}
};
// ============================================================================
// TYPE GUARDS
// ============================================================================
/**
* Type guard to check if an event is a PatientRegisteredEvent
*/
export function isPatientRegisteredEvent(event) {
return event.eventType === 'PatientRegistered';
}
/**
* Type guard to check if an event is a PatientUpdatedEvent
*/
export function isPatientUpdatedEvent(event) {
return event.eventType === 'PatientUpdated';
}
/**
* Type guard to check if an event is a PatientStatusChangedEvent
*/
export function isPatientStatusChangedEvent(event) {
return event.eventType === 'PatientStatusChanged';
}
/**
* Type guard to check if an event is a PatientDomainEvent
*/
export function isPatientDomainEvent(event) {
return (typeof event === 'object' &&
event !== null &&
'eventType' in event &&
'patientId' in event &&
'tenantId' in event);
}
//# sourceMappingURL=PatientDomainEvent.js.map