'datetime:Y-m-d H:i:s', 'DateOut' => 'datetime:Y-m-d H:i:s', ]; public function branch() { return $this->hasOne(MisStationarBranch::class, 'StationarBranchID', 'rf_StationarBranchID'); } public function diagnosis() { return $this->hasMany(MisDiagnos::class, 'rf_MigrationPatientID', 'MigrationPatientID'); } public function mainDiagnosis() { return $this->hasOne(MisDiagnos::class, 'rf_MigrationPatientID', 'MigrationPatientID') ->where(function ($query) { $query->where('rf_DiagnosTypeID', 3) ->orWhere('rf_DiagnosTypeID', 7); }); } public function mkb() { return $this->hasOne(MisMKB::class, 'MKBID', 'rf_MKBID'); } /** * Находятся на лечении */ public function scopeCurrentlyInTreatment($query, $branchId = null, DateRange $dateRange = null) { $query->whereNotIn('rf_kl_VisitResultID', [4]) ->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) { // По заданной логике переводы только 4 и 14, исключаем их $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; } public function medicalHistory() { return $this->belongsTo(MisMedicalHistory::class, 'rf_MedicalHistoryID', 'MedicalHistoryID'); } }