misClinicalDataSource = $misClinicalDataSource ?? app(MisClinicalDataSource::class); } protected MisClinicalDataSource $misClinicalDataSource; /** * Получить плановых или экстренных пациентов из МИС, * при необходимости объединяя их с уже текущими в отделении. */ public function getPlanOrEmergencyPatients( ?string $type, bool $isHeadOrAdmin, int $branchId, DateRange $dateRange, bool $countOnly = false, bool $onlyIds = false, bool $includeCurrent = false, bool $fillableAuto = false ) { return $this->misClinicalDataSource->getPlanOrEmergencyPatients( $type, $isHeadOrAdmin, $branchId, $dateRange, $countOnly, $onlyIds, $includeCurrent, $fillableAuto ); } /** * Получить всех MIS-пациентов в отделении: * поступившие за период плюс уже текущие в отделении. */ public function getAllPatientsInDepartment( bool $isHeadOrAdmin, int $branchId, DateRange $dateRange, bool $countOnly = false, bool $onlyIds = false, bool $fillableAuto = false ) { return $this->misClinicalDataSource->getAllPatientsInDepartment( $isHeadOrAdmin, $branchId, $dateRange, $countOnly, $onlyIds, $fillableAuto ); } /** * Получить пациентов под наблюдением */ public function getObservationPatients(int $departmentId, bool $onlyIds = false) { $query = MisMedicalHistory::whereHas('observationPatient', function ($q) use ($departmentId) { $q->where('rf_department_id', $departmentId); }); if (! $onlyIds) { $query->with(['observationPatient' => function ($query) use ($departmentId) { $query->where('rf_department_id', $departmentId) ->select(['rf_medicalhistory_id', 'observation_patient_id', 'comment']); }]) ->orderBy('DateRecipient', 'DESC'); } if ($onlyIds) { $patients = $query->pluck('MedicalHistoryID'); } else { $query->with([ 'outcomeMigration.mainDiagnosis.mkb', ]); $patients = $query->get(); } return $patients->map(function ($patient) { $patient->comment = $patient->observationPatient ->pluck('comment') ->filter() ->implode('; '); return $patient; }); } /** * Получить выбывших MIS-пациентов по типу исхода. */ public function getOutcomePatients( int $branchId, DateRange $dateRange, string $outcomeType = 'all', bool $onlyIds = false ) { return $this->outcomePatientService->getOutcomePatients($branchId, $dateRange, $outcomeType, $onlyIds); } /** * Получить пациентов с записями в реанимации по отделению. */ public function getReanimationPatients( int $branchId, DateRange $dateRange, bool $onlyIds = false ) { return $this->misClinicalDataSource->getReanimationPatients($branchId, $dateRange, $onlyIds); } /** * Получить операции пациентов по типу срочности. */ public function getSurgicalPatients( string $type, int $branchId, DateRange $dateRange, bool $countOnly = false ) { return $this->misClinicalDataSource->getSurgicalPatients($type, $branchId, $dateRange, $countOnly); } /** * Получить количество пациентов по типу с учетом уже находящихся в отделении. */ public function getPatientsCountWithCurrent( ?string $type, bool $isHeadOrAdmin, int $branchId, DateRange $dateRange ): int { return $this->misClinicalDataSource->getPatientsCountWithCurrent($type, $isHeadOrAdmin, $branchId, $dateRange); } }