DEV Community

Cover image for Digitalisasi Alur Procurement B2B: Dari PO Manual ke Workflow Terotomasi
Mightyblue
Mightyblue

Posted on

Digitalisasi Alur Procurement B2B: Dari PO Manual ke Workflow Terotomasi

Ada satu pemandangan yang sangat familiar di kawasan industri Karawang, Bekasi, dan Purwakarta. Staf purchasing dengan tiga layar terbuka: WhatsApp untuk nego harga, Excel untuk rekap penawaran, dan email untuk kirim PO. Lalu ada satu map fisik berisi PO yang sudah ditandatangani, menunggu di-scan.

Sistemnya jalan. Tapi rapuh.

World Economic Forum dalam laporannya soal transformasi digital rantai pasok manufaktur mencatat bahwa hambatan terbesar bukan teknologi — melainkan proses yang tidak pernah didokumentasikan secara formal. Dan di situlah digitalisasi alur procurement B2B berhenti menjadi proyek IT, dan mulai menjadi proyek arsitektur data.

Masalahnya sederhana tapi mahal: ketika PO hilang, tidak ada yang tahu di titik mana ia hilang.

Landasan akademisnya cukup kuat. Sebuah studi tentang digitalisasi proses procurement dan dampaknya pada keberlanjutan rantai pasok yang diterbitkan di jurnal Sustainability menunjukkan korelasi antara maturitas digital procurement dengan penurunan lead time dan error rate transaksi.

Kami mengangkat tema ini karena posisi kami cukup spesifik: sebagai supplier yang melayani kawasan industri KIIC, KIM, Suryacipta, Jababeka, dan Delta Silicon sejak 2014, kami berada di sisi penerima PO. Kami melihat pola kegagalannya dari luar — PO ganda, revisi yang tidak tercatat, approval yang tidak jelas siapa yang memberi. Artikel ini menuliskan pola itu, dan bagaimana developer bisa merancang sistem yang menutupnya.

Intinya: Otomasi procurement bukan soal mengganti kertas dengan form digital. Ia soal membuat setiap perubahan state dapat ditelusuri, tidak dapat disangkal, dan tidak dapat dieksekusi dua kali. Tanpa audit trail, workflow digital hanyalah kekacauan yang lebih cepat.


1. Anatomi Kegagalan Procurement Manual

Sebelum merancang solusi, kita perlu jujur soal di mana tepatnya proses manual pecah. Bukan pada "kurang canggih", tapi pada titik-titik transisi antar-pihak yang tidak punya penanggung jawab tunggal.

Titik Buta Antar-Sistem

PO lahir di Excel. Disetujui via WhatsApp. Dikirim lewat email. Direkap ulang di sistem akuntansi.

Empat sistem. Empat kali penyalinan manual. Empat peluang typo.

Yang paling berbahaya bukan typo-nya. Tapi fakta bahwa tidak ada satu pun sistem yang memegang kebenaran tunggal (single source of truth). Ketika supplier bilang "PO-nya begini" dan buyer bilang "bukan, yang saya kirim begitu", tidak ada wasit.

Revisi Tanpa Jejak

Ini pembunuh diam-diam.

Quantity berubah dari 100 ke 150. Siapa yang minta? Kapan? Atas persetujuan siapa?

Di alur manual, jawabannya biasanya: "kayaknya waktu itu Pak Budi telepon."

Duplikasi Akibat Retry Manusia

Email tidak terkirim. Staf kirim ulang. Supplier terima dua kali. Barang dikirim dua kali.

Ini persis masalah yang di dunia backend sudah lama punya solusi baku. Konsepnya bernama idempotensi, dan pembahasan mendalamnya bisa dibaca di artikel Build Resilient Systems with Idempotent APIs oleh Karishma Shukla di DEV. Prinsipnya identik: request yang sama, dikirim berapa kali pun, hanya boleh menghasilkan satu efek.


2. Merancang State Machine untuk Purchase Order

Kesalahan paling umum saat digitalisasi alur procurement B2B adalah memodelkan PO sebagai baris data yang bisa di-update bebas. Padahal PO adalah objek dengan siklus hidup — dan siklus hidup paling tepat dimodelkan sebagai finite state machine.

Definisi State yang Eksplisit

Setiap PO hanya boleh berada di satu state pada satu waktu:

State Deskripsi Transisi Berikutnya yang Sah
draft Dibuat, belum diajukan submitted, cancelled
submitted Menunggu approval approved, rejected
approved Disetujui, dikirim ke supplier acknowledged, cancelled
acknowledged Dikonfirmasi supplier partially_received, received
partially_received Sebagian barang diterima received, closed
received Barang lengkap diterima closed
closed Selesai, terkunci
rejected Ditolak approver draft (revisi)

Aturan mainnya: transisi yang tidak ada di tabel harus ditolak di level aplikasi, bukan hanya disembunyikan di UI.

Guard Clause di Level Database

UI bisa di-bypass. API bisa dipanggil langsung.

Karena itu, constraint transisi sebaiknya juga hidup di database — lewat trigger atau check constraint yang menolak update state ilegal.

-- Contoh sederhana: cegah PO yang sudah closed diubah kembali
CREATE OR REPLACE FUNCTION guard_po_transition()
RETURNS TRIGGER AS $$
BEGIN
  IF OLD.status = 'closed' AND NEW.status <> 'closed' THEN
    RAISE EXCEPTION 'PO % sudah closed dan tidak dapat diubah', OLD.po_number;
  END IF;
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trg_guard_po_transition
BEFORE UPDATE ON purchase_orders
FOR EACH ROW EXECUTE FUNCTION guard_po_transition();
Enter fullscreen mode Exit fullscreen mode

Immutability Setelah Approval

Setelah PO masuk state approved, isinya tidak boleh diedit.

Butuh perubahan? Terbitkan revisi baru dengan nomor turunan (PO-2026-0451-R1), bukan menimpa yang lama. Yang lama tetap ada, sebagai bukti.


3. Membangun Audit Trail yang Benar-Benar Berguna

Banyak sistem mengaku punya audit trail, padahal yang mereka punya hanya kolom updated_at dan updated_by. Itu bukan audit trail. Itu jejak terakhir yang menghapus semua jejak sebelumnya.

Append-Only, Bukan Overwrite

Audit trail yang benar bersifat append-only: setiap peristiwa dicatat sebagai baris baru, dan tidak ada operasi UPDATE atau DELETE terhadapnya.

CREATE TABLE po_audit_log (
  id            BIGSERIAL PRIMARY KEY,
  po_id         UUID NOT NULL,
  event_type    TEXT NOT NULL,
  from_status   TEXT,
  to_status     TEXT,
  payload_diff  JSONB,
  actor_id      UUID NOT NULL,
  actor_role    TEXT NOT NULL,
  actor_ip      INET,
  occurred_at   TIMESTAMPTZ NOT NULL DEFAULT now()
);

CREATE INDEX idx_po_audit_po_id ON po_audit_log (po_id, occurred_at);
Enter fullscreen mode Exit fullscreen mode

Lima Pertanyaan yang Harus Bisa Dijawab

Audit trail Anda layak disebut audit trail kalau bisa menjawab lima hal ini tanpa perlu bertanya ke siapa pun:

  • Siapa yang melakukan perubahan (identitas, bukan sekadar username bersama)
  • Apa yang berubah (nilai sebelum dan sesudah, bukan hanya "diubah")
  • Kapan persisnya, dengan timezone yang eksplisit
  • Dari mana aksi itu berasal (IP, device, channel)
  • Atas dasar apa — referensi ke approval, email, atau dokumen pendukung

Menyimpan Diff, Bukan Snapshot Penuh

Menyimpan salinan lengkap PO setiap kali ada perubahan itu boros. Simpan diff dalam bentuk JSONB, lalu rekonstruksi state pada waktu tertentu dengan cara memutar ulang event dari awal.

Pendekatan ini dikenal sebagai event sourcing, dan untuk domain procurement ia sangat cocok — karena procurement memang secara natural adalah rangkaian peristiwa.


4. Idempotensi: Menutup Celah Duplikasi PO

Inilah bagian yang paling sering dilewatkan, dan paling mahal akibatnya. Dalam konteks digitalisasi alur procurement B2B, satu PO yang tereksekusi dua kali berarti barang dobel, invoice dobel, dan rekonsiliasi yang memakan waktu berhari-hari.

Idempotency Key pada Submission

Setiap submission PO harus membawa kunci unik yang dihasilkan klien:

// Klien membuat key sekali, dan menggunakannya ulang saat retry
const idempotencyKey = crypto.randomUUID();

async function submitPO(poData) {
  const res = await fetch('/api/purchase-orders', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Idempotency-Key': idempotencyKey
    },
    body: JSON.stringify(poData)
  });
  return res.json();
}
Enter fullscreen mode Exit fullscreen mode

Di sisi server, key ini disimpan bersama hasil eksekusi. Request kedua dengan key yang sama tidak dieksekusi ulang — ia mengembalikan hasil yang tersimpan.

Natural Key sebagai Lapis Kedua

Idempotency key melindungi dari retry teknis. Tapi tidak melindungi dari staf yang membuat PO baru untuk kebutuhan yang sama.

Lapis kedua: unique constraint pada kombinasi natural — misalnya (buyer_id, supplier_id, rfq_reference). Bukan untuk memblokir keras, tapi untuk memicu peringatan: "PO serupa sudah ada, lanjutkan?"

Webhook yang Aman Diulang

Notifikasi ke supplier, update ERP, dan trigger ke sistem gudang semuanya harus tahan terhadap pengiriman ganda. Konsumen webhook wajib melakukan deduplikasi berdasarkan event_id, bukan berasumsi pengirim hanya mengirim sekali.


5. Panduan Implementasi Bertahap

Kesalahan terbesar dalam proyek digitalisasi adalah mencoba mengganti semuanya sekaligus. Berikut urutan yang realistis untuk organisasi yang masih berjalan dengan proses manual.

HowTo: Migrasi dari PO Manual ke Workflow Terotomasi

Estimasi total: 8–12 minggu untuk organisasi menengah

Langkah 1 — Petakan alur nyata, bukan alur ideal (1 minggu)
Duduk bersama staf purchasing dan catat apa yang benar-benar mereka lakukan, termasuk jalur pintasnya. Jalur pintas itu bukan penyimpangan — itu kebutuhan yang belum terakomodasi.

Langkah 2 — Definisikan state machine dan matriks approval (1 minggu)
Tentukan state, transisi sah, dan siapa berwenang atas transisi mana. Ini dokumen kesepakatan, bukan dokumen teknis. Harus ditandatangani.

Langkah 3 — Bangun skema data dengan audit log sejak awal (2 minggu)
Audit trail yang ditambahkan belakangan hampir selalu bocor. Bangun bersamaan dengan tabel utama.

Langkah 4 — Implementasi idempotensi di seluruh entry point (1 minggu)
API, form, import CSV, dan integrasi email semuanya butuh perlindungan yang sama.

Langkah 5 — Jalankan paralel dengan proses lama (3 minggu)
Dua sistem berjalan bersamaan. Bandingkan hasilnya setiap minggu. Selisih yang muncul adalah bug — di sistem baru, atau di pemahaman Anda soal proses lama.

Langkah 6 — Migrasi bertahap per kategori (2 minggu)
Mulai dari kategori dengan volume tinggi tapi risiko rendah. Consumables sebelum capital equipment.

Langkah 7 — Matikan jalur lama dan kunci (1 minggu)
Selama jalur lama masih tersedia, sebagian orang akan tetap memakainya. Penutupannya harus tegas dan terjadwal.

Metrik yang Layak Dipantau

Metrik Baseline Manual (Tipikal) Target Pasca-Otomasi
Cycle time PO (request → approved) 3–5 hari kerja < 1 hari kerja
Tingkat PO duplikat 2–4% < 0,1%
PO tanpa jejak approval 15–30% 0%
Waktu rekonsiliasi bulanan 3–5 hari < 1 hari
Sengketa PO per 100 transaksi 5–8 < 1

Angka baseline di atas adalah rentang tipikal yang kami amati di lapangan, bukan hasil studi formal. Ukur baseline Anda sendiri sebelum menetapkan target.


6. Kesalahan yang Sering Terjadi

Ada beberapa pola kegagalan yang berulang di hampir setiap proyek digitalisasi procurement. Mengenalinya di awal jauh lebih murah daripada memperbaikinya setelah go-live.

Memindahkan Kekacauan, Bukan Memperbaikinya

Kalau proses manual Anda punya tujuh jalur approval yang saling tumpang tindih, mendigitalkannya apa adanya hanya menghasilkan tujuh jalur approval digital yang saling tumpang tindih.

Sederhanakan dulu. Baru otomatiskan.

Approval Berbasis Jabatan, Bukan Individu

Approver yang di-hardcode sebagai nama orang akan patah begitu orang itu resign atau cuti. Modelkan sebagai peran dengan delegasi eksplisit dan masa berlaku.

Melupakan Sisi Supplier

Sistem yang hebat di sisi buyer tapi memaksa supplier tetap membalas lewat WhatsApp hanya memindahkan titik putusnya. Sediakan portal atau setidaknya endpoint terstruktur untuk konfirmasi supplier.

Audit Trail yang Tidak Pernah Dibaca

Log yang tidak pernah di-query akan diam-diam rusak tanpa ada yang tahu. Jadwalkan review berkala — bahkan sekadar sampling bulanan sudah cukup untuk mendeteksi anomali.


FAQ

Apakah digitalisasi procurement wajib pakai ERP mahal?
Tidak. Banyak organisasi menengah berhasil dengan kombinasi database relasional, workflow engine ringan, dan portal supplier sederhana. ERP masuk akal ketika kompleksitas multi-entitas dan konsolidasi finansial sudah menjadi kebutuhan nyata, bukan sebelumnya.

Bagaimana menangani supplier yang menolak pakai portal?
Sediakan jalur email terstruktur dengan format yang bisa di-parse, dan lakukan normalisasi di sisi Anda. Adopsi supplier tidak bisa dipaksakan; ia harus dibuat lebih mudah daripada alternatifnya.

Berapa lama audit trail harus disimpan?
Minimal mengikuti ketentuan retensi dokumen perpajakan dan komersial yang berlaku. Untuk keperluan operasional, data tiga tahun terakhir sebaiknya tetap online dan dapat di-query cepat; selebihnya bisa diarsipkan ke penyimpanan yang lebih murah.

Apakah audit trail bisa dimanipulasi orang dalam?
Bisa, kalau ia hanya tabel biasa. Mitigasinya berlapis: pencabutan hak DELETE dan UPDATE di level database, replikasi ke penyimpanan terpisah, serta hash chaining antar-baris agar penyisipan atau penghapusan meninggalkan bekas.

Apa perbedaan audit trail dengan version history?
Version history menyimpan bagaimana dokumen berubah. Audit trail menyimpan siapa yang mengubahnya, kapan, dan dengan otoritas apa. Yang pertama menjawab "apa", yang kedua menjawab "siapa dan mengapa". Sistem procurement yang serius butuh keduanya.

Apakah pendekatan ini berlebihan untuk perusahaan kecil?
State machine dan idempotency key justru paling murah diterapkan saat sistem masih kecil. Yang mahal adalah menambahkannya setelah ada puluhan ribu transaksi historis yang tidak konsisten.


Kepercayaan Dibangun dari Jejak yang Bisa Ditelusuri

Mengakhiri pembahasan ini, ada satu hal yang layak digarisbawahi: nilai terbesar dari otomasi procurement bukan pada kecepatannya, melainkan pada kemampuannya menghilangkan perdebatan. Ketika setiap perubahan punya jejak, diskusi bergeser dari "siapa yang salah" menjadi "bagaimana memperbaikinya".

Bill Gates — pendiri Microsoft yang sepanjang kariernya berfokus pada bagaimana perangkat lunak mengubah cara organisasi bekerja — pernah menyampaikan prinsip yang relevan langsung dengan tema ini:

"The first rule of any technology used in a business is that automation applied to an efficient operation will magnify the efficiency. The second is that automation applied to an inefficient operation will magnify the inefficiency."

Kalimat itu tepat sasaran untuk konteks procurement. Otomasi bukan obat bagi proses yang kacau; ia adalah pengeras suara. Alur approval yang berantakan, ketika diotomatiskan, akan menghasilkan kekacauan dengan kecepatan yang jauh lebih tinggi dan cakupan yang jauh lebih luas.

Karena itu urutannya penting: pahami, sederhanakan, baru digitalkan.

Dari posisi kami sebagai supplier yang sejak 2014 melayani kawasan industri Karawang, Bekasi, Purwakarta, dan Subang, pola yang paling konsisten terlihat adalah ini — perusahaan yang alur procurement-nya rapi cenderung punya hubungan supplier yang lebih sehat, lead time yang lebih pendek, dan sengketa yang jauh lebih sedikit. Sistemnya bukan penyebab, tapi cerminan.

Bagi tim yang sedang memetakan kebutuhan supply industri sekaligus membenahi alur procurement-nya, diskusi teknis soal spesifikasi, lead time, dan format PO bisa dilanjutkan melalui Duta Swarna Group.

Selamat membenahi. Mulailah dari memetakan alur yang sebenarnya — bukan alur yang tertulis di SOP.


Punya pengalaman migrasi procurement dari manual ke terotomasi? Bagian mana yang paling sulit — teknisnya, atau meyakinkan orangnya? Ceritakan di kolom komentar.

Top comments (0)