681 lines
26 KiB
Markdown
681 lines
26 KiB
Markdown
# 📓 DEVLOG — Development Log
|
||
|
||
**Project:** Web Antrean — Sistem Manajemen Antrean Rawat Jalan RSSA
|
||
**Author:** Akbar
|
||
**Stack:** JavaScript · Vue 3 · TypeScript · Nuxt 3 · Vuetify 3 · Pinia
|
||
|
||
---
|
||
|
||
## 🧠 AI Prompt — Cara Menggunakan Dokumen Ini
|
||
|
||
> Salin prompt berikut ke Claude untuk membantu mengisi DEVLOG harian:
|
||
|
||
```
|
||
Kamu adalah technical writer. Bantu aku menulis DEVLOG untuk hari ini.
|
||
|
||
Context:
|
||
- Project: Web Antrean — Sistem Manajemen Antrean Rawat Jalan RSSA
|
||
- Stack: Nuxt 3, Vue 3, TypeScript, Vuetify 3, Pinia, WebSocket, Keycloak
|
||
- Yang dikerjakan hari ini: [ceritakan bebas]
|
||
- Masalah yang ditemui: [ceritakan]
|
||
- Solusi yang diterapkan: [ceritakan]
|
||
|
||
Format output:
|
||
## [Tanggal] — [Judul Singkat]
|
||
**Yang dikerjakan:** ...
|
||
**Keputusan teknis:** ...
|
||
**Masalah & solusi:** ...
|
||
**Besok:** ...
|
||
```
|
||
|
||
---
|
||
|
||
## Format Entry
|
||
|
||
```markdown
|
||
## [YYYY-MM-DD] — [Judul Singkat Pekerjaan]
|
||
|
||
**Sprint/Phase:** [nama sprint atau fase]
|
||
**Durasi:** [X jam]
|
||
**Status:** ✅ Done | 🔄 In Progress | ⏸ Blocked
|
||
|
||
### Yang Dikerjakan
|
||
- ...
|
||
|
||
### Keputusan Teknis
|
||
> Jelaskan keputusan arsitektur/implementasi penting dan alasannya
|
||
|
||
### Masalah & Solusi
|
||
| Masalah | Solusi | Referensi |
|
||
|---------|--------|-----------|
|
||
| | | |
|
||
|
||
### Besok
|
||
- [ ] ...
|
||
|
||
### Referensi
|
||
- [link]
|
||
```
|
||
|
||
---
|
||
|
||
## Log Entries
|
||
|
||
<!-- Tambahkan entry baru di bawah baris ini, urutan terbaru di atas -->
|
||
|
||
## 2026-06-23 — Refactoring queueStore.js ke TypeScript (Phase 2: WebSocket & Typings)
|
||
|
||
**Sprint/Phase:** Phase 6 (Verifikasi Akun & Kiosk) / Refactoring Technical Debt
|
||
**Durasi:** 1 jam
|
||
**Status:** ✅ Done
|
||
|
||
### Yang Dikerjakan
|
||
- Membuat composable mandiri `composables/useQueueSync.ts` dan memindahkan lebih dari 200 baris logika *WebSocket* (`onWsMessage`, `connect`, `startAutoSync`) dari dalam *store*.
|
||
- Menjalankan *scripting* untuk me-resolve sebagian besar error peringatan `implicit any type` dan `catch(error: any)` di dalam `queueStore.ts`.
|
||
- Menerapkan injeksi dependencies dari `queueStore` ke dalam parameter `useQueueSync()` tanpa memutus *reactivity* dari Pinia state.
|
||
|
||
### Keputusan Teknis
|
||
> **Dependency Injection pada Composable:** Karena fungsionalitas WebSocket membutuhkan akses terhadap state (`allPatients`, `currentProcessingPatient`) dan actions (`fetchPatientsForLoket`, dll), maka variabel-variabel tersebut dilempar (injected) melalui parameter `deps` ke dalam fungsi `useQueueSync(deps)`. Hal ini mencegah masalah *circular dependencies* di ekosistem Nuxt/Pinia.
|
||
|
||
### Masalah & Solusi
|
||
| Masalah | Solusi | Referensi |
|
||
|---------|--------|-----------|
|
||
| Pinia-Plugin-PersistedState *type mismatch* pada `paths` config | Menambahkan flag `// @ts-ignore` untuk properti `paths` karena kompatibel secara *runtime* namun melanggar validasi tipe di rilis plugin yang terpasang. | QMD: Technical Debt |
|
||
|
||
### Besok
|
||
- Menguji secara manual interaksi antar *terminal* (Anjungan, Loket, Klinik) untuk memverifikasi fungsionalitas `useQueueSync`.
|
||
- Menulis Unit Tests (jika platform sudah siap).
|
||
|
||
---
|
||
|
||
## 2026-06-23 — Refactoring queueStore.js ke TypeScript (Phase 1)
|
||
|
||
**Sprint/Phase:** Phase 6 (Verifikasi Akun & Kiosk) / Refactoring Technical Debt
|
||
**Durasi:** 1 jam
|
||
**Status:** 🔄 In Progress
|
||
|
||
### Yang Dikerjakan
|
||
- Mengubah ekstensi file `queueStore.js` menjadi `queueStore.ts`.
|
||
- Membuat file definisi tipe antrean di `types/queue.ts` (`QueuePatient`).
|
||
- Mengekstrak raw fetch API calls (Loket, Visit, Update, Selesai Tiket) ke composable mandiri `composables/useQueueAPI.ts`.
|
||
- Melakukan transisi pada fungsi-fungsi besar (`fetchPatientsForLoket`, `callNext`, `callMultiplePatients`, `processPatient`) di dalam `queueStore.ts` untuk menggunakan `useQueueAPI` guna memangkas boilerplate fetch.
|
||
|
||
### Keputusan Teknis
|
||
> **Incremental Refactoring:** Menghindari pecahnya `queueStore` secara drastis dengan tetap mempertahankan satu *store instance* (`useQueueStore`) namun mengabstraksi beban logikanya keluar (*API* & *Sync layer*). Ini meminimalisasi *blast radius* / *breaking changes* ke komponen UI yang sudah jalan.
|
||
|
||
### Masalah & Solusi
|
||
| Masalah | Solusi | Referensi |
|
||
|---------|--------|-----------|
|
||
| Pembengkakan ukuran *store file* (>3500 baris, 145KB). | Mulai memisahkan logika pemanggilan API eksternal dan mendefinisikan strukturnya dengan TypeScript. | QMD: Technical Debt |
|
||
|
||
### Besok
|
||
- Membuat tipe yang strict untuk `state` dan seluruh *method signatures* di `queueStore.ts`.
|
||
- Mengekstraksi fungsionalitas WebSocket ke `composables/useQueueSync.ts`.
|
||
- Jika sudah ringan, memecah *store* menjadi `loketQueueStore` dan `clinicQueueStore`.
|
||
|
||
---
|
||
|
||
## 2026-06-19 — Fitur Detail Akun Verifikasi
|
||
|
||
**Sprint/Phase:** Phase 6 — Verifikasi Akun
|
||
**Durasi:** ~4 jam
|
||
**Status:** ✅ Done
|
||
|
||
### Yang Dikerjakan
|
||
- Penambahan halaman `DetailAkun.vue` (`400bfcd`)
|
||
- Update `VerifikasiAkun.vue` untuk integrasi dengan detail akun
|
||
- Modifikasi konfigurasi Vuetify di `plugins/vuetify.ts`
|
||
|
||
### Keputusan Teknis
|
||
> Pembuatan halaman detail akun terpisah untuk memberikan view lengkap informasi akun yang sedang diverifikasi, memperbaiki user experience admin saat memvalidasi data user.
|
||
|
||
---
|
||
|
||
## 2026-06-08–09 — Voice Over Antrean & Manajemen Loket/Klinik
|
||
|
||
**Sprint/Phase:** Phase 5 — Stabilisasi & Kiosk Features
|
||
**Durasi:** ~12 jam
|
||
**Status:** ✅ Done
|
||
|
||
### Yang Dikerjakan
|
||
- Implementasi sistem notifikasi suara (voice over) untuk antrean loket dan klinik (`8b9c472`)
|
||
- Update UI `AdminLoket/[id].vue` dan `Anjungan/AntrianLoket/[id].vue` untuk support voice announcement
|
||
- Modifikasi `queueStore.js` untuk integrasi status antrean
|
||
- Resolusi isu WebSocket dan CORS policy pada endpoint api antrean
|
||
|
||
### Keputusan Teknis
|
||
> Menggunakan voice synthesis/announcement otomatis untuk pendaftaran antrean agar pasien dengan keterbatasan visual dapat dipanggil secara otomatis dan jelas di area loket maupun klinik.
|
||
|
||
---
|
||
|
||
## 2026-06-02–05 — Proxy Routes & Fitur Pindah Klinik
|
||
|
||
**Sprint/Phase:** Phase 5 — Integrasi API & Queue System
|
||
**Durasi:** ~16 jam
|
||
**Status:** ✅ Done
|
||
|
||
### Yang Dikerjakan
|
||
- Implementasi proxy routes untuk `klinik-api`, `stats-api`, `visit-api` menghindari CORS issues (`0928e78`)
|
||
- Fitur pindah klinik pada dashboard admin (`f81dd57`)
|
||
- Penambahan dialog konfirmasi (CheckIn, Unfinished Patient) di queue features
|
||
- Store lokalisasi menggunakan Pinia untuk loket, klinik, dan queue management (`047b390`)
|
||
- Pembaruan DEVLOG, DEVPLAN, PRD, QMD, dan EVLOG
|
||
|
||
### Keputusan Teknis
|
||
> Menggunakan proxy routes di sisi server (Nitro) untuk mem-bypass CORS ketika memanggil backend API. Hal ini memperkuat keamanan dan menstabilkan fetch data dari aplikasi Vue frontend ke service backend.
|
||
|
||
## 2026-05-25 — Perbaikan & Dokumentasi Project
|
||
|
||
**Sprint/Phase:** Phase 5 — Stabilisasi & Dokumentasi
|
||
**Durasi:** ~4 jam
|
||
**Status:** 🔄 In Progress
|
||
|
||
### Yang Dikerjakan
|
||
- Push perbaikan berbagai bug (`ffdb88d`)
|
||
- Pembuatan dokumentasi project: PRD, QMD, DEVLOG
|
||
- Stabilisasi WebSocket sync dengan deterministic client ID
|
||
- Penambahan polling fallback 30 detik di semua admin interface
|
||
|
||
### Keputusan Teknis
|
||
> Membuat dokumentasi lengkap (PRD, QMD, DEVLOG) untuk meningkatkan maintainability project ke depan. Semua dokumen diisi berdasarkan kondisi aktual project, bukan template kosong.
|
||
|
||
### Masalah & Solusi
|
||
| Masalah | Solusi | Referensi |
|
||
|---------|--------|-----------|
|
||
| Dokumentasi project belum ada | Buat PRD, QMD, DEVLOG di folder `docs/` | — |
|
||
|
||
### Besok
|
||
- [ ] Review dan finalisasi dokumen
|
||
- [ ] Lanjutkan stabilisasi fitur penunjang
|
||
|
||
---
|
||
|
||
## 2026-05-22 — Stabilisasi WebSocket & Tooltips Dashboard
|
||
|
||
**Sprint/Phase:** Phase 5 — Stabilisasi
|
||
**Durasi:** ~8 jam
|
||
**Status:** ✅ Done
|
||
|
||
### Yang Dikerjakan
|
||
- Standardisasi header konfigurasi (origin & referer) di `stats-api`, `visit-api`, `klinik-api` ke `http://10.10.150.175:3000`
|
||
- Penambahan tooltips di komponen Dashboard
|
||
- Standardisasi WebSocket client ID menjadi deterministic untuk reliable cross-device messaging
|
||
- Implementasi polling fallback 30 detik di semua admin interface
|
||
- Audit semua halaman yang bergantung WebSocket
|
||
|
||
### Keputusan Teknis
|
||
> WebSocket client ID diubah dari random ke deterministic agar server bisa menargetkan pesan ke device tertentu. Polling 30 detik ditambahkan sebagai safety net jika WebSocket disconnect — ini menghindari data drift antar display.
|
||
|
||
### Masalah & Solusi
|
||
| Masalah | Solusi | Referensi |
|
||
|---------|--------|-----------|
|
||
| Header origin/referer tidak konsisten antar proxy route | Standardisasi ke `http://10.10.150.175:3000` di semua route handler | `server/routes/` |
|
||
| Data antrean tidak sinkron antar display saat WS drop | Polling fallback 30 detik + deterministic WS client ID | `useWebSocket.ts` |
|
||
|
||
---
|
||
|
||
## 2026-05-21 — Perbaikan Layar Info & Isolasi Loket
|
||
|
||
**Sprint/Phase:** Phase 5 — Stabilisasi
|
||
**Durasi:** ~6 jam
|
||
**Status:** ✅ Done
|
||
|
||
### Yang Dikerjakan
|
||
- Fix: info klinik ruang tidak muncul di layar informasi (`ec9dac0`)
|
||
- Isolasi state `currentProcessingPatient` menggunakan unique storage key per loket
|
||
- Perbaikan `processNextQueue` dan `callNext` — strict filter berdasarkan `loketId`
|
||
- Validasi WebSocket event handler agar tidak ada update lintas loket yang tidak sah
|
||
- Memastikan `allPatients` tetap single source of truth
|
||
|
||
### Keputusan Teknis
|
||
> Masalah kritis: loket A memproses pasien loket B karena `currentProcessingPatient` menggunakan key yang sama. Solusi: setiap loket mendapat unique persisted state key (`currentPatient_loket_{id}`).
|
||
|
||
### Masalah & Solusi
|
||
| Masalah | Solusi | Referensi |
|
||
|---------|--------|-----------|
|
||
| Cross-loket interference pada `currentProcessingPatient` | Unique storage key per loket di persisted state | `queueStore.js` |
|
||
| `processNextQueue` memproses pasien dari loket lain | Strict filter berdasarkan `loketId` dan service mapping | `useQueue.js` |
|
||
| WebSocket event mengupdate loket yang salah | Guard check di event handler | `useWebSocket.ts` |
|
||
|
||
---
|
||
|
||
## 2026-05-20 — Subspesialis & Perbaikan Bug Loket
|
||
|
||
**Sprint/Phase:** Phase 4 — Fitur Eksekutif
|
||
**Durasi:** ~7 jam
|
||
**Status:** ✅ Done
|
||
|
||
### Yang Dikerjakan
|
||
- Penambahan fitur subspesialis di PatientCard (`1446e87`)
|
||
- Display subspesialis sebagai pill/chip di samping status badge
|
||
- Perbaikan bug tampilan loket (`f622052`)
|
||
- UI enhancement: PatientCard menampilkan info ruang/subspesialis secara kondisional
|
||
|
||
### Keputusan Teknis
|
||
> Subspesialis ditampilkan sebagai pill/chip di PatientCard agar admin klinik bisa langsung melihat spesialisasi pasien tanpa perlu buka detail. Conditional rendering — tampilkan ruang ATAU subspesialis, tergantung data yang tersedia.
|
||
|
||
### Masalah & Solusi
|
||
| Masalah | Solusi | Referensi |
|
||
|---------|--------|-----------|
|
||
| Info subspesialis tidak tampil di card pasien | Tambah conditional pill/chip di `PatientCard.vue` | `components/features/queue/PatientCard.vue` |
|
||
| Bug tampilan loket | Fix layout dan data binding | `pages/AdminLoket.vue` |
|
||
|
||
---
|
||
|
||
## 2026-05-19 — Docker & Anjungan Eksekutif
|
||
|
||
**Sprint/Phase:** Phase 4 — Fitur Eksekutif & Deployment
|
||
**Durasi:** ~8 jam
|
||
**Status:** ✅ Done
|
||
|
||
### Yang Dikerjakan
|
||
- Penambahan Dockerfile dan docker-compose untuk deployment (`bc74b98`)
|
||
- Refinement UI anjungan eksekutif — pilihan subspesialis
|
||
- Peningkatan kontras dan visibilitas button seleksi (border tebal, shadow, hover state)
|
||
- Implementasi handler function untuk selection state yang robust
|
||
|
||
### Keputusan Teknis
|
||
> Docker ditambahkan untuk standardisasi deployment. Anjungan eksekutif mendapat UI khusus dengan radio-style button yang lebih intuitif — target user adalah pasien dengan tech level rendah, jadi kontras dan ukuran harus maksimal.
|
||
|
||
### Masalah & Solusi
|
||
| Masalah | Solusi | Referensi |
|
||
|---------|--------|-----------|
|
||
| Deployment manual dan tidak konsisten | Dockerfile + docker-compose | `Dockerfile`, `docker-compose.yml` |
|
||
| Button seleksi subspesialis kurang kontras | Thicker border, deeper shadow, distinct hover/selected state | Anjungan pages |
|
||
|
||
---
|
||
|
||
## 2026-05-18 — Optimasi Performa & Memory
|
||
|
||
**Sprint/Phase:** Phase 5 — Stabilisasi
|
||
**Durasi:** ~6 jam
|
||
**Status:** ✅ Done
|
||
|
||
### Yang Dikerjakan
|
||
- Perbaikan memory usage dan load performance (`cb3310b`)
|
||
- Verifikasi status kunjungan operasi
|
||
- Pengecekan semua API endpoint yang sudah terintegrasi
|
||
- Pembersihan `console.log` verbose di high-frequency path
|
||
|
||
### Keputusan Teknis
|
||
> Mengurangi memory footprint dengan: (1) membersihkan verbose logging di WebSocket handler dan QR scanner, (2) implementasi blacklist untuk endpoint yang terus-menerus gagal agar tidak spam request.
|
||
|
||
### Masalah & Solusi
|
||
| Masalah | Solusi | Referensi |
|
||
|---------|--------|-----------|
|
||
| `doctorStore.js` terus retry endpoint yang 500 | Implementasi blacklist endpoint gagal | `stores/doctorStore.js` |
|
||
| `console.log` verbose di `useWebSocket.ts` | Cleanup logging di high-frequency path | `composables/useWebSocket.ts` |
|
||
| Memory usage terus naik | Reduce excessive API retry + cleanup logging | — |
|
||
|
||
---
|
||
|
||
## 2026-04-20 — Update Hak Akses & Perbaikan Tiket
|
||
|
||
**Sprint/Phase:** Phase 3 — Hak Akses & Permission
|
||
**Durasi:** ~6 jam
|
||
**Status:** ✅ Done
|
||
|
||
### Yang Dikerjakan
|
||
- Update sistem hak akses berbasis Keycloak role & group (`2bf00ef`)
|
||
- Perbaikan API pembuatan tiket antrean
|
||
- Standardisasi user role slugs dari Keycloak groups
|
||
- Implementasi slugification utility untuk role normalization
|
||
|
||
### Keputusan Teknis
|
||
> Role dari Keycloak group path (`/Instalasi STIM/Devops/Superadmin`) di-slugify menjadi URL-friendly (`instalasi-stim-devops-superadmin`) untuk konsistensi di permission API dan internal user data.
|
||
|
||
### Masalah & Solusi
|
||
| Masalah | Solusi | Referensi |
|
||
|---------|--------|-----------|
|
||
| Role dari Keycloak tidak URL-friendly | Implementasi slugification utility | `composables/useHakAkses.ts` |
|
||
| Tiket antrean gagal digenerate | Perbaikan API endpoint pembuatan tiket | `server/api/` |
|
||
|
||
---
|
||
|
||
## 2026-04-15 — Update Favicon
|
||
|
||
**Sprint/Phase:** Phase 3 — Polish
|
||
**Durasi:** ~1 jam
|
||
**Status:** ✅ Done
|
||
|
||
### Yang Dikerjakan
|
||
- Ganti favicon aplikasi web-antrean
|
||
- Update konfigurasi `app.head` di `nuxt.config.ts` untuk mengarah ke file icon baru
|
||
|
||
### Keputusan Teknis
|
||
> Favicon diletakkan di folder `public/` dan direferensi via `nuxt.config.ts` → `app.head.link`.
|
||
|
||
---
|
||
|
||
## 2026-04-13 — Integrasi Keycloak Role Access
|
||
|
||
**Sprint/Phase:** Phase 3 — Hak Akses & Permission
|
||
**Durasi:** ~8 jam
|
||
**Status:** ✅ Done
|
||
|
||
### Yang Dikerjakan
|
||
- Verifikasi dan standardisasi akses Keycloak role
|
||
- Implementasi middleware `auth.ts`, `guest.ts`, `permissions.ts`, `checkPageAccess.ts`
|
||
- Setup permission store (`permissionStore.ts`)
|
||
- Integrasi permission API endpoint (`server/api/permission.get.ts`)
|
||
|
||
### Keputusan Teknis
|
||
> Menggunakan 4 layer middleware: (1) `auth.ts` — cek login, (2) `guest.ts` — redirect jika sudah login, (3) `permissions.ts` — cek hak akses halaman, (4) `checkPageAccess.ts` — validasi granular per page. Model ini memastikan defense-in-depth untuk access control.
|
||
|
||
### Masalah & Solusi
|
||
| Masalah | Solusi | Referensi |
|
||
|---------|--------|-----------|
|
||
| Role dari Keycloak format path, bukan slug | Konversi ke slug untuk matching di permission API | `middleware/permissions.ts` |
|
||
|
||
---
|
||
|
||
## 2026-02-24 — Perbaikan Ambil Tiket
|
||
|
||
**Sprint/Phase:** Phase 2 — Fitur Inti
|
||
**Durasi:** ~4 jam
|
||
**Status:** ✅ Done
|
||
|
||
### Yang Dikerjakan
|
||
- Fix bug pengambilan tiket antrean di anjungan (`94ff9f5`)
|
||
- Perbaikan flow generate nomor antrean
|
||
|
||
### Masalah & Solusi
|
||
| Masalah | Solusi | Referensi |
|
||
|---------|--------|-----------|
|
||
| Tiket gagal digenerate pada kondisi tertentu | Fix logic generate nomor antrean | `composables/useQRGenerator.ts` |
|
||
|
||
---
|
||
|
||
## 2026-02-19 — Implementasi Anjungan (Kiosk) & Queue Store
|
||
|
||
**Sprint/Phase:** Phase 2 — Fitur Inti
|
||
**Durasi:** ~10 jam
|
||
**Status:** ✅ Done
|
||
|
||
### Yang Dikerjakan
|
||
- Implementasi modul Anjungan (Kiosk) lengkap (`0c4019c`)
|
||
- Halaman pilih klinik, klinik ruang, penunjang
|
||
- Halaman antrian per klinik, klinik ruang, penunjang
|
||
- Check-in pasien via QR
|
||
- Admin anjungan
|
||
- Implementasi Pinia store baru untuk queue management (`4342cdc`)
|
||
- Integrasi dengan Visit API dan Antrian API
|
||
- WebSocket integration untuk real-time update
|
||
- Halaman admin dan kiosk display
|
||
|
||
### Keputusan Teknis
|
||
> `queueStore.js` dibuat sebagai central store untuk semua operasi antrean — ini menjadi single source of truth untuk `allPatients`. Keputusan ini mempermudah sinkronisasi real-time tapi membuat file menjadi sangat besar (saat ini 141KB). Perlu dipecah di masa depan.
|
||
|
||
---
|
||
|
||
## 2026-02-18 — Core Anjungan Display & Verification
|
||
|
||
**Sprint/Phase:** Phase 2 — Fitur Inti
|
||
**Durasi:** ~8 jam
|
||
**Status:** ✅ Done
|
||
|
||
### Yang Dikerjakan
|
||
- Implementasi core display system anjungan (`7d07a4f`)
|
||
- Display antrean klinik ruang
|
||
- Display antrean masuk
|
||
- Display antrean loket
|
||
- Tambah verification store dan konfigurasi endpoint baru (`f78bbea`)
|
||
- `verificationApiBaseUrl` → `http://10.10.123.140:8089/api/v1`
|
||
- `ekstrakExpertiseUrl` endpoint
|
||
- Fix wsBaseUrl fallback di Nuxt config (`d03fa63`)
|
||
|
||
### Keputusan Teknis
|
||
> Dual backend API architecture: Visit API (port 8084) untuk data kunjungan utama, Antrian API (port 8089) untuk verifikasi dan data klinik/dokter. Proxy layer Nitro digunakan untuk bypass CORS dan menyembunyikan IP backend dari client.
|
||
|
||
---
|
||
|
||
## 2026-02-13 — Admin Loket, Klinik Ruang & Queue Management
|
||
|
||
**Sprint/Phase:** Phase 2 — Fitur Inti
|
||
**Durasi:** ~10 jam
|
||
**Status:** ✅ Done
|
||
|
||
### Yang Dikerjakan
|
||
- Implementasi halaman Admin Loket detail (`8c6b3fd`)
|
||
- Manajemen antrian pasien per loket
|
||
- Aksi pasien: panggil, skip, recall, selesai
|
||
- Dialog seleksi (pilih loket, pilih layanan)
|
||
- Implementasi `AdminKlinikRuang` page (`67a5514`)
|
||
- Manajemen antrian per klinik ruang
|
||
- Processing, calling, filtering, global search
|
||
- Implementasi komprehensif patient queue management (`dbc9054`)
|
||
- Pinia store untuk queue
|
||
- API integration
|
||
- Admin counter page
|
||
- Tambah komponen `PatientCard`, `CurrentPatientCard` (`95ff830`)
|
||
- Fitur queue management untuk klinik ruang dan counter (`4df13cb`)
|
||
|
||
### Keputusan Teknis
|
||
> Memisahkan queue components menjadi 4 komponen: `PatientCard` (card per pasien), `CurrentPatientCard` (pasien sedang dilayani), `QueueActionsCard` (tombol aksi), `TabelPatientData` (tabel lengkap). Ini memastikan reusability di halaman admin loket, klinik, dan penunjang.
|
||
|
||
---
|
||
|
||
## 2026-02-12 — Anjungan Pages, WebSocket & Queue API
|
||
|
||
**Sprint/Phase:** Phase 2 — Fitur Inti
|
||
**Durasi:** ~10 jam
|
||
**Status:** ✅ Done
|
||
|
||
### Yang Dikerjakan
|
||
- Introduce halaman Anjungan untuk antrian klinik, klinik ruang, dan counter (`a5ab338`)
|
||
- Tambah halaman check-in pasien
|
||
- Implementasi core queue management system dengan WebSocket (`0e3ee37`)
|
||
- Pinia store untuk queue
|
||
- WebSocket integration
|
||
- Halaman check-in dan kiosk display
|
||
- Update post API klinik dan loket di queueStore (`4985aef`)
|
||
- Fix status pasien selesai di klinik ruang (`c08941a`)
|
||
- Various merge dan bugfix
|
||
|
||
### Keputusan Teknis
|
||
> WebSocket dipilih sebagai primary communication channel untuk real-time sync karena latensi < 2 detik krusial di rumah sakit — pasien harus langsung melihat nomor panggil berubah di layar display.
|
||
|
||
---
|
||
|
||
## 2026-02-10–11 — WebSocket Bug Fixing
|
||
|
||
**Sprint/Phase:** Phase 2 — Stabilisasi WebSocket
|
||
**Durasi:** ~12 jam (2 hari)
|
||
**Status:** ✅ Done
|
||
|
||
### Yang Dikerjakan
|
||
- Fix bug WebSocket di check-in loket (`b6dc252`)
|
||
- Fix socket check-in flow (`e686dda`)
|
||
- Update socket data dan token handling (`fb70237`)
|
||
- Fix duplikasi data dan ticket menghilang di admin klinik loket (`c02905e`)
|
||
- Update WS untuk admin loket dan check-in (`a7a654b`)
|
||
- Fix missing function error (`23164bc`)
|
||
- Perbaikan sorting pasien di next process (`6af3f58`)
|
||
|
||
### Masalah & Solusi
|
||
| Masalah | Solusi | Referensi |
|
||
|---------|--------|-----------|
|
||
| Duplikasi tiket di admin klinik | Fix logic deduplication di WebSocket handler | `useWebSocket.ts` |
|
||
| Tiket menghilang setelah check-in | Fix state update flow — pastikan re-render setelah WS event | `queueStore.js` |
|
||
| Socket check-in tidak trigger update | Fix event listener binding | `composables/useCheckIn.ts` |
|
||
|
||
---
|
||
|
||
## 2026-02-09 — Integrasi WebSocket
|
||
|
||
**Sprint/Phase:** Phase 2 — Real-time
|
||
**Durasi:** ~6 jam
|
||
**Status:** ✅ Done
|
||
|
||
### Yang Dikerjakan
|
||
- Setup dan implementasi WebSocket client (`101dc38`)
|
||
- Koneksi ke `ws://10.10.123.135:8084/api/v1/ws`
|
||
- Implementasi `useWebSocket.ts` composable
|
||
|
||
### Keputusan Teknis
|
||
> Menggunakan native browser WebSocket API dibungkus composable (`useWebSocket.ts`) daripada library seperti `socket.io` — mengurangi dependency dan lebih ringan untuk environment LAN internal.
|
||
|
||
---
|
||
|
||
## 2026-02-02–06 — API Integration & Display Screen
|
||
|
||
**Sprint/Phase:** Phase 2 — Integrasi API
|
||
**Durasi:** ~20 jam (5 hari)
|
||
**Status:** ✅ Done
|
||
|
||
### Yang Dikerjakan
|
||
- Update tampilan layar screen display (`cf54ded`)
|
||
- Penambahan API klinik ruang (`a29838e`, `b327997`, `c2d9023`)
|
||
- Update logika pemanggilan admin loket by payment (`efeb42e`)
|
||
- Fix HTTPS implementation dan check-in (`c899a71`)
|
||
- Update session dan WebSocket (`0428017`)
|
||
- Update status klinik ruang (`6696881`)
|
||
- Update tampilan anjungan (`329ac9c`)
|
||
- Fixing admin loket dan blokade loket yang tidak tersedia (`5d139c8`)
|
||
- Update verifikasi dan lainnya (`2838016`)
|
||
- Update post API status dan data pasien ruang (`e2a5d43`)
|
||
|
||
### Keputusan Teknis
|
||
> Logika pemanggilan admin loket diubah menjadi payment-based — pasien yang sudah bayar diprioritaskan. Loket yang tidak tersedia di-blokade otomatis agar petugas tidak melihat loket yang bukan tanggung jawabnya.
|
||
|
||
---
|
||
|
||
## 2026-01-28–30 — Master Data & API Queue Store
|
||
|
||
**Sprint/Phase:** Phase 1 — Fondasi
|
||
**Durasi:** ~12 jam (3 hari)
|
||
**Status:** ✅ Done
|
||
|
||
### Yang Dikerjakan
|
||
- Update master data berdasarkan jenis layanan (`9f0f6a7`)
|
||
- Update API antrean masuk dan minor changes (`507f415`)
|
||
- Fix session dan tampilan screen (`8dd94ed`)
|
||
- Fix loop dan duplikasi data (`0bd5311`)
|
||
- Update fetch API (`cccefb0`)
|
||
- Update layout semua halaman (`ae8b06d`)
|
||
- Update queueStore dari API (`19633af`)
|
||
- Minor update anjungan (`59e42f3`)
|
||
|
||
---
|
||
|
||
## 2026-01-22–27 — Admin Loket & API Integrasi
|
||
|
||
**Sprint/Phase:** Phase 1 — Fondasi
|
||
**Durasi:** ~16 jam (4 hari)
|
||
**Status:** ✅ Done
|
||
|
||
### Yang Dikerjakan
|
||
- Update logika penarikan API dan tampilan anjungan (`e900c5a`)
|
||
- Update No RM dan desain (`2ccb378`)
|
||
- Update API master loket dan antrian loket (`75a9638`)
|
||
- Update anjungan (`8de89cb`)
|
||
- Update master klinik ruang (`6c08352`)
|
||
- Update sidebar check-in dan antrian loket (`525322b`)
|
||
- Update API loket admin (`083fe3e`)
|
||
- Push update admin loket (`f606045`)
|
||
|
||
---
|
||
|
||
## 2026-01-19–21 — Layout, Sidebar, Dashboard & Monitoring
|
||
|
||
**Sprint/Phase:** Phase 1 — Fondasi
|
||
**Durasi:** ~20 jam (3 hari)
|
||
**Status:** ✅ Done
|
||
|
||
### Yang Dikerjakan
|
||
- Update flow klinik ruang dan design consistency (`cbd8f44`)
|
||
- Update sidebar, profile, dan loket (`f2efd83`)
|
||
- Update loket dan monitoring (`81b877b`, `c00c18e`)
|
||
- Update page header komponen (`00bb954`)
|
||
- Sidebar change (`3db912a`)
|
||
- Update header, card, dialog (`fde7111`, `531ca10`, `f7a3b20`)
|
||
- Perubahan update sidebar, dashboard, monitoring, antrean loket, verifikasi (`bb71955`)
|
||
- Update check-in tampilan dan function (`482294b`)
|
||
|
||
### Keputusan Teknis
|
||
> Layout system menggunakan Vuetify navigation drawer (`SideBar.vue`) + custom `PageHeader.vue`. Design consistency diterapkan via SCSS variables (`_variables.scss`, `_colors.scss`) untuk warna, spacing, dan typography.
|
||
|
||
---
|
||
|
||
## 2026-01-15 — Login Page, Check-in & Antrean Masuk
|
||
|
||
**Sprint/Phase:** Phase 1 — Fondasi
|
||
**Durasi:** ~8 jam
|
||
**Status:** ✅ Done
|
||
|
||
### Yang Dikerjakan
|
||
- Implementasi login page dan check-in (`e99a0ab`)
|
||
- Update color palette dan konsultasi pasien (`a8a55b9`)
|
||
- Tampilan antrean masuk (`ed57e2d`)
|
||
- Edit manual check-in (`928be7c`)
|
||
- Update logika pemanggilan, sticky konten, tampilan card (`96c6376`)
|
||
- Perbaikan generate dan scan tiket QR (`8aa5ab2`)
|
||
|
||
### Keputusan Teknis
|
||
> QR code digunakan untuk tiket antrean — pasien mendapat QR saat ambil antrean, lalu scan QR saat check-in. Library `html5-qrcode` dipilih untuk scanner dan `qrcode.vue` untuk generator.
|
||
|
||
---
|
||
|
||
## 2026-01-12–14 — Loket, Klinik Ruang & Fast Track
|
||
|
||
**Sprint/Phase:** Phase 1 — Fondasi
|
||
**Durasi:** ~16 jam (3 hari)
|
||
**Status:** ✅ Done
|
||
|
||
### Yang Dikerjakan
|
||
- Update layout klinik dan WebSocket layar klinik (`6e7160c`)
|
||
- Update klinik ruang dan status fast track (`27209de`)
|
||
- Perubahan tiket dan alur antrean (`5c14227`)
|
||
- Push loket baru (`42fe62c`)
|
||
- Loket perbaikan "sedang dilayani" (`48e4aab`)
|
||
- Anjungan fast track dan tampilan ruang (`3817b2d`)
|
||
- Perbaikan loket dan total antrean (`a000ba0`, `0a8e11a`, `9ccbaba`)
|
||
- Check-in tampilan (`0c7b33a`)
|
||
- Fixing layar loket dan status pasien (`e80032f`)
|
||
- QRcode update (`6c80c08`)
|
||
- Update warna dan klinik ruang (`f3e90ad`)
|
||
- Perubahan antrean masuk (`c5b623f`)
|
||
- Update seed data dan fungsi pindah/konsul klinik (`89c3549`)
|
||
|
||
---
|
||
|
||
## 2026-01-08–09 — Klinik Ruang, QR & Print
|
||
|
||
**Sprint/Phase:** Phase 1 — Fondasi
|
||
**Durasi:** ~12 jam (2 hari)
|
||
**Status:** ✅ Done
|
||
|
||
### Yang Dikerjakan
|
||
- Layar baru antrean klinik dan antrean masuk (`2d3d589`)
|
||
- Update klinik ruang (`ca5913c`)
|
||
- Nav items (`8a4bb44`)
|
||
- Update print admin loket, logika klinik ruang, numbering antrian baru (`676bdc0`)
|
||
- Update QR function (`22d7205`)
|
||
- Perubahan format No Antrean (`6d5d565`)
|
||
- Check-in footers detail (`1b7a142`)
|
||
- Klinik ruang dan update admin loket (`9ea8300`)
|
||
|
||
### Keputusan Teknis
|
||
> Format nomor antrean: `[KodeKlinik]-[NomorUrut]` (contoh: `PDL-001`). Thermal print diimplementasi via `useThermalPrint.ts` composable untuk cetak tiket langsung dari browser ke printer thermal via Web API.
|
||
|
||
---
|
||
|
||
<!-- Tambahkan entry baru di atas baris ini, urutan terbaru di atas -->
|
||
|
||
---
|
||
|
||
## 📊 Summary Stats
|
||
|
||
| Metrik | Value |
|
||
|--------|-------|
|
||
| Total hari dev | ~50+ hari (Jan 2026 — Mei 2026) |
|
||
| Fase project | 5 fase (Setup → Fondasi → Hak Akses → Eksekutif → Stabilisasi) |
|
||
| Fitur selesai | 8 modul utama (Anjungan, Check-in, Loket, Klinik, Penunjang, Dashboard, Setting, Hak Akses) |
|
||
| Total commits | 80+ commits |
|
||
| Bug ditemukan | 15+ (WebSocket, loket interference, memory, display sync) |
|
||
| Bug diselesaikan | 15+ |
|
||
| Halaman dibuat | 28 halaman |
|
||
| Composables | 16 composable |
|
||
| Pinia Stores | 13 stores |
|
||
| Komponen | 20+ komponen |
|