orWhere('medical_record_number', '') ->orderBy('created_at', 'asc') ->get(); if ($patients->isEmpty()) { $this->info('Semua pasien sudah memiliki nomor Rekam Medis!'); return Command::SUCCESS; } $this->info("Menemukan {$patients->count()} pasien tanpa No. RM. Memulai proses..."); $bar = $this->output->createProgressBar($patients->count()); $bar->start(); foreach ($patients as $patient) { // Gunakan tanggal buat pasien (created_at) agar prefix tahun-bulan sesuai waktu daftar $prefix = 'RM' . $patient->created_at->format('ym'); // Cari nomor RM terakhir berdasarkan prefix bulan/tahun pasien tersebut $latestNumber = Patient::where('medical_record_number', 'like', $prefix . '%') ->orderByDesc('medical_record_number') ->value('medical_record_number'); if ($latestNumber) { $nextNumber = ((int) substr($latestNumber, -4)) + 1; } else { $nextNumber = 1; } // Simpan tanpa memicu event 'creating' lagi $patient->medical_record_number = $prefix . str_pad($nextNumber, 4, '0', STR_PAD_LEFT); $patient->saveQuietly(); // saveQuietly mencegah trigger event model $bar->advance(); } $bar->finish(); $this->newLine(); $this->info('Berhasil menggenerate semua No. RM untuk pasien lama!'); return Command::SUCCESS; } }