validated(); // Создаём DTO и DateRange $dateRange = new DateRange( $validated['period_start'], $validated['period_end'] ); $dto = new CreateReportDutyDto( reportDate: $dateRange->endSql(), periodStart: $dateRange->startSql(), periodEnd: $dateRange->endSql(), periodType: $validated['period_type'] ?? 'day', statusId: $validated['status_id'] ?? 2, rfLpuDoctorId: $request->user()->rf_lpudoctor_id, rfDepartmentId: $request->user()->rf_department_id, rfUserId: $request->user()->id, ); // Вызов Use Case для создания отчёта $report = $createAction->execute($dto); // Вызов Use Case для сохранения снимка и расчёта статистики $stats = $snapshotAction->execute( $report, $dateRange, $request->user()->rf_department_id, $request->user()->id ); // Сохраняем наблюдаемых пациентов и нежелательные события if ($request->has('observables')) { $observableAction = app(SaveObservablePatientsAction::class); $observableAction->execute($report, $validated['observables']); } if ($request->has('unwanted_events')) { $unwantedAction = app(SaveUnwantedEventsAction::class); $unwantedAction->execute($report, $validated['unwanted_events']); } // Возвращаем Inertia-ответ (редирект или рендер) return Inertia::location(route('reports.duty.show', $report->id)); } }