title: “Offline Mode” description: “Sistem offline-first untuk POS dan inventory dengan auto-sync, conflict resolution, dan data persistence lokal.”
Offline Mode

Kasus Penggunaan Kritis
Fitur ini sangat kritis untuk skenario berikut:Arsitektur Offline-First
Diagram Arsitektur Umum
Lapisan Data Persistence
Komponen Sistem
1. Local Storage Engine
Data disimpan menggunakan IndexedDB di browser dengan struktur object store terorganisasi:
Storage Limits per Browser:
2. Connection Detector
Sistem deteksi koneksi multi-layer yang cerdas:
Status Indikator Visual:
3. Sync Queue & Engine
Antrian sinkronisasi yang mengelola data pending dengan mekanisme retry dan prioritas:
Urutan Prioritas Sync:
4. Conflict Resolution
Ketika data diubah di kedua sisi (offline & server) selama periode offline, sistem menerapkan strategi resolusi konflik berdasarkan jenis entitas dan konteks bisnis:
Flow Conflict Resolution:
Fitur Utama
Transaksi POS Offline
Transaksi POS (CompanyPOSTransaction) adalah entitas inti yang mendukung operasi offline penuh:
Payment Methods yang Didukung Offline:
Inventory Offline
Operasi inventory yang didukung dalam mode offline melibatkan beberapa entitas:Entity Relationship Diagram
Berikut adalah diagram relasi entitas yang terlibat dalam sistem Offline Mode. Setiap entitas memiliki peran penting dalam memastikan data tetap konsisten antara mode offline dan sinkronisasi ke server.Entity Schema Reference
CompanyPOSTransaction
Entitas utama untuk transaksi POS yang dapat dibuat saat mode offline dan di-sinkronisasi ketika koneksi tersedia.Inventory
Entitas inventory yang di-cache secara lokal saat offline dan di-sinkronisasi ketika koneksi tersedia.StockMovement
Entitas pergerakan stok yang dicatat saat offline dan di-sinkronisasi dengan validasi idempotency key.StockOpname
Entitas sesi stock opname yang dapat diinput secara offline dan disubmit setelah sinkronisasi.StockTransfer
Entitas transfer stok antar lokasi yang dapat dibuat saat offline.StockAlert
Entitas alert stok yang dapat terdeteksi saat offline dan di-sinkronisasi bersama data lainnya.AuditLog
Entitas audit trail yang mencatat setiap operasi sinkronisasi dan perubahan data.WarehouseLocation
Entitas lokasi gudang yang di-cache secara lokal untuk referensi saat offline.POSProduct
Entitas katalog produk global yang di-sinkronisasi ke cache lokal untuk akses offline.Sinkronisasi Status Lifecycle
Diagram state berikut menggambarkan siklus hidup status sinkronisasi data dari pembuatan di mode offline hingga berhasil tersinkronisasi atau gagal.Status Sync Queue — Detail Transisi
Sequence Diagram — Flow Data Offline
1. Pembuatan Transaksi POS Offline
Diagram ini menggambarkan flow lengkap saat kasir membuat transaksi POS tanpa koneksi internet.2. Proses Sinkronisasi Saat Koneksi Kembali
Diagram ini menggambarkan flow saat koneksi internet kembali dan sync engine memproses antrian.3. Penanganan Konflik Data (Conflict Resolution)
Diagram ini menggambarkan flow saat terjadi konflik data antara versi offline dan server.4. Stock Opname Offline — Input dan Sinkronisasi
Diagram ini menggambarkan flow saat staf gudang melakukan stock opname di area tanpa koneksi.Referensi Enum & Status
payment_method — Metode Pembayaran Transaksi POS
payment_status — Status Pembayaran
order_status — Status Pesanan
status (CompanyPOSTransaction) — Status Transaksi
sales_channel — Channel Penjualan
source — Sumber Transaksi (Legacy)
movement_type — Tipe Pergerakan Stok
reference_type — Sumber Perubahan Stok
stock_status — Status Ketersediaan Stok
status (StockOpname) — Status Sesi Stock Opname
status (StockTransfer) — Status Transfer Stok
transfer_mode — Mode Transfer
cost_status — Status Kelengkapan Biaya Transfer
alert_type — Tipe Alert Stok
severity — Tingkat Keparahan Alert
status (StockAlert) — Status Alert
action (AuditLog) — Tipe Aksi Audit
status (AuditLog) — Status Eksekusi Audit
location_type — Tipe Lokasi Gudang
product_type — Tipe Produk
storage_condition — Kondisi Penyimpanan
identity_status — Status Identitas Produk
allocation_strategy — Strategi Alokasi Stok
Teknis
- Gunakan idempotency key pada setiap operasi stock mutation untuk mencegah duplikasi saat retry.
- Selalu enqueue StockMovement bersama CompanyPOSTransaction untuk menjaga konsistensi stok antara client dan server.
- Prioritaskan transaksi keuangan (payment_method: cash/card/ewallet) di atas operasi inventory non-kritis.
- Implementasikan exponential backoff pada retry mechanism untuk menghindari membanjiri server saat reconnect.
- Validasi data lokal sebelum enqueue — pastikan required fields (
company_id,transaction_number,items,total) terisi. - Gunakan
navigator.storage.persist()untuk meminta browser agar tidak meng-evict data IndexedDB secara otomatis. - Log semua sync events untuk debugging dan audit trail — termasuk timestamp, entity type, operation, dan result.
