INCOVE KOSMESIA 2026Innovation Convention, kategori Suggestion System

Stok apotek tersinkron otomatis dengan Accurate.

Otomatisasi Sinkronisasi Stok Apotek Sistem Klinik dengan Accurate melalui Integrasi Webhook API

Pembuat
Muhammad Badruzzaman Ahdany
Unit bisnis
PT Kosmetika Klinik Indonesia
Kategori
Delivery, Improvement Baru
CR031 Acne Blemish Booster
Accurate 23
Sistem klinik 0

Tidak sinkron, FO tidak bisa transaksi

Alur presentasi: 12 langkah penyusunan SS

Klik langkah mana pun untuk langsung menuju ke sana.

Langkah 1 dari 12

Profile & latar belakang masalah

Nama
Muhammad Badruzzaman Ahdany
Jabatan
IT Head of Development
Unit bisnis
PT Kosmetika Klinik Indonesia
Atasan
Tyar Septa
Lokasi penemuan
Apotek, Modul Sistem Klinik
Ditemukan
20 Juni 2026
Diusulkan
22 Juni 2026
Diimplementasi
29 Juni 2026

Semua data stok farmasi dikelola di Accurate. Sistem klinik punya basis data stok sendiri yang tidak terhubung.

Penerimaan barang sudah dicatat lengkap di Accurate, tetapi apotek tetap harus memasukkannya lagi ke sistem klinik secara manual, dan nilainya hanya data sementara yang tidak mencerminkan penerimaan riil.

Masalah yang dihadapi Stok di sistem klinik tidak sinkron dengan Accurate dan tidak sesuai fisik: kadang 0 padahal barang ada, kadang tercatat ada padahal barang habis. Akibatnya transaksi Front Office terhambat, pasien yang sudah membayar bisa tidak mendapat produknya, dan apotek mengerjakan input ganda.

Selaras dengan prioritas perusahaan: kecepatan layanan pasien di FO dan akurasi persediaan sebagai dasar keputusan pengadaan.

Langkah 2 dari 12

Analisa kondisi teknis & non teknis

  • Dua basis data stok. Accurate memegang stok riil; sistem klinik (CodeIgniter HMVC) menyimpan tb_stock_produk sendiri tanpa kanal penghubung.
  • Stok klinik hanya bergerak di dua titik. Turun saat pembayaran lunas (Pembayaran_akun → update_keluar), naik saat apoteker mengisi form Terima Produk.
  • Produk grup tidak punya stok sendiri. Paket seperti CR031 (booster + tube) stoknya mengikuti bahan acuan atau kode varian berakhiran "A".
  • Arah sebaliknya sengaja batch. Penjualan klinik dikirim ke Accurate malam hari setelah closing (SOP accounting), jadi selama jam buka Accurate belum tahu penjualan klinik hari itu.

Langkah 3 dari 12

Kondisi sebelum improvement

Jalur penerimaan barang

  1. Barang datang
  2. Dicatat di Accurate
  3. Apoteker ketik ulang di form Terima Produk
  4. Stok klinik bertambah, nilainya dummy

Jalur transaksi pasien di FO, buka setiap hari 08.00–20.00

  1. Pasien bayar
  2. Sistem: stok 0
  3. FO hubungi apotek, menunggu
  4. Apotek update manual, transaksi lanjut

Jalur saat stok dilebihkan agar tidak input berulang

  1. Stok sistem lebih dari fisik
  2. Pasien bayar, transaksi lunas
  3. Pengambilan: barang tidak ada
  4. Pasien kecewa, transaksi dikoreksi
5item input manual per hari per cabang
3menit per input
15menit per hari per cabang hanya untuk input ulang
Form Penerimaan Produk lama: satu-satunya cara menambah stok klinik. Belum ada halaman untuk memantau kecocokan stok.

Langkah 3 dari 12

Dari mana ±16 jam per bulan?

Jam kerja yang hilang per cabang. Klinik buka setiap hari 08.00–20.00 (30 hari/bulan). Rumus: kali × menit × 30 hari (rekonsiliasi: sekali per bulan) ÷ 60. Frekuensi input penerimaan dari data sistem (slide berikutnya); angka lain rata-rata hasil pengamatan langsung di klinik. Waktu dihitung per proses.

KomponenRata-rataJam / bulanDasar angka
Input penerimaan manualApoteker mengetik ulang barang yang sudah diterima di Accurate ke form Terima Produk. 5× / hari
× 3 menit
7,5 Data sistem & simulasiFrekuensi: rata-rata item yang diinput manual per hari ada input (form Terima Produk & Penyesuaian Stok), 1 Jan–31 Mei 2026 (database production, slide bukti data). Durasi 3 menit per item: pengamatan & simulasi input.
FO tertahan karena stok 0Pembayaran pasien terhenti karena stok di sistem 0. FO menelepon atau mendatangi apotek, apoteker cek fisik lalu input, kemudian konfirmasi ke FO dan transaksi diulang. 3× / hari
× 5 menit
7,5 Pengamatan langsungRata-rata hasil pengamatan di FO dan apotek.
Rekonsiliasi dua sistemSaat stock opname awal bulan, apoteker mencocokkan stok sistem klinik dengan Accurate dan fisik, lalu mengoreksi selisihnya. 1× / bulan
× 75 menit
1,3 Pengamatan langsungRata-rata lama rekonsiliasi saat stock opname awal bulan.
Total per cabang16,3× 7 cabang = 113,8 jam per bulan

Langkah 3 dari 12

Bukti data: seberapa sering stok diinput manual?

Database production clinic_prod, 1 Jan – 31 Mei 2026 (151 hari), diambil 15 Okt 2026. Input manual dihitung dari form Terima Produk dan menu Penyesuaian Stok (terakhir dipakai 24 Jun 2025). Lampung tidak dihitung karena baru buka Agustus 2026.

Cabang Item diinput per bulanJan–Mei 2026 Item diinputbaris barang Penyesuaian stokkali Hari ada inputdari 151 hari Item / hariper hari ada input
Malang 782 0 137 6
Surabaya 634 0 141 4
Bandung 580 0 110 5
Sidoarjo 432 0 94 5
Depok 302 0 81 4
Bekasi 169 0 40 4
Jakarta Selatan 0 0 0 –
Rata-rata per cabang 414 0 86 5

Dalam 5 bulan, apoteker 7 cabang memasukkan 2.899 item secara manual, padahal penerimaan barang sudah tercatat di Accurate. Angka 5 item per hari (4,8, dibulatkan) dipakai di rincian jam dan kalkulator NQI.

Langkah 4 dari 12

Kronologi munculnya ide perbaikan

Ide ini berawal dari observasi langsung di Klinik Malang untuk melihat penggunaan sistem dalam pelayanan sehari-hari.

  1. Front office & ruang tunggu

    Mengamati alur pasien dari pendaftaran hingga pembayaran.

  2. Nurse station

    Mengamati penggunaan sistem di nurse station.

  3. Apotek

    Mengamati tugas apoteker. Penerimaan barang yang sudah tercatat di Accurate diinput ulang, sementara FO datang langsung maupun menelepon untuk menanyakan stok yang di sistem tercatat 0. Agar tidak input berulang, stok kadang dicatat melebihi fisik, sehingga barang yang sudah dibayar pasien ternyata tidak ada saat diambil.

Ide perbaikan Cukup dicatat sekali di Accurate, stok di sistem klinik langsung ikut terbarui. Tanpa input ulang, tanpa FO harus bertanya ke apotek, tanpa stok yang dilebihkan.

Langkah 5 dari 12

Usulan perbaikan

Integrasi otomatis sistem klinik dengan Accurate API, sehingga stok klinik selalu mengikuti pergerakan terkini di Accurate tanpa input manual.

Webhook listener

Setiap pergerakan barang di Accurate, penjualan maupun penerimaan, dikirim ke endpoint sistem klinik. Listener memproses event berurutan dan langsung memperbarui stok produk terkait.

Otomatis, tanpa sentuhan manusia

Sync semua produk

Menyamakan seluruh produk cabang sekaligus lewat antrian. Untuk awal hari atau rekonsiliasi menyeluruh.

Sync per produk

Sinkronisasi satu item tanpa memuat ulang semua data.

Cek langsung ke Accurate

Melihat stok real-time di Accurate, termasuk komponen produk grup, untuk validasi di tempat.

Ruang lingkup. Arah Accurate → sistem klinik berjalan real-time. Arah sistem klinik → Accurate tetap batch malam hari sesuai SOP accounting; itu ketentuan proses bisnis, bukan bagian masalah ini.

Langkah 6 dari 12

Tujuan perbaikan / penciptaan

IndikatorSebelumTargetRealisasi
Input ganda penerimaan barang5 item / hari / cabang0Penerimaan cukup dicatat di Accurate; stok klinik ter-update otomatis
Jeda stok klinik terhadap AccurateTidak pernah samaReal-timeMengikuti event webhook, diproses antrian tiap menit
FO menunggu update dari apotekSetiap stok belum diinputTidak perlu menungguStok sudah terisi saat barang diterima di Accurate
Barang sudah dibayar, tidak ada saat diambilTerjadi saat stok dilebihkanTidak terjadiStok tidak lagi diisi manual; disamakan dengan Accurate
Waktu kerja terbuang±16 jam / bulan / cabangTereliminasiInput & komunikasi stok tidak lagi diperlukan
Penilaian pengguna-Input ganda berkurang3 dari 3 apoteker: "Ya, signifikan"

Single source of truth: angka stok yang dilihat apoteker, FO, dan accounting berasal dari satu sumber, yaitu Accurate.

Langkah 7 dari 12

Proses pembuatan

  1. Pelajari API Accurate. Autentikasi token + tanda tangan HMAC-SHA256, endpoint item/detail.do, format event webhook ITEM_QUANTITY.
  2. Bangun endpoint di clinic-api. Detail item, detail grup, sync per produk, sync batch per cabang.
  3. Pasang webhook + antrian. Event disimpan dulu, lalu diproses job terpisah supaya Accurate tidak menunggu.
  4. Bangun Produk Monitor di clinic-app. Daftar stok, status sync, sumber, dan tiga aksi manual.
  5. Uji di development, sempat di-hold, diperbaiki, lalu rilis ke production 23 Juni 2026.
  6. Survei pengguna, perbaiki, ulangi. Produk grup, dua mode sync, label kode tak terdaftar.

Sumber daya yang dipakai

  • Laravel 8 (clinic-api)
  • CodeIgniter 3 HMVC (clinic-app)
  • MySQL production
  • Accurate Online API
  • Laravel Queue (driver database)
  • Laravel Scheduler
  • SweetAlert2

Seluruhnya memakai server, lisensi Accurate, dan stack yang sudah ada. Tidak ada pembelian baru; dikerjakan in-house oleh tim IT.

Kompetensi baru di tim

Integrasi webhook, pemrosesan antrian asinkron, dan autentikasi API bertanda tangan, yang kini bisa dipakai ulang untuk integrasi Accurate berikutnya.

Langkah 8 dari 12

Tahapan implementasi

Dari observasi sampai perbaikan berkelanjutan, berdasarkan riwayat commit clinic-app dan clinic-api.

  1. Fase 1

    Temukan & rancang

    10–22 Juni 2026

    1. Fondasi

      Helper cek item Accurate lintas cabang & tombol "Cek Accurate".

    2. Observasi di Klinik Malang

      Stok klinik 0 padahal barang ada; input ulang; FO tertahan.

    3. Endpoint & scheduler

      API detail item, grup, sync stok. Perpanjang webhook setiap hari 00.01 WIB, perbarui host 00.10 WIB.

    4. Usulan diajukan

      Antrian sync & auto-dispatch dari webhook, diuji ulang sebelum rilis.

  2. Fase 2

    Rilis & uji pengguna

    23–29 Juni 2026

    1. Produk Monitor di production

      Sync semua, sync per produk, cek langsung API. Auto-sync aktif.

    2. Jejak perubahan

      Status naik/turun, sebelum → sesudah, sumber Auto/Manual/Batch.

    3. Survei apoteker

      Surabaya, Sidoarjo, Bekasi memberi penilaian & masukan.

    4. Laporan penerapan

      Dipakai harian oleh apotek dan FO.

  3. Fase 3

    Perbaikan berkelanjutan

    Juli–Oktober 2026

    1. Menjawab masukan pengguna

      Produk grup yang lolos sync kini tercakup lewat bahan acuan.

    2. Dua mode sync & riwayat

      Samakan / kurangi keluar hari ini, Stok Accurate, label "Tidak ada di Accurate".

    3. Produk baru langsung sinkron

      Simpan di Master Product langsung mengambil stok tiap cabang.

Titik penting: observasi, usulan, rilis production, laporan penerapan.

Langkah 8 dari 12

Prinsip kerja: alur satu event

Tekan → untuk membuka tahap satu per satu
Konsol simulasi. Data contoh dari produk OTB1 di Lampiran 3.

Waktu webhook diukur dari Lampiran 1 (event Accurate 15:00:43, tersimpan 15:00:44). Waktu antrian dan respons API masih estimasi.

Accurate Online

Sumber data stok utama. Setiap kali kuantitas barang berubah, Accurate mengirim event ITEM_QUANTITY berisi databaseId, timestamp, dan daftar itemNo + quantity.

Setiap hari pukul 00.01 WIB scheduler memperpanjang langganan webhook, dan pukul 00.10 WIB memperbarui host database, sehingga koneksi tidak putus diam-diam.

Langkah 8 dari 12

Perubahan logic di sistem eksisting

KomponenSebelumSesudah
Stok bertambahApoteker mengisi form Terima ProdukEvent webhook → SyncProdukStokJob menyamakan dengan Accurate
Stok berkurangSaat pembayaran lunas (update_keluar)Tetap dipertahankan, lalu dikoreksi oleh angka Accurate
Tabel tb_stock_produkHanya jumlah+ accurate_sync_at, accurate_sync_info (JSON: sebelum, sesudah, selisih, mode, sumber)
Tabel baru-accurate_item_quantity (log event), jobs (antrian)
Produk grup / paketTidak dikenaliDeteksi detailGroup, stok dari kode + "A" atau peta 10 bahan acuan
Kode Accurate ganda-Semua baris dengan kode sama ikut diperbarui
Kode tidak terdaftarDiam, tampak seperti gagalLabel "Tidak ada di Accurate", stok tidak disentuh
Produk baru di Master ProductStok mulai dari 0Langsung ambil stok tiap cabang, paralel dengan curl_multi
Koneksi Accurate-Token + HMAC-SHA256; perpanjang webhook setiap hari 00.01 WIB, perbarui host 00.10 WIB

Langkah 8 dari 12

Dua mode sync: menjawab jeda penjualan harian

Penjualan klinik baru dikirim ke Accurate malam hari. Sepanjang jam buka, stok Accurate belum dikurangi penjualan klinik hari itu.

08.00 buka transaksi klinik, stok lokal turun 20.00 tutup, closing & batch ke Accurate

Karena itu sync manual meminta apoteker memilih:

  • Samakan persis. jumlah = stok Accurate. Tepat setelah closing dan batch terkirim.
  • Kurangi keluar hari ini. jumlah = stok Accurate − terjual hari ini. Terjual = baris penjualan dari pembayaran lunas bertanggal hari ini, titik yang sama tempat sistem lama mengurangi stok.

Coba hitung

Samakan persis50
Kurangi keluar hari ini45Sesuai barang fisik di rak

Langkah 8 dari 12

Poka-yoke: kesalahan yang dicegah sistem

Stok dilebihkan agar tidak input berulang
Input manual tidak diperlukan lagi; stok disamakan dengan Accurate dan selisihnya terlihat di Produk Monitor.
Event membawa kode varian "CR002A"
Tidak cocok? Coba lagi tanpa akhiran "A".
Produk grup tidak punya stok sendiri
Stok diambil dari bahan acuan; perubahan bahan memicu sync grupnya.
Satu kode dipakai beberapa nama produk
Semua baris diperbarui, tidak ada yang tertinggal.
Kode tidak ada di Accurate cabang
Hanya pesan "Barang & Jasa tidak tepat" yang dianggap tidak ada. Error token atau limit tidak dicap begitu, dan stok tidak disentuh.
Accurate lambat atau gagal
Job dicoba ulang 3 kali, maksimal 30 detik. Cabang tidak dikenal langsung dibuang dari antrian.
Webhook kedaluwarsa, host berpindah
Setiap hari scheduler memperpanjang webhook pukul 00.01 WIB dan memperbarui host pukul 00.10 WIB.
Sync 462 produk sekaligus
Masuk antrian per 100 baris; layar tidak membeku, hasil dilihat dengan memuat ulang.
Siapa mengubah apa, kapan
Setiap event dan setiap sync tercatat lengkap: sebelum, sesudah, selisih, sumber.

Standar kerja baru: penerimaan barang cukup dicatat di Accurate. Produk Monitor dipakai untuk verifikasi dan rekonsiliasi, bukan untuk input.

Langkah 9 dari 12

Kondisi sesudah perbaikan

Sebelum
  1. Transaksi di Accurate
  2. Apoteker input ulang manual
  3. FO datang / menelepon apotek
  4. Transaksi baru bisa jalan
Sesudah
  1. Transaksi di Accurate
  2. Webhook mengirim pergerakan stok
  3. Stok klinik terbarui otomatis
  4. FO langsung bertransaksi
Input ulang penerimaan
5 item / hari tidak perlu
FO bertanya stok ke apotek
setiap stok 0 tidak perlu
Barang dibayar, tidak ada saat diambil
saat stok dilebihkan stok ikut Accurate
Jam kerja hilang per cabang
±16 jam / bulan kembali produktif

Berjalan di production, dipakai harian oleh apotek dan FO di 8 cabang: MalangSurabayaBandungSidoarjoBekasiDepokJakarta SelatanLampung

Langkah 10 dari 12

Evaluasi: biaya & manfaat

Biaya

Server & antrian
Rp 0, memakai server clinic-api
Lisensi Accurate & API
Rp 0, sudah berlangganan
Library tambahan
Rp 0
Pengembangan
Rp 0, dikerjakan tim IT in-house

Manfaat terukur

5 input × 3 menit = 15 menit per hari per cabang hanya untuk input ulang. Bersama FO tertahan karena stok 0 dan rekonsiliasi: ±16 jam kerja per bulan per cabang (klinik buka 30 hari). Rinciannya ada di langkah 3.

  • QQualityStok klinik akurat; satu sumber data untuk apotek, FO, dan accounting.
  • CCost±16 jam kerja per bulan per cabang kembali untuk pekerjaan bernilai.
  • DDeliveryFO bertransaksi tanpa menunggu; pasien dilayani lebih cepat.
  • SSafetyPasien tidak lagi membayar barang yang ternyata habis; setiap perubahan stok teraudit.
  • MMoraleApoteker lepas dari pekerjaan input berulang dan FO tidak lagi harus menahan pasien; keduanya bisa fokus melayani.
  • PProductivityInterupsi FO–apotek hilang; data pengadaan lebih bisa dipercaya.

Langkah 11 dari 12

Perhitungan Net Quality Income (NQI)

Waktu hilang per cabang
Input penerimaan manualper hari
FO tertahan karena stok 0per hari
Rekonsiliasi dua sistemper bulan
Parameter umum

Rumus: Σ(kali × menit × hari buka, atau ×1 untuk yang per bulan, ÷ 60) × cabang × tarif per jam × 12. Tanpa biaya tambahan: memakai server eksisting. Cabang = 7, tanpa Lampung yang baru buka Agustus 2026.

Jam hemat per cabang / bulan
-
Jam hemat semua cabang / bulan
-
Manfaat per bulan, semua cabang
-
Manfaat 12 bulan
-
NQI tahun pertama -

Belum terhitung dalam NQI: kepuasan pasien

  • Tidak kecewa. Barang yang sudah dibayar tersedia saat diambil, bukan ternyata habis.
  • Tidak menunggu. Pembayaran di FO tidak tertunda karena stok di sistem tercatat 0.

Langkah 12 dari 12

Kesimpulan & voice of customer

  • Input ganda penerimaan barang, rata-rata 5 item per hari per cabang, tidak lagi diperlukan; Accurate menjadi sumber utama data stok.
  • Stok klinik mengikuti Accurate secara otomatis lewat webhook dan antrian.
  • FO tidak lagi bergantung pada update manual apotek, dan stok tidak lagi dilebihkan sehingga barang yang dibayar tersedia saat diambil.
  • Perbaikan berlanjut dari umpan balik pengguna, bukan berhenti di laporan.
Video testimoni penggunaapoteker & FO, menyusul

INCOVE KOSMESIA 2026, Suggestion System

Satu sumber data stok, ter-update otomatis.

Terima kasih.

Muhammad Badruzzaman Ahdany
IT Head of Development, PT Kosmetika Klinik Indonesia

Daftar slide