Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs-mstore.faisalaffan.com/llms.txt

Use this file to discover all available pages before exploring further.

๐Ÿงฎ ERP Schema V2 Overview

ERP Schema V2 adalah schema ERP generik yang menyederhanakan lebih dari 250 tabel menjadi sekitar 60 tabel terstruktur, dengan fokus pada:
  • Universal Journal ala SAP S/4HANA
  • Master data minimalis (material, business partner)
  • Alur transaksi inti yang bersih (PRโ†’POโ†’GRโ†’APโ†’GL, SOโ†’Invoiceโ†’ARโ†’GL, dll.)
  • Multi-tenant, multi-company, multi-branch untuk skala nasional/enterprise.

1. Executive Summary

1.1 Latar Belakang

Schema lama:
  • 250 tabel untuk POS, SCM, Manufacturing, Promo Engine, Wallet, Finance, dll.
  • Banyak duplikasi:
    • Kode seperti merchant_code, branch_code, product_code tersebar di banyak tabel.
    • Banyak tabel log dan derived yang sebenarnya bisa dinormalisasi.
  • Sulit dipakai sebagai ERP core karena:
    • Tidak ada universal journal.
    • Master data tersebar dan saling overlap.
ERP Schema V2 menjawab masalah ini dengan:
  • Konsolidasi menjadi sekitar 60 tabel.
  • Pemisahan jelas antara:
    • Master data (material, customer, vendor, COA).
    • Dokumen bisnis (PO, SO, GR, invoice).
    • Posting keuangan (GL).
    • Logistik (stock, movement).
  • Fokus ke ERP tanpa kehilangan kemampuan POS/retail.

1.2 Tujuan & Manfaat

  • Sebagai core ERP generik yang bisa diadopsi berbagai bisnis.
  • Memudahkan integrasi:
    • Antar modul internal (inventory, finance, HR, CRM).
    • Dengan sistem eksternal (billing, data warehouse, BI).
  • Menurunkan kompleksitas:
    • Lebih sedikit tabel.
    • Struktur dan naming yang konsisten.
  • Memperkuat kualitas data:
    • Satu sumber kebenaran untuk master & journal.
    • Mengurangi duplikasi dan inkonsistensi.

2. Architecture Overview

2.1 Prinsip Desain Inti

  • Universal Journal sebagai pusat
    Semua transaksi keuangan berakhir di gl_entry + gl_line.
  • Master Data Minimalis
    • inv_mat sebagai material master tunggal.
    • so_customer & po_vendor sebagai business partner ringan.
    • Atribut turunan dipecah ke tabel kecil spesifik bila perlu.
  • Transaction Core yang Clean
    • Procurement โ†’ po_* + inv_* + fi_ap_* + gl_*.
    • Sales/POS โ†’ so_* + fi_ar_* + gl_*.
    • Inventory โ†’ selalu lewat inv_move.
  • Multi-tenant, Multi-company, Multi-branch
    • Tenant > Company > Branch sebagai hirarki standar.
  • Domain Prefix
    • Prefix tabel per domain (core_, fi_, gl_, inv_, po_, so_, hr_, crm_, cs_, au_, an_, ic_, rg_) untuk menjaga boundary dan memudahkan navigasi.

2.2 Domain Prefixes

PrefixDomainContoh tabel
core_Core, auth, RBAC, configcore_user, core_audit
fi_Finance AR/AP/Cashfi_ar_inv, fi_cash_tx
gl_General Ledger / Universal Journalgl_entry, gl_line
inv_Inventory & stockinv_mat, inv_move
po_Procurementpo_order, po_gr
so_Sales & POSso_order, so_pos
hr_Human Resourceshr_emp, hr_payroll
crm_Customer Relationship Managementcrm_contact, crm_lead
cs_Customer Service / Ticketingcs_ticket
au_Audit & Segregation of Dutiesau_sod
an_Analytics & KPIan_kpi, an_kpi_val
ic_Intercompany / Holdingic_entity, ic_tx
rg_Region, Currency, Policyrg_rate, rg_policy

2.3 Multi-tenant โ†’ Company โ†’ Branch

  • core_tenant
    Level SaaS / grup tertinggi.
  • core_company
    Entitas legal akuntansi (PT/CV). COA, GL, AR/AP terikat ke sini.
  • core_branch
    Unit operasional (toko, gudang, cabang). Stock dan POS terjadi di level ini.

2.4 Konvensi PK/FK & Penamaan

  • PK: id BIGINT UNSIGNED AUTO_INCREMENT.
  • FK umum:
    • tenant_id โ†’ core_tenant.id
    • company_id โ†’ core_company.id
    • branch_id โ†’ core_branch.id
    • mat_id โ†’ inv_mat.id
    • cust_id โ†’ so_customer.id
    • vendor_id โ†’ po_vendor.id
  • Kode unik lokal:
    • code unik per company (material, customer, vendor, COA) untuk memudahkan integrasi dan import dari sistem lain.

2.5 Alignment dengan SAP / S4HANA

ERP Schema V2 mengadopsi spirit SAP Universal Journal (ACDOCA) dan Material Master namun dengan eksekusi yang lebih ringan dan mudah dioperasikan di startup atau mid-size enterprise.
  • Universal Journal
    • SAP ACDOCA โ†’ V2: gl_entry + gl_line.
    • Semua posting AR/AP/expense/cash dihantarkan ke GL.
  • Material & Stock
    • SAP MARA/MBEW/MCHB โ†’ V2: inv_mat, inv_stock, inv_move.
  • Document Flow
    • SAP: PRโ†’POโ†’GRโ†’Invoiceโ†’Payment.
      V2: po_reqโ†’po_orderโ†’po_grโ†’fi_ap_invโ†’fi_ap_payโ†’gl_entry.

3. ERD Overview (Global)


4. Business Process Flows

Flow Ringkas

  1. Purchase Request (PR)
    • User cabang membuat kebutuhan di po_req + po_req_line.
  2. Purchase Order (PO)
    • Buyer meng-approve PR โ†’ generate po_order + po_order_line.
  3. Goods Receipt (GR)
    • Barang datang โ†’ create po_gr + po_gr_line.
    • GR men-trigger inv_move (movement type = IN_PURCHASE) dan update inv_stock.
  4. AP Invoice
    • Finance menerima invoice supplier โ†’ fi_ap_inv + fi_ap_inv_line.
  5. AP Payment
    • Pembayaran ke supplier โ†’ fi_ap_pay.
  6. GL Posting
    • AP invoice dan payment di-post ke gl_entry + gl_line (debit/credit COA terkait).

Diagram


5. Design Rationale

5.1 Kenapa Universal Journal?

  • Fakta:
    • Schema lama memisahkan jurnal per modul (AR, AP, POS, dsb).
    • Sulit membuat laporan konsolidasi & audit trail.
  • Pendekatan V2:
    • Semua posting keuangan selalu lewat gl_entry + gl_line.
  • Manfaat:
    • Laporan keuangan dan audit hanya perlu satu sumber data.
    • Implementasi AR/AP/asset/cash hanyalah โ€œ/viewโ€ domain di atas GL.

5.2 Kenapa Material Master Dinormalisasi?

  • Fakta:
    • Banyak duplikasi product vs inventory vs product_price.
  • Pendekatan V2:
    • Satu tabel inv_mat untuk material.
    • Harga, stock, movement dipisahkan ke tabel spesifik (inv_stock, inv_move, dsb.).
  • Manfaat:
    • Satu ID material di seluruh sistem.
    • Menyederhanakan integrasi dengan POS, e-commerce, dan sistem eksternal.

5.3 Kenapa POS Disederhanakan?

  • Fakta:
    • POS lama mencampur konsep GL dan inventory di banyak tabel.
  • Pendekatan V2:
    • POS cukup so_pos + so_pos_line.
    • Posting GL & movement inventory dilakukan oleh service terpisah (terhadap fi_cash_tx, inv_move, gl_entry).
  • Manfaat:
    • Engine POS tetap ringan & offline-friendly.
    • Akuntansi dan stock tetap terkendali dengan cara yang konsisten.

5.4 Kenapa Domain Prefix Penting?

  • Memudahkan:
    • Pengembang baru memahami batas domain.
    • Query & migrasi berdasarkan modul.
    • Pemetaan ke tim/domain (core, finance, inventory, dsb.).
  • Mengurangi:
    • Risiko konflik nama.
    • Risiko mencampur domain (mis. tabel finance dipakai langsung oleh modul inventory).

6. Glossary

IstilahDefinisi singkat
TenantPemilik instance ERP (grup/holding/penyedia layanan)
CompanyEntitas legal akuntansi (PT/CV)
BranchUnit operasional (toko, gudang, cabang)
MaterialItem/barang yang dikelola di inventory (inv_mat)
COA (Chart of Accounts)Daftar akun buku besar untuk GL (gl_coa)
Universal JournalModel di mana semua posting keuangan masuk ke satu struktur GL
PR (Purchase Request)Permintaan pembelian awal (po_req)
PO (Purchase Order)Pesanan pembelian ke vendor (po_order)
GR (Goods Receipt)Pencatatan barang masuk (po_gr)
AR (Accounts Receivable)Piutang usaha (fi_ar_*)
AP (Accounts Payable)Hutang usaha (fi_ap_*)
POS (Point of Sale)Transaksi penjualan kasir (so_pos)
MovementPergerakan stok yang mempengaruhi inv_stock (inv_move)
AdjustmentPenyesuaian stok akibat opname/selisih (inv_adj, inv_adj_line)
SoD (Segregation of Duties)Pemisahan tugas untuk mencegah fraud (au_sod)
KPIKey Performance Indicator (an_kpi, an_kpi_val)
IntercompanyTransaksi antar entitas dalam satu grup (ic_entity, ic_tx)
Region/PolicyPengaturan regional, mata uang, dan kebijakan (rg_*)

7. Navigasi ke Dokumentasi Modul

Gunakan file modul di folder 40-database/erp-v2/:
  • Satu file per modul (Core, Finance, GL, Inventory, Procurement, Sales, HR, CRM, CS, Audit, Analytics, Intercompany, Global) mencakup:
    • List tabel & deskripsi pendek.
    • Key fields & FK.
    • Hubungan antar tabel per modul.
    • Contoh flow minimal & snippet query SELECT untuk laporan.