APAM adalah aplikasi pasien berbasis Expo + React Native untuk layanan RS Atila Medika, terintegrasi dengan API mLITE/SIMRS. Aplikasi ini menyediakan beranda ringkas, pendaftaran mandiri, jadwal dokter, tarif layanan, serta riwayat perawatan.
Dokumentasi ini menjelaskan cara pemasangan, konfigurasi, menjalankan aplikasi, build, dan troubleshooting umum.
- Login pasien menggunakan No. Rekam Medis dan NIK/Password personal.
- Beranda pasien dengan data ringkas, jadwal dokter, dan artikel kesehatan terbaru.
- Akses modul layanan:
- Rawat Jalan
- Rawat Inap
- Jadwal Dokter
- Kamar tersedia
- Tarif Laboratorium, Radiologi, dan Farmasi
- Riwayat perawatan
- Pendaftaran mandiri
- Integrasi API melalui
axiosdengan interceptor untuk token dan kredensial pasien.
- Pengguna tamu tetap dapat membuka Beranda dan sebagian menu informasi (jadwal dokter, tarif, kamar, dll).
- Fitur yang memerlukan kredensial pasien (contoh: Booking/Riwayat/Profile/Detail tertentu) akan menampilkan layar Login Diperlukan jika belum login.
- Setelah login, aplikasi menyimpan sesi dan mengaktifkan fitur pasien (riwayat, pendaftaran, tiket booking, dsb).
- Expo SDK 54
- React Native 0.81
- Expo Router
- TypeScript
- Axios
- Node.js 20+ (disarankan LTS)
- npm
- Expo CLI (opsional, karena bisa via
npx expo ...)
APAM membutuhkan backend mLITE yang:
- Mengaktifkan endpoint API yang digunakan aplikasi (misal:
api/master/list/...,api/website/list, modul rawat jalan, dll). - Memiliki API key dan user sistem yang memiliki permission sesuai (misal
can_read,can_create,can_update). - Untuk penggunaan Web (browser), backend harus mengizinkan request CORS. Jika CORS tidak benar, biasanya di browser akan muncul
AxiosError: Network Errorataunet::ERR_FAILED.
Catatan modul opsional:
- Jika modul
rawat_inaptidak tersedia/disabled, set flag env Rawat Inap kefalseagar aplikasi tidak memanggil endpoint yang akan 404.
Buat atau sesuaikan file .env di root project:
EXPO_PUBLIC_API_URL=https://demo.mlite.id
EXPO_PUBLIC_API_ADMIN=admin
EXPO_PUBLIC_API_KEY=YOUR_API_KEY_HERE
EXPO_PUBLIC_API_USERNAME=admin
EXPO_PUBLIC_API_PASSWORD=admin
EXPO_PUBLIC_ENABLE_RAWAT_INAP=true
EXPO_PUBLIC_ENABLE_RAWAT_INAP_WEB=trueKeterangan:
EXPO_PUBLIC_API_URL: base URL API backend.EXPO_PUBLIC_API_ADMIN: admin prefix API (misal:admin).EXPO_PUBLIC_API_KEY: API key yang valid.EXPO_PUBLIC_API_USERNAMEdanEXPO_PUBLIC_API_PASSWORD: kredensial sistem untuk login awal.EXPO_PUBLIC_ENABLE_RAWAT_INAP: aktif/nonaktifkan fitur dan request Rawat Inap (global).EXPO_PUBLIC_ENABLE_RAWAT_INAP_WEB: override khusus platform Web. Jika diset, nilai ini akan dipakai saat berjalan di Web.
- Clone project:
git clone <repo-url> apam
cd apam- Install dependency:
npm install- Siapkan
.env:
- Copy dari contoh di atas
- Sesuaikan
EXPO_PUBLIC_API_URL,EXPO_PUBLIC_API_ADMIN,EXPO_PUBLIC_API_KEY, dan kredensial sistem
- Jalankan:
npx expo start- Install dependency:
npm install- Jalankan development server Expo:
npm run devAlternatif langsung via Expo CLI:
npx expo start- Jalankan target platform (opsional):
npm run android
npm run iosExpo Web akan berjalan dari dev server yang sama:
npx expo start --webJika request API tertentu gagal di Web namun normal di Android/iOS, hampir selalu karena konfigurasi CORS pada backend atau endpoint yang 404 (modul nonaktif). Lihat bagian Troubleshooting.
Gunakan opsi ini jika Anda ingin build langsung di mesin lokal.
- Generate folder native:
npx expo prebuild- Compile Android:
npx expo run:android- Compile iOS (hanya macOS + Xcode):
npx expo run:iosCatatan:
- Android membutuhkan Android Studio + SDK.
- iOS membutuhkan Xcode, CocoaPods, dan simulator/perangkat iOS.
- Install dan login EAS CLI:
npm install -g eas-cli
eas login- Inisialisasi konfigurasi EAS:
eas build:configure- Build Android (AAB/APK):
eas build -p android- Build iOS (IPA):
eas build -p ios- Download hasil build dari link output EAS setelah proses selesai.
- Icon aplikasi: ubah
expo.icondi app.json - Splash screen: ubah konfigurasi
splashdi app.json
npm run devmenjalankan Expo dev server.npm run build:webexport web build.npm run lintmenjalankan lint bawaan Expo.npm run typecheckpengecekan TypeScript tanpa emit.npm run androidbuild/run Android native.npm run iosbuild/run iOS native.
Project sudah menyediakan Dockerfile untuk menjalankan Expo server pada port 8080.
Contoh build & run:
docker build -t apam --build-arg EXPO_PUBLIC_API_URL=https://demo.mlite.id .
docker run --rm -p 8080:8080 apamJika variabel ini tidak diatur, QR code bisa menunjuk IP internal yang tidak dapat diakses dari perangkat HP.
Penyebab umum:
- Backend tidak mengizinkan CORS (preflight
OPTIONSgagal). - Endpoint 404 karena modul/plugin backend tidak aktif.
Langkah cek cepat:
- Buka DevTools → Network, lihat status request (404/403/500).
- Pastikan backend mengirim header CORS, misalnya
Access-Control-Allow-Origin. - Jika endpoint 404 (mis.
api/rawat_inap/list), setEXPO_PUBLIC_ENABLE_RAWAT_INAP_WEB=falseagar aplikasi tidak melakukan request tersebut.
Jika backend tidak memiliki modul rawat inap, nonaktifkan di .env:
EXPO_PUBLIC_ENABLE_RAWAT_INAP=falseatau khusus Web:
EXPO_PUBLIC_ENABLE_RAWAT_INAP_WEB=falseRestart dev server setelah mengganti .env.
Jika build Android error AAPT terkait file .png, pastikan file gambar benar-benar format PNG (bukan JPEG yang di-rename).
app/ -> route dan screen Expo Router
contexts/ -> context global (autentikasi)
lib/ -> API client dan endpoint wrapper
assets/ -> gambar dan aset statis
hooks/ -> custom hooks