🧮 MySQL Schema
📝 Status: Struktur awal – fokus pada tabel utama per feature. Dokumen ini mendeskripsikan tabel utama yang dipakai oleh fitur-fitur inti (Inventory, POS Transaction, Payments, Promotions/Bundles, Stock Opname & Approval) beserta field kunci dan flow antar tabel. Untuk desain schema ERP generik V2 yang sudah disederhanakan ala universal journal, lihat juga:
- ERP Schema V2 Overview
- Halaman modul di grup “ERP Schema V2” seperti Core, Finance, Inventory, dan lainnya.
0. 🧭 Mapping 12 Modules → Feature → Tabel
Section ini menghubungkan 12 modul enterprise dengan feature utama dan tabel MySQL yang relevan. Tujuannya supaya arsitektur modul di dokumen lain (mobile/backend) selaras dengan desain schema database.
Catatan: daftar tabel di bawah fokus ke tabel yang sudah ada di mstore-monolith saat ini. Tabel future/planned bisa ditambahkan kemudian.
0.1 01_core – System, Auth, RBAC, Config
- Feature utama
- Auth & session (login, refresh token, device registration)
- RBAC (role, permission, role-permission, user-role)
- Tenant/merchant & branch registration
- Config & feature flag
- Notification & user activity log
- Tabel kunci (contoh)
users,user_sessions,user_refresh_tokens,user_devices,user_mappingmerchants,branches,branch_regions,branch_contactsroles,permissions,role_permissionsconfig_appsnotifications,user_activity_logs,audit_logs
0.2 02_finance – Accounting, AR/AP, Kas & Bank
- Feature utama
- Chart of Accounts & jurnal umum
- AR/AP (piutang & hutang)
- Kas & bank (mutasi, rekonsiliasi)
- Pajak & laporan keuangan
- Tabel kunci (contoh)
chart_of_accounts,journal_entries,journal_entry_lines,journal_code_sequencestransaction_accounts,transaction_account_mappingsaccounts_receivable,accounts_payablear_invoices,ar_invoice_lines,ar_receipts,ar_payments,ar_allocations,ar_invoice_installmentsap_bills,ap_bill_lines,ap_payments,ap_allocations,ap_bill_installmentsbank_mutations,bank_reconciliations,bank_reconciliation_itemstax_rates,exchange_rates,exchange_rate_overrides
0.3 03_inventory – Barang, Gudang, Stok
- Feature utama
- Master inventory & kategori
- UOM & attribute inventory
- Gudang & mapping branch–warehouse
- Stok per gudang–batch
- Mutasi (movement) dan transfer
- Tabel kunci (contoh)
inventory,inventory_category,uomwarehouses,branch_warehouses,warehouse_stocksinventory_movements,inventory_transfers,inventory_transfer_linesinventory_batches,inventory_prices,inventory_supplierscogs
0.4 04_procurement – Supplier & Pengadaan
- Feature utama
- Supplier/vendor master
- Purchase Order (PO)
- Receiving (goods receipt)
- Integrasi ke AP & inventory
- Tabel kunci (contoh)
partners,supplier_details,partner_bank_accountspurchase_orders,purchase_order_itemsreceivings,receiving_items- Integrasi ke:
ap_bills,ap_payments,inventory_movements
0.5 05_sales – Penjualan & POS
- Feature utama
- POS transaksi offline-first
- Sales header & item
- Addons per item
- Integrasi ke payment, inventory, accounting
- Tabel kunci (contoh)
transactions,transaction_items,transaction_item_addons- (opsional)
sales,sales_itemsjika dipakai sebagai header lain - Integrasi ke:
payments,inventory_movements,journal_entries,accounts_receivable
0.6 06_hr – HR & Payroll (Planned)
- Feature utama (konseptual)
- Employee master
- Absensi & cuti
- Payroll (komponen gaji, slip gaji)
- Tabel kunci
- Belum terdefinisi penuh di schema saat ini – bisa ditambahkan kemudian (mis.
employees,attendance,payroll_runs, dll.)
- Belum terdefinisi penuh di schema saat ini – bisa ditambahkan kemudian (mis.
0.7 07_crm – Customer Relationship
- Feature utama
- Customer master & contact detail
- Segmentation, loyalty, campaign
- Tabel kunci (contoh)
partners,customer_details- Kedepan: tabel tambahan untuk loyalty/campaign bisa ditambahkan sebagai extension modul ini.
0.8 08_cs – Customer Service (Planned)
- Feature utama (konseptual)
- Ticketing (issue, status, assignment)
- Feedback & rating
- SLA monitoring
- Tabel kunci
- Belum spesifik di schema saat ini. Dapat ditambahkan kemudian (mis.
tickets,ticket_comments,feedback, dll.).
- Belum spesifik di schema saat ini. Dapat ditambahkan kemudian (mis.
0.9 09_audit – Audit & Compliance
- Feature utama
- Audit trail aktivitas user
- SoD & security audit
- Compliance reporting
- Tabel kunci (contoh)
audit_logs,user_activity_logs- (RBAC & role change) menggunakan data dari
roles,permissions,role_permissions,user_mapping
0.10 10_analytics – Dashboard & BI
- Feature utama
- Dashboard KPI per modul (sales, finance, inventory)
- Report builder & export
- Forecasting & trend
- Tabel kunci
- Mengambil data dari modul lain (sales, finance, inventory, hr, dsb.).
- Tidak selalu membutuhkan tabel khusus di OLTP; bisa mengandalkan view/materialized view atau data mart terpisah (belum dicakup di schema ini).
0.11 11_holding – Multi-Entity / Group
- Feature utama (konseptual)
- Entity management (holding, anak perusahaan)
- Intercompany transactions
- Group consolidation
- Tabel kunci
- Saat ini, sebagian konsep diwakili
merchants+ kode/struktur bisnis. - Tabel khusus untuk entity group & intercompany bisa ditambahkan kemudian (mis.
entities,entity_groups,intercompany_transactions).
- Saat ini, sebagian konsep diwakili
0.12 12_global – Multi-Region, IAM, Compliance Global
- Feature utama
- SSO/IAM, MFA
- Regional config (country, currency, timezone)
- Global compliance (GDPR, SOX, dsb.)
- Tabel kunci (contoh)
exchange_rates,exchange_rate_overrides(multi-currency)- Field
currencydi banyak tabel (finance, payments, price_lists) - Tabel/konfigurasi tambahan untuk IAM & compliance global dapat dibuat saat implementasi modul ini.
1. ⚙️ Konvensi Global
- Multi-tenant
- Hampir semua tabel bisnis memiliki
merchant_id(FK kemerchants.id). - Banyak tabel juga menyimpan
merchant_codesebagai denormalized lookup.
- Hampir semua tabel bisnis memiliki
- Branch & Warehouse
branches.iddanbranches.branch_codedipakai untuk scope per cabang.warehouses.iddanwarehouses.warehouse_codeuntuk scope per gudang.
- Soft delete & audit
- Pola umum kolom audit:
created_at,updated_at,deleted_at.
- Pola umum kolom audit:
- Enum dan status
- Banyak tabel menggunakan
enumatauvarchardengan check constraint untuk status. - Contoh:
inventory_movements.movement_type,payments.status,stock_opnames.status.
- Banyak tabel menggunakan
2. 🔐 Core System, Auth & RBAC Feature (Module 01_core)
Feature: User, tenant/merchant, branch, RBAC, config, notification, audit.2.1 Tabel Utama
users– master user global.user_sessions– sesi login + refresh hash per device.user_refresh_tokens– keluarga refresh token (rotating refresh) per user/device.user_devices– mapping user → device (FCM token, push notification).merchants– tenant utama (perusahaan/bisnis) + business_level L0–L4.branches– cabang/gerai per merchant.branch_regions,branch_contacts– informasi region & kontak cabang.roles,permissions,role_permissions– RBAC role/permission registry.user_mapping– mapping user ↔ merchant ↔ branch ↔ role (multi-tenant & multi-branch).config_apps– konfigurasi aplikasi per merchant (feature flag, setting khusus).notifications– notifikasi user (push/email/sms).user_activity_logs,audit_logs– activity log & audit trail perubahan data.
2.2 users
Master pengguna sistem.
Field penting:
| Field | Tipe | Keterangan |
|---|---|---|
id | bigint (PK) | ID user. |
user_code | varchar(255) | Kode unik user (dipakai di relasi lain). |
username | varchar(128) | Username login. |
email | varchar(128) | Email (unik). |
phone | varchar(64) | Nomor telepon. |
password | varchar(255) | Hash password. |
is_active | tinyint(1) | 1=aktif, 0=non-aktif. |
is_locked | tinyint(1) | Lock akun (too many attempts, security). |
last_login | datetime | Waktu login terakhir. |
login_attempts | int | Jumlah percobaan login gagal. |
is_email_verified | tinyint(1) | Status verifikasi email. |
verification_token | varchar(128) | Token verifikasi email. |
reset_token | varchar(128) | Token reset password. |
reset_token_expiry | datetime | Expiry token reset. |
lang | varchar(8) | Bahasa default (mis. id). |
theme | varchar(16) | Tema UI (light/dark). |
tz | varchar(64) | Timezone default (mis. Asia/Jakarta). |
created_at, updated_at, deleted_at | timestamp/datetime | Audit timestamps. |
- Unique:
email,user_code.
2.3 user_sessions
Merekam sesi login dan lifecycle refresh token di sisi server.
Field penting:
id– PKuser_id– FK keusers.iddevice_id– ID device (mobile/web)session_id– ID sesi unik (unik secara global)ip,user_agent,client_id,origin_app– metadata koneksirefresh_hash– hash dari refresh token aktifrefresh_expires_at,last_used_at,revoked_at,refresh_rotated_atstatus– enum:active,revoked,expiredlast_seen_at,risk_score,login_time,logout_time
2.4 user_refresh_tokens
Tracking keluarga refresh token (rotating refresh token pattern).
Field penting:
id– PKuser_iddevice_idtoken_hash– hash unik refresh token (unik di tabel)status– enum:active,rotated,revoked,expiredrt_family_id– ID keluarga tokensession_id– link keuser_sessions(opsional)abs_expires_at,expires_at,revoked_at
token_hash.
2.5 user_devices
Mapping user ↔ device (untuk push notification, FCM).
Field penting:
id– PKuser_id– FK keusers.iddevice_id– ID unik devicefcm_token– token FCM
(user_id, device_id).
2.6 merchants
Tenant/bisnis utama.
Field penting:
id– PKmerchant_code– kode unik merchantname,owner_name,email,phone,addressbusiness_level– enum:L0–L4(mapping ke level bisnis di RBAC docs)
merchant_code, email, phone.
2.7 branches, branch_regions, branch_contacts
branches– cabang per merchant.- Field utama:
id,branch_code,merchant_id,name,address,type,currency_code,timezone,phone,email,default_warehouse_id. - Unique per merchant:
(merchant_id, branch_code),(merchant_id, email),(merchant_id, phone).
- Field utama:
branch_regions– mapping cabang → region.- Field:
branch_id,region_id, kode denormalized.
- Field:
branch_contacts– kontak tambahan per cabang.- Field:
branch_id,type(phone,email,whatsapp,other),value.
- Field:
2.8 RBAC: roles, permissions, role_permissions, user_mapping
rolesid,roles_code,name,description,available_levelsavailable_levelsmenyimpan business level yang boleh memakai role (mis.L0,L1).
permissionsid,permission_code,name,description.
role_permissions- Mapping role ↔ permission.
- Field:
role_id,permission_id(+ kode denormalized). - Unique:
(role_id, permission_id).
user_mapping- Mapping user ↔ merchant ↔ branch ↔ role.
- Field:
user_id,merchant_id,branch_id,role_id(+ kode denormalized). - Unique:
(user_id, merchant_id, branch_id, role_id).
2.9 config_apps
Konfigurasi aplikasi per merchant (feature flag, pengaturan pajak default, dsb.).
Field penting:
idmerchant_id,merchant_codegroup_name– grup config (mis.tax,pos,payment)config_name– nama configconfig_value– nilai (string/JSON)method_auth– metode auth jika config terkait integrasi eksternal
(merchant_id, group_name, config_name).
2.10 notifications, user_activity_logs, audit_logs
notifications– notifikasi ke user.- Field:
user_id,branch_id,type(approval,reminder,info, dll),entity_type,entity_id,message,is_read,channel,priority.
- Field:
user_activity_logs– log aktivitas high-level user.- Field:
user_id,activity_type(FK kelookup_code),activity_time,ip_address,user_agent.
- Field:
audit_logs– audit trail perubahan data (before/after).- Field:
user_id,action,table_name,record_id,old_data,new_data.
- Field:
2.11 Flow Core System & RBAC
Ringkasan:users+user_sessions+user_refresh_tokensmengelola login & sesi.merchants+branchesmembentuk tenant & cabang.roles,permissions,role_permissions,user_mappingmembentuk RBAC multi-tenant.config_appsmenyimpan setting per merchant.notifications,user_activity_logs,audit_logsmemberi observability & compliance untuk semua modul.
3. 📦 Inventory & Warehouse Feature (Module 03_inventory)
Feature: Inventory master + per-gudang stock & movement.3.1 Tabel Utama
inventory– master barang/inventory per merchant + cabang.warehouses– daftar gudang per merchant.branch_warehouses– mapping cabang ↔ gudang (default/backup/return/display).warehouse_stocks– stok per gudang + inventory (+ batch optional).inventory_movements– riwayat movement granular (IN/OUT per gudang–barang–batch).inventory_transfers– header mutasi antar gudang (workflow + approval).
3.2 inventory
Master inventory yang sudah merchant-scoped dan tetap punya branch_id untuk transisi.
Field penting:
| Field | Tipe | Keterangan |
|---|---|---|
id | bigint (PK) | ID inventory. |
merchant_id | bigint (FK) | Merchant pemilik inventory. |
merchant_code | varchar(64) | Kode merchant (denormalized). |
branch_id | bigint (FK) | Cabang asal (legacy / transitional). |
branch_code | varchar(64) | Kode cabang. |
category_id | bigint (FK) | Ke inventory_category.id. |
category_code | varchar(64) | Kode kategori. |
inventory_type | varchar(32) | Jenis inventory (raw_material, finished_goods, dll). |
inventory_sku | varchar(64) | SKU unik per merchant. |
global_sku | varchar(64) | SKU global lintas cabang. |
branch_sku | varchar(64) | SKU khusus cabang. |
tags | varchar(255) | Tag untuk grouping/label. |
modifier | varchar(64) | Modifier (mis. variant). |
supplier_id | bigint (FK) | Pemasok utama. |
supplier_code | varchar(64) | Kode pemasok. |
barcode | varchar(64) | Barcode/QR code. |
name | varchar(255) | Nama inventory. |
unit | varchar(50) | Satuan default. |
min_stock | int | Minimal stok (reorder point). |
description | varchar(255) | Deskripsi singkat. |
cost | decimal(18,2) | Cost per unit. |
currency | varchar(10) | Mata uang cost. |
active | tinyint | 1=aktif, 0=non-aktif. |
img_url | varchar(255) | URL gambar. |
created_at … | timestamp | Audit timestamps. |
- Unique:
unique_merchant_inventory_sku (merchant_id, inventory_sku).
3.3 warehouses
Master gudang per merchant.
Field penting:
| Field | Tipe | Keterangan |
|---|---|---|
id | bigint (PK) | ID gudang. |
name | varchar | Nama gudang. |
location | varchar | Lokasi/alamat singkat. |
warehouse_code | varchar(64) | Kode gudang (unik per merchant). |
merchant_id | bigint (FK) | Merchant pemilik gudang. |
warehouse_type | enum | distribution_center, warehouse, store. |
(merchant_id, warehouse_code).
3.4 branch_warehouses
Mapping cabang → satu atau beberapa gudang dengan prioritas.
Field penting:
| Field | Tipe | Keterangan |
|---|---|---|
id | bigint (PK) | ID mapping. |
merchant_id | bigint (FK) | Merchant. |
branch_id | bigint (FK) | Cabang. |
warehouse_id | bigint (FK) | Gudang. |
role | enum | default, backup, return, display (deprecated; gunakan priority). |
priority | int | 0=default, 1=backup1, dst. |
is_active | tinyint | 1=aktif, 0=non-aktif. |
(branch_id, warehouse_id).
3.5 warehouse_stocks
Snapshot stok per gudang–inventory–batch.
| Field | Tipe | Keterangan |
|---|---|---|
id | bigint (PK) | ID stok. |
merchant_id | bigint (FK) | Merchant. |
warehouse_id | bigint (FK) | Gudang. |
inventory_id | bigint (FK) | Inventory. |
inventory_batch_id | bigint (FK) | Batch (opsional). |
qty_on_hand | decimal(18,3) | Qty fisik yang dimiliki. |
qty_reserved | decimal(18,3) | Qty yang sudah di-reserve. |
unit | varchar(50) | Satuan. |
(warehouse_id, inventory_id, inventory_batch_id).
3.6 inventory_movements
Riwayat semua pergerakan stok.
| Field | Tipe | Keterangan |
|---|---|---|
id | bigint (PK) | ID movement. |
merchant_id | bigint (FK) | Merchant. |
warehouse_id | bigint (FK) | Gudang. |
inventory_id | bigint (FK) | Inventory. |
inventory_batch_id | bigint(FK) | Batch (opsional). |
movement_type | enum | transfer_out, transfer_in, purchase_receipt, sales_issue, adjustment, dll. |
reference_type | varchar(64) | Tipe dokumen sumber (PO, SO, TRANSFER, OPNAME, dll). |
reference_id | bigint | ID dokumen sumber. |
reference_code | varchar(64) | Kode dokumen sumber. |
qty | decimal(18,3) | Qty (+ untuk IN, – untuk OUT di level service). |
unit | varchar(50) | Satuan. |
moved_at | timestamp | Waktu movement. |
3.7 inventory_transfers
Header transaksi mutasi antar gudang.
Field penting:
id,transfer_codemerchant_idfrom_warehouse_id,to_warehouse_idstatusenum:draft,requested,approved,in_transit,received,cancelledrequested_by,approved_by,shipped_by,received_byrequested_at,approved_at,shipped_at,received_atapproval_request_id(FK keapproval_requests.id)
ck_transfers_distinct_warehouses (from_warehouse_id <> to_warehouse_id).
3.8 Flow Inventory & Warehouse
Ringkasannya:- Inventory master disimpan di
inventory(merchant-scoped). - Stock real per gudang di
warehouse_stocks. - Semua perubahan stok harus lewat
inventory_movements(bukan update langsung ke stok total). - Mutasi antar gudang dicatat di
inventory_transfers+ menghasilkan movementtransfer_out/transfer_in.
4. 🧾 Sales & POS Feature (Module 05_sales)
Feature: Transaksi penjualan POS + item dan addons.4.1 Tabel Utama
transactions– header transaksi POS.transaction_items– detail item.transaction_item_addons– detail addons per item.
4.2 transactions
Header transaksi dengan lifecycle payment & sync.
Field penting:
| Field | Tipe | Keterangan |
|---|---|---|
id | bigint (PK) | ID transaksi. |
transaction_code | varchar(64) | Kode internal (Snowflake) – TRX-{SNOWFLAKE}. |
display_code | varchar(64) | Kode untuk customer (branch/date/random/checksum). |
branch_id | bigint (FK) | Cabang. |
user_id | bigint (FK) | User yang membuat transaksi. |
transaction_date | timestamp | Waktu transaksi. |
agent | varchar(255) | User agent/device info. |
total_amount | decimal(12,2) | Total transaksi. |
payment_method | varchar(50) | Metode pembayaran utama (cash, qris, ewallet, dll). |
status | varchar(20) | Lifecycle transaksi (draft, paid, void, dll). |
payment_status | varchar(20) | pending_payment, paid, void. |
sync_status | varchar(20) | draft, synced, journaled. |
payment_verified_at | timestamp | Waktu pembayaran tervalidasi. |
synced_at | timestamp | Waktu sync ke server. |
journaled_at | timestamp | Waktu posting ke jurnal. |
voided_at | timestamp | Waktu void. |
cashier_id | bigint | Kasir. |
cashier_code | varchar(64) | Kode kasir. |
offline_reference | varchar(255) | Referensi unik offline (DEVICE-YYYYMMDD-SEQ). |
device_id | varchar(100) | Device pembuat transaksi. |
created_at_device | timestamp | Waktu pembuatan di device. |
is_offline | tinyint(1) | 1=transaksi dibuat offline. |
status, payment_status, dan sync_status.
4.3 transaction_items
Detail item per transaksi.
Field penting:
id– PKtransaction_id– FK ketransactions.idproduct_id– FK keproduct.idquantity– qtyprice– harga per unitsubtotal– total line
4.4 transaction_item_addons
Detail addons per item (topping, extra, dll).
Field penting:
id– PKtransaction_item_id– FK ketransaction_items.idaddon_idquantity,price,subtotal
4.5 Flow POS Transactions
Alur:- Header transaksi dibuat di
transactions. - Item-item disimpan di
transaction_items. - Addons per item di
transaction_item_addons. - Pembayaran dicatat di tabel
payments(lihat section berikutnya) dan di-link ketransactions.id.
5. 💳 Payments Feature
Feature: Pembayaran multi-channel + offline-first.5.1 Tabel Utama
payments– payment record per transaksi/payment attempt.payment_methods– master metode pembayaran (tidak dirinci di sini).
5.2 payments
Field penting:
| Field | Tipe | Keterangan |
|---|---|---|
id | bigint (PK) | ID payment. |
merchant_id | bigint (FK) | Merchant. |
branch_id | bigint (FK) | Cabang (opsional). |
transaction_id | bigint (FK) | Link ke transactions.id. |
payment_code | varchar(64) | Kode payment internal per merchant. |
reference_id | varchar(128) | Reference id dari sistem eksternal (invoice/order). |
idempotency_key | varchar(128) | Idempotency key per merchant. |
provider | varchar(32) | xendit, midtrans, cash, dll. |
channel | varchar(32) | Channel (qris, ewallet, va, cc, dst). |
method | varchar(64) | Metode spesifik (OVO, DANA, BCA QR, dll). |
amount | decimal(18,2) | Nominal payment. |
currency | varchar(10) | Mata uang. |
status | varchar(20) | pending, success, failed, expired, canceled. |
external_payment_id | varchar(128) | ID payment di provider (mis. Xendit payment_id). |
external_invoice_id | varchar(128) | ID invoice di provider. |
qr_string | varchar(255) | QR string (untuk QRIS/static QR). |
paid_at | timestamp | Waktu payment berhasil. |
expires_at | timestamp | Waktu kadaluarsa. |
last_error_code | varchar(64) | Error terakhir. |
last_error_message | varchar(255) | Pesan error terakhir. |
webhook_status | varchar(16) | none, received, processed, failed. |
webhook_received_at | timestamp | Waktu webhook diterima. |
is_offline | tinyint | 1=payment dibuat offline. |
device_id | varchar(64) | Device pembuat payment. |
offline_reference | varchar(128) | Ref offline. |
sync_status | varchar(16) | pending, synced, conflict, failed. |
sync_attempts | int | Jumlah percobaan sync. |
last_sync_at | timestamp | Waktu sync terakhir. |
request_payload | JSON | Payload request ke provider. |
response_payload | JSON | Response dari provider. |
callback_payload | JSON | Payload webhook. |
(merchant_id, payment_code)(merchant_id, idempotency_key)(merchant_id, reference_id)(merchant_id, external_payment_id)(merchant_id, external_invoice_id)
5.3 Flow Payments
Alur umum:- POS membuat
transactions. - Frontend/payment service membuat
payments(pending) ke provider. - Provider kirim callback → update
payments.statusdantransactions.payment_status. - Offline-first:
is_offline,sync_status, dan payload JSON dipakai untuk rekonsiliasi ketika online.
6. 🎯 Promotions & Bundles Feature
Feature: Promosi katalog/cart dan paket bundling produk.6.1 Tabel Utama
promotions– definisi promo per merchant.promotion_conditions– syarat promo (produk, kategori, minimal belanja, dsb.).promotion_rewards– benefit promo (discount, free item, cashback, dsb.).promotion_branches,promotion_customers,promotion_countries– scoping promo.price_lists– daftar harga per merchant/branch.bundles– definisi paket bundle.bundle_components– komponen produk di dalam bundle.
6.2 promotions
Field penting:
id,merchant_id,merchant_codecode– kode promo (unik per merchant)name– nama promotype– enum:catalog,cart,payment,shippingpriority– urutan prioritas pemrosesanstart_date,end_dateis_active
(merchant_id, code).
6.3 price_lists
Field penting:
id,merchant_id,merchant_codebranch_id,branch_codecode,name,currencyvalid_from,valid_tois_active
product_prices, inventory_prices).
6.4 bundles
Field penting:
id,merchant_id,merchant_codecode,nameprice_type–fixedataucomputedfixed_price– jikaprice_type=fixedis_active
6.5 bundle_components
Field penting:
idbundle_id– FK kebundles.idproduct_id– FK keproduct.idproduct_codeqty
6.6 Flow Promotions & Bundles
Ringkasan:- Promo didefinisikan di
promotionsdan dihubungkan dengan conditions & rewards. price_listsdigunakan sebagai basis tier harga per merchant/branch.- Bundles didefinisikan di
bundlesdan isinya dibundle_components.
7. 📊 Stock Opname & Approval Feature
Feature: Stock opname fisik + approval workflow.7.1 Tabel Utama
stock_opnames– header sesi stock opname per cabang.stock_opname_items– detail item dan selisih qty.approval_requests,approval_flows,approval_logs,approvers– engine approval generik.
7.2 stock_opnames
Field penting:
idbranch_id– cabang lokasi opnameopname_date– tanggal opnamestatus– enum:scheduled,in_progress,waiting_approval,approved,rejected,adjustedapproval_request_id– FK keapproval_requests.idcreated_by– user pembuat
7.3 stock_opname_items
Field penting:
idstock_opname_id– FK kestock_opnames.idproduct_id– FK keproduct.idsystem_qty– qty menurut sistemphysical_qty– qty hasil hitung fisikdiscrepancy– kolom generated (physical_qty - system_qty)status–pending,approved,rejected,adjusted
7.4 Flow Stock Opname & Approval
Ringkasan:- Sesi stock opname dibuat di
stock_opnames(per branch + tanggal). - Item opname disimpan di
stock_opname_itemsdengan qty sistem vs fisik. - Jika butuh persetujuan, dibuat
approval_requestsdan log diapproval_logs. - Setelah disetujui, service akan mem-post adjustment ke
inventory_movementsdan updatewarehouse_stocks.
11. 🔍 Use Case Queries
Section ini memberikan contoh query praktis untuk laporan umum lintas modul.11.1 AR Aging (Accounts Receivable)
Use case: laporan aging piutang per customer, dibagi bucket umur (0–30, 31–60, 61–90, >90 hari).11.2 AP Aging (Accounts Payable)
Use case: laporan aging hutang per supplier.11.3 Kartu Stok per Warehouse & Inventory
Use case: melihat histori movement dan saldo berjalan (stock card) untuk 1 item di 1 gudang.11.4 Ringkasan Stok per Warehouse (Qty On Hand & Reserved)
Use case: laporan stok per gudang, termasuk stok rendah.11.5 Rekonsiliasi Bank (Mutasi vs Transaksi)
Use case: melihat hasil matching mutasi bank ke transaksi internal.11.6 Penjualan Harian per Cabang (Sales/POS)
Use case: total penjualan per hari per cabang.11.7 Penjualan per Produk (Top N Produk)
Use case: melihat produk terlaris dalam periode.11.8 Laporan Status Payments (Pending/Success/Expired)
Use case: memantau distribusi status payment per provider/channel.11.9 Daftar PO Terbuka & Overdue
Use case: melihat PO yang belum selesai (belum sepenuhnya diterima/dibayar) dan sudah lewat due (berdasarkanorder_date + rule bisnis).
11.10 Receiving vs PO (Variance Quantity)
Use case: membandingkan qty PO vs qty yang sudah diterima.11.11 Laporan Stock Opname (Variance & Status)
Use case: melihat hasil opname per item, termasuk selisih dan status persetujuan.11.12 Aktivitas User & Audit Log
Use case: memonitor aktivitas dan perubahan data oleh user tertentu dalam periode.Catatan & Next Step
- Dokumen ini baru mencakup tabel utama, flow antar tabel, dan contoh query use-case yang paling umum.
- Query bisa disesuaikan dengan kebutuhan (filter tambahan, index, dsb.) dan dijadikan view/materialized view jika dibutuhkan performa lebih baik.
- Use-case tambahan bisa ditambahkan di section ini dengan pola yang sama.
8. 📒 Finance & Accounting Feature (Module 02_finance)
Feature: Chart of Accounts, jurnal umum, AR/AP, kas & bank, tax & FX.8.1 Tabel Utama (Ringkasan)
- COA & Jurnal
chart_of_accounts– master akun.journal_entries– header jurnal (per dokumen bisnis).journal_entry_lines– detail debit/credit per akun.journal_code_sequences– generator kode jurnal per modul/periode.
- Accounts Receivable (AR)
accounts_receivable– saldo piutang per invoice/customer.ar_invoices,ar_invoice_lines– invoice AR dan komponennya.ar_payments– pembayaran yang dialokasikan ke AR.ar_receipts– penerimaan kas AR (header official receipt).
- Accounts Payable (AP)
accounts_payable– saldo hutang per invoice/supplier.ap_bills,ap_bill_lines– bill AP dan komponennya.ap_payments– pembayaran hutang ke supplier.
- Kas & Bank
bank_mutations– mutasi bank (import statement).bank_reconciliations– header rekonsiliasi bank (periode, status, approval).bank_reconciliation_items– mapping mutasi bank ↔ transaksi internal.
- Tax & FX
tax_rates– master tax rate per region.exchange_rates– kurs global harian.exchange_rate_overrides– override kurs per merchant/branch.
8.2 Flow Finance Tingkat Tinggi
Ringkasan:- Semua transaksi bisnis penting (sales, purchase, payment) pada akhirnya mem-post jurnal ke
journal_entries+journal_entry_lines. - Piutang dikelola via
accounts_receivable+ar_*, hutang viaaccounts_payable+ap_*. - Kas & bank memakai
bank_mutations(import) danbank_reconciliationsuntuk rekonsiliasi ke transaksi internal. - Kurs & pajak diambil dari
exchange_rates,exchange_rate_overrides, dantax_ratessebagai referensi global/regional.
9. 📥 Procurement Feature (Module 04_procurement)
Feature: Supplier, Purchase Order, Receiving, integrasi ke AP & inventory.9.1 Tabel Utama (Ringkasan)
- Master Supplier
partners(type=supplier) – master supplier.supplier_details– detail tambahan supplier.partner_bank_accounts– rekening bank supplier.
- Purchase Order & Receiving
purchase_orders– header PO.purchase_order_items– detail item PO.receivings– header penerimaan barang (GRN).receiving_items– detail item yang diterima.
- Integrasi ke Finance & Inventory
- AP:
accounts_payable,ap_bills,ap_bill_lines,ap_payments.
- Inventory:
inventory_movements(movementpurchase_receipt) dan update kewarehouse_stocks.
- AP:
9.2 Flow Procurement → AP → Inventory (Konseptual)
10. 🌐 Modules 06–12 (HR, CRM, CS, Audit, Analytics, Holding, Global)
Section ini merangkum modul 06–12 yang sebagian masih konseptual di sisi schema OLTP.10.1 HR & Payroll (Module 06_hr)
- Scope: employee master, attendance, leave, payroll.
- Status schema: belum ada tabel khusus di
mstore-monolith. - Catatan: ketika diimplementasikan, tabel seperti
employees,attendance,payroll_runs,payroll_linesbisa dibuat dan di-link ke modul finance (journal) & core (users).
10.2 CRM (Module 07_crm)
- Scope: customer master, segmentation, loyalty, campaign.
- Tabel yang dipakai saat ini:
partners(type=customer) – master customer.customer_details– config customer (group, payment_term, credit_limit, price_list).
- Catatan: loyalty/campaign dapat menambah tabel baru (mis.
loyalty_points,campaigns) sebagai extension modul ini.
10.3 Customer Service (Module 08_cs)
- Scope: ticketing, reminder, SLA.
- Tabel relevan saat ini:
notifications– notifikasi ke user terkait approvals, reminder, info.reminders– jadwal reminder (stock_opname, PO expiry, shift closing, custom).reminder_logs– log pengiriman reminder (due/overdue/escalation) ke user.
- Catatan: ticketing penuh (ticket, comment, SLA) bisa ditambahkan nanti dengan tabel baru.
10.4 Audit & Compliance (Module 09_audit)
- Scope: audit trail, SoD, compliance reporting.
- Tabel utama:
user_activity_logs– log aktivitas user (tipe aktivitas vialookup_code).audit_logs– before/after change per record (table_name, record_id, old_data, new_data).
- Integrasi: memakai data dari modul Core (users, roles, permissions, user_mapping) untuk analisis SoD.
10.5 Analytics & BI (Module 10_analytics)
- Scope: dashboard KPI, laporan, forecasting.
- Karakteristik:
- Mengkonsumsi data dari modul lain (finance, sales, inventory, hr).
- Biasanya diimplementasikan via view/materialized view atau data mart terpisah, bukan tabel OLTP tambahan.
- Catatan: schema OLTP saat ini belum memiliki tabel khusus untuk analytics; desain data warehouse bisa didokumentasikan terpisah.
10.6 Holding / Multi-Entity (Module 11_holding)
- Scope: multi-entity, intercompany, group consolidation.
- Tabel relevan saat ini:
merchants– dapat merepresentasikan entity berbeda (perusahaan/grup).
- Catatan:
- Tabel khusus seperti
entities,entity_groups,intercompany_transactionsbisa ditambahkan nanti. - Consolidation biasanya dilakukan di layer analytics/BI.
- Tabel khusus seperti
10.7 Global / Multi-Region & Compliance (Module 12_global)
- Scope: multi-currency, multi-region, SSO/IAM, global compliance.
- Tabel relevan saat ini:
exchange_rates– kurs global per tanggal.exchange_rate_overrides– override kurs per merchant/branch.- Field
currencydi berbagai tabel (finance, payments, price_lists) – fondasi multi-currency.
- Catatan:
- IAM/SSO global dapat menambah tabel/config baru (provider, identity mapping, dsb.).
- Compliance (SOX/GDPR) lebih banyak memanfaatkan audit & logs yang sudah ada di modul Core/Audit.