# Mikrobiology Laboratory Information System (MyLIS)

MyLIS Flutter adalah aplikasi pendamping untuk Laravel LIS lokal milik Rumah Sakit Umum Daerah Dr. Saiful Anwar. Aplikasi ini fokus pada akses mobile/desktop untuk login, dashboard Early Warning Sistem, daftar pemeriksaan, detail pemeriksaan, dan pengisian expertise per template DLP.

Nama panjang aplikasi:

```text
Mikrobiology Laboratory Information System (MyLIS)
```

Pemilik aplikasi:

```text
Rumah Sakit Umum Daerah Dr. Saiful Anwar
```

Default URL Laravel lokal:

```text
https://lis.swandhana.test/
```

URL tersebut bisa diganti dari halaman sebelum login. Tersedia tombol `Ping` agar pengguna dapat memastikan server Laravel sudah dapat diakses sebelum login.

## Fitur Utama

- Login tanpa register.
- Pengaturan URL Laravel dari layar login.
- Ping koneksi ke Laravel.
- Dashboard dengan menu utama `Early Warning Sistem`.
- Daftar pemeriksaan per buku/kategori.
- Detail pemeriksaan dengan status dan tombol `Expertise`.
- Screen expertise Flutter native, tidak membuka Blade Laravel.
- Pemilihan template saat `periksa.dlp` masih kosong.
- Penyimpanan draft, preliminary, final, dan kirim ke SPV sesuai role pengguna.
- Dukungan build Android, iOS, dan macOS.

## Alur Expertise

Jika `periksa.dlp` kosong, aplikasi menampilkan pilihan template. Jika sudah terisi, aplikasi langsung membuka wizard sesuai DLP.

Screen DLP yang sudah dibuat:

- `CCI`
- `Kultur`
- `Pewarna Langsung`
- `TBC`
- `Viral Load`
- `IgM IgG Leptospira`
- `PCR COVID`

Semua wizard memakai pola umum:

1. Data pasien dan petugas.
2. Isian parameter/template sesuai DLP.
3. Tes Kepekaan Antibiotik jika berlaku.
4. Data alat jika berlaku.
5. Isian expertise akhir.

Navigasi wizard tidak memakai validasi wajib, sehingga pengguna bebas `Next` dan `Previous`.

## Role dan Tombol Simpan

Untuk role supervisor/SPV:

- `Save as Draft`
- `Save Preliminary result`
- `Save Final Result`

Untuk role selain supervisor/SPV:

- `Save as Draft`
- `Save and Send To SPV`
- `Kirim SPV Preliminary`

Checkbox `Nilai Kritis` tersedia di step akhir dan dikirim ke API saat menyimpan.

## Struktur Folder

```text
lib/
  app/
    app.dart
  data/
    expertise_data.dart
  providers/
    session_provider.dart
  screens/
    dashboard/
    examinations/
    expertise/
    login/
  services/
    api_client.dart
    session_store.dart
  widgets/
    common_widgets.dart
  main.dart
```

Ringkasan:

- `main.dart`: entry point aplikasi.
- `app/app.dart`: root aplikasi dan registrasi part screen.
- `services/api_client.dart`: komunikasi HTTP ke Laravel.
- `services/session_store.dart`: penyimpanan token dan base URL.
- `providers/session_provider.dart`: pengecekan session awal.
- `screens/login`: halaman login, URL Laravel, dan ping.
- `screens/dashboard`: dashboard dan Early Warning Sistem.
- `screens/examinations`: daftar dan detail pemeriksaan.
- `screens/expertise`: semua screen wizard DLP.
- `widgets/common_widgets.dart`: komponen UI umum.
- `data/expertise_data.dart`: daftar DLP dan label template.

## API Laravel

Aplikasi memakai endpoint mobile Laravel dengan prefix:

```text
/api/mobile
```

Endpoint utama:

- `GET /api/mobile/ping`
- `POST /api/mobile/login`
- `GET /api/mobile/dashboard`
- `GET /api/mobile/early-warning`
- `GET /api/mobile/books/{master}/examinations`
- `GET /api/mobile/examinations/{id}`
- `GET /api/mobile/examinations/{id}/expertise`
- `POST /api/mobile/examinations/{id}/expertise/template`
- `POST /api/mobile/examinations/{id}/expertise`

Controller Laravel berada di:

```text
/Users/duidev/htdocs/lis/htdocs/app/Http/Controllers/MobileApiController.php
```

Route API berada di:

```text
/Users/duidev/htdocs/lis/htdocs/routes/api.php
```

## Menjalankan Aplikasi

Ambil dependency:

```bash
flutter pub get
```

Jalankan di device/simulator:

```bash
flutter run
```

Jalankan dengan default URL lain:

```bash
flutter run --dart-define=LIS_BASE_URL=https://lis.swandhana.test/
```

## Verifikasi

Analisis kode Flutter:

```bash
flutter analyze
```

Test Flutter:

```bash
flutter test
```

Cek route Laravel mobile:

```bash
php artisan route:list --path=mobile
```

Cek sintaks controller Laravel:

```bash
php -l app/Http/Controllers/MobileApiController.php
```

## Build

Android debug:

```bash
flutter build apk --debug
```

iOS debug tanpa code signing:

```bash
flutter build ios --debug --no-codesign
```

macOS debug:

```bash
flutter build macos --debug
```

Output build yang umum:

- Android: `build/app/outputs/flutter-apk/app-debug.apk`
- iOS: `build/ios/iphoneos/Runner.app`
- macOS: `build/macos/Build/Products/Debug/mylis.app`

## Catatan Lokal

- Pastikan Laravel lokal `https://lis.swandhana.test/` aktif.
- Pastikan sertifikat lokal dipercaya oleh device/simulator yang dipakai.
- Untuk iOS device fisik, build `--no-codesign` tetap perlu signing manual sebelum deploy.
- Jangan menjalankan beberapa command Flutter berat secara bersamaan karena bisa berebut file sementara pada folder platform.
