Обновлен стартовый экран
Переписаны запросы для статистики, отчетов Добавлена интеграция отчета сестры
This commit is contained in:
@@ -10,6 +10,9 @@ use App\Models\MigrationPatient;
|
||||
use App\Models\MigrationPatientCorrection;
|
||||
use App\Models\MigrationPatientNurse;
|
||||
use App\Models\MisStationarBranch;
|
||||
use App\Models\ReportNurse;
|
||||
use App\Models\ReportNurseMigrationPatient;
|
||||
use App\Models\ReportNursePatient;
|
||||
use App\Models\UnifiedMedicalHistory;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
@@ -146,6 +149,10 @@ class NurseController extends Controller
|
||||
if ($historyCorrection && $migrationCorrection) {
|
||||
DB::commit();
|
||||
|
||||
// Синхронизируем снапшот, чтобы правки были видны в МИС-вкладке
|
||||
$reportNurseId = $request->input('report_nurse_id');
|
||||
$this->syncNurseSnapshot($originalId, $data, $migrationData, $departmentId, $reportNurseId);
|
||||
|
||||
return response()->json([
|
||||
'data' => $historyCorrection,
|
||||
], 201);
|
||||
@@ -157,17 +164,64 @@ class NurseController extends Controller
|
||||
}
|
||||
}
|
||||
|
||||
private function syncNurseSnapshot(
|
||||
mixed $originalId,
|
||||
array $data,
|
||||
array $migrationData,
|
||||
int $departmentId,
|
||||
?int $reportNurseId
|
||||
): void {
|
||||
$patientUpdate = collect($data)
|
||||
->only(['recipient_date', 'extract_date', 'death_date', 'urgency_id',
|
||||
'visit_result_id', 'hospital_result_id', 'full_name', 'birth_date'])
|
||||
->toArray();
|
||||
|
||||
if (empty($patientUpdate)) return;
|
||||
|
||||
// Если известен отчёт — обновляем только его и все последующие по этому отделению
|
||||
$reportNurseQuery = ReportNursePatient::where('original_id', $originalId);
|
||||
|
||||
if ($reportNurseId) {
|
||||
$fromReport = ReportNurse::find($reportNurseId);
|
||||
if ($fromReport) {
|
||||
$affectedReportIds = ReportNurse::where('rf_department_id', $fromReport->rf_department_id)
|
||||
->where('period_start', '>=', $fromReport->period_start)
|
||||
->pluck('id');
|
||||
$reportNurseQuery->whereIn('report_nurse_id', $affectedReportIds);
|
||||
}
|
||||
}
|
||||
|
||||
$snapshotPatientIds = $reportNurseQuery->pluck('id');
|
||||
|
||||
if ($snapshotPatientIds->isEmpty()) return;
|
||||
|
||||
ReportNursePatient::whereIn('id', $snapshotPatientIds)->update($patientUpdate);
|
||||
|
||||
$migrationUpdate = array_filter([
|
||||
'ingoing_date' => $migrationData['ingoing_date'] ?? null,
|
||||
'out_date' => $migrationData['out_date'] ?? null,
|
||||
'visit_result_id' => $migrationData['visit_result_id'] ?? null,
|
||||
]);
|
||||
|
||||
if (!empty($migrationUpdate)) {
|
||||
ReportNurseMigrationPatient::whereIn('medical_history_id', $snapshotPatientIds)
|
||||
->where('department_id', $departmentId)
|
||||
->update($migrationUpdate);
|
||||
}
|
||||
}
|
||||
|
||||
public function deleteHistory($id, Request $request)
|
||||
{
|
||||
$medicalHistory = UnifiedMedicalHistory::where('id', $id)->first();
|
||||
$medicalHistoryId = $medicalHistory->original_id;
|
||||
$originalMedicalHistoryId = $medicalHistory->original_id;
|
||||
$nurseMedicalHistory = ReportNursePatient::where('original_id', $originalMedicalHistoryId)->first();
|
||||
$migrationPatientsIds = $medicalHistory->migrations()->pluck('original_id');
|
||||
|
||||
foreach ($migrationPatientsIds as $migrationPatientsId) {
|
||||
MigrationPatientNurse::query()->where('id', $migrationPatientsId)->delete();
|
||||
foreach ($nurseMedicalHistory->migrations() as $nurseMigrationPatient) {
|
||||
$nurseMigrationPatient->delete();
|
||||
}
|
||||
|
||||
MedicalHistoryNurse::where('id', $medicalHistoryId)->delete();
|
||||
$nurseMedicalHistory->delete();
|
||||
|
||||
return response()->json([]);
|
||||
}
|
||||
|
||||
@@ -4,10 +4,13 @@ namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Department;
|
||||
use App\Models\DutyUnwantedEvent;
|
||||
use App\Services\DateRangeService;
|
||||
use App\Services\ReportService;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class StatisticController extends Controller
|
||||
{
|
||||
@@ -28,7 +31,17 @@ class StatisticController extends Controller
|
||||
$dateRange = $this->dateRangeService->getNormalizedDateRange($user, $validated['startAt'], $validated['endAt']);
|
||||
$department = Department::findSole($request->departmentId, 'department_id');
|
||||
|
||||
$unwantedEvents = $this->reportService->getUnwantedEvents($department, $dateRange);
|
||||
$unwantedEvents = DutyUnwantedEvent::query()
|
||||
->whereHas('reportDuty', function ($q) use ($department, $dateRange) {
|
||||
$q->where('rf_department_id', $department->department_id)
|
||||
->where('period_start', '>=', $dateRange->startSql())
|
||||
->where('period_end', '<=', $dateRange->endSql());
|
||||
})
|
||||
->get()
|
||||
->map(fn ($e) => [
|
||||
...$e->toArray(),
|
||||
'created_at' => Carbon::parse($e->created_at)->format('Создано d.m.Y в H:i'),
|
||||
]);
|
||||
|
||||
return response()->json($unwantedEvents);
|
||||
}
|
||||
@@ -44,7 +57,35 @@ class StatisticController extends Controller
|
||||
|
||||
$dateRange = $this->dateRangeService->getNormalizedDateRange($user, $validated['startAt'], $validated['endAt']);
|
||||
$department = Department::findSole($request->departmentId, 'department_id');
|
||||
$observablePatients = $this->reportService->getPatientsByStatus($department, $user, 'observation', $dateRange);
|
||||
|
||||
$observablePatients = DB::table('observable_medical_histories as omh')
|
||||
->join('report_duty_patients as rdp', 'rdp.original_id', '=', 'omh.original_id')
|
||||
->join('report_duties as rd', 'rd.id', '=', 'rdp.report_duty_id')
|
||||
->leftJoin('report_duty_migration_patients as rdm', function ($join) {
|
||||
$join->on('rdm.medical_history_id', '=', 'rdp.id')
|
||||
->whereNull('rdm.out_date');
|
||||
})
|
||||
->where('rd.rf_department_id', $department->department_id)
|
||||
->where('omh.observable_in', '>=', $dateRange->startSql())
|
||||
->where('omh.observable_in', '<=', $dateRange->endSql())
|
||||
->select('omh.*', 'rdm.diagnosis_code', 'rdm.diagnosis_name', 'rdm.ingoing_date as migration_ingoing_date')
|
||||
->distinct()
|
||||
->get()
|
||||
->map(fn ($row) => [
|
||||
'id' => $row->id,
|
||||
'full_name' => $row->full_name,
|
||||
'birth_date' => $row->birth_date,
|
||||
'comment' => $row->comment,
|
||||
'observable_reason'=> $row->observable_reason,
|
||||
'observable_in' => $row->observable_in,
|
||||
'observable_out' => $row->observable_out,
|
||||
'migrations' => [[
|
||||
'ingoing_date' => $row->migration_ingoing_date ?? $row->recipient_date,
|
||||
'diagnosis_code' => $row->diagnosis_code,
|
||||
'diagnosis_name' => $row->diagnosis_name,
|
||||
]],
|
||||
'operations' => [],
|
||||
]);
|
||||
|
||||
return response()->json($observablePatients);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user