UNPKG

emr-types

Version:

Comprehensive TypeScript Types Library for Electronic Medical Record (EMR) Applications - Domain-Driven Design with Zod Validation

102 lines 3.2 kB
// ============================================================================ // 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