Skip to main content

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

Offline Mode

Offline Mode Offline Mode adalah kemampuan SNISHOP ERP untuk tetap berfungsi meskipun tidak ada koneksi internet. Fitur ini menggunakan arsitektur offline-first — data disimpan secara lokal di perangkat melalui IndexedDB dan otomatis tersinkronisasi ke server ketika koneksi kembali tersedia. Sistem ini dirancang untuk menjamin zero data loss pada kondisi jaringan tidak stabil, menjaga integritas transaksi keuangan, dan memastikan konsistensi data inventory melalui mekanisme conflict resolution yang deterministik.

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.

Rekomendasi Infrastruktur