Files
web-antrean/docs/DEVLOG.md
T

26 KiB
Raw Blame History

📓 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

## [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-0809 — 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-0205 — 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.tsapp.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)
    • verificationApiBaseUrlhttp://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-1011 — 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-0206 — 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-2830 — 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-2227 — 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-1921 — 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-1214 — 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-0809 — 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