hasMany(MigrationPatient::class, 'medical_history_id', 'id'); } public function operations(): \Illuminate\Database\Eloquent\Relations\HasMany|MedicalHistory { return $this->hasMany(SurgicalOperation::class, 'medical_history_id', 'id'); } public function latestMigration() { return $this->hasOne(MigrationPatient::class, 'medical_history_id', 'id') ->whereNotNull('out_date') ->latest('ingoing_date'); } public function reanimations() { return $this->hasMany(Reanimation::class, 'medical_history_id', 'id'); } public function observables() { return $this->hasMany(ObservableMedicalHistory::class, 'original_id', 'id'); } public function observable() { return $this->hasOne(ObservableMedicalHistory::class, 'original_id', 'id') ->latest('observable_in'); } public function denial() { return $this->hasOne(MisDenial::class, 'rf_MedicalHistoryID', 'id'); } /** * Исключить отказников от госпитализации. * Безопасно: пока таблицы отказов нет в реплике — no-op (см. MisDenial::tableAvailable()). */ public function scopeWithoutDenials($query) { if (MisDenial::tableAvailable()) { $query->whereDoesntHave('denial'); } return $query; } public function operationsInDepartment($query, $departmentId) { return $this->operations()->where('department_id', $departmentId); } // Скоупы public function scopeUrgency($query, $typeId) // 1 = Экстренно, 2 = Планово { return $query->where('urgency_id', $typeId); } }