Case Study · Enterprise ERP System
Di lantai produksi PT. Mada Wikri Tunggal, setiap material yang bergerak mengikuti sebuah kartu fisik — disebut Kartu Travel. Kartu ini adalah satu-satunya jejak yang mencatat material telah melewati proses apa, dari mana, menuju mana.
Masalahnya: kartu ini dari kertas. Di lantai pabrik yang ramai dengan mesin, oli, dan pergerakan forklift, kartu itu robek, kotor, dan hilang. Ketika hilang, riwayat satu lot material ikut hilang bersamanya. PPIC tidak tahu stok sesungguhnya sampai rekap Excel malam hari selesai dikerjakan — 24 jam kemudian.
Dalam kondisi itu, kesalahan ketik satu digit pada kode part yang mirip bisa mengakibatkan pengurangan stok yang salah — dan satu insiden seperti itu nilainya bisa mencapai puluhan juta rupiah.
Tantangan sesungguhnya bukan memindahkan Excel ke web. Tantangannya adalah membangun sistem yang bisa dipercaya oleh 50+ operator yang mengaksesnya bersamaan, memproses 600 transaksi per hari, tanpa satu pun yang boleh double-counted atau terlewat.
Setiap tantangan itu bisa mengakibatkan kerugian nyata jika tidak ditangani di level arsitektur database — bukan hanya di level UI.
Saya merancang sistem dengan 78 tabel relasional di MariaDB yang merepresentasikan 15 tahap alur kerja dari Procurement hingga Shipping. Tiga pola kritis yang menjadi tulang punggung integritas data:
DB::transaction() + lockForUpdate() memastikan tidak ada double-receive pada PO yang sama.
ERD dibangun berpusat pada tiga tabel kritis: m_part (master material), t_spk (work order), dan t_finish_good_out (pengiriman). Dengan composite index dan covering index (idx_spk_status), query yang awalnya lambat pada volume 600 transaksi/hari tetap responsif tanpa timeout.
// ReceivingController — mencegah double-receive pada PO yang sama
public function processReceiving($poId)
{
return DB::transaction(function () use ($poId) {
$po = PurchaseOrder::lockForUpdate()->findOrFail($poId);
if ($po->status === 'received') {
throw new \Exception('PO sudah diterima oleh user lain.');
}
$po->update(['status' => 'received']);
// ... BOM backflush logic
});
}
Sistem berjalan di production dengan beban nyata sejak awal 2024. Ini bukan prototype — ini sistem operasional yang menggantikan seluruh proses kertas di lantai pabrik:
"Yang paling berdampak bukan fiturnya — tapi keputusan arsitektur di level database yang memastikan tidak ada satu transaksi pun yang bisa bocor, terduplikasi, atau hilang, bahkan ketika 50 orang mengakses sistem secara bersamaan."