Добавил ограничение по отказникам

This commit is contained in:
brusnitsyn
2026-06-17 17:38:48 +09:00
parent fe59410187
commit 839a534bb2
6 changed files with 105 additions and 3 deletions

41
app/Models/MisDenial.php Normal file
View File

@@ -0,0 +1,41 @@
<?php
namespace App\Models;
use Illuminate\Support\Facades\Schema;
/**
* Отказ от госпитализации (МИС).
*
* ВНИМАНИЕ: ЗАГЛУШКА. На момент написания таблицы отказов ещё нет в реплике.
* Когда репликатор её добавит поменять $table на реальное имя.
* Пока таблицы нет, MisDenial::tableAvailable() === false и вся
* фильтрация отказников превращается в no-op (отчёты не ломаются).
*
* Структура в МИС:
* DenialID (PK), rf_MedicalHistoryID -> mv_medicalhistory_summary.id,
* rf_kl_HospRefusalID, DateTime, FAM/Name/OT, rf_StationarTypeID, ...
* Признак отказа = сам факт наличия строки с rf_MedicalHistoryID
* (по причинам/типам не фильтруем).
*/
class MisDenial extends MaterializedViewModel
{
protected $table = 'stt_denial'; // TODO: подставить реальное имя таблицы в реплике
protected $primaryKey = 'DenialID';
private static ?bool $tableExists = null;
public function medicalHistory()
{
return $this->belongsTo(MedicalHistory::class, 'rf_MedicalHistoryID', 'id');
}
/**
* Доступна ли таблица отказов в текущей БД (реплике).
* Мемоизируем на процесс, чтобы не дёргать information_schema на каждый запрос.
*/
public static function tableAvailable(): bool
{
return self::$tableExists ??= Schema::hasTable((new self)->getTable());
}
}