Files
onboard/app/Models/MedicalHistory.php

85 lines
2.5 KiB
PHP

<?php
namespace App\Models;
/**
* @property int $id
* @property string|null $medical_card_number
* @property string|null $full_name
* @property \Carbon\Carbon|null $birth_date
* @property \Carbon\Carbon|null $recipient_date
* @property \Carbon\Carbon|null $extract_date
* @property \Carbon\Carbon|null $death_date
* @property int|null $male
* @property int|null $hospital_result_id
* @property int|null $visit_result_id
* @property int|null $latest_migration_id
*/
class MedicalHistory extends MaterializedViewModel
{
protected $table = 'mv_medicalhistory_summary';
protected $primaryKey = 'id';
public function migrations(): \Illuminate\Database\Eloquent\Relations\HasMany|MedicalHistory
{
return $this->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')
->whereNot('stationar_branch_id', 0) // не выписка
->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);
}
}