Mu'afa Riski Ali

Pelaporan Lapangan SPKPPSU

WebAnggota tim: frontend dan sinkronisasi offline2026
Pelaporan Lapangan SPKPPSU screenshot

Latarnya

Petugas lapangan desa mencatat pemeriksaan infrastruktur dan sanitasi di kertas, lalu mengetiknya ulang di kantor beberapa hari kemudian. Datanya sudah basi saat bisa ditindaklanjuti, dan arsip tulisan tangan sering hilang. Formulir web biasa langsung gagal di lapangan karena area yang diperiksa sering tanpa sinyal.

Kontrak sinkronisasi

Rancangannya mengasumsikan jaringan tidak ada, bukan sekadar lambat. Setiap penulisan masuk ke penyimpanan lokal lebih dulu dan dianggap berhasil begitu tersimpan di perangkat. Unggah adalah urusan terpisah yang mengulang sendiri.

Tiga aturan membentuk lapisan sinkronisasi. Penulisan tidak pernah menunggu jaringan. Konflik diselesaikan ke entri lapangan terbaru, karena versi kantor yang diketik ulang kurang akurat dibanding apa yang dilihat petugas di lokasi. Petugas bisa melihat data mana yang sudah dan belum sampai ke server.

Record mengantre di IndexedDB dan service worker menangani background sync saat koneksi kembali. Tiap record membawa UUID buatan klien dan revisi lokal monotonik, sehingga pengulangan bersifat idempoten. Koneksi buruk yang memicu tiga percobaan sinkronisasi tidak menghasilkan tiga pemeriksaan.

Yang bertahan

Aplikasi berjalan dalam mode pesawat tanpa perbedaan responsivitas yang terasa. Record dalam antrean selamat dari reload halaman dan, karena service worker menyimpan antrean, juga dari restart perangkat. Di sisi admin, tampilan pemantauan memperlihatkan kiriman saat masuk, menandai petugas yang menyimpan record lebih lama dari ambang tertentu, dan menyaring berdasarkan sektor desa.

Dua pelajaran keluar dari sini. Menempelkan antrean sinkronisasi ke formulir yang dibangun untuk server hidup berarti menulis ulang seluruh lapisan data. Versi pertama memakai optimistic UI di atas state berbasis request, dan itu gagal tepat di situasi yang jadi alasan aplikasi ini dibuat. Menuliskan kontrak sinkronisasi sebelum implementasi juga lebih penting dari perkiraan, karena sebagian besar bug integrasi berasal dari asumsi urutan yang kabur, bukan dari cacat kode.