{"id":14521,"date":"2025-01-09T01:00:17","date_gmt":"2025-01-09T01:00:17","guid":{"rendered":"https:\/\/www.hashmicro.com\/ph\/blog\/?p=14521"},"modified":"2026-03-30T09:01:32","modified_gmt":"2026-03-30T09:01:32","slug":"safety-stock-formula","status":"publish","type":"post","link":"https:\/\/www.hashmicro.com\/ph\/blog\/safety-stock-formula\/","title":{"rendered":"Understanding Safety Stock Formula for Inventory Success"},"content":{"rendered":"<p>Unexpected demand spikes and shipment delays can quickly lead to stockouts and unhappy customers. The safety stock formula helps businesses keep enough buffer inventory to meet demand without holding too much stock.<\/p>\n<p>Getting safety stock wrong can cause lost sales, higher storage costs, and inefficient inventory use. This article explains how the formula works, shows real-life examples, and explores how inventory software can simplify the calculation process.<\/p>\n<div id=\"toc_group_article\" style=''>\r\n\t<p style='font-size:25px;font-weight:bold; margin-bottom:0px'>\r\n\t\tTable of Contents\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\">Content Lists<\/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\t\r\n#toc {\r\n  background-color: #FFF;\r\n\tpadding: 17px 24px 20px 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  padding-top: 20px;\r\n  margin-top: 0px;\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: 84% !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<\/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\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\/\/ Function to handle click on all <a> elements with href starting with #\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\/\/ Add event listener for all <a> elements in toc-list and 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 class 'td-post-content'\r\n  const article = document.querySelector('.td-post-content');\r\n\r\n  \/\/ Find all h2 elements within the article\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');\r\n\r\n\/\/ Sticky TOC and update heading\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 + 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.innerWidth < 767){\r\n\t\t\ttocTitle.textContent = 'Table of Contents'; \/\/ 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\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  tocTitle.textContent = 'Table of Contents'; \/\/ 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        tocTitle.textContent = activeLink ? activeLink.textContent : \"\"; \/\/ Update title only if activeLink exists\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 = 'Table of Contents'; \/\/ 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\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}\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 = 'Table of Contents'; \/\/ 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\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\/\/             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        } 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\t\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        let headerCounter = 0; \/\/ Counter to generate unique IDs\r\n\r\n\t\t\/\/ Function to generate ID in header0, header1, etc. format\r\n\t\tfunction formatId() {\r\n\t\t\treturn `header-${headerCounter++}`; \/\/ ID format: header0, header1, etc.\r\n\t\t}\r\n\r\n\/\/ \t\tfunction formatId(text) {\r\n\/\/             return text.trim().replace(\/[^\\w\\d]+\/g, '_');\r\n\/\/         }\r\n\t\r\n        \/\/ Function to create 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        \/\/ Object to store list of h2 and h3 with their titles\r\n        const headings = [];\r\n\r\n           \/\/ Get all h2 and h3 elements\r\n        \/\/ Get all h2 and h3 elements\r\n\t\tconst elements = document.querySelectorAll('.td-post-content h2');\r\n\r\n\t\telements.forEach(element => {\r\n\t\t\tif (element.tagName === 'H2') {\r\n\t\t\t\tconst id = formatId(); \/\/ Generate new ID\r\n\t\t\t\telement.id = id; \/\/ Set ID to h2 element\r\n\t\t\t\tif (element.textContent.toLowerCase() === \"key takeaways\") {return;} \/\/ Hide Key Takeaways di ToC\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 = formatId(); \/\/ Generate new ID\r\n\t\t\t\telement.id = id; \/\/ Set ID to h3 element\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       \/\/ Create HTML list from headings object\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}`; \/\/ Use the newly generated ID\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\/\/ Get ul element with id 'list_toc'\r\n\t\tconst ulFloat = document.getElementById('list_toc');\r\n\r\n\t\t\/\/ Get content (child elements) from ul with id 'list_toc'\r\n\t\tconst clonedChildren = ulFloat.cloneNode(true).children;\r\n\r\n\t\t\/\/ Get ul element with id 'list_toc_float'\r\n\t\tconst ulToc = document.getElementById('list_toc_float');\r\n\r\n\t\t\/\/ Add content obtained from 'list_toc' to ul with id 'list_toc_float'\r\n\t\tulToc.append(...clonedChildren);\r\n\r\n\r\n        \/\/ Function to get navbar height\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\/\/ Function to add scroll position offset\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\/\/ Function to handle title link click\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\/\/ Add event listener for all title links\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});\r\n    <\/script> -->\r\n\n<table style=\"border-collapse: collapse; background-color: #fffacd; border-radius: 25px 25px 25px 25px;\" width=\"100%\">\n<tbody>\n<tr>\n<td style=\"padding: 15px; border: none;\">\n<h3 style=\"margin-bottom: 10px;\"><span style=\"background-color: #990000; color: #ffffff; padding: 5px;\"><b>Key Takeaways<\/b><\/span><\/h3>\n<ul>\n<li style=\"font-weight: 400;\">Safety stock is a <a href=\"#a\">vital buffer to prevent stockouts<\/a> caused by demand fluctuations, shipping delays, or seasonal spikes, ensuring operational stability and customer satisfaction.<\/li>\n<li style=\"font-weight: 400;\">Lead time demand shows <a href=\"#b\">how much stock your business needs<\/a> while waiting for a new order, helping you prevent stockouts and plan inventory more accurately.<\/li>\n<li>You can <a href=\"#c\">calculate safety stock with a<\/a> precise statistical formula or a simpler backup method, depending on your inventory needs and data availability.<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2><strong><span id=\"a\">What is the Safety Stock Formula?<\/span><\/strong><\/h2>\n<p>The <a href=\"https:\/\/www.hashmicro.com\/ph\/blog\/safety-stock-inventory\/\">safety stock<\/a> formula is critical for businesses to prevent stockouts caused by demand fluctuations or delivery delays. It maintains a sufficient inventory buffer, enabling companies to meet unexpected customer needs while avoiding unnecessarily overstocking and tying up capital.<\/p>\n<p>A common formula for calculating safety stock is:<\/p>\n<blockquote><p><strong>Safety Stock = Z-score \u00d7 \u03c3LT<\/strong><\/p><\/blockquote>\n<p>Here, the Z-score represents the desired service level (e.g., Z = 1.65 for a 95% service level), and \u03c3LT denotes the standard deviation of demand during lead time. This formula allows businesses to manage inventory variability and balance customer satisfaction and operational efficiency.<\/p>\n<p>Alternatively, another widely used formula is:<\/p>\n<blockquote><p><strong>Safety Stock = (Maximum Daily Sales \u00d7 Maximum Lead Time) \u2013 (Average Daily Sales \u00d7 Average Lead Time)<\/strong><\/p><\/blockquote>\n<p>This method requires determining the highest daily sales and the longest lead time in a given period and calculating averages. For example, if a company sells 180 units over 90 days and receives five shipments with varying lead times, it can compute averages and extremes to derive accurate safety stock levels.<\/p>\n<h2><strong><span id=\"b\">What is Lead Time Demand?<\/span><\/strong><\/h2>\n<p><img decoding=\"async\" class=\"wp-image-23045 size-full aligncenter\" src=\"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock.webp\" alt=\"safety stock\" width=\"1200\" height=\"675\" srcset=\"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock.webp 1200w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-300x169.webp 300w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-1024x576.webp 1024w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-768x432.webp 768w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-747x420.webp 747w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-150x84.webp 150w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-696x392.webp 696w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-1068x601.webp 1068w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/p>\n<p>Lead time demand is the total number of products a business expects to sell or use while waiting for a new order to arrive. This figure helps businesses estimate how much stock they need during that period, so operations can continue without disruption.<\/p>\n<p>By calculating lead time demand, companies can match inventory levels more closely with expected demand and reduce the risk of stockouts. When paired with safety stock, it also helps maintain a healthier balance between having enough inventory and avoiding excess stock.<\/p>\n<h2><strong><span id=\"c\">How to Calculate Safety Stock<\/span><\/strong><\/h2>\n<p><img decoding=\"async\" class=\"wp-image-23046 size-full aligncenter\" src=\"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-2.webp\" alt=\"safety stock formula\" width=\"1200\" height=\"675\" srcset=\"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-2.webp 1200w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-2-300x169.webp 300w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-2-1024x576.webp 1024w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-2-768x432.webp 768w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-2-747x420.webp 747w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-2-150x84.webp 150w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-2-696x392.webp 696w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-2-1068x601.webp 1068w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/p>\n<p>Businesses often use two methods to calculate safety stock: the Z-score method and the simplified method. The more precise formula is <strong>Safety Stock = Z-score \u00d7 \u03c3LT<\/strong>. For example, with a 95% service level, a Z-score of 1.65, and a standard deviation of 50 units, the safety stock is about 83 units.<\/p>\n<p>The simpler method is <strong>Safety Stock = Average Demand \u00d7 Lead Time \u00d7 Safety Factor<\/strong>. For example, if daily demand is 20 units, lead time is 10 days, and the safety factor is 1.5, the safety stock is 300 units.<\/p>\n<h2><strong>Importance of Safety Stock<\/strong><\/h2>\n<p><img decoding=\"async\" class=\"wp-image-23044 size-full aligncenter\" src=\"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-2.webp\" alt=\"safety stock\" width=\"1200\" height=\"675\" srcset=\"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-2.webp 1200w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-2-300x169.webp 300w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-2-1024x576.webp 1024w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-2-768x432.webp 768w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-2-747x420.webp 747w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-2-150x84.webp 150w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-2-696x392.webp 696w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-2-1068x601.webp 1068w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/p>\n<p>Safety stock is vital in maintaining operational stability and customer satisfaction, even during unforeseen circumstances. Acting as a buffer protects businesses from disruptions caused by demand fluctuations, supplier delays, and other unexpected challenges.<\/p>\n<div class=\"overflow-x-auto w-full px-2 mb-6\">\n<table style=\"border-collapse: collapse; width: 100%; border: 1px solid #d1d5db;\">\n<thead>\n<tr>\n<th style=\"background-color: #990000; color: #ffffff; padding: 12px; text-align: left; border: 1px solid #d1d5db;\">Benefit<\/th>\n<th style=\"background-color: #990000; color: #ffffff; padding: 12px; text-align: left; border: 1px solid #d1d5db;\">Impact<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"padding: 12px; border: 1px solid #d1d5db;\"><strong>Handles demand spikes<\/strong><\/td>\n<td style=\"padding: 12px; border: 1px solid #d1d5db;\">Helps meet sudden increases in orders without stockouts.<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 12px; border: 1px solid #d1d5db;\"><strong>Prevents stockouts from shipping delays<\/strong><\/td>\n<td style=\"padding: 12px; border: 1px solid #d1d5db;\">Keeps operations running when supplier deliveries are late.<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 12px; border: 1px solid #d1d5db;\"><strong>Meets seasonal demand<\/strong><\/td>\n<td style=\"padding: 12px; border: 1px solid #d1d5db;\">Supports higher sales during peak demand periods.<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 12px; border: 1px solid #d1d5db;\"><strong>Covers inventory losses<\/strong><\/td>\n<td style=\"padding: 12px; border: 1px solid #d1d5db;\">Provides backup stock for damaged, lost, or stolen items.<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 12px; border: 1px solid #d1d5db;\"><strong>Optimizes inventory management<\/strong><\/td>\n<td style=\"padding: 12px; border: 1px solid #d1d5db;\">Improves stock control when paired with tracking and automation.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h2><strong>Safety Stock and the Reorder Point Formula<\/strong><\/h2>\n<p><img decoding=\"async\" class=\"wp-image-23043 size-full aligncenter\" src=\"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-3.webp\" alt=\"safety stock formula\" width=\"1200\" height=\"675\" srcset=\"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-3.webp 1200w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-3-300x169.webp 300w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-3-1024x576.webp 1024w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-3-768x432.webp 768w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-3-747x420.webp 747w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-3-150x84.webp 150w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-3-696x392.webp 696w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-3-1068x601.webp 1068w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/>The reorder point (ROP) formula is essential for businesses to ensure they never run out of stock. It calculates the ideal time to reorder inventory by considering lead time demand and safety stock, ensuring enough supply to meet customer needs while waiting for new stock to arrive.<\/p>\n<p>The formula, <strong>ROP = (Average Demand \u00d7 Lead Time) + Safety Stock<\/strong>, combines two critical components. The first part, average demand multiplied by lead time, estimates the expected inventory consumption during the waiting period, while safety stock acts as a buffer against demand fluctuations or delivery delays.<\/p>\n<p>Businesses can balance maintaining sufficient inventory and avoiding excess stock using the reorder point formula. Reaching the <a href=\"https:\/\/www.hashmicro.com\/ph\/blog\/reorder-level\/\">reorder level<\/a> signals the need to place a new order, ensure smooth operations, prevent stockouts, and optimize inventory management effectively.<\/p>\n<h2><strong>Risks Related to Safety Stock<\/strong><\/h2>\n<p><img decoding=\"async\" class=\"wp-image-23042 size-full aligncenter\" src=\"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-4.webp\" alt=\"safety stock formula\" width=\"1200\" height=\"675\" srcset=\"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-4.webp 1200w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-4-300x169.webp 300w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-4-1024x576.webp 1024w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-4-768x432.webp 768w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-4-747x420.webp 747w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-4-150x84.webp 150w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-4-696x392.webp 696w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula-4-1068x601.webp 1068w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/p>\n<p>While safety stock is crucial for preventing stockouts, it can also lead to challenges if not managed properly. Striking the right balance is essential to avoid unnecessary costs and inefficiencies. Here are the key risks associated with safety stock:<\/p>\n<div class=\"overflow-x-auto w-full px-2 mb-6\">\n<table style=\"border-collapse: collapse; width: 100%; border: 1px solid #d1d5db;\">\n<thead>\n<tr>\n<th style=\"background-color: #990000; color: #ffffff; padding: 12px; text-align: left; border: 1px solid #d1d5db;\">Risk<\/th>\n<th style=\"background-color: #990000; color: #ffffff; padding: 12px; text-align: left; border: 1px solid #d1d5db;\">Impact<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"padding: 12px; border: 1px solid #d1d5db;\"><strong>Excess inventory costs<\/strong><\/td>\n<td style=\"padding: 12px; border: 1px solid #d1d5db;\">Ties up capital and raises storage costs.<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 12px; border: 1px solid #d1d5db;\"><strong>Obsolescence and spoilage<\/strong><\/td>\n<td style=\"padding: 12px; border: 1px solid #d1d5db;\">Unsold stock may expire or lose value.<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 12px; border: 1px solid #d1d5db;\"><strong>Inventory mismanagement<\/strong><\/td>\n<td style=\"padding: 12px; border: 1px solid #d1d5db;\">Too much buffer can weaken planning accuracy.<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 12px; border: 1px solid #d1d5db;\"><strong>Cash flow issues<\/strong><\/td>\n<td style=\"padding: 12px; border: 1px solid #d1d5db;\">Funds get stuck in stock instead of growth needs.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Effective safety stock management is essential to mitigate these risks while ensuring smooth operations. A reliable <a href=\"https:\/\/www.hashmicro.com\/ph\/blog\/best-inventory-management-software\/\">inventory tools for Philippine business<\/a> can automate calculations, optimize stock levels, and maintain a balance between preventing stockouts and avoiding overstocking.<\/p>\n<h2><strong>Conclusion<\/strong><\/h2>\n<p>Safety stock helps your business stay prepared when demand rises unexpectedly or deliveries arrive late. With the right formula, you can reduce stockouts, protect sales, and keep customer service consistent.<\/p>\n<p>When you calculate safety stock carefully, you also avoid holding more inventory than necessary. This helps control storage costs, protect cash flow, and support smoother day to day operations.<\/p>\n<h2><strong>FAQ About Safety Stock Formula<\/strong><\/h2>\n<ul class=\"bottom_faq\">\n<li>\n<details>\n<summary><strong>What is the safety stock in EOQ?<\/strong><\/summary>\n<p>The goal of integrating safety stock with EOQ is to efficiently balance ordering and holding costs while ensuring demand and service level requirements are met. Ordering costs encompass expenses such as placing orders, transportation, delivery, and receiving the inventory.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>What is the 50% rule of safety stock?<\/strong><\/summary>\n<p>The 50% rule for safety stock recommends keeping a reserve equal to 50% of the average demand during lead time. This means maintaining half of the inventory typically consumed while waiting for new stock to arrive.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>What is the rule of thumb for safety stock?<\/strong><\/summary>\n<p>The ideal safety stock level is influenced by various factors, such as inventory turnover rate, current and projected demand, sales volume, and supplier lead times. A general guideline is calculating safety stock by multiplying the daily usage rate by the lead time in days.<\/p>\n<\/details>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Unexpected demand spikes and shipment delays can quickly lead to stockouts and unhappy customers. The safety stock formula helps businesses keep enough buffer inventory to meet demand without holding too much stock. Getting safety stock wrong can cause lost sales, higher storage costs, and inefficient inventory use. This article explains how the formula works, shows [&hellip;]<\/p>\n","protected":false},"author":19,"featured_media":22858,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[20],"tags":[],"class_list":{"0":"post-14521","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-inventory"},"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.6 (Yoast SEO v26.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Understanding Safety Stock Formula for Inventory Success<\/title>\n<meta name=\"description\" content=\"Discover how the safety stock formula ensures optimal inventory levels, preventing stockouts and enhancing customer satisfaction.\" \/>\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\/ph\/blog\/safety-stock-formula\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Understanding Safety Stock Formula for Inventory Success\" \/>\n<meta property=\"og:description\" content=\"Discover how the safety stock formula ensures optimal inventory levels, preventing stockouts and enhancing customer satisfaction.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.hashmicro.com\/ph\/blog\/safety-stock-formula\/\" \/>\n<meta property=\"og:site_name\" content=\"HashMicro Philippine Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-01-09T01:00:17+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-30T09:01:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"450\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Afresti\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Afresti\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.hashmicro.com\/ph\/blog\/safety-stock-formula\/\",\"url\":\"https:\/\/www.hashmicro.com\/ph\/blog\/safety-stock-formula\/\",\"name\":\"Understanding Safety Stock Formula for Inventory Success\",\"isPartOf\":{\"@id\":\"https:\/\/www.hashmicro.com\/ph\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.hashmicro.com\/ph\/blog\/safety-stock-formula\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/ph\/blog\/safety-stock-formula\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula.webp\",\"datePublished\":\"2025-01-09T01:00:17+00:00\",\"dateModified\":\"2026-03-30T09:01:32+00:00\",\"author\":{\"@id\":\"https:\/\/www.hashmicro.com\/ph\/blog\/#\/schema\/person\/ad19475b8b2c723c4295ecf114d566f1\"},\"description\":\"Discover how the safety stock formula ensures optimal inventory levels, preventing stockouts and enhancing customer satisfaction.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.hashmicro.com\/ph\/blog\/safety-stock-formula\/#breadcrumb\"},\"inLanguage\":\"en-PH\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.hashmicro.com\/ph\/blog\/safety-stock-formula\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-PH\",\"@id\":\"https:\/\/www.hashmicro.com\/ph\/blog\/safety-stock-formula\/#primaryimage\",\"url\":\"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula.webp\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula.webp\",\"width\":800,\"height\":450,\"caption\":\"safety stock formula\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.hashmicro.com\/ph\/blog\/safety-stock-formula\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.hashmicro.com\/ph\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Understanding Safety Stock Formula for Inventory Success\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.hashmicro.com\/ph\/blog\/#website\",\"url\":\"https:\/\/www.hashmicro.com\/ph\/blog\/\",\"name\":\"HashMicro Philippine Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.hashmicro.com\/ph\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-PH\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.hashmicro.com\/ph\/blog\/#\/schema\/person\/ad19475b8b2c723c4295ecf114d566f1\",\"name\":\"Afresti\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-PH\",\"@id\":\"https:\/\/www.hashmicro.com\/ph\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/02\/cropped-WhatsApp-Image-2024-07-31-at-14.16.47_e4fc5c69-scaled-1-96x96.jpg\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/02\/cropped-WhatsApp-Image-2024-07-31-at-14.16.47_e4fc5c69-scaled-1-96x96.jpg\",\"caption\":\"Afresti\"},\"description\":\"A SEO content writer at HashMicro with a keen interest in savvy tech and a passion for exploring innovative digital strategies, dedicated to continuous learning and professional growth.\",\"url\":\"https:\/\/www.hashmicro.com\/ph\/blog\/author\/afresti\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Understanding Safety Stock Formula for Inventory Success","description":"Discover how the safety stock formula ensures optimal inventory levels, preventing stockouts and enhancing customer satisfaction.","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\/ph\/blog\/safety-stock-formula\/","og_locale":"en_US","og_type":"article","og_title":"Understanding Safety Stock Formula for Inventory Success","og_description":"Discover how the safety stock formula ensures optimal inventory levels, preventing stockouts and enhancing customer satisfaction.","og_url":"https:\/\/www.hashmicro.com\/ph\/blog\/safety-stock-formula\/","og_site_name":"HashMicro Philippine Blog","article_published_time":"2025-01-09T01:00:17+00:00","article_modified_time":"2026-03-30T09:01:32+00:00","og_image":[{"width":800,"height":450,"url":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula.webp","type":"image\/webp"}],"author":"Afresti","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Afresti","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.hashmicro.com\/ph\/blog\/safety-stock-formula\/","url":"https:\/\/www.hashmicro.com\/ph\/blog\/safety-stock-formula\/","name":"Understanding Safety Stock Formula for Inventory Success","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/ph\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.hashmicro.com\/ph\/blog\/safety-stock-formula\/#primaryimage"},"image":{"@id":"https:\/\/www.hashmicro.com\/ph\/blog\/safety-stock-formula\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula.webp","datePublished":"2025-01-09T01:00:17+00:00","dateModified":"2026-03-30T09:01:32+00:00","author":{"@id":"https:\/\/www.hashmicro.com\/ph\/blog\/#\/schema\/person\/ad19475b8b2c723c4295ecf114d566f1"},"description":"Discover how the safety stock formula ensures optimal inventory levels, preventing stockouts and enhancing customer satisfaction.","breadcrumb":{"@id":"https:\/\/www.hashmicro.com\/ph\/blog\/safety-stock-formula\/#breadcrumb"},"inLanguage":"en-PH","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.hashmicro.com\/ph\/blog\/safety-stock-formula\/"]}]},{"@type":"ImageObject","inLanguage":"en-PH","@id":"https:\/\/www.hashmicro.com\/ph\/blog\/safety-stock-formula\/#primaryimage","url":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula.webp","contentUrl":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/01\/safety-stock-formula.webp","width":800,"height":450,"caption":"safety stock formula"},{"@type":"BreadcrumbList","@id":"https:\/\/www.hashmicro.com\/ph\/blog\/safety-stock-formula\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.hashmicro.com\/ph\/blog\/"},{"@type":"ListItem","position":2,"name":"Understanding Safety Stock Formula for Inventory Success"}]},{"@type":"WebSite","@id":"https:\/\/www.hashmicro.com\/ph\/blog\/#website","url":"https:\/\/www.hashmicro.com\/ph\/blog\/","name":"HashMicro Philippine Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.hashmicro.com\/ph\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-PH"},{"@type":"Person","@id":"https:\/\/www.hashmicro.com\/ph\/blog\/#\/schema\/person\/ad19475b8b2c723c4295ecf114d566f1","name":"Afresti","image":{"@type":"ImageObject","inLanguage":"en-PH","@id":"https:\/\/www.hashmicro.com\/ph\/blog\/#\/schema\/person\/image\/","url":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/02\/cropped-WhatsApp-Image-2024-07-31-at-14.16.47_e4fc5c69-scaled-1-96x96.jpg","contentUrl":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/02\/cropped-WhatsApp-Image-2024-07-31-at-14.16.47_e4fc5c69-scaled-1-96x96.jpg","caption":"Afresti"},"description":"A SEO content writer at HashMicro with a keen interest in savvy tech and a passion for exploring innovative digital strategies, dedicated to continuous learning and professional growth.","url":"https:\/\/www.hashmicro.com\/ph\/blog\/author\/afresti\/"}]}},"order_j":"","_links":{"self":[{"href":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-json\/wp\/v2\/posts\/14521","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-json\/wp\/v2\/users\/19"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-json\/wp\/v2\/comments?post=14521"}],"version-history":[{"count":11,"href":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-json\/wp\/v2\/posts\/14521\/revisions"}],"predecessor-version":[{"id":33758,"href":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-json\/wp\/v2\/posts\/14521\/revisions\/33758"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-json\/wp\/v2\/media\/22858"}],"wp:attachment":[{"href":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-json\/wp\/v2\/media?parent=14521"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-json\/wp\/v2\/categories?post=14521"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-json\/wp\/v2\/tags?post=14521"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}