> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mertani.co.id/llms.txt
> Use this file to discover all available pages before exploring further.

# Hello, bagaimana kami bisa membantu Anda?

Dapatkan dukungan yang Anda butuhkan untuk sukses dengan Mertani. Jelajahi pusat bantuan kami, kontak kami, atau telusuri dokumentasi kami untuk menemukan jawaban dengan cepat.

<CardGroup cols={2}>
  <Card title="Open API" icon="code" href="./endpoints/devices">
    API Mertani memungkinkan integrasi data IoT dari perangkat di lapangan
  </Card>

  <Card title="Support Mertani" icon="comment-dots" href="https://api.whatsapp.com/send/?phone=%E2%80%AA6285117481856%E2%80%AC&text=Nama%3A%0AInstansi%3A%0AEmail%3A%0AKebutuhan+Saya%3A%0A&type=phone_number&app_absent=0">
    Ajukan pertanyaan langsung kepada support Mertani
  </Card>
</CardGroup>

## Frequently Asked Questions

Find answers to common questions about Mertani dashboard app.

***

## 1. Istilah & Definisi

Istilah teknis yang sering muncul di dokumentasi Mertani dijelaskan di bawah ini dalam bahasa sederhana.

<AccordionGroup>
  <Accordion title="Apa itu IoT?">
    **IoT (Internet of Things)** adalah jaringan perangkat fisik yang terhubung ke internet dan dapat mengumpulkan serta mengirim data secara otomatis. Di Mertani, perangkat IoT adalah sensor dan data logger yang dipasang di lapangan untuk memantau kondisi lingkungan seperti curah hujan, tinggi muka air, kualitas udara, dan kualitas air.
  </Accordion>

  <Accordion title="Apa bedanya Device, Sensor, dan Data Logger?">
    * **Device (perangkat)** adalah unit utama yang terpasang di lapangan. Device bisa berupa stasiun cuaca, pencatat hujan, atau pencatat ketinggian air. Satu device memiliki satu atau lebih sensor.
    * **Sensor** adalah komponen di dalam device yang membaca nilai spesifik, misalnya suhu, curah hujan, atau tinggi muka air. Satu device bisa memiliki banyak sensor sekaligus.
    * **Data Logger** adalah modul pengirim data yang ada di dalam device. Data logger mengumpulkan pembacaan dari semua sensor lalu mengirimkannya ke server Mertani melalui jaringan (GSM, LoRa, atau internet).
  </Accordion>

  <Accordion title="Apa itu Role?">
    **Role** adalah kategori hak akses yang menentukan apa yang bisa dilakukan oleh seorang pengguna di dalam sistem. Misalnya, role "Admin" memiliki akses penuh ke semua fitur, sementara role "Operator" mungkin hanya bisa melihat data dan mengunduh laporan. Satu pengguna bisa diberikan satu role, dan perubahan permission pada role akan berlaku untuk semua pengguna dalam role tersebut.
  </Accordion>

  <Accordion title="Apa itu Permission?">
    **Permission** adalah izin spesifik yang menentukan tindakan apa saja yang boleh dilakukan oleh pengguna dengan role tertentu. Permission dikelola per modul dan mencakup empat jenis aksi utama: **View** (melihat), **Create** (menambah), **Update** (mengubah), dan **Delete** (menghapus). Permission dikonfigurasi di level backend, sehingga meskipun tombol terlihat di UI, aksi tetap akan ditolak jika permission tidak diaktifkan.
  </Accordion>

  <Accordion title="Apa itu Raw Data?">
    **Raw Data** adalah nilai mentah yang dibaca langsung oleh sensor, tanpa pengolahan atau koreksi apapun. Raw Data disimpan sebagai referensi dan tidak berubah meskipun kalibrasi sudah dikonfigurasi. Raw Data berguna untuk debugging dan validasi teknis.
  </Accordion>

  <Accordion title="Apa itu Synthetic Data (Sintetik Data)?">
    **Synthetic Data** atau **Sintetik Data** adalah nilai hasil kalibrasi dari Raw Data. Sistem menggunakan Synthetic Data untuk menampilkan data di dashboard, grafik, tabel, laporan, dan fitur export. Dengan kata lain, apa yang Anda lihat di tampilan monitoring pada umumnya adalah Synthetic Data, bukan Raw Data.
  </Accordion>

  <Accordion title="Apa itu Kalibrasi (Calibration)?">
    **Kalibrasi** adalah proses menyesuaikan pembacaan sensor agar sesuai dengan nilai referensi yang akurat di lapangan. Misalnya, jika sensor membaca 120 cm tetapi pengukuran manual menunjukkan 80 cm, kalibrasi diperlukan untuk mengoreksi selisih tersebut. Hasil kalibrasi menghasilkan Synthetic Data yang digunakan di seluruh sistem. Kalibrasi hanya berlaku untuk data baru yang dikirim setelah konfigurasi disimpan, data historis tidak akan berubah.
  </Accordion>

  <Accordion title="Apa itu Dataset?">
    **Dataset** adalah tabel referensi dalam format CSV yang digunakan untuk kalibrasi berbasis lookup. Dataset diperlukan ketika hubungan antara nilai sensor dan nilai sebenarnya tidak linear, sehingga tidak bisa diwakili dengan rumus matematika sederhana. Contohnya adalah konversi tinggi muka air menjadi luas penampang basah menggunakan tabel referensi.
  </Accordion>

  <Accordion title="Apa itu Virtual Sensor (Sensor Turunan)?">
    **Virtual Sensor** atau **sensor turunan** adalah sensor yang tidak secara fisik ada di perangkat, tetapi nilainya dihitung dari kombinasi sensor lain menggunakan rumus kalibrasi. Contohnya adalah sensor debit yang dihitung dari nilai kecepatan aliran dikalikan luas penampang. Virtual sensor tidak bisa digunakan kembali sebagai referensi untuk kalibrasi sensor lain.
  </Accordion>

  <Accordion title="Apa itu Tag Device?">
    **Tag** adalah label yang bisa ditempel pada device untuk memudahkan pengelompokan dan pencarian. Tag bersifat fleksibel dan bisa dikonfigurasi sendiri oleh pengguna, misalnya berdasarkan lokasi (`Site-A`), fungsi (`Suhu`), atau proyek tertentu. Satu device bisa memiliki lebih dari satu tag, dan satu tag bisa digunakan untuk banyak device.
  </Accordion>

  <Accordion title="Apa itu Threshold dan Warning Detection?">
    **Threshold** (ambang batas) adalah nilai batas yang dikonfigurasi untuk memicu peringatan. **Warning Detection** adalah fitur yang secara otomatis memantau nilai sensor dan memberikan peringatan ketika nilai melampaui threshold yang telah ditentukan. Misalnya, peringatan "Awas" akan muncul jika tinggi muka air melebihi batas siaga. Threshold dikonfigurasi melalui menu **Pengaturan Level Status** di dashboard.
  </Accordion>

  <Accordion title="Apa itu On-Premise dan SaaS?">
    * **On-Premise** adalah model layanan di mana server dan database Mertani ditempatkan di infrastruktur milik instansi Anda sendiri. Untuk login, diperlukan key khusus yang diberikan oleh tim Mertani.
    * **SaaS (Software as a Service)** adalah model layanan berbasis cloud di mana seluruh infrastruktur server dikelola oleh Mertani. Login dilakukan langsung tanpa key.
  </Accordion>

  <Accordion title="Apa itu REST API dan Webhook?">
    * **REST API** adalah metode akses data di mana aplikasi Anda secara aktif meminta data dari server Mertani (pull-based). Cocok untuk dashboard, analisis data historis, dan kebutuhan di mana Anda ingin mengontrol kapan data diambil.
    * **Webhook** adalah metode akses data di mana server Mertani secara otomatis mengirim data ke server Anda setiap kali ada data baru (push-based). Cocok untuk sistem notifikasi real-time dan integrasi event-driven.
  </Accordion>

  <Accordion title="Apa itu Realtime dan Live Stream di dashboard?">
    * **Realtime** memperbarui grafik dan tabel secara otomatis setiap kali device mengirim data baru sesuai interval pengirimannya (misalnya setiap 10 menit). Data disimpan di database dan bisa diakses sebagai historis.
    * **Live Stream** menampilkan data sensor dengan pembaruan setiap 1-5 detik, jauh lebih cepat dari interval normal. Data pada Live Stream tidak disimpan ke database, hanya ditampilkan langsung untuk kebutuhan observasi intensif seperti pengujian sensor.
  </Accordion>

  <Accordion title="Apa itu Grouping?">
    **Grouping** adalah cara data dirangkum berdasarkan periode waktu saat ditampilkan atau diunduh. Pilihan grouping meliputi per jam, per hari, per minggu, per bulan, dan per tahun. Semakin besar interval grouping, semakin ringkas data yang ditampilkan. Gunakan grouping "Interval" jika ingin melihat semua data tanpa pengelompokan.
  </Accordion>

  <Accordion title="Apa itu Slug pada Dataset?">
    **Slug** adalah identifier unik untuk setiap dataset yang diunggah. Slug inilah yang digunakan dalam fungsi `DATASET()` di rumus kalibrasi. Misalnya, `DATASET("penampang_basah", x, "area")` menggunakan slug `penampang_basah`. Slug harus unik per device dan menggunakan format yang konsisten.
  </Accordion>

  <Accordion title="Apa itu Rating Curve?">
    **Rating curve** adalah kurva hubungan antara tinggi muka air (TMA) dan debit aliran. Kurva ini umumnya bersifat non-linear, sehingga memerlukan metode kalibrasi berbasis dataset atau kondisi (conditional) untuk mengkonversi pembacaan tinggi air menjadi nilai debit secara akurat.
  </Accordion>

  <Accordion title="Apa itu ISPU dan AQI?">
    * **ISPU (Indeks Standar Pencemar Udara)** adalah indeks yang digunakan di Indonesia untuk mengukur kualitas udara berdasarkan konsentrasi polutan seperti PM2.5, PM10, CO, SO2, dan NO2.
    * **AQI (Air Quality Index)** adalah indeks serupa yang digunakan secara internasional.
      Keduanya digunakan sebagai acuan dalam pengaturan level status pada device AQMS di Mertani.
  </Accordion>
</AccordionGroup>

## 2. API - Spesifikasi Teknis

### Autentikasi & Keamanan

<AccordionGroup>
  <Accordion title="Metode autentikasi apa yang didukung?">
    Mertani API mendukung **dua metode autentikasi**:

    **1. Basic Authentication**

    * Header: `Authorization: Basic base64(api_key:secret_key)`
    * `api_key` sebagai username, `secret_key` sebagai password
    * Lebih aman, cocok untuk backend/server

    **2. Public Access (tanpa header)**

    * API key ditempatkan langsung di URL path
    * Tidak perlu header Authorization
    * Contoh: `GET /{api-key}/devices`

    Kedua metode bersifat **stateless** (tanpa session/token).

    **Tips keamanan:**

    * Gunakan HTTPS di semua request
    * Jangan expose API key di frontend
    * Simpan credential di environment variables
  </Accordion>

  <Accordion title="Kapan harus menggunakan Basic Auth vs Public Access?">
    | Kapan                            | Metode        | Alasan                                 |
    | -------------------------------- | ------------- | -------------------------------------- |
    | Integrasi backend/server         | Basic Auth    | Lebih aman, kredensial tidak terekspos |
    | Testing/development              | Public Access | Cepat, tanpa header auth               |
    | Sistem yang tidak support header | Public Access | API key cukup di URL                   |
    | Akses data publik                | Public Access | Tidak butuh secret\_key                |
    | Produksi/production              | Basic Auth    | Keamanan lebih terjaga                 |

    **Ringkasan:**

    * **Basic Auth**: Gunakan untuk integrasi production yang membutuhkan keamanan tinggi
    * **Public Access**: Gunakan untuk testing, development, atau sistem yang tidak mendukung header Authorization
  </Accordion>

  <Accordion title="Apa yang harus dilakukan jika kredensial bocor atau tidak aman?">
    **Kemungkinan penyebab:**

    * API key tersimpan di frontend
    * Repository tidak diamankan

    **Solusi:**

    * Segera rotasi API key
    * Pindahkan kredensial ke server-side
    * Gunakan secret manager jika tersedia
  </Accordion>

  <Accordion title="Error 401 Unauthorized">
    **Kemungkinan penyebab:**

    * Header Authorization tidak ada (untuk Basic Auth)
    * Format Basic Authentication salah
    * Base64 encoding tidak valid
    * API key atau secret\_key salah

    **Solusi:**

    * Pastikan header dikirim dengan benar (untuk Basic Auth)
    * Periksa format: `api_key:secret_key` sebelum encoding
    * Generate ulang Base64
    * Untuk Public Access, pastikan API key benar di URL path
  </Accordion>

  <Accordion title="Error 403 Forbidden">
    **Kemungkinan penyebab:**

    * API key tidak memiliki akses ke resource
    * API key telah dicabut

    **Solusi:**

    * Periksa permission API key
    * Hubungi pihak Mertani jika diperlukan
  </Accordion>

  <Accordion title="Bagaimana cara mendapatkan API credentials?">
    API credentials (api\_key dan secret\_key) diterbitkan oleh tim Mertani saat proses onboarding instansi. Untuk permintaan credentials baru atau rotasi key, hubungi tim support Mertani melalui halaman [Support](/docs/support).

    **Yang perlu dipersiapkan:**

    * Nama instansi
    * Alamat email resmi
    * Kebutuhan akses (endpoint spesifik yang dibutuhkan)
    * Metode autentikasi yang diinginkan (Basic Auth atau Public Access)
  </Accordion>
</AccordionGroup>

### Endpoint & Format Data

<AccordionGroup>
  <Accordion title="Endpoint API apa saja yang tersedia?">
    Mertani menyediakan **5 endpoint** dengan dua metode autentikasi:

    **Basic Authentication (butuh api\_key + secret\_key):**

    * `GET /devices` -> Daftar semua device
    * `GET /devices/{device_id}/data` -> Data sensor per device

    **Public Access (API key di URL, tanpa password):**

    * `GET /{api-key}/devices` -> Daftar device (publik)
    * `GET /{api-key}/devices/{device_id}/data` -> Data sensor (publik)

    **Webhook (push-based):**

    * `POST /webhook/sensor-data` -> Menerima data dari device

    Base URL untuk semua endpoint:

    ```text theme={null}
    https://app.mertani.co.id/external/v1
    ```

    *(Detail endpoint dapat berbeda tergantung konfigurasi instansi)*
  </Accordion>

  <Accordion title="Format data apa yang didukung?">
    **Request:**

    * Header: JSON / HTTP standard
    * Authentication: Basic Auth atau Public Access

    **Response:**

    * Format utama: **JSON**
    * Encoding: UTF-8
    * Timestamp: ISO 8601 / Unix timestamp (tergantung endpoint)

    Contoh response:

    ```json theme={null}
    {
      "device_id": "123",
      "timestamp": "2025-01-01T10:00:00Z",
      "temperature": 27.5
    }
    ```
  </Accordion>

  <Accordion title="Apakah API ini bersifat real-time?">
    Secara default, API Mertani **tidak bersifat real-time per detik**. Data mengikuti interval pengiriman dari device.

    * Interval umum: **1 jam** sekali
    * API hanya menyajikan data yang sudah tersimpan di database

    **Untuk kebutuhan real-time:**

    * Gunakan Webhook API (push-based)
    * Atau lakukan polling dengan interval yang disesuaikan
  </Accordion>

  <Accordion title="Apakah saya bisa mengakses perangkat secara langsung?">
    **Tidak.** Arsitektur Mertani bersifat decoupled:

    * Client tidak pernah berkomunikasi langsung dengan device
    * Semua akses harus melalui API
    * Data diambil dari database, bukan dari perangkat secara live

    Ini memastikan keamanan sistem, konsistensi data, dan skalabilitas.
  </Accordion>

  <Accordion title="Bagaimana konsistensi data dijamin?">
    Data yang masuk ke Mertani melalui beberapa tahap:

    1. Validasi device
    2. Validasi format data
    3. Normalisasi
    4. Penyimpanan ke database

    Sistem menggunakan `timestamp` dari device sebagai referensi utama.

    **Catatan:**

    * Delay dapat terjadi jika jaringan tidak stabil
    * Data duplikat bisa terjadi jika device melakukan retry

    Disarankan untuk melakukan validasi tambahan di sisi client.
  </Accordion>
</AccordionGroup>

### Rate Limit & Best Practice

<AccordionGroup>
  <Accordion title="Bagaimana rate limit dihitung?">
    Rate limit tidak selalu diekspos secara eksplisit, namun sistem menerapkan mekanisme proteksi untuk menjaga stabilitas.

    **Secara umum:**

    * Request berulang dalam waktu singkat dapat dibatasi
    * Polling berlebihan dapat menyebabkan throttling
    * Beban tinggi dari satu API key dapat memicu pembatasan sementara

    **Best practice:**

    * Gunakan interval request sesuai interval device (misalnya 1 jam)
    * Hindari polling setiap detik
    * Gunakan caching di sisi client

    Untuk kebutuhan high-frequency access, gunakan **Webhook API**.
  </Accordion>

  <Accordion title="Kapan sebaiknya menggunakan REST API vs Webhook?">
    | Situasi                        | Rekomendasi |
    | ------------------------------ | ----------- |
    | Butuh data historis            | REST API    |
    | Membangun dashboard            | REST API    |
    | Kontrol penuh terhadap request | REST API    |
    | Butuh data real-time           | Webhook     |
    | Sistem event-driven            | Webhook     |
    | Ingin menghindari polling      | Webhook     |

    Dalam banyak kasus, **kombinasi keduanya** adalah pendekatan terbaik.
  </Accordion>

  <Accordion title="Apa yang terjadi jika request gagal?">
    API akan mengembalikan HTTP status code standar:

    | Kode | Arti         |
    | ---- | ------------ |
    | 200  | Success      |
    | 400  | Bad request  |
    | 401  | Unauthorized |
    | 403  | Forbidden    |
    | 500  | Server error |

    **Best practice:**

    * Implementasikan retry mechanism
    * Logging error response
    * Validasi request sebelum dikirim
  </Accordion>
</AccordionGroup>

### Webhook API

<AccordionGroup>
  <Accordion title="Bagaimana cara kerja Webhook API?">
    Webhook API menggunakan pola **push-based**: server Mertani secara otomatis mengirim data ke endpoint server Anda setiap kali ada data baru dari device. Berbeda dengan REST API yang memerlukan Anda untuk aktif meminta data (polling), Webhook mengirim data tanpa perlu diminta.

    **Yang perlu dikonfigurasi:**

    * Endpoint URL server tujuan yang bisa menerima HTTP POST request
    * Pastikan endpoint selalu aktif dan mengembalikan response `200 OK`
    * Implementasikan mekanisme deduplikasi karena retry bisa mengirim data yang sama lebih dari sekali

    **Retry mechanism:**
    Jika pengiriman gagal, sistem akan mencoba ulang hingga 10 kali dengan pola exponential backoff (interval antar retry semakin lama). Setelah 10 kali gagal, status pengiriman menjadi **Gagal permanen**.

    Untuk melihat log pengiriman webhook, buka menu **Instansi > Integrasi** di dashboard. Lihat dokumentasi [Log Integration](/docs/dashboard/configuration/log-integration-push-based) untuk informasi lebih lanjut.
  </Accordion>

  <Accordion title="Apa bedanya REST API dan Webhook?">
    |                     | REST API                                    | Webhook                                      |
    | ------------------- | ------------------------------------------- | -------------------------------------------- |
    | **Pola**            | Pull-based (Anda meminta data)              | Push-based (Mertani mengirim data)           |
    | **Kapan digunakan** | Saat butuh data historis atau kontrol penuh | Saat butuh data segera setelah tersedia      |
    | **Real-time**       | Tidak, mengikuti interval polling           | Ya, data dikirim saat event terjadi          |
    | **Setup**           | Sederhana, cukup API credentials            | Perlu endpoint publik yang stabil            |
    | **Cocok untuk**     | Dashboard, analisis, reporting              | Notifikasi, alerting, integrasi event-driven |

    Dalam banyak kasus, **kombinasi keduanya** adalah pendekatan terbaik. Gunakan REST API untuk data historis dan Webhook untuk notifikasi real-time.
  </Accordion>

  <Accordion title="Bagaimana cara memantau status pengiriman Webhook?">
    Buka menu **Instansi > Integrasi** di dashboard. Halaman ini menampilkan matriks log pengiriman per device per tanggal, termasuk jumlah pengiriman berhasil (hijau) dan gagal (merah). Klik sel tertentu untuk melihat detail HTTP request yang dikirim ke server tujuan, termasuk body payload dan response.

    Gunakan filter status untuk menyaring hanya pengiriman yang gagal guna keperluan troubleshooting.
  </Accordion>
</AccordionGroup>

***

## 3. API - Troubleshooting

### Data Tidak Muncul atau Terlambat

<AccordionGroup>
  <Accordion title="Data tidak muncul di API">
    **Kemungkinan penyebab:**

    * Perangkat belum mengirim data
    * Interval pengiriman belum tercapai

    **Solusi:**

    * Periksa status device
    * Tunggu hingga siklus pengiriman berikutnya
  </Accordion>

  <Accordion title="Data terlambat muncul">
    **Kemungkinan penyebab:**

    * Jaringan perangkat tidak stabil
    * Delay pada proses ingestion

    **Solusi:**

    * Periksa konektivitas device
    * Validasi timestamp data
  </Accordion>

  <Accordion title="API tidak mengembalikan data terbaru (REST)">
    **Kemungkinan penyebab:**

    * Polling terlalu cepat sebelum data tersedia
    * Parameter waktu tidak sesuai
    * Cache pada client

    **Solusi:**

    * Sesuaikan interval polling dengan device
    * Gunakan filter timestamp terbaru
    * Disable cache jika diperlukan
  </Accordion>

  <Accordion title="Request berhasil tapi data kosong">
    **Kemungkinan penyebab:**

    * API key tidak memiliki akses ke data tertentu
    * Parameter request tidak sesuai

    **Solusi:**

    * Validasi endpoint dan parameter
    * Periksa scope akses API key
  </Accordion>

  <Accordion title="Data tidak konsisten">
    **Kemungkinan penyebab:**

    * Sensor error atau tidak terkalibrasi
    * Data duplikat atau missing

    **Solusi:**

    * Lakukan kalibrasi sensor
    * Validasi data di level aplikasi
  </Accordion>
</AccordionGroup>

### Masalah Webhook

<AccordionGroup>
  <Accordion title="Data tidak masuk ke sistem external (Webhook)">
    **Kemungkinan penyebab:**

    * Endpoint tidak dapat diakses (down / timeout)
    * URL webhook salah

    **Solusi:**

    * Periksa endpoint server Anda
    * Validasi URL dan pastikan response status mengembalikan `200 OK`
  </Accordion>

  <Accordion title="Webhook mengirim data duplikat">
    **Kemungkinan penyebab:**

    * Retry dari server karena response gagal
    * Tidak ada deduplication di client

    **Solusi:**

    * Implementasikan idempotency di sisi client
    * Simpan unique identifier data
  </Accordion>

  <Accordion title="Server client overload karena webhook">
    **Kemungkinan penyebab:**

    * Volume data tinggi
    * Endpoint tidak scalable

    **Solusi:**

    * Gunakan queue system (Kafka, RabbitMQ, dll.)
    * Tambahkan rate limiting atau buffering
  </Accordion>
</AccordionGroup>

***

## 4. App Dashboard - Manajemen Pengguna

### Undangan & Login

<AccordionGroup>
  <Accordion title="Undangan tidak diterima">
    **Kemungkinan penyebab:**

    * Email salah atau tidak aktif
    * Email masuk ke folder spam

    **Solusi:**

    * Periksa kembali alamat email
    * Minta pengguna cek folder spam atau promotion
    * Kirim ulang undangan jika tersedia
  </Accordion>

  <Accordion title="User tidak bisa login setelah invite">
    **Kemungkinan penyebab:**

    * Proses aktivasi belum selesai
    * Password belum diterima melalui email

    **Solusi:**

    * Pastikan pengguna telah membuka link undangan
    * Minta pengguna terima undangan
  </Accordion>

  <Accordion title="User tidak muncul di daftar pengguna">
    **Kemungkinan penyebab:**

    * Invite belum diproses sepenuhnya
    * Halaman belum diperbarui

    **Solusi:**

    * Refresh halaman
    * Periksa kembali status undangan
  </Accordion>
</AccordionGroup>

### Edit & Akses Pengguna

<AccordionGroup>
  <Accordion title="Tidak bisa mengedit pengguna">
    **Kemungkinan penyebab:**

    * Tidak memiliki permission yang cukup
    * Akun dibatasi oleh sistem

    **Solusi:**

    * Gunakan akun dengan akses lebih tinggi
    * Periksa kebijakan sistem terkait akses edit
  </Accordion>

  <Accordion title="Nomor HP tidak valid saat edit profil">
    **Kemungkinan penyebab:**

    * Format nomor tidak sesuai
    * Mengandung karakter yang tidak diperbolehkan

    **Solusi:**

    * Gunakan format nomor yang benar (angka saja, sesuai standar sistem)
    * Hindari spasi atau simbol tambahan
  </Accordion>

  <Accordion title="Perubahan tidak tersimpan atau tidak terlihat">
    **Kemungkinan penyebab:**

    * Form belum diisi dengan benar / validasi sistem gagal
    * Cache browser belum diperbarui

    **Solusi:**

    * Pastikan semua field wajib sudah diisi dan format data benar
    * Refresh halaman atau logout dan login kembali
  </Accordion>

  <Accordion title="User tidak melihat device apapun">
    **Kemungkinan penyebab:**

    * Tidak ada device yang dipilih saat konfigurasi

    **Solusi:**

    * Edit kembali akses device
    * Pastikan minimal satu device dipilih
  </Accordion>

  <Accordion title="Device tidak muncul di daftar pilihan">
    **Kemungkinan penyebab:**

    * Device belum terdaftar dalam sistem
    * Device berada di instansi berbeda

    **Solusi:**

    * Pastikan device sudah dibuat dan aktif
    * Periksa kembali scope instansi
  </Accordion>

  <Accordion title="User masih bisa akses device yang seharusnya dibatasi">
    **Kemungkinan penyebab:**

    * Pembatasan belum tersimpan dengan benar
    * Ada konflik dengan konfigurasi lain

    **Solusi:**

    * Ulangi proses dan pastikan klik simpan
    * Validasi kembali konfigurasi akses user
  </Accordion>
</AccordionGroup>

***

## 5. App Dashboard - Manajemen Role

### Membuat & Mengedit Role

<AccordionGroup>
  <Accordion title="Gagal membuat role">
    **Kemungkinan penyebab:**

    * Nama role duplikat
    * Input tidak valid atau koneksi bermasalah

    **Solusi:**

    * Pastikan nama role tidak duplikat
    * Periksa koneksi dan validasi input
  </Accordion>

  <Accordion title="Tidak bisa mengubah nama role">
    **Kemungkinan penyebab:**

    * Role merupakan role default atau dilindungi sistem
    * Tidak memiliki permission yang cukup

    **Solusi:**

    * Gunakan akun dengan akses lebih tinggi
    * Periksa apakah role termasuk protected role
  </Accordion>

  <Accordion title="Nama role tidak bisa disimpan">
    **Kemungkinan penyebab:**

    * Nama role sudah digunakan (duplikat)
    * Input kosong atau mengandung karakter yang tidak diperbolehkan

    **Solusi:**

    * Gunakan nama yang unik
    * Pastikan format nama sesuai aturan sistem
  </Accordion>

  <Accordion title="User bingung dengan perubahan nama role">
    **Kemungkinan penyebab:**

    * Tidak ada komunikasi perubahan ke pengguna

    **Solusi:**

    * Informasikan perubahan kepada pengguna terkait
    * Gunakan nama yang lebih deskriptif dan familiar
  </Accordion>
</AccordionGroup>

### Assign Role & Permission

<AccordionGroup>
  <Accordion title="Role salah setelah user login">
    **Kemungkinan penyebab:**

    * Salah memilih role saat invite
    * Perubahan belum tersimpan

    **Solusi:**

    * Gunakan fitur **Assign Role** untuk memperbaiki
    * Pastikan konfigurasi role benar saat invite
  </Accordion>

  <Accordion title="Role tidak muncul saat assign user">
    **Solusi:**

    * Pastikan role sudah berhasil disimpan
    * Refresh halaman atau reload sistem
  </Accordion>

  <Accordion title="Tidak bisa mengubah role user">
    **Solusi:**

    * Periksa apakah Anda memiliki permission yang cukup
    * Pastikan role tujuan tidak dibatasi oleh sistem
  </Accordion>

  <Accordion title="User tidak bisa mengakses fitur tertentu">
    **Kemungkinan penyebab:**

    * Permission belum diberikan pada role
    * Role yang digunakan tidak sesuai

    **Solusi:**

    * Periksa dan tambahkan permission yang diperlukan
    * Validasi role pengguna
  </Accordion>

  <Accordion title="Role tidak memiliki akses meski sudah dikonfigurasi">
    **Solusi:**

    * Pastikan permission sudah dikonfigurasi dan tersimpan
    * Periksa apakah ada override dari konfigurasi lain
  </Accordion>

  <Accordion title="Aksi ditolak meskipun tombol tersedia">
    **Penjelasan:**
    UI menampilkan tombol, tetapi permission di backend tidak mengizinkan aksi tersebut.

    **Solusi:**

    * Periksa konfigurasi permission di sistem
    * Pastikan aksi yang dipilih sudah diaktifkan
  </Accordion>

  <Accordion title="Perubahan permission tidak terlihat setelah disimpan">
    **Kemungkinan penyebab:**

    * Cache browser belum diperbarui
    * Sinkronisasi session belum terjadi

    **Solusi:**

    * Refresh halaman
    * Logout dan login kembali
  </Accordion>

  <Accordion title="Semua user dalam role terkena dampak perubahan permission">
    **Penjelasan:**
    Permission berlaku global untuk seluruh anggota role.

    **Solusi:**

    * Buat role baru jika membutuhkan variasi akses
    * Hindari perubahan langsung pada role yang digunakan banyak user
  </Accordion>
</AccordionGroup>

### Menghapus Role

<AccordionGroup>
  <Accordion title="Tidak bisa menghapus role">
    **Kemungkinan penyebab:**

    * Role masih digunakan oleh satu atau lebih pengguna
    * Role termasuk role default sistem

    **Solusi:**

    * Pindahkan semua pengguna ke role lain melalui fitur **Assign Role**
    * Pastikan role bukan bagian dari role bawaan sistem
  </Accordion>

  <Accordion title="Aksi hapus tidak tersedia">
    **Kemungkinan penyebab:**

    * Tidak memiliki permission untuk menghapus role
    * Role dilindungi oleh sistem (protected role)

    **Solusi:**

    * Gunakan akun dengan akses lebih tinggi (misalnya Admin)
    * Periksa kebijakan sistem terkait role yang tidak bisa dimodifikasi
  </Accordion>

  <Accordion title="Role tidak muncul dalam daftar">
    **Kemungkinan penyebab:**

    * Data belum ter-refresh
    * Role sudah dihapus sebelumnya

    **Solusi:**

    * Refresh halaman
    * Periksa kembali dengan filter atau pencarian
  </Accordion>

  <Accordion title="Terjadi kesalahan saat konfirmasi hapus">
    **Kemungkinan penyebab:**

    * Gangguan koneksi
    * Validasi sistem gagal

    **Solusi:**

    * Coba ulangi proses beberapa saat kemudian
    * Pastikan koneksi stabil
  </Accordion>
</AccordionGroup>

***

## 6. App Dashboard - Kalibrasi Sensor

### Pengertian & Konsep Dasar

<AccordionGroup>
  <Accordion title="Mengapa kalibrasi diperlukan?">
    Setiap sensor memiliki karakteristik pembacaan yang bisa sedikit berbeda dari nilai sebenarnya di lapangan. Faktor seperti usia sensor, kondisi lingkungan, dan drift elektronik bisa menyebabkan pembacaan menyimpang. Kalibrasi diperlukan untuk mengoreksi penyimpangan ini agar data yang ditampilkan di dashboard sesuai dengan kondisi aktual.

    **Tanpa kalibrasi:** sistem menggunakan Raw Data (nilai mentah sensor) langsung.
    **Dengan kalibrasi:** sistem menggunakan Synthetic Data (nilai hasil koreksi) yang lebih akurat.
  </Accordion>

  <Accordion title="Metode kalibrasi apa saja yang didukung?">
    Mertani mendukung empat metode kalibrasi:

    | Metode                 | Kapan Digunakan                                     | Contoh                             |
    | ---------------------- | --------------------------------------------------- | ---------------------------------- |
    | **Berbasis Rumus**     | Koreksi sederhana seperti offset atau konversi unit | `x - 212`, `x / 100`               |
    | **Berbasis Parameter** | Menggunakan sensor lain sebagai referensi           | `[RYG8-flVel] * [RYG8-flLev]`      |
    | **Berbasis Dataset**   | Hubungan non-linear antara dua parameter            | `DATASET("kurva", x, "output")`    |
    | **Berbasis Kondisi**   | Range nilai dengan karakteristik berbeda            | `(x < 50) ? (rumus_1) : (rumus_2)` |

    Lihat penjelasan lengkap di dokumentasi [Kalibrasi Sensor](/docs/dashboard/configuration/kalibrasi-sensor).
  </Accordion>

  <Accordion title="Bagaimana dataset digunakan dalam kalibrasi?">
    Dataset berfungsi sebagai tabel lookup. Sistem mencocokkan nilai input dari sensor ke kolom pertama dataset, lalu mengembalikan nilai dari kolom output yang ditentukan. Penggunaan dalam rumus: `DATASET("slug_dataset", nilai_input, "kolom_output")`.

    **Penting:**

    * Kolom pertama dataset adalah kolom referensi (input)
    * Baris pertama harus berisi header
    * Nilai input harus berada dalam range dataset
    * Dataset hanya berlaku untuk data baru setelah konfigurasi disimpan

    Lihat panduan lengkap di [Manajemen Dataset](/docs/dashboard/devices/dataset-calibration).
  </Accordion>

  <Accordion title="Apa itu virtual sensor dan bagaimana cara membuatnya?">
    Virtual sensor dibuat melalui fitur kalibrasi berbasis parameter. Caranya, gunakan sensor lain dalam device yang sama sebagai bagian dari rumus kalibrasi. Misalnya, untuk membuat sensor debit dari water level dan velocity:

    ```
    [RYG8-flVel] * [RYG8-flLev] / 100
    ```

    **Catatan penting:**

    * Virtual sensor tidak bisa digunakan kembali sebagai referensi untuk kalibrasi sensor lain
    * Hasil kalibrasi hanya berlaku untuk data baru, bukan data historis
  </Accordion>
</AccordionGroup>

### Konfigurasi Rumus Kalibrasi

<AccordionGroup>
  <Accordion title="Hasil kalibrasi tidak berubah setelah disimpan">
    **Kemungkinan penyebab:**

    * Kalibrasi hanya berlaku untuk data baru, bukan data historis
    * Tidak ada data baru yang masuk setelah kalibrasi disimpan
    * Rumus tidak valid sehingga tidak dieksekusi

    **Solusi:**

    * Pastikan device mengirim data terbaru
    * Cek timestamp data terakhir
    * Periksa kembali rumus (hindari typo atau format salah)
  </Accordion>

  <Accordion title="Nilai hasil kalibrasi menjadi 0 atau null">
    **Kemungkinan penyebab:**

    * Rumus menghasilkan nilai tidak valid (misalnya pembagian dengan 0)
    * Referensi parameter `[parameter]` tidak ditemukan
    * Dataset tidak mengembalikan nilai (lookup gagal)

    **Solusi:**

    * Validasi rumus secara manual
    * Pastikan ID sensor atau parameter benar
    * Pastikan dataset memiliki range nilai yang sesuai dengan input
  </Accordion>

  <Accordion title="Muncul error saat input rumus kalibrasi">
    **Kemungkinan penyebab:**

    * Salah syntax (contoh: `x +` tanpa nilai lanjutan)
    * Salah operator (misalnya `^` seharusnya `**`)
    * Fungsi tidak didukung atau salah format

    **Solusi:**

    * Gunakan operator yang didukung: `+ - * / **`
    * Pastikan semua tanda kurung seimbang
    * Gunakan fungsi sesuai dokumentasi (contoh: `sqrt(x)`)
  </Accordion>

  <Accordion title="Parameter lain tidak bisa dipanggil dengan [parameter]">
    **Kemungkinan penyebab:**

    * ID sensor salah atau tidak ada di device yang sama
    * Penulisan tidak sesuai format (`[id_sensor]`)
    * Sensor belum memiliki data

    **Solusi:**

    * Pastikan ID sensor benar (case-sensitive)
    * Gunakan fitur `=` untuk memilih parameter secara otomatis
    * Pastikan sensor referensi aktif dan mengirim data
  </Accordion>

  <Accordion title="Hasil kalibrasi terlihat tidak masuk akal (terlalu besar/kecil)">
    **Kemungkinan penyebab:**

    * Salah konversi unit (misalnya cm ke m)
    * Kesalahan urutan operasi dalam rumus
    * Referensi parameter yang tidak sesuai

    **Solusi:**

    * Validasi dengan perhitungan manual
    * Cek kembali unit sebelum dan sesudah kalibrasi
    * Gunakan nilai sample untuk testing
  </Accordion>

  <Accordion title="Kenapa perubahan units tidak berpengaruh pada nilai?">
    **Penjelasan:**
    Units hanya label tampilan dan tidak mengubah nilai secara otomatis.

    **Solusi:**

    * Ubah rumus kalibrasi sesuai unit baru
    * Contoh: cm → m harus menggunakan `x/100`, lalu update unit menjadi meter
  </Accordion>

  <Accordion title="Bagaimana cara memastikan rumus kalibrasi sudah benar?">
    **Best practice:**

    * Uji dengan sample data manual
    * Gunakan nilai sederhana terlebih dahulu (misal `x/100`)
    * Bandingkan hasil dengan perhitungan di luar sistem
    * Bangun rumus secara bertahap, hindari langsung menggunakan rumus kompleks
  </Accordion>
</AccordionGroup>

### Virtual Parameter (Sensor Turunan)

<AccordionGroup>
  <Accordion title="Sensor turunan (virtual parameter) tidak muncul di sistem">
    **Kemungkinan penyebab:**

    * Kalibrasi belum disimpan
    * Parameter tidak digunakan di dashboard
    * Tidak ada data masuk

    **Solusi:**

    * Klik Simpan setelah input rumus
    * Pastikan parameter digunakan di tampilan
    * Tunggu data baru masuk
  </Accordion>

  <Accordion title="Apakah virtual sensor dapat digunakan sebagai faktor kalibrasi?">
    **Tidak.** Parameter turunan tidak dapat digunakan sebagai faktor kalibrasi kembali.

    **Tips:**

    * Hindari menggunakan parameter turunan sebagai faktor kalibrasi
    * Lakukan kalibrasi yang sama untuk mendapat nilai dari parameter turunan, kemudian kalibrasikan perhitungan tersebut

    **Contoh yang salah:**

    ```
    Water level:  120 - x
    Debit (virtual sensor):  [water_level] * [velocity]
    Virtual sensor x:  [debit] * 10  ← TIDAK BOLEH, akan error
    ```
  </Accordion>

  <Accordion title="Grafik dan dashboard tidak sesuai dengan raw data">
    **Ini bukan error.**

    Sistem menggunakan **Sintetik Data** (hasil kalibrasi) untuk dashboard, grafik, dan laporan. Raw Data hanya sebagai referensi.

    **Solusi:**

    * Bandingkan raw vs sintetik melalui fitur unduh data untuk validasi
    * Pastikan rumus kalibrasi sudah benar
  </Accordion>
</AccordionGroup>

***

## 7. App Dashboard - Dataset

### Format & Struktur File

<AccordionGroup>
  <Accordion title="Apakah format file dataset harus CSV?">
    **Ya.** Sistem hanya menerima file dalam format **CSV (Comma-Separated Values)**.

    * Pastikan file berekstensi `.csv`
    * Jika dari Excel, gunakan **Export → CSV**
  </Accordion>

  <Accordion title="Apakah baris pertama harus header?">
    **Ya, wajib.** Header digunakan sebagai identifier kolom output dalam fungsi `DATASET()`.

    Contoh yang benar:

    ```csv theme={null}
    water_level,area
    4.0,40.4
    3.9,39.0
    ```
  </Accordion>

  <Accordion title="Apakah kolom pertama wajib sebagai referensi?">
    **Ya.** Sistem akan mencocokkan nilai sensor ke kolom pertama. Kolom lain hanya digunakan sebagai output.

    Jika kolom pertama tidak sesuai, lookup akan menghasilkan nilai yang tidak akurat atau kosong.
  </Accordion>

  <Accordion title="Apakah nilai pada kolom referensi harus berurutan?">
    **Sangat disarankan.** Data yang terurut mempermudah proses lookup dan mengurangi risiko hasil tidak akurat.

    * Urutkan data secara konsisten (ascending atau descending)
  </Accordion>

  <Accordion title="Apakah boleh ada nilai duplikat pada kolom referensi?">
    **Tidak disarankan.** Duplikasi menyebabkan lookup menjadi ambigu dan output tidak konsisten.

    * Pastikan setiap nilai referensi unik
  </Accordion>

  <Accordion title="Apakah satu dataset bisa memiliki banyak kolom output?">
    **Ya.** Contoh:

    ```csv theme={null}
    water_level,area,volume,flow
    ```

    Penggunaan dalam rumus:

    * `DATASET("slug", x, "area")`
    * `DATASET("slug", x, "volume")`
  </Accordion>

  <Accordion title="Apakah dataset mendukung interpolasi otomatis?">
    **Tidak selalu.** Sistem melakukan lookup berdasarkan nilai yang tersedia. Jika nilai tidak ditemukan secara langsung, hasil bisa kosong atau tidak akurat.

    **Solusi:**

    * Gunakan interval data yang lebih rapat
    * Tambahkan nilai di antara (intermediate values) jika diperlukan
  </Accordion>

  <Accordion title="Apakah perubahan dataset mempengaruhi data lama?">
    **Tidak.** Dataset hanya berlaku untuk data setelah konfigurasi disimpan. Data historis tidak akan berubah.
  </Accordion>
</AccordionGroup>

### Troubleshooting Dataset

<AccordionGroup>
  <Accordion title="Dataset tidak terbaca setelah upload">
    **Kemungkinan penyebab:**

    * Format file bukan CSV
    * Tidak ada header di baris pertama
    * Struktur kolom tidak sesuai
    * File corrupt atau encoding tidak valid

    **Solusi:**

    * Pastikan format CSV valid dengan delimiter koma (`,`)
    * Gunakan encoding UTF-8
    * Pastikan file dapat dibuka di editor teks
  </Accordion>

  <Accordion title="Upload dataset gagal atau error">
    **Kemungkinan penyebab:**

    * File terlalu besar
    * Header kosong atau duplikat
    * Encoding tidak standar (bukan UTF-8)

    **Solusi:**

    * Gunakan CSV dengan encoding UTF-8
    * Pastikan header unik dan tidak kosong
    * Periksa batas ukuran file yang diizinkan
  </Accordion>

  <Accordion title="Hasil DATASET() kosong atau null">
    **Kemungkinan penyebab:**

    * Nilai input tidak ditemukan dalam kolom referensi
    * Slug dataset salah
    * Nama kolom output tidak sesuai header

    **Solusi:**

    * Pastikan nilai input berada dalam range dataset
    * Periksa slug dataset
    * Gunakan nama kolom output sesuai header (case-sensitive)
  </Accordion>

  <Accordion title="Checklist sebelum menggunakan dataset">
    * [ ] Kolom pertama = referensi (input)
    * [ ] Baris pertama = header
    * [ ] Tidak ada nilai kosong di kolom referensi
    * [ ] Range data mencakup nilai sensor
    * [ ] Tidak ada duplikasi nilai referensi
    * [ ] Uji dengan beberapa nilai sample dan bandingkan hasil manual dengan hasil sistem
  </Accordion>
</AccordionGroup>

***

## 8. Status Perangkat (Device Status)

### Logika Penentuan Status

<AccordionGroup>
  <Accordion title="Bagaimana sistem menentukan status device?">
    Sistem menentukan status berdasarkan urutan prioritas berikut:

    1. **Maintenance** -- jika device sedang ditandai maintenance oleh admin, status tetap maintenance meskipun device tidak mengirim data.
    2. **Offline** -- jika tidak ada data masuk selama 24 jam atau lebih, status berubah menjadi offline.
    3. **Delay** -- jika data masih masuk tetapi terlambat dari jadwal normal (selisih waktu > 3x interval pengiriman), status menjadi delay.
    4. **Online** -- jika tidak ada kondisi di atas, device dianggap online.

    Status ditentukan secara otomatis oleh sistem, kecuali status maintenance yang diatur manual oleh administrator.
  </Accordion>

  <Accordion title="Apa itu Warning Detection?">
    **Warning Detection** adalah fitur yang secara otomatis memantau nilai sensor dan memberikan peringatan ketika nilai melampaui ambang batas (threshold) yang telah dikonfigurasi. Warning Detection bekerja berdasarkan level status yang diatur per instansi melalui menu **Pengaturan Level Status**.

    **Kategori yang didukung:**

    * **ARR** (Automatic Rainfall Recorder): intensitas curah hujan per jam dan akumulasi harian
    * **AWLR** (Automatic Water Level Recorder): tinggi muka air dengan pola naik atau turun
    * **WQMS** (Water Quality Monitoring System): kualitas air per parameter
    * **AQMS** (Air Quality Monitoring System): kualitas udara berdasarkan standar ISPU

    Peringatan hanya muncul jika threshold sudah dikonfigurasi. Tanpa konfigurasi, sistem tidak akan menghasilkan peringatan apapun.
  </Accordion>

  <Accordion title="Bagaimana cara mengatur level status untuk device?">
    Buka menu **Pengaturan > Level Status** di dashboard. Pilih tab kategori device (ARR, AWLR, WQMS, atau AQMS), lalu klik badge status pada device yang ingin dikonfigurasi.

    **Yang perlu diatur:**

    * Nama level (misalnya: Normal, Waspada, Siaga, Awas)
    * Warna badge untuk setiap level
    * Range nilai (Dari dan Sampai) untuk setiap level
    * Aktifkan **Limit** pada level ekstrem untuk menangani nilai di luar batas normal

    Pastikan tidak ada overlap antar range untuk menghindari status yang tidak konsisten. Lihat dokumentasi [Pengaturan Level Status](/docs/dashboard/configuration/level-status) untuk panduan lengkap.
  </Accordion>

  <Accordion title="Mengapa peringatan warning tidak muncul meski device sudah offline?">
    Peringatan warning dan status device adalah dua sistem yang berbeda. Warning Detection hanya aktif jika **threshold sudah dikonfigurasi** melalui menu Pengaturan Level Status. Jika threshold belum diatur, sistem tidak akan menghasilkan peringatan apapun meskipun device dalam kondisi offline.

    **Solusi:**

    * Pastikan threshold sudah dikonfigurasi di menu **Pengaturan Level Status**
    * Untuk notifikasi offline, pastikan izin notifikasi aplikasi sudah aktif di ponsel
  </Accordion>
</AccordionGroup>

<AccordionGroup>
  <Accordion title="🔴 Device Offline">
    #### Kemungkinan Penyebab

    * Device mati atau kehabisan daya
    * Gangguan jaringan
    * SIM card tidak aktif
    * Modem bermasalah

    #### Langkah Pengecekan

    1. Pastikan device dalam kondisi menyala
    2. Periksa sumber daya / baterai
    3. Verifikasi koneksi internet
    4. Cek kualitas sinyal modem
    5. Restart device apabila diperlukan

    > Jika device tetap offline lebih dari 24 jam, lakukan pengecekan lapangan.
  </Accordion>

  <Accordion title="🟡 Device Delay">
    #### Kemungkinan Penyebab

    * Koneksi jaringan tidak stabil
    * Server mengalami latency
    * Interval pengiriman terlalu kecil
    * Gangguan modem sementara

    #### Langkah Pengecekan

    1. Periksa kualitas sinyal
    2. Pastikan koneksi internet stabil
    3. Verifikasi interval pengiriman device
    4. Monitor apakah status berubah menjadi offline
  </Accordion>

  <Accordion title="⚪ Device Maintenance">
    Status maintenance biasanya diatur manual oleh admin atau teknisi.

    #### Rekomendasi

    * Dokumentasikan aktivitas maintenance
    * Nonaktifkan alarm sementara jika diperlukan
    * Pastikan status dikembalikan setelah maintenance selesai
  </Accordion>
</AccordionGroup>

***

## 9. Mobile Apps - Pertanyaan Umum

### Login & Autentikasi

<AccordionGroup>
  <Accordion title="Apa perbedaan login dengan Key dan tanpa Key?">
    Aplikasi Mertani mendukung dua metode login:

    |                    | Login dengan Key      | Login tanpa Key       |
    | ------------------ | --------------------- | --------------------- |
    | **Untuk**          | Pengguna on-premise   | Pengguna SaaS (cloud) |
    | **Key diperlukan** | ✅ Ya                  | ❌ Tidak               |
    | **Server**         | Server milik instansi | Server Mertani        |

    * **Login dengan Key** -> masukkan key yang diberikan tim Mertani, lalu lanjutkan dengan username dan password.
    * **Login tanpa Key** -> klik tombol **Lewati** pada layar awal, lalu masukkan username dan password langsung.
  </Accordion>

  <Accordion title="Di mana saya bisa mendapatkan key untuk login on-premise?">
    Key diterbitkan oleh tim Mertani pada saat proses onboarding instansi untuk layanan on-premise. Jika belum menerima key atau key hilang, hubungi tim support Mertani melalui halaman [Support](/docs/home/support).
  </Accordion>

  <Accordion title="Apakah satu akun bisa digunakan di beberapa perangkat sekaligus?">
    Ya. Akun Mertani dapat digunakan pada lebih dari satu perangkat secara bersamaan. Namun disarankan untuk tidak berbagi akun dengan pengguna lain demi keamanan data, gunakan fitur undangan pengguna untuk membuat akun terpisah per individu.
  </Accordion>
</AccordionGroup>

### Beranda & Peta Kontrol

<AccordionGroup>
  <Accordion title="Apa yang ditampilkan di halaman beranda aplikasi?">
    Halaman beranda menampilkan **Peta Kontrol**, peta interaktif yang menunjukkan sebaran lokasi seluruh perangkat IoT Anda. Fitur yang tersedia di beranda:

    * Titik lokasi setiap device beserta status operasionalnya
    * Ringkasan data sensor terkini (*last update*) saat titik device diketuk
    * Tabel pemantauan semua perangkat
    * Filter layer untuk menyaring tampilan berdasarkan kelompok device
  </Accordion>

  <Accordion title="Apa saja jenis notifikasi yang tersedia di aplikasi?">
    Halaman **Notifikasi** di aplikasi mencakup tiga jenis informasi:

    1. **Status Device** -> pemberitahuan saat device berubah status (online, offline, delay)
    2. **Warning Detection** -> peringatan ketika nilai sensor melampaui batas ambang yang telah dikonfigurasi
    3. **Berita & Artikel** -> informasi dan artikel terbaru dari tim Mertani

    Notifikasi warning hanya aktif jika threshold sudah dikonfigurasi terlebih dahulu di dashboard.
  </Accordion>
</AccordionGroup>

### Device & Sensor

<AccordionGroup>
  <Accordion title="Bagaimana cara memantau data sensor secara real-time dari aplikasi?">
    Akses **Detail Monitoring** melalui langkah berikut:

    1. Buka menu **Device** → ketuk kartu device
    2. Tampilan awal menampilkan kartu *last update* setiap sensor
    3. Ketuk sensor yang ingin dipantau
    4. Data hari ini ditampilkan secara default dalam grafik dan tabel
    5. Gunakan filter rentang waktu untuk melihat data historis
  </Accordion>

  <Accordion title="Bagaimana cara membandingkan data dari dua device berbeda?">
    Gunakan fitur **Perbandingan Device**:

    1. Di halaman Device, ketuk menu **Bandingkan**
    2. Ketuk tombol **\[+]** untuk menambahkan device
    3. Pilih device dan sensor yang ingin dibandingkan
    4. Ketuk **Pilih** -> data ditampilkan dalam grafik dan tabel berdampingan
    5. Atur rentang waktu dan grouping sesuai kebutuhan
  </Accordion>

  <Accordion title="Informasi apa saja yang bisa diedit pada device melalui aplikasi?">
    Melalui menu **Edit Device** (geser kartu device ke kanan → pilih Edit Device), Anda dapat mengubah:

    * Nama device
    * Tipe device
    * Spesifikasi
    * Deskripsi
  </Accordion>

  <Accordion title="Informasi apa saja yang bisa diedit pada sensor melalui aplikasi?">
    Melalui **Edit Sensor** (tekan tahan kartu sensor → pilih Edit Sensor), Anda dapat mengubah:

    * Nama sensor
    * Tipe sensor
    * Satuan pengukuran
    * Jumlah angka di belakang koma (presisi desimal)
    * Deskripsi sensor
  </Accordion>

  <Accordion title="Bagaimana cara menambahkan foto dokumentasi lokasi perangkat?">
    1. Buka halaman **Detail Device** (ketuk device → ketuk ikon panah ← di samping nama device)
    2. Gulir ke bagian **Dokumentasi Foto**
    3. Ketuk **Tambah Gambar** → pilih dari galeri atau ambil foto baru
    4. Ketuk **Upload** → **Simpan**
  </Accordion>
</AccordionGroup>

### Monitoring & Data

<AccordionGroup>
  <Accordion title="Apa perbedaan Realtime dan Live Stream di aplikasi?">
    |                      | Realtime                                             | Live Stream                              |
    | -------------------- | ---------------------------------------------------- | ---------------------------------------- |
    | **Frekuensi update** | Mengikuti interval device (misalnya setiap 10 menit) | Setiap 1-5 detik                         |
    | **Data disimpan?**   | Ya, tersimpan di database                            | Tidak, hanya ditampilkan langsung        |
    | **Kebutuhan device** | Semua perangkat Mertani                              | Hanya perangkat yang mendukung streaming |
    | **Cocok untuk**      | Monitoring rutin, analisis tren                      | Pengujian sensor, observasi cepat        |

    **Realtime** memperbarui grafik dan tabel secara otomatis setiap kali device mengirim data baru. Aktifkan toggle **Realtime** di halaman Detail Pemantauan.

    **Live Stream** menampilkan data sensor dengan pembaruan sangat cepat, cocok untuk pengujian sensor di lapangan. Menu ini hanya muncul jika device mendukung fitur streaming.

    Lihat dokumentasi [Realtime & Live Stream Data](/docs/dashboard/monitoring/realtime-stream) untuk informasi lebih lanjut.
  </Accordion>

  <Accordion title="Bagaimana cara mengunduh data dari dashboard?">
    Tiga cara mengunduh data di dashboard:

    | Fitur                  | Cara Akses                                          | Kegunaan                                                             |
    | ---------------------- | --------------------------------------------------- | -------------------------------------------------------------------- |
    | **Export Data**        | Manajemen Device > More Action > Unduh Data         | Unduh data raw + synthetic dengan pilihan grouping dan rentang waktu |
    | **Laporan Pemantauan** | Manajemen Device > More Action > Laporan Pemantauan | Laporan terstruktur untuk parameter Rainfall dan Water Level         |
    | **Komparasi Device**   | Manajemen Device > Komparasi > Unduh                | Unduh hasil perbandingan data dari beberapa device                   |

    **Yang perlu diketahui:**

    * Export Data menyertakan kolom Raw dan Synthetic untuk setiap sensor
    * Laporan Pemantauan hanya menggunakan Synthetic Data (hasil kalibrasi)
    * Gunakan grouping yang sesuai dengan rentang waktu untuk hasil yang optimal

    Lihat dokumentasi [Export Data](/docs/dashboard/monitoring/export-data) dan [Laporan Pemantauan](/docs/dashboard/monitoring/laporan-pemantauan) untuk panduan lengkap.
  </Accordion>

  <Accordion title="Bagaimana cara membandingkan data dari beberapa device?">
    Gunakan fitur **Komparasi Device** di dashboard web:

    1. Buka menu **Manajemen Device**, lalu klik **Komparasi**
    2. Klik **+** untuk menambahkan device (maksimal 5 device)
    3. Pilih sensor yang ingin dibandingkan per device
    4. Atur rentang waktu dan grouping data
    5. Lihat hasilnya dalam format grafik atau tabel

    **Tips:**

    * Fokus pada sensor yang relevan agar grafik tetap mudah dibaca
    * Sesuaikan grouping dengan rentang waktu (gunakan Per Hari untuk data 1 bulan)
    * Gunakan tombol **Unduh** untuk mengekspor hasil komparasi ke format Excel

    Lihat dokumentasi [Komparasi Device](/docs/dashboard/monitoring/compare-device) untuk panduan lengkap.
  </Accordion>
</AccordionGroup>

### Unduh & Export Data

<AccordionGroup>
  <Accordion title="Apa perbedaan Export Data, Unduh Laporan, dan Unduh Data Manual?">
    | Fitur                 | Akses                                 | Kegunaan                                                                   |
    | --------------------- | ------------------------------------- | -------------------------------------------------------------------------- |
    | **Export Data**       | Geser kartu device → Unduh Data       | Unduh data history sensor mentah dengan pilihan grouping dan rentang waktu |
    | **Unduh Laporan**     | Menu Unduh → Unduh Laporan Pemantauan | Laporan terstruktur khusus parameter Rainfall dan Water Level              |
    | **Unduh Data Manual** | Menu Unduh → Unduh Data by Bluetooth  | Ambil data dari device tanpa jaringan via Bluetooth (Android only)         |
  </Accordion>

  <Accordion title="Parameter apa saja yang tersedia untuk Unduh Laporan Pemantauan?">
    Saat ini tersedia dua jenis laporan:

    | Jenis Laporan                     | Parameter                                                      |
    | --------------------------------- | -------------------------------------------------------------- |
    | **Curah Hujan (Rainfall)**        | Intensitas per jam/hari, jumlah, rerata, nilai maks, jam hujan |
    | **Tinggi Muka Air (Water Level)** | Tinggi muka air, debit, rerata, nilai maks & min               |
  </Accordion>

  <Accordion title="Apakah fitur Unduh Data Manual via Bluetooth tersedia di iOS?">
    **Tidak.** Fitur unduh data manual via Bluetooth **hanya tersedia pada aplikasi Android**. Pengguna iOS tidak dapat menggunakan fitur ini.
  </Accordion>

  <Accordion title="Setelah mengunduh data via Bluetooth, bagaimana cara mengunggahnya ke sistem?">
    1. Pastikan ponsel sudah mendapatkan jaringan internet
    2. Buka menu **Unduh Data by Bluetooth**
    3. Pilih tab **Hasil Unduhan**
    4. Pilih data yang ingin diunggah → ketuk **Unggah Data**
    5. Tunggu hingga proses selesai
    6. Verifikasi data di halaman **Detail Monitoring**
  </Accordion>
</AccordionGroup>

### Pengaturan Aplikasi

<AccordionGroup>
  <Accordion title="Apa saja yang bisa diubah di menu Pengaturan?">
    Menu **Pengaturan** mencakup tiga sub-menu:

    | Sub-menu       | Yang Bisa Diubah                                                   |
    | -------------- | ------------------------------------------------------------------ |
    | **Profil**     | Nama, foto profil, nomor HP, alamat                                |
    | **Kata Sandi** | Password akun (memerlukan konfirmasi password lama)                |
    | **Instansi**   | Nama instansi, logo, email, nomor HP, komoditas, deskripsi, alamat |

    Selain itu, halaman Pengaturan juga menampilkan akses ke bantuan (WhatsApp/email), saran & masukan, live chat, serta syarat dan ketentuan.
  </Accordion>

  <Accordion title="Apakah mengubah profil pengguna mempengaruhi akun pengguna lain di instansi?">
    **Tidak.** Perubahan pada **Profil** hanya berlaku untuk akun pengguna yang sedang login. Akun pengguna lain dalam instansi yang sama tidak terpengaruh.
    Perubahan pada **Instansi** berlaku secara global dan akan terlihat oleh seluruh pengguna dalam instansi tersebut.
  </Accordion>

  <Accordion title="Siapa yang bisa mengubah data instansi?">
    Pembaruan data instansi hanya dapat dilakukan oleh pengguna dengan **hak akses admin** atau role yang memiliki izin manajemen instansi. Jika menu Instansi tidak terlihat, hubungi administrator instansi Anda untuk mendapatkan akses yang sesuai.
  </Accordion>
</AccordionGroup>

## 10. Mobile Apps - Troubleshooting

### Login & Akses Aplikasi

<AccordionGroup>
  <Accordion title="Tidak bisa login - muncul pesan error">
    **Kemungkinan penyebab:**

    * Username atau password salah
    * Key tidak valid (untuk pengguna on-premise)
    * Koneksi internet tidak stabil
    * Akun belum diaktivasi
      **Solusi:**
    * Periksa kembali username dan password (perhatikan huruf kapital)
    * Untuk login dengan key, pastikan key yang dimasukkan sesuai dengan yang diberikan tim Mertani
    * Pastikan koneksi internet aktif sebelum login
    * Jika akun baru, pastikan sudah membuka link undangan dari email
    * Gunakan fitur **Lupa Kata Sandi** jika tidak ingat password
  </Accordion>

  <Accordion title="Tombol Lewati tidak muncul di halaman login">
    **Kemungkinan penyebab:**

    * Versi aplikasi belum diperbarui
    * Cache aplikasi bermasalah
      **Solusi:**
    * Perbarui aplikasi ke versi terbaru melalui Play Store atau App Store
    * Coba hapus cache aplikasi melalui pengaturan ponsel, lalu buka kembali
    * Uninstall dan install ulang aplikasi jika masalah berlanjut
  </Accordion>

  <Accordion title="Aplikasi tiba-tiba keluar sendiri (force close) saat dibuka">
    **Kemungkinan penyebab:**

    * Versi aplikasi tidak kompatibel dengan OS ponsel
    * Memori ponsel penuh
    * Data cache aplikasi corrupt
      **Solusi:**
    * Perbarui aplikasi ke versi terbaru
    * Kosongkan ruang penyimpanan ponsel
    * Hapus cache aplikasi melalui Pengaturan → Aplikasi → Mertani → Hapus Cache
    * Restart ponsel, lalu buka kembali aplikasi
  </Accordion>

  <Accordion title="Setelah update aplikasi, harus login ulang">
    **Ini adalah perilaku normal.** Beberapa pembaruan aplikasi mengharuskan sesi login diperbarui demi keamanan. Lakukan login ulang dengan username dan password seperti biasa.
  </Accordion>
</AccordionGroup>

### Peta & Beranda

<AccordionGroup>
  <Accordion title="Peta tidak menampilkan titik device sama sekali">
    **Kemungkinan penyebab:**

    * Koneksi internet tidak stabil saat memuat peta
    * Akun tidak memiliki akses ke device manapun
    * Data lokasi device belum dikonfigurasi (koordinat GPS kosong)
      **Solusi:**
    * Pastikan koneksi internet aktif dan stabil
    * Tutup dan buka kembali aplikasi untuk memuat ulang peta
    * Periksa apakah akun Anda memiliki akses device, hubungi administrator instansi jika perlu
    * Pastikan device sudah memiliki data koordinat GPS yang valid di sistem
  </Accordion>

  <Accordion title="Titik device di peta tidak sesuai lokasi sebenarnya">
    **Kemungkinan penyebab:**

    * Koordinat GPS device salah saat konfigurasi awal
    * Data lokasi belum diperbarui setelah device dipindah
      **Solusi:**
    * Perbarui koordinat device melalui menu **Edit Device** di dashboard web
    * Pastikan format koordinat sudah benar (latitude, longitude dalam desimal)
  </Accordion>

  <Accordion title="Notifikasi tidak muncul meski device sudah offline">
    **Kemungkinan penyebab:**

    * Izin notifikasi aplikasi belum diaktifkan di ponsel
    * Device baru saja berubah status (sistem membutuhkan beberapa saat untuk memproses)
    * Threshold warning belum dikonfigurasi
      **Solusi:**
    * Periksa izin notifikasi: Pengaturan Ponsel → Aplikasi → Mertani → Notifikasi → Aktifkan
    * Pastikan mode **Do Not Disturb** tidak aktif
    * Untuk warning detection, pastikan threshold sudah dikonfigurasi di menu [Pengaturan Level Status](/docs/dashboard/configuration/level-status) pada dashboard
  </Accordion>
</AccordionGroup>

### Monitoring Data Sensor

<AccordionGroup>
  <Accordion title="Data sensor tidak muncul di halaman Detail Monitoring">
    **Kemungkinan penyebab:**

    * Device belum pernah mengirim data
    * Rentang waktu filter tidak mencakup data yang ada
    * Koneksi internet terputus saat memuat data
      **Solusi:**
    * Pastikan device aktif dan sudah pernah mengirim data ke server
    * Ubah filter rentang waktu, coba pilih rentang yang lebih lebar
    * Periksa koneksi internet, lalu tarik ke bawah (*pull to refresh*) untuk memuat ulang
    * Cek status device di halaman Beranda. Jika offline, data mungkin memang belum masuk
  </Accordion>

  <Accordion title="Realtime tidak memperbarui data meski device sudah online">
    **Kemungkinan penyebab:**

    * Toggle Realtime belum diaktifkan di halaman Detail Pemantauan
    * Interval pengiriman device cukup panjang (misalnya 1 jam), sehingga update tidak langsung terlihat
    * Koneksi internet tidak stabil
      **Solusi:**
    * Pastikan toggle **Realtime** di pojok kanan atas halaman sudah aktif
    * Perhatikan interval pengiriman device. Jika interval 1 jam, grafik baru diperbarui setiap 1 jam
    * Refresh halaman atau tarik ke bawah untuk memuat ulang data
  </Accordion>

  <Accordion title="Menu Live Stream Data tidak muncul">
    **Penjelasan:**
    Menu Live Stream Data hanya muncul pada perangkat yang mendukung fitur streaming. Jika menu ini tidak terlihat, berarti perangkat tersebut belum mendukung fitur ini.

    **Yang perlu diketahui:**

    * Live Stream menampilkan data dengan pembaruan setiap 1-5 detik
    * Data pada Live Stream **tidak disimpan ke database**
    * Gunakan fitur Realtime untuk monitoring data yang tersimpan

    Untuk kebutuhan monitoring biasa, gunakan fitur **Realtime** yang tersedia di semua perangkat.
  </Accordion>

  <Accordion title="Grafik sensor tampil kosong padahal device online">
    **Kemungkinan penyebab:**

    * Filter tanggal/waktu yang dipilih tidak memiliki data
    * Sensor baru saja ditambahkan dan belum ada data historis
      **Solusi:**
    * Coba ubah filter ke **Hari Ini** sebagai default awal
    * Jika sensor baru, tunggu minimal satu siklus pengiriman data
    * Lakukan *pull to refresh* di halaman untuk memuat ulang data
  </Accordion>

  <Accordion title="Nilai data sensor terlihat tidak wajar (terlalu besar, terlalu kecil, atau nol)">
    **Kemungkinan penyebab:**

    * Sensor memerlukan kalibrasi
    * Rumus kalibrasi yang terkonfigurasi tidak tepat
    * Sensor rusak atau tidak terpasang dengan benar di lapangan
      **Solusi:**
    * Lakukan kalibrasi sensor melalui menu **Kalibrasi Sensor** (tekan tahan kartu sensor → pilih Kalibrasi Sensor)
    * Periksa konfigurasi rumus kalibrasi di dashboard, lihat [Kalibrasi Sensor](/docs/dashboard/configuration/kalibrasi-sensor)
    * Jika masalah berlanjut, lakukan pengecekan fisik perangkat di lapangan
  </Accordion>
</AccordionGroup>

### Unduh Data & Bluetooth

<AccordionGroup>
  <Accordion title="Export data gagal atau file tidak tersimpan">
    **Kemungkinan penyebab:**

    * Koneksi internet terputus saat proses unduh
    * Tidak ada data pada rentang waktu yang dipilih
    * Penyimpanan ponsel penuh
      **Solusi:**
    * Pastikan koneksi internet stabil selama proses unduh berlangsung
    * Verifikasi bahwa rentang waktu yang dipilih memiliki data (cek terlebih dahulu di Detail Monitoring)
    * Kosongkan ruang penyimpanan ponsel, lalu coba unduh kembali
  </Accordion>

  <Accordion title="Bluetooth tidak bisa terhubung ke device IoT">
    **Kemungkinan penyebab:**

    * Bluetooth ponsel belum diaktifkan
    * Device IoT belum diaktifkan dalam mode Bluetooth
    * Jarak antara ponsel dan device terlalu jauh
    * Device IoT tidak terdeteksi karena sudah terhubung ke perangkat lain
      **Solusi:**
    * Aktifkan Bluetooth di ponsel dan pastikan izin lokasi juga diberikan ke aplikasi (diperlukan untuk scan Bluetooth di Android)
    * Pastikan device IoT sudah dalam **mode Bluetooth aktif** sesuai prosedur dari teknisi
    * Dekatkan ponsel ke device IoT (jarak ideal \< 10 meter tanpa halangan)
    * Jika device terhubung ke ponsel lain, putuskan koneksi tersebut terlebih dahulu
  </Accordion>

  <Accordion title="Password Bluetooth device ditolak">
    **Kemungkinan penyebab:**

    * Password yang dimasukkan salah
    * Device pernah di-reset sehingga password kembali ke default
      **Solusi:**
    * Periksa password Bluetooth default pada dokumentasi perangkat atau hubungi teknisi yang menginstal device tersebut
    * Jika device pernah di-reset, gunakan password default pabrik
  </Accordion>

  <Accordion title="Proses unduh via Bluetooth sangat lama atau terhenti di tengah">
    **Kemungkinan penyebab:**

    * Volume data yang tersimpan di device sangat besar (device lama tidak dikunjungi)
    * Sinyal Bluetooth tidak stabil karena jarak atau interferensi
    * Baterai ponsel hampir habis
      **Solusi:**
    * Pastikan ponsel berada dalam jangkauan dekat device selama proses unduh berlangsung
    * Hindari menggunakan aplikasi lain yang berat selama proses berlangsung
    * Pastikan baterai ponsel cukup (minimal 30%) sebelum memulai unduh
    * Jika terhenti, coba putuskan koneksi Bluetooth → hubungkan kembali → ulangi proses unduh
  </Accordion>

  <Accordion title="Data hasil unduh Bluetooth tidak muncul setelah diunggah">
    **Kemungkinan penyebab:**

    * Koneksi internet tidak stabil saat proses unggah
    * Data sudah ada di server (duplikat) sehingga tidak ditampilkan ulang
    * Rentang waktu filter di Detail Monitoring tidak mencakup periode data yang diunggah
      **Solusi:**
    * Pastikan koneksi internet stabil saat mengunggah data
    * Setelah unggah berhasil, buka halaman **Detail Monitoring** dan sesuaikan filter waktu ke periode data yang baru diunggah
    * Lakukan *pull to refresh* untuk memuat ulang tampilan data
  </Accordion>
</AccordionGroup>

### Device & Sensor

<AccordionGroup>
  <Accordion title="Perubahan nama device atau sensor tidak tersimpan">
    **Kemungkinan penyebab:**

    * Koneksi internet terputus saat menekan Simpan
    * Field wajib tidak terisi
    * Sesi login sudah kadaluarsa
      **Solusi:**
    * Pastikan koneksi internet aktif, lalu tekan Simpan kembali
    * Pastikan semua field yang wajib diisi sudah terisi
    * Logout dan login kembali jika sesi sudah expired, lalu ulangi perubahan
  </Accordion>

  <Accordion title="Menu Edit Device / Edit Sensor tidak muncul">
    **Kemungkinan penyebab:**

    * Akun tidak memiliki permission untuk mengedit device atau sensor
    * Cara gestur tidak tepat (untuk Edit Device harus geser ke kanan, untuk Edit Sensor harus tekan tahan)
      **Solusi:**
    * Untuk **Edit Device**: geser kartu device ke arah **kanan** (bukan kiri)
    * Untuk **Edit Sensor**: **tekan dan tahan** (*long press*) kartu sensor beberapa detik hingga menu muncul
    * Jika menu tetap tidak muncul, kemungkinan akun Anda tidak memiliki izin edit. Hubungi administrator instansi
  </Accordion>

  <Accordion title="Kalibrasi sensor sudah disimpan tapi nilai data tidak berubah">
    **Ini adalah perilaku normal.** Kalibrasi hanya berlaku untuk data yang dikirim **setelah** kalibrasi disimpan. Data historis sebelumnya tidak akan berubah.
    **Solusi:**

    * Tunggu hingga device mengirim data berikutnya sesuai interval pengirimannya
    * Periksa timestamp data terbaru di Detail Monitoring. Jika sudah lebih baru dari waktu kalibrasi disimpan, nilai baru seharusnya sudah berlaku
  </Accordion>

  <Accordion title="Fitur tertentu tidak tersedia atau tombol tidak bisa diklik">
    **Kemungkinan penyebab:**

    * Akun tidak memiliki permission yang cukup untuk fitur tersebut
    * Role yang ditetapkan untuk akun Anda membatasi akses ke fitur tertentu
      **Solusi:**
    * Hubungi administrator instansi Anda untuk memeriksa dan menyesuaikan permission akun
    * Lihat dokumentasi [Permission System](/docs/dashboard/access-control/permission-system) untuk memahami sistem hak akses Mertani
  </Accordion>
</AccordionGroup>

### Pengaturan

<AccordionGroup>
  <Accordion title="Foto profil atau logo instansi gagal diunggah">
    **Kemungkinan penyebab:**

    * Ukuran file foto terlalu besar
    * Format file tidak didukung
    * Koneksi internet tidak stabil saat unggah
      **Solusi:**
    * Kompres ukuran foto sebelum mengunggah (disarankan di bawah 2MB)
    * Gunakan format gambar yang umum: JPG atau PNG
    * Pastikan koneksi internet stabil, lalu coba unggah kembali
  </Accordion>

  <Accordion title="Gagal mengubah kata sandi - muncul pesan error">
    **Kemungkinan penyebab:**

    * Kata sandi lama yang dimasukkan salah
    * Kata sandi baru tidak memenuhi syarat minimum (panjang/format)
    * Konfirmasi kata sandi baru tidak cocok
      **Solusi:**
    * Pastikan kata sandi lama dimasukkan dengan benar (perhatikan huruf kapital dan karakter khusus)
    * Gunakan kata sandi baru minimal 8 karakter dengan kombinasi huruf dan angka
    * Pastikan kolom konfirmasi kata sandi baru diisi identik dengan kolom kata sandi baru
  </Accordion>
</AccordionGroup>
