# ๐Ÿ““ 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 ## 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. --- --- ## ๐Ÿ“Š 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 |