Optimalkan Stok Medis: Konfigurasi Min-Max & Auto Purchase Request untuk Efisiensi Operasional
N
Kembali ke Blog

Optimalkan Stok Medis: Konfigurasi Min-Max & Auto Purchase Request untuk Efisiensi Operasional

Tutorial
Nugroho Setiawan 10 Jun 2026 14 min baca 2,758 kata 1 views
Manajemen stok yang efisien adalah kunci operasional layanan kesehatan. Pelajari cara mengimplementasikan sistem min-max stock dengan otomatisasi permintaan pembelian untuk mengurangi biaya, mencegah kekosongan, dan meningkatkan kepuasan pasien. Artikel ini akan memandu Anda langkah demi langkah.

Dalam lingkungan operasional rumah sakit dan klinik, manajemen inventaris yang presisi bukan sekadar praktik terbaik, melainkan sebuah keharusan krusial. Kekurangan stok obat-obatan vital atau alat medis dapat berakibat fatal pada kualitas layanan pasien, sementara kelebihan stok justru membebani anggaran operasional dengan biaya penyimpanan, risiko kadaluarsa, dan potensi kerugian. Bayangkan sebuah klinik yang kehabisan vaksin flu di puncak musim, atau rumah sakit yang harus membuang ribuan ampul obat karena melewati batas kadaluarsa. Situasi seperti ini tidak hanya merugikan finansial, tetapi juga merusak reputasi dan kepercayaan publik. Tantangan utamanya adalah menyeimbangkan ketersediaan yang optimal dengan efisiensi biaya. Bagaimana memastikan item yang tepat selalu tersedia dalam jumlah yang tepat, pada waktu yang tepat, tanpa pemborosan?

Artikel ini akan mengupas tuntas solusi cerdas melalui konfigurasi sistem min-max stock yang terintegrasi dengan otomatisasi permintaan pembelian (auto purchase request). Kami akan membahas konsep dasar, detail implementasi menggunakan contoh nyata dari platform ERP dan pengembangan kustom, menyajikan contoh kode yang dapat dijalankan, serta membahas praktik terbaik dan penanganan kendala yang mungkin muncul. Tujuannya adalah memberikan panduan praktis dan mendalam bagi para manajer operasional, manajer IT rumah sakit, pemilik klinik, dan pengambil keputusan untuk mentransformasi manajemen inventaris mereka menjadi lebih efisien, responsif, dan hemat biaya, memastikan kelancaran operasional dan kualitas layanan kesehatan yang prima.

Konsep Dasar Min-Max Stock dan Otomatisasi Permintaan Pembelian

Sistem min-max stock adalah metode kontrol inventaris yang menetapkan batas minimum (reorder point) dan maksimum untuk setiap item stok. Ketika jumlah stok suatu item mencapai atau turun di bawah batas minimum, sistem akan secara otomatis memicu permintaan pembelian untuk mengisi kembali stok hingga mencapai batas maksimum yang telah ditentukan. Konsep ini sangat efektif untuk mengelola ribuan item dengan tingkat konsumsi yang bervariasi, memastikan ketersediaan tanpa penumpukan berlebihan.

Misalnya, sebuah rumah sakit menetapkan batas minimum 50 unit untuk obat antibiotik tertentu dan batas maksimum 200 unit. Jika stok antibiotik tersebut turun menjadi 48 unit, sistem akan menghasilkan permintaan pembelian otomatis untuk 152 unit (200 - 48), atau jumlah yang telah ditetapkan untuk pembelian per pesanan (misalnya, kelipatan 50 atau 100 unit), agar stok kembali ke level yang optimal. Penentuan nilai minimum dan maksimum ini tidak dilakukan secara sembarangan. Reorder Point (RP) atau batas minimum seringkali dihitung menggunakan rumus: RP = (Lead Time x Daily Usage) + Safety Stock. Lead Time adalah waktu yang dibutuhkan pemasok untuk mengirimkan barang. Daily Usage adalah rata-rata konsumsi harian. Safety Stock adalah persediaan pengaman untuk mengantisipasi fluktuasi permintaan atau keterlambatan pengiriman. Sementara itu, batas maksimum biasanya mempertimbangkan kapasitas penyimpanan, biaya holding, dan frekuensi pemesanan yang diinginkan.

Otomatisasi permintaan pembelian (auto purchase request) adalah evolusi dari sistem min-max stock. Setelah sistem mendeteksi stok di bawah batas minimum, alih-alih hanya memberi notifikasi, ia langsung membuat draf permintaan pembelian atau bahkan pesanan pembelian ke pemasok yang telah ditentukan. Ini mengurangi intervensi manual yang rentan kesalahan, mempercepat siklus pengadaan, dan memastikan pasokan tidak terputus. Manfaat utamanya meliputi pengurangan biaya operasional karena minimnya tenaga kerja manual, pencegahan stock-out yang berpotensi merugikan layanan, optimalisasi modal kerja dengan menghindari penumpukan stok berlebihan, dan peningkatan akurasi data inventaris secara keseluruhan. Implementasi yang tepat dapat menghasilkan penghematan signifikan, dengan beberapa institusi melaporkan penurunan biaya holding hingga 15-20% dan peningkatan ketersediaan stok hingga 99%.

Detail Implementasi dalam Sistem Informasi

Implementasi konfigurasi min-max stock dengan auto purchase request dapat dilakukan melalui sistem ERP (Enterprise Resource Planning) yang sudah ada atau dengan pengembangan kustom. Salah satu platform ERP yang populer dan fleksibel adalah Odoo. Untuk konteks layanan kesehatan, Odoo 16 menyediakan modul Inventory dan Purchase yang kuat, cocok untuk kebutuhan SIMRS atau SIM Klinik. Dalam Odoo 16, fitur ini dikenal sebagai 'Reordering Rules'.

Langkah-langkah konfigurasi di Odoo 16 umumnya meliputi:

  1. Aktivasi Fitur Inventory Lanjutan: Pastikan Anda telah mengaktifkan fitur seperti 'Storage Locations' dan 'Multi-Step Routes' di modul Inventory Odoo. Ini memungkinkan kontrol yang lebih granular terhadap pergerakan dan lokasi stok.
  2. Definisi Produk: Setiap item medis atau farmasi harus didefinisikan dengan benar dalam sistem. Pastikan untuk mengisi informasi penting seperti 'Lead Time' dari vendor (waktu pengiriman), 'Unit of Measure', dan 'Vendor' yang relevan. Data 'Lead Time' ini krusial untuk perhitungan reorder point yang akurat.
  3. Konfigurasi Reordering Rules: Navigasi ke modul Inventory > Configuration > Reordering Rules. Di sini, Anda dapat membuat aturan baru untuk setiap produk. Untuk setiap aturan, Anda perlu menetapkan:
    • Minimum Quantity: Jumlah stok minimum yang memicu permintaan pembelian.
    • Maximum Quantity: Jumlah stok maksimum yang ingin dicapai setelah pembelian.
    • Quantity to Order: Jumlah yang akan dipesan setiap kali aturan dipicu (bisa sama dengan Maximum Quantity - Current Stock, atau kelipatan tertentu).
    • Location: Lokasi penyimpanan di mana aturan ini berlaku.
    • Preferred Route: Rute pengadaan (misalnya, beli dari vendor).
  4. Jadwalkan Run Scheduler: Odoo memiliki 'Scheduler' yang berjalan secara berkala (misalnya, setiap jam atau setiap malam). Scheduler ini bertanggung jawab untuk mengevaluasi semua 'Reordering Rules' dan secara otomatis membuat 'Purchase Order' atau 'Purchase Request' jika kondisi terpenuhi. Anda dapat mengkonfigurasi frekuensi scheduler di menu Technical > Automation > Scheduled Actions. Pastikan 'Run Scheduler' untuk 'Reordering Rules' diaktifkan dan diatur sesuai kebutuhan operasional.

Integrasi Odoo dengan database PostgreSQL 16 memastikan performa yang cepat dan keandalan data. Untuk pengembangan kustom, sistem dapat dibangun menggunakan framework seperti Laravel 11.x dengan PHP 8.3, yang terhubung ke database serupa. Pendekatan kustom memberikan fleksibilitas penuh untuk menyesuaikan logika bisnis yang sangat spesifik atau mengintegrasikan dengan sistem legacy seperti SIMRS yang sudah ada melalui API.

Contoh Kode Implementasi Logika Min-Max

Dalam skenario pengembangan kustom, logika min-max stock dapat diimplementasikan menggunakan bahasa pemrograman seperti PHP dengan framework Laravel. Berikut adalah contoh sederhana bagaimana Anda bisa mengimplementasikan logika pengecekan stok dan pemicu permintaan pembelian otomatis.

Pertama, kita perlu memastikan tabel produk atau inventaris memiliki kolom untuk menyimpan batas minimum dan maksimum stok. Berikut adalah contoh migrasi database di Laravel 11.x:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class AddMinMaxStockToInventoryItemsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('inventory_items', function (Blueprint $table) {
$table->integer('min_stock_level')->default(0)->after('current_stock');
$table->integer('max_stock_level')->default(0)->after('min_stock_level');
$table->integer('reorder_quantity')->default(0)->after('max_stock_level');
});
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('inventory_items', function (Blueprint $table) {
$table->dropColumn(['min_stock_level', 'max_stock_level', 'reorder_quantity']);
});
}
}

Migrasi di atas menambahkan tiga kolom baru ke tabel inventory_items: min_stock_level (batas minimum), max_stock_level (batas maksimum), dan reorder_quantity (jumlah yang akan dipesan saat reorder). Setelah migrasi dijalankan, Anda dapat mengisi nilai-nilai ini untuk setiap item inventaris.

Selanjutnya, kita akan membuat sebuah kelas atau metode yang bertugas untuk mengecek stok secara berkala dan memicu permintaan pembelian jika diperlukan. Ini bisa dijalankan sebagai scheduled task di Laravel (menggunakan Cron Job).

<?php

namespace App\Services;

use App\Models\InventoryItem;
use App\Models\PurchaseRequest;
use Illuminate\Support\Facades\Log;

class StockAutomationService
{
public function checkAndCreatePurchaseRequests(): void
{
Log::info('Running stock automation service...');

$itemsToReorder = InventoryItem::whereColumn('current_stock', '<=', 'min_stock_level')
->where('is_active', true) // Hanya item aktif
->get();

foreach ($itemsToReorder as $item) {
// Cek apakah sudah ada Purchase Request yang pending untuk item ini
// dalam periode tertentu (misal, 24 jam terakhir) untuk menghindari duplikasi
$existingPendingRequest = PurchaseRequest::where('inventory_item_id', $item->id)
->where('status', 'pending')
->where('created_at', '>=', now()->subHours(24))
->first();

if ($existingPendingRequest) {
Log::info("Pending purchase request already exists for item {$item->name}. Skipping.");
continue;
}

$quantityToOrder = $item->reorder_quantity > 0 ? $item->reorder_quantity : ($item->max_stock_level - $item->current_stock);

if ($quantityToOrder <= 0) {
Log::warning("Calculated quantity to order for {$item->name} is non-positive. Skipping.");
continue;
}

try {
PurchaseRequest::create([
'inventory_item_id' => $item->id,
'quantity' => $quantityToOrder,
'requested_by' => 'SYSTEM_AUTOMATION', // Atau ID user sistem
'status' => 'pending',
'notes' => "Automatic reorder triggered by min-max stock level. Current stock: {$item->current_stock}, Min stock: {$item->min_stock_level}."
]);
Log::info("Created automatic purchase request for {$item->name}, quantity {$quantityToOrder}.");
} catch (\Exception $e) {
Log::error("Failed to create purchase request for {$item->name}: " . $e->getMessage());
}
}
Log::info('Stock automation service finished.');
}
}

Kode PHP 8.3 di atas mendefinisikan sebuah service yang akan mencari semua item inventaris yang stoknya berada di bawah atau sama dengan batas minimumnya. Untuk setiap item yang memenuhi kriteria, sistem akan memeriksa apakah sudah ada permintaan pembelian yang pending untuk item tersebut dalam 24 jam terakhir untuk mencegah duplikasi. Jika tidak ada, sistem akan menghitung jumlah yang perlu dipesan (menggunakan reorder_quantity jika tersedia, atau selisih antara max_stock_level dan current_stock) dan membuat entri baru di tabel purchase_requests dengan status 'pending'. Proses ini kemudian akan di-log untuk keperluan audit dan monitoring. Service ini dapat dipanggil oleh Laravel Scheduler, misalnya setiap 30 menit atau setiap jam.

Contoh Payload dan Penanganan Error

Dalam arsitektur sistem yang terintegrasi, permintaan pembelian otomatis seringkali dikirimkan melalui API ke modul pembelian atau bahkan langsung ke sistem vendor tertentu. Berikut adalah contoh payload JSON yang realistis untuk permintaan pembelian yang dihasilkan secara otomatis oleh sistem:

{
"request_id": "PR-AUTO-20240726-001",
"item_details": [
{
"item_code": "ANTIBIO-001",
"item_name": "Amoxicillin 500mg Kapsul",
"quantity_requested": 150,
"unit_of_measure": "Kapsul",
"vendor_code": "PHARMA-SUPP-A",
"vendor_name": "PT. Pharma Sejahtera"
}
],
"requested_by": "SYSTEM_AUTOMATION",
"request_date": "2024-07-26T10:30:00Z",
"reason": "Automatic reorder triggered by min-max stock level for item ANTIBIO-001. Current stock: 45, Min stock: 50.",
"priority": "normal",
"delivery_location": "Gudang Farmasi Utama"
}

Payload di atas mencakup informasi esensial seperti ID permintaan, detail item yang dipesan (kode, nama, kuantitas, unit, vendor), siapa yang meminta (dalam hal ini, sistem otomatis), tanggal permintaan, alasan pemicu, prioritas, dan lokasi pengiriman. Payload ini kemudian akan diproses oleh API modul pembelian, yang selanjutnya dapat menghasilkan Purchase Order (PO) yang dikirim ke vendor.

Meskipun otomatisasi dirancang untuk efisiensi, situasi error tak terduga selalu mungkin terjadi. Salah satu skenario error umum adalah ketika sistem gagal membuat permintaan pembelian karena data master yang tidak lengkap, atau ada masalah konektivitas dengan API vendor. Contoh pesan error yang mungkin muncul:

{
"status": "error",
"code": "PR_001_INVALID_VENDOR",
"message": "Purchase request failed: Vendor 'PHARMA-SUPP-A' is inactive or not found for item 'ANTIBIO-001'. Manual intervention required.",
"timestamp": "2024-07-26T10:30:05Z",
"details": "Check vendor master data and item-vendor linkage."
}

Penanganan error yang efektif sangat krusial. Ketika sistem otomatis menemukan error seperti di atas, beberapa langkah harus diambil:

  1. Logging Detail: Semua error harus dicatat secara detail dalam log sistem (misalnya, menggunakan Laravel's Monolog atau integrasi dengan Sentry/ELK Stack). Log ini harus mencakup waktu kejadian, pesan error, ID transaksi yang terkait, dan konteks data yang menyebabkan error.
  2. Notifikasi Real-time: Tim operasional atau purchasing harus menerima notifikasi real-time (email, SMS, notifikasi di dashboard) mengenai kegagalan ini. Notifikasi harus jelas dan langsung mengarah pada tindakan yang diperlukan.
  3. Sistem Fallback dan Override Manual: Harus ada mekanisme untuk membuat permintaan pembelian secara manual jika otomatisasi gagal. Tim purchasing harus dapat meninjau error, memperbaiki data dasar (misalnya, mengaktifkan vendor), dan kemudian membuat PR secara manual atau mencoba memicu ulang otomatisasi.
  4. Monitoring dan Alarm: Implementasikan sistem monitoring (misalnya, Prometheus dengan Grafana) untuk memantau metrik seperti jumlah permintaan pembelian yang gagal atau waktu respons API. Atur alarm untuk ambang batas tertentu agar tim dapat proaktif menanggapi masalah sebelum berdampak luas.
  5. Analisis Akar Masalah: Error yang berulang harus dianalisis akar masalahnya. Apakah karena data master yang sering tidak valid? Apakah ada masalah stabilitas API? Perbaikan berkelanjutan berdasarkan analisis ini sangat penting.

Best Practices

  1. Validasi dan Akurasi Data Master: Pastikan data master produk (nama, kode, unit, lead time, vendor) dan data stok (current stock) selalu akurat dan real-time. Data yang tidak valid adalah penyebab utama kegagalan otomatisasi. Lakukan audit data secara berkala, minimal bulanan, untuk memastikan integritas data.
  2. Review dan Penyesuaian Parameter Berkala: Nilai min-max stock dan reorder quantity tidak statis. Lakukan review minimal setiap kuartal atau semester, serta saat terjadi perubahan signifikan pada pola permintaan, lead time vendor, atau kebijakan pengadaan. Gunakan data historis penjualan atau konsumsi untuk mengoptimalkan parameter ini.
  3. Integrasi End-to-End yang Kuat: Pastikan sistem manajemen stok terintegrasi dengan modul pembelian, penjualan/distribusi, dan akuntansi. Integrasi yang mulus (misalnya menggunakan API RESTful dengan standar FHIR R4 untuk data medis jika memungkinkan) akan memastikan aliran data yang konsisten dan mengurangi entri manual, menghindari silo informasi.
  4. Pelatihan Pengguna dan Adopsi Sistem: Berikan pelatihan yang komprehensif kepada staf operasional dan purchasing tentang cara kerja sistem otomatisasi, bagaimana meninjau permintaan yang dibuat, dan bagaimana menangani pengecualian atau error. Adopsi yang baik oleh pengguna adalah kunci keberhasilan.
  5. Implementasi Safety Stock yang Tepat: Selain min-max, pertimbangkan untuk menambahkan 'safety stock' untuk item-item kritikal atau yang memiliki fluktuasi permintaan tinggi. Safety stock bertindak sebagai bantalan terhadap ketidakpastian pasokan atau lonjakan permintaan yang tidak terduga, dihitung berdasarkan deviasi standar permintaan dan lead time.
  6. Monitoring Kinerja dan Audit Rutin: Pantau secara aktif kinerja sistem otomatisasi, termasuk waktu respons, jumlah permintaan yang berhasil/gagal, dan dampak pada level stok keseluruhan. Lakukan audit internal secara rutin untuk memastikan kepatuhan terhadap prosedur dan efektivitas konfigurasi.
  7. Evaluasi Kinerja Vendor: Kinerja vendor (terutama lead time dan keandalan pengiriman) secara langsung memengaruhi efektivitas sistem min-max. Lakukan evaluasi vendor secara berkala untuk memastikan mereka memenuhi Service Level Agreement (SLA) dan sesuaikan parameter sistem jika ada perubahan signifikan pada kinerja vendor.
  8. Skalabilitas dan Fleksibilitas Sistem: Rancang sistem agar dapat diskalakan sesuai pertumbuhan operasional dan fleksibel untuk mengakomodasi perubahan kebijakan atau kebutuhan bisnis di masa depan. Gunakan arsitektur modular dan API yang terbuka.
  9. Kepatuhan Regulasi: Terutama untuk industri kesehatan, pastikan seluruh proses dan dokumentasi pengadaan serta manajemen stok mematuhi regulasi yang berlaku, seperti Peraturan Menteri Kesehatan (PMK) terkait farmasi dan alat kesehatan, serta standar akreditasi rumah sakit.

FAQ

  1. Apa perbedaan utama antara Min-Max Stock dengan Reorder Point saja?

    Min-Max Stock adalah strategi yang lebih komprehensif karena tidak hanya menetapkan titik kapan harus memesan (minimum/reorder point) tetapi juga berapa banyak yang harus dipesan untuk mencapai target level stok (maksimum). Reorder Point (ROP) hanya fokus pada pemicu pemesanan ketika stok mencapai level tertentu, tanpa secara eksplisit menentukan batas atas. Min-Max membantu mengontrol inventaris agar tidak terlalu sedikit atau terlalu banyak, sementara ROP lebih fokus pada pencegahan kehabisan stok.

  2. Bagaimana cara menentukan nilai Min-Max yang optimal untuk setiap item?

    Penentuan nilai Min-Max optimal memerlukan analisis data historis yang cermat. Untuk Min, gunakan rumus Reorder Point: (Rata-rata Penggunaan Harian x Lead Time) + Safety Stock. Untuk Max, pertimbangkan biaya penyimpanan, frekuensi pemesanan yang diinginkan, diskon kuantitas dari vendor, dan kapasitas gudang. Alat analisis seperti statistik deskriptif, peramalan permintaan, dan simulasi dapat sangat membantu dalam mengoptimalkan nilai-nilai ini.

  3. Apakah sistem Min-Max Stock cocok untuk semua jenis barang di rumah sakit/klinik?

    Sistem Min-Max Stock sangat cocok untuk barang-barang dengan permintaan yang relatif stabil dan dapat diprediksi, seperti obat-obatan rutin, alat suntik, atau perlengkapan kebersihan. Untuk barang-barang dengan permintaan sangat tidak teratur, sangat mahal, atau memiliki tanggal kadaluarsa yang sangat singkat (misalnya, darah atau isotop radioaktif), mungkin diperlukan metode manajemen inventaris lain seperti Just-In-Time (JIT) atau Made-to-Order. Kombinasi beberapa strategi seringkali menjadi pendekatan terbaik.

  4. Apa tantangan utama dalam implementasi otomatisasi Purchase Request?

    Tantangan utama meliputi akurasi data master yang sering tidak konsisten, resistensi dari staf yang terbiasa dengan proses manual, kompleksitas integrasi dengan berbagai sistem (SIMRS, ERP, sistem vendor), serta kebutuhan untuk secara terus-menerus memantau dan menyesuaikan parameter Min-Max. Membangun kepercayaan pada sistem otomatisasi dan memastikan data yang bersih adalah kunci untuk mengatasi tantangan ini.

  5. Bagaimana jika ada perubahan mendadak dalam permintaan (misalnya, wabah penyakit)?

    Dalam kasus perubahan permintaan mendadak, sistem otomatisasi Min-Max mungkin perlu intervensi manual sementara. Penting untuk memiliki mekanisme darurat yang memungkinkan staf operasional untuk secara cepat menyesuaikan parameter Min-Max, membuat pesanan darurat, atau override sistem. Data historis dari kejadian serupa (jika ada) dapat digunakan untuk membuat skenario dan menyesuaikan safety stock di masa depan. Fleksibilitas sistem sangat penting dalam menghadapi ketidakpastian.

  6. Perlukah integrasi dengan sistem vendor eksternal untuk otomatisasi PR?

    Integrasi langsung dengan sistem vendor eksternal (misalnya melalui EDI atau API vendor) dapat lebih meningkatkan efisiensi dengan mengirimkan Purchase Order secara otomatis tanpa intervensi manual. Namun, ini memerlukan kesepakatan teknis dan bisnis yang kuat dengan vendor. Jika integrasi langsung tidak memungkinkan, otomatisasi permintaan pembelian internal yang kemudian ditinjau dan dikirim manual oleh tim purchasing tetap memberikan manfaat signifikan dalam mengurangi beban kerja dan mempercepat proses internal.

Implementasi sistem min-max stock dengan otomatisasi permintaan pembelian adalah investasi strategis yang akan membawa efisiensi signifikan bagi operasional layanan kesehatan Anda. Dengan mengurangi kekosongan stok, meminimalkan kelebihan persediaan, dan mempercepat proses pengadaan, Anda tidak hanya menghemat biaya tetapi juga memastikan kualitas layanan pasien tetap optimal. Era digital menuntut setiap organisasi untuk merangkul teknologi guna mencapai keunggulan operasional. Jangan biarkan manajemen inventaris menjadi penghambat pertumbuhan dan efisiensi Anda.

Jika Anda membutuhkan bantuan dalam merancang, mengembangkan, atau mengimplementasikan solusi manajemen inventaris yang terintegrasi penuh dengan SIMRS, SIM Klinik, atau sistem ERP kustom, tim Nugroho Setiawan siap menjadi mitra Anda. Dengan pengalaman mendalam dalam berbagai sistem informasi kesehatan dan manajemen operasional, kami akan membantu Anda menciptakan solusi yang tepat, efisien, dan berkelanjutan. Hubungi kami untuk konsultasi lebih lanjut dan mulailah perjalanan Anda menuju operasional yang lebih cerdas dan responsif.

Terakhir diperbarui 10 Jun 2026

Komentar

Komentar ditinjau sebelum tampil.

Belum ada komentar. Jadilah yang pertama!