Изменения в основном report
This commit is contained in:
@@ -2,20 +2,16 @@
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Application\Reports\ReportSavePathService;
|
||||
use App\Domain\Reports\ValueObjects\MetrikaConfig;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Resources\Api\DepartmentPatientOperationResource;
|
||||
use App\Http\Resources\Mis\FormattedPatientResource;
|
||||
use App\Models\Department;
|
||||
use App\Models\MedicalHistorySnapshot;
|
||||
use App\Models\MetrikaGroup;
|
||||
use App\Models\MetrikaResult;
|
||||
use App\Models\MisLpuDoctor;
|
||||
use App\Models\MisMedicalHistory;
|
||||
use App\Models\MisMigrationPatient;
|
||||
use App\Models\MisMKB;
|
||||
use App\Models\MisStationarBranch;
|
||||
use App\Models\MisSurgicalOperation;
|
||||
use App\Models\ObservationPatient;
|
||||
use App\Models\Report;
|
||||
@@ -36,7 +32,6 @@ class ReportController extends Controller
|
||||
protected MisPatientService $misPatientService,
|
||||
protected ReportService $reportService,
|
||||
protected DateRangeService $dateRangeService,
|
||||
protected ReportSavePathService $reportSavePathService,
|
||||
) {}
|
||||
|
||||
public function index(Request $request)
|
||||
@@ -72,368 +67,25 @@ class ReportController extends Controller
|
||||
{
|
||||
$user = Auth::user();
|
||||
$data = $request->validate([
|
||||
'metrics' => 'required',
|
||||
'observationPatients' => 'nullable',
|
||||
'metrics' => 'required|array',
|
||||
'observationPatients' => 'nullable|array',
|
||||
'departmentId' => 'required|integer',
|
||||
'unwantedEvents' => 'nullable|array',
|
||||
'startAt' => 'required|integer',
|
||||
'endAt' => 'required|integer',
|
||||
'userId' => 'required|integer',
|
||||
'reportId' => 'nullable',
|
||||
'reportId' => 'nullable|integer',
|
||||
'status' => 'nullable|in:draft,submitted',
|
||||
]);
|
||||
$dateRange = $this->dateRangeService->getDateRangeFromRequest($request, $user);
|
||||
|
||||
if ($this->reportSavePathService->usesNewArchitecture()) {
|
||||
$this->reportSavePathService->saveManual($user, [
|
||||
...$data,
|
||||
'dates' => [(int) $data['startAt'], (int) $data['endAt']],
|
||||
]);
|
||||
return response()->json([
|
||||
'status' => 'ok',
|
||||
'path' => 'new',
|
||||
]);
|
||||
}
|
||||
|
||||
$misDepartmentId = $user->department->rf_mis_department_id;
|
||||
|
||||
$branchId = MisStationarBranch::where('rf_DepartmentID', $misDepartmentId)
|
||||
->value('StationarBranchID');
|
||||
|
||||
// Определяем, является ли пользователь заведующим/администратором
|
||||
$isHeadOrAdmin = $user->isHeadOfDepartment() || $user->isAdmin();
|
||||
|
||||
$metrics = $data['metrics'];
|
||||
$observationPatients = $data['observationPatients'];
|
||||
$unwantedEvents = $data['unwantedEvents'];
|
||||
|
||||
// Определяем даты в зависимости от роли
|
||||
$dateRange = $this->dateRangeService->getDateRangeFromRequest($request, $user);
|
||||
|
||||
$metriks = [];
|
||||
foreach ($metrics as $key => $value) {
|
||||
$metrika = new MetrikaResult;
|
||||
$metrikaId = (int) Str::replace('metrika_item_', '', $key);
|
||||
$metrika->rf_metrika_item_id = $metrikaId;
|
||||
$metrika->value = $value;
|
||||
|
||||
$metriks[] = $metrika;
|
||||
}
|
||||
|
||||
// 1. Плановые
|
||||
$planIds = $this->reportService->getPatientsByStatus(
|
||||
$user,
|
||||
'plan',
|
||||
$dateRange,
|
||||
true,
|
||||
true,
|
||||
);
|
||||
$planCount = $this->reportService->getPatientsCountByStatus($user, 'plan', $dateRange);
|
||||
// 2. Экстренные
|
||||
$emergencyIds = $this->reportService->getPatientsByStatus(
|
||||
$user,
|
||||
'emergency',
|
||||
$dateRange,
|
||||
true,
|
||||
true,
|
||||
);
|
||||
$emergencyCount = $this->reportService->getPatientsCountByStatus($user, 'emergency', $dateRange);
|
||||
// 3. Выписанные
|
||||
$dischargedIds = $this->reportService->getPatientsByStatus(
|
||||
$user,
|
||||
'outcome',
|
||||
$dateRange,
|
||||
true,
|
||||
true
|
||||
);
|
||||
// 4. Переведенные
|
||||
$transferredIds = $this->reportService->getPatientsByStatus(
|
||||
$user,
|
||||
'outcome-transferred',
|
||||
$dateRange,
|
||||
true,
|
||||
true
|
||||
);
|
||||
// 5. Умершие
|
||||
$deceasedIds = $this->reportService->getPatientsByStatus(
|
||||
$user,
|
||||
'outcome-deceased',
|
||||
$dateRange,
|
||||
true,
|
||||
true
|
||||
);
|
||||
// 6. Поступившие
|
||||
$recipientIds = $this->reportService->getPatientsByStatus(
|
||||
$user,
|
||||
'recipient',
|
||||
$dateRange,
|
||||
true,
|
||||
true
|
||||
);
|
||||
|
||||
\DB::beginTransaction();
|
||||
|
||||
if (isset($data['reportId']) && $data['reportId']) {
|
||||
$report = Report::updateOrCreate(
|
||||
[
|
||||
'report_id' => $data['reportId'],
|
||||
],
|
||||
[
|
||||
'rf_department_id' => $data['departmentId'],
|
||||
'rf_user_id' => Auth::user()->id,
|
||||
'rf_lpudoctor_id' => $data['userId'],
|
||||
'created_at' => $dateRange->endSql(),
|
||||
'sent_at' => $dateRange->endSql(),
|
||||
'period_start' => $dateRange->startSql(),
|
||||
'period_end' => $dateRange->endSql(),
|
||||
]
|
||||
);
|
||||
} else {
|
||||
$report = Report::create([
|
||||
'rf_department_id' => $data['departmentId'],
|
||||
'rf_user_id' => Auth::user()->id,
|
||||
'rf_lpudoctor_id' => $data['userId'],
|
||||
'created_at' => $dateRange->endSql(),
|
||||
'sent_at' => $dateRange->endSql(),
|
||||
'period_start' => $dateRange->startSql(),
|
||||
'period_end' => $dateRange->endSql(),
|
||||
]);
|
||||
}
|
||||
|
||||
if (count($unwantedEvents)) {
|
||||
foreach ($unwantedEvents as $unwantedEvent) {
|
||||
// Если есть ID - ищем по нему
|
||||
if (isset($unwantedEvent['unwanted_event_id']) && $unwantedEvent['unwanted_event_id']) {
|
||||
UnwantedEvent::updateOrCreate(
|
||||
['unwanted_event_id' => $unwantedEvent['unwanted_event_id']],
|
||||
[
|
||||
'rf_report_id' => $report->report_id,
|
||||
'comment' => $unwantedEvent['comment'] ?? '',
|
||||
'title' => $unwantedEvent['title'] ?? '',
|
||||
'is_visible' => $unwantedEvent['is_visible'] ?? true,
|
||||
]
|
||||
);
|
||||
} else {
|
||||
// Если нет ID - создаем новую запись
|
||||
UnwantedEvent::create([
|
||||
'rf_report_id' => $report->report_id,
|
||||
'comment' => $unwantedEvent['comment'] ?? '',
|
||||
'title' => $unwantedEvent['title'] ?? '',
|
||||
'is_visible' => $unwantedEvent['is_visible'] ?? true,
|
||||
]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$unwantedEvents = $report->unwantedEvents;
|
||||
foreach ($unwantedEvents as $unwantedEvent) {
|
||||
$unwantedEvent->delete();
|
||||
}
|
||||
}
|
||||
MetrikaResult::updateOrCreate(
|
||||
[
|
||||
'rf_report_id' => $report->report_id,
|
||||
'rf_metrika_item_id' => MetrikaConfig::UNWANTED_EVENTS,
|
||||
],
|
||||
[
|
||||
'rf_report_id' => $report->report_id,
|
||||
'rf_metrika_item_id' => MetrikaConfig::UNWANTED_EVENTS,
|
||||
'value' => count($unwantedEvents),
|
||||
]
|
||||
);
|
||||
|
||||
foreach ($metriks as $metrika) {
|
||||
MetrikaResult::updateOrCreate(
|
||||
[
|
||||
'rf_report_id' => $report->report_id,
|
||||
'rf_metrika_item_id' => $metrika->rf_metrika_item_id,
|
||||
],
|
||||
[
|
||||
'rf_report_id' => $report->report_id,
|
||||
'rf_metrika_item_id' => $metrika->rf_metrika_item_id,
|
||||
'value' => $metrika->value,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
if (count($observationPatients)) {
|
||||
foreach ($observationPatients as $observationPatient) {
|
||||
ObservationPatient::updateOrCreate(
|
||||
[
|
||||
'rf_medicalhistory_id' => $observationPatient['id'],
|
||||
'rf_department_id' => $data['departmentId'],
|
||||
],
|
||||
[
|
||||
'rf_department_id' => $data['departmentId'],
|
||||
'rf_report_id' => $report->report_id,
|
||||
'rf_medicalhistory_id' => $observationPatient['id'],
|
||||
'rf_mkab_id' => null,
|
||||
'comment' => $observationPatient['comment'] ?? null,
|
||||
]
|
||||
);
|
||||
}
|
||||
} else {
|
||||
foreach ($report->observationPatients as $observationPatient) {
|
||||
$observationPatient->delete();
|
||||
}
|
||||
}
|
||||
MetrikaResult::updateOrCreate(
|
||||
[
|
||||
'rf_report_id' => $report->report_id,
|
||||
'rf_metrika_item_id' => MetrikaConfig::OBSERVATION,
|
||||
],
|
||||
[
|
||||
'rf_report_id' => $report->report_id,
|
||||
'rf_metrika_item_id' => MetrikaConfig::OBSERVATION,
|
||||
'value' => count($observationPatients),
|
||||
]
|
||||
);
|
||||
|
||||
// Сохраняем снимок для каждого типа пациентов
|
||||
// Планово
|
||||
// $this->getPlanOrEmergencyPatients('plan', false, $branchId, $dateRange->startSql(), $dateRange->endSql(), false, false, true);
|
||||
foreach ($planIds as $id) {
|
||||
MedicalHistorySnapshot::create([
|
||||
'rf_report_id' => $report->report_id,
|
||||
'rf_medicalhistory_id' => $id,
|
||||
'patient_type' => 'plan',
|
||||
]);
|
||||
}
|
||||
MetrikaResult::updateOrCreate(
|
||||
[
|
||||
'rf_report_id' => $report->report_id,
|
||||
'rf_metrika_item_id' => MetrikaConfig::PLAN,
|
||||
],
|
||||
[
|
||||
'rf_report_id' => $report->report_id,
|
||||
'rf_metrika_item_id' => MetrikaConfig::PLAN,
|
||||
'value' => $planCount,
|
||||
]
|
||||
);
|
||||
|
||||
// $this->getPlanOrEmergencyPatients('emergency', false, $branchId, $startDate, $endDate, false, false, true);
|
||||
// Экстренно
|
||||
foreach ($emergencyIds as $id) {
|
||||
MedicalHistorySnapshot::create([
|
||||
'rf_report_id' => $report->report_id,
|
||||
'rf_medicalhistory_id' => $id,
|
||||
'patient_type' => 'emergency',
|
||||
]);
|
||||
}
|
||||
MetrikaResult::updateOrCreate(
|
||||
[
|
||||
'rf_report_id' => $report->report_id,
|
||||
'rf_metrika_item_id' => MetrikaConfig::EMERGENCY,
|
||||
],
|
||||
[
|
||||
'rf_report_id' => $report->report_id,
|
||||
'rf_metrika_item_id' => MetrikaConfig::EMERGENCY,
|
||||
'value' => $emergencyCount,
|
||||
]
|
||||
);
|
||||
|
||||
// $this->getDischargedPatients($branchId, $startDate, $endDate, true);
|
||||
foreach ($dischargedIds as $id) {
|
||||
MedicalHistorySnapshot::create([
|
||||
'rf_report_id' => $report->report_id,
|
||||
'rf_medicalhistory_id' => $id,
|
||||
'patient_type' => 'discharged',
|
||||
]);
|
||||
}
|
||||
MetrikaResult::updateOrCreate(
|
||||
[
|
||||
'rf_report_id' => $report->report_id,
|
||||
'rf_metrika_item_id' => MetrikaConfig::DISCHARGED,
|
||||
],
|
||||
[
|
||||
'rf_report_id' => $report->report_id,
|
||||
'rf_metrika_item_id' => MetrikaConfig::DISCHARGED,
|
||||
'value' => count($dischargedIds),
|
||||
]
|
||||
);
|
||||
|
||||
// $this->getTransferredPatients($branchId, $startDate, $endDate, true);
|
||||
foreach ($transferredIds as $id) {
|
||||
MedicalHistorySnapshot::create([
|
||||
'rf_report_id' => $report->report_id,
|
||||
'rf_medicalhistory_id' => $id,
|
||||
'patient_type' => 'transferred',
|
||||
]);
|
||||
}
|
||||
MetrikaResult::updateOrCreate(
|
||||
[
|
||||
'rf_report_id' => $report->report_id,
|
||||
'rf_metrika_item_id' => MetrikaConfig::TRANSFERRED,
|
||||
],
|
||||
[
|
||||
'rf_report_id' => $report->report_id,
|
||||
'rf_metrika_item_id' => MetrikaConfig::TRANSFERRED,
|
||||
'value' => count($transferredIds),
|
||||
]
|
||||
);
|
||||
|
||||
// $this->getDeceasedOutcomePatients($branchId, $startDate, $endDate, false, true);
|
||||
foreach ($deceasedIds as $id) {
|
||||
MedicalHistorySnapshot::create([
|
||||
'rf_report_id' => $report->report_id,
|
||||
'rf_medicalhistory_id' => $id,
|
||||
'patient_type' => 'deceased',
|
||||
]);
|
||||
}
|
||||
MetrikaResult::updateOrCreate(
|
||||
[
|
||||
'rf_report_id' => $report->report_id,
|
||||
'rf_metrika_item_id' => MetrikaConfig::DECEASED,
|
||||
],
|
||||
[
|
||||
'rf_report_id' => $report->report_id,
|
||||
'rf_metrika_item_id' => MetrikaConfig::DECEASED,
|
||||
'value' => count($deceasedIds),
|
||||
]
|
||||
);
|
||||
|
||||
// $recipientIds = $this->getPlanOrEmergencyPatients(
|
||||
// null,
|
||||
// $isHeadOrAdmin,
|
||||
// $branchId,
|
||||
// $startDate,
|
||||
// $endDate,
|
||||
// false,
|
||||
// true,
|
||||
// true,
|
||||
// today: true
|
||||
// );
|
||||
foreach ($recipientIds as $id) {
|
||||
MedicalHistorySnapshot::create([
|
||||
'rf_report_id' => $report->report_id,
|
||||
'rf_medicalhistory_id' => $id,
|
||||
'patient_type' => 'recipient',
|
||||
]);
|
||||
}
|
||||
MetrikaResult::updateOrCreate(
|
||||
[
|
||||
'rf_report_id' => $report->report_id,
|
||||
'rf_metrika_item_id' => MetrikaConfig::RECIPIENT,
|
||||
],
|
||||
[
|
||||
'rf_report_id' => $report->report_id,
|
||||
'rf_metrika_item_id' => MetrikaConfig::RECIPIENT,
|
||||
'value' => count($recipientIds),
|
||||
]
|
||||
);
|
||||
|
||||
// 7. Находящиеся на лечении
|
||||
// $currentIds = $this->getCurrentPatients($branchId, false, true);
|
||||
// foreach ($currentIds as $id) {
|
||||
// MedicalHistorySnapshot::create([
|
||||
// 'rf_report_id' => $report->report_id,
|
||||
// 'rf_medicalhistory_id' => $id,
|
||||
// 'patient_type' => 'current'
|
||||
// ]);
|
||||
// }
|
||||
|
||||
\DB::commit();
|
||||
$report = $this->reportService->storeReport([
|
||||
...$data,
|
||||
'dates' => [(int) $data['startAt'], (int) $data['endAt']],
|
||||
'status' => $data['status'] ?? 'draft',
|
||||
], $user);
|
||||
|
||||
return response()->json([
|
||||
'message' => 'success',
|
||||
'report_id' => $report->report_id,
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user