'datetime', 'checked_in_at' => 'datetime', 'waiting_at' => 'datetime', 'started_at' => 'datetime', 'completed_at' => 'datetime', 'cancelled_at' => 'datetime', ]; } protected static function booted(): void { static::creating(function (Appointment $appointment) { if (! $appointment->uuid) { $appointment->uuid = (string) Str::uuid(); } }); } public function getRouteKeyName(): string { return 'uuid'; } public function patient(): BelongsTo { return $this->belongsTo(Patient::class, 'patient_id'); } public function practitioner(): BelongsTo { return $this->belongsTo(Practitioner::class, 'practitioner_id'); } public function branch(): BelongsTo { return $this->belongsTo(Branch::class, 'branch_id'); } public function department(): BelongsTo { return $this->belongsTo(Department::class, 'department_id'); } public function organization(): BelongsTo { return $this->belongsTo(Organization::class, 'organization_id'); } public function visit(): BelongsTo { return $this->belongsTo(Visit::class, 'visit_id'); } public function consultation(): HasOne { return $this->hasOne(Consultation::class, 'appointment_id'); } /** @return list */ public static function activeStatuses(): array { return [ self::STATUS_SCHEDULED, self::STATUS_CHECKED_IN, self::STATUS_WAITING, self::STATUS_IN_CONSULTATION, ]; } }