Status: π Mengikat Β· Rumah: 1_BMP_Blueprint
Pasangan: Data Model v1.5 (skema) Β· Blueprint Ch.3 (arsitektur) Β· UI Reference (pola)
@doc aksi publik wajib punya doctest; doc yang tidak berjalan adalah doc yang berbohong.bins, closing) selalu rebuildable; tidak ada write langsung.| Aspek | Konvensi |
|---|---|
| Format & static analysis | mix format wajib; Credo --strict clean; Dialyzer clean (wajib di boundary SDK) |
| Domain | Bmp.<Module> = satu bounded context (Bmp.Sales, Bmp.Inventory, Bmp.Accounting, β¦); folder per-domain, bukan per-layer teknis |
| Resource | Bmp.<Module>.<Entity> (mis. Bmp.Sales.SalesOrder); aksi = kata kerja (:create_draft, :submit, :cancel) |
| Event | Bmp.<Module>.Events.<Entity><PastTense> (mis. SalesOrderSubmitted); dipublish via Ash.Notifier |
| Report | Bmp.<Module>.Reports.<Name> β fungsi proyeksi / read action murni; tanpa state tersimpan kecuali snapshot materialized (bins, closing) |
| LiveView | BmpWeb.<Module>.<Page>Live; wajib memakai komponen bersama (<.button>, <.toast>, <.modal>, <.empty_state>, <.pager>) |
| Error | Ash.Error custom dengan pesan bisa ditindaklanjuti ("Sisa budget Rp X", bukan "Invalid input") |
| Bahasa | Lihat Β§4.9 β satu bahasa English untuk sistem; tanpa i18n; output fiskal Bahasa Indonesia (Β§4.13) |
lib/bmp/<domain>/ # satu folder per bounded context
resources/ actions/ policies/ events/ reports/
lib/bmp_web/components/ # komponen bersama (kontrak compile-time)
lib/bmp_web/<domain>/ # LiveView per modul β TIPIS, tanpa logika bisnis
priv/repo/migrations/ # migrasi Ash + bump schema_version
priv/static/fonts/ # Inter .woff2 (bundle lokal)
priv/print_templates/ # template XML Tincture per dokumen
priv/print_templates/fiscal/ # template fiskal Bahasa Indonesia (Β§4.13)
agent/ # crate Rust sync-agent β DI LUAR app Ash
Aturan:
bmp_web hanya presentasi.agent/ tidak boleh memanggil aksi Ash; mutasi replikasi aman di level constraint (Invarian #6).mix bmp.gen.resource Domain Name --archival --cloak=f1,f2 --ledgermix bmp.gen.report Domain Name Β· mix bmp.gen.event Domain Nameschema_version. Generator adalah penjaga konvensi pertama.| Lapis | Tool |
|---|---|
| Doctest | default semua aksi publik (dokumentasi = test) |
| Unit/seed | Ash.Generator |
| Property | StreamData untuk invarian: Ξ£debit = Ξ£credit; qty >= 0; SLE/GL append-only; Neraca seimbang (TOTAL ASET = TOTAL LIABILITAS + EKUITAS) |
| Kontrak internal | Mox |
| HTTP eksternal | Bypass |
| Async jobs | Oban.Testing |
| Sync idempotensi (v2) | changeset sama diterapkan dua kali β yang kedua OMIT |
| Template fiskal (v2) | smoke-render semua template per build; gagal bila placeholder tak terisi atau string di luar Glosarium Fiskal |
| CI | format --check-format β credo --strict β dialyzer β test (SQLite tunggal, tanpa matrix lintas-DB) β cek boundary SDK |
Debug: LiveDebugger (dev-only) + Phoenix.LiveView.Debug (production, read-only).
schema_version (kontrak sync-agent); agent menolak koneksi bila versi node tidak cocok.AshArchival, tidak pernah DROP data (retensi 10 tahun).qty >= 0, amount > 0) β last line of defense replikasi (Invarian #6).journal_mode=WAL; busy_timeout=5000 (Addendum Chapter 3).tincture, eqrcode, exceed, nimble_csv) ter-bundle β nol CDN, nol binary eksternal.@moduledoc setiap resource memuat: mesin apa, rujukan silang (Data Model Β§x, UI Reference Β§y), invarian.Bmp.Sales.SalesOrder, user melihat "Sales Order", dokumen menulis "Sales Order".BMP-Kenapa.md), pesan bantuan panjang, komunikasi internal β dengan terminologi tetap English.conversion_factor = 9 desimal (konversi UOM).posting_date (date) + posting_time (time); UI render Asia/Jakarta; tidak ada timezone per-user untuk tanggal fiskal.SO-SHOPEE-2026-W32, BLG-2026-001, dll. Dokumen cancel menyimpan nomornya (tidak dipakai ulang).bmp.<domain>.<entity>.<action>.Aturan:
priv/print_templates/fiscal/*.xml β terversioning, tanpa eksekusi kode; perubahan template = perubahan dokumen (wajib changelog).account_name wajib diisi Bahasa Indonesia ("Beban Marketplace Fee"); account_number = kode angka. Nama internal/kode tetap English.exceed) memakai header kolom yang sama persis dengan template print β satu glosarium, dua wujud.Kepala & kaki bersama (semua template):
{NAMA_PERUSAHAAN}
{ALAMAT_LENGKAP}
NPWP : {NPWP}
ββββββββββββββββββββββββββββββββββββββββββββββ
{JUDUL_LAPORAN} β uppercase, dari glosarium
{PERIODE} β "Per 31 Desember 2026" / "Untuk Tahun yang Berakhir 31 Desember 2026"
(Dalam Rupiah penuh, kecuali dinyatakan lain)
Kaki: Dicetak dari BMP : {tanggal} {pencetak} Β· Halaman {n} dari {N} Β· blok tanda tangan:
Disusun oleh, (______) {Nama β Finance} Β· Mengetahui, (______) {Nama β Owner}
Template 1 β LAPORAN POSISI KEUANGAN (NERACA) (invarian: TOTAL ASET = TOTAL LIABILITAS DAN EKUITAS)
ASET
ASET LANCAR
Kas dan Setara Kas {n}
Piutang Usaha {n}
Persediaan {n}
Pajak Dibayar di Muka {n}
TOTAL ASET LANCAR {n}
ASET TIDAK LANCAR
Aset Tetap {n}
Akumulasi Penyusutan ({n})
TOTAL ASET TIDAK LANCAR {n}
TOTAL ASET {n}
LIABILITAS DAN EKUITAS
LIABILITAS JANGKA PENDEK
Utang Usaha {n}
Utang Pajak {n}
Pendapatan Diterima di Muka {n}
TOTAL LIABILITAS JANGKA PENDEK {n}
LIABILITAS JANGKA PANJANG {n}
TOTAL LIABILITAS {n}
EKUITAS
Modal Disetor {n}
Laba Ditahan {n}
Laba (Rugi) Berjalan {n}
TOTAL EKUITAS {n}
TOTAL LIABILITAS DAN EKUITAS {n}
Template 2 β LAPORAN LABA RUGI DAN PENGHASILAN KOMPREHENSIF LAIN
PENDAPATAN USAHA {n}
BEBAN POKOK PENJUALAN ({n})
LABA KOTOR {n}
BEBAN OPERASIONAL
Beban Marketplace Fee {n}
Beban Komisi Reseller {n}
Beban Diskon Penjualan {n}
Beban Promosi {n}
Beban Gaji dan Kesejahteraan {n}
Beban Penyusutan {n}
Beban Umum dan Administrasi {n}
TOTAL BEBAN OPERASIONAL ({n})
LABA OPERASIONAL {n}
PENDAPATAN (BEBAN) LAIN-LAIN {n}
LABA SEBELUM PAJAK {n}
BEBAN PAJAK PENGHASILAN ({n})
LABA BERSIH {n}
Template 3 β LAPORAN ARUS KAS (metode tidak langsung) (invarian: KAS AKHIR = saldo akun Bank+Cash di Neraca)
ARUS KAS DARI AKTIVITAS OPERASI
Laba Bersih {n}
Penyesuaian: Beban Penyusutan {n}
Perubahan Piutang Usaha ({n}/{n})
Perubahan Persediaan ({n}/{n})
Perubahan Utang Usaha & Pajak {n}
KAS BERSIH DARI OPERASI {n}
ARUS KAS DARI AKTIVITAS INVESTASI
Perolehan Aset Tetap ({n})
KAS BERSIH DARI INVESTASI ({n})
ARUS KAS DARI AKTIVITAS PENDANAAN
Setoran Modal {n}
KAS BERSIH DARI PENDANAAN {n}
KENAIKAN (PENURUNAN) BERSIH KAS {n}
KAS DAN SETARA KAS AWAL PERIODE {n}
KAS DAN SETARA KAS AKHIR PERIODE {n}
Template 4 β NERACA SALDO
| Kode Akun | Nama Akun | Debit | Kredit |
|---|---|---|---|
| 1-1000 | Kas dan Setara Kas | {n} | |
| β¦ | β¦ | β¦ | β¦ |
| JUMLAH | {Ξ£} | {Ξ£} |
Template 5 β BUKU BESAR (satu akun per blok)
Kepala blok: {KODE} β {NAMA AKUN}
| Tanggal | Keterangan | Ref | Debit | Kredit | Saldo |
|---|---|---|---|---|---|
| {tgl} | {voucher_no + party} | {JE/SI/PI/PE} | {n} | {n} | {n} |
Template 6 β BUKTI POTONG PPh 23 (mengikuti struktur e-Bupot; sumber: tax_withholding_entries + purchase_invoices)
| Blok | Field |
|---|---|
| Dokumen | Nomor & seri bukti potong Β· Tanggal Β· Masa Pajak & Tahun Pajak |
| Pemotong Pajak | Nama Β· NPWP Β· Alamat |
| Penerima Penghasilan | Nama Β· NPWP Β· Alamat |
| Transaksi | Uraian penghasilan (Jasa / Sewa / Dividen / Royalti) Β· Jumlah Bruto |
| Perhitungan | Tarif (%) Β· PPh yang Dipotong |
| Pernyataan | "Demikian bukti potong ini dibuat dengan sebenarnya" + tanda tangan pemotong |
Glosarium Fiskal β sumber string tunggal (Β§4.13-G)
| Internal (kode/identifier) | Label fiskal (Indonesia) |
|---|---|
| Assets | Aset |
| Current Assets | Aset Lancar |
| Non-current Assets | Aset Tidak Lancar |
| Liabilities | Liabilitas |
| Equity | Ekuitas |
| Cash & Bank | Kas dan Setara Kas |
| Receivables | Piutang Usaha |
| Inventory | Persediaan |
| Fixed Assets | Aset Tetap |
| Accumulated Depreciation | Akumulasi Penyusutan |
| Payables | Utang Usaha |
| Tax Payable | Utang Pajak |
| Paid-in Capital | Modal Disetor |
| Retained Earnings | Laba Ditahan |
| Revenue | Pendapatan Usaha |
| Cost of Goods Sold | Beban Pokok Penjualan |
| Gross Profit | Laba Kotor |
| Operating Profit | Laba Operasional |
| Net Profit | Laba Bersih |
| Trial Balance | Neraca Saldo |
| General Ledger | Buku Besar |
| Cash Flow | Arus Kas |
| Fiscal Year | Tahun Pajak |
| Withholding (PPh 23) | Pemotongan Pajak |