diff --git a/.env example b/.env example index fb674cd..30250ca 100644 --- a/.env example +++ b/.env example @@ -35,17 +35,17 @@ KEYCLOAK_ISSUER="https://auth.rssa.top/realms/sandbox" #AUTH ORIGIN UNTUK ACCESS APLIKASI login dari KEYCLOAK # AUTH_ORIGIN="http://10.10.150.175:3000" -AUTH_ORIGIN="0.0.0.0" +# AUTH_ORIGIN="0.0.0.0" # AUTH_ORIGIN="http://localhost:3000" -# AUTH_ORIGIN="https://antrean.dev.rssa.id" +AUTH_ORIGIN="https://antrean.dev.rssa.id" # AUTH_ORIGIN="https://antrean.rssa.id" #HOST UNTUK ACCESS APLIKASI # HOST="http://localhost:3000" # HOST="http://10.10.150.175:3000" # HOST="https://antrean.rssa.id" -HOST="https://antrean.dev.rssa.id" -# HOST= +# HOST="https://antrean.dev.rssa.id" +HOST="0.0.0.0" # HOST= # Custom Keycloak logout endpoint UBAH SESUAI REALM DAN DOMAIN KEYCLOAK ANDA diff --git a/Dashboard_DummyData.md b/Dashboard_DummyData.md new file mode 100644 index 0000000..b7e602c --- /dev/null +++ b/Dashboard_DummyData.md @@ -0,0 +1,332 @@ +# Dashboard Dummy Data Documentation + +Dokumentasi lengkap data dummy yang digunakan di `pages/Dashboard.vue` + +## 📊 Statistics Cards (Header Mini Stats) + +Data statistik mini yang ditampilkan di header: + +```javascript +{ + pasienHariIni: 324, + antreanAktif: 47 +} +``` + +## 📈 Main Statistics Cards + +Data untuk 4 kartu statistik utama: + +### 1. Pasien Hari Ini + +```javascript +{ + label: 'Pasien Hari Ini', + value: '324', + icon: 'mdi-account-heart', + iconColor: 'white', + color: 'primary', + change: '+18.2%', + changeType: 'positive', + changeIcon: 'mdi-trending-up' +} +``` + +### 2. Antrean Aktif + +```javascript +{ + label: 'Antrean Aktif', + value: '47', + icon: 'mdi-clock-fast', + iconColor: 'white', + color: 'secondary', + change: '+5', + changeType: 'positive', + changeIcon: 'mdi-arrow-up' +} +``` + +### 3. Rata-rata Tunggu + +```javascript +{ + label: 'Rata-rata Tunggu', + value: '12 min', + icon: 'mdi-timer-outline', + iconColor: 'white', + color: 'success', + change: '-3 min', + changeType: 'positive', + changeIcon: 'mdi-trending-down' +} +``` + +### 4. Tingkat Kehadiran + +```javascript +{ + label: 'Tingkat Kehadiran', + value: '89.5%', + icon: 'mdi-check-circle', + iconColor: 'white', + color: 'primary', + change: '+2.3%', + changeType: 'positive', + changeIcon: 'mdi-trending-up' +} +``` + +--- + +## 📊 Chart 1: Tren Kunjungan Pasien (Line/Area Chart) + +Chart yang menampilkan tren kunjungan pasien bulanan untuk tahun 2025. + +### Labels (Bulan) + +```javascript +[ + "Jan", + "Feb", + "Mar", + "Apr", + "Mei", + "Jun", + "Jul", + "Ags", + "Sep", + "Okt", + "Nov", + "Des", +]; +``` + +### Dataset 1: Pasien Umum + +```javascript +{ + label: 'Pasien Umum', + data: [850, 920, 880, 1050, 1120, 1080, 1200, 1150, 1080, 1190, 1250, 1300], + backgroundColor: 'rgba(86, 126, 231, 0.2)', + borderColor: '#567EE7' // primary-500 +} +``` + +**Total Pasien Umum 2025**: 13,070 pasien + +### Dataset 2: Pasien BPJS + +```javascript +{ + label: 'Pasien BPJS', + data: [1200, 1350, 1280, 1480, 1550, 1620, 1700, 1650, 1590, 1720, 1800, 1850], + backgroundColor: 'rgba(255, 132, 65, 0.2)', + borderColor: '#FF8441' // secondary-500 +} +``` + +**Total Pasien BPJS 2025**: 18,790 pasien + +**Grand Total**: 31,860 pasien sepanjang tahun 2025 + +--- + +## 💰 Chart 2: Status Pembayaran (Doughnut Chart) + +Distribusi metode pembayaran pasien. + +### Data + +```javascript +{ + labels: ['BPJS Kesehatan', 'Umum/Tunai', 'Asuransi Swasta', 'Corporate'], + datasets: [{ + data: [1850, 680, 320, 280] + }] +} +``` + +### Breakdown Persentase + +| Metode Pembayaran | Jumlah | Persentase | +| ----------------- | --------- | ---------- | +| BPJS Kesehatan | 1,850 | 58.6% | +| Umum/Tunai | 680 | 21.5% | +| Asuransi Swasta | 320 | 10.1% | +| Corporate | 280 | 8.9% | +| **Total** | **3,130** | **100%** | + +--- + +## ⏱️ Chart 3: Waktu Tunggu per Poli (Horizontal Bar Chart) + +Rata-rata waktu tunggu untuk setiap poliklinik (dalam menit). + +### Data + +```javascript +{ + labels: ['Poli Umum', 'Poli Anak', 'Poli Gigi', 'Poli Mata', 'Poli THT', 'Poli Jantung'], + datasets: [{ + label: 'Waktu Tunggu (menit)', + data: [15, 12, 8, 18, 10, 22] + }] +} +``` + +### Ranking Waktu Tunggu + +| Rank | Poliklinik | Waktu Tunggu | +| ---- | ------------ | ------------ | +| 1 | Poli Gigi | 8 menit ⚡ | +| 2 | Poli THT | 10 menit | +| 3 | Poli Anak | 12 menit | +| 4 | Poli Umum | 15 menit | +| 5 | Poli Mata | 18 menit | +| 6 | Poli Jantung | 22 menit 🐌 | + +**Rata-rata Total**: 14.17 menit + +--- + +## ✅ Chart 4: Tingkat Kehadiran (Polar Area Chart) + +Status kehadiran pasien dalam seminggu. + +### Data + +```javascript +{ + labels: ['Hadir Tepat Waktu', 'Hadir Terlambat', 'Tidak Hadir', 'Batal', 'Reschedule'], + datasets: [{ + data: [1850, 420, 280, 150, 230] + }] +} +``` + +### Breakdown Persentase + +| Status | Jumlah | Persentase | +| -------------------- | --------- | ---------- | +| Hadir Tepat Waktu ✅ | 1,850 | 62.6% | +| Hadir Terlambat ⏰ | 420 | 14.2% | +| Tidak Hadir ❌ | 280 | 9.5% | +| Batal 🚫 | 150 | 5.1% | +| Reschedule 📅 | 230 | 7.8% | +| **Total** | **2,960** | **100%** | + +**Tingkat Kehadiran Total** (Hadir Tepat Waktu + Hadir Terlambat): 76.8% + +--- + +## 🎨 Color Palette + +Palet warna yang digunakan dalam dashboard: + +### Primary Colors + +```javascript +{ + 700: '#3556AE', + 600: '#3A61C9', + 500: '#567EE7', + 400: '#7898EC', + 300: '#9AB2F1', + 200: '#BBCBF5' +} +``` + +### Secondary Colors + +```javascript +{ + 700: '#E65A0D', + 600: '#F16F29', + 500: '#FF8441', + 400: '#FF9D67', + 300: '#FFB58D' +} +``` + +### Success Colors + +```javascript +{ + 700: '#008D65', + 600: '#33A484', + 500: '#59B59B', + 400: '#80C6B2' +} +``` + +### Neutral Colors + +```javascript +{ + 100: '#FFFFFF', + 300: '#F5F7FA', + 500: '#CDD4DC', + 700: '#717171', + 900: '#212121' +} +``` + +--- + +## 📤 Export Options + +Menu export data yang tersedia: + +```javascript +[ + { title: "JSON (.json)", type: "json", icon: "mdi-code-json" }, + { title: "CSV (.csv)", type: "csv", icon: "mdi-file-delimited" }, + { + title: "Excel (.xlsx) - Server Only", + type: "excel", + icon: "mdi-file-excel", + }, + { title: "PDF (.pdf) - Placeholder", type: "pdf", icon: "mdi-file-pdf" }, +]; +``` + +--- + +## 📝 Summary Insights + +### Total Visitors + +- **Hari Ini**: 324 pasien (+18.2%) +- **Bulan Ini** (estimasi): ~2,617 pasien +- **Tahun 2025** (dari chart): 31,860 pasien + +### Performance Metrics + +- **Antrean Aktif**: 47 (+5) +- **Rata-rata Waktu Tunggu**: 12 menit (-3 min improvement) +- **Tingkat Kehadiran**: 89.5% (+2.3%) +- **Kehadiran Tepat Waktu**: 62.6% + +### Top Performing Clinic + +- **Tercepat**: Poli Gigi (8 menit) +- **Terlambat**: Poli Jantung (22 menit) + +### Payment Distribution + +- **BPJS dominan**: 58.6% dari total transaksi +- **Non-BPJS**: 41.4% (Umum + Asuransi + Corporate) + +--- + +## 🔧 Usage Notes + +File ini mendokumentasikan semua data dummy yang digunakan dalam komponen Dashboard.vue. Data ini dapat digunakan sebagai: + +1. **Reference** untuk struktur data API +2. **Testing data** untuk pengembangan +3. **Template** untuk implementasi data real dari backend +4. **Documentation** untuk tim pengembang + +Semua data bersifat **dummy/sample** dan harus diganti dengan data real dari API/backend saat production. diff --git a/components/checkin/ThermalTicket.vue b/components/checkin/ThermalTicket.vue index e72a23b..4b99966 100644 --- a/components/checkin/ThermalTicket.vue +++ b/components/checkin/ThermalTicket.vue @@ -58,8 +58,6 @@ @@ -245,7 +243,7 @@ const { padding-bottom: 0; margin-bottom: 6mm; border-top: 2px solid #000; - font-size: 9px; + font-size: 10px; font-weight: bold; text-align: center; line-height: 1.0; diff --git a/components/layout/SideBar.vue b/components/layout/SideBar.vue index eb23694..b799bc1 100644 --- a/components/layout/SideBar.vue +++ b/components/layout/SideBar.vue @@ -46,7 +46,6 @@ > - + open-on-hover + location="end" + :text="child.name" + > + + @@ -93,21 +101,29 @@ > - + open-on-hover + location="end" + :text="child.name" + > + + - - - - - - + + @@ -329,7 +347,17 @@ onMounted(async () => { @use '~/assets/scss/_colors.scss' as *; :deep(.v-navigation-drawer) { - position: relative; + position: fixed !important; + top: 0 !important; + left: 0 !important; + height: 100vh !important; + z-index: 1000 !important; +} + +.sidebar-bottom-section { + display: flex; + flex-direction: column; + flex-shrink: 0; } .sidebar-logo-container { @@ -472,10 +500,10 @@ onMounted(async () => { } .sidebar-lock-container { - position: absolute; - bottom: 16px; - left: 8px; - z-index: 10; + padding: 8px; + display: flex; + justify-content: flex-start; + align-items: center; } .sidebar-lock-btn { diff --git a/composables/useThermalPrint.ts b/composables/useThermalPrint.ts index 18981bf..c71873d 100644 --- a/composables/useThermalPrint.ts +++ b/composables/useThermalPrint.ts @@ -329,7 +329,7 @@ export const useThermalPrint = () => { padding-bottom: 0; margin-bottom: 6mm; border-top: 2px solid #000; - font-size: 9px; + font-size: 10px; font-weight: bold; text-align: center; line-height: 1.0; @@ -462,8 +462,6 @@ export const useThermalPrint = () => { diff --git a/pages/Anjungan/AntrianLoket/index.vue b/pages/Anjungan/AntrianLoket/index.vue index 36b11c6..0a8fbd2 100644 --- a/pages/Anjungan/AntrianLoket/index.vue +++ b/pages/Anjungan/AntrianLoket/index.vue @@ -12,7 +12,7 @@

Pilih Layar Antrian Loket

RSUD dr. Saiful Anwar Provinsi Jawa Timur

-
+
diff --git a/pages/CheckInPasien/checkIn.vue b/pages/CheckInPasien/checkIn.vue index 76eea6c..3a35a1f 100644 --- a/pages/CheckInPasien/checkIn.vue +++ b/pages/CheckInPasien/checkIn.vue @@ -15,10 +15,10 @@ - -
- - + +
+ +
@@ -50,7 +50,8 @@ v-else-if="!hasCamera && !isScanning" type="warning" variant="tonal" - class="mb-4" + class="mb-3 compact-alert" + density="compact" >