diff --git a/app/Services/DutyReportService.php b/app/Services/DutyReportService.php index a3240c7..10765bb 100644 --- a/app/Services/DutyReportService.php +++ b/app/Services/DutyReportService.php @@ -424,7 +424,15 @@ class DutyReportService $hasDeathInPeriod = false; if (!empty($patient['death_date'])) { $deathDateCarbon = Carbon::parse($patient['death_date']); - if ($deathDateCarbon >= $periodStartCarbon && $deathDateCarbon <= $periodEndCarbon) { + $deathInPeriod = $deathDateCarbon >= $periodStartCarbon && $deathDateCarbon <= $periodEndCarbon; + + // Если пациента выписали/перевели из этого отделения раньше даты смерти, + // значит смерть наступила уже в другом отделении - здесь её не учитываем, + // иначе одна смерть считается в нескольких отделениях (источник + принимающее). + $diedAfterLeavingDepartment = $migrationOutDate + && Carbon::parse($migrationOutDate)->lt($deathDateCarbon); + + if ($deathInPeriod && !$diedAfterLeavingDepartment) { $hasDeathInPeriod = true; } } @@ -436,7 +444,8 @@ class DutyReportService // Приоритет: данные из миграции (если есть), иначе из карты $patientData['visit_result_id'] = $migrationVisitResultId ?? $patient['visit_result_id'] ?? null; $patientData['extract_date'] = $migrationOutDate ?? $patient['extract_date'] ?? null; - $patientData['death_date'] = $patient['death_date'] ?? null; + // Дату смерти проставляем только если пациент действительно умер в этом отделении + $patientData['death_date'] = $hasDeathInPeriod ? ($patient['death_date'] ?? null) : null; } else { $patientData['visit_result_id'] = null; $patientData['extract_date'] = null;