Transaction Flow
Dokumentasi lengkap alur transaksi di MStore Backend, mencakup state machine, offline-first capability, inventory movement, dan journal accounting.π― Overview
Sistem transaksi MStore dirancang dengan prinsip:- β State Machine untuk lifecycle management yang jelas
- β Offline-First untuk operasional tanpa internet (CASH only)
- β Multi-Payment support (CASH, QRIS, E-Wallet, VA, Credit Card)
- β Inventory Integration dengan automatic stock movement
- β Journal Accounting untuk setiap transaksi
- β Idempotent untuk retry safety
ποΈ Transaction State Machine
State Definitions
| State | Description | Allowed Actions |
|---|---|---|
| draft | Transaksi baru dibuat, belum submit payment | Edit, Delete, Submit Payment |
| pending_payment | Menunggu konfirmasi pembayaran | Verify Payment, Cancel |
| paid | Pembayaran berhasil, belum sync accounting | Sync, Void |
| synced | Sudah sync ke accounting (journal posted) | Void (with reversal) |
| failed | Pembayaran gagal | - |
| expired | Pembayaran expired | - |
| voided | Transaksi dibatalkan | - |
π‘ Transaction API Endpoints
1. Create Transaction (Draft)
Membuat transaksi baru dalam statusdraft.
2. Submit Payment
Mengubah status daridraft β pending_payment dan membuat payment request.
3. Verify Payment
Verifikasi pembayaran dari payment gateway (webhook atau manual check).4. Sync Transaction (Accounting)
Sync transaksi ke accounting system (post journal entries).5. Void Transaction
Membatalkan transaksi (dengan reversal journal jika sudah synced).π Offline-First Flow
Untuk transaksi CASH, sistem mendukung offline-first:Flutter Implementation
Complete guide untuk Flutter + Isar DB
Backend Implementation
Complete backend implementation dengan Go
π¦ Inventory Integration
Setiap transaksi yangpaid atau synced akan otomatis membuat inventory movement:
Inventory Movement Flow
Movement Record Example
π° Journal Accounting Integration
Setiap transaksi yang di-sync akan membuat journal entries:Journal Mapping Rules
| Transaction Type | Debit Account | Credit Account |
|---|---|---|
| CASH Sales | 1-10100 (Kas) | 4-40100 (Penjualan) |
| QRIS Sales | 1-10200 (Bank) | 4-40100 (Penjualan) |
| Sales Tax | 1-10100/200 | 2-20300 (PPN Keluaran) |
| COGS | 5-50100 (HPP) | 1-13100 (Persediaan) |
Journal Entry Example
π§ͺ Testing Scenarios
Scenario 1: CASH Transaction (Happy Path)
Scenario 2: QRIS Transaction with Webhook
π Performance Metrics
| Metric | Target | Notes |
|---|---|---|
| Create Transaction | < 200ms | Database insert |
| Submit Payment (CASH) | < 300ms | Auto-verify + inventory |
| Submit Payment (QRIS) | < 2s | External API call |
| Verify Payment | < 500ms | Update status + inventory |
| Sync Transaction | < 1s | Journal posting |
| Void Transaction | < 1s | Reversal journal |
π Security Considerations
1. Transaction Code Generation
2. Idempotency
- Gunakan
idempotency_keyuntuk retry safety - Cek duplicate
transaction_codesebelum insert - Webhook handler harus idempotent
3. Authorization
- Cashier hanya bisa create/view transaksi di branch sendiri
- Manager bisa void transaksi
- Admin bisa view semua transaksi
π‘ Best Practices
DO β
- Selalu gunakan state machine untuk update status
- Simpan snapshot payment request/response di tabel
payments - Buat inventory movement setelah payment verified
- Post journal entries setelah sync
- Handle webhook idempotent
- Log semua state transitions
DONβT β
- Jangan skip state machine (direct DB update)
- Jangan lupa create inventory movement
- Jangan post journal sebelum payment verified
- Jangan ignore webhook errors
- Jangan hardcode account codes
π Troubleshooting
Problem: Transaction Stuck in pending_payment
Symptoms: Status tidak update setelah payment success Solution:Problem: Journal Not Posted
Symptoms: Transaction statuspaid tapi belum ada journal
Solution:
Problem: Inventory Not Reduced
Symptoms: Stock tidak berkurang setelah transaksi Solution:- Cek
inventory_movementstable - Verify warehouse stock calculation
- Re-sync transaction jika perlu
π Related Documentation
Payment Gateway
Integrasi Xendit & Midtrans
Inventory Flow
Warehouse & stock management
Need Help? Contact backend team atau check GitHub Issues