Несколько отделений для врачей

Поправил подсчет операций
Закончил функцию наполнения отчетов
This commit is contained in:
brusnitsyn
2026-02-06 15:15:03 +09:00
parent 10fb138c30
commit 741781dcb3
9 changed files with 117 additions and 50 deletions

View File

@@ -3,6 +3,8 @@
namespace App\Services;
use App\Models\Department;
use App\Models\MedicalHistorySnapshot;
use App\Models\MetrikaResult;
use App\Models\MisStationarBranch;
use App\Models\Report;
use App\Models\User;
@@ -26,6 +28,7 @@ class AutoReportService
User $user,
string $startDate,
string $endDate,
$departmentId,
bool $force = false
): int {
$createdCount = 0;
@@ -35,7 +38,7 @@ class AutoReportService
foreach ($period as $date) {
try {
$reportCreated = $this->createReportForDate($user, $date, $force);
$reportCreated = $this->createReportForDate($user, $date, $departmentId, $force);
if ($reportCreated) {
$createdCount++;
@@ -52,10 +55,11 @@ class AutoReportService
/**
* Создать отчет для конкретной даты
*/
public function createReportForDate(User $user, Carbon $date, bool $force = false): bool
public function createReportForDate(User $user, Carbon $date, $departmentId, bool $force = false): bool
{
$user->rf_department_id = $departmentId;
// Проверяем, существует ли уже отчет на эту дату
$existingReport = Report::where('rf_department_id', $user->rf_department_id)
$existingReport = Report::where('rf_department_id', $departmentId)
->whereDate('created_at', $date)
->whereDate('sent_at', $date)
->first();
@@ -66,6 +70,8 @@ class AutoReportService
// Если есть существующий отчет и force=true - удаляем его
if ($existingReport && $force) {
MetrikaResult::where('rf_report_id', $existingReport->report_id)->delete();
MedicalHistorySnapshot::where('rf_report_id', $existingReport->report_id)->delete();
$existingReport->delete();
}
@@ -77,7 +83,7 @@ class AutoReportService
$dateRange = $this->dateRangeService->createDateRangeForDate($date, $user);
// Получаем данные для отчета
$reportData = $this->prepareReportData($user, $dateRange, $date);
$reportData = $this->prepareReportData($user, $dateRange, $date, $departmentId);
// Создаем отчет
DB::transaction(function () use ($user, $reportData, $date) {
@@ -90,9 +96,9 @@ class AutoReportService
/**
* Подготовить данные для отчета
*/
private function prepareReportData(User $user, DateRange $dateRange, Carbon $date): array
private function prepareReportData(User $user, DateRange $dateRange, Carbon $date, $departmentId): array
{
$department = $user->department;
$department = Department::where('department_id', $departmentId)->first();
$branchId = $this->getBranchId($department->rf_mis_department_id);
$isHeadOrAdmin = $user->isHeadOfDepartment() || $user->isAdmin();
@@ -118,7 +124,7 @@ class AutoReportService
'sent_at' => $this->dateRangeService->toSqlFormat($date),
'created_at' => $this->dateRangeService->toSqlFormat($date),
'metrics' => $this->formatMetrics($metrics),
'observationPatients' => $this->getObservationPatients($user->rf_department_id, $date),
'observationPatients' => $this->getObservationPatients($departmentId, $date),
'unwantedEvents' => [],
];
}
@@ -146,17 +152,6 @@ class AutoReportService
true
);
Log::info($this->patientQueryService->getPlanOrEmergencyPatients(
'plan',
$isHeadOrAdmin,
$branchId,
$dateRange,
false,
false,
true,
true
));
// 2. Экстренные пациенты
$metrics['emergency'] = $this->patientQueryService->getPlanOrEmergencyPatients(
'emergency',
@@ -235,17 +230,17 @@ class AutoReportService
private function formatMetrics(array $metrics): array
{
return [
'metrika_item_3' => $metrics['plan'] ?? 0, // плановые
'metrika_item_4' => $metrics['emergency'] ?? 0, // экстренные
'metrika_item_5' => $metrics['recipient'] ?? 0, // поступившие
'metrika_item_6' => ($metrics['plan_surgery'] ?? 0) + ($metrics['emergency_surgery'] ?? 0), // всего операций
'metrika_item_4' => $metrics['plan'] ?? 0, // плановые
'metrika_item_12' => $metrics['emergency'] ?? 0, // экстренные
'metrika_item_3' => $metrics['recipient'] ?? 0, // поступившие
// 'metrika_item_6' => ($metrics['plan_surgery'] ?? 0) + ($metrics['emergency_surgery'] ?? 0), // всего операций
'metrika_item_7' => $metrics['discharged'] ?? 0, // выписанные
'metrika_item_8' => $metrics['current'] ?? 0, // текущие
'metrika_item_9' => $metrics['deceased'] ?? 0, // умершие
'metrika_item_10' => $metrics['plan_surgery'] ?? 0, // плановые операции
'metrika_item_11' => $metrics['emergency_surgery'] ?? 0, // экстренные операции
'metrika_item_12' => $metrics['transferred'] ?? 0, // переведенные
'metrika_item_13' => 0, // под наблюдением (будет заполнено отдельно)
'metrika_item_11' => $metrics['plan_surgery'] ?? 0, // плановые операции
'metrika_item_10' => $metrics['emergency_surgery'] ?? 0, // экстренные операции
'metrika_item_13' => $metrics['transferred'] ?? 0, // переведенные
'metrika_item_14' => 0, // под наблюдением (будет заполнено отдельно)
];
}