{"id":2176,"date":"2026-05-04T17:12:38","date_gmt":"2026-05-04T07:12:38","guid":{"rendered":"https:\/\/www.hashmicro.com\/au\/blog\/?p=2176"},"modified":"2026-05-04T17:12:38","modified_gmt":"2026-05-04T07:12:38","slug":"fefo","status":"publish","type":"post","link":"https:\/\/www.hashmicro.com\/au\/blog\/fefo\/","title":{"rendered":"FEFO Inventory Method: How Expiry-Based Stock Works"},"content":{"rendered":"<p data-start=\"180\" data-end=\"422\">Inventory management becomes more complex when products have a limited shelf life. FEFO, or First Expired, First Out, focuses on moving items based on expiration dates rather than arrival order to reduce spoilage and maintain product quality.<\/p>\n<p data-start=\"424\" data-end=\"686\">By prioritising expiry dates, businesses can better control stock flow, minimise losses, and ensure that customers receive products within acceptable usage periods. This method is especially critical for industries where timing directly affects safety and value.<\/p>\n<p data-start=\"747\" data-end=\"991\"><!-- <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\">Table of Content<\/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<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\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<!-- 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\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\r\n\r\n\r\n\t\r\n\/\/ \tmake the heading at the center of the viewport\r\n\/\/ \tdocument.addEventListener('DOMContentLoaded', function() {\r\n\/\/     \/\/ Add click event listener to all links in the TOC list\r\n\/\/     document.querySelectorAll('#toc-list a').forEach(anchor => {\r\n\/\/         anchor.addEventListener('click', function (e) {\r\n\/\/             e.preventDefault(); \/\/ Prevent the default behavior of jumping to the anchor\r\n\/\/ \/\/ \t\t\tconsole.log(\"prevent default\");\r\n\/\/             const targetId = this.getAttribute('href').substring(1); \/\/ Get the ID of the target element\r\n\/\/             const targetElement = document.getElementById(targetId); \/\/ Get the target element\r\n\r\n\/\/             if (targetElement) {\r\n\/\/                 const headerHeight = document.querySelector('#toc .header').offsetHeight; \/\/ Get the height of the fixed header\r\n\/\/                 const windowHeight = window.innerHeight; \/\/ Get the height of the viewport\r\n\/\/                 const targetOffset = targetElement.offsetTop; \/\/ Get the top offset of the target element\r\n\/\/                 const scrollTo = targetOffset + (windowHeight \/ 2) + (headerHeight); \/\/ Calculate the scroll position to center the target element\r\n\r\n\/\/                 \/\/ Scroll to the calculated position smoothly\r\n\/\/                 window.scrollTo({\r\n\/\/                     top: scrollTo,\r\n\/\/                     behavior: 'smooth'\r\n\/\/                 });\r\n\/\/             }\r\n\/\/         });\r\n\/\/     });\r\n\/\/ });\r\n<\/script>\r\n\r\n<!-- START script lama -->\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<\/script> -->\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\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']; \/\/ 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\nToC List for desktop side bar, diganti jadi inject by php, di code snippet \"Sidebar Accordion\"\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;} \/\/ Kalau Key Takeaways, jangan dimasukin\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\tDapatkan elemen ul dengan id 'list_toc_float'\r\nconst ulFloat = document.getElementById('list_toc');\r\nconst ulJourney = document.getElementById('list_journey');\r\n\r\nDapatkan 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\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<\/p>\n<style>\r\n\t.takeaways-container {\r\n\t\tmargin: 20px 0;\r\n\t\tfont-family: sans-serif;\r\n\t}\r\n\t.box-content {\r\n\t\tbackground-color: #fffacd;\r\n\t\tbox-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\r\n\t\tborder-radius: 25px;\r\n\t\tpadding: 25px;\r\n\t}\r\n\t.title {\r\n\t\tmargin-bottom: 20px;\r\n\t}\r\n\t.title p {\r\n\t\tdisplay: inline-block;\r\n\t\tbackground-color: #8A0E19;\r\n\t\tcolor: #ffffff;\r\n\t\tpadding: 8px 15px;\r\n\t\tborder-radius: 8px;\r\n\t\tfont-size: 22px;\r\n\t\tfont-weight: bold;\r\n\t\tmargin: 0;\r\n\t}\r\n\t.item {\r\n\t\tdisplay: flex;\r\n\t\talign-items: flex-start;\r\n\t\tmargin-bottom: 12px;\r\n\t}\r\n\t.item .circle {\r\n\t\twidth: 8px;\r\n\t\theight: 8px;\r\n\t\tbackground-color: #000000;\r\n\t\tborder-radius: 50%;\r\n\t\tmargin-right: 12px;\r\n\t\tflex-shrink: 0;\r\n\t\tmargin-top: 8px;\r\n\t}\r\n\t.item p {\r\n\t\tmargin: 0;\r\n\t\tfont-size: 16px;\r\n\t\tline-height: 1.6;\r\n\t}\r\n\t.item p a {\r\n\t\tcolor: #8A0E19;\r\n\t\tfont-weight: normal;\r\n\t\ttext-decoration: none;\r\n\t}\r\n\t.item p a:hover {\r\n\t\ttext-decoration: underline;\r\n\t}\r\n\t.button-wrapper {\r\n\t\tmargin-top: 25px;\r\n\t}\r\n\t.submit-button {\r\n\t\tbackground-color: #8a0e19;\r\n\t\tcolor: #fff !important;\r\n\t\ttransition: all .3s ease;\r\n\t\tpadding: 12px 28px;\r\n\t\tdisplay: inline-block;\r\n\t\tborder-radius: 12px;\r\n\t\tfont-size: 16px;\r\n\t\tfont-weight: bold;\r\n\t\ttext-decoration: none;\r\n\t}\r\n\t.submit-button:hover {\r\n\t\tbackground-color: #991b26;\r\n\t}\r\n\t@media (max-width: 767px) {\r\n\t\t.takeaways-container {\r\n\t\t\theight: auto;\r\n\t\t\tpadding: 0;\r\n\t\t}\r\n\t\t.box-content {\r\n\t\t\tpadding: 24px;\r\n\t\t}\r\n\t\t.content,\r\n\t\t.main-content,\r\n\t\t.list-item {\r\n\t\t\twidth: 100%;\r\n\t\t}\r\n\t}\r\n<\/style>\r\n\r\n<div class=\"takeaways-container\">\r\n\t<div class=\"box-content\">\r\n\t\t<div class=\"content\">\r\n\t\t\t<div class=\"title\">\r\n\t\t\t\t<p>Key Takeaways<\/p>\r\n\t\t\t<\/div>\r\n\t\t\t<div class=\"main-content\">\r\n\t\t\t\t<div class=\"list-item\">\r\n\t\t\t\t\t<div class=\"item\">    <div class=\"circle\"><\/div>    <p><a href=\"#what-fefo-means-in-inventory-management\">Explains how FEFO inventory method prioritises stock<\/a> based on expiration dates to improve inventory accuracy and reduce waste.<\/p><\/div><div class=\"item\">    <div class=\"circle\"><\/div>    <p><a href=\"#fefo-vs-fifo-in-inventory-management\">Compares FEFO and FIFO approaches to help determine the most suitable method<\/a> based on product shelf life and stock movement.<\/p><\/div><div class=\"item\">    <div class=\"circle\"><\/div>    <p><a href=\"#benefits-of-using-fefo\">Highlights how FEFO reduces inventory loss<\/a>, maintains product quality, and supports compliance for time-sensitive products.<\/p><\/div><div class=\"item\">    <div class=\"circle\"><\/div>    <p><a href=\"#making-fefo-work-in-daily-operations\">Shows how businesses implement FEFO<\/a> through system support, staff training, and continuous monitoring of stock movement.<\/p><\/div>\t\t\t\t<\/div>\r\n\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t<\/div>\r\n<\/div>\n<p data-start=\"747\" data-end=\"991\">\r\n    <div class=\"adjustable-banner-wrap\">\r\n        <a href=\"https:\/\/www.hashmicro.com\/au\/inventory?medium=moneysite-banner\" target=\"_blank\">\r\n            <img decoding=\"async\" loading=\"lazy\"\r\n                 src=\"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/03\/inventory_desktop_3.webp\"\r\n                 data-desktop-src=\"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/03\/inventory_desktop_3.webp\"\r\n                 data-mobile-src=\"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/03\/inventory_mobile_3.webp\"\r\n                 alt=\"Inventory3\"\r\n                 class=\"responsive-image-banner\">\r\n\r\n            \r\n            <div class=\"adjustable-banner-overlay\" style=\"width: 58%\">\r\n                <p class=\"adjustable-banner-text\"><span class=\"adjustable-highlight\">Need an<\/span> expert to manage <span class=\"adjustable-highlight\">inventory expiry and reduce stock waste<\/span>?<\/p>\r\n                <div class=\"adjustable-banner-btn\">Schedule a Consultation<\/div>\r\n            <\/div>\r\n\r\n        <\/a>\r\n    <\/div>\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><\/p>\n<h2 id=\"what-fefo-means-in-inventory-management\"><strong>What FEFO Means in Inventory Management<\/strong><\/h2>\n<p data-start=\"741\" data-end=\"963\">FEFO is an inventory management approach where products with the earliest expiration dates are prioritised for dispatch. Instead of relying on when items arrive, this method focuses on how long each product remains usable.<\/p>\n<p data-start=\"965\" data-end=\"1205\">In practice, every batch is treated as time-sensitive. Items are tracked based on expiry data, ensuring that stock closest to its end of life is moved first. This reduces the risk of unsellable inventory and improves overall stock accuracy.<\/p>\n<p data-start=\"1207\" data-end=\"1408\">FEFO also supports quality control. By ensuring older stock is consistently rotated out, businesses can maintain product standards while aligning with customer expectations and regulatory requirements.<\/p>\n<h2 data-section-id=\"161gxlh\" data-start=\"1415\" data-end=\"1466\"><span role=\"text\"><strong data-start=\"1418\" data-end=\"1466\">The Logic Behind Expiry-Based Inventory Flow<\/strong><\/span><\/h2>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-3160\" src=\"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/expiry-based-inventory-flow-e1776849507169.webp\" alt=\"expiry based inventory flow in FEFO stock management\" width=\"1244\" height=\"540\" srcset=\"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/expiry-based-inventory-flow-e1776849507169.webp 1244w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/expiry-based-inventory-flow-e1776849507169-300x130.webp 300w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/expiry-based-inventory-flow-e1776849507169-1024x445.webp 1024w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/expiry-based-inventory-flow-e1776849507169-768x333.webp 768w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/expiry-based-inventory-flow-e1776849507169-968x420.webp 968w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/expiry-based-inventory-flow-e1776849507169-150x65.webp 150w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/expiry-based-inventory-flow-e1776849507169-696x302.webp 696w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/expiry-based-inventory-flow-e1776849507169-1068x464.webp 1068w\" sizes=\"(max-width: 1244px) 100vw, 1244px\" \/><\/p>\n<p data-start=\"1468\" data-end=\"1682\">Expiry-based inventory flow is built on the idea that product value decreases over time. Managing stock based on expiration ensures that goods are used or sold before they lose their usability or compliance status.<\/p>\n<h3 data-section-id=\"q9vulx\" data-start=\"1689\" data-end=\"1734\"><span role=\"text\">Prioritizing products near expiration<\/span><\/h3>\n<p data-start=\"1736\" data-end=\"1912\">Products approaching their expiration date carry the highest risk of becoming unsellable. Prioritising these items ensures they are moved out of storage before they lose value.<\/p>\n<p data-start=\"1914\" data-end=\"2099\">This approach turns inventory into a dynamic system rather than static stock. Teams are guided to focus on time-sensitive items, reducing the chance of overlooked or forgotten products.<\/p>\n<h3 data-section-id=\"1tjewj1\" data-start=\"2106\" data-end=\"2150\"><span role=\"text\">Why timing matters more than arrival<\/span><\/h3>\n<p data-start=\"2152\" data-end=\"2343\">In real operations, products do not always arrive in the same order as their expiration timelines. A newer shipment can expire sooner than older stock due to supplier or logistics variations.<\/p>\n<p data-start=\"2345\" data-end=\"2509\">Relying only on arrival order can lead to incorrect stock rotation. By focusing on expiration dates instead, businesses avoid holding short-life items for too long.<\/p>\n<h3 data-section-id=\"xqp843\" data-start=\"2516\" data-end=\"2557\"><span role=\"text\">Preventing waste through rotation<\/span><\/h3>\n<p data-start=\"2559\" data-end=\"2716\">Consistent rotation based on expiry helps prevent stock from sitting idle until it becomes unusable. This reduces write-offs and improves inventory turnover.<\/p>\n<p data-start=\"2718\" data-end=\"2875\">It also supports better space utilisation. Older stock is cleared regularly, making room for incoming products without creating hidden or stagnant inventory.<\/p>\n<h2 data-section-id=\"96zx2h\" data-start=\"2882\" data-end=\"2927\"><span role=\"text\"><strong data-start=\"2885\" data-end=\"2927\">How FEFO Works in Warehouse Operations<\/strong><\/span><\/h2>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-3152 size-full\" src=\"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/How-FEFO-Works-in-Warehouse-Operations-e1776848254779.webp\" alt=\"How FEFO Works in Warehouse Operations\" width=\"1130\" height=\"584\" srcset=\"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/How-FEFO-Works-in-Warehouse-Operations-e1776848254779.webp 1130w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/How-FEFO-Works-in-Warehouse-Operations-e1776848254779-300x155.webp 300w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/How-FEFO-Works-in-Warehouse-Operations-e1776848254779-1024x529.webp 1024w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/How-FEFO-Works-in-Warehouse-Operations-e1776848254779-768x397.webp 768w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/How-FEFO-Works-in-Warehouse-Operations-e1776848254779-813x420.webp 813w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/How-FEFO-Works-in-Warehouse-Operations-e1776848254779-150x78.webp 150w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/How-FEFO-Works-in-Warehouse-Operations-e1776848254779-696x360.webp 696w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/How-FEFO-Works-in-Warehouse-Operations-e1776848254779-1068x552.webp 1068w\" sizes=\"(max-width: 1130px) 100vw, 1130px\" \/><\/p>\n<p data-start=\"2929\" data-end=\"3112\">Applying FEFO in daily operations requires coordination between data tracking, storage organisation, and picking processes. Each stage must be aligned with an <a href=\"https:\/\/www.hashmicro.com\/au\/blog\/inventory-management-system\">end-to-end inventory workflow<\/a>.<\/p>\n<h3 data-section-id=\"njuc9y\" data-start=\"3119\" data-end=\"3157\"><span role=\"text\">Tracking expiry dates by batch<\/span><\/h3>\n<p data-start=\"3159\" data-end=\"3300\">Each product batch must be recorded with its expiration date upon arrival. This data becomes the reference point for all inventory movements.<\/p>\n<p data-start=\"3302\" data-end=\"3460\">Accurate tracking ensures that the system can identify which items need to be prioritised. Without reliable data, the entire FEFO process becomes ineffective.<\/p>\n<h3 data-section-id=\"1dq3axu\" data-start=\"3467\" data-end=\"3511\"><span role=\"text\">Organizing stock based on shelf life<\/span><\/h3>\n<p data-start=\"3513\" data-end=\"3665\">Warehouse layout plays a key role in supporting FEFO. Items with shorter shelf life should be placed in easily accessible locations to simplify picking.<\/p>\n<p data-start=\"3667\" data-end=\"3837\">This reduces handling time and ensures that staff naturally select the correct stock. Proper organisation also prevents older items from being blocked by newer inventory.<\/p>\n<h3 data-section-id=\"b3p1sk\" data-start=\"3844\" data-end=\"3898\"><span role=\"text\">Picking inventory based on expiration priority<\/span><\/h3>\n<p data-start=\"3900\" data-end=\"4054\">When orders are processed, pickers are directed to select items with the earliest expiration dates. This ensures that stock rotation happens consistently.<\/p>\n<p data-start=\"4056\" data-end=\"4231\">Systems or procedures often guide this process to reduce human error. By enforcing expiry-based picking, businesses maintain accuracy and avoid accidental stock mismanagement.<\/p>\n<h2 data-section-id=\"a6xjfm\" data-start=\"4238\" data-end=\"4277\"><span role=\"text\"><strong data-start=\"4241\" data-end=\"4277\">Where FEFO Is Most Commonly Used<\/strong><\/span><\/h2>\n<p data-start=\"4279\" data-end=\"4477\">FEFO is widely used in industries where product lifespan directly affects usability, safety, and customer satisfaction. In these environments, incorrect stock rotation can lead to significant risks.<\/p>\n<h3 data-section-id=\"16xorn4\" data-start=\"4484\" data-end=\"4518\"><span role=\"text\">Food and beverage industry<\/span><\/h3>\n<p data-start=\"4520\" data-end=\"4709\">Perishable goods such as dairy, fresh produce, and packaged food rely heavily on expiry-based rotation. Managing these products without FEFO can quickly lead to spoilage and financial loss.<\/p>\n<p data-start=\"4711\" data-end=\"4812\">Ensuring timely distribution also helps maintain freshness and compliance with food safety standards.<\/p>\n<h3 data-section-id=\"nohbdc\" data-start=\"4819\" data-end=\"4857\"><span role=\"text\">Pharmaceuticals and healthcare<\/span><\/h3>\n<p data-start=\"4859\" data-end=\"5007\">Medications and medical supplies must be used within strict expiration limits. Using expired products can reduce effectiveness or pose health risks.<\/p>\n<p data-start=\"5009\" data-end=\"5122\">FEFO ensures that these items are consistently rotated, supporting both patient safety and regulatory compliance.<\/p>\n<h3 data-section-id=\"1lydbso\" data-start=\"5129\" data-end=\"5167\"><span role=\"text\">Cosmetics and perishable goods<\/span><\/h3>\n<p data-start=\"5169\" data-end=\"5339\">Many cosmetics and personal care products degrade over time, especially those with active ingredients. Expired products can lose effectiveness or cause adverse reactions.<\/p>\n<p data-start=\"5341\" data-end=\"5479\">Applying FEFO helps maintain product quality and protects brand reputation by ensuring customers receive items within their usable period.<\/p>\n<h2 id=\"fefo-vs-fifo-in-inventory-management\"><strong>FEFO VS FIFO IN INVENTORY MANAGEMENT<\/strong><\/h2>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">To decide whether FEFO is the right approach, it helps to compare it with FIFO. Both methods aim to manage stock movement, but they rely on different priorities when determining which items should be used or sold first.<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">The key difference lies in how inventory is prioritised. FEFO focuses on expiration dates, while FIFO follows a <a href=\"https:\/\/www.hashmicro.com\/au\/blog\/first-in-first-out\/\">sequence-based stock rotation<\/a> determined by the order in which goods are received.<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">This distinction affects how stock is rotated, especially for products with varying shelf life.<\/p>\n<div style=\"overflow-x: auto;\">\n<table style=\"border-collapse: collapse; width: 100%;\">\n<tbody>\n<tr>\n<th style=\"background-color: #990000; color: #fff; padding: 6px;\">Aspect<\/th>\n<th style=\"background-color: #990000; color: #fff; padding: 6px;\">FEFO<\/th>\n<th style=\"background-color: #990000; color: #fff; padding: 6px;\">FIFO<\/th>\n<\/tr>\n<tr>\n<td>Basis rotation<\/td>\n<td>Expiry date<\/td>\n<td>Arrival order<\/td>\n<\/tr>\n<tr>\n<td>Best for<\/td>\n<td>Perishable goods<\/td>\n<td>Non-perishable goods<\/td>\n<\/tr>\n<tr>\n<td>Stock priority<\/td>\n<td>Shortest shelf life first<\/td>\n<td>Oldest stock first<\/td>\n<\/tr>\n<tr>\n<td>Risk control<\/td>\n<td>Reduces expiry risk<\/td>\n<td>May ignore expiry timing<\/td>\n<\/tr>\n<tr>\n<td>Operational complexity<\/td>\n<td>Higher<\/td>\n<td>Lower<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p data-section-id=\"kx2mec\" data-start=\"1538\" data-end=\"1567\">This comparison shows that FEFO provides better control for time-sensitive inventory, while FIFO remains suitable for products without expiration constraints.<\/p>\n<h2 id=\"benefits-of-using-fefo\"><strong>BENEFITS OF USING FEFO<\/strong><\/h2>\n<p data-start=\"1569\" data-end=\"1788\">After understanding how FEFO differs from FIFO, the next step is recognising its practical value. Businesses that implement expiry-based inventory flow gain stronger control over stock quality and financial performance.<\/p>\n<h3 data-section-id=\"1fu78db\" data-start=\"1795\" data-end=\"1822\">Reducing waste and loss<\/h3>\n<p data-start=\"1824\" data-end=\"1986\">FEFO helps minimise unsellable inventory by ensuring that items are used or sold before they expire. This directly reduces write-offs and improves stock turnover.<\/p>\n<p data-start=\"1988\" data-end=\"2099\">As a result, businesses can protect margins and avoid unnecessary disposal costs associated with expired goods.<\/p>\n<h3 data-section-id=\"i2qrzt\" data-start=\"2106\" data-end=\"2137\">Maintaining product quality<\/h3>\n<p data-start=\"2139\" data-end=\"2312\">By consistently rotating stock based on expiration, businesses can maintain product standards. Customers are more likely to receive items within a safe and usable timeframe.<\/p>\n<p data-start=\"2314\" data-end=\"2463\">This also supports brand reliability. Delivering products with sufficient shelf life helps build trust and reduces the risk of complaints or returns.<\/p>\n<h3 data-section-id=\"zlca5f\" data-start=\"2470\" data-end=\"2506\">Supporting compliance and safety<\/h3>\n<p data-start=\"2508\" data-end=\"2660\">Many industries require strict control over product expiry. FEFO supports compliance by ensuring that products are distributed within acceptable limits.<\/p>\n<p data-start=\"2662\" data-end=\"2783\">This is particularly important for regulated sectors where improper stock handling can lead to penalties or safety risks.<\/p>\n<p data-start=\"2662\" data-end=\"2783\"><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\/blog\/wp-content\/uploads\/2025\/12\/quote.webp\" alt=\"Quote Icon\" class=\"quote-icon\">\r\n        <div>\r\n            Managing inventory based on expiry dates allows businesses to reduce waste while maintaining consistent product quality and compliance across operations.        <\/div>\r\n    <\/div>\r\n    <p class=\"quote-author-wrapper\">\r\n        <em>Kaia Lockwood, Senior Product Manager<\/em>\r\n    <\/p>\r\n<\/div><\/p>\n<h2 data-section-id=\"dmqxpo\" data-start=\"2790\" data-end=\"2824\"><span role=\"text\"><strong data-start=\"2793\" data-end=\"2824\">CHALLENGES IN APPLYING FEFO<\/strong><\/span><\/h2>\n<p data-start=\"1829\" data-end=\"2048\">While FEFO improves stock control, applying it consistently can be more demanding than traditional methods. Businesses need to manage both data accuracy and operational complexity to ensure the system works as intended.<\/p>\n<p data-start=\"2050\" data-end=\"2095\">Common challenges when applying FEFO include:<\/p>\n<ul data-start=\"2097\" data-end=\"2594\">\n<li data-section-id=\"m8f3u5\" data-start=\"2097\" data-end=\"2241\">Need for accurate expiry tracking<br data-start=\"2132\" data-end=\"2135\" \/>Incorrect or missing expiration data can lead to poor stock prioritisation and increase the risk of waste.<\/li>\n<li data-section-id=\"335w5o\" data-start=\"2243\" data-end=\"2413\">Complex warehouse handling<br data-start=\"2271\" data-end=\"2274\" \/>Stock cannot be picked based on location alone. Staff must follow expiry-based rules, which can slow down operations if not well organised.<\/li>\n<li data-section-id=\"nhc9vp\" data-start=\"2415\" data-end=\"2594\">Dependence on inventory systems<br data-start=\"2448\" data-end=\"2451\" \/>Manual processes are often insufficient. Businesses typically rely on this <a href=\"https:\/\/www.hashmicro.com\/au\/inventory\">end-to-end inventory solution<\/a> to track expiry dates and maintain consistency across operations.<\/li>\n<\/ul>\n<p data-start=\"2596\" data-end=\"2719\">Addressing these challenges early helps ensure that FEFO delivers its intended benefits without disrupting daily workflows.<\/p>\n<h2 id=\"making-fefo-work-in-daily-operations\"><strong>MAKING FEFO WORK IN DAILY OPERATIONS<\/strong><\/h2>\n<p data-start=\"2837\" data-end=\"3048\">After understanding the challenges, the next step is ensuring that FEFO can be applied consistently in real operations. This requires a combination of system support, clear procedures, and continuous monitoring.<\/p>\n<p data-start=\"3050\" data-end=\"3111\">To implement FEFO effectively, businesses typically focus on:<\/p>\n<ol data-start=\"3113\" data-end=\"3670\">\n<li data-section-id=\"yqaegq\" data-start=\"3113\" data-end=\"3301\"><strong>Using inventory or WMS systems:<\/strong> <a href=\"https:\/\/www.hashmicro.com\/au\/blog\/best-inventory-software\/\">Leading stock handling software<\/a> help track expiry dates, manage batch data, and guide picking decisions. This reduces manual errors and ensures consistent stock prioritisation.<\/li>\n<li data-section-id=\"uclrwp\" data-start=\"3303\" data-end=\"3494\"><strong>Training staff on stock rotation:<\/strong> Warehouse teams need clear guidelines on how to prioritise inventory based on expiration. Proper training ensures that procedures are followed correctly.<\/li>\n<li data-section-id=\"4calc\" data-start=\"3496\" data-end=\"3670\"><strong>Monitoring expiry and stock movement: <\/strong>Regular reviews and a <a href=\"https:\/\/www.hashmicro.com\/au\/blog\/periodic-inventory-system\/\">scheduled stock count method<\/a> help identify slow-moving or at-risk stock. This allows businesses to take action before products become unsellable.<\/li>\n<\/ol>\n<p data-start=\"3672\" data-end=\"3791\">By combining these practices, businesses can maintain a stable inventory flow while reducing the risk of expired stock.<\/p>\n<h2 data-start=\"3829\" data-end=\"3972\"><strong>Conclusion<\/strong><\/h2>\n<p data-start=\"2283\" data-end=\"2498\">FEFO inventory method helps businesses manage time-sensitive stock more effectively by prioritising expiration over arrival. Without a structured approach, inventory waste and quality risks become harder to control.<\/p>\n<p data-start=\"2500\" data-end=\"2709\">To implement FEFO with better accuracy and visibility, consider using a system that supports expiry tracking and automation. <a href=\"https:\/\/www.hashmicro.com\/au\/free-product-tour\/\">Get free consultation<\/a>\u00a0to explore how it can improve your inventory operations.<\/p>\n<p><span data-sheets-root=\"1\"><a href=\"https:\/\/www.hashmicro.com\/au\/inventory?medium=moneysite-banner\" target=\"_blank\"><img decoding=\"async\" loading=\"lazy\" width=\"712\" src=\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2025\/06\/Inventory.webp\" alt=\"Inventory Management\"><\/a><\/span><\/p>\n<h2><strong>FAQ About FEFO Inventory Method<\/strong><\/h2>\n<ul class=\"bottom_faq\">\n<li>\n<details>\n<summary><strong>Can FEFO be applied without a warehouse management system?<\/strong><\/summary>\n<p>Yes, but it is more difficult to maintain accuracy. Manual tracking can work for small inventories, but larger operations usually require a system to manage expiry dates consistently.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>How do businesses handle products with no clear expiry date?<\/strong><\/summary>\n<p>Products without fixed expiry dates are typically managed using FIFO or internal shelf-life estimates to maintain stock rotation and avoid long-term stagnation.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>What happens if expiry data is entered incorrectly?<\/strong><\/summary>\n<p>Inaccurate expiry data can disrupt stock prioritisation, leading to incorrect picking decisions and increased risk of expired inventory.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>Is FEFO suitable for multi-warehouse operations?<\/strong><\/summary>\n<p>Yes, but it requires centralised tracking and synchronised data across locations to ensure consistent stock rotation and visibility.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>How often should expiry-based inventory be reviewed?<\/strong><\/summary>\n<p>Inventory should be reviewed regularly, depending on product type, to identify slow-moving items and prevent stock from reaching expiration.<\/p>\n<\/details>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Inventory management becomes more complex when products have a limited shelf life. FEFO, or First Expired, First Out, focuses on moving items based on expiration dates rather than arrival order to reduce spoilage and maintain product quality. By prioritising expiry dates, businesses can better control stock flow, minimise losses, and ensure that customers receive products [&hellip;]<\/p>\n","protected":false},"author":51,"featured_media":3155,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"tdm_status":"","tdm_grid_status":"","footnotes":""},"categories":[56],"tags":[],"class_list":{"0":"post-2176","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 v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>FEFO Inventory Method: How Expiry-Based Stock Works<\/title>\n<meta name=\"description\" content=\"Understand how FEFO inventory method reduces waste, improves stock rotation, and ensures better control for expiry-based inventory.\" \/>\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\/au\/blog\/fefo\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"FEFO Inventory Method: How Expiry-Based Stock Works\" \/>\n<meta property=\"og:description\" content=\"Understand how FEFO inventory method reduces waste, improves stock rotation, and ensures better control for expiry-based inventory.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.hashmicro.com\/au\/blog\/fefo\/\" \/>\n<meta property=\"og:site_name\" content=\"HashMicro Australia\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-04T07:12:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/fefo-inventory-hashmicro-e1776848706636.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"970\" \/>\n\t<meta property=\"og:image:height\" content=\"548\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Isla Avery Young\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Isla Avery Young\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/fefo\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/fefo\\\/\"},\"author\":{\"name\":\"Isla Avery Young\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/#\\\/schema\\\/person\\\/d6c3d199b3a724e06ff32dfd866ebdc3\"},\"headline\":\"FEFO Inventory Method: How Expiry-Based Stock Works\",\"datePublished\":\"2026-05-04T07:12:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/fefo\\\/\"},\"wordCount\":1724,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/fefo\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/fefo-inventory-hashmicro-e1776848706636.webp\",\"articleSection\":[\"Inventory\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/fefo\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/fefo\\\/\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/fefo\\\/\",\"name\":\"FEFO Inventory Method: How Expiry-Based Stock Works\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/fefo\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/fefo\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/fefo-inventory-hashmicro-e1776848706636.webp\",\"datePublished\":\"2026-05-04T07:12:38+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/#\\\/schema\\\/person\\\/d6c3d199b3a724e06ff32dfd866ebdc3\"},\"description\":\"Understand how FEFO inventory method reduces waste, improves stock rotation, and ensures better control for expiry-based inventory.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/fefo\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/fefo\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/fefo\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/fefo-inventory-hashmicro-e1776848706636.webp\",\"contentUrl\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/fefo-inventory-hashmicro-e1776848706636.webp\",\"width\":970,\"height\":548},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/fefo\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"FEFO Inventory Method: How Expiry-Based Stock Works\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/\",\"name\":\"HashMicro Australia\",\"description\":\"Business Management Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/#\\\/schema\\\/person\\\/d6c3d199b3a724e06ff32dfd866ebdc3\",\"name\":\"Isla Avery Young\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/cropped-Isla-Avery-Young-WP-96x96.webp\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/cropped-Isla-Avery-Young-WP-96x96.webp\",\"contentUrl\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/cropped-Isla-Avery-Young-WP-96x96.webp\",\"caption\":\"Isla Avery Young\"},\"description\":\"As a business development staff, I spend my time listening to the real problems teams face on the inventory and warehouse operations. It gives me a clear view of what businesses usually miss, where errors start, which handoffs break, and what visibility leaders need to stop firefighting. I share that perspective in my articles.\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/author\\\/isla-avery-young\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"FEFO Inventory Method: How Expiry-Based Stock Works","description":"Understand how FEFO inventory method reduces waste, improves stock rotation, and ensures better control for expiry-based inventory.","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\/au\/blog\/fefo\/","og_locale":"en_US","og_type":"article","og_title":"FEFO Inventory Method: How Expiry-Based Stock Works","og_description":"Understand how FEFO inventory method reduces waste, improves stock rotation, and ensures better control for expiry-based inventory.","og_url":"https:\/\/www.hashmicro.com\/au\/blog\/fefo\/","og_site_name":"HashMicro Australia","article_published_time":"2026-05-04T07:12:38+00:00","og_image":[{"width":970,"height":548,"url":"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/fefo-inventory-hashmicro-e1776848706636.webp","type":"image\/webp"}],"author":"Isla Avery Young","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Isla Avery Young","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.hashmicro.com\/au\/blog\/fefo\/#article","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/au\/blog\/fefo\/"},"author":{"name":"Isla Avery Young","@id":"https:\/\/www.hashmicro.com\/au\/blog\/#\/schema\/person\/d6c3d199b3a724e06ff32dfd866ebdc3"},"headline":"FEFO Inventory Method: How Expiry-Based Stock Works","datePublished":"2026-05-04T07:12:38+00:00","mainEntityOfPage":{"@id":"https:\/\/www.hashmicro.com\/au\/blog\/fefo\/"},"wordCount":1724,"commentCount":0,"image":{"@id":"https:\/\/www.hashmicro.com\/au\/blog\/fefo\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/fefo-inventory-hashmicro-e1776848706636.webp","articleSection":["Inventory"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.hashmicro.com\/au\/blog\/fefo\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.hashmicro.com\/au\/blog\/fefo\/","url":"https:\/\/www.hashmicro.com\/au\/blog\/fefo\/","name":"FEFO Inventory Method: How Expiry-Based Stock Works","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/au\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.hashmicro.com\/au\/blog\/fefo\/#primaryimage"},"image":{"@id":"https:\/\/www.hashmicro.com\/au\/blog\/fefo\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/fefo-inventory-hashmicro-e1776848706636.webp","datePublished":"2026-05-04T07:12:38+00:00","author":{"@id":"https:\/\/www.hashmicro.com\/au\/blog\/#\/schema\/person\/d6c3d199b3a724e06ff32dfd866ebdc3"},"description":"Understand how FEFO inventory method reduces waste, improves stock rotation, and ensures better control for expiry-based inventory.","breadcrumb":{"@id":"https:\/\/www.hashmicro.com\/au\/blog\/fefo\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.hashmicro.com\/au\/blog\/fefo\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hashmicro.com\/au\/blog\/fefo\/#primaryimage","url":"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/fefo-inventory-hashmicro-e1776848706636.webp","contentUrl":"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/fefo-inventory-hashmicro-e1776848706636.webp","width":970,"height":548},{"@type":"BreadcrumbList","@id":"https:\/\/www.hashmicro.com\/au\/blog\/fefo\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.hashmicro.com\/au\/blog\/"},{"@type":"ListItem","position":2,"name":"FEFO Inventory Method: How Expiry-Based Stock Works"}]},{"@type":"WebSite","@id":"https:\/\/www.hashmicro.com\/au\/blog\/#website","url":"https:\/\/www.hashmicro.com\/au\/blog\/","name":"HashMicro Australia","description":"Business Management Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.hashmicro.com\/au\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.hashmicro.com\/au\/blog\/#\/schema\/person\/d6c3d199b3a724e06ff32dfd866ebdc3","name":"Isla Avery Young","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/02\/cropped-Isla-Avery-Young-WP-96x96.webp","url":"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/02\/cropped-Isla-Avery-Young-WP-96x96.webp","contentUrl":"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/02\/cropped-Isla-Avery-Young-WP-96x96.webp","caption":"Isla Avery Young"},"description":"As a business development staff, I spend my time listening to the real problems teams face on the inventory and warehouse operations. It gives me a clear view of what businesses usually miss, where errors start, which handoffs break, and what visibility leaders need to stop firefighting. I share that perspective in my articles.","url":"https:\/\/www.hashmicro.com\/au\/blog\/author\/isla-avery-young\/"}]}},"_links":{"self":[{"href":"https:\/\/www.hashmicro.com\/au\/blog\/wp-json\/wp\/v2\/posts\/2176","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hashmicro.com\/au\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hashmicro.com\/au\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/au\/blog\/wp-json\/wp\/v2\/users\/51"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/au\/blog\/wp-json\/wp\/v2\/comments?post=2176"}],"version-history":[{"count":8,"href":"https:\/\/www.hashmicro.com\/au\/blog\/wp-json\/wp\/v2\/posts\/2176\/revisions"}],"predecessor-version":[{"id":3847,"href":"https:\/\/www.hashmicro.com\/au\/blog\/wp-json\/wp\/v2\/posts\/2176\/revisions\/3847"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/au\/blog\/wp-json\/wp\/v2\/media\/3155"}],"wp:attachment":[{"href":"https:\/\/www.hashmicro.com\/au\/blog\/wp-json\/wp\/v2\/media?parent=2176"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hashmicro.com\/au\/blog\/wp-json\/wp\/v2\/categories?post=2176"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hashmicro.com\/au\/blog\/wp-json\/wp\/v2\/tags?post=2176"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}