{"id":188260,"date":"2026-02-20T10:59:06","date_gmt":"2026-02-20T03:59:06","guid":{"rendered":"https:\/\/www.hashmicro.com\/id\/blog\/?p=188260"},"modified":"2026-04-22T09:09:08","modified_gmt":"2026-04-22T02:09:08","slug":"stockout-cost","status":"publish","type":"post","link":"https:\/\/www.hashmicro.com\/id\/blog\/stockout-cost\/","title":{"rendered":"Stockout Cost dan Cara Menekannya dengan KPI yang Terukur"},"content":{"rendered":"<p>Banyak pelaku bisnis ritel, manufaktur, hingga distribusi menghadapi tantangan serius saat stok barang tiba-tiba habis di tengah permintaan tinggi. Kondisi ini bukan sekadar gangguan operasional, tetapi juga memicu kerugian finansial tersembunyi yang sering luput dari perhitungan.<\/p>\n<p>Stockout cost menjadi faktor penting yang menentukan seberapa besar dampak kekosongan persediaan terhadap penjualan, loyalitas pelanggan, dan reputasi merek. Memahami komponen biayanya membantu perusahaan mengambil langkah strategis untuk menjaga ketersediaan produk tanpa membebani modal kerja.<\/p>\n<p>Artikel ini mengulas konsep biaya kehabisan stok, penyebab utamanya, serta pendekatan efektif yang dapat diterapkan untuk mengendalikannya. Dengan pemahaman ini, pembaca dapat menilai risiko lebih akurat sekaligus mengoptimalkan pengelolaan inventaris secara berkelanjutan.<\/p>\n<style>\r\n\t.takeaways-container {\r\n\t\tmargin: 20px 0;\r\n\t\tfont-family: sans-serif;\r\n\t}\r\n\t.box-content {\r\n\t\tbackground-color: #fffacd;\r\n\t\tbox-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\r\n\t\tborder-radius: 25px;\r\n\t\tpadding: 25px;\r\n\t}\r\n\t.title {\r\n\t\tmargin-bottom: 20px;\r\n\t}\r\n\t.title p {\r\n\t\tdisplay: inline-block;\r\n\t\tbackground-color: #8A0E19;\r\n\t\tcolor: #ffffff;\r\n\t\tpadding: 8px 15px;\r\n\t\tborder-radius: 8px;\r\n\t\tfont-size: 22px;\r\n\t\tfont-weight: bold;\r\n\t\tmargin: 0;\r\n\t}\r\n\t.item {\r\n\t\tdisplay: flex;\r\n\t\talign-items: flex-start;\r\n\t\tmargin-bottom: 12px;\r\n\t}\r\n\t.item .circle {\r\n\t\twidth: 8px;\r\n\t\theight: 8px;\r\n\t\tbackground-color: #000000;\r\n\t\tborder-radius: 50%;\r\n\t\tmargin-right: 12px;\r\n\t\tflex-shrink: 0;\r\n\t\tmargin-top: 8px;\r\n\t}\r\n\t.item p {\r\n\t\tmargin: 0;\r\n\t\tfont-size: 16px;\r\n\t\tline-height: 1.6;\r\n\t}\r\n\t.item p a {\r\n\t\tcolor: #8A0E19;\r\n\t\tfont-weight: normal;\r\n\t\ttext-decoration: none;\r\n\t}\r\n\t.item p a:hover {\r\n\t\ttext-decoration: underline;\r\n\t}\r\n\t.button-wrapper {\r\n\t\tmargin-top: 25px;\r\n\t}\r\n\t.submit-button {\r\n\t\tbackground-color: #8a0e19;\r\n\t\tcolor: #fff !important;\r\n\t\ttransition: all .3s ease;\r\n\t\tpadding: 12px 28px;\r\n\t\tdisplay: inline-block;\r\n\t\tborder-radius: 12px;\r\n\t\tfont-size: 16px;\r\n\t\tfont-weight: bold;\r\n\t\ttext-decoration: none;\r\n\t}\r\n\t.submit-button:hover {\r\n\t\tbackground-color: #991b26;\r\n\t}\r\n\t@media (max-width: 767px) {\r\n\t\t.takeaways-container {\r\n\t\t\theight: auto;\r\n\t\t\tpadding: 0;\r\n\t\t}\r\n\t\t.box-content {\r\n\t\t\tpadding: 24px;\r\n\t\t}\r\n\t\t.content,\r\n\t\t.main-content,\r\n\t\t.list-item {\r\n\t\t\twidth: 100%;\r\n\t\t}\r\n\t}\r\n<\/style>\r\n\r\n<div class=\"takeaways-container\">\r\n\t<div class=\"box-content\">\r\n\t\t<div class=\"content\">\r\n\t\t\t<div class=\"title\">\r\n\t\t\t\t<p>Key Takeaways<\/p>\r\n\t\t\t<\/div>\r\n\t\t\t<div class=\"main-content\">\r\n\t\t\t\t<div class=\"list-item\">\r\n\t\t\t\t\t<div class=\"item\">    <div class=\"circle\"><\/div>    <p><a href=\"#saat-stok-kosong-jadi-biaya-tambahan\">Stockout cost<\/a> adalah kerugian total saat stok tidak tersedia sehingga penjualan hilang, biaya naik, dan dampaknya sering tersembunyi dalam indikator kinerja bisnis.<\/p><\/div><div class=\"item\">    <div class=\"circle\"><\/div>    <p>Kerugian stockout terbentuk dari berbagai komponen seperti <a href=\"#komponen-utama-pembentuk-stockout-cost\">margin hilang, biaya tambahan operasional, penurunan nilai transaksi<\/a>, dan turunnya loyalitas pelanggan jangka panjang.<\/p><\/div><div class=\"item\">    <div class=\"circle\"><\/div>    <p>Stockout biasanya terjadi karena kombinasi faktor seperti <a href=\"#akar-masalah-mengapa-stockout-terjadi\">forecast meleset, data stok tidak akurat, suplai tidak stabil<\/a>, dan prioritas SKU yang keliru dalam pengelolaan persediaan.<\/p><\/div>\t\t\t\t<\/div>\r\n\t\t\t<\/div>\r\n<!-- \t\t\t<div class=\"button-wrapper\">\r\n\t\t\t\t<a href=\"https:\/\/www.equiperp.com\/tour-produk-gratis\/?medium=key-takeaways\" class=\"submit-button\">Klik untuk Demo Gratis!<\/a>\r\n\t\t\t<\/div> -->\r\n\t\t<\/div>\r\n\t<\/div>\r\n<\/div>\n<div id=\"toc_group_article\" style=''>\r\n\t<p style='font-size:25px;font-weight:bold; margin-bottom:0px'>\r\n\t\tDaftar Isi:\r\n\t<\/p>\r\n\t<ul id=\"list_toc\" class='list_toc'><\/ul>\r\n<\/div>\r\n\r\n<div id=\"placeholder-toc\"><\/div>\r\n<div id=\"toc\">\r\n    <div class=\"header\">\r\n\t<span class=\"toc-title\" id=\"toc-title\">Daftar Isi<\/span>\t\r\n\t <i class=\"toc-icon\">\r\n        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"30\" height=\"30\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#000\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"header-icon\">\r\n          <path d=\"m6 9 6 6 6-6\" \/>\r\n        <\/svg>\r\n      <\/i>\r\n\t<\/div>\r\n    <div class=\"list\">\r\n      <ul id=\"toc-list\"><\/ul>\r\n    <\/div>\r\n <\/div>\r\n\r\n<style>\r\n\/* Simple styling for the TOC *\/\r\n\t\r\n\t#toc ul li:last-child {\r\n    padding-bottom: 16px; \/* Adjust the value as needed *\/\r\n}\r\n\r\n.td-fix-index {\r\n\t transform: unset !important;\r\n     -webkit-transform: unset !important; \r\n}\r\n.footer-contact .td-fix-index {\r\n\t transform: translateZ(0) !important;\r\n     -webkit-transform: translateZ(0) !important; \r\n}\r\n\t.tdb_single_content .tdb-block-inner.td-fix-index{\r\n\t\tposition: static;\r\n\t}\r\n\t\r\n\r\n\r\n\t\r\n#toc {\r\n  background-color: #FFF;\r\n\tpadding: 17px 24px 0px 24px !important;\r\n  margin-bottom: 20px;\r\n\/*   border: 1px solid #9C171E; *\/\r\n  border-radius: 6px;\r\n\tdisplay: none;\r\n  max-width: 100%;\r\n  transition: .4s ease height;\r\n\tmargin-left: 0;\r\n\toverflow: hidden;\r\n}\r\n\r\n#toc .header{\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n\tbackground-color: transparent;\r\n}\r\n\t\r\n\t#toc.sticky .header{\r\n\t\tpadding: 4px 0;\r\n\t}\r\n\t\r\n.header p{\r\n  font-size: 18px !important;\r\n  font-weight: 600 !important;\r\n  color: #393939;\r\n   margin-bottom: 0;\r\n  \/* margin-top: 20px; *\/\r\n}\r\n\r\n.toc-icon{\r\n  float: right;\r\n\/*   visibility: hidden; *\/\r\n}\r\n\r\n\t.toc-title{\r\n\t\tmargin-right: auto;\r\n\/* \t\tpadding-left: 20px; *\/\r\n\t\tfont-weight: 600;\r\n\t\talign-self: center;\t}\t\r\n\r\n#toc ul {\r\n  list-style-type: none;\r\n  padding-left: 0;\r\n}\r\n\t\r\n#toc.sticky ul{\r\n\toverflow-y: auto;\r\n\tmax-height: 250px;\r\n\tmargin-top: 0px;\r\n\tpadding-top: 20px;\r\n\/* \tborder-top: 1px solid #d3d3d3; *\/\r\n}\r\n\t\r\n#toc ul li {\r\n\/*   margin-bottom: 10px; *\/\r\n  margin-bottom: 10px;\r\n\tmargin-left: 0;\r\n\ttransition: .2s ease;\r\n\tcursor: pointer;\r\n}\r\n\t\r\n\t#toc.sticky ul li {\r\n\t  margin-right: 10px;\r\n\t}\r\n\t\r\n.td-post-content #toc-list li a:hover, .td-post-content #toc-list a.active{\r\n\tbackground-color: #FFF;\r\n\/* \tpadding: 8px 16px 8px 16px; *\/\r\n\tpadding: 4px 16px 4px 16px;\r\n\tborder-radius: 6px;\r\n\tcolor: #9c171e !important;\r\n\tfont-weight: 600 !important;\r\n}\r\n\t\r\n\t.td-post-content #toc-list li:hover a, .td-post-content #toc-list a.active{\r\n\t\tcolor: #9C171E !important;\r\n\t\tfont-weight: 600 !important;\r\n\t}\r\n\t\r\n.td-post-content #toc-list a.active{\r\n\tfont-weight: bold !important;\r\n\tcolor: #9C171E !important;\r\n}\r\n\t\r\n#toc a, .td-post-content #toc-list a {\r\n  text-decoration: none;\r\n  color: #ea1717 !important;\r\n  transition: .2s ease;\r\n\tfont-weight: 400 !important;\r\n\tdisplay: block;\r\n\t\r\n\tpadding: 4px 16px 4px 0;\r\n}\r\n\r\n#toc.sticky {\r\n  position: fixed;\r\n\/*   top: 73px; *\/\r\n\tbottom: 0;\r\n  z-index: 100; \r\n  box-shadow: 0 2px 5px rgba(0,0,0,0.1); \r\n\twidth: 100%; \r\n\tbackground-color: #FFF;\r\n\/* \tbackground-color: #FFF1F1; *\/\r\n\tborder-bottom: 1px solid #ea1717;\r\n\/*   border: 1px solid #393939; *\/\r\n  box-shadow: 0px 0px 14px 0px #00000040;\r\n  cursor: pointer;\r\n\tanimation: fadein .3s ease;\r\n\tpadding: 12px 16px !important;\r\n}\r\n\t\r\n\t.fadein{\r\n\t\tanimation: fadein .3s ease;\r\n\t}\r\n\t\r\n\t.fadeout{\r\n\t\tanimation: fadeout .3s ease;\r\n\t}\r\n\t\r\n\t\r\n\t@keyframes fadein{\r\n\t\t0% {\r\n\t\t\topacity: 0;\r\n\t\t}\r\n\t\t100%{\r\n\t\t\topacity: 1;\r\n\t\t}\r\n\t}\r\n\t\r\n\t@keyframes fadeout{\r\n\t\t0% {\r\n\t\t\topacity: 1;\r\n\t\t}\r\n\t\t100%{\r\n\t\t\topacity: 0;\r\n\t\t}\r\n\t}\r\n\r\n\t\r\n#toc.sticky .header p{\r\n\tmargin-bottom: 10px;\r\n\tmargin-top: 10px;\r\n}\r\n\r\n#toc.sticky .toc-icon{\r\n  visibility: visible;\r\n\/* \ttransition: 0.4s ease; *\/\r\n}\r\n\t\r\n\t.toc-icon{\r\n\t\talign-items: center;\r\n    \tdisplay: flex;\r\n\t}\r\n\t\r\n\tsvg.header-icon{\r\n\/* \t\tbackground-color: #9c171e; *\/\r\n\t\tbackground-color: #FFF;\r\n\t\tborder-radius: 30px;\r\n\t\tpadding: 5px;\r\n\t}\r\n\r\n#toc.sticky .list{\r\n\/*   max-height: 0; *\/\r\n  transition: height 0.4s ease;\r\n}\r\n\t\r\n\t#toc .list{\r\n\/*   max-height: 0; *\/\r\n  transition: height 0.4s ease;\r\n}\r\n\r\n#toc .header.active .toc-icon{\r\n\ttransform: rotate(0deg); \r\n\topacity: 1;\r\n}\r\n\r\n\t#toc .header.active + .list {\r\n\t  max-height: 200px; \/* Adjust this value as needed *\/\r\n\t  opacity: 1;\r\n\t}\r\n\t\r\n\t#placeholder-toc{\r\n\/* \t\tdisplay: none; *\/\r\n\t}\r\n\t\r\n\t@media (min-width: 768px) and (max-width: 991px){\r\n\t\t#toc.sticky{\r\n\/* \t\t\ttop: 104px; *\/\r\n\t\t\tbottom: 0px;\r\n\t\t}\r\n\t\t\r\n\t\t#toc{\r\n\t\t\twidth: unset !important;\r\n\t\t}\r\n\t}\r\n\t\r\n\t@media (max-width: 767px){\r\n\t\t#toc{\r\n\t\t\twidth: 100% !important;\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\t\t\r\n\t\t#toc.sticky{\r\n\t\t\twidth: 90% !important;\r\n\/* \t\t\ttop: 81px; *\/\r\n\t\t\tbottom: 60px;\r\n\t\t\tmargin-left: auto;\r\n\t\t\tmargin-right: auto;\r\n\t\t\tpadding: 0 16px;\r\n\t\t\tright: 5%;\r\n\t\t}\r\n\t}\r\n\t\r\n\t<\/style>\r\n\r\n<style>\r\n\t#list_toc li {margin-bottom: 0;margin-top: 5px;}\r\n\t#list_toc > li > ul {padding-left: 20px;margin-bottom: 0;}\r\n\t#list_toc{height:max-content;transition:ease-in-out}\r\n\t#list_toc li {margin-bottom: 0;margin-top: 5px;}\r\n\t#list_toc_float li.active > a {color:#b1252d;background: #ffe1e3;}\r\n\t#list_toc_float li a {padding:3px 7px}\r\n\t#list_toc_float li a {\r\n\t\tdisplay: block;\r\n\t\tcolor:#000;\r\n\t\tmargin-bottom: 10px;\r\n\t\ttransition:all 0.2s ease-in-out;\r\n\t\tfont-size:15px\r\n\t}\r\n\t#list_toc_float li{list-style:none;list-style-position:inside; margin-left:0;}\r\n\t#list_toc_float a:hover{color:#b1252d;}\r\n\t\r\n\t#list_toc_float li a{margin-bottom:0px}\r\n\t#toc_group_float{\r\n\t\tline-height: 24px;\r\n\t\tmax-height: calc(100vh - 100px);\r\n\t\toverflow: auto;\r\n\t\tz-index: 99;\r\n\t\tdisplay:none!important;\r\n\t\tbackground:#fff;\r\n\t\ttransition:all 0.5s linear\r\n\t}\r\n\t\r\n\t@media (min-width:1019px){\r\n\t\t#toc_group_float {\r\n\t\t\tdisplay:block!important;\r\n\t\t\t}\r\n\t\t#toc_group_article {\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\t}\r\n\t\r\n\t@media (max-width:768px){\r\n\t\t#toc_group_article {\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\t}\r\n\t\r\n\t \/* custom scrollbar style *\/\r\n::-webkit-scrollbar {\r\n    width: 7px;\r\n}\r\n::-webkit-scrollbar-track {\r\n    background: #d7a2a4;\r\n}\r\n::-webkit-scrollbar-thumb {\r\n    background: #b1252d;\r\n    border-radius: 15px;\r\n}\t\t\r\n\r\n<\/style>\r\n\r\n<script>\r\n\tdocument.addEventListener('DOMContentLoaded', function() {\r\n\t\t\/\/ Fungsi untuk menangani klik pada semua elemen <a> dengan href yang dimulai dengan #\r\n\t\tfunction handleTitleClick(event) {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tconst targetId = this.getAttribute('href').substring(1);\r\n\t\t\tconst targetElement = document.getElementById(targetId);\r\n\r\n\t\t\tif (targetElement) {\r\n\t\t\t\tconst headerHeight = document.querySelector('#toc .header').offsetHeight;\r\n\t\t\t\tconst navbarHeight = document.getElementById('tdi_34') ? document.getElementById('tdi_34').offsetHeight : 0;\r\n\t\t\t\tconst windowHeight = window.innerHeight;\r\n\t\t\t\tconst targetOffset = targetElement.offsetTop;\r\n\t\t\t\tconst scrollTo = targetOffset + (windowHeight \/ 2) + (headerHeight) - navbarHeight - 40;\r\n\r\n\t\t\t\twindow.scrollTo({\r\n\t\t\t\t\ttop: scrollTo,\r\n\t\t\t\t\tbehavior: 'smooth'\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t\/\/ Tambahkan event listener untuk semua elemen <a> di toc-list dan list-toc\r\n\t\tconst titleLinks = document.querySelectorAll('#toc-list a, #list_toc a');\r\n\t\ttitleLinks.forEach(link => {\r\n\t\t\tlink.addEventListener('click', handleTitleClick);\r\n\t\t});\r\n\t});\r\n<\/script>\r\n\r\n<!-- ToC List for mobile -->\r\n<script>\r\n \/\/ Generate TOC based on headings\r\ndocument.addEventListener(\"DOMContentLoaded\", function() {\r\n  \/\/ Get the element that will contain the TOC\r\n  const tocList = document.getElementById('toc-list');\r\n\r\n  \/\/ Get the element with the ID 'article-left'\r\n  const article = document.querySelector('.td-post-content');\r\n\r\n  \/\/ Find all h2 elements within 'myarticle'\r\n  const headers = article.getElementsByTagName('h2');\r\n\r\n  \/\/ Loop through the h2 elements and create a list item for each one\r\n  for (let i = 0; i < headers.length; i++) {\r\n    const header = headers[i];\r\n    const headerText = header.textContent;\r\n\/\/     const headerId = 'header-' + i;\r\n    const headerId = headerText\r\n    .toLowerCase()\r\n    .trim()\r\n    .replace(\/[^\\w\\s-]\/g, '')  \/\/ hapus tanda baca\r\n    .replace(\/\\s+\/g, '-'); \/\/ ganti spasi jadi \"-\"\r\n\r\n    \/\/ Set an ID for the header if it doesn't have one\r\n    header.setAttribute('id', headerId);\r\n\r\n    \/\/ Create a list item for the TOC\r\n    const listItem = document.createElement('li');\r\n\r\n    \/\/ Create a link for the list item\r\n    const link = document.createElement('a');\r\n    link.setAttribute('href', '#' + headerId);\r\n    link.textContent = headerText;\r\n\r\n    \/\/ Append the link to the list item\r\n    listItem.appendChild(link);\r\n\r\n    \/\/ Append the list item to the TOC list\r\n    tocList.appendChild(listItem);\r\n  }\r\n});\r\n\r\n\/\/ Keep height and placement of content using placeholder in place of TOC\r\ndocument.addEventListener(\"DOMContentLoaded\", function() {\r\n  const toc = document.querySelector('#toc');\r\n  const placeholderToc = document.querySelector('#placeholder-toc');\r\n\r\n  function setPlaceholderHeight() {\r\n    placeholderToc.style.height = `${toc.offsetHeight}px`;\r\n  }\r\n\r\n  \/\/ Set the initial height of the placeholder\r\n  setPlaceholderHeight();\r\n\r\n  \/\/ Update the height on window resize\r\n  window.addEventListener('resize', setPlaceholderHeight);\r\n});\r\n  const tocTitle = document.querySelector('#toc-title'); \/\/ Assuming header-faq is the element for TOC title\r\n\r\n\/\/ Sticky TOC and update heading\r\n\/\/ document.addEventListener(\"DOMContentLoaded\", function() {\r\n\/\/   const toc = document.querySelector('#toc');\r\n\/\/   const footer = document.querySelector('.td-footer-template-wrap');\r\n\/\/   const tocParent = toc.parentElement;\r\n\/\/   const divTop = tocParent.getBoundingClientRect().top + window.pageYOffset;\r\n\/\/   const tocHeight = toc.offsetHeight;\r\n\/\/   const triggerPoint = divTop + tocHeight + 700;\r\n\/\/   const footerHeight = footer.offsetHeight;\r\n\/\/   const triggerFooterPoint = footer.getBoundingClientRect().top + window.pageYOffset - footerHeight - footerHeight - footerHeight;\r\n\/\/   const phtoc = document.querySelector('#placeholder-toc');\r\n\/\/   const headers = document.querySelectorAll('.td-post-content h2');\r\n\/\/   const navLinks = document.querySelectorAll('#toc-list a');\r\n\t\r\n\/\/ \tconst panel2 = document.querySelector(\"#toc .list\");\r\n\/\/ \tvar icon = document.querySelector(\".toc-icon\");\r\n\r\n\/\/   let activeLink = null; \/\/ Declare activeLink outside the loop\r\n\t\r\n\/\/   \/\/ Function to handle scroll and add\/remove .sticky class\r\n\/\/   function handleScroll() {\r\n\/\/     const windowTop = window.pageYOffset || document.documentElement.scrollTop;\r\n\/\/     let currentHeader = '';\r\n\r\n\/\/     \/\/ Highlight user progress as the heading comes\r\n\/\/     headers.forEach(header => {\r\n\/\/ \t\tconst headerTop = header.offsetTop;\r\n\/\/ \t\tconst headerHeight = header.clientHeight;\r\n\/\/ \/\/ \t\tif (window.scrollY >= (headerTop - headerHeight + 700)) {\r\n\/\/ \/\/ \t\t\tconst currentHeaderId = header.getAttribute('id');\r\n\/\/ \/\/ \t\t\tconst currentHeaderText = document.getElementById(currentHeaderId).textContent;\r\n\/\/ \/\/ \t\t\tconsole.log(\"current header text:\", currentHeaderText);\r\n\/\/ \/\/ \t\t\ttocTitle.textContent = currentHeaderText;\r\n\/\/ \/\/ \t\t\tcurrentHeader = currentHeaderId;\r\n\t\t\t\r\n\/\/ \/\/ \t\t\tif(window.innerWidth < 767){\r\n\/\/ \/\/ \t\t\t\ttocTitle.textContent = 'Daftar Isi';\r\n\/\/ \/\/ \t\t\t}\r\n\/\/ \/\/ \t\t}\r\n\/\/ \t\tif(window.innerWidth < 767){\r\n\/\/ \t\t\ttocTitle.textContent = 'Daftar Isi'; \/\/ Selalu pertahankan judul ini di mobile\r\n\/\/ \t\t} else {\r\n\/\/ \t\t\tif (window.scrollY >= (headerTop - headerHeight + 700)) {\r\n\/\/ \t\t\t\tconst currentHeaderId = header.getAttribute('id');\r\n\/\/ \t\t\t\tconst currentHeaderText = document.getElementById(currentHeaderId).textContent;\r\n\/\/ \t\t\t\ttocTitle.textContent = currentHeaderText;\r\n\/\/ \t\t\t\tcurrentHeader = currentHeaderId;\r\n\/\/ \t\t\t}\r\n\/\/ \t\t}\r\n\/\/ \t});\r\n\r\n\/\/     navLinks.forEach(link => {\r\n\/\/       link.classList.remove('active');\r\n\/\/       if(currentHeader != '') {\r\n\/\/ \t\t  if (link.getAttribute('href').includes(currentHeader)) {\r\n\/\/ \t\t\t  link.classList.add('active');\r\n\/\/ \t\t  }\r\n\/\/ \t  }\r\n\/\/     });\r\n\/\/ \/\/     if (windowTop < triggerFooterPoint) {\r\n\/\/ \/\/         toc.style.display = 'block';\r\n\/\/ \/\/ \t}else{\r\n\/\/ \/\/         toc.style.display = 'none';\r\n\/\/ \/\/ \t}\r\n\/\/     \/\/ Update TOC title if sticky\r\n\/\/     if (windowTop > triggerPoint) {\r\n\/\/       if (!toc.classList.contains('sticky')) {\r\n\/\/         phtoc.style.display = \"block\";\r\n\/\/         toc.classList.add('sticky');\r\n\/\/         toc.style.width = `${tocParent.offsetWidth}px`; \/\/ Set width to match the parent element\r\n\/\/         toc.setAttribute('style', 'width: ' + tocParent.offsetWidth + 'px !important;');\r\n\/\/         toc.style.backgroundColor = \"#FFF\";\r\n\/\/ \t\tpanel2.style.height = '0px';\r\n\/\/ \t\t  icon.style.transform = \"rotate(180deg)\";\r\n\/\/ \t\t  if(window.innerWidth < 767){\r\n\/\/ \/\/ \t\t\t  const tocs = document.querySelector('#toc.sticky');\r\n\/\/ \t\t\t  tocTitle.textContent = 'Daftar Isi'; \/\/ Reset title\r\n\/\/        \t\t  toc.style.width = '150px'; \/\/ Set width to match the parent element\r\n\/\/ \t\t  }\r\n\/\/       }\r\n\/\/       if (currentHeader) {\r\n\/\/ \/\/         console.log(\"activeLink:\", activeLink);\r\n\/\/         if (activeLink) {\r\n\/\/ \/\/           tocTitle.textContent = activeLink.textContent; \/\/ Update TOC title\r\n\/\/           tocTitle.textContent = activeLink ? activeLink.textContent : \"\"; \/\/ Update title only if activeLink exists\r\n\/\/         }\r\n\/\/       }\r\n\/\/     } else {\r\n\/\/       toc.classList.remove('sticky');\r\n\/\/       phtoc.style.display = \"none\";\r\n\/\/       toc.style.width = 'unset'; \/\/ Reset to original width\r\n\/\/       toc.style.backgroundColor = \"#FFF\";\r\n\/\/       tocTitle.textContent = 'Daftar isi'; \/\/ Reset title\r\n\/\/ \t\tpanel2.style.height = panel2.scrollHeight + \"px\";\r\n\/\/ \t\ticon.style.transform = \"rotate(180deg)\";\r\n\/\/     }\r\n\/\/   }\r\n\r\n\/\/     \/\/ Attach the scroll event listener to the window\r\n\/\/     window.addEventListener('scroll', handleScroll);\r\n\r\n\/\/     \/\/ Initial call to handleScroll to set the correct state on load\r\n\/\/     handleScroll();\r\n\/\/ });\r\n\t\r\n\/\/ \t\/\/ Open toggle TOC\r\n\/\/ \t  document.addEventListener(\"DOMContentLoaded\", function() {\r\n\/\/ \t\tvar tocHeader = document.querySelector(\"#toc .header\");\r\n\/\/ \t\tvar toc = document.querySelector(\"#toc\");\r\n\/\/ \t\tvar icon = document.querySelector(\".toc-icon\");\r\n\/\/ \t\tconst tocTitle = document.querySelector('#toc-title');\r\n\/\/ \t\tconst tocs = document.querySelector('#toc.sticky');\r\n\/\/  \t\tconst tocParent = toc.parentElement;\t\t  \r\n\r\n\/\/ \t\t  tocHeader.addEventListener(\"click\", function() {\r\n\/\/ \t\t\tvar panel = this.nextElementSibling;\r\n\/\/ \t\t\tif (panel.style.height !== '0px') { \/\/ Check if height is not 0px\r\n\/\/ \t\t\t  panel.style.height = '0px'; \/\/ Set height to 0 for full collapse\r\n\/\/ \t\t\t  icon.style.transform = \"rotate(180deg)\";\r\n\/\/ \/\/ \t\t\t\ttoc.style.paddingBottom = '6px'; \r\n\/\/ \t\t\t\tif(window.innerWidth > 768){\r\n\/\/ \t\t\t\t\tif(!toc.classList.contains('sticky')){\r\n\/\/ \t\t\t\t\t\ttoc.style.width = \"unset\";\r\n\/\/ \/\/ \t\t\t\t\t\ttoc.setAttribute('style', 'width: ' + tocParent.offsetWidth + 'px !important;');\r\n\/\/ \t\t\t\t\t}\r\n\/\/ \t\t\t\t\tif (toc.classList.contains('sticky')){\r\n\/\/ \t\t\t\t\t\ttoc.style.width = '${tocParent.offsetWidth}px';\r\n\/\/ \t\t\t\t\t\ttoc.setAttribute('style', 'width: ' + tocParent.offsetWidth + 'px !important;');\r\n\/\/ \t\t\t\t\t}\r\n\/\/ \t\t\t\t}\r\n\/\/ \t\t\t\tif(window.innerWidth < 767){\r\n\/\/ \t\t\t\t\ttoc.style.width = \"unset\"; \/\/ Reset width\r\n\/\/ \t\t\t\t}\r\n\/\/ \t\t\t\ttoc.style.backgroundColor = \"#FFF1F1\";\r\n\/\/ \t\t\t} else {\r\n\/\/ \t\t\t  panel.style.height = panel.scrollHeight + \"px\";\r\n\/\/ \t\t\t  icon.style.transform = \"rotate(0deg)\";\r\n\/\/ \t\t\t  toc.style.backgroundColor = \"#FFF\";\r\n\/\/ \t\t\t  tocTitle.textContent = 'Daftar isi'; \/\/ Reset title\r\n\/\/ \t\t\t\ttoc.style.paddingBottom = '24px';\r\n\/\/ \t\t\t \tif(window.innerWidth < 767){\r\n\/\/ \t\t\t\t\ttoc.style.width = `${tocParent.offsetWidth}px`; \/\/ Set width to match the parent element\r\n\/\/ \t\t\t\t\ttoc.setAttribute('style', 'width: ' + tocParent.offsetWidth + 'px !important;');\r\n\/\/ \t\t\t\t}\r\n\/\/ \t\t\t}\r\n\/\/ \t\t  });\r\n\r\n\/\/ \t\t  \/\/ Close TOC when a link inside it is clicked\r\n\/\/ \t\t  var tocLinks = document.querySelectorAll(\"#toc .list a\");\r\n\/\/ \t\t  tocLinks.forEach(function(link) {\r\n\/\/ \t\t\tlink.addEventListener(\"click\", function() {\r\n\/\/ \t\t\t  var panel = document.querySelector(\"#toc .list\");\r\n\/\/ \t\t\t  panel.style.height = '0px'; \/\/ Set height to 0 for full collapse\r\n\/\/ \t\t\t  icon.style.transform = \"rotate(180deg)\";\r\n\/\/ \t\t\t  toc.style.backgroundColor = \"#FFF\";\r\n\/\/ \t\t\t});\r\n\/\/ \t\t  });\r\n\/\/ \t\t});\r\n\r\n\/\/ START new JS for ToC improvements\r\ndocument.addEventListener(\"DOMContentLoaded\", function() {\r\n  const toc = document.querySelector('#toc');\r\n  const footer = document.querySelector('.td-footer-template-wrap');\r\n  const tocParent = toc.parentElement;\r\n  const divTop = tocParent.getBoundingClientRect().top + window.pageYOffset;\r\n  const tocHeight = toc.offsetHeight;\r\n  const triggerPoint = divTop + tocHeight + 1750;\r\n\tconsole.log(triggerPoint)\r\n  const footerHeight = footer.offsetHeight;\r\n  const triggerFooterPoint = footer.getBoundingClientRect().top + window.pageYOffset - footerHeight*3;\r\n  const phtoc = document.querySelector('#placeholder-toc');\r\n  const headers = document.querySelectorAll('.td-post-content h2');\r\n  const navLinks = document.querySelectorAll('#toc-list a');\r\n  \r\n  const panel2 = document.querySelector(\"#toc .list\");\r\n  const icon = document.querySelector(\".toc-icon\");\r\n  const tocTitle = document.querySelector('#toc-title');\r\n\r\n  let activeLink = null;\r\n  let userClosedTOC = false; \/\/ Flag user menutup TOC\r\n\r\n  function handleScroll() {\r\n    const windowTop = window.pageYOffset || document.documentElement.scrollTop;\r\n    let currentHeader = '';\r\n\r\n    \/\/ Update TOC title sesuai header yang terlihat\r\n    headers.forEach(header => {\r\n      const headerTop = header.offsetTop;\r\n      const headerHeight = header.clientHeight;\r\n      if(window.innerWidth < 767){\r\n        tocTitle.textContent = 'Daftar Isi'; \r\n      } else {\r\n        if (window.scrollY >= (headerTop - headerHeight + 1750)) {\r\n          const currentHeaderId = header.getAttribute('id');\r\n          const currentHeaderText = document.getElementById(currentHeaderId).textContent;\r\n          tocTitle.textContent = currentHeaderText;\r\n          currentHeader = currentHeaderId;\r\n        }\r\n      }\r\n    });\r\n\r\n    navLinks.forEach(link => {\r\n      link.classList.remove('active');\r\n      if(currentHeader && link.getAttribute('href').includes(currentHeader)) {\r\n        link.classList.add('active');\r\n      }\r\n    });\r\n\r\n    if (windowTop > triggerPoint) {\r\n      if (!toc.classList.contains('sticky')) {\r\n        phtoc.style.display = \"block\";\r\n        toc.classList.add('sticky');\r\n        toc.style.width = `${tocParent.offsetWidth}px`;\r\n        toc.style.backgroundColor = \"#FFF\";\r\n        \/\/ Saat sticky, TOC otomatis tertutup\r\n        panel2.style.height = '0px';\r\n        icon.style.transform = \"rotate(180deg)\";\r\n        userClosedTOC = true; \/\/ Set flag supaya tidak terbuka saat scroll\r\n      }\r\n      \r\n      if(window.innerWidth < 767){\r\n        tocTitle.textContent = 'Daftar Isi'; \r\n        toc.style.width = '150px';\r\n      }\r\n\r\n    } else {\r\n      toc.classList.remove('sticky');\r\n      phtoc.style.display = \"none\";\r\n      toc.style.width = 'unset';\r\n      toc.style.backgroundColor = \"#FFF\";\r\n      tocTitle.textContent = 'Daftar isi'; \r\n\r\n      \/\/ Kembalikan panel jika user belum menutup manual\r\n      if(!userClosedTOC) {\r\n        panel2.style.height = panel2.scrollHeight + \"px\";\r\n        icon.style.transform = \"rotate(0deg)\";\r\n      }\r\n    }\r\n  }\r\n\r\n  window.addEventListener('scroll', handleScroll);\r\n  handleScroll();\r\n\r\n  \/\/ Toggle TOC saat user klik\r\n  const tocHeader = document.querySelector(\"#toc .header\");\r\n  tocHeader.addEventListener(\"click\", function() {\r\n    const panel = panel2;\r\n    if (panel.style.height !== '0px') {\r\n      panel.style.height = '0px';\r\n      icon.style.transform = \"rotate(180deg)\";\r\n      userClosedTOC = true;\r\n    } else {\r\n      panel.style.height = panel.scrollHeight + \"px\";\r\n      icon.style.transform = \"rotate(0deg)\";\r\n      userClosedTOC = false;\r\n    }\r\n  });\r\n\r\n  \/\/ Close TOC saat link diklik\r\n  document.querySelectorAll(\"#toc .list a\").forEach(link => {\r\n    link.addEventListener(\"click\", function() {\r\n      panel2.style.height = '0px';\r\n      icon.style.transform = \"rotate(180deg)\";\r\n      userClosedTOC = true;\r\n    });\r\n  });\r\n});\r\n\/\/ END new JS for ToC improvements\r\n\r\n\t\r\n\/\/ \tmake the heading at the center of the viewport\r\n\/\/ \tdocument.addEventListener('DOMContentLoaded', function() {\r\n\/\/     \/\/ Add click event listener to all links in the TOC list\r\n\/\/     document.querySelectorAll('#toc-list a').forEach(anchor => {\r\n\/\/         anchor.addEventListener('click', function (e) {\r\n\/\/             e.preventDefault(); \/\/ Prevent the default behavior of jumping to the anchor\r\n\/\/ \/\/ \t\t\tconsole.log(\"prevent default\");\r\n\/\/             const targetId = this.getAttribute('href').substring(1); \/\/ Get the ID of the target element\r\n\/\/             const targetElement = document.getElementById(targetId); \/\/ Get the target element\r\n\r\n\/\/             if (targetElement) {\r\n\/\/                 const headerHeight = document.querySelector('#toc .header').offsetHeight; \/\/ Get the height of the fixed header\r\n\/\/                 const windowHeight = window.innerHeight; \/\/ Get the height of the viewport\r\n\/\/                 const targetOffset = targetElement.offsetTop; \/\/ Get the top offset of the target element\r\n\/\/                 const scrollTo = targetOffset + (windowHeight \/ 2) + (headerHeight); \/\/ Calculate the scroll position to center the target element\r\n\r\n\/\/                 \/\/ Scroll to the calculated position smoothly\r\n\/\/                 window.scrollTo({\r\n\/\/                     top: scrollTo,\r\n\/\/                     behavior: 'smooth'\r\n\/\/                 });\r\n\/\/             }\r\n\/\/         });\r\n\/\/     });\r\n\/\/ });\r\n<\/script>\r\n\r\n<script>\r\n    \/\/ Scrollspy function to highlight the active TOC item based on the scroll position\r\n  function scrollSpy(tocClass) {\r\n    const scrollPosition = window.scrollY;\r\n\r\n    \/\/ Find the active h2 and h3 headings based on their position in the corresponding TOC\r\n    let activeH2 = null;\r\n    let activeH3 = null;\r\n\r\n    const tocItems = document.querySelectorAll(`.${tocClass} li`);\r\n    tocItems.forEach(item => {\r\n      const a = item.querySelector('a');\r\n      if (!a) return;\r\n      const href = a.getAttribute('href');\r\n      const targetId = href.substring(1); \/\/ Remove the '#' from the href to get the target ID\r\n      const targetElement = document.getElementById(targetId);\r\n      if (!targetElement) return;\r\n\r\n      const targetTop = targetElement.getBoundingClientRect().top + scrollPosition;\r\n      const nextItem = item.nextElementSibling;\r\n      const nextTop = nextItem ? nextItem.getBoundingClientRect().top + scrollPosition : Infinity;\r\n\r\n      if (targetTop <= scrollPosition + 150) {\r\n        if (a.parentElement.parentElement === tocItems) {\r\n          \/\/ The h2 heading is at the root level of the TOC\r\n          activeH2 = { id: targetId, level: 'h2' };\r\n        } \r\n\t\t  else {\r\n          \/\/ The h3 heading is nested under an h2 heading\r\n          const parentH2 = a.parentElement.parentElement.previousElementSibling;\r\n          if (parentH2) {\r\n            const h2Link = parentH2.querySelector('a');\r\n            if (h2Link) {\r\n              const h2Href = h2Link.getAttribute('href');\r\n              const h2Id = h2Href.substring(1);\r\n              activeH2 = { id: h2Id, level: 'h2' };\r\n            }\r\n          }\r\n          activeH3 = { id: targetId, level: 'h3' };\r\n        }\r\n      }\r\n\r\n      if (targetTop > scrollPosition + 150 && nextTop > scrollPosition + 150 && !activeH3) {\r\n        \/\/ Reset the activeH2 when there are no more active h3 headings\r\n        activeH2 = null;\r\n      }\r\n    });\r\n\r\n    \/\/ Update the active state for the TOC items\r\n    tocItems.forEach(item => {\r\n      item.classList.remove('active');\r\n      const a = item.querySelector('a');\r\n      if (a) {\r\n        const href = a.getAttribute('href');\r\n        const targetId = href.substring(1);\r\n        if ((activeH2 && activeH2.id === targetId) || (activeH3 && activeH3.id === targetId)) {\r\n          item.classList.add('active');\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  \/\/ Call scrollSpy for each TOC on window scroll\r\n  const tocClasses = ['list_toc', 'list_toc_float']; \/\/ Add other TOC class names here if you have more than two instances\r\n  tocClasses.forEach(tocClass => {\r\n    window.addEventListener('scroll', () => scrollSpy(tocClass));\r\n  });\r\n<\/script>\r\n\r\n<!-- ToC List for desktop side bar, diganti jadi inject by php, di code snippet \"Sidebar Accordion\" -->\r\n<!-- <script>\r\n\tdocument.addEventListener(\"DOMContentLoaded\", function() {\r\n\r\n        \/\/ Fungsi untuk membuat nested list\r\n        function createNestedList(parentNode, children) {\r\n            if (children.length === 0) return;\r\n\r\n            const nestedUl = document.createElement('ul');\r\n            children.forEach(child => {\r\n                const nestedLi = document.createElement('li');\r\n                const nestedA = document.createElement('a');\r\n                nestedA.textContent = child.title;\r\n                nestedA.href = `#${child.id}`;\r\n                nestedLi.appendChild(nestedA);\r\n                nestedUl.appendChild(nestedLi);\r\n\r\n                if (child.children.length > 0) {\r\n                    createNestedList(nestedLi, child.children);\r\n                }\r\n            });\r\n\r\n            parentNode.appendChild(nestedUl);\r\n        }\r\n\r\n        \/\/ Membuat objek untuk menyimpan daftar h2 dan h3 beserta judulnya\r\n        const headings = [];\r\n\r\n           \/\/ Mengambil semua elemen h2 dan h3\r\n        \/\/ Mengambil semua elemen h2 dan h3\r\n\t\tconst elements = document.querySelectorAll('.td-post-content h2');\r\n\r\n\t\t\tfunction newFormatId(text) {\r\n\t\t\t\tif(text.toLowerCase() === \"key takeaways\") {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tconst result = text.toLowerCase()\r\n\t\t\t\t.trim()\r\n\t\t\t\t.replace(\/[^\\w\\s-]\/g, '')  \/\/ hapus tanda baca\r\n\t\t\t\t.replace(\/\\s+\/g, '-'); \/\/ ganti spasi jadi \"-\"\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\r\n\t\telements.forEach(element => {\r\n\t\t\tif (element.tagName === 'H2') {\r\n\t\t\t\tconst id = newFormatId(element.textContent); \/\/ Hasilkan ID baru\r\n\t\t\t\telement.id = id; \/\/ Tetapkan ID ke elemen h2\r\n\t\t\t\tif (element.textContent.toLowerCase() === \"key takeaways\") {return;} \/\/ Kalau Key Takeaways, jangan dimasukin\r\n\t\t\t\theadings.push({ level: 'h2', id: id, title: element.textContent, children: [] });\r\n\t\t\t} else if (element.tagName === 'H3') {\r\n\t\t\t\tconst id = newFormatId(element.textContent); \/\/ Hasilkan ID baru\r\n\t\t\t\telement.id = id; \/\/ Tetapkan ID ke elemen h3\r\n\t\t\t\tif (headings.length > 0) {\r\n\t\t\t\t\theadings[headings.length - 1].children.push({ level: 'h3', id: id, title: element.textContent, children: [] });\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n       \/\/ Membuat list HTML dari objek headings\r\n\t\tconst ul = document.getElementById('list_toc');\r\n\t\tlet currentUl = ul;\r\n\t\theadings.forEach(heading => {\r\n\t\t\tconst li = document.createElement('li');\r\n\t\t\tconst a = document.createElement('a');\r\n\t\t\ta.textContent = heading.title;\r\n\t\t\ta.href = `#${heading.id}`; \/\/ Gunakan ID yang baru dihasilkan\r\n\t\t\tli.appendChild(a);\r\n\r\n\t\t\tif (heading.level === 'h2') {\r\n\t\t\t\tcurrentUl = li;\r\n\t\t\t\tul.appendChild(li);\r\n\t\t\t} else if (heading.level === 'h3') {\r\n\t\t\t\tif (!currentUl.lastElementChild || currentUl.lastElementChild.tagName !== 'UL') {\r\n\t\t\t\t\tconst nestedUl = document.createElement('ul');\r\n\t\t\t\t\tcurrentUl.appendChild(nestedUl);\r\n\t\t\t\t\tcurrentUl = nestedUl;\r\n\t\t\t\t}\r\n\t\t\t\tcurrentUl.appendChild(li);\r\n\t\t\t}\r\n\r\n\t\t\tcreateNestedList(li, heading.children);\r\n\t\t});\r\n\t\t\/\/ Dapatkan elemen ul dengan id 'list_toc'\r\n\t\tconst ulFloat = document.getElementById('list_toc');\r\n\r\n\t\t\/\/ Dapatkan isi (child elements) dari ul dengan id 'list_toc'\r\n\t\tconst clonedChildren = ulFloat.cloneNode(true).children;\r\n\r\n\t\t\/\/ Dapatkan elemen ul dengan id 'list_toc_float'\r\n\t\tconst ulToc = document.getElementById('list_toc_float');\r\n\r\n\t\t\/\/ Tambahkan isi yang telah didapatkan dari 'list_toc' ke ul dengan id 'list_toc_float'\r\n\t\tulToc.append(...clonedChildren);\r\n\r\n\r\n        \/\/ Fungsi untuk mengambil tinggi navbar\r\n\t\tfunction getNavbarHeight() {\r\n\t\t\tconst navbar = document.getElementById('tdi_34');\r\n\t\t\treturn navbar ? navbar.offsetHeight : 0;\r\n\t\t}\r\n\r\n\t\t\/\/ Fungsi untuk menambahkan offset posisi scroll\r\n\t\tfunction scrollToElementWithOffset(elementId) {\r\n\t\t\tconst element = document.getElementById(elementId);\r\n\t\t\tif (element) {\r\n\t\t\t\tconst offset = getNavbarHeight();\r\n\t\t\t\tconst elementPosition = element.getBoundingClientRect().top;\r\n\t\t\t\tconst offsetPosition = elementPosition - offset - 40;\r\n\r\n\t\t\t\twindow.scrollBy({\r\n\t\t\t\t\ttop: offsetPosition,\r\n\t\t\t\t\tbehavior: 'smooth'\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t\/\/ Fungsi untuk menangani klik pada tautan judul\r\n\t\tfunction handleTitleClick(event) {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tconst href = event.target.getAttribute('href').substr(1);\r\n\t\t\tscrollToElementWithOffset(href);\r\n\t\t}\r\n\r\n\t\t\/\/ Tambahkan event listener untuk semua tautan judul\r\n\t\tconst titleLinks = document.querySelectorAll('a[href^=\"#\"]');\r\n\t\ttitleLinks.forEach(link => {\r\n\t\t\tlink.addEventListener('click', handleTitleClick);\r\n\t\t});\r\n\t\t\r\n\t});\r\n    <\/script> -->\r\n\n<h2 id=\"definisi-mendalam-mengenai-stockout-cost\"><strong><span id=\"a\">Saat Stok Kosong Jadi Biaya Tambahan<\/span><\/strong><\/h2>\n<p>Stockout cost adalah total kerugian saat permintaan datang, tetapi stok tidak tersedia di waktu dan lokasi yang dibutuhkan.\u00a0 Kerugiannya biasanya muncul berantai: transaksi batal, tim mengejar stok dengan cara cepat, lalu biaya ikut membengkak.<\/p>\n<p>Selain itu, customer experience ikut terganggu karena pelanggan terlanjur menunggu, lalu memilih beli di tempat lain.<\/p>\n<p>Dalam akuntansi manajemen, stockout cost sering dipahami sebagai opportunity cost karena dampaknya tidak terkumpul di satu pos biaya. Karena itu, angkanya lebih sering terbaca lewat indikator seperti gross margin yang turun, cancel\/backorder yang naik, dan biaya pengiriman ekspres yang makin sering.<\/p>\n<h2 id=\"komponen-utama-pembentuk-stockout-cost\"><strong><span id=\"b\">Komponen Utama Pembentuk Stockout Cost<\/span><\/strong><\/h2>\n<p>Untuk benar-benar memahami seberapa besar kerugian yang ditimbulkan, perusahaan perlu membedah komponen-komponen yang membentuk stockout cost.<\/p>\n<h3><strong>1. Kehilangan Margin Penjualan Langsung<\/strong><\/h3>\n<p>Saat stok kosong, transaksi yang seharusnya terjadi jadi hilang, dan margin ikut hilang. Cara paling aman menghitungnya adalah <a href=\"https:\/\/www.hashmicro.com\/id\/blog\/gross-margin-adalah\/\">fokus ke gross margin<\/a>, bukan omzet.<\/p>\n<ul>\n<li>Rumus cepat: unit yang hilang \u00d7 margin per unit<\/li>\n<li>Contoh: margin Rp500.000\/unit, kehilangan 10 unit dalam seminggu \u2192 Rp5.000.000<\/li>\n<\/ul>\n<p>Angka ini penting, tapi jangan berhenti di sini karena biasanya ini baru bagian yang paling mudah terlihat.<\/p>\n<h3><strong>2. Biaya Backorder dan Penyelamatan Pesanan<\/strong><\/h3>\n<p>Kadang pelanggan masih mau menunggu, jadi penjualan selamat, tapi biaya tambahan ikut muncul dan margin jadi tergerus. Biaya ini sering tidak dicatat sebagai satu pos khusus, jadi perlu ditandai dari aktivitas operasional.<\/p>\n<p>Yang biasanya masuk di sini:<\/p>\n<ul>\n<li>biaya admin untuk pesanan susulan dan perubahan jadwal<\/li>\n<li>biaya komunikasi dan follow-up pelanggan<\/li>\n<li>biaya pengiriman ekspres atau upgrade kurir<\/li>\n<li>biaya handling tambahan karena barang diproses dua kali<\/li>\n<\/ul>\n<p>Intinya, penjualan tetap masuk, tetapi profit per order turun karena prosesnya jadi lebih berat.<\/p>\n<h3><strong>3. Hilangnya Penjualan Produk Pendamping<\/strong><\/h3>\n<p>Stockout jarang cuma menghilangkan satu item, karena pelanggan biasanya belanja dalam satu \u201cpaket kebutuhan\u201d. Saat item utama kosong, ukuran keranjang belanja ikut menyusut dan toko kehilangan nilai transaksi yang seharusnya ikut terbeli.<\/p>\n<p>Contoh yang sering kejadian:<\/p>\n<ul>\n<li>cat tembok kosong \u2192 kuas, roller, lakban ikut tidak jadi<\/li>\n<li>printer kosong \u2192 tinta dan kertas ikut batal<\/li>\n<li>bahan baku utama kosong \u2192 bahan pendukung ikut tidak terpakai<\/li>\n<\/ul>\n<p>Supaya ketahuan, cek data attach rate atau lihat produk mana yang paling sering dibeli bareng item utama.<\/p>\n<h3><strong>4. Turunnya Loyalitas dan Customer Lifetime Value<\/strong><\/h3>\n<p>Stockout yang berulang bikin pelanggan menilai bisnis \u201ctidak siap\u201d dan mulai cari alternatif. Dampaknya terasa di repeat order yang turun, bukan di satu transaksi saja.<\/p>\n<p>Yang bisa dipantau untuk melihat efek ini:<\/p>\n<ul>\n<li>repeat purchase rate turun<\/li>\n<li>cancel rate naik<\/li>\n<li>komplain terkait ketersediaan makin sering<\/li>\n<li>pelanggan yang sama tidak balik dalam periode berikutnya<\/li>\n<\/ul>\n<p>Di titik ini, kerugiannya bukan cuma transaksi yang hilang, tapi juga potensi keuntungan jangka panjang dari pelanggan tersebut.<\/p>\n<h2 id=\"akar-masalah-mengapa-stockout-terjadi\"><strong><span id=\"c\">Akar Masalah Mengapa Stockout Terjadi<\/span><\/strong><\/h2>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-188846\" src=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/02\/infografis-stockout-cost.webp\" alt=\"infografis-stockout-cost\" width=\"1536\" height=\"1024\" srcset=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/02\/infografis-stockout-cost.webp 1536w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/02\/infografis-stockout-cost-300x200.webp 300w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/02\/infografis-stockout-cost-1024x683.webp 1024w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/02\/infografis-stockout-cost-768x512.webp 768w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/02\/infografis-stockout-cost-630x420.webp 630w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/02\/infografis-stockout-cost-150x100.webp 150w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/02\/infografis-stockout-cost-696x464.webp 696w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/02\/infografis-stockout-cost-1068x712.webp 1068w\" sizes=\"auto, (max-width: 1536px) 100vw, 1536px\" \/><\/p>\n<p>Kekosongan stok jarang disebabkan oleh satu faktor tunggal, melainkan kombinasi dari berbagai inefisiensi dalam manajemen rantai pasok.<\/p>\n<h3><strong>1. Forecast Permintaan Meleset<\/strong><\/h3>\n<p>Ini terjadi saat perusahaan mengandalkan angka historis tanpa membaca pemicu permintaan yang sedang jalan. Akhirnya, stok yang dipesan telat atau kurang, sementara demand sudah keburu naik.<\/p>\n<p>Biasanya penyebabnya:<\/p>\n<ul>\n<li>promo marketing naikkan demand, tapi forecast tidak ikut naik<\/li>\n<li>pola musiman tidak masuk perhitungan<\/li>\n<li>perubahan harga kompetitor atau tren pasar tidak dipantau<\/li>\n<li>perencanaan masih berbasis \u201cfeeling\u201d atau angka rata-rata<\/li>\n<\/ul>\n<p>Kalau mau cepat cek, lihat item yang sering stockout saat promo atau periode ramai. Itu biasanya sinyal forecasting belum tersambung ke aktivitas bisnis.<\/p>\n<h3><strong>2. Data Stok Tidak Cocok dengan Stok Fisik<\/strong><\/h3>\n<p>Sistem terlihat punya stok, tapi gudang tidak punya barangnya. Ini yang sering disebut phantom inventory, dan efeknya bikin tim sales\/CS tetap terima order karena sistem bilang aman.<\/p>\n<p>Sumber masalah yang sering terjadi antara lain:<\/p>\n<ul>\n<li>input manual yang terlambat atau salah<\/li>\n<li>barang rusak\/retur tidak dipisahkan jelas<\/li>\n<li>shrinkage (hilang) tidak tercatat<\/li>\n<li>proses receiving dan putaway tidak rapi<\/li>\n<li>stock opname jarang atau tidak konsisten<\/li>\n<\/ul>\n<p>Banyak kasus &#8216;stok ada di sistem&#8217; tapi order gagal dipenuhi karena barang tidak ditemukan di lokasi.<\/p>\n<h3><strong>3. Suplai dan Lead Time Tidak Stabil<\/strong><\/h3>\n<p>Stockout gampang terjadi saat perusahaan terlalu percaya satu alur pengadaan. Begitu ada gangguan kecil di supplier atau logistik, stok langsung kosong karena tidak ada pengaman.<\/p>\n<p>Hal yang biasanya memicu:<\/p>\n<ul>\n<li>ketergantungan pada satu pemasok tanpa alternatif<\/li>\n<li>lead time sering molor dari estimasi<\/li>\n<li>MOQ, jadwal produksi supplier, atau jadwal kapal berubah<\/li>\n<li>komunikasi status PO lemah, jadi telat sadar ada delay<\/li>\n<\/ul>\n<p>Kalau lead time real di lapangan lebih lama dari asumsi, otomatis ada hari kosong yang membuat stokout berulang.<\/p>\n<h3><strong>4. Prioritas SKU Tidak Jelas<\/strong><\/h3>\n<p>Masalahnya bukan jumlah stok total, tapi <a href=\"https:\/\/www.hashmicro.com\/id\/blog\/analisis-abc\">metode pengelompokan prioritas barang<\/a> dan stok yang ada tidak sesuai prioritas. Barang slow-moving kebanyakan, sedangkan fast-moving cepat habis karena perlakuannya disamaratakan.<\/p>\n<p>Yang sering terjadi:<\/p>\n<ul>\n<li>semua SKU diperlakukan sama, padahal demand beda jauh<\/li>\n<li>modal kerja habis di barang yang perputarannya lambat<\/li>\n<li>reorder point tidak dibedakan per kategori<\/li>\n<li>tidak ada pengelompokan seperti ABC untuk fokus ke barang paling laku<\/li>\n<\/ul>\n<p>Kalau kategori barang terlaris sering stockout, biasanya prioritas replenishment dan alokasi stok belum bener.<\/p>\n<h2 id=\"metodologi-menghitung-stockout-cost\"><strong>Metodologi Menghitung Stockout Cost<\/strong><\/h2>\n<p>Berikut adalah metodologi menghitung stockout cost:<\/p>\n<p><strong>Rumus Dasar Stockout Cost:<\/strong><\/p>\n<p style=\"background-color: #f4f4f4; padding: 15px; border-left: 5px solid #2c3e50; font-family: monospace;\">CS = (ND x AUS x P) + CC<\/p>\n<p>Keterangan:<\/p>\n<ul>\n<li><strong>CS (Cost of Stockout):<\/strong> Biaya total kekosongan stok.<\/li>\n<li><strong>ND (Number of Days):<\/strong> Jumlah hari produk kosong (out of stock).<\/li>\n<li><strong>AUS (Average Units Sold):<\/strong> Rata-rata unit terjual per hari.<\/li>\n<li><strong>P (Price\/Profit):<\/strong> Harga per unit atau profit margin per unit (tergantung apakah Anda menghitung kehilangan pendapatan atau kehilangan keuntungan).<\/li>\n<li><strong>CC (Consequence Cost):<\/strong> Biaya konsekuensi tambahan (lembur, biaya kirim ekspres, penalti kontrak, dll).<\/li>\n<\/ul>\n<p><strong>Contoh Studi Kasus Sederhana:<\/strong><\/p>\n<p>Sebuah<a href=\"https:\/\/www.hashmicro.com\/id\/blog\/software-procurement-distributor-mesin\/\"> distributor suku cadang mesin<\/a> mengalami kekosongan stok untuk filter oli tipe X selama 3 hari. Rata-rata penjualan harian filter tersebut adalah 50 unit dengan margin keuntungan Rp20.000 per unit.<\/p>\n<p>Karena kekosongan ini, mereka harus melakukan pengiriman darurat dari gudang cabang lain dengan biaya tambahan Rp500.000.<\/p>\n<p>Perhitungannya adalah:<\/p>\n<ul>\n<li>Kehilangan Profit Harian: 50 unit x Rp20.000 = Rp1.000.000<\/li>\n<li>Total Kehilangan Profit (3 hari): Rp1.000.000 x 3 = Rp3.000.000<\/li>\n<li>Biaya Konsekuensi: Rp500.000<\/li>\n<li><strong>Total Stockout Cost: Rp3.500.000<\/strong><\/li>\n<\/ul>\n<p>Angka ini belum termasuk kerugian imateriel jika pelanggan memutuskan untuk berpindah ke distributor lain secara permanen.<\/p>\n<p>Menghitung dan memelihara persediaan pengaman yang memadai adalah kunci untuk menjaga tingkat layanan (service level) tetap tinggi tanpa membebani gudang <a href=\"https:\/\/www.hashmicro.com\/id\/blog\/cara-mencegah-overstock\/\">dengan stok yang berlebihan<\/a>.<\/p>\n<p>Perusahaan harus waspada terhadap risiko penumpukan barang berlebih atau overstock, yang dapat menyebabkan uang mati (dead stock) dan biaya penyimpanan yang tinggi. Sistem yang cerdas akan membantu menyeimbangkan kedua risiko ini secara optimal.<\/p>\n<h2 id=\"analisis-dampak-stockout-cost-spesifik-industri\"><strong>Dampak Stockout Cost di Tiap Industri<\/strong><\/h2>\n<p>Stockout itu efeknya beda-beda tergantung industrinya, karena yang paling mahal di tiap sektor juga beda. Jadi, bagian ini membantu manajer operasional fokus ke kerugian yang benar-benar paling sering kejadian di model bisnisnya.<\/p>\n<h3><strong>1. Manufaktur ketika lini produksi berhenti<\/strong><\/h3>\n<p>Di manufaktur, stockout sering berubah jadi downtime karena satu komponen kecil saja bisa nahan satu proses. Akibatnya, biaya muncul berlapis dan cepat membengkak.<\/p>\n<p>Yang biasanya paling terasa:<\/p>\n<ul>\n<li>biaya tenaga kerja menganggur karena operator dan tim produksi tetap jalan di jam kerja<\/li>\n<li>biaya logistik darurat karena perusahaan mengejar bahan lewat pengiriman lebih cepat yang biayanya jauh lebih mahal<\/li>\n<li>biaya keterlambatan pengiriman yang bisa berujung denda sesuai kontrak\/SLA<\/li>\n<li>biaya rework dan penjadwalan ulang karena urutan produksi terpaksa diacak<\/li>\n<\/ul>\n<h3><strong>2. Ritel dan FMCG ketika pelanggan pindah merek atau pindah toko<\/strong><\/h3>\n<p>Begitu rak kosong, banyak pelanggan langsung cari <a href=\"https:\/\/www.hashmicro.com\/id\/blog\/barang-substitusi\/\">substitusi yang tersedia<\/a>. Itu bikin kerugian bukan cuma dari transaksi hari itu, tapi juga dari kebiasaan beli yang mulai bergeser.<\/p>\n<p>Dampak yang sering muncul:<\/p>\n<ul>\n<li>brand switching karena pelanggan ambil merek lain yang ready<\/li>\n<li>store switching karena sebagian pelanggan memilih belanja ke toko lain saat itu juga<\/li>\n<li>basket size ikut turun karena produk pendamping yang biasanya ikut kebeli jadi tidak jadi<\/li>\n<li>penilaian ketersediaan produk menurun dan ini biasanya kebaca dari repeat order yang melemah<\/li>\n<\/ul>\n<h3><strong>3. E-commerce ketika biaya akuisisi jadi boros<\/strong><\/h3>\n<p>Di e-commerce, stockout sering \u201cmenghabiskan biaya\u201d sebelum transaksi terjadi. Traffic sudah masuk, klik sudah dibayar, lalu conversion jatuh karena stok kosong.<\/p>\n<p>Yang paling sering kejadian:<\/p>\n<ul>\n<li>budget iklan terbuang saat iklan mengarah ke halaman produk yang stoknya habis<\/li>\n<li>conversion rate turun dan performa campaign ikut melemah karena sinyal pembelian putus<\/li>\n<li>penjualan organik ikut seret karena momentum sales history berhenti saat produk tidak available (efeknya terasa walau stok sudah balik)<\/li>\n<\/ul>\n<p>pengelolaan stok jadi KPI penting di banyak marketplace karena berkaitan dengan performa inventory dan ketersediaan barang<\/p>\n<h3><strong>4. Distribusi dan grosir ketika efek bullwhip muncul<\/strong><\/h3>\n<p>Di distribusi, stockout sering bikin order jadi \u201ctidak natural\u201d karena ada panic buying saat stok balik. Lalu sinyal demand membesar ke hulu, dan ujungnya malah overstock di periode berikutnya.<\/p>\n<p>Dampaknya biasanya berupa:<\/p>\n<ul>\n<li>order fluktuatif (hari ini kosong, besok dipesan berlebihan)<\/li>\n<li>forecast makin sulit karena demand terlihat tidak stabil padahal sumbernya stockout<\/li>\n<li>overstock setelahnya yang memicu biaya simpan, slow moving, sampai markdown<\/li>\n<\/ul>\n<style>\r\n\t#baca-juga {\r\n\t\tpadding: 16px;\r\n\t\tbackground-color: #f7eaea;\r\n\t\tborder-left: 3px solid #af2828;\r\n\t\tfont-weight: 500;\r\n\t\tmargin-bottom: 26px;\r\n\t}\r\n\t\r\n\t#baca-juga a {\r\n\t\tcolor: #af2828 !important;\r\n\t\ttransition: all 0.2s ease-in-out;\r\n\t}\r\n\t\r\n\t#baca-juga a:hover {\r\n\t\tcolor: #af282880 !important;\r\n\t}\r\n<\/style>\r\n\r\n<div id=\"baca-juga\">\r\n\t<span>Baca juga: <a href=\"https:\/\/www.hashmicro.com\/id\/blog\/demand-forecasting\/\">Cara Membuat Demand Forecasting untuk Mengukur Permintaan dan Supply di Masa Mendatang<\/a><\/span>\r\n<\/div>\n<h2 id=\"langkah-implementasi-pencegahan-dengan-kpi\"><strong>Langkah Implementasi Pencegahan Stockout Cost<\/strong><\/h2>\n<p>Tujuan langkah ini sederhana: produk tersedia saat dibutuhkan, tanpa menumpuk stok yang tidak bergerak. Karena itu, tiap langkah di bawah dipasang KPI yang bisa dipantau mingguan dan dibahas rutin di operasional.<\/p>\n<h3><strong>1. Audit Data dan Klasifikasi Inventaris dengan Analisis ABC<\/strong><\/h3>\n<p>Mulai dari data yang rapi dulu, karena forecast dan ROP akan ikut salah kalau stok di sistem tidak sama dengan stok fisik. Setelah itu, lakukan Analisis ABC supaya tim fokus ke SKU yang paling berpengaruh ke omzet dan layanan.<\/p>\n<h4><strong>Analisis ABC (ringkas)<\/strong><\/h4>\n<ul>\n<li>Kategori A: SKU prioritas tinggi, biasanya menyumbang porsi besar nilai penjualan.<\/li>\n<li>Kategori B: SKU menengah, perputaran stabil.<\/li>\n<li>Kategori C: SKU rendah, perputaran lambat.<\/li>\n<\/ul>\n<p><strong>Yang dikerjakan<\/strong><\/p>\n<ul>\n<li>rapikan master data SKU (nama, UoM, barcode\/SKU code, lokasi rak)<\/li>\n<li>rapikan alur receiving, retur, barang rusak, dan penyesuaian stok<\/li>\n<li>jalankan cycle count lebih sering untuk kategori A<\/li>\n<\/ul>\n<p><strong>KPI terkait<\/strong><\/p>\n<ul>\n<li>Inventory Accuracy Rate (IRA) = (jumlah SKU akurat \/ total SKU dicek) \u00d7 100%<\/li>\n<li>Target praktik yang aman: \u226598% sebelum masuk ke peramalan dan otomasi pembelian.<\/li>\n<\/ul>\n<h3><strong>2. Penetapan Safety Stock Dinamis<\/strong><\/h3>\n<p>Safety stock perlu mengikuti pola demand dan ketidakpastian lead time. Jadi, angka safety stock tiap SKU akan beda, terutama saat periode promo, musim ramai, atau supplier sering molor.<\/p>\n<p><strong>Yang dikerjakan<\/strong><\/p>\n<ul>\n<li>tetapkan service level per kategori ABC<\/li>\n<li>hitung variasi demand (naik-turun penjualan) dan variasi lead time supplier<\/li>\n<li>perbarui safety stock secara berkala (misalnya tiap bulan, atau setelah kampanye besar)<\/li>\n<\/ul>\n<p><strong>KPI terkait<\/strong><\/p>\n<p>Service Level \/ Fill Rate (persentase permintaan yang terpenuhi dari stok tersedia)<\/p>\n<p>Contoh target yang realistis:<\/p>\n<ul>\n<li>A: 98%<\/li>\n<li>B: 95%<\/li>\n<li>C: 90%<\/li>\n<\/ul>\n<p>Tambahkan guardrail supaya biaya stok tetap sehat:<\/p>\n<ul>\n<li>Days of Inventory (DOI) atau<\/li>\n<li>Inventory Turnover untuk memantau stok menumpuk<\/li>\n<\/ul>\n<h3><strong>Otomatisasi Reorder Point ROP<\/strong><\/h3>\n<p>ROP dipakai sebagai pemicu pembelian agar tim tidak menunggu stok hampir nol dulu. Rumus dasarnya tetap simpel dan mudah diaudit.<\/p>\n<p><strong>Rumus ROP:<\/strong><\/p>\n<ul>\n<li>ROP = (Rata-rata penjualan harian \u00d7 lead time) + safety stock<\/li>\n<\/ul>\n<p><strong>Yang dikerjakan<\/strong><\/p>\n<ul>\n<li>set ROP dan minimum order per SKU, minimal untuk kategori A dulu<\/li>\n<li>aktifkan alert saat stok mendekati ROP<\/li>\n<li>buat alur approval yang jelas untuk PO yang dibuat sistem (biar tidak mandek)<\/li>\n<\/ul>\n<p><strong>KPI terkait<\/strong><\/p>\n<ul>\n<li>OOS Rate (Out-of-Stock Rate) = (jumlah SKU kosong \/ total SKU aktif) \u00d7 100%<br \/>\nTarget umum: &lt;5% untuk total SKU, lalu buat target lebih ketat untuk kategori A sesuai kebutuhan layanan.<\/li>\n<li>Tambahan yang sering lebih \u201cngena\u201d: Stockout Days (berapa hari SKU kosong dalam sebulan).<\/li>\n<\/ul>\n<h3><strong>Evaluasi Kinerja Pemasok dengan Scorecard<\/strong><\/h3>\n<p>Kalau supplier sering telat atau kirim tidak lengkap, tim internal akan terus kejar-kejaran dengan stok kosong. Karena itu, supplier perlu dipantau dengan skor yang konsisten.<\/p>\n<p><strong>Yang dikerjakan<\/strong><\/p>\n<ul>\n<li>buat scorecard vendor bulanan untuk item kritis<\/li>\n<li>pisahkan vendor untuk kategori A (komponen kritis) sebagai fokus utama<\/li>\n<li>siapkan rencana cadangan untuk item yang risikonya tinggi (vendor alternatif atau buffer lead time)<\/li>\n<\/ul>\n<p><strong>KPI terkait<\/strong><\/p>\n<ul>\n<li>OTIF (On-Time In-Full) = pesanan datang tepat waktu dan lengkap sesuai PO<\/li>\n<li>Target praktis: tetapkan baseline dulu dengan software inventory yang bisa mengukur OTIF, lalu naikkan bertahap sampai stabil (misalnya 90% \u2192 95%).<\/li>\n<\/ul>\n<p><strong>Tambahan yang sering membantu diagnosis:<\/strong><\/p>\n<ul>\n<li>Lead Time Adherence (ketepatan lead time aktual vs estimasi)<\/li>\n<li>Supplier Fill Rate (kelengkapan jumlah kiriman)<\/li>\n<li>Defect\/Return Rate (barang bermasalah yang memotong stok)<\/li>\n<\/ul>\n<h2 id=\"jebakan-umum-manajemen-stok-mitigasi\"><strong>Jebakan Umum dalam Manajemen Stok dan Strategi Mitigasi<\/strong><\/h2>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-188868\" src=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/02\/cara-mengatasi-stockout-cost.webp\" alt=\"cara-mengatasi-stockout-cost infografis\" width=\"1536\" height=\"1024\" srcset=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/02\/cara-mengatasi-stockout-cost.webp 1536w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/02\/cara-mengatasi-stockout-cost-300x200.webp 300w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/02\/cara-mengatasi-stockout-cost-1024x683.webp 1024w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/02\/cara-mengatasi-stockout-cost-768x512.webp 768w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/02\/cara-mengatasi-stockout-cost-630x420.webp 630w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/02\/cara-mengatasi-stockout-cost-150x100.webp 150w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/02\/cara-mengatasi-stockout-cost-696x464.webp 696w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/02\/cara-mengatasi-stockout-cost-1068x712.webp 1068w\" sizes=\"auto, (max-width: 1536px) 100vw, 1536px\" \/><\/p>\n<p>Bahkan dengan niat terbaik, perusahaan sering jatuh ke dalam pola pikir atau proses yang justru memperburuk risiko stockout cost. Berikut adalah jebakan paling umum dan cara menghindarinya.<\/p>\n<h3><strong>1. Data Penjualan, Marketing, dan Operasional Jalan Sendiri<\/strong><\/h3>\n<p><strong>Masalah:<\/strong><br \/>\nPromo jalan, demand naik, lalu stok habis sebelum tim gudang dan procurement sempat siap. Setelah itu, stockout cost muncul berlapis seperti margin hilang, biaya kirim ekspres naik, dan komplain pelanggan bertambah.<\/p>\n<p><strong>Mitigasi:<\/strong><\/p>\n<ul>\n<li>Buat alur yang memastikan rencana demand \u201cterlihat\u201d sebelum eksekusi promo.<\/li>\n<li>pakai ritme S&amp;OP sederhana (mingguan untuk bisnis cepat, bulanan untuk yang stabil)<\/li>\n<li>buat kalender promo yang wajib masuk ke perencanaan pembelian<\/li>\n<li>pasang early warning: item yang masuk promo harus punya target service level dan buffer lead time<\/li>\n<\/ul>\n<p><strong>KPI yang dipantau<\/strong><\/p>\n<ul>\n<li>OOS (Out of Stock) Rate pada SKU promo<\/li>\n<li>Fill rate saat periode kampanye<\/li>\n<li>Wasted ad spend \/ klik ke halaman out of stock (untuk e-commerce)<\/li>\n<\/ul>\n<h3><strong>2. Mengabaikan Musiman (Seasonality)<\/strong><\/h3>\n<p data-start=\"1182\" data-end=\"1438\"><strong data-start=\"1182\" data-end=\"1193\">Masalah:<\/strong><br data-start=\"1193\" data-end=\"1196\" \/>ROP dan safety stock dihitung dari rata-rata tahunan, lalu dipakai untuk semua bulan. Akhirnya, saat puncak demand, stok kosong; saat sepi, stok menumpuk. Dua-duanya bikin biaya naik, dan stockout cost biasanya muncul duluan di periode ramai.<\/p>\n<p data-start=\"1440\" data-end=\"1528\"><strong data-start=\"1440\" data-end=\"1452\">Mitigasi:<\/strong><br data-start=\"1452\" data-end=\"1455\" \/>Perlakukan demand musiman sebagai parameter yang wajib masuk perhitungan.<\/p>\n<ul>\n<li data-start=\"1532\" data-end=\"1608\">buat baseline per bulan (bukan rata-rata setahun) untuk SKU sensitif musim<\/li>\n<li data-start=\"1611\" data-end=\"1687\">naikkan safety stock sebelum peak season, lalu turunkan lagi setelah lewat<\/li>\n<li data-start=\"1690\" data-end=\"1746\">pisahkan pola demand: regular, musiman, dan promo-driven<\/li>\n<\/ul>\n<p data-start=\"1748\" data-end=\"1771\"><strong data-start=\"1748\" data-end=\"1769\">KPI yang dipantau:<\/strong><\/p>\n<ul>\n<li data-start=\"1774\" data-end=\"1817\">Stockout days per SKU pada periode puncak<\/li>\n<li data-start=\"1820\" data-end=\"1869\">Forecast error (misalnya MAPE) pada SKU musiman<\/li>\n<li data-start=\"1872\" data-end=\"1946\">Inventory turnover setelah peak season (untuk mencegah sisa stok menumpuk)<\/li>\n<\/ul>\n<h3><strong>3. Terlalu Bergantung pada Satu Pemasok untuk Item Kritis<\/strong><\/h3>\n<p>Harga memang terlihat lebih murah saat single sourcing, tetapi risikonya mahal ketika supplier telat atau terganggu. Begitu lead time molor, perusahaan akan kelabakan, dan stockout cost melonjak lewat pembelian darurat, expedite shipping, serta downtime.<\/p>\n<p><strong>Mitigasi:<\/strong><\/p>\n<ul>\n<li>Bangun cadangan yang realistis tanpa bikin biaya pengadaan jadi liar.<\/li>\n<li>terapkan dual sourcing untuk item kritis, terutama kategori A<\/li>\n<li>bagi porsi pembelian supaya pemasok cadangan tetap aktif dan siap dipakai<\/li>\n<li>buat aturan: item dengan OTIF rendah wajib punya backup supplier atau buffer lebih besar<\/li>\n<\/ul>\n<p><strong>Contoh pembagian yang praktis:<\/strong><\/p>\n<p>70% pemasok utama, 30% pemasok cadangan, lalu evaluasi per kuartal<\/p>\n<p><strong>KPI yang dipantau:<\/strong><\/p>\n<ul>\n<li>OTIF per pemasok<\/li>\n<li>lead time aktual vs lead time target<\/li>\n<li>emergency purchase rate (berapa kali beli darurat dalam sebulan)<\/li>\n<\/ul>\n<style>\r\n\t#baca-juga {\r\n\t\tpadding: 16px;\r\n\t\tbackground-color: #f7eaea;\r\n\t\tborder-left: 3px solid #af2828;\r\n\t\tfont-weight: 500;\r\n\t\tmargin-bottom: 26px;\r\n\t}\r\n\t\r\n\t#baca-juga a {\r\n\t\tcolor: #af2828 !important;\r\n\t\ttransition: all 0.2s ease-in-out;\r\n\t}\r\n\t\r\n\t#baca-juga a:hover {\r\n\t\tcolor: #af282880 !important;\r\n\t}\r\n<\/style>\r\n\r\n<div id=\"baca-juga\">\r\n\t<span>Baca juga: <a href=\"https:\/\/www.hashmicro.com\/id\/blog\/understock\/\">Understock: Pengertian dan Strategi Mengatasinya dalam Bisnis<\/a><\/span>\r\n<\/div>\n<h2 id=\"kesimpulan\"><strong>Kesimpulan<\/strong><\/h2>\n<p>Stockout cost sering terasa kecil di awal, tetapi efeknya bisa cepat menumpuk dan makan profit. Biayanya muncul dari banyak arah, mulai dari margin yang hilang, biaya pemulihan seperti pembelian darurat dan pengiriman ekspres, sampai pelanggan yang berhenti balik karena sudah keburu pindah.<\/p>\n<p>Supaya risikonya turun, fokusnya perlu bergeser ke kontrol yang bisa diukur. Audit akurasi stok, klasifikasi ABC, safety stock yang menyesuaikan pola demand, ROP yang jelas, dan evaluasi pemasok berbasis OTIF membuat keputusan stok lebih rapi dan tidak reaktif.<\/p>\n<p>Manajemen inventaris yang baik memastikan ketersediaan produk tetap stabil tanpa membuat biaya simpan membengkak. Saat stockout cost turun, bisnis bukan hanya menyelamatkan penjualan, tetapi juga menjaga pengalaman pelanggan dan memperkuat kepercayaan dalam jangka panjang.<\/p>\n<a href=\"https:\/\/www.hashmicro.com\/id\/inventaris?medium=moneysite-banner\" target=\"_blank\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/01\/inventory-definitive.webp\" data-desktop-src=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/01\/inventory-definitive.webp\" data-mobile-src=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/01\/inventory-definitive-m.webp\" alt=\"Inventory_Definisi\" class=\"responsive-image-banner\"><\/a>\r\n\r\n<script>\r\n    \/\/ check which image to use based on screensize\r\n    document.addEventListener(\"DOMContentLoaded\", function() {\r\n        function updateImageSource() {\r\n            var images = document.querySelectorAll('.responsive-image-banner');\r\n            var screenWidth = window.innerWidth;\r\n\r\n            images.forEach(function(img) {\r\n                var mobileSrc = img.getAttribute('data-mobile-src');\r\n                var desktopSrc = img.getAttribute('data-desktop-src');\r\n\r\n                if (screenWidth < 576 && mobileSrc) {\r\n                    img.setAttribute('src', mobileSrc);\r\n                } else {\r\n                    img.setAttribute('src', desktopSrc);\r\n                }\r\n            });\r\n        }\r\n\r\n        \/\/ Initial check\r\n        updateImageSource();\r\n\r\n        \/\/ Update on resize\r\n        window.addEventListener('resize', updateImageSource);\r\n    });\r\n<\/script>\n<h2><strong>Pertanyaan Seputar Stockout Cost<\/strong><\/h2>\n<ul class=\"bottom_faq\">\n<li>\n<details>\n<summary><strong>Apa perbedaan antara stockout cost dan holding cost?<\/strong><\/summary>\n<p>Stockout cost adalah biaya yang timbul akibat kehabisan stok (hilangnya penjualan, reputasi buruk), sedangkan holding cost adalah biaya yang dikeluarkan untuk menyimpan barang di gudang (sewa, asuransi, depresiasi).<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>Bagaimana cara menghitung stockout cost dengan sederhana?<\/strong><\/summary>\n<p>Rumus dasarnya adalah: (Jumlah hari kosong x Rata-rata penjualan harian x Margin keuntungan per unit) + Biaya konsekuensi tambahan.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>Apa dampak terbesar dari stockout bagi bisnis ritel?<\/strong><\/summary>\n<p>Dampak terbesarnya adalah hilangnya loyalitas pelanggan. Konsumen cenderung beralih ke kompetitor jika barang yang dicari tidak tersedia, yang mengakibatkan hilangnya Customer Lifetime Value.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>Apakah safety stock dapat menghilangkan risiko stockout sepenuhnya?<\/strong><\/summary>\n<p>Safety stock secara signifikan mengurangi risiko stockout, namun tidak bisa menghilangkannya 100% karena adanya faktor tak terduga seperti bencana alam atau gangguan rantai pasok global yang ekstrem.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>Mengapa data inventaris yang tidak akurat menyebabkan stockout?<\/strong><\/summary>\n<p>Data yang tidak akurat (phantom inventory) membuat sistem mengira stok masih ada, sehingga tidak memicu pemesanan ulang (reorder), padahal stok fisik di gudang sebenarnya sudah habis.<\/p>\n<\/details>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Banyak pelaku bisnis ritel, manufaktur, hingga distribusi menghadapi tantangan serius saat stok barang tiba-tiba habis di tengah permintaan tinggi. Kondisi ini bukan sekadar gangguan operasional, tetapi juga memicu kerugian finansial tersembunyi yang sering luput dari perhitungan. Stockout cost menjadi faktor penting yang menentukan seberapa besar dampak kekosongan persediaan terhadap penjualan, loyalitas pelanggan, dan reputasi merek. [&hellip;]<\/p>\n","protected":false},"author":160,"featured_media":189274,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[88],"tags":[],"class_list":{"0":"post-188260","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-inventory"},"acf":{"post_reviewer":""},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.1 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Stockout Cost dan Cara Menekannya dengan KPI yang Terukur<\/title>\n<meta name=\"description\" content=\"Pahami stockout cost, dampaknya ke profit, dan langkah pencegahan berbasis KPI seperti OOS rate, OTIF, dan inventory accuracy.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.hashmicro.com\/id\/blog\/stockout-cost\/\" \/>\n<meta property=\"og:locale\" content=\"id_ID\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Stockout Cost dan Cara Menekannya dengan KPI yang Terukur\" \/>\n<meta property=\"og:description\" content=\"Pahami stockout cost, dampaknya ke profit, dan langkah pencegahan berbasis KPI seperti OOS rate, OTIF, dan inventory accuracy.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.hashmicro.com\/id\/blog\/stockout-cost\/\" \/>\n<meta property=\"og:site_name\" content=\"HashMicro Indonesia\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/hashmicro\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-20T03:59:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-22T02:09:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/02\/stockout-cost.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Jessica Wijaya\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@hashmicro\" \/>\n<meta name=\"twitter:site\" content=\"@hashmicro\" \/>\n<meta name=\"twitter:label1\" content=\"Ditulis oleh\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jessica Wijaya\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimasi waktu membaca\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 menit\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/stockout-cost\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/stockout-cost\\\/\"},\"author\":{\"name\":\"Jessica Wijaya\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#\\\/schema\\\/person\\\/4d83ca1a7056c0a44f813f8721086980\"},\"headline\":\"Stockout Cost dan Cara Menekannya dengan KPI yang Terukur\",\"datePublished\":\"2026-02-20T03:59:06+00:00\",\"dateModified\":\"2026-04-22T02:09:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/stockout-cost\\\/\"},\"wordCount\":2782,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/stockout-cost\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/stockout-cost.webp\",\"articleSection\":[\"Inventory\"],\"inLanguage\":\"id\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/stockout-cost\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/stockout-cost\\\/\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/stockout-cost\\\/\",\"name\":\"Stockout Cost dan Cara Menekannya dengan KPI yang Terukur\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/stockout-cost\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/stockout-cost\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/stockout-cost.webp\",\"datePublished\":\"2026-02-20T03:59:06+00:00\",\"dateModified\":\"2026-04-22T02:09:08+00:00\",\"description\":\"Pahami stockout cost, dampaknya ke profit, dan langkah pencegahan berbasis KPI seperti OOS rate, OTIF, dan inventory accuracy.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/stockout-cost\\\/#breadcrumb\"},\"inLanguage\":\"id\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/stockout-cost\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/stockout-cost\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/stockout-cost.webp\",\"contentUrl\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/stockout-cost.webp\",\"width\":1200,\"height\":675,\"caption\":\"stockout cost\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/stockout-cost\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Stockout Cost dan Cara Menekannya dengan KPI yang Terukur\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/\",\"name\":\"HashMicro Indonesia\",\"description\":\"Blog Software Manajemen Bisnis Indonesia #1\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"id\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#organization\",\"name\":\"HashMicro Indonesia\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/11\\\/hashmicro-logo-blog.webp\",\"contentUrl\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/11\\\/hashmicro-logo-blog.webp\",\"width\":924,\"height\":121,\"caption\":\"HashMicro Indonesia\"},\"image\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/hashmicro\",\"https:\\\/\\\/x.com\\\/hashmicro\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/hashmicro\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#\\\/schema\\\/person\\\/4d83ca1a7056c0a44f813f8721086980\",\"name\":\"Jessica Wijaya\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/Jessica-Wijaya-1-1-96x96.webp\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/Jessica-Wijaya-1-1-96x96.webp\",\"contentUrl\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/Jessica-Wijaya-1-1-96x96.webp\",\"caption\":\"Jessica Wijaya\"},\"description\":\"Selama lebih dari 5 tahun sebagai Senior Content Writer, Jessica telah menulis topik yang mengulas tentang bidang inventory dan warehouse management. Keahliannya mencakup penulisan artikel manajemen stok dan persediaan, perencanaan kebutuhan, multi-warehouse management, dan integrasi sistem digital untuk pengelolaan barang.\",\"sameAs\":[\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/\"],\"gender\":\"Perempuan\",\"knowsAbout\":[\"Inventory\",\"inventory management\",\"manajemen inventaris\"],\"knowsLanguage\":[\"Inggris\",\"Indonesia\"],\"jobTitle\":\"Senior Content Writer\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/author\\\/jessicawijaya\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Stockout Cost dan Cara Menekannya dengan KPI yang Terukur","description":"Pahami stockout cost, dampaknya ke profit, dan langkah pencegahan berbasis KPI seperti OOS rate, OTIF, dan inventory accuracy.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.hashmicro.com\/id\/blog\/stockout-cost\/","og_locale":"id_ID","og_type":"article","og_title":"Stockout Cost dan Cara Menekannya dengan KPI yang Terukur","og_description":"Pahami stockout cost, dampaknya ke profit, dan langkah pencegahan berbasis KPI seperti OOS rate, OTIF, dan inventory accuracy.","og_url":"https:\/\/www.hashmicro.com\/id\/blog\/stockout-cost\/","og_site_name":"HashMicro Indonesia","article_publisher":"https:\/\/www.facebook.com\/hashmicro","article_published_time":"2026-02-20T03:59:06+00:00","article_modified_time":"2026-04-22T02:09:08+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/02\/stockout-cost.webp","type":"image\/webp"}],"author":"Jessica Wijaya","twitter_card":"summary_large_image","twitter_creator":"@hashmicro","twitter_site":"@hashmicro","twitter_misc":{"Ditulis oleh":"Jessica Wijaya","Estimasi waktu membaca":"16 menit"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.hashmicro.com\/id\/blog\/stockout-cost\/#article","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/stockout-cost\/"},"author":{"name":"Jessica Wijaya","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/person\/4d83ca1a7056c0a44f813f8721086980"},"headline":"Stockout Cost dan Cara Menekannya dengan KPI yang Terukur","datePublished":"2026-02-20T03:59:06+00:00","dateModified":"2026-04-22T02:09:08+00:00","mainEntityOfPage":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/stockout-cost\/"},"wordCount":2782,"commentCount":0,"publisher":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/#organization"},"image":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/stockout-cost\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/02\/stockout-cost.webp","articleSection":["Inventory"],"inLanguage":"id","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.hashmicro.com\/id\/blog\/stockout-cost\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.hashmicro.com\/id\/blog\/stockout-cost\/","url":"https:\/\/www.hashmicro.com\/id\/blog\/stockout-cost\/","name":"Stockout Cost dan Cara Menekannya dengan KPI yang Terukur","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/stockout-cost\/#primaryimage"},"image":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/stockout-cost\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/02\/stockout-cost.webp","datePublished":"2026-02-20T03:59:06+00:00","dateModified":"2026-04-22T02:09:08+00:00","description":"Pahami stockout cost, dampaknya ke profit, dan langkah pencegahan berbasis KPI seperti OOS rate, OTIF, dan inventory accuracy.","breadcrumb":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/stockout-cost\/#breadcrumb"},"inLanguage":"id","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.hashmicro.com\/id\/blog\/stockout-cost\/"]}]},{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/www.hashmicro.com\/id\/blog\/stockout-cost\/#primaryimage","url":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/02\/stockout-cost.webp","contentUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/02\/stockout-cost.webp","width":1200,"height":675,"caption":"stockout cost"},{"@type":"BreadcrumbList","@id":"https:\/\/www.hashmicro.com\/id\/blog\/stockout-cost\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.hashmicro.com\/id\/blog\/"},{"@type":"ListItem","position":2,"name":"Stockout Cost dan Cara Menekannya dengan KPI yang Terukur"}]},{"@type":"WebSite","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#website","url":"https:\/\/www.hashmicro.com\/id\/blog\/","name":"HashMicro Indonesia","description":"Blog Software Manajemen Bisnis Indonesia #1","publisher":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.hashmicro.com\/id\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"id"},{"@type":"Organization","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#organization","name":"HashMicro Indonesia","url":"https:\/\/www.hashmicro.com\/id\/blog\/","logo":{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2023\/11\/hashmicro-logo-blog.webp","contentUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2023\/11\/hashmicro-logo-blog.webp","width":924,"height":121,"caption":"HashMicro Indonesia"},"image":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/hashmicro","https:\/\/x.com\/hashmicro","https:\/\/www.linkedin.com\/company\/hashmicro"]},{"@type":"Person","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/person\/4d83ca1a7056c0a44f813f8721086980","name":"Jessica Wijaya","image":{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/Jessica-Wijaya-1-1-96x96.webp","url":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/Jessica-Wijaya-1-1-96x96.webp","contentUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/Jessica-Wijaya-1-1-96x96.webp","caption":"Jessica Wijaya"},"description":"Selama lebih dari 5 tahun sebagai Senior Content Writer, Jessica telah menulis topik yang mengulas tentang bidang inventory dan warehouse management. Keahliannya mencakup penulisan artikel manajemen stok dan persediaan, perencanaan kebutuhan, multi-warehouse management, dan integrasi sistem digital untuk pengelolaan barang.","sameAs":["https:\/\/www.hashmicro.com\/id\/"],"gender":"Perempuan","knowsAbout":["Inventory","inventory management","manajemen inventaris"],"knowsLanguage":["Inggris","Indonesia"],"jobTitle":"Senior Content Writer","url":"https:\/\/www.hashmicro.com\/id\/blog\/author\/jessicawijaya\/"}]}},"focus_keyword":"stockout cost","order_j":"","_links":{"self":[{"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/posts\/188260","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/users\/160"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/comments?post=188260"}],"version-history":[{"count":7,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/posts\/188260\/revisions"}],"predecessor-version":[{"id":192661,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/posts\/188260\/revisions\/192661"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/media\/189274"}],"wp:attachment":[{"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/media?parent=188260"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/categories?post=188260"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/tags?post=188260"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}