ERPNext v16 - Purchase (Versi BMP)

Modul Purchase di BMP dirancang khusus untuk manufaktur parfum (CPKB Gol. B). Karena 90% pembelian adalah Raw Material (Alkohol, Fragrance Oil, Aquadest, Additives) dari supplier langganan (5-10 vendor), kita memangkas habis fitur "tender" yang rumit (RFQ, Supplier Quotation, Supplier Scorecard) dan memfokuskan modul ini pada dua hal yang benar-benar kritis bagi pabrikmu: Gerbang Mutu Masuk (Incoming QC) dan Akurasi Harga Modal (Landed Cost).

Peta dokumen:

Chapter Isi Kedalaman
0 Struktur & Cross-check
A Masters & Parties (Supplier, grup, default pembelian) Penuh
B Siklus Transaksi (PO, PR, Landed Cost, QC Gate) Penuh (Lanjut)
C Buying Settings Policy
D Reports Sedang

Chapter 0 - Struktur & Cross-check

0.1 Grup struktur ↔ doctype utama (erpnext/buying/doctype/)

Grup Doctype Status di BMP
Parties supplier, supplier_group Adopsi Penuh
Siklus Komersial purchase_order (PO) Adopsi Penuh
Eksekusi Fisik purchase_receipt (PR) Adopsi Penuh (dengan QC Gate)
Penilaian Biaya landed_cost_voucher (LCV) Adopsi Penuh (Krusial)
Tender / Bidding request_for_quotation (RFQ), supplier_quotation Tolak / Sembunyikan (Supplier sudah langganan)
Governance supplier_scorecard Tolak (5-10 vendor tidak butuh scoring formal)
Settings buying_settings Adopsi

0.2 Kesimpulan Struktur

Siklus beli di BMP sangat pendek dan langsung: Material Request (dari Produksi) ➔ Purchase Order ➔ Purchase Receipt (QC Gate) ➔ Purchase Invoice (Accounting). Tidak ada negosiasi harga per transaksi karena harga RM (terutama Fragrance Oil impor dan Alkohol) biasanya sudah dikontrak per periode atau mengikuti kurs.

Chapter A - Masters & Parties

Mesin apa: Kamus "siapa" penyedia bahan baku dan kemasan, serta aturan main dasar bertransaksi dengan mereka. Master di sini menentukan ke mana utang usaha (Account Payable) menempel di ledger, dan bagaimana pajak potong pungut (PPh 23) dihitung otomatis saat tagihan datang.

Perilaku per doctype:

  1. Supplier (erpnext/buying/doctype/supplier/) - master vendor. Atribut penentu perilaku:
  2. Supplier Group (erpnext/buying/doctype/supplier_group/) - tree (nested set). Berfungsi sebagai pewaris default (payment terms, tax withholding) saat Supplier baru dibuat. Pola copy-on-create (sama seperti Item Group / Cost Center).
  3. Item Purchasing Defaults (hidup di master Item, tapi dikelola dari perspektif Purchase):

Lintas domain:

Edge case:

  1. Salah mata uang (Currency) di Supplier: PO dibuat dalam USD, tapi PR/SI di-input manual dalam IDR. Selisih kurs yang tidak terekam sistem akan membuat valuasi utang dan HPP bahan baku hancur.
  2. Supplier ganda untuk RM yang sama: Fragrance Oil "Rose" bisa dibeli dari Supplier A (Prancis) dan Supplier B (Lokal). Jika admin salah pilih Supplier di PO, sistem tetap jalan, tapi kualitas dan aroma batch produksi akan berubah total tanpa peringatan sistem (karena sistem tidak tahu perbedaan organoleptik). Ini murni mengandalkan kedisiplinan admin.
  3. PPh 23 lupa di-set di Supplier Jasa: Tagihan ekspedisi masuk full tanpa potongan pajak. Saat akhir tahun, akuntan harus membetulkan manual (koreksi pajak) yang merepotkan.

Delta v16 (subset register sebelumnya):

Catatan scope BMP:

  1. Adopsi penuh: Supplier, Supplier Group, PO, dan integrasi dengan modul Quality (Incoming QC).
  2. Tolak / Sembunyikan dari UI: RFQ (Request for Quotation), Supplier Quotation, Supplier Scorecard, Blanket Order. Ini mengurangi cognitive load tim purchasing yang hanya perlu "Pesan barang ke supplier langganan, pastikan barang datang dan lulus QC, bayar tagihan".
  3. Adaptasi (Wawasan Domain): Supplier untuk Fragrance Oil (Impor) dan Alkohol (Lokal/Bea Cukai) wajib memiliki field custom atau catatan di deskripsi mengenai Nomor Izin Edar / MSDS (Material Safety Data Sheet) untuk keperluan audit CPKB Gol. B.

Chapter B - Siklus Transaksi (The 4 Purchasing Flows & QC Gates)

Mesin apa: Modul Purchase di BMP tidak lagi berfungsi sebagai "mesin tender" (karena RFQ/Scorecard dibuang), melainkan sebagai mesin eksekusi & gerbang mutu (Gateway). Siklus beli di sini sangat pendek, repetitif, dan langsung menembus ke 3 modul lain: Stock (untuk penerimaan fisik), Quality (untuk gerbang inspeksi CPKB), dan Accounting (untuk pencatatan utang & pajak).

Karena rantai pasok pabrik parfummu sangat spesifik, sistem membagi siklus transaksi ke dalam 4

Jalur Pembelian (Purchasing Flows) yang memiliki perilaku dan gerbang QC berbeda:

1. Jalur RM Cairan (Alkohol & Fragrance Oil)

Ini adalah jalur dengan nilai finansial tertinggi dan risiko mutu paling kritis.

2. Jalur Packaging Kering (Botol, Cap, Stiker, Box)

Jalur dengan volume fisik besar, nilai per unit rendah, tapi sangat rentan terhadap cacat mekanis yang bisa merusak produk akhir (misal: botol bocor, ulir cap dol).

3. Jalur Jasa (Ekspedisi, Maintenance Mesin, Cleaning Service)

Jalur untuk pembelian yang tidak berwujud fisik (tidak ada stok yang masuk ke gudang).

4. Jalur Aset / Mesin (via Broker Borongan)

Jalur khusus untuk pembelian mesin (Mixing 100L/200L, Filling, Capping) yang disurvei langsung ke China tapi transaksinya via Forwarder/Broker lokal di Indonesia.

Lintas Domain (Cross-Domain Integration)

  1. Ke Quality (Wajib CPKB): PR untuk RM dan Packaging tidak akan bisa diselesaikan (status Completed) tanpa adanya Quality Inspection yang berstatus Accepted. Ini adalah Hard-Gate sistem untuk mencegah bahan baku cacat masuk ke produksi.
  2. Ke Stock (Inventory): PR otomatis menulis Stock Ledger Entry (SLE). Untuk parfum, field Batch No dan Manufacturing Date (dari supplier) wajib diinput di baris PR untuk menjamin traceability IFRA/CPKB.
  3. Ke Accounting: PI otomatis membuat Journal Entry (Hutang Usaha di Kredit, Stok/Beban/Aset di Debit) dan memotong PPh 23 untuk jasa.

Edge Case & Aturan Pragmatis

  1. Katalog USD vs Realisasi IDR: Admin purchasing tidak boleh mengetik manual harga Rupiah di PO jika item sudah punya Item Price USD. Sistem yang harus menghitung. Ini mencegah human error salah ketik nol yang berakibat fatal pada HPP.
  2. Toleransi Kuantitas (Over-Receipt): Supplier cairan (Molindo) seringkali mengirim dengan selisih timbangan (misal: pesan 1000 kg, datang 1002 kg). Buying Settings harus mengizinkan toleransi over-receipt (misal 2-5%) khusus untuk item kategori RM Cairan, agar PR tidak terblokir hanya karena selisih timbangan truk.
  3. Barang Reject: Jika QC menolak batch Fragrance Oil, barang tidak boleh di-write-off (karena mahal). Barang harus dikembalikan ke supplier (Debit Note / Purchase Return) dan PI disesuaikan.

Chapter C - Buying Settings (Policy)

Mesin apa: ruang policy sisi beli - single doctype (buying_settings) + keluarga template pajak. Seperti kembarannya di Selling/Stock, chapter ini tidak menggerakkan barang, tapi menentukan boleh-tidaknya seluruh aliran di Chapter B. Bedanya dengan ERP generik: hampir semua policy di sini kita setel mengikuti satu fakta domain - supplier langganan, harga kontrak, transaksi IDR dengan katalog USD.

Perilaku per policy:

  1. PO/PR required sebelum PI ⚠️ - toggle global "apakah Purchase Invoice wajib merujuk PO/PR". Realitas BMP: barang fisik (RM, packaging, aset) wajib ber-PO (audit trail + gerbang QC), tapi jasa (ekspedisi, maintenance) boleh PI langsung. Karena toggle ERPNext global dan tidak bisa membedakan jenis item, BMP memindah validasi ini ke level tipe item: item service = PI langsung diizinkan; item stock/asset = PI tanpa PO ditolak.
  2. Maintain same rate = OFF - di ERP generik ini ON agar rate PI = rate PO. Di bisnismu ini harus OFF: rate PO lahir dari konversi katalog USD × kurs hari-PO, sedangkan invoice distributor bisa memakai kurs versi mereka. Selisihnya nyata dan legal - maka selisih dibukukan ke akun Purchase Price Variance (keputusan BMP), bukan dipaksa nol oleh sistem.
  3. Over-receipt allowance - truk Molindo hampir tidak pernah tepat 1.000 kg; timbangan berkata 1.002. Default allowance kecil (2-5% ⚠️) + override per item untuk RM cair, agar PR tidak terblokir oleh selisih timbangan. Kebalikannya (under-receipt) tetap harus sadar - qty diterima = qty yang dibayar.
  4. Allow multiple items per PO - ON; satu PO bisa campur beberapa fragrance oil dari distributor yang sama.
  5. Dua mekanisme pajak yang hidup berdampingan:
  6. Terms & Conditions Template = Hide - B2C/marketplace tidak butuhTerms di PO; dinyalakan kelak bila B2B distributor lahir (konsisten Peta Menu Rev3).
  7. Policy khas BMP (custom, bukan field bawaan):

Edge case:

  1. Toggle global vs realitas per-tipe-item (policy #1) = alasan BMP memindah validasi ke level item; mengandalkan toggle global = jasa selalu melanggar atau barang selalu lolos tanpa PO.
  2. maint_same_rate OFF tanpa guard = admin bisa salah ketik rate tanpa rem - mitigasinya policy #7 (auto-pull + konfirmasi).
  3. Allowance over-receipt terlalu longgar = stok & hutang menggelembung diam-diam; allowance adalah pagar, bukan izin bebas.
  4. Withholding category terlupa di supplier jasa = PPh 23 tidak terpotong = koreksi pajak akhir tahun yang menyakitkan (pengulangan sengaja dari Chapter A - ini kegagalan paling mahal di modul ini).
  5. Selisih kurs dibukukan ke PPV, tapi akuntan baru membacanya sebagai "harga naik" - laporan PPV harus dipisah dari analisis tren harga USD agar tidak menyesatkan negosiasi.

Delta v16 (subset register): validator allowance dipindah/diperketat di settings; payment schedule due date dinamis mengalir PO→PI; presisi conversion factor 9 desimal menyentuh baris PO.

Catatan scope BMP: adopsi penuh Buying Settings + dua mekanisme pajak; Hide: Terms & Conditions; keputusan BMP: PPV account, quarantine default, rate guard, kurs-basi warning, validasi PO per tipe item.

Chapter D - Reports

Mesin apa: mata purchasing - proyeksi untuk tiga pertanyaan: berapa tren harga bahanku, berapa utangku ke siapa, apa yang sedang jalan menuju gudang. Semuanya pembacaan atas PO/PR/PI, bukan penyimpan data.

Perilaku per laporan:

  1. Item-wise Purchase History - laporan terpenting modul ini untuk owner/R&D: riwayat harga per item per supplier per tanggal. Di bisnismu ia punya pekerjaan khusus: memisahkan tren harga global (USD) dari realisasi kas (IDR) - kenaikan Rp bisa berarti kurs naik, bukan supplier naik harga; keputusan budgeting fragrance oil bergantung pada pembacaan yang benar.
  2. Supplier Ledger - hutang per supplier; bahan baku cash-flow: kapan harus bayar IFF vs kapan dana cair dari marketplace.
  3. Purchase Order Analysis - pipeline barang jalan: PO terbuka, sebagian diterima, terlambat datang; membaca lead_time_days vs realita - input bagi perencanaan produksi (Manufacturing).
  4. Purchase Analytics - agregat bulanan per item group; melihat pergeseran komposisi belanja (mis. share biaya packaging naik).
  5. Lintas modul (bukan milik Buying tapi dipakai bersama): AR/AP Aging (Accounting), Batch Traceability (Quality/Stock - lot supplier → RM → Bulk → FG), Item Price Stock tidak relevan (Hide).

Edge case:

  1. Laporan harga membaca IDR saja = ilusi inflasi saat kurs melemah; BMP menampilkan kolom referensi USD berdampingan ⚠️ custom.
  2. PO Analysis jujur hanya sejauh lead_time_days diisi di master item - garbage in, garbage out.
  3. Supplier Ledger vs AP Aging harus rekonsiliasi; selisih = biasanya PI tanpa PO atau payment reconciliation terlambat.

Catatan scope BMP: ✅ Tampil: Item-wise Purchase History (dengan kolom USD referensi), Supplier Ledger, PO Analysis, Purchase Analytics; laporan selebihnya Hide sesuai Peta Menu.