title: “Expense Management” description: “Pencatatan pengeluaran dengan 11 kategori, approval workflow berbasis role, auto-journaling ke GL, anti-double-counting untuk bahan baku inventori, dan budget tracking di SNISHOP ERP.”
Expense Management

is_inventory_material untuk mencegah bahan baku inventori dihitung sebagai expense sekaligus HPP. Setiap expense yang disetujui otomatis membuat GLJournalEntry dan mengurangi current_balance di rekening terkait.
Arsitektur Expense Management
11 Kategori Expense
*Kredit selalu ke akun kas/bank yang dipilih.
Anti-Double-Counting: is_inventory_material
Flag is_inventory_material mencegah bahan baku yang sudah tercatat di inventori dihitung ulang sebagai expense.
Kapan Gunakan is_inventory_material = true?
Approval Workflow
Role-Based Auto-Approval
Approval States
Auto-Journaling ke GL
Setiap expense yang disetujui otomatis membuatGLJournalEntry melalui fungsi resolveExpenseGLMapping().
GL Mapping Logic
Account Resolution
Sistem menggunakan Indonesian name hints untuk mencari akun COA yang sesuai:Reconciliation Marker
Jika auto-journaling gagal (misalnya akun COA tidak ditemukan), sistem tidak diam-diam gagal. Sebaliknya:- Expense tetap di-approve
- Catatan expense ditandai:
RECONCILIATION_REQUIRED - Admin harus membuat jurnal manual nanti
Record Expense
Step-by-Step
- Klik “Record Expense”
- Isi form:
- Submit expense
- Sistem validasi dan proses approval
Idempotency
Setiap expense memilikiidempotency_key (max 128 chars) untuk mencegah double-posting. Jika submit dengan key yang sama, sistem akan return hasil yang sama tanpa membuat expense baru.
Budget Tracking
Budget per Kategori
Setiap kategori expense bisa dipasang budget:Alert Levels
Variance Analysis
Recurring Expense
Untuk pengeluaran rutin (sewa bulanan, gaji, asuransi tahunan):Contoh Recurring
Expense Reports
By Category
By Period
By Payment Method
Export & Import
Integration
Bank Integration
- Auto-import bank transactions (jika tersedia)
- Match dengan expense
- Rekonsiliasi
Accounting Integration
- Sync ke general ledger (otomatis)
- COA mapping
- Journal entries
- Financial reports
Best Practices
Documentation
- Always upload receipt untuk audit trail
- Clear description untuk setiap expense
- Proper categorization untuk laporan akurat
- Timely recording (sedekat mungkin dengan tanggal transaksi)
Approval
- Follow approval workflow
- Document justification untuk expense besar
- Keep approval records
- Regular review oleh manager
Budget Management
- Set realistic budgets berdasarkan historical data
- Monitor regularly (mingguan/bulanan)
- Adjust as needed (kuartalan)
- Review variances dan investigasi penyebab
Entity Relationship Diagram
Berikut adalah diagram relasi antar-entitas yang terlibat dalam modul Expense Management. Diagram ini menunjukkan bagaimana data mengalir dari pengajuan expense hingga menjadi jurnal akuntansi di General Ledger.Penjelasan Relasi
Complete Entity Schema Tables
Expense Entity (22 Fields)
EntitasExpense adalah inti dari modul Expense Management. Setiap baris mewakili satu pengajuan pengeluaran.
ApprovalWorkflow Entity (7 Fields + Nested Array)
EntitasApprovalWorkflow mendefinisikan aturan dan alur approval untuk berbagai jenis dokumen (expense, leave, purchase order, dll).
Struktur approval_levels[] (Nested Array)
Field approval_levels adalah array of objects yang mendefinisikan setiap tingkat approval:
Contoh konfigurasi
approval_levels untuk expense:
ApprovalRequest Entity (12 Fields + Nested Array)
EntitasApprovalRequest melacak progres approval untuk satu dokumen spesifik (expense, leave request, dll).
Struktur approval_history[] (Nested Array)
FinancialRecord Entity (20 Fields)
EntitasFinancialRecord adalah ledger universal yang mencatat semua arus kas (income, expense, transfer). Expense yang disetujui otomatis membuat FinancialRecord baru.
GLJournalEntry Entity (14 Fields + Nested Array)
EntitasGLJournalEntry mencatat entri jurnal akuntansi ke General Ledger. Setiap expense yang disetujui menghasilkan satu GLJournalEntry melalui resolveExpenseGLMapping().
Struktur line_items[] (Nested Array)
Expense Lifecycle State Machine
Berikut adalah diagram state machine yang menggambarkan seluruh lifecycle expense dari pembuatan hingga pembayaran. State machine ini mengontrol transisi yang valid dan mencegah transisi ilegal.Tabel Transisi State
Approval Workflow — Detailed Sequence Diagram
Diagram berikut menggambarkan alur approval secara detail, termasuk interaksi antara user, server, approval workflow engine, dan GL posting.Detail Mekanisme Auto-Approval
Auto-approval terjadi tanpa membuat ApprovalRequest jika requester memiliki role tertentu. Ini menghemat satu round-trip ke database dan mempercepat proses untuk user yang memang memiliki otoritas penuh.Expense Category — Detail Lengkap
Berikut adalah penjelasan detail untuk ke-11 kategori expense beserta GL mapping, contoh transaksi, dan perlakuan khusus untukis_inventory_material.
Aturan GL Mapping untuk raw_material
Kategori raw_material adalah satu-satunya kategori yang GL mapping-nya berubah tergantung flag is_inventory_material:
Deep Dive: is_inventory_material Anti-Double-Counting
Masalah yang Dipecahkan
Tanpa flagis_inventory_material, sistem akan mengalami double-counting pada bahan baku inventori:
- Saat beli bahan baku: Expense tercatat → masuk P&L sebagai beban → mengurangi laba
- Saat bahan dipakai produksi: HPP (Harga Pokok Produksi) tercatat → masuk P&L sebagai beban lagi
