This commit is contained in:
Dwi Swandhana
2026-07-12 18:38:11 +07:00
parent 9b831791f5
commit 616f0658d6
@@ -786,8 +786,7 @@ class DokterController extends Controller
return response()->json(['icon' => 'success', 'status' => 'Success', 'message' => 'Expertise Saved']);
}
}
protected function resolvePeriksaHierarchyStatus($currentStatus, $proposedStatus): string
{
protected function resolvePeriksaHierarchyStatus($currentStatus, $proposedStatus): string {
$currentStatus = trim((string) $currentStatus);
$proposedStatus = trim((string) $proposedStatus);
@@ -812,27 +811,26 @@ class DokterController extends Controller
return $currentStatus;
}
protected function periksaHierarchyStatusRank($status): ?int
{
protected function periksaHierarchyStatusRank($status): ?int {
$normalized = $this->normalizePeriksaStatus($status);
if ($normalized === '') {
return null;
}
if ($normalized === 'penerimaan sampel') {
if ($normalized === 'Penerimaan Sampel') {
return 1;
}
if (in_array($normalized, ['pemeriksaan awal', 'pemeriksaan sampel', 'proses analisis sampel'], true)) {
if (in_array($normalized, ['Pemeriksaan awal', 'Pemeriksaan Sampel', 'Proses Analisis Sampel'], true)) {
return 2;
}
if (str_starts_with($normalized, 'data bd di terima') || str_starts_with($normalized, 'data bd diterima')) {
if (str_starts_with($normalized, 'Data BD di Terima')) {
return 3;
}
if ($normalized === 'pewarnaan langsung') {
if ($normalized === 'Pewarnaan Langsung') {
return 4;
}
@@ -840,38 +838,36 @@ class DokterController extends Controller
return 5;
}
if (str_starts_with($normalized, 'otor maldi')) {
if (str_starts_with($normalized, 'Otor Maldi (Un Verified)')) {
return 6;
}
if (str_starts_with($normalized, 'preliminary result')) {
if (str_starts_with($normalized, 'Preliminary Results')) {
return 7;
}
if (str_starts_with($normalized, 'data vitek di terima') || str_starts_with($normalized, 'data vitek diterima')) {
if (str_starts_with($normalized, 'Data Vitek di Terima')) {
return 8;
}
if (str_starts_with($normalized, 'expertise')) {
if (str_starts_with($normalized, 'Expertise Saved (Un Verified)')) {
return 9;
}
if (in_array($normalized, ['selesai', 'final result'], true)) {
if (in_array($normalized, ['Selesai', 'Final Result'], true)) {
return 10;
}
return null;
}
protected function normalizePeriksaStatus($status): string
{
protected function normalizePeriksaStatus($status): string {
$status = strtolower(trim((string) $status));
$status = str_replace(['_', '-'], ' ', $status);
$status = preg_replace('/\s+/', ' ', $status);
return trim($status);
}
protected function isProsesingKoloniMediaStatus(string $normalizedStatus): bool
{
protected function isProsesingKoloniMediaStatus(string $normalizedStatus): bool {
$exactStatuses = [
'tidak ada pertumbuhan',
'tidak lanjut identifikasi',
@@ -898,13 +894,11 @@ class DokterController extends Controller
|| str_starts_with($normalizedStatus, 'proses identifikasi')
|| str_starts_with($normalizedStatus, 'proses uji kepekaan');
}
protected function shouldMarkAsCritical(Request $request): bool
{
protected function shouldMarkAsCritical(Request $request): bool {
$flag = strtolower((string) $request->input('nilai_kritis', '0'));
return in_array($flag, ['1', 'true', 'on', 'yes'], true);
}
protected function upsertCriticalValueSample(Periksa $periksa): void
{
protected function upsertCriticalValueSample(Periksa $periksa): void {
$now = Carbon::now();
$criticalSample = CriticalValueSample::firstOrNew(['periksa_id' => $periksa->id]);
$criticalSample->nofoto = $periksa->nofoto;
@@ -913,7 +907,6 @@ class DokterController extends Controller
$criticalSample->nmpasien = $periksa->nmpasien;
$criticalSample->nm_spesimen = $periksa->nm_spesimen;
// Keep the first critical timestamp intact on repeated clicks.
if (empty($criticalSample->critical_set_at)) {
$criticalSample->critical_set_at = $now;
$criticalSample->critical_set_by_user_id = Session('id');
@@ -922,8 +915,7 @@ class DokterController extends Controller
$criticalSample->save();
}
protected function markCriticalValueAsRead(CriticalValueSample $criticalSample): void
{
protected function markCriticalValueAsRead(CriticalValueSample $criticalSample): void {
if (!empty($criticalSample->followed_up_at)) {
return;
}
@@ -933,16 +925,14 @@ class DokterController extends Controller
$criticalSample->followed_up_by_name = Session('nama');
$criticalSample->save();
}
protected function getPendingCriticalValueItems()
{
protected function getPendingCriticalValueItems() {
return $this->appendCriticalValueTatMeta(
CriticalValueSample::whereNull('followed_up_at')
->orderBy('critical_set_at', 'asc')
->get()
);
}
protected function resolveCriticalValueReportRange(Request $request): array
{
protected function resolveCriticalValueReportRange(Request $request): array {
$defaultStart = Carbon::now()->startOfMonth()->toDateString();
$defaultEnd = Carbon::now()->endOfMonth()->toDateString();
$startDate = trim((string) $request->query('start_date', $defaultStart));
@@ -975,8 +965,7 @@ class DokterController extends Controller
'end_at' => $end,
];
}
protected function getFollowedCriticalValueItems(?Carbon $startAt = null, ?Carbon $endAt = null)
{
protected function getFollowedCriticalValueItems(?Carbon $startAt = null, ?Carbon $endAt = null) {
$query = CriticalValueSample::whereNotNull('followed_up_at');
if ($startAt !== null) {
@@ -994,8 +983,7 @@ class DokterController extends Controller
->get()
);
}
protected function appendCriticalValueTatMeta($items)
{
protected function appendCriticalValueTatMeta($items) {
return $items->map(function ($item) {
$item->tat_minutes = null;
$item->tat_duration_label = '-';
@@ -1014,8 +1002,7 @@ class DokterController extends Controller
return $item;
});
}
protected function formatTatDuration(int $totalMinutes): string
{
protected function formatTatDuration(int $totalMinutes): string {
$hours = intdiv($totalMinutes, 60);
$minutes = $totalMinutes % 60;
@@ -1025,8 +1012,7 @@ class DokterController extends Controller
return $minutes.' menit';
}
public function criticalValueNotifications(Request $request)
{
public function criticalValueNotifications(Request $request) {
$highlightId = $request->query('highlight');
$reportRange = $this->resolveCriticalValueReportRange($request);
$items = $this->getPendingCriticalValueItems();
@@ -1040,8 +1026,7 @@ class DokterController extends Controller
'endDate' => $reportRange['end_date'],
]);
}
public function criticalValueNotificationExport(Request $request)
{
public function criticalValueNotificationExport(Request $request) {
$type = $request->query('type', 'pending');
$isFollowed = $type === 'followed';
$reportRange = $this->resolveCriticalValueReportRange($request);
@@ -1121,8 +1106,7 @@ class DokterController extends Controller
'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
]);
}
public function criticalValueNotificationSummary()
{
public function criticalValueNotificationSummary() {
if (Session::get('id') === null) {
return response()->json([
'count' => 0,
@@ -1147,13 +1131,11 @@ class DokterController extends Controller
])->render(),
]);
}
public function criticalValueNotificationOpen($id)
{
public function criticalValueNotificationOpen($id) {
return redirect()
->route('criticalValueNotifications', ['highlight' => $id]);
}
public function criticalValueNotificationMarkRead($id)
{
public function criticalValueNotificationMarkRead($id) {
$criticalSample = CriticalValueSample::findOrFail($id);
if (!empty($criticalSample->followed_up_at)) {
return redirect()
@@ -1194,8 +1176,7 @@ class DokterController extends Controller
->route('criticalValueNotifications', ['highlight' => $criticalSample->id])
->with('success', 'Sample nilai kritis sudah ditandai sudah ditindaklanjuti.');
}
public function batalPeriksa(Request $request)
{
public function batalPeriksa(Request $request) {
$id = $request->input('id');
if (empty($id)) {
return response()->json([
@@ -1227,8 +1208,7 @@ class DokterController extends Controller
'message' => 'Pemeriksaan berhasil dibatalkan.'
]);
}
public function batalPeriksaTerima(Request $request)
{
public function batalPeriksaTerima(Request $request) {
$id = $request->input('id');
if (empty($id)) {
return response()->json([