{"id":4839,"date":"2025-03-17T03:39:28","date_gmt":"2025-03-17T03:39:28","guid":{"rendered":"https:\/\/www.hashmicro.com\/my\/blog\/?p=4839"},"modified":"2026-02-19T04:37:29","modified_gmt":"2026-02-19T04:37:29","slug":"inventory-levels","status":"publish","type":"post","link":"https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/","title":{"rendered":"What Are Inventory Levels? How to Calculate and Best Practices"},"content":{"rendered":"<p data-start=\"382\" data-end=\"683\">How much stock should you really keep? Managing inventory levels can be tricky because keeping too little leads to stock-outs and lost sales, while keeping too much ties up cash and increases storage costs. Balancing the right amount of stock is not always easy, don\u2019t you think?<\/p>\n<p data-start=\"685\" data-end=\"1038\">Without the right system in place, businesses often scramble to restock or end up holding excess inventory that drains space and budget. To optimize inventory performance, you need more than basic stock tracking. This is why many companies use tools like <a href=\"https:\/\/www.hashmicro.com\/my\/inventory-management-system\">HashMicro Inventory Management<\/a> Software to maintain accurate, real-time control.<\/p>\n<p data-start=\"1040\" data-end=\"1350\">This guide will help you understand everything you need to know, from essential formulas to practical best practices, so you can avoid costly mistakes. If you want to see how automation enhances accuracy and control, you can request a<a href=\"https:\/\/www.hashmicro.com\/my\/free-product-demo\/?medium=web-form-header\"> free demo<\/a> before diving deeper into the strategies ahead.<\/p>\n<table style=\"border-collapse: collapse; background-color: #fffacd; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); 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;\" aria-level=\"1\">Keeping <a href=\"#definition\">the right inventory levels<\/a> prevents stockouts, lowers storage costs, and keeps operations smooth.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Minimum, maximum, danger, and <a href=\"#type\">average stock levels<\/a> help businesses manage inventory effectively.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"#hashmicro\">HashMicro Inventory Software<\/a> automates stock control, forecasting, and reporting for easier inventory management.<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/www.hashmicro.com\/my\/free-product-demo\/?medium=free-product-demo\" target=\"_blank\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/08\/free-demo-desktop-my.webp\" data-desktop-src=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/08\/free-demo-desktop-my.webp\" data-mobile-src=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2024\/07\/free-demo-mobile-my.jpg\" alt=\"FreeDemo\" 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><!-- <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 Content\r\n\t<\/p>\r\n\t<ul id=\"list_toc\" class='list_toc'><\/ul>\r\n<\/div>\r\n\r\n<div class=\"dropdown-fixed-top\" id=\"dropdown-fixed-top\">\r\n\t<div class=\"row\">\r\n\t\t<p id=\"pilihDaftarIsi\">Content Lists<\/p>\r\n\t\t<p><i class=\"td-icon-menu-down\"><\/i><\/p>\r\n\t<\/div>\r\n\t\r\n\t<div>\r\n\t\t<ul id=\"list_toc_top\" class='list_toc'><\/ul>\r\n\t<\/div>\r\n<\/div> -->\r\n\r\n<!-- TOC mobile -->\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\">Table of Content<\/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<!-- TOC mobile -->\r\n\r\n<style>\r\n\t@media (max-width: 992px) {\r\n\t\t#toc_group_article {\r\n\t\t\tpadding-top: 24px;\r\n\t\t}\r\n\t}\r\n\t\r\n\t#list_toc_float {\r\n\t\tmax-height: calc(100vh - 250px);\r\n\t\toverflow-y: auto;\r\n\t}\r\n\t\r\n\t#list_toc_top {\r\n\t\tdisplay: none;\r\n\t\tbackground: #fff;\r\n\t\tmargin-bottom: 4px;\r\n\t}\r\n\t\r\n\t#list_toc_top li {\r\n\t\tdisplay: block;\r\n\t\tmargin-left: 0;\r\n\t\tlist-style: none;\r\n\t}\r\n\t\r\n\t#list_toc_top a {\r\n\t\tpadding: 5px;\r\n\t\tdisplay: block;\r\n\t}\r\n\t\r\n\t#list_toc_top.show {\r\n\t\tdisplay: block;\r\n\t}\r\n\r\n\t#list_toc_top a {\r\n\t\tcolor: #434343;\r\n\t\tborder-bottom: 1px solid #bbb;\r\n\t}\r\n\t\r\n\t.dropdown-fixed-top {\r\n\t\tposition: fixed;\r\n\t\ttop: 59px;\r\n\t\twidth: 100%;\r\n\t\tz-index: 99;\r\n\t\tborder-bottom: 2px solid #9c171e;\r\n\t\tpadding: 12px;\r\n\t\tbackground: #fff;\r\n\t\twidth: 100%;\r\n\t\tcursor: pointer;\r\n\t\tdisplay: none;\r\n\t\tleft: 0;\r\n\t\tbox-shadow: 0 -2px 7px 6px rgba(0, 0, 0, 0.17);\r\n\t}\r\n\t\r\n\t#dropdown-fixed-top.show {\r\n\t\tanimation: showAnim 0.5s ease;\r\n\t\tdisplay: block;\r\n\t\topacity: 1;\r\n\t}\r\n\t\r\n\t@keyframes showAnim {\r\n\t\tfrom {\r\n\t\t\tdisplay: none;\r\n\t\t\topacity: 0;\r\n\t\t}\r\n\t\tto {\r\n\t\t\tdisplay: block;\r\n\t\t\topacity: 1;\r\n\t\t}\r\n\t}\r\n\t\r\n\t.dropdown-fixed-top #list_toc_top {\r\n\t\tmax-height: calc(50vh - 110px);\r\n\t\toverflow-y: scroll;\r\n\t}\r\n\t\r\n\t.dropdown-fixed-top .row {\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: space-between\r\n\t}\r\n\t\r\n\t.dropdown-fixed-top .row p {\r\n\t\tmargin-bottom: 0;\r\n\t}\r\n\t\r\n\t#pilihDaftarIsi {\r\n\t\tmax-width: 100%;\r\n\t\toverflow: hidden;\r\n\t\twhite-space: nowrap;\r\n\t}\r\n\t\r\n\t@media (min-width: 1018px) {\r\n\t\t.dropdown-fixed-top {\r\n\t\t\tdisplay: none;\r\n\t\t}\r\n\t}\r\n\t\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_top 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: 6px;\r\n\t\tpadding-top: 2px;\r\n\t\tpadding-bottom: 2px;\r\n\t\ttransition: all 0.2s ease-in-out;\r\n\t\tfont-size: 15px;\r\n\t\tline-height: 18px;\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#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}\r\n\t\t#toc_group_article {\r\n\t\t\tdisplay:none;\r\n\t\t}\t\t\t\t\r\n\t}\r\n\r\n<\/style>\r\n\r\n<style>\r\n\t@media (max-width: 992px) {\r\n\t\t#toc_group_article {\r\n\t\t\tpadding-top: 24px;\r\n\t\t}\r\n\t}\r\n\t\r\n\t#list_toc_float {\r\n\t\tmax-height: calc(100vh - 250px);\r\n\t\toverflow-y: auto;\r\n\t}\r\n\t\r\n\t#list_toc_top {\r\n\t\tdisplay: none;\r\n\t\tbackground: #fff;\r\n\t\tmargin-bottom: 4px;\r\n\t}\r\n\t\r\n\t#list_toc_top li {\r\n\t\tdisplay: block;\r\n\t\tmargin-left: 0;\r\n\t\tlist-style: none;\r\n\t}\r\n\t\r\n\t#list_toc_top a {\r\n\t\tpadding: 5px;\r\n\t\tdisplay: block;\r\n\t}\r\n\t\r\n\t#list_toc_top.show {\r\n\t\tdisplay: block;\r\n\t}\r\n\r\n\t#list_toc_top a {\r\n\t\tcolor: #434343;\r\n\t\tborder-bottom: 1px solid #bbb;\r\n\t}\r\n\t\r\n\t.dropdown-fixed-top {\r\n\t\tposition: fixed;\r\n\t\ttop: 59px;\r\n\t\twidth: 100%;\r\n\t\tz-index: 99;\r\n\t\tborder-bottom: 2px solid #9c171e;\r\n\t\tpadding: 12px;\r\n\t\tbackground: #fff;\r\n\t\twidth: 100%;\r\n\t\tcursor: pointer;\r\n\t\tdisplay: none;\r\n\t\tleft: 0;\r\n\t\tbox-shadow: 0 -2px 7px 6px rgba(0, 0, 0, 0.17);\r\n\t}\r\n\t\r\n\t#dropdown-fixed-top.show {\r\n\t\tanimation: showAnim 0.5s ease;\r\n\t\tdisplay: block;\r\n\t\topacity: 1;\r\n\t}\r\n\t\r\n\t@keyframes showAnim {\r\n\t\tfrom {\r\n\t\t\tdisplay: none;\r\n\t\t\topacity: 0;\r\n\t\t}\r\n\t\tto {\r\n\t\t\tdisplay: block;\r\n\t\t\topacity: 1;\r\n\t\t}\r\n\t}\r\n\t\r\n\t.dropdown-fixed-top #list_toc_top {\r\n\t\tmax-height: calc(50vh - 110px);\r\n\t\toverflow-y: scroll;\r\n\t}\r\n\t\r\n\t.dropdown-fixed-top .row {\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: space-between\r\n\t}\r\n\t\r\n\t.dropdown-fixed-top .row p {\r\n\t\tmargin-bottom: 0;\r\n\t}\r\n\t\r\n\t#pilihDaftarIsi {\r\n\t\tmax-width: 100%;\r\n\t\toverflow: hidden;\r\n\t\twhite-space: nowrap;\r\n\t}\r\n\t\r\n\t@media (min-width: 1018px) {\r\n\t\t.dropdown-fixed-top {\r\n\t\t\tdisplay: none;\r\n\t\t}\r\n\t}\r\n\t\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_top 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: 6px;\r\n\t\tpadding-top: 2px;\r\n\t\tpadding-bottom: 2px;\r\n\t\ttransition: all 0.2s ease-in-out;\r\n\t\tfont-size: 15px;\r\n\t\tline-height: 18px;\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#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\r\n<\/style>\r\n\r\n<!-- START ToC styling  -->\r\n<style>\r\n\t\/* 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 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<!-- END ToC styling  -->\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\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.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 = 'Table of Content';\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 = 'Table of Content'; \/\/ 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 = 'Table of Content'; \/\/ 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 = 'Table of Content'; \/\/ 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<\/script>\r\n\r\n<!-- <script>\r\n\tvar pilihDaftarIsi = document.getElementById('pilihDaftarIsi');\r\n\t\r\n\tdocument.addEventListener('DOMContentLoaded', function() {\r\n\t\tvar dropdownFixedTop = document.querySelector('.dropdown-fixed-top');\r\n\r\n\t\tdropdownFixedTop.addEventListener('click', function() {\r\n\t\t\tvar dropdownContent = this.querySelector('.list_toc');\r\n\t\t\tdropdownContent.classList.toggle('show');\r\n\t\t});\r\n\r\n\t\twindow.addEventListener('click', function(event) {\r\n\t\t\tvar listTocTop = document.getElementById('list_toc_top');\r\n\r\n\t\t\tif (!dropdownFixedTop.contains(event.target)) {\r\n\t\t\t\tlistTocTop.classList.remove('show');\r\n\t\t\t}\r\n\t\t});\r\n\t});\r\n\t\r\n\tvar daftarIsiContainer = document.getElementById('toc_group_article');\r\n\tvar dropdownFixedTop = document.getElementById('dropdown-fixed-top');\r\n    var triggered = false; \/\/ Flag to keep track of whether the function has been triggered\r\n\r\n    window.addEventListener('scroll', function() {\r\n        if (!triggered && isCompletelyScrolledPast(daftarIsiContainer)) {\r\n            showSectionDropdownFixedTop(false);\r\n            triggered = true;\r\n        } else if (triggered && !isCompletelyScrolledPast(daftarIsiContainer)) {\r\n            showSectionDropdownFixedTop(true);\r\n            triggered = false;\r\n        }\r\n    });\r\n\r\n    function isCompletelyScrolledPast(element) {\r\n        var elementTop = element.getBoundingClientRect().top;\r\n        var elementBottom = element.getBoundingClientRect().bottom;\r\n        return elementTop < 0 && elementBottom < 0;\r\n    }\r\n\r\n    function showSectionDropdownFixedTop(show) {\r\n\t\tif (show) {\r\n\t\t\tdropdownFixedTop.classList.remove(\"show\");\r\n\t\t} else {\r\n\t\t\tdropdownFixedTop.classList.add(\"show\");\r\n\t\t}\r\n    }\r\n\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\t\t  pilihDaftarIsi.innerHTML = a.textContent;\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', 'list_toc_top']; \/\/ 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<!-- END script lama -->\r\n\t\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', 'list_toc_top']; \/\/ 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        \/\/ Fungsi untuk mengubah teks menjadi format id\r\n        function formatId(text) {\r\n            return text.trim().replace(\/[^\\w\\d]+\/g, '_');\r\n        }\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        const elements = document.querySelectorAll('.td-post-content h2');\r\n\t\t\t\/\/, .td-post-content h3\r\n\r\n        elements.forEach(element => {\r\n            if (element.tagName === 'H2') {\r\n                const id = formatId(element.textContent);\r\n                element.id = id;\r\n\t\t\t\tif(element.textContent.toLowerCase() === \"key takeaways\") {return;} \/\/ Biar ga nampilin Key Takeaways di ToC\r\n                headings.push({ level: 'h2', id: id, title: element.textContent, children: [] });\r\n            } else if (element.tagName === 'H3') {\r\n                const id = formatId(element.textContent);\r\n                element.id = id;\r\n                if (headings.length > 0) {\r\n                    headings[headings.length - 1].children.push({ level: 'h3', id: id, title: element.textContent, children: [] });\r\n                }\r\n            }\r\n        });\r\n\r\n        \/\/ Membuat list HTML dari objek headings\r\n        const ul = document.getElementById('list_toc');\r\n        let currentUl = ul;\r\n        headings.forEach(heading => {\r\n            const li = document.createElement('li');\r\n            const a = document.createElement('a');\r\n            a.textContent = heading.title;\r\n            a.href = `#${heading.id}`;\r\n            li.appendChild(a);\r\n\r\n            if (heading.level === 'h2') {\r\n                \/\/ Menyimpan ul saat ini untuk menambahkan nested ul\r\n                currentUl = li;\r\n                ul.appendChild(li);\r\n            } else if (heading.level === 'h3') {\r\n                if (!currentUl.lastElementChild || currentUl.lastElementChild.tagName !== 'UL') {\r\n                    \/\/ Jika belum ada nested ul, buat satu\r\n                    const nestedUl = document.createElement('ul');\r\n                    currentUl.appendChild(nestedUl);\r\n                    currentUl = nestedUl;\r\n                }\r\n                currentUl.appendChild(li);\r\n            }\r\n\r\n            createNestedList(li, heading.children);\r\n        });\r\n\t\t\/\/ Dapatkan elemen ul dengan id 'list_toc_float'\r\nconst ulFloat = document.getElementById('list_toc');\r\nconst ulJourney = document.getElementById('list_journey');\r\n\r\n\/\/ Dapatkan isi (child elements) dari ul dengan id 'list_toc_float'\r\n\tif (ulFloat !== null) {\r\n\t\tconst clonedChildren = ulFloat.cloneNode(true).children;\r\n\t\tconst ulToc = document.getElementById('list_toc_float');\r\n\t\tconst ulTocTop = document.getElementById('list_toc_top');\r\n\t\tif ((ulToc !== null || ulToc !== undefined) && window.innerWidth > 1018){\r\n\t\t\tulToc.append(...clonedChildren);\r\n\t\t} else {\r\n\t\t\tulTocTop.append(...clonedChildren);\r\n\t\t}\r\n\t} \r\n\r\n\tif (ulJourney !== null) {\r\n\t\tconst clonedChildrenJourney = ulJourney.cloneNode(true).children;\r\n\t\tconst ulTocJourney = document.getElementById('list_toc_journey');\r\n\t\tulTocJourney.append(...clonedChildrenJourney);\r\n\t} \r\n\r\n\r\n\r\n\r\n\t\r\n        \/\/ Fungsi untuk mengambil tinggi navbar\r\n        function getNavbarHeight() {\r\n            const navbar = document.getElementById('tdi_34');\r\n            return navbar ? navbar.offsetHeight : 0;\r\n        }\r\n\r\n        \/\/ Fungsi untuk menambahkan offset posisi scroll\r\n        function scrollToElementWithOffset(elementId) {\r\n            const element = document.getElementById(elementId);\r\n            if (element) {\r\n                const offset = getNavbarHeight();\r\n                const elementPosition = element.getBoundingClientRect().top;\r\n                const offsetPosition = elementPosition - offset-40;\r\n\r\n                window.scrollBy({\r\n                    top: offsetPosition,\r\n                    behavior: 'smooth'\r\n                });\r\n            }\r\n        }\r\n\r\n        \/\/ Fungsi untuk menangani klik pada tautan judul\r\n        function handleTitleClick(event) {\r\n            event.preventDefault();\r\n            const href = event.target.getAttribute('href').substr(1);\r\n            scrollToElementWithOffset(href);\r\n        }\r\n\r\n        \/\/ Tambahkan event listener untuk semua tautan judul\r\n        const titleLinks = document.querySelectorAll('a[href^=\"#\"]');\r\n        titleLinks.forEach(link => {\r\n            link.addEventListener('click', handleTitleClick);\r\n        });\r\n\t});\r\n    <\/script> -->\r\n<!-- \t<style>#toc_group_float{display:block !important}<\/style> -->\r\n<\/p>\n<h2><b>What are Inventory Levels?<\/b><\/h2>\n<p data-start=\"314\" data-end=\"616\">Inventory levels refer to the total amount of stock a business has at a given time, including raw materials, work in progress, and finished goods. These items may be stored in warehouses, retail outlets, or transit locations. Maintaining the proper levels helps ensure demand can be met efficiently.<\/p>\n<p data-start=\"831\" data-end=\"1114\">When inventory levels drop too low, a company may not have enough stock to fulfill orders, which can lead to missed sales and dissatisfied customers. In situations where products cannot be backordered, the business risks losing revenue to competitors who can supply the items faster.<\/p>\n<p data-start=\"1116\" data-end=\"1398\">However, keeping inventory levels too high can be equally costly. Excess stock ties up capital, increases carrying expenses, and consumes valuable storage space. If items remain unsold for too long, their value may drop, and the eventual profit margin becomes significantly smaller.<\/p>\n<h2><b>Different Types of Inventory Levels<\/b><\/h2>\n<p><span id=\"type\">Inventory levels within the supply chain help determine the optimal amount of stock a company should maintain. There are four key inventory levels: minimum, maximum, danger, and average stock levels.<\/span><\/p>\n<h3><b>1. Minimum Inventory Level<\/b><\/h3>\n<p>Minimum inventory levels represent the lowest quantity a company should maintain for each Stock Keeping Unit (SKU). Falling below this level increases the risk of the stock being empty, thus preventing the company from meeting customer demand.<\/p>\n<p>To prevent this, businesses must ensure minimum stock levels are maintained. Insufficient stock may also lead to longer lead times.<\/p>\n<h3><b>2. Maximum Inventory Level<\/b><\/h3>\n<p>Maximum inventory levels indicate the highest quantity a business should hold at any time. Exceeding this level results in unnecessary overhead costs.<\/p>\n<p>To determine maximum stock levels, companies must analyze sales trends, seasonal fluctuations, and inventory expenses. Before issuing a purchase order (PO), businesses should calculate the maximum inventory required.<\/p>\n<h3><b>3. Danger Inventory Level<\/b><\/h3>\n<p>The danger inventory level indicates that stock for a specific item is critically low. When inventory reaches this point, immediate restocking is necessary to prevent supply shortages and production disruptions.<\/p>\n<p>Companies often need to source products from suppliers who can deliver quickly, but this urgency can lead to higher procurement costs compared to standard pricing.<\/p>\n<h3><b>4. Average Inventory Level<\/b><\/h3>\n<p>An average <a href=\"https:\/\/www.sciencedirect.com\/topics\/engineering\/inventory-level\">inventory level<\/a> represents the optimal stock quantity a company should maintain. This ensures customer demand is met while keeping inventory costs low, improving cash flow, and maximizing profit margins.<\/p>\n<p>For instance, if a business sells 150 units monthly, they should maintain an average stock of 150 items, so that the expenses aren\u2019t too much.<\/p>\n<h2><b>What are Minimum and Maximum Inventory Levels?<\/b><\/h2>\n<p>To determine the ideal inventory level, the following metrics are essential:<\/p>\n<ul>\n<li aria-level=\"1\"><b>Minimal stock levels<\/b>: This refers to the lowest number of products required to fulfill all orders. If inventory runs out, safety stock\u2014extra goods reserved for emergencies\u2014serves as a backup to prevent stockouts.<\/li>\n<li aria-level=\"1\"><b>Maximum stock levels<\/b>: This represents the highest quantity of inventory that can be stored without incurring excessive warehousing costs. Surpassing this limit may lead to overstock, potentially causing storage space shortages.<\/li>\n<\/ul>\n<p>It is essential to differentiate optimal inventory levels from the average inventory level, which estimates the quantity of stock available in a facility over a given period.<\/p>\n<h2><b>Factors to Determine the Optimal Inventory Level<\/b><\/h2>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-4841\" src=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/reducing-inventory-levels.webp\" alt=\"reducing inventory levels\" width=\"1200\" height=\"675\" srcset=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/reducing-inventory-levels.webp 1200w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/reducing-inventory-levels-300x169.webp 300w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/reducing-inventory-levels-1024x576.webp 1024w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/reducing-inventory-levels-768x432.webp 768w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/reducing-inventory-levels-747x420.webp 747w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/reducing-inventory-levels-150x84.webp 150w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/reducing-inventory-levels-696x392.webp 696w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/reducing-inventory-levels-1068x601.webp 1068w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/p>\n<p>When setting target inventory levels for your business, key factors to consider include:<\/p>\n<ul>\n<li aria-level=\"1\"><b>Product handling times<\/b>: More inventory requires additional time and resources for movement and management.<\/li>\n<li aria-level=\"1\"><b>Lead Time<\/b>: Warehouse management teams must monitor supplier lead times\u2014the period between placing a stock order and receiving the goods.<\/li>\n<li aria-level=\"1\"><b>Stock Turnover:<\/b> Effective inventory organization relies on tracking turnover rates for each SKU. Demand analysis techniques, such as ABC analysis, help classify SKUs and optimize stock placement to improve efficiency.<\/li>\n<li aria-level=\"1\"><b>Sales channel expansion<\/b>: Entering new markets or platforms complicates inventory management and requires careful stock level adjustments.<\/li>\n<li aria-level=\"1\"><b>Market trends<\/b>: Research, such as from <a href=\"https:\/\/www.mckinsey.com\/capabilities\/operations\/our-insights\/taking-the-pulse-of-shifting-supply-chains\" target=\"_blank\" rel=\"noopener\">McKinsey\u2019s survey<\/a>, indicates that businesses now maintain higher overall stock levels to balance resilience with cost control.<\/li>\n<\/ul>\n<p>As inventory optimization remains a priority for many businesses, finding the right balance between stock availability and cost efficiency is crucial.<\/p>\n<h2><b>How to Calculate Inventory Levels<\/b><\/h2>\n<p>Knowing how to calculate inventory levels helps businesses avoid stock shortages and excess storage costs. Below is a breakdown of three key formulas to determine the right stock levels for your needs.<\/p>\n<h3><b>1. Calculating Minimum Inventory Levels<\/b><\/h3>\n<p>To determine the minimum inventory level, use the following formula:<\/p>\n<p><b>Minimum inventory level = reorder point \u2013 (normal consumption \u00d7 normal delivery time).<\/b><\/p>\n<p>For instance, imagine you run a bookstore. Your reorder point for a popular novel is 500 copies, with a typical delivery time of 4 weeks. The normal sales rate for the book is 80 copies per week.<\/p>\n<p><b>Minimum inventory level = 500 copies \u2013 (80 copies per week \u00d7 4 weeks) = 180 copies<\/b><\/p>\n<p>In this case, the minimum inventory level would be 180 copies.<\/p>\n<h3><b>2. Calculating Maximum Inventory Levels<\/b><\/h3>\n<p>To determine the maximum inventory level, apply this formula:<\/p>\n<p><b>Maximum inventory level = reorder point + reorder quantity \u2013 (minimum consumption \u00d7 minimum lead time).<\/b><\/p>\n<p>Using the bookstore example, your reorder point remains at 500 copies, and you typically reorder 1,200 copies at a time. The minimum sales rate is 60 copies per week, and the shortest lead time is 4 weeks.<\/p>\n<p><b>Maximum inventory level = 500 copies + 1,200 copies \u2013 (60 copies \u00d7 4 weeks) = 1,460 copies<\/b><\/p>\n<p>In this scenario, the maximum inventory level would be 1,460 copies.<\/p>\n<h3><b>3. Calculating Optimal Inventory Levels<\/b><\/h3>\n<p>Optimal inventory levels fall between the minimum and maximum stock thresholds. Determining this number is essential for maintaining the right balance of inventory. However, calculating optimal levels involves more than just using a formula or an <a href=\"https:\/\/www.hashmicro.com\/my\/blog\/inventory-list\/\">inventory list<\/a>.<\/p>\n<p>It requires real-time inventory tracking and demand forecasts based on expected business growth. Since market conditions and demand fluctuate constantly, pinpointing the exact optimal stock level can be challenging.<\/p>\n<p>While some businesses rely on spreadsheets for these calculations, this method is often time-consuming and prone to errors. A more efficient and accurate approach is to use <a href=\"https:\/\/www.hashmicro.com\/my\/blog\/best-wholesale-inventory-software\/\">wholesale inventory software<\/a> or an operations optimization tool, which streamlines the process and reduces the risk of human error.<\/p>\n<a href=\"https:\/\/www.hashmicro.com\/my\/offer\/download-erp-pricing-list?medium=banner-article\" target=\"_blank\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/08\/skema-harga-desktop-my.webp\" data-desktop-src=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/08\/skema-harga-desktop-my.webp\" data-mobile-src=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/08\/skema-harga-mobile-my.webp\" alt=\"SkemaHarga\" 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><b>Best Practices to Optimize Inventory Levels<\/b><\/h2>\n<p>Here are some best practices that help businesses maintain optimal inventory levels in the supply chain:<\/p>\n<h3><b>1. Prioritize Inventory Organization<\/b><\/h3>\n<p>Certain products require more oversight due to high demand. To address this, inventory management methods categorize and rank items based on importance. Several techniques, such as ABC analysis or HML analysis, assist in this process.<\/p>\n<p>For instance, ABC analysis follows this hierarchy:<\/p>\n<ul>\n<li aria-level=\"1\"><b>A<\/b>: High-sales products requiring frequent reviews and regular reorders.<\/li>\n<li aria-level=\"1\"><b>B<\/b>: Moderate-value products that need monthly reorders.<\/li>\n<li aria-level=\"1\"><b>C<\/b>: Low-value products that require minimal reordering.<\/li>\n<\/ul>\n<h3><b>2. Define Reorder Points<\/b><\/h3>\n<p>Reorder points depend on sales velocity and restocking lead time. Setting these points prevents stockouts by ensuring timely replenishment. The most effective approach involves analyzing customer demand and supplier lead times.<\/p>\n<h3><b>3. Utilize Inventory Management Software<\/b><\/h3>\n<p>Inventory management software synchronizes SKUs, orders, and stock levels in real time. It also simplifies oversight across centralized inventory, fulfillment centers, and multiple sales channels.<\/p>\n<p>For industries like retail, there are solutions that cater specifically to their requirements, such as <a href=\"https:\/\/www.hashmicro.com\/my\/blog\/best-retail-inventory-software\/\">retail inventory software<\/a>. Make sure that you choose the right system for your business.<\/p>\n<h3><b>4. Conduct Regular Inventory Audits<\/b><\/h3>\n<p>To prevent stock from reaching dangerous levels, businesses must carry out inventory audits and make a comprehensive <a href=\"https:\/\/www.hashmicro.com\/my\/blog\/inventory-report\/\">inventory report<\/a>. Modern inventory software automates this process, enabling spot checks, cycle counts, and full annual assessments.<\/p>\n<h3><b>5. Implement Kitting and Bundling<\/b><\/h3>\n<p>Through kitting, individual products are packaged and sold as a single unit, increasing the average order value. This method offers a cost-effective solution for reducing shipping expenses and minimizing deadstock.<\/p>\n<h3><b>6. Leverage Hedge Inventories<\/b><\/h3>\n<p>Hedge inventory protects businesses from supply chain disruptions, such as strikes or material shortages. This strategy relies on forecasts and speculation, which may not always be accurate. However, it provides a safeguard when unexpected challenges arise.<\/p>\n<h3><b>7. Ensure Quick Response Capabilities<\/b><\/h3>\n<p>A rapid response approach benefits businesses with high turnover and low profit margins. When checkout data is promptly accessible to suppliers, they can adjust inventory levels efficiently, shorten lead times, and improve forecasting accuracy.<\/p>\n<h2><b>Simplify Inventory Level Management with HashMicro<\/b><\/h2>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-4842\" src=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/Managemen-Inventoris-1.webp\" alt=\"hashmicro inventory dashboard\" width=\"782\" height=\"479\" srcset=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/Managemen-Inventoris-1.webp 782w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/Managemen-Inventoris-1-300x184.webp 300w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/Managemen-Inventoris-1-768x470.webp 768w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/Managemen-Inventoris-1-686x420.webp 686w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/Managemen-Inventoris-1-150x92.webp 150w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/Managemen-Inventoris-1-696x426.webp 696w\" sizes=\"(max-width: 782px) 100vw, 782px\" \/><\/p>\n<p><a href=\"https:\/\/www.hashmicro.com\/my\/inventory-management-system\">HashMicro Inventory Management Software<\/a> delivers a powerful and precise solution for managing inventory levels across businesses of all sizes. This cloud-based system caters to various industries, including wholesale, retail, food and beverage, construction, manufacturing, and more.<\/p>\n<p><span id=\"hashmicro\">For those interested in exploring its capabilities, HashMicro offers a <a href=\"https:\/\/www.hashmicro.com\/my\/free-product-demo\/\"><b>free demo<\/b><\/a><b> with zero commitment<\/b>; no subscription required, and access is available anytime.<\/span><\/p>\n<p>Beyond inventory control, HashMicro connects with other business applications to create a powerful, all-in-one system. It\u2019s very useful, isn\u2019t it? Here are HashMicro\u2019s features that can help with managing inventory levels:<\/p>\n<ul>\n<li aria-level=\"1\"><b>Stock Forecasting<\/b>: Predicts inventory needs and automates reordering based on stock consumption trends.<\/li>\n<li aria-level=\"1\"><b>Stock Optimizer<\/b>: Balances stock across branches to prevent overstocking and stockouts.<\/li>\n<li aria-level=\"1\"><b>Inventory Reports<\/b> \u2013 Tracks stock levels, movements, aging, turnover, and fast vs. slow-moving items for better decision-making.<\/li>\n<li aria-level=\"1\"><b>Expiry Tracking<\/b> \u2013 Monitors product expiration dates with automated notifications to reduce waste.<\/li>\n<li aria-level=\"1\"><b>Putaway Strategy<\/b> \u2013 Organizes stock placement based on product type, category, or warehouse capacity to improve space utilization.<\/li>\n<\/ul>\n<h2><b>Conclusion<\/b><\/h2>\n<p>Keeping the right inventory levels is key to avoiding stockouts, cutting unnecessary costs, and keeping operations smooth. With the help of <a href=\"https:\/\/www.hashmicro.com\/my\/blog\/best-erp-software\/\">ERP software<\/a> and a solid strategy, businesses can maintain the perfect balance between demand and supply without wasting resources.<\/p>\n<p>With <a href=\"https:\/\/www.hashmicro.com\/my\/inventory-management-system\">HashMicro Inventory Management Software<\/a>, businesses can stay ahead with smart forecasting and automated reordering. Real-time tracking and in-depth reports provide clear insights, so you can prevent under- or overstock, as well as adjust reordering quickly.<\/p>\n<p>Why rely on guesswork when you can have accuracy and control? HashMicro\u2019s all-in-one system simplifies inventory management and keeps your business running smoothly.<\/p>\n<p>Try the <a href=\"https:\/\/www.hashmicro.com\/my\/free-product-demo\/\">free demo<\/a> today and see how this system makes managing stocks and warehouses more effective!<\/p>\n<a href=\"https:\/\/www.hashmicro.com\/my\/free-product-demo\/?medium=free-product-demo\" target=\"_blank\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/08\/free-demo-desktop-my.webp\" data-desktop-src=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/08\/free-demo-desktop-my.webp\" data-mobile-src=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2024\/07\/free-demo-mobile-my.jpg\" alt=\"FreeDemo\" 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>Frequently Asked Questions on Inventory Levels<\/strong><\/h2>\n<ul class=\"bottom_faq\">\n<li>\n<details>\n<summary><strong>How do seasonal trends affect inventory levels?<\/strong><\/summary>\n<p>Seasonal trends can significantly impact inventory levels, as demand for certain products fluctuates during specific times of the year. Businesses must anticipate these changes and adjust their stock accordingly to meet customer needs without overstocking.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>What is the Economic Order Quantity (EOQ) model, and how does it relate to inventory levels?<\/strong><\/summary>\n<p>The EOQ model helps determine the optimal order quantity that minimizes total inventory costs, including ordering and holding expenses. By calculating EOQ, businesses can maintain appropriate inventory levels and reduce unnecessary costs.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>What role does technology play in managing inventory levels?<\/strong><\/summary>\n<p>Technological solutions, such as <a href=\"https:\/\/www.hashmicro.com\/my\/blog\/best-inventory-management-software\/\">inventory management software<\/a> and automation, enable real-time tracking, accurate demand forecasting, and efficient stock control, leading to optimized inventory levels and improved operational efficiency.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>How does lead time variability influence inventory levels?<\/strong><\/summary>\n<p>Variations in lead time\u2014the period between placing and receiving an order\u2014can cause stock shortages or surpluses. To mitigate this, businesses often maintain safety stock to buffer against unpredictable lead times.<\/p>\n<\/details>\n<\/li>\n<\/ul>\n<p><script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [{\n    \"@type\": \"Question\",\n    \"name\": \"How do seasonal trends affect inventory levels?\",\n    \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"Seasonal trends can significantly impact inventory levels, as demand for certain products fluctuates during specific times of the year. Businesses must anticipate these changes and adjust their stock accordingly to meet customer needs without overstocking.\"\n    }\n  },{\n    \"@type\": \"Question\",\n    \"name\": \"What is the Economic Order Quantity (EOQ) model, and how does it relate to inventory levels?\",\n    \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"The EOQ model helps determine the optimal order quantity that minimizes total inventory costs, including ordering and holding expenses. By calculating EOQ, businesses can maintain appropriate inventory levels and reduce unnecessary costs.\"\n    }\n  },{\n    \"@type\": \"Question\",\n    \"name\": \"What role does technology play in managing inventory levels?\",\n    \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"Technological solutions, such as inventory management software and automation, enable real-time tracking, accurate demand forecasting, and efficient stock control, leading to optimized inventory levels and improved operational efficiency.\"\n    }\n  },{\n    \"@type\": \"Question\",\n    \"name\": \"How does lead time variability influence inventory levels?\",\n    \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"Variations in lead time\u2014the period between placing and receiving an order\u2014can cause stock shortages or surpluses. To mitigate this, businesses often maintain safety stock to buffer against unpredictable lead times.\"\n    }\n  }]\n}\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>How much stock should you really keep? Managing inventory levels can be tricky because keeping too little leads to stock-outs and lost sales, while keeping too much ties up cash and increases storage costs. Balancing the right amount of stock is not always easy, don\u2019t you think? Without the right system in place, businesses often [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":4840,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[66],"tags":[],"class_list":{"0":"post-4839","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>What Are Inventory Levels? How to Calculate and Best Practices<\/title>\n<meta name=\"description\" content=\"Inventory levels refer to the amount of stock a business should maintain to meet demand. Learn how to manage yours effectively today.\" \/>\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\/my\/blog\/inventory-levels\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What Are Inventory Levels? How to Calculate and Best Practices\" \/>\n<meta property=\"og:description\" content=\"Inventory levels refer to the amount of stock a business should maintain to meet demand. Learn how to manage yours effectively today.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/\" \/>\n<meta property=\"og:site_name\" content=\"HashMicro Malaysia\" \/>\n<meta property=\"article:published_time\" content=\"2025-03-17T03:39:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-19T04:37:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/inventory-levels.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=\"Nur Fi&#039;llia Nugrahani\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nur Fi&#039;llia Nugrahani\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/\"},\"author\":{\"name\":\"Nur Fi'llia Nugrahani\",\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/#\/schema\/person\/691c3618a2b14a7af3696de5f3dd4660\"},\"headline\":\"What Are Inventory Levels? How to Calculate and Best Practices\",\"datePublished\":\"2025-03-17T03:39:28+00:00\",\"dateModified\":\"2026-02-19T04:37:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/\"},\"wordCount\":1970,\"publisher\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/inventory-levels.webp\",\"articleSection\":[\"Inventory\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/\",\"url\":\"https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/\",\"name\":\"What Are Inventory Levels? How to Calculate and Best Practices\",\"isPartOf\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/inventory-levels.webp\",\"datePublished\":\"2025-03-17T03:39:28+00:00\",\"dateModified\":\"2026-02-19T04:37:29+00:00\",\"description\":\"Inventory levels refer to the amount of stock a business should maintain to meet demand. Learn how to manage yours effectively today.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/#primaryimage\",\"url\":\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/inventory-levels.webp\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/inventory-levels.webp\",\"width\":1200,\"height\":675,\"caption\":\"inventory levels\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.hashmicro.com\/my\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"What Are Inventory Levels? How to Calculate and Best Practices\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/#website\",\"url\":\"https:\/\/www.hashmicro.com\/my\/blog\/\",\"name\":\"HashMicro Malaysia\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.hashmicro.com\/my\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/#organization\",\"name\":\"HashMicro Malaysia\",\"url\":\"https:\/\/www.hashmicro.com\/my\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/09\/logo.webp\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/09\/logo.webp\",\"width\":422,\"height\":255,\"caption\":\"HashMicro Malaysia\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/#\/schema\/person\/691c3618a2b14a7af3696de5f3dd4660\",\"name\":\"Nur Fi'llia Nugrahani\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/03\/cropped-WhatsApp-Image-2023-12-11-at-14.23.32_bfe4caf2-96x96.jpg\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/03\/cropped-WhatsApp-Image-2023-12-11-at-14.23.32_bfe4caf2-96x96.jpg\",\"caption\":\"Nur Fi'llia Nugrahani\"},\"description\":\"A content writer specializing in the intersection of technology and business. Produces engaging articles that resonate with readers and give meaningful insights.\",\"url\":\"https:\/\/www.hashmicro.com\/my\/blog\/author\/filia-nugrahani\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"What Are Inventory Levels? How to Calculate and Best Practices","description":"Inventory levels refer to the amount of stock a business should maintain to meet demand. Learn how to manage yours effectively today.","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\/my\/blog\/inventory-levels\/","og_locale":"en_US","og_type":"article","og_title":"What Are Inventory Levels? How to Calculate and Best Practices","og_description":"Inventory levels refer to the amount of stock a business should maintain to meet demand. Learn how to manage yours effectively today.","og_url":"https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/","og_site_name":"HashMicro Malaysia","article_published_time":"2025-03-17T03:39:28+00:00","article_modified_time":"2026-02-19T04:37:29+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/inventory-levels.webp","type":"image\/webp"}],"author":"Nur Fi'llia Nugrahani","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Nur Fi'llia Nugrahani","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/#article","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/"},"author":{"name":"Nur Fi'llia Nugrahani","@id":"https:\/\/www.hashmicro.com\/my\/blog\/#\/schema\/person\/691c3618a2b14a7af3696de5f3dd4660"},"headline":"What Are Inventory Levels? How to Calculate and Best Practices","datePublished":"2025-03-17T03:39:28+00:00","dateModified":"2026-02-19T04:37:29+00:00","mainEntityOfPage":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/"},"wordCount":1970,"publisher":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/#organization"},"image":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/inventory-levels.webp","articleSection":["Inventory"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/","url":"https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/","name":"What Are Inventory Levels? How to Calculate and Best Practices","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/#primaryimage"},"image":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/inventory-levels.webp","datePublished":"2025-03-17T03:39:28+00:00","dateModified":"2026-02-19T04:37:29+00:00","description":"Inventory levels refer to the amount of stock a business should maintain to meet demand. Learn how to manage yours effectively today.","breadcrumb":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/#primaryimage","url":"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/inventory-levels.webp","contentUrl":"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/inventory-levels.webp","width":1200,"height":675,"caption":"inventory levels"},{"@type":"BreadcrumbList","@id":"https:\/\/www.hashmicro.com\/my\/blog\/inventory-levels\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.hashmicro.com\/my\/blog\/"},{"@type":"ListItem","position":2,"name":"What Are Inventory Levels? How to Calculate and Best Practices"}]},{"@type":"WebSite","@id":"https:\/\/www.hashmicro.com\/my\/blog\/#website","url":"https:\/\/www.hashmicro.com\/my\/blog\/","name":"HashMicro Malaysia","description":"","publisher":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.hashmicro.com\/my\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.hashmicro.com\/my\/blog\/#organization","name":"HashMicro Malaysia","url":"https:\/\/www.hashmicro.com\/my\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hashmicro.com\/my\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/09\/logo.webp","contentUrl":"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/09\/logo.webp","width":422,"height":255,"caption":"HashMicro Malaysia"},"image":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.hashmicro.com\/my\/blog\/#\/schema\/person\/691c3618a2b14a7af3696de5f3dd4660","name":"Nur Fi'llia Nugrahani","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hashmicro.com\/my\/blog\/#\/schema\/person\/image\/","url":"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/03\/cropped-WhatsApp-Image-2023-12-11-at-14.23.32_bfe4caf2-96x96.jpg","contentUrl":"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/03\/cropped-WhatsApp-Image-2023-12-11-at-14.23.32_bfe4caf2-96x96.jpg","caption":"Nur Fi'llia Nugrahani"},"description":"A content writer specializing in the intersection of technology and business. Produces engaging articles that resonate with readers and give meaningful insights.","url":"https:\/\/www.hashmicro.com\/my\/blog\/author\/filia-nugrahani\/"}]}},"order_j":"","_links":{"self":[{"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/posts\/4839","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/comments?post=4839"}],"version-history":[{"count":16,"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/posts\/4839\/revisions"}],"predecessor-version":[{"id":16294,"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/posts\/4839\/revisions\/16294"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/media\/4840"}],"wp:attachment":[{"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/media?parent=4839"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/categories?post=4839"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/tags?post=4839"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}