Implementasi Procurement Workflow
N
Back to Blog

Implementasi Procurement Workflow

Tutorial
Nugroho Setiawan 11 Apr 2026 3 min baca 1,830 kata 67 views
Artikel ini membahas implementasi workflow pengadaan barang dan jasa yang efisien, dari identifikasi kebutuhan hingga pembayaran. Pelajari cara mengoptimalkan proses bisnis Anda menggunakan teknologi terkini untuk transparansi dan akuntabilitas.

Banyak organisasi, terutama di sektor kesehatan seperti rumah sakit dan klinik, menghadapi tantangan besar dalam manajemen pengadaan barang dan jasa. Proses manual seringkali lambat, rawan kesalahan manusia, kurang transparan, dan pada akhirnya menyebabkan pemborosan biaya yang signifikan. Bayangkan skenario di mana keterlambatan pengadaan obat esensial atau alat kesehatan vital dapat berdampak langsung pada kualitas pelayanan pasien dan bahkan nyawa. Sebuah studi menunjukkan bahwa proses pengadaan manual dapat meningkatkan biaya operasional hingga 15-20% karena inefisiensi dan kesalahan. Di era digital yang serba cepat ini, mengoptimalkan proses bisnis melalui teknologi bukan lagi pilihan, melainkan keharusan strategis untuk tetap kompetitif dan relevan. Procurement workflow yang terotomasi dapat menjadi tulang punggung efisiensi operasional, memungkinkan organisasi untuk bergerak lebih cepat, lebih akurat, dan lebih transparan. Artikel ini akan mengupas tuntas bagaimana mengimplementasikan procurement workflow yang efektif, mulai dari konsep dasar, detail teknis, contoh kode, hingga praktik terbaik yang dapat Anda terapkan segera. Kita akan membahas bagaimana solusi ini dapat diintegrasikan dengan sistem yang sudah ada seperti SIMRS, ERP, atau bahkan ekosistem SatuSehat. Tujuannya adalah membantu manajer operasional, pemilik klinik, dan manajer IT membuat keputusan yang lebih baik dan mengimplementasikan solusi yang konkret dan actionable.

Konsep Dasar Procurement Workflow dan Manfaatnya

Procurement workflow adalah serangkaian langkah terstruktur dan terotomasi yang mencakup seluruh siklus pengadaan, mulai dari identifikasi kebutuhan hingga pembayaran kepada vendor. Secara umum, siklus ini melibatkan tahapan kunci seperti Purchase Requisition (PR), Purchase Order (PO), Penerimaan Barang, Verifikasi Invoice, dan Pembayaran. Masing-masing tahapan ini memiliki peran krusial dalam memastikan barang atau jasa yang dibutuhkan tersedia tepat waktu dan sesuai standar. Dengan mengotomatiskan proses ini, organisasi dapat meminimalkan intervensi manual yang rentan terhadap kesalahan dan mempercepat siklus pengadaan secara keseluruhan.

Implementasi procurement workflow yang solid membawa berbagai manfaat signifikan. Pertama, efisiensi waktu dan biaya. Otomatisasi dapat mengurangi siklus pengadaan hingga 30-50%. Sebagai contoh konkret, sebuah Rumah Sakit Tipe C di Jawa Tengah berhasil mengurangi waktu persetujuan Purchase Requisition dari rata-rata 5 hari kerja menjadi hanya 2 hari setelah mengimplementasikan sistem workflow terintegrasi. Hal ini berdampak langsung pada ketersediaan stok obat dan alat kesehatan, serta mengurangi biaya lembur staf administratif. Kedua, transparansi dan akuntabilitas yang jauh lebih baik. Setiap langkah dalam workflow tercatat secara digital, menciptakan audit trail yang lengkap dan mudah diakses. Ini meminimalkan potensi fraud dan memastikan setiap pihak bertanggung jawab atas tugasnya.

Ketiga, pengurangan risiko operasional dan finansial. Dengan validasi otomatis dan persetujuan berjenjang, kesalahan manusia dapat diminimalkan. Sistem dapat dikonfigurasi untuk memastikan kepatuhan terhadap kebijakan internal dan regulasi eksternal, seperti Permenkes No. 14 Tahun 2021 tentang Standar Kegiatan Usaha dan Produk pada Penyelenggaraan Perizinan Berusaha Berbasis Risiko Sektor Kesehatan, yang mengatur standar pengadaan di fasilitas kesehatan. Keempat, pengambilan keputusan yang lebih baik berbasis data. Data pengadaan yang terpusat memungkinkan analisis mendalam tentang pengeluaran, kinerja vendor, dan tren pembelian. Ini membantu manajemen dalam negosiasi harga, pemilihan vendor strategis, dan perencanaan anggaran di masa depan. Kelima, peningkatan kepuasan vendor dan hubungan jangka panjang. Proses yang transparan dan pembayaran yang tepat waktu meningkatkan kepercayaan vendor, yang pada gilirannya dapat menghasilkan syarat dan ketentuan yang lebih menguntungkan bagi organisasi.

Secara keseluruhan, procurement workflow bukan hanya tentang efisiensi internal, tetapi juga tentang membangun ekosistem pengadaan yang lebih sehat dan berkelanjutan. Ini adalah fondasi penting untuk mencapai keunggulan operasional dan mendukung pertumbuhan bisnis yang terencana, terutama di sektor kesehatan yang sangat dinamis dan membutuhkan respons cepat terhadap kebutuhan pasien.

Detail Implementasi Teknis dan Integrasi Sistem

Untuk mengimplementasikan procurement workflow yang efektif, pemilihan platform dan arsitektur teknologi adalah krusial. Ada beberapa pilihan, mulai dari solusi ERP komersial seperti Odoo atau SAP yang memiliki modul pengadaan terintegrasi, hingga sistem manajemen workflow khusus seperti Camunda atau Activiti, atau bahkan pengembangan kustom menggunakan framework modern. Untuk fleksibilitas maksimal dan kontrol penuh, pengembangan kustom seringkali menjadi pilihan yang menarik, terutama bagi organisasi yang memiliki tim IT internal.

Dalam konteks pengembangan kustom, arsitektur microservices sangat direkomendasikan dibandingkan monolith, terutama untuk organisasi besar atau yang membutuhkan skalabilitas tinggi dan integrasi dengan berbagai sistem. Microservices memungkinkan setiap modul (misalnya, modul PR, modul PO, modul Vendor Management) beroperasi secara independen, memfasilitasi pengembangan paralel, deployment yang lebih cepat, dan toleransi kesalahan yang lebih baik. Sebagai basis data, PostgreSQL 16 adalah pilihan yang sangat robust dan open-source. PostgreSQL mendukung fitur canggih seperti JSONB, yang sangat berguna untuk menyimpan data semi-terstruktur atau metadata yang fleksibel, serta memiliki performa yang sangat baik untuk transaksi kompleks.

Untuk backend, framework seperti Laravel 11.x (PHP) atau Node.js 20 LTS (dengan Express.js atau NestJS) adalah pilihan populer. Laravel menonjol dalam rapid development dengan ekosistem yang kaya dan sintaksis yang elegan, ideal untuk membangun API RESTful yang kuat. Node.js 20 LTS, di sisi lain, sangat cocok untuk aplikasi real-time atau yang membutuhkan throughput tinggi berkat arsitektur non-blocking I/O-nya. Di sisi frontend, React 18 atau Vue 3 menawarkan pengalaman pengguna yang responsif dan interaktif, memungkinkan pengguna untuk mengelola workflow dengan mudah melalui dashboard yang intuitif.

Integrasi sistem adalah kunci keberhasilan procurement workflow, terutama di sektor kesehatan. Sistem pengadaan harus mampu berkomunikasi dengan: (1) SIMRS atau SIM Klinik: Untuk sinkronisasi data kebutuhan (misalnya, stok obat menipis dari modul farmasi), data pasien (untuk pengadaan alat kesehatan spesifik), dan data inventaris. Integrasi ini biasanya dilakukan melalui API RESTful. (2) Ekosistem SatuSehat/FHIR: Meskipun tidak secara langsung terkait pengadaan, pemahaman tentang standar FHIR R4 dan penggunaan HAPI FHIR 6.8 sangat penting. Meskipun saat ini pengadaan tidak langsung terintegrasi dengan FHIR, di masa depan, data klinis yang tersimpan di FHIR bisa menjadi pemicu kebutuhan pengadaan, misalnya, berdasarkan diagnosis pasien. (3) Sistem Akuntansi: Otomatisasi pembayaran vendor dan pencatatan keuangan memerlukan integrasi yang mulus dengan sistem akuntansi yang ada, seringkali menggunakan standar data seperti XML atau JSON untuk pertukaran invoice dan detail pembayaran.

Sebagai contoh skenario: Modul farmasi di SIMRS mendeteksi bahwa stok Paracetamol 500mg di gudang utama telah mencapai batas minimum (misalnya, 1000 tablet). Sistem secara otomatis memicu pembuatan draft Purchase Requisition (PR) untuk 5000 tablet Paracetamol dan mengirimkannya ke manajer farmasi untuk persetujuan. Setelah disetujui, PR tersebut diteruskan ke departemen pengadaan, yang kemudian membuat Purchase Order (PO) kepada vendor yang telah disetujui. Seluruh proses ini berjalan otomatis dengan notifikasi real-time kepada pihak-pihak terkait, mengurangi intervensi manual dan mempercepat pengadaan obat esensial.

Contoh Kode Implementasi Backend (Laravel)

Pada bagian ini, kita akan melihat contoh implementasi backend menggunakan Laravel 11.x untuk mengelola Purchase Requisition (PR). Kode ini akan menunjukkan bagaimana API endpoint dapat menerima data PR, melakukan validasi, dan menyimpannya ke database. Selain itu, kita juga akan melihat logika dasar untuk proses persetujuan (approval) dalam workflow pengadaan.

1. Controller untuk Membuat Purchase Requisition (PR)

Berikut adalah contoh kode untuk `PurchaseRequisitionController` yang menangani pembuatan PR baru. Endpoint ini akan menerima data PR melalui permintaan POST, melakukan validasi input, dan menyimpan data ke tabel `purchase_requisitions` dan `purchase_requisition_items`.

<?phpnamespace App\Http\Controllers\Api;use App\Http\Controllers\Controller;use App\Http\Requests\StorePurchaseRequisitionRequest;use App\Models\PurchaseRequisition;use Illuminate\Http\JsonResponse;use Illuminate\Support\Facades\DB;class PurchaseRequisitionController extends Controller{    /**     * Store a newly created purchase requisition in storage.     *     * @param  \App\Http\Requests\StorePurchaseRequisitionRequest  $request     * @return \Illuminate\Http\JsonResponse     */    public function store(StorePurchaseRequisitionRequest $request): JsonResponse    {        DB::beginTransaction();        try {            $pr = PurchaseRequisition::create([                'requester_id' => $request->user()->id, // Asumsi user login                'department' => $request->department,                'priority' => $request->priority,                'required_by_date' => $request->required_by_date,                'notes' => $request->notes,                'status' => 'PendingApproval', // Status awal PR            ]);            foreach ($request->items as $item) {                $pr->items()->create([                    'item_code' => $item['item_code'],                    'item_name' => $item['item_name'],                    'quantity' => $item['quantity'],                    'unit' => $item['unit'],                    'estimated_price' => $item['estimated_price'],                    'vendor_suggestion' => $item['vendor_suggestion'] ?? null,                ]);            }            DB::commit();            // Trigger event for notification to approver            // event(new PurchaseRequisitionCreated($pr));            return response()->json([                'message' => 'Purchase Requisition created successfully.',                'data' => $pr->load('items')            ], 201);        } catch (\Exception $e) {            DB::rollBack();            return response()->json([                'message' => 'Failed to create Purchase Requisition.',                'error' => $e->getMessage()            ], 500);        }    }}

Penjelasan kode di atas: Metode store menerima objek StorePurchaseRequisitionRequest, yang merupakan Form Request Laravel untuk validasi input. Ini memastikan bahwa semua data yang diperlukan (seperti requester_id, department, items, dll.) sudah valid sebelum disimpan. Transaksi database (DB::beginTransaction()) digunakan untuk memastikan atomisitas; jika terjadi kesalahan saat menyimpan item PR, seluruh transaksi akan di-rollback. Setelah PR utama dibuat, setiap item dalam PR akan disimpan sebagai relasi. Status awal PR diatur menjadi 'PendingApproval'. Setelah berhasil, respons JSON dikembalikan dengan status 201 (Created).

2. Logic untuk Workflow Approval

Selanjutnya, kita akan melihat bagaimana PR dapat disetujui atau ditolak. Ini seringkali melibatkan perubahan status PR dan mungkin pengiriman notifikasi ke pengguna berikutnya dalam alur kerja.

<?phpnamespace App\Http\Controllers\Api;use App\Http\Controllers\Controller;use App\Models\PurchaseRequisition;use Illuminate\Http\JsonResponse;use Illuminate\Http\Request;use Illuminate\Support\Facades\Auth;class PurchaseRequisitionApprovalController extends Controller{    /**     * Approve a purchase requisition.     *     * @param  \Illuminate\Http\Request  $request     * @param  \App\Models\PurchaseRequisition  $pr     * @return \Illuminate\Http\JsonResponse     */    public function approve(Request $request, PurchaseRequisition $pr): JsonResponse    {        // Asumsi ada gate/policy untuk otorisasi        if (!Auth::user()->can('approve', $pr)) {            return response()->json(['message' => 'Unauthorized to approve this PR.'], 403);        }        if ($pr->status !== 'PendingApproval') {            return response()->json(['message' => 'PR is not in PendingApproval status.'], 400);        }        $pr->update([            'status' => 'Approved',            'approved_by' => Auth::user()->id,            'approved_at' => now(),            'approval_notes' => $request->approval_notes,        ]);        // Trigger event for notification to next stage (e.g., Procurement Department)        // event(new PurchaseRequisitionApproved($pr));        return response()->json(['message' => 'Purchase Requisition approved successfully.', 'data' => $pr]);    }    /**     * Reject a purchase requisition.     *     * @param  \Illuminate\Http\Request  $request     * @param  \App\Models\PurchaseRequisition  $pr     * @return \Illuminate\Http\JsonResponse     */    public function reject(Request $request, PurchaseRequisition $pr): JsonResponse    {        // Asumsi ada gate/policy untuk otorisasi        if (!Auth::user()->can('reject', $pr)) {            return response()->json(['message' => 'Unauthorized to reject this PR.'], 403);        }        if ($pr->status !== 'PendingApproval') {            return response()->json(['message' => 'PR is not in PendingApproval status.'], 400);        }        $request->validate([            'rejection_reason' => 'required|string|min:10'        ]);        $pr->update([            'status' => 'Rejected',            'rejected_by' => Auth::user()->id,            'rejected_at' => now(),            'rejection_reason' => $request->rejection_reason,        ]);        // Trigger event for notification to requester        // event(new PurchaseRequisitionRejected($pr));        return response()->json(['message' => 'Purchase Requisition rejected.', 'data' => $pr]);    }}

Penjelasan kode di atas: Metode approve dan reject menerima objek PurchaseRequisition yang akan diupdate. Sebelum melakukan perubahan status, dilakukan pemeriksaan otorisasi (menggunakan Laravel Gates/Policies) untuk memastikan hanya pengguna yang berwenang yang dapat menyetujui atau menolak PR. Status PR diubah menjadi 'Approved' atau 'Rejected', dan informasi seperti siapa yang menyetujui/menolak serta waktu persetujuan/penolakan dicatat. Untuk notifikasi asinkron, event Laravel dapat dipicu (misalnya, PurchaseRequisitionApproved) yang kemudian akan ditangani oleh listener atau job queue untuk mengirim email atau notifikasi push kepada pihak terkait. Ini memastikan bahwa alur komunikasi dalam workflow berjalan efisien dan transparan.

Penanganan Data dan Kesalahan dalam Integrasi

Dalam implementasi procurement workflow, pertukaran data yang akurat dan penanganan kesalahan yang robust adalah dua pilar utama untuk memastikan sistem berjalan lancar. Struktur data yang konsisten antar sistem sangat vital, terutama saat berintegrasi dengan SIMRS, ERP, atau sistem akuntansi. Berikut adalah contoh payload JSON untuk pengajuan Purchase Requisition yang realistis, diikuti dengan skenario penanganan kesalahan.

Contoh Payload JSON untuk Purchase Requisition

Payload ini merepresentasikan data yang dikirimkan dari frontend atau sistem lain ke API backend untuk membuat PR baru. Struktur ini mencakup detail requester, departemen, prioritas, tanggal kebutuhan, catatan, serta daftar item yang diminta, lengkap dengan kode, nama, kuantitas, unit, estimasi harga, dan saran vendor.

{  
Terakhir diperbarui 21 Apr 2026

Komentar

Komentar ditinjau sebelum tampil.

Belum ada komentar. Jadilah yang pertama!