Perintah Artisan
Di produksi, semua perintah dijalankan di dalam kontainer PHP:
docker exec crm_php php artisan <perintah>
Perintah khusus aplikasi
simrs:sync
Sinkronisasi data dari SIMRS.
php artisan simrs:sync patient # satu entitas
php artisan simrs:sync --all # semua entitas, urutan FK-safe
| Entitas | Keterangan |
|---|---|
polyclinic · doctor | Ringan, berjalan langsung |
patient · appointment · billing | Besar, lewat antrean (queued) |
Aman diulang: melanjutkan dari cursor terakhir kalau run sebelumnya terputus. Detail di SIMRS Sync.
bookings:reconcile
Sapuan draft booking: selamatkan yang sudah dibayar, matikan yang batas waktunya lewat.
php artisan bookings:reconcile
Output:
Reconciled paid-but-unconfirmed bookings: 2
Expired stale drafts: 5
Kalau ada notifikasi yang gagal:
Confirmation notifications that failed: 1 (see log)
Expiry notifications that failed: 2 (see log)
Kedua sapuan yang dipakainya idempoten — lintasan kedua tidak membuat janji temu kedua maupun mengirim pesan yang sama dua kali.
Berjalan otomatis tiap 5 menit. Tidak punya saklar config — untuk menghentikannya di suatu lingkungan, cukup tidak menjalankan cron schedule:run.
contacts:sync
Tarik daftar kontak dari ChatPanel Jasnita.
php artisan contacts:sync
Output sukses:
Sync kontak selesai: 12 baru, 45 diperbarui, 300 dilewati.
Kalau konfigurasi belum siap (bukan kegagalan — keluar sukses):
Tidak ada akun WhatsApp aktif — Aktifkan salah satu akun di menu WhatsApp Business Account terlebih dahulu.
Berjalan otomatis tiap 10 menit; bisa dimatikan lewat WHATSAPP_CONTACT_SYNC_ENABLED=false.
Perintah Laravel yang sering dipakai
Penjadwalan & antrean
php artisan schedule:run # dijalankan cron tiap menit
php artisan schedule:list # lihat semua tugas terjadwal
php artisan queue:work # jalankan worker
php artisan queue:failed # daftar job gagal
php artisan queue:retry all # coba ulang semua job gagal
Migrasi
php artisan migrate --force # produksi WAJIB --force
php artisan migrate:status
php artisan migrate:rollback --step=1 --force
migrate:fresh dan db:wipe menghapus seluruh data. Tidak ada situasi di mana keduanya benar di produksi maupun staging.
Cache
php artisan optimize:clear # bersihkan semua cache
php artisan config:cache
php artisan route:cache
php artisan view:cache
Urutan yang dipakai skrip deploy: optimize:clear → config:cache → route:cache → view:cache.
Filament
php artisan filament:assets # publikasikan aset vendor Filament
php artisan shield:generate --all # generate permission untuk resource/page baru
php artisan shield:super-admin # tetapkan super admin
Jalankan shield:generate, lalu centang permission barunya di menu Peran User. Permission baru tidak otomatis diberikan ke peran yang sudah ada.
Diagnostik
php artisan about # ringkasan lingkungan
php artisan about --only=environment
php artisan tinker # REPL
php artisan db:show --database=pgsql_crm # info koneksi
Seeder
php artisan db:seed --class=RolePermissionSeeder
Membuat 5 peran + 5 akun bawaan. Password bawaan password wajib diganti sebelum produksi.
Seeder data contoh lain tersedia (PatientSeeder, DoctorSeeder, PolyclinicSeeder, dst.) — hanya untuk pengembangan.
Pengembangan lokal
composer install
npm install
php artisan key:generate
php artisan migrate
php artisan serve
npm run dev # Vite dev server
npm run build # build produksi
./vendor/bin/pint # format kode (menulis ulang berkas)
php artisan test # jalankan test
Ringkasan tugas terjadwal
Semua memakai zona Asia/Jakarta, withoutOverlapping(), dan onOneServer().
Verifikasi dengan:
docker exec crm_php php artisan schedule:list