{"id":28930,"date":"2025-11-25T06:49:42","date_gmt":"2025-11-25T06:49:42","guid":{"rendered":"https:\/\/www.hashmicro.com\/ph\/blog\/?p=28930"},"modified":"2026-03-06T06:30:52","modified_gmt":"2026-03-06T06:30:52","slug":"perishable-inventory","status":"publish","type":"post","link":"https:\/\/www.hashmicro.com\/ph\/blog\/perishable-inventory\/","title":{"rendered":"Perishable Inventory: Reduce Waste &amp; Grow Profit"},"content":{"rendered":"<p>Managing perishable inventory is a constant challenge for businesses in F&amp;B, pharmaceuticals, and retail. Mistakes can quickly lead to wasted products, lost revenue, and frustrated customers, making efficiency and accuracy essential.<\/p>\n<p>Without proper strategies and technology, risks such as spoilage, early expiration, and overstocking can quickly escalate, not only cutting into profit margins but also disrupting operations, straining supply chains, and undermining customer trust.<\/p>\n<p><a href=\"https:\/\/www.hashmicro.com\/ph\/blog\/periodic-perpetual-inventory-system\/\">Leveraging modern inventory systems<\/a> allows companies to track products in real time, plan ahead, and ensure items reach consumers in optimal condition, turning a potential liability into a competitive advantage.<\/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: #8a0e19; color: #ffffff; padding: 5px;\"><b>Key Takeaways<\/b><\/span><\/h3>\n<ul>\n<li><a href=\"#perishable\">Perishable inventory<\/a> includes goods with limited shelf life that quickly lose value or spoil due to factors like temperature, humidity, and light exposure.<\/li>\n<li>There are <a href=\"#key\">key challenges<\/a> in managing perishable inventory, including a high risk of spoilage and unpredictable fluctuations in market demand.<\/li>\n<li>By implementing Inventory Management Software, companies can process transactions faster, reduce human error, and obtain accurate, real-time data.<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h2><strong>What Is Perishable Inventory?<\/strong><\/h2>\n<p>Perishable inventory refers to goods or products with a limited shelf life that will lose their value or become unusable after a specific date. These items are susceptible to environmental factors such as temperature, humidity, and light exposure.<\/p>\n<p>Unlike standard inventory, whose value remains relatively stable over time, the value of perishable inventory decreases exponentially as it approaches its expiration date. This creates immense operational pressure on companies to sell products as quickly as possible while maintaining quality.<\/p>\n<p>Failing to manage this product lifecycle effectively has a direct impact on increased operational costs due to waste, potential <a href=\"https:\/\/www.hashmicro.com\/ph\/blog\/revenue-recognition-software\/\">inventory storage expenses<\/a> loss from unsold stock, and health and safety risks for consumers.<\/p>\n<p>Therefore, a deep understanding of the unique characteristics and challenges of perishable inventory is the fundamental first step for any business aiming to build a robust and efficient management system.<\/p>\n<h2><strong>Why Is Perishable Inventory Management So Important for Business?<\/strong><\/h2>\n<p>Effective perishable inventory management is a cornerstone of profitability and sustainability for any business dealing with short-lived products. The primary reason is its direct financial impact, where every item that spoils or expires before being sold represents an irrecoverable loss of capital.<\/p>\n<p>By implementing strict control systems, companies can significantly reduce spoilage rates, protect their profit margins, and ensure that the investment made in inventory yields the maximum return.<\/p>\n<p>Furthermore, good management allows for the optimization of cash flow by preventing working capital from being tied up in slow-moving or high-risk stock that is likely to be discarded.<\/p>\n<p>Diligent management also ensures compliance with government regulations related to food and product safety, shielding the company from costly legal penalties and fines, as highlighted by agencies like the <a href=\"https:\/\/www.fda.gov\/food\/guidance-regulation-food-and-dietary-supplements\/food-safety-modernization-act-fsma\" target=\"_blank\" rel=\"noopener\">Food and Drug Administration (FDA)<\/a> on food safety.<br \/>\n<span id=\"key\"><\/span><\/p>\n<h2><strong>Key Challenges in Managing Perishable Inventory<\/strong><\/h2>\n<p>Managing goods prone to spoilage poses complex challenges that demand meticulous planning and precise execution. These challenges are not merely logistical, they also encompass interconnected financial and operational aspects where a failure at one point can trigger a detrimental domino effect.<\/p>\n<p>From the constant risk of spoilage to unpredictable market demand, every inventory manager must navigate numerous dynamic variables. Below are some of the primary challenges most frequently encountered in managing perishable inventory.<\/p>\n<h3>1. High risk of spoilage and expiration<\/h3>\n<p>The biggest challenge of perishable inventory is its limited shelf life, making spoilage, decay, or expiration a constant risk. Even small delays or errors in stock rotation can cause products to lose value and require disposal, resulting in direct financial losses.<\/p>\n<p>This time-sensitive nature demands accuracy and speed in every step, from receiving and storage to sales, leaving no room for mistakes that might be acceptable with non-perishable goods.<\/p>\n<h3>2. Difficult-to-predict market demand fluctuations<\/h3>\n<p>Demand for fresh products is often volatile, influenced by seasons, trends, holidays, and even the weather. Forecasting becomes challenging, creating a constant risk of stock depletion or overstock.<\/p>\n<p>Stockouts lead to lost sales and disappointed customers, while overstock causes waste when products expire. Managing this balance requires analyzing historical data and adapting quickly to market changes.<\/p>\n<h3>3. Need for special storage and handling<\/h3>\n<p>The majority of perishable goods require very specific storage conditions to extend their shelf life, such as strict temperature controls (a cold chain), precise humidity levels, and protection from cross-contamination.<\/p>\n<p>Maintaining these storage facilities, from refrigerated warehouses to specialized transportation fleets, demands significant capital investment and high operational costs for energy and maintenance.<\/p>\n<p>Any minor failure, such as a power outage in a cooling unit or a truck door left ajar, can ruin an entire batch of products in a very short time, underscoring the need for vigilant oversight.<\/p>\n<h3>4. Complexity of stock tracking and traceability<\/h3>\n<p>To manage perishable inventory effectively, companies must be able to track each batch or lot of products individually, including its receiving date, expiration date, and movement history throughout the supply chain.<\/p>\n<p>This level of granularity is essential not only for correctly implementing FIFO or FEFO strategies but also for traceability purposes in the event of a product recall due to safety or quality issues.<\/p>\n<style>\r\n    #custom-quote {\r\n        background-color: #f0f0f0;\r\n        padding: 20px;\r\n        border-radius: 12px;\r\n        margin: 20px;\r\n        display: flex;\r\n        flex-direction: column;\r\n    }\r\n\r\n    #custom-quote .quote-body {\r\n        display: flex;\r\n        flex-direction: row;\r\n        align-items: flex-start;\r\n        gap: 15px;\r\n        font-size: 16px;\r\n        line-height: 1.5;\r\n        font-style: italic;\r\n    }\r\n\r\n    #custom-quote .quote-icon {\r\n        width: 40px;\r\n        height: 40px;\r\n        flex-shrink: 0;\r\n    }\r\n\r\n    #custom-quote .quote-author-wrapper {\r\n        margin-top: 15px;\r\n        align-self: flex-start;\r\n        margin-left: 55px; \r\n\t\tmargin-bottom: 0px;\r\n    }\r\n\r\n    #custom-quote em {\r\n        font-family: 'Roboto Serif', serif !important;\r\n        font-size: 12px;\r\n        font-weight: bold;\r\n        font-style: normal;\r\n    }\r\n\r\n    @media screen and (max-width: 768px) {\r\n        #custom-quote {\r\n            margin: 15px 0;\r\n            padding: 15px;\r\n        }\r\n        \r\n        #custom-quote .quote-body {\r\n            gap: 12px;\r\n        }\r\n\r\n        #custom-quote .quote-author-wrapper {\r\n            margin-left: 52px;\r\n        }\r\n    }\r\n\r\n    @media screen and (max-width: 480px) {\r\n        #custom-quote {\r\n            margin: 10px 0;\r\n            padding: 12px;\r\n        }\r\n\r\n        #custom-quote .quote-body {\r\n            font-size: 14px;\r\n            gap: 10px;\r\n        }\r\n\r\n        #custom-quote .quote-icon {\r\n            width: 32px;\r\n            height: 32px;\r\n        }\r\n\r\n        #custom-quote .quote-author-wrapper {\r\n            margin-top: 10px;\r\n            margin-left: 42px;\r\n        }\r\n    }\r\n<\/style>\r\n\r\n<div id=\"custom-quote\">\r\n    <div class=\"quote-body\">\r\n        <img decoding=\"async\" src=\"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/12\/quote.webp\" alt=\"Quote Icon\" class=\"quote-icon\">\r\n        <div>\r\n            Managing perishable inventory requires careful precision, limited shelf life, unpredictable demand, specialized storage, and detailed batch tracking mean that even minor mistakes can lead to significant losses.        <\/div>\r\n    <\/div>\r\n    <p class=\"quote-author-wrapper\">\r\n        <em>Darryl Esguerra, Inventory &amp; Logistics Consultant<\/em>\r\n    <\/p>\r\n<\/div>\n<h2><strong>Effective Strategies for Perishable Inventory Management<\/strong><\/h2>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-29224\" src=\"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/11\/Effective-Strategies-for-Perishable-Inventory-Management.webp\" alt=\"Effective Strategies for Perishable Inventory Management\" width=\"1200\" height=\"675\" srcset=\"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/11\/Effective-Strategies-for-Perishable-Inventory-Management.webp 1200w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/11\/Effective-Strategies-for-Perishable-Inventory-Management-300x169.webp 300w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/11\/Effective-Strategies-for-Perishable-Inventory-Management-1024x576.webp 1024w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/11\/Effective-Strategies-for-Perishable-Inventory-Management-768x432.webp 768w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/11\/Effective-Strategies-for-Perishable-Inventory-Management-747x420.webp 747w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/11\/Effective-Strategies-for-Perishable-Inventory-Management-150x84.webp 150w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/11\/Effective-Strategies-for-Perishable-Inventory-Management-696x392.webp 696w, https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/11\/Effective-Strategies-for-Perishable-Inventory-Management-1068x601.webp 1068w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/p>\n<p>To overcome the various challenges inherent in perishable inventory, companies must adopt a series of disciplined strategies. These strategies are designed to create a system that not only minimizes waste but also maximizes operational efficiency.<\/p>\n<p>By prioritizing these practices, a company can transform perishable inventory management from a mere cost center into a significant competitive advantage, building a strong foundation for long-term business growth.<\/p>\n<h3>1. Implement First-In, First-Out (FIFO) and First-Expired, First-Out (FEFO) methods<\/h3>\n<p>The foundational principle in managing perishable inventory is ensuring that older products are sold first to prevent expiration. The FIFO method assumes that the first items to enter the warehouse should be the first to leave, which is highly effective for products with a uniform shelf life.<\/p>\n<p>However, for products with varying expiration dates, the FEFO method is superior because it prioritizes the sale of items based on the nearest expiration date, regardless of when they were received, thereby directly targeting the risk of spoilage.<\/p>\n<h3>2. Perform regular and disciplined stock rotation<\/h3>\n<p>Stock rotation is the physical implementation of the FIFO or FEFO principle, where staff actively move older stock to the front of storage shelves or displays and place new stock at the back.<\/p>\n<p>This practice must become a standard operating procedure, performed with discipline every time new goods are received, to ensure no products are forgotten or overlooked in the warehouse.<\/p>\n<h3>3. Optimize storage conditions and the cold chain<\/h3>\n<p>Maintaining product integrity from the supplier to the customer is key to extending its shelf life, which requires an unbroken cold chain for temperature-sensitive items. This means ensuring the correct temperature is consistently maintained across delivery trucks, receiving areas, and retail display cases.<\/p>\n<p>Investing in automated temperature monitoring<a href=\"https:\/\/www.hashmicro.com\/ph\/blog\/equipment-management\/\"> equipment lifecycle management<\/a>, and IoT sensors can provide early warnings of any deviations, allowing for immediate corrective action before products are compromised.<\/p>\n<h3>4. Use accurate demand analysis and forecasting<\/h3>\n<p>To avoid overstocking or stockouts, companies must invest in sophisticated demand forecasting tools and processes. Rather than relying on intuition, managers should leverage historical sales data, analyze seasonal trends, and consider external factors.<\/p>\n<p>Modern software can automate this analysis and provide optimized ordering recommendations, helping businesses make smarter, data-driven purchasing decisions that align with anticipated customer demand.<\/p>\n<h3>5. Implement a reliable lot tracking system<\/h3>\n<p>Lot tracking is the process of assigning a unique identification number to each batch of products received, which records vital information such as production date, expiration date, and supplier origin.<\/p>\n<p>This system is crucial for full traceability, allowing a company to quickly identify and recall specific products if a quality or safety issue is discovered, thereby minimizing the impact on public health and brand reputation.<\/p>\n<h2><strong>The Role of Technology in Optimizing Perishable Inventory<\/strong><\/h2>\n<p>In today&#8217;s digital age, relying on manual processes to manage the complexities of perishable inventory is no longer adequate and is fraught with risk. Technology plays a transformative role by providing businesses with the tools needed to gain visibility and accuracy.<\/p>\n<p>By automating tasks that are prone to human error and providing real-time data for decision-making, modern technological solutions enable companies to manage their inventory proactively rather than reactively.<\/p>\n<p>The integration of these various technologies into a single, centralized platform is key to unlocking their full potential. When ERP systems, WMS, and hardware like IoT sensors and RFID scanners work in concert, they create a cohesive data ecosystem.<\/p>\n<h3>1. Integrated Enterprise Resource Planning (ERP) systems<\/h3>\n<p>An ERP system serves as a company\u2019s digital hub, integrating data from procurement, inventory, sales, and finance into one platform. For perishable inventory, it can track expiration dates, manage lot numbers, and generate reports on stock movement and spoilage.<\/p>\n<h3>2. Warehouse Management System (WMS)<\/h3>\n<p>A WMS is software specifically designed to optimize warehouse operations. Modern WMS solutions can intelligently direct staff to place products according to FEFO rules, suggest the best storage locations to maximize efficiency, and automate the <a href=\"https:\/\/www.hashmicro.com\/ph\/blog\/safety-stock-inventory\/\">inventory buffer planning<\/a> rotation process.<\/p>\n<p>By minimizing the time spent searching for items and ensuring the correct picking sequence, a WMS directly reduces the risk of human error and speeds up the workflow within the warehouse, a critical factor when handling time-sensitive goods.<\/p>\n<h3>3. IoT (Internet of Things) sensors for condition monitoring<\/h3>\n<p>IoT sensors are revolutionizing cold chain management by providing continuous, real-time monitoring of temperature and humidity across storage facilities and transport units. These small sensors can be placed in warehouses, refrigerators, or even shipping.<\/p>\n<p>If the temperature deviates from the safe range, the system automatically sends an alert to managers, allowing them to take immediate corrective action before a massive product loss occurs.<\/p>\n<h3>4. RFID and barcode scanning technology<\/h3>\n<p>Barcode scanning and RFID (Radio-Frequency Identification) technology drastically improve the speed and accuracy of tracking inventory movements. Staff can scan products upon receipt, transfer, or sale to instantly update stock levels in the system.<\/p>\n<p>This technology is essential for maintaining accurate <a href=\"https:\/\/www.hashmicro.com\/ph\/blog\/inventory-visibility\/\" target=\"_blank\" rel=\"noopener\">warehouse transparency<\/a> at all times, providing the real-time data that underpins all other management strategies, and is a key finding in reports on supply chain efficiency by firms like <a href=\"https:\/\/www.mckinsey.com\/capabilities\/operations\/our-insights\/building-supply-chain-resilience-is-a-top-priority-for-ceos\" target=\"_blank\" rel=\"noopener\">McKinsey<\/a>.<\/p>\n<h2><strong>Case Study: Transforming F&amp;B Inventory Management with HashMicro<\/strong><\/h2>\n<p>The theories and strategies of perishable inventory management become much more meaningful. A prime example of this successful transformation is BanBan Tea, a rapidly growing F&amp;B brand facing unique challenges in managing raw materials for their seasonal beverages.<\/p>\n<p>Before adopting a technological solution, they struggled to measure stock age accurately and frequently experienced raw material wastage due to imprecise forecasting, which directly impacted their operational costs and profitability.<\/p>\n<p>By implementing <a href=\"https:\/\/www.hashmicro.com\/ph\/inventory-management-system\">HashMicro&#8217;s Inventory Software<\/a>, BanBan Tea successfully automated their inventory management processes. The system enabled them to track the age of each raw material with precision and optimize the use of ingredients to reduce waste significantly.<\/p>\n<p>Furthermore, the multi-branch management feature on a single centralized platform facilitated coordination and ensured operational efficiency across all their outlets, supporting their overall business growth strategy.<\/p>\n<h2><strong>Conclusion<\/strong><\/h2>\n<p>Managing perishable inventory requires precision, speed, and visibility. Challenges like spoilage, fluctuating demand, and special handling needs can be significant, but they can be mitigated with disciplined stock rotation and data-driven demand forecasting.<\/p>\n<p>Modern operational complexities make consistent execution difficult without reliable technology. Integrated ERP systems, warehouse management solutions, and IoT sensors provide the real-time insights and automation needed to maintain efficiency across the supply chain.<\/p>\n<p>This approach reduces waste, optimizes turnover, and strengthens overall operations, supporting long-term sustainability and profitability. A<a href=\"https:\/\/www.hashmicro.com\/ph\/free-product-demo\/\"> free consultation<\/a> can help explore how these solutions enhance inventory control.<\/p>\n\n<h2><strong>Frequently Asked Questions<\/strong><\/h2>\n<ul class=\"bottom_faq\">\n<li>\n<details>\n<summary><strong>What is the main difference between FIFO and FEFO methods?<\/strong><\/summary>\n<p>FIFO (First-In, First-Out) assumes the first items received are the first ones sold. FEFO (First-Expired, First-Out) prioritizes selling items with the nearest expiration date, which is generally more effective for managing perishable goods.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>How can software help reduce costs from product spoilage?<\/strong><\/summary>\n<p>Inventory software reduces spoilage costs by automatically tracking expiration dates, enforcing FEFO rules, providing spoilage alerts, and using demand forecasting to prevent over-purchasing.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>What is the best way to handle excess stock nearing its expiration date?<\/strong><\/summary>\n<p>The best approach is proactive. Implement sales promotions, bundling offers, or repurpose ingredients if possible. Donating to food banks is also a great option to reduce total waste while creating a positive social impact.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>What is a &#8216;cold chain&#8217; in the supply chain?<\/strong><\/summary>\n<p>A cold chain is a temperature-controlled supply chain that maintains a product within a specific temperature range from production to consumption. This is crucial for preserving the quality and safety of items like frozen foods, dairy, and vaccines.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>What industries most need perishable inventory management?<\/strong><\/summary>\n<p>The industries most dependent on it are Food &amp; Beverage (F&amp;B), including restaurants and supermarkets. Additionally, the Pharmaceutical, Floriculture (cut flowers), and Cosmetics industries heavily rely on it due to their products&#8217; limited shelf lives.<\/p>\n<\/details>\n<\/li>\n<\/ul>\n<p><script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"inLanguage\": \"en\",\n  \"mainEntity\": [{\n    \"@type\": \"Question\",\n    \"name\": \"What is the main difference between FIFO and FEFO methods?\",\n    \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"FIFO (First-In, First-Out) assumes the first items received are the first ones sold. FEFO (First-Expired, First-Out) prioritizes selling items with the nearest expiration date, which is generally more effective for managing perishable goods.\"\n    }\n  },{\n    \"@type\": \"Question\",\n    \"name\": \"How can software help reduce costs from product spoilage?\",\n    \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"Inventory software reduces spoilage costs by automatically tracking expiration dates, enforcing FEFO rules, providing spoilage alerts, and using demand forecasting to prevent over-purchasing.\"\n    }\n  },{\n    \"@type\": \"Question\",\n    \"name\": \"What is the best way to handle excess stock nearing its expiration date?\",\n    \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"The best approach is proactive. Businesses can implement sales promotions, bundling offers, or repurpose ingredients when possible. Donating to food banks is also an effective way to reduce waste while creating a positive social impact.\"\n    }\n  },{\n    \"@type\": \"Question\",\n    \"name\": \"What is a cold chain in the supply chain?\",\n    \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"A cold chain is a temperature-controlled supply chain that maintains products within a specific temperature range from production to consumption. It is crucial for preserving the quality and safety of items such as frozen foods, dairy products, and vaccines.\"\n    }\n  },{\n    \"@type\": \"Question\",\n    \"name\": \"What industries most need perishable inventory management?\",\n    \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"Industries highly dependent on perishable inventory management include Food and Beverage businesses such as restaurants and supermarkets, as well as the pharmaceutical, floriculture, and cosmetics industries due to their products' limited shelf lives.\"\n    }\n  }]\n}\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Managing perishable inventory is a constant challenge for businesses in F&amp;B, pharmaceuticals, and retail. Mistakes can quickly lead to wasted products, lost revenue, and frustrated customers, making efficiency and accuracy essential. Without proper strategies and technology, risks such as spoilage, early expiration, and overstocking can quickly escalate, not only cutting into profit margins but also [&hellip;]<\/p>\n","protected":false},"author":40,"featured_media":29223,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[20],"tags":[],"class_list":{"0":"post-28930","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>Perishable Inventory: Reduce Waste &amp; Grow Profit<\/title>\n<meta name=\"description\" content=\"Master perishable inventory management with expert strategies on FIFO\/FEFO, cold chain, and demand forecasting. Reduce spoilage and boost profits. Learn more!\" \/>\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\/perishable-inventory\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Perishable Inventory: Reduce Waste &amp; Grow Profit\" \/>\n<meta property=\"og:description\" content=\"Master perishable inventory management with expert strategies on FIFO\/FEFO, cold chain, and demand forecasting. Reduce spoilage and boost profits. Learn more!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.hashmicro.com\/ph\/blog\/perishable-inventory\/\" \/>\n<meta property=\"og:site_name\" content=\"HashMicro Philippine Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-25T06:49:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-06T06:30:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/11\/Perishable-Inventory_-Reduce-Waste-Grow-Profit.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=\"Maria Santos\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Maria Santos\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 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\/perishable-inventory\/\",\"url\":\"https:\/\/www.hashmicro.com\/ph\/blog\/perishable-inventory\/\",\"name\":\"Perishable Inventory: Reduce Waste &amp; Grow Profit\",\"isPartOf\":{\"@id\":\"https:\/\/www.hashmicro.com\/ph\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.hashmicro.com\/ph\/blog\/perishable-inventory\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/ph\/blog\/perishable-inventory\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/11\/Perishable-Inventory_-Reduce-Waste-Grow-Profit.webp\",\"datePublished\":\"2025-11-25T06:49:42+00:00\",\"dateModified\":\"2026-03-06T06:30:52+00:00\",\"author\":{\"@id\":\"https:\/\/www.hashmicro.com\/ph\/blog\/#\/schema\/person\/4a06cb2d4d4c7ff8b074241faa7185f4\"},\"description\":\"Master perishable inventory management with expert strategies on FIFO\/FEFO, cold chain, and demand forecasting. Reduce spoilage and boost profits. Learn more!\",\"breadcrumb\":{\"@id\":\"https:\/\/www.hashmicro.com\/ph\/blog\/perishable-inventory\/#breadcrumb\"},\"inLanguage\":\"en-PH\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.hashmicro.com\/ph\/blog\/perishable-inventory\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-PH\",\"@id\":\"https:\/\/www.hashmicro.com\/ph\/blog\/perishable-inventory\/#primaryimage\",\"url\":\"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/11\/Perishable-Inventory_-Reduce-Waste-Grow-Profit.webp\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/11\/Perishable-Inventory_-Reduce-Waste-Grow-Profit.webp\",\"width\":1200,\"height\":675,\"caption\":\"Perishable Inventory: Reduce Waste & Grow Profit\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.hashmicro.com\/ph\/blog\/perishable-inventory\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.hashmicro.com\/ph\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Perishable Inventory: Reduce Waste &amp; Grow Profit\"}]},{\"@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\/4a06cb2d4d4c7ff8b074241faa7185f4\",\"name\":\"Maria Santos\",\"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\/11\/Maria-Santos-96x96.webp\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/11\/Maria-Santos-96x96.webp\",\"caption\":\"Maria Santos\"},\"description\":\"Maria Santos specializes in creating insightful content about inventory management systems. She focuses on helping businesses understand stock control, warehouse optimization, and the importance of accurate inventory tracking. Her articles aim to guide readers in choosing the right inventory software to enhance operational efficiency.\",\"url\":\"https:\/\/www.hashmicro.com\/ph\/blog\/author\/maria-santos\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Perishable Inventory: Reduce Waste &amp; Grow Profit","description":"Master perishable inventory management with expert strategies on FIFO\/FEFO, cold chain, and demand forecasting. Reduce spoilage and boost profits. Learn more!","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\/perishable-inventory\/","og_locale":"en_US","og_type":"article","og_title":"Perishable Inventory: Reduce Waste &amp; Grow Profit","og_description":"Master perishable inventory management with expert strategies on FIFO\/FEFO, cold chain, and demand forecasting. Reduce spoilage and boost profits. Learn more!","og_url":"https:\/\/www.hashmicro.com\/ph\/blog\/perishable-inventory\/","og_site_name":"HashMicro Philippine Blog","article_published_time":"2025-11-25T06:49:42+00:00","article_modified_time":"2026-03-06T06:30:52+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/11\/Perishable-Inventory_-Reduce-Waste-Grow-Profit.webp","type":"image\/webp"}],"author":"Maria Santos","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Maria Santos","Est. reading time":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.hashmicro.com\/ph\/blog\/perishable-inventory\/","url":"https:\/\/www.hashmicro.com\/ph\/blog\/perishable-inventory\/","name":"Perishable Inventory: Reduce Waste &amp; Grow Profit","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/ph\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.hashmicro.com\/ph\/blog\/perishable-inventory\/#primaryimage"},"image":{"@id":"https:\/\/www.hashmicro.com\/ph\/blog\/perishable-inventory\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/11\/Perishable-Inventory_-Reduce-Waste-Grow-Profit.webp","datePublished":"2025-11-25T06:49:42+00:00","dateModified":"2026-03-06T06:30:52+00:00","author":{"@id":"https:\/\/www.hashmicro.com\/ph\/blog\/#\/schema\/person\/4a06cb2d4d4c7ff8b074241faa7185f4"},"description":"Master perishable inventory management with expert strategies on FIFO\/FEFO, cold chain, and demand forecasting. Reduce spoilage and boost profits. Learn more!","breadcrumb":{"@id":"https:\/\/www.hashmicro.com\/ph\/blog\/perishable-inventory\/#breadcrumb"},"inLanguage":"en-PH","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.hashmicro.com\/ph\/blog\/perishable-inventory\/"]}]},{"@type":"ImageObject","inLanguage":"en-PH","@id":"https:\/\/www.hashmicro.com\/ph\/blog\/perishable-inventory\/#primaryimage","url":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/11\/Perishable-Inventory_-Reduce-Waste-Grow-Profit.webp","contentUrl":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/11\/Perishable-Inventory_-Reduce-Waste-Grow-Profit.webp","width":1200,"height":675,"caption":"Perishable Inventory: Reduce Waste & Grow Profit"},{"@type":"BreadcrumbList","@id":"https:\/\/www.hashmicro.com\/ph\/blog\/perishable-inventory\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.hashmicro.com\/ph\/blog\/"},{"@type":"ListItem","position":2,"name":"Perishable Inventory: Reduce Waste &amp; Grow Profit"}]},{"@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\/4a06cb2d4d4c7ff8b074241faa7185f4","name":"Maria Santos","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\/11\/Maria-Santos-96x96.webp","contentUrl":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-content\/uploads\/2025\/11\/Maria-Santos-96x96.webp","caption":"Maria Santos"},"description":"Maria Santos specializes in creating insightful content about inventory management systems. She focuses on helping businesses understand stock control, warehouse optimization, and the importance of accurate inventory tracking. Her articles aim to guide readers in choosing the right inventory software to enhance operational efficiency.","url":"https:\/\/www.hashmicro.com\/ph\/blog\/author\/maria-santos\/"}]}},"order_j":"","_links":{"self":[{"href":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-json\/wp\/v2\/posts\/28930","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\/40"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-json\/wp\/v2\/comments?post=28930"}],"version-history":[{"count":7,"href":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-json\/wp\/v2\/posts\/28930\/revisions"}],"predecessor-version":[{"id":32908,"href":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-json\/wp\/v2\/posts\/28930\/revisions\/32908"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-json\/wp\/v2\/media\/29223"}],"wp:attachment":[{"href":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-json\/wp\/v2\/media?parent=28930"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-json\/wp\/v2\/categories?post=28930"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hashmicro.com\/ph\/blog\/wp-json\/wp\/v2\/tags?post=28930"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}