220 lines
7.4 KiB
PHP
220 lines
7.4 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use App\Services\DateRange;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Support\Carbon;
|
|
|
|
class LifeMisMigrationPatient extends Model
|
|
{
|
|
protected $table = 'life_stt_migrationpatient';
|
|
protected $primaryKey = 'MigrationPatientID';
|
|
|
|
public function branch()
|
|
{
|
|
return $this->hasOne(MisStationarBranch::class, 'StationarBranchID', 'rf_StationarBranchID');
|
|
}
|
|
|
|
public function diagnosis()
|
|
{
|
|
return $this->hasMany(MisDiagnos::class, 'rf_MigrationPatientID', 'MigrationPatientID');
|
|
}
|
|
|
|
public function mkb()
|
|
{
|
|
return $this->hasOne(MisMKB::class, 'MKBID', 'rf_MKBID');
|
|
}
|
|
|
|
public function medicalHistory()
|
|
{
|
|
return $this->belongsTo(MisMedicalHistory::class, 'rf_MedicalHistoryID', 'MedicalHistoryID');
|
|
}
|
|
|
|
/**
|
|
* Находятся на лечении
|
|
*/
|
|
public function scopeCurrentlyInTreatment($query, $branchId = null, DateRange $dateRange = null)
|
|
{
|
|
$query->where('rf_kl_VisitResultID', 0)
|
|
->where('rf_kl_StatCureResultID', 0)
|
|
// ->whereBetween('DateIngoing', [$dateRange->startSql(), $dateRange->endSql()])
|
|
// ->whereHas('medicalHistory', function ($query) use ($branchId, $dateRange) {
|
|
// $query->whereDate('DateExtract', '1900-01-01');
|
|
// })
|
|
->where('rf_MedicalHistoryID', '<>', 0);
|
|
|
|
if ($branchId) {
|
|
$query->where('rf_StationarBranchID', $branchId);
|
|
}
|
|
|
|
if ($dateRange) {
|
|
// $query->whereBetween('DateIngoing', [$dateRange->startSql(), $dateRange->endSql()]);
|
|
$query->where('DateIngoing', '>=', $dateRange->startSql())
|
|
->where('DateIngoing', '<=', $dateRange->endSql());
|
|
}
|
|
|
|
return $query;
|
|
}
|
|
|
|
public function scopeWhereInDepartment($query, $branchId = null)
|
|
{
|
|
$query->where('rf_MedicalHistoryID', '<>', 0);
|
|
|
|
if ($branchId) {
|
|
$query->where('rf_StationarBranchID', $branchId);
|
|
}
|
|
|
|
return $query;
|
|
}
|
|
|
|
/**
|
|
* Выбывшие пациенты (все исходы)
|
|
*/
|
|
public function scopeOutcomePatients($query, $branchId = null, DateRange $dateRange = null)
|
|
{
|
|
$query->where('rf_MedicalHistoryID', '<>', 0);
|
|
|
|
if ($branchId) {
|
|
$query->where('rf_StationarBranchID', $branchId);
|
|
}
|
|
|
|
if ($dateRange) {
|
|
$startDate = Carbon::parse($dateRange->startSql())->toDateString();
|
|
$endDate = Carbon::parse($dateRange->endSql())->toDateString();
|
|
$query->whereHas('medicalHistory', function ($mhQuery) use ($startDate, $endDate) {
|
|
$mhQuery->whereDate('DateExtract', '>', $startDate)
|
|
->whereDate('DateExtract', '<=', $endDate);
|
|
});
|
|
}
|
|
|
|
return $query;
|
|
}
|
|
|
|
/**
|
|
* Выписанные пациенты
|
|
*/
|
|
public function scopeOutcomeDischarged($query, $branchId = null, DateRange $dateRange = null)
|
|
{
|
|
// По уточненному SQL: Выписано за период
|
|
$dischargeCodes = [1, 11, 2, 12, 7, 18, 48];
|
|
|
|
$query->whereIn('rf_kl_VisitResultID', $dischargeCodes)
|
|
->where('rf_MedicalHistoryID', '<>', 0);
|
|
|
|
if ($branchId) {
|
|
$query->where('rf_StationarBranchID', $branchId);
|
|
}
|
|
|
|
if ($dateRange) {
|
|
$startDate = Carbon::parse($dateRange->startSql())->toDateString();
|
|
$endDate = Carbon::parse($dateRange->endSql())->toDateString();
|
|
$query->whereHas('medicalHistory', function ($mhQuery) use ($startDate, $endDate) {
|
|
$mhQuery->whereDate('DateExtract', '>', $startDate)
|
|
->whereDate('DateExtract', '<=', $endDate);
|
|
});
|
|
}
|
|
|
|
return $query;
|
|
}
|
|
|
|
/**
|
|
* Перевод в другое отделение
|
|
*/
|
|
public function scopeOutcomeTransferred($query, $branchId = null, DateRange $dateRange = null)
|
|
{
|
|
// По заданному SQL: только эти коды перевода
|
|
$transferCodes = [4, 14];
|
|
|
|
$query->whereIn('rf_kl_VisitResultID', $transferCodes)
|
|
->where('rf_MedicalHistoryID', '<>', 0);
|
|
|
|
if ($branchId) {
|
|
$query->where('rf_StationarBranchID', $branchId);
|
|
}
|
|
|
|
if ($dateRange) {
|
|
$startDate = Carbon::parse($dateRange->startSql())->toDateString();
|
|
$endDate = Carbon::parse($dateRange->endSql())->toDateString();
|
|
$query->whereHas('medicalHistory', function ($mhQuery) use ($startDate, $endDate) {
|
|
$mhQuery->whereDate('DateExtract', '>', $startDate)
|
|
->whereDate('DateExtract', '<=', $endDate);
|
|
});
|
|
}
|
|
|
|
return $query;
|
|
}
|
|
|
|
/**
|
|
* Умершие пациенты
|
|
*/
|
|
public function scopeDeceasedOutcome($query, $branchId = null, DateRange $dateRange = null)
|
|
{
|
|
// ID умершего
|
|
$deceasedCodes = [5, 6, 15, 16];
|
|
|
|
$query->whereIn('rf_kl_VisitResultID', $deceasedCodes)
|
|
->where('rf_MedicalHistoryID', '<>', 0);
|
|
|
|
if ($branchId) {
|
|
$query->where('rf_StationarBranchID', $branchId);
|
|
}
|
|
|
|
if ($dateRange) {
|
|
$startDate = Carbon::parse($dateRange->startSql())->toDateString();
|
|
$endDate = Carbon::parse($dateRange->endSql())->toDateString();
|
|
$query->whereHas('medicalHistory', function ($mhQuery) use ($startDate, $endDate) {
|
|
$mhQuery->whereDate('DateExtract', '>', $startDate)
|
|
->whereDate('DateExtract', '<=', $endDate);
|
|
});
|
|
}
|
|
|
|
return $query;
|
|
}
|
|
|
|
public function scopeOutcomeWithoutTransferred($query, $branchId = null, DateRange $dateRange = null)
|
|
{
|
|
$query->whereNotIn('rf_kl_VisitResultID', [4, 14])
|
|
->where('rf_kl_VisitResultID', '<>', 0)
|
|
->where('rf_MedicalHistoryID', '<>', 0);
|
|
|
|
if ($branchId) {
|
|
$query->where('rf_StationarBranchID', $branchId);
|
|
}
|
|
|
|
if ($dateRange) {
|
|
$startDate = Carbon::parse($dateRange->startSql())->toDateString();
|
|
$endDate = Carbon::parse($dateRange->endSql())->toDateString();
|
|
$query->whereHas('medicalHistory', function ($mhQuery) use ($startDate, $endDate) {
|
|
$mhQuery->whereDate('DateExtract', '>', $startDate)
|
|
->whereDate('DateExtract', '<=', $endDate);
|
|
});
|
|
}
|
|
|
|
return $query;
|
|
}
|
|
|
|
public function scopeExtractedToday($query, $branchId = null, DateRange $dateRange = null)
|
|
{
|
|
// if (is_null($startDate)) $startDate = Carbon::now()->addDays(-1)->format('Y-m-d');
|
|
// if (is_null($endDate)) $endDate = Carbon::now()->format('Y-m-d');
|
|
|
|
$query->where('rf_kl_VisitResultID', '<>', 0)
|
|
->where('rf_MedicalHistoryID', '<>', 0)
|
|
->when($dateRange, function($query) use ($dateRange) {
|
|
$startDate = Carbon::parse($dateRange->startSql())->toDateString();
|
|
$endDate = Carbon::parse($dateRange->endSql())->toDateString();
|
|
return $query->whereHas('medicalHistory', function ($mhQuery) use ($startDate, $endDate) {
|
|
$mhQuery->whereDate('DateExtract', '>', $startDate)
|
|
->whereDate('DateExtract', '<=', $endDate);
|
|
});
|
|
});
|
|
|
|
if ($branchId) {
|
|
$query->where('rf_StationarBranchID', $branchId);
|
|
}
|
|
|
|
return $query;
|
|
}
|
|
}
|