diff --git a/docs/DEVLOG.md b/docs/DEVLOG.md index bd6373f..b02fbe4 100644 --- a/docs/DEVLOG.md +++ b/docs/DEVLOG.md @@ -65,6 +65,55 @@ Format output: --- +## 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 diff --git a/docs/DEVPLAN.md b/docs/DEVPLAN.md index f707038..6cb05b5 100644 --- a/docs/DEVPLAN.md +++ b/docs/DEVPLAN.md @@ -45,8 +45,8 @@ Format dalam tabel Markdown yang terstruktur. ## 1. Project Timeline ``` -[Start]──Phase 0──Phase 1──Phase 2──Phase 3──Phase 4──Phase 5──[Launch] - Setup Fondasi Inti API Hak Akses Eksekutif Stabilisasi +[Start]──Phase 0──Phase 1──Phase 2──Phase 3──Phase 4──Phase 5──Phase 6──[Launch] + Setup Fondasi Inti API Hak Akses Eksekutif Stabilisasi Verifikasi ``` | Fase | Nama | Durasi | Target | Status | @@ -56,7 +56,8 @@ Format dalam tabel Markdown yang terstruktur. | Phase 2 | Fitur Inti (Anjungan, WS, API) | 3 Minggu | Feb 2026 | ✅ Done | | Phase 3 | Hak Akses & Keycloak | 2 Minggu | Apr 2026 | ✅ Done | | Phase 4 | Fitur Eksekutif & Docker | 1 Minggu | Pertengahan Mei | ✅ Done | -| Phase 5 | Stabilisasi & Dokumentasi | 2 Minggu | Akhir Mei 2026 | 🔄 In Progress | +| Phase 5 | Stabilisasi & Dokumentasi | 2 Minggu | Akhir Mei 2026 | ✅ Done | +| Phase 6 | Verifikasi Akun & Kiosk | 2 Minggu | Juni 2026 | 🔄 In Progress | --- @@ -135,7 +136,15 @@ Format dalam tabel Markdown yang terstruktur. | Isolasi state loket (`currentProcessingPatient`) | 6 jam | Phase 2 | ✅ Done | | Blacklist handler untuk endpoint gagal 500 | 4 jam | Phase 2 | ✅ Done | | Dokumentasi PRD, QMD, DEVLOG, EVLOG | 8 jam | — | ✅ Done | -| Setup Unit Testing & E2E framework | 4 jam | — | 🔄 In Prog | +| Setup Unit Testing & E2E framework | 4 jam | — | ✅ Done | + +### Phase 6 — Verifikasi Akun & Kiosk +| Task | Estimasi | Dependencies | Status | +|------|----------|--------------|--------| +| Sistem notifikasi suara (voice over) loket & klinik | 12 jam | Phase 2 | ✅ Done | +| Fitur pindah klinik pada dashboard admin | 8 jam | Phase 2 | ✅ Done | +| Halaman Detail Akun Verifikasi | 4 jam | Phase 3 | ✅ Done | +| Implementasi Proxy Routes (CORS) | 8 jam | Phase 2 | ✅ Done | --- diff --git a/docs/PRD.md b/docs/PRD.md index 91a2bff..d06724e 100644 --- a/docs/PRD.md +++ b/docs/PRD.md @@ -127,6 +127,7 @@ Rumah Sakit RSSA menghadapi masalah antrean rawat jalan yang tidak terstruktur: - **FR-10:** Setiap loket memiliki state antrean yang terisolasi (tidak interferensi antar loket) - **FR-11:** Petugas dapat skip, recall, atau selesaikan pasien - **FR-12:** Display nomor panggil sinkron via WebSocket ke layar display +- **FR-12b:** Pemanggilan antrean dilengkapi dengan notifikasi suara (voice over) otomatis ### 5.4 Modul: Klinik / Dokter - **FR-13:** Admin klinik melihat daftar pasien berdasarkan klinik yang diampu @@ -352,6 +353,7 @@ export interface ApiResponse { | Master Penunjang | `/setting/master-penunjang` | ✅ | Superadmin | | Screen Settings | `/setting/screen` | ✅ | Superadmin | | Verifikasi Akun | `/verifikasi-akun/verifikasi-akun` | ❌ | Public | +| Detail Akun Verifikasi | `/verifikasi-akun/detail-akun` | ✅ | Admin | ### 8.2 Breakpoints diff --git a/pages/AdminKlinikRuang/[kodeKlinik].vue b/pages/AdminKlinikRuang/[kodeKlinik].vue index 272d0a3..da2098c 100644 --- a/pages/AdminKlinikRuang/[kodeKlinik].vue +++ b/pages/AdminKlinikRuang/[kodeKlinik].vue @@ -54,9 +54,6 @@
mdi-door {{ ruang.namaRuang }} - - Kamar : R.{{ ruang.nomorRuang }} -
diff --git a/stores/queueStore.js b/stores/queueStore.js index d5aea9d..03cb349 100644 --- a/stores/queueStore.js +++ b/stores/queueStore.js @@ -606,7 +606,8 @@ export const useQueueStore = defineStore('queue', () => { // String versions for robustness "1": 'menunggu', "2": 'menunggu', "3": 'anjungan', "4": 'anjungan', "5": 'di-loket', - "6": 'di-loket', "14": 'pemeriksaan', "15": 'pemeriksaan', "28": 'pending', "29": 'terlambat' + "6": 'di-loket', "14": 'pemeriksaan', "15": 'pemeriksaan', "28": 'pending', "29": 'terlambat', + "30": 'pending', "31": 'terlambat', "32": 'pending', "33": 'terlambat' }; /** @@ -2046,17 +2047,14 @@ const fetchPatientsForLoket = async (loketId, force = false) => { message = `Menandai pasien ${patientCode} sebagai terlambat...`; const payload = { - barcode: patient.barcode || "", - statuspasien: "29", - statuspasien2: "29", - idklinikstatus: "2", - idklinikstatus2: "2" + visit_code: patient.barcode || patient.visitCode || patient.ticket || "", + visit_status_id: [29] }; // POST to external API and WAIT for response try { - const apiBase = config.public.verificationApiBaseUrl || 'http://10.10.123.140:8089/api/v1'; - const response = await fetch(`${apiBase}/tiket/update`, { + const apiBase = config.public.externalApiBaseUrl || 'http://10.10.123.135:8084/api/v1'; + const response = await fetch(`${apiBase}/visit/status`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) @@ -2109,17 +2107,14 @@ const fetchPatientsForLoket = async (loketId, force = false) => { message = `Menandai pasien ${patientCode} sebagai pending...`; const payload = { - barcode: patient.barcode || "", - statuspasien: "28", - statuspasien2: "28", - idklinikstatus: "2", - idklinikstatus2: "2" + visit_code: patient.barcode || patient.visitCode || patient.ticket || "", + visit_status_id: [28] }; // POST to external API and WAIT for response try { - const apiBase = config.public.verificationApiBaseUrl || 'http://10.10.123.140:8089/api/v1'; - const response = await fetch(`${apiBase}/tiket/update`, { + const apiBase = config.public.externalApiBaseUrl || 'http://10.10.123.135:8084/api/v1'; + const response = await fetch(`${apiBase}/visit/status`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) @@ -2839,10 +2834,9 @@ const fetchPatientsForLoket = async (loketId, force = false) => { // Send API call to update status to 33 (TR PEMERIKSAAN) try { const visitApiBase = config.public.externalApiBaseUrl || 'http://10.10.123.135:8084/api/v1'; - const apiUrl = `${visitApiBase}/visit/status/finish`; + const apiUrl = `${visitApiBase}/visit/status`; const requestBody = { - patient_visit_healthcare_service_id: patient.healthcareServiceId, - visit_code: patient.barcode || patient.visitCode, + visit_code: patient.barcode || patient.visitCode || patient.ticket || "", visit_status_id: [33] }; @@ -2864,10 +2858,9 @@ const fetchPatientsForLoket = async (loketId, force = false) => { // Send API call to update status to 32 (PE PEMERIKSAAN) try { const visitApiBase = config.public.externalApiBaseUrl || 'http://10.10.123.135:8084/api/v1'; - const apiUrl = `${visitApiBase}/visit/status/finish`; + const apiUrl = `${visitApiBase}/visit/status`; const requestBody = { - patient_visit_healthcare_service_id: patient.healthcareServiceId, - visit_code: patient.barcode || patient.visitCode, + visit_code: patient.barcode || patient.visitCode || patient.ticket || "", visit_status_id: [32] };