{"id":79319,"date":"2026-04-05T07:38:04","date_gmt":"2026-04-05T07:38:04","guid":{"rendered":"https:\/\/www.hashmicro.com\/blog\/?p=79319"},"modified":"2026-04-06T09:42:46","modified_gmt":"2026-04-06T09:42:46","slug":"deferred-revenue-journal-entry","status":"publish","type":"post","link":"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/","title":{"rendered":"Deferred Revenue Journal Entry 101"},"content":{"rendered":"<!-- <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\n<p>Deferred revenue is money you&#8217;ve received but haven&#8217;t earned yet. Customer pays upfront \u2192 you owe them a service \u2192 it&#8217;s a liability, not income.<\/p>\n<p>Mastering the deferred revenue journal entry is not merely a bookkeeping exercise; it is a fundamental requirement for compliance with global accounting standards such as ASC 606 and IFRS 15. Mismanagement of these entries can lead to inflated revenue figures, inaccurate financial statements, and severe regulatory penalties. For financial controllers and business owners, understanding the lifecycle of unearned revenue\u2014from the initial receipt of cash to the eventual recognition of income\u2014is essential for maintaining the integrity of financial reporting and ensuring strategic decision-making based on accurate data.<\/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=\"#defining-deferred-revenue-in-modern-accounting\">Automates the complex process of<\/a> revenue recognition, ensuring compliance with ASC 606 and reducing manual errors.<\/p><\/div><div class=\"item\">    <div class=\"circle\"><\/div>    <p><a href=\"#the-core-mechanics-of-the-journal-entry\">Provides real-time visibility into deferred<\/a> revenue liabilities, helping businesses manage cash flow and future obligations effectively.<\/p><\/div><div class=\"item\">    <div class=\"circle\"><\/div>    <p><a href=\"#regulatory-framework-asc-606-and-ifrs-15\">Seamlessly integrates with invoicing and<\/a> billing modules to automatically trigger journal entries upon payment receipt.<\/p><\/div><div class=\"item\">    <div class=\"circle\"><\/div>    <p><a href=\"#detailed-industry-specific-examples\">Generates detailed audit trails and<\/a> financial reports, simplifying the month-end closing process for finance teams.<\/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<h2 id=\"defining-deferred-revenue-in-modern-accounting\">Defining Deferred Revenue in Modern Accounting<\/h2>\n<p>Deferred revenue, often referred to as unearned revenue, represents a prepayment received by a company for goods or services that have not yet been delivered or performed. In the context of accrual accounting, revenue cannot be recognized on the income statement until it is &#8220;earned.&#8221; Therefore, when a customer pays in advance, the company has an obligation to provide value in the future. This obligation classifies the received cash not as income, but as a liability on the balance sheet.<\/p>\n<p>So the key distinction that you should highlight is Cash in your bank \u2260 Revenue on your books. You recognize revenue only when you deliver.<\/p>\n<h3 id=\"liability-classification\">Why is it a Liability?<\/h3>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">It feels counterintuitive with the money in your bank, but it&#8217;s a liability? Here&#8217;s the logic: you owe the customer a service. If you don&#8217;t deliver, you refund. So until you fulfill that obligation, the cash isn&#8217;t truly yours.<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">For classification, it&#8217;s straightforward: if you&#8217;ll deliver within 12 months, it&#8217;s a current liability. Multi-year contracts? Split them with the portion beyond 12 months goes to long-term liabilities.<\/p>\n<h2 id=\"the-core-mechanics-of-the-journal-entry\">The Core Mechanics of the Journal Entry<\/h2>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-79325\" src=\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-Feb-11-2026-03_59_22-PM.webp\" alt=\"Deferred Revenue Journal Entry infographic\" width=\"1024\" height=\"1536\" srcset=\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-Feb-11-2026-03_59_22-PM.webp 1024w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-Feb-11-2026-03_59_22-PM-200x300.webp 200w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-Feb-11-2026-03_59_22-PM-683x1024.webp 683w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-Feb-11-2026-03_59_22-PM-768x1152.webp 768w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-Feb-11-2026-03_59_22-PM-280x420.webp 280w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-Feb-11-2026-03_59_22-PM-150x225.webp 150w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-Feb-11-2026-03_59_22-PM-300x450.webp 300w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-Feb-11-2026-03_59_22-PM-696x1044.webp 696w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>The accounting cycle for deferred revenue involves two primary stages: the initial recording of the prepayment and the subsequent recognition of revenue as it is earned. Understanding the debit and credit flows in these stages is vital for accurate bookkeeping.<\/p>\n<h3 id=\"stage-1-initial-receipt\">Stage 1: Initial Receipt of Payment<\/h3>\n<p>When a customer makes an advance payment, the company\u2019s cash account increases. Simultaneously, the company incurs an obligation. The journal entry reflects an increase in assets (Cash) and an increase in liabilities (Deferred Revenue).<\/p>\n<ul>\n<li><strong>Debit:<\/strong> Cash (Asset increases)<\/li>\n<li><strong>Credit:<\/strong> Deferred Revenue (Liability increases)<\/li>\n<\/ul>\n<p>For example, consider a SaaS company that receives an annual subscription payment of $12,000 on January 1st. The entry would be a debit to Cash for $12,000 and a credit to Deferred Revenue for $12,000. At this specific moment, the revenue recognized on the income statement is zero.<\/p>\n<h3 id=\"stage-2-revenue-recognition\">Stage 2: Recognizing the Revenue<\/h3>\n<p>As time passes or services are rendered, the company fulfills its obligation. Consequently, the liability decreases, and the revenue is recognized. This is typically done through adjusting entries at the end of each month or accounting period.<\/p>\n<ul>\n<li><strong>Debit:<\/strong> Deferred Revenue (Liability decreases)<\/li>\n<li><strong>Credit:<\/strong> Sales Revenue (Equity\/Income increases)<\/li>\n<\/ul>\n<p>Continuing the SaaS example, at the end of January, the company has earned one month of the subscription ($1,000). The entry would debit Deferred Revenue for $1,000 and credit Sales Revenue for $1,000. This process is repeated monthly until the entire $12,000 liability has been moved to revenue.<\/p>\n<h2 id=\"regulatory-framework-asc-606-and-ifrs-15\">Regulatory Framework: ASC 606 and IFRS 15<\/h2>\n<p>The treatment of deferred revenue is heavily governed by accounting standards, specifically ASC 606 (Revenue from Contracts with Customers) in the US and IFRS 15 internationally. These standards introduced a five-step model that entities must apply to determine when and how much revenue to recognize.<\/p>\n<table class=\"min-w-full border-collapse text-sm leading-[1.7] whitespace-normal\">\n<thead class=\"text-left\">\n<tr>\n<th class=\"text-text-100 border-b-0.5 border-border-300\/60 py-2 pr-4 align-top font-bold\">Step<\/th>\n<th class=\"text-text-100 border-b-0.5 border-border-300\/60 py-2 pr-4 align-top font-bold\">Action<\/th>\n<th class=\"text-text-100 border-b-0.5 border-border-300\/60 py-2 pr-4 align-top font-bold\">Example<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">1<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Identify contract<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Signed SaaS agreement<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">2<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Identify obligations<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Software + Support<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">3<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Determine price<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">$12,000\/year<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">4<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Allocate price<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">$10K software + $2K support<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">5<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Recognize when delivered<\/td>\n<td class=\"border-b-0.5 border-border-300\/30 py-2 pr-4 align-top\">Monthly as service provided<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>This framework ensures consistency across industries and prevents companies from manipulating earnings by recognizing revenue too early or too late. It places a heavy emphasis on the transfer of control of goods or services to the customer as the defining moment for revenue recognition.<\/p>\n<h2 id=\"industry-specific-application\">Industry-Specific Application of Deferred Revenue<\/h2>\n<p>The core principle stays the same across industries\u2014it&#8217;s a liability until you deliver. But how you recognize that revenue varies based on your business model.<\/p>\n<h3>Manufacturing: Deposits and Milestone Billin<\/h3>\n<p>Heavy machinery and custom fabrication often require upfront deposits before production begins. That deposit? Deferred revenue until the product is delivered.<\/p>\n<p>The tricky part is when to recognize it. Under ASC 606, you either recognize revenue at final delivery (point in time) or progressively as you build (over time). If the product is custom-made with no alternative use, you can often recognize revenue as milestones are completed\u2014say, 30% when the frame is done, another 30% after assembly. Your ERP needs to track percentage-of-completion and adjust the entries automatically.<\/p>\n<h3>Retail and E-commerce: Gift Cards and Breakage<\/h3>\n<p>Gift cards are textbook deferred revenue. Customer pays $100, you&#8217;ve delivered nothing\u2014that&#8217;s a liability until they redeem it.<\/p>\n<p>The complication is &#8220;breakage&#8221;: gift cards that never get used. You can recognize breakage as revenue, but only based on historical redemption patterns. If data shows 8% of cards expire unused, you recognize that 8% proportionally as other cards are redeemed\u2014not all at once.<\/p>\n<h3>Distribution: Warranties and Bundled Services<\/h3>\n<p>Sell a $50,000 machine with a 2-year maintenance contract worth $5,000? You need to split it. The $45,000 for equipment is recognized on delivery. The $5,000 for maintenance is deferred and amortized monthly over 24 months.<\/p>\n<p>This separation ensures you&#8217;re not inflating current revenue with services you&#8217;ll provide over the next two years.<\/p>\n<h2 id=\"adjusting-process\">The Critical Role of Adjusting Entries<\/h2>\n<p>The accuracy of financial statements hinges on the timely recording of adjusting entries. If a company fails to move amounts from deferred revenue to earned revenue, its liabilities will be overstated, and its revenue (and consequently, net income) will be understated. This distortion can affect tax liabilities, shareholder perception, and loan covenants.<\/p>\n<p>When the end of the accounting period arrives, the finance team must determine the portion of the liability that has been satisfied. This process often involves reviewing schedules and understanding <a href=\"https:\/\/www.hashmicro.com\/blog\/adjusting-journals-entries\/\" target=\"_blank\" rel=\"noopener\">how to adjust journal entry<\/a> records to reflect the transfer from liability to income. This is not always a simple division calculation; it may involve verifying delivery logs, consulting timesheets, or checking software usage data.<\/p>\n<p>Automated accounting systems play a pivotal role here. Manual calculations in spreadsheets are prone to human error, especially as transaction volumes grow. Advanced Enterprise Resource Planning (ERP) systems can automate these recognition schedules, ensuring that the adjusting entry is posted precisely when the performance obligation triggers it.<\/p>\n<h2 id=\"deferred-vs-accrued\">Deferred Revenue vs. Accrued Revenue<\/h2>\n<p>Confusion often arises between deferred revenue and accrued revenue, as they are essentially opposites in the accounting cycle. Distinguishing between them is vital for accurate classification.<\/p>\n<ul>\n<li><strong>Deferred Revenue:<\/strong> Cash is received <em>before<\/em> the service is provided. (Liability).<br \/>\n<em>Example:<\/em> Airline ticket purchased months in advance.<\/li>\n<li><strong>Accrued Revenue:<\/strong> Service is provided <em>before<\/em> the cash is received. (Asset).<br \/>\n<em>Example:<\/em> An electricity company supplying power for a month before sending the bill.<\/li>\n<\/ul>\n<p>In deferred revenue, the company &#8220;owes&#8221; a service. In accrued revenue, the customer &#8220;owes&#8221; the money. Both require adjusting entries to reconcile the timing difference between cash flow and economic activity.<\/p>\n<h2 id=\"impact-financial-metrics\">Impact on Financial Metrics and Analysis<\/h2>\n<p>Deferred revenue has a profound impact on the analysis of a company&#8217;s financial health. Analysts and investors scrutinize this account heavily, particularly in growth-stage technology companies.<\/p>\n<h3 id=\"working-capital\">Working Capital and Liquidity<\/h3>\n<p>Since deferred revenue is a current liability, an increase in this account technically reduces working capital (Current Assets minus Current Liabilities). However, unlike accounts payable, deferred revenue does not require a cash outflow to settle (except in the case of refunds). It is settled by delivering services, which usually have a lower marginal cost than the revenue value. Therefore, a high deferred revenue balance is often seen as a positive indicator of future health and customer commitment, despite its negative impact on standard liquidity ratios.<\/p>\n<h3 id=\"valuation-metrics\">Valuation Metrics<\/h3>\n<p>For SaaS companies, &#8220;Billings&#8221; is a key metric calculated as Revenue plus the Change in Deferred Revenue. This metric provides a better proxy for the cash momentum of the business than GAAP revenue alone. Investors look for growing deferred revenue balances as a sign of strong sales pipelines and market demand.<\/p>\n<h2 id=\"tax-implications\">Tax Implications of Deferred Revenue<\/h2>\n<p>The treatment of deferred revenue for tax purposes can differ from its treatment for financial reporting (GAAP\/IFRS). This divergence creates deferred tax assets or liabilities.<\/p>\n<p>Generally, tax authorities prefer to tax income as soon as the cash is received (the &#8220;Claim of Right&#8221; doctrine). However, financial accounting defers the income. This means a company might pay taxes on cash received in Year 1, even though the revenue isn&#8217;t recognized on the books until Year 2. Conversely, specific tax rules (like IRS Revenue Procedure 2004-34 in the US) allow for a one-year deferral of advance payments for tax purposes under certain conditions.<\/p>\n<p>Navigating these discrepancies requires careful reconciliation between the tax books and the financial books to ensure compliance and optimal tax planning.<\/p>\n<h2 id=\"audit-considerations\">Auditing Deferred Revenue<\/h2>\n<p>Deferred revenue is a high-risk area for auditors because of the potential for manipulation. Management might be tempted to recognize revenue prematurely to meet earnings targets, or conversely, keep revenue deferred to smooth earnings in future periods (&#8220;cookie jar accounting&#8221;).<\/p>\n<p><strong>Key Audit Assertions:<\/strong><\/p>\n<ul>\n<li><strong>Completeness:<\/strong> Ensuring all cash receipts that represent future obligations are recorded as liabilities.<\/li>\n<li><strong>Cut-off:<\/strong> Verifying that revenue is recognized in the correct period. Auditors will test transactions near the end of the year to ensure they aren&#8217;t pushed into the next year or pulled back into the current year inappropriately.<\/li>\n<li><strong>Valuation:<\/strong> Ensuring the calculation of the deferred portion is mathematically accurate and consistent with the contract terms.<\/li>\n<\/ul>\n<p>Auditors will typically request a &#8220;Deferred Revenue Roll-forward&#8221; schedule, reconciling the beginning balance, new billings, revenue recognized, and the ending balance. Discrepancies in this schedule are red flags for internal control weaknesses.<\/p>\n<h2 id=\"future-trends-2025\">Future Trends in Revenue Accounting (2026 and Beyond)<\/h2>\n<p>Looking ahead, the management of deferred revenue is set to become even more data-driven. The rise of usage-based pricing models (e.g., pay-per-API-call, pay-per-gigabyte) is replacing simple flat-rate subscriptions. This shift makes revenue recognition highly dynamic, as the &#8220;earned&#8221; portion changes every minute based on consumption.<\/p>\n<p><strong>AI and Predictive Analytics:<\/strong> Artificial Intelligence is beginning to play a role in predicting revenue streams. AI models can analyze historical redemption patterns, churn rates, and usage data to forecast how deferred revenue will unwind with high precision. This allows CFOs to predict cash flow gaps and revenue shortfalls months in advance.<\/p>\n<p><strong>Blockchain for Smart Contracts:<\/strong> In the longer term, blockchain technology could automate revenue recognition through smart contracts. When a service delivery is verified on the blockchain (e.g., a shipment arrives or a digital key is used), the smart contract could automatically trigger the accounting entry, eliminating the need for manual recognition and reconciliation entirely.<\/p>\n<h2 id=\"pitfalls-mitigation-strategies\">Common Pitfalls and Mitigation Strategies<\/h2>\n<p>Even with sophisticated software, the management of unearned revenue is prone to errors that can lead to material weaknesses in financial audits. Awareness of these pitfalls is the first line of defense.<\/p>\n<h3 id=\"contract-modifications\">Handling Contract Modifications<\/h3>\n<p>One of the most frequent errors occurs during mid-term contract modifications\u2014upsells, downsells, or early cancellations. When a customer upgrades their subscription halfway through a term, the remaining deferred revenue from the original contract must be treated correctly. The pitfall is often &#8220;prospective&#8221; versus &#8220;cumulative catch-up&#8221; treatment. Systems must be configured to either re-allocate the remaining deferred balance over the new term or recognize a one-time adjustment, depending on whether the modification adds distinct goods or services.<\/p>\n<h3 id=\"multi-currency-complexities\">Foreign Exchange (FX) Adjustments<\/h3>\n<p>For global entities, deferred revenue sits on the balance sheet as a non-monetary liability in the functional currency of the subsidiary. However, complications arise during consolidation. Unlike Accounts Receivable, which is revalued at the current spot rate, deferred revenue is typically carried at the historical exchange rate (the rate at the time of the transaction). A common mistake is revaluing deferred revenue at the month-end spot rate, which creates artificial FX gains or losses. Mitigation involves strict system rules that lock the exchange rate for revenue schedules upon creation.<\/p>\n<h3 id=\"cutoff-errors\">Cutoff Errors at Period End<\/h3>\n<p>Timing is everything. A common audit issue is the misalignment between the service start date and the revenue recognition start date. For instance, if a contract is signed on the 28th of the month but implementation doesn&#8217;t begin until the 5th of the following month, revenue recognition should generally not commence until the 5th. Automated systems often default to the invoice date, leading to premature revenue recognition. Mitigation requires a validation step where the &#8220;Revenue Start Date&#8221; is a distinct field from the &#8220;Invoice Date,&#8221; requiring manual confirmation or a trigger from the provisioning system.<\/p>\n<h2 id=\"advanced-best-practices\">Advanced Best Practices for Scale<\/h2>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-full wp-image-79324\" src=\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/image-10.webp\" alt=\"Deferred Revenue Journal Entry \" width=\"1503\" height=\"843\" srcset=\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/image-10.webp 1503w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/image-10-300x168.webp 300w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/image-10-1024x574.webp 1024w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/image-10-768x431.webp 768w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/image-10-749x420.webp 749w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/image-10-150x84.webp 150w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/image-10-696x390.webp 696w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/image-10-1068x599.webp 1068w\" sizes=\"auto, (max-width: 1503px) 100vw, 1503px\" \/><\/p>\n<p>As organizations mature, the management of deferred revenue should evolve from a compliance task to a strategic asset. Advanced best practices involve leveraging this data for broader business insights.<\/p>\n<p><strong>Continuous Auditing and Flux Analysis:<\/strong> Rather than waiting for the annual audit, high-performing finance teams perform monthly flux analysis on deferred revenue accounts. By comparing the expected amortization against the actuals, anomalies caused by data entry errors or system glitches can be detected immediately. This continuous auditing approach reduces the burden of the year-end close.<\/p>\n<p><strong>Integration with CRM for Forecasting:<\/strong> Integrating the ERP revenue module with the CRM (Customer Relationship Management) system allows for &#8220;Bookings to Revenue&#8221; forecasting. By applying the revenue recognition rules to the sales pipeline (weighted by probability), finance can project not just cash flow, but the actual P&amp;L revenue impact of future sales quarters in advance. This alignment between sales and finance enables more accurate guidance for stakeholders and investors.<\/p>\n<h2 id=\"conclusion\">Conclusion<\/h2>\n<p>Deferred revenue is more than just a line item on the balance sheet; it is a reflection of a company&#8217;s future performance and its obligation to its customers. The journal entries associated with it\u2014debiting cash and crediting liability, followed by the gradual shift to revenue\u2014are fundamental to the integrity of accrual accounting.<\/p>\n<p>For businesses navigating the complexities of ASC 606, multi-element contracts, and subscription models, precision is non-negotiable. The risks of errors range from audit failures to misinformed strategic decisions. As business models evolve toward more service-oriented and usage-based structures, the reliance on robust, automated systems to manage these entries will only grow. By mastering the mechanics of deferred revenue, finance professionals ensure that their organization&#8217;s financial narrative remains accurate, compliant, and transparent.<\/p>\n<h2 class=\"faqTitle\">Frequently Asked Question<\/h2>\r\n<style>\r\n\t#main-article p.faqTitle{\r\n\t\ttext-align: center;\r\n\t\tmargin-bottom: 0;\r\n\t\tmargin-top: 50px;\r\n\t\tfont-weight: bold;\r\n\t}\r\n\t\r\n\t.accordion-wrapper{\r\n\t\tbackground-color: white;\r\n\t\tborder: 1px solid #9c171e;\r\n\t\tborder-radius: 6px;\r\n\t\ttransition: 0.4s ease;\r\n\t\tmargin-bottom: 20px;\r\n\t\toverflow: hidden;\r\n\t}\r\n\t\r\n\t.header-faq{\r\n\t\tdisplay: flex;\r\n\t\tborder: none;\r\n\t\tborder-radius: 6px 6px 6px 6px;\r\n\t\tbackground: #FFF;\r\n\t\talign-items: center;\r\n\t\tpadding: 18px;\r\n\t\ttransition: 0.4s;\r\n\t\tcursor: pointer;\r\n\t\tjustify-content: space-between;\r\n\t}\r\n\t\r\n\t.header-faq p{\r\n\t\tmargin-bottom: 0;\r\n\t}\r\n\t\r\n\t.question {\r\n\t\tcolor: #3C3C3C;\r\n\t\twidth: 100%;\r\n\t\ttext-align: left;\r\n\t\tfont-size: 16px;\r\n\t\tline-height: 20px;\r\n\t \ttransition: 0.4s;\r\n\t\tborder: none;\r\n\t\tborder-radius: 6px 6px 6px 6px;\r\n\t\tbackground: #FFF;\r\n\t\tpadding: 0;\r\n\t\ttext-transform: uppercase;\r\n\t\tfont-weight: 700;\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: space-between;\r\n\t\talign-items: center;\r\n\t}\r\n\r\n\t.header-faq.active {\r\n\t  background-color: #FFF;\r\n\t}\r\n\t\r\n\tbutton.question{\r\n\t\tcolor: unset;\r\n\t\tbackground-color: unset;\r\n\t}\r\n\t\r\n\tbutton.question::after{\r\n\t\tcontent: \"<\";\r\n\t\twidth: 2.2rem;\r\n\t\theight: 2.2rem;\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: center;\r\n\t\talign-items: center;\r\n\t\tborder-radius: 50%;\r\n\t\tcolor: #FFF;\r\n\t\tflex-shrink: 0;\r\n\t\tfloat: right;\r\n\t\ttransition: 0.4s;\r\n\t\topacity: 0.4;\r\n\t\tposition: relative;\r\n\t\ttransform: rotate(-90deg);\r\n\t\tbackground-color: #9c171e;\r\n\t\tfont-family: monospace;\r\n\t}\r\n\r\n\t.answer {\r\n\t  padding: 0 18px;\r\n\t  max-height: 0;\r\n\t  overflow: hidden;\r\n\t  background-color: white;\r\n\t  border-radius: 0 0 6px 6px;\r\n\t  transition: max-height 0.4s ease, opacity 0.4s ease;\r\n\t  opacity: 0;\r\n\t}\r\n\r\n\t.answer p{\r\n\t\tfont-size: 16px;\r\n\t\tfont-weight: 400;\r\n\t\tline-height: 28px;\r\n\t\ttext-align: left;\r\n\t\ttext-transform: none;\r\n\t\tcolor: #494949;\r\n\t}\r\n\t\r\n\t.accordion-wrapper.active{\r\n\t\tbox-shadow: 0px 0px 20px 0px #4034AB38;\r\n\t}\r\n\t\r\n\t.header-faq.active .accordion-icon .vLine{\r\n\t\ttransform: translateX(-50%) rotate(0deg);\r\n\t}\r\n\r\n\t.header-faq.active + .answer {\r\n\t  opacity: 1;\r\n\t}\r\n\t\r\n\t.header-faq.active button.question::after{\r\n\t\ttransform: rotate(90deg);\r\n\t\topacity: 1;\r\n\t}\r\n\t\r\n\t.header-faq:hover button.question::after{\r\n\t\topacity: 1;\r\n\t}\r\n\t\r\n\t.faq-h3-addition {\r\n\t\tmargin: 0 !important;\r\n\t\tpadding-right: 15px;\r\n\t\tmin-width: 0;\r\n\t}\r\n<\/style>\r\n\r\n    <div class=\"accordion-wrapper\">\r\n        <div class=\"header-faq\">\r\n            <button class=\"question\">What is the basic journal entry for deferred revenue?<\/button>\r\n        <\/div>\r\n        <div class=\"answer\">\r\n            <p>The initial entry is a debit to the Cash account and a credit to the Deferred Revenue account (a liability). When the service is delivered, you debit Deferred Revenue and credit Sales Revenue.<\/p>\r\n        <\/div>\r\n    <\/div>\r\n    <div class=\"accordion-wrapper\">\r\n        <div class=\"header-faq\">\r\n            <button class=\"question\">Is deferred revenue an asset or a liability?<\/button>\r\n        <\/div>\r\n        <div class=\"answer\">\r\n            <p>Deferred revenue is classified as a liability on the balance sheet because it represents an obligation to provide goods or services to a customer in the future.<\/p>\r\n        <\/div>\r\n    <\/div>\r\n    <div class=\"accordion-wrapper\">\r\n        <div class=\"header-faq\">\r\n            <button class=\"question\">How does deferred revenue affect the income statement?<\/button>\r\n        <\/div>\r\n        <div class=\"answer\">\r\n            <p>Initially, deferred revenue does not affect the income statement. It is only recognized as revenue on the income statement gradually as the performance obligations are satisfied over time.<\/p>\r\n        <\/div>\r\n    <\/div>\r\n    <div class=\"accordion-wrapper\">\r\n        <div class=\"header-faq\">\r\n            <button class=\"question\">What happens to deferred revenue if a contract is cancelled?<\/button>\r\n        <\/div>\r\n        <div class=\"answer\">\r\n            <p>If a contract is cancelled and the service is not delivered, the remaining deferred revenue usually must be refunded to the customer. The entry would be a debit to Deferred Revenue and a credit to Cash.<\/p>\r\n        <\/div>\r\n    <\/div>\r\n    <div class=\"accordion-wrapper\">\r\n        <div class=\"header-faq\">\r\n            <button class=\"question\">Why is deferred revenue important for SaaS companies?<\/button>\r\n        <\/div>\r\n        <div class=\"answer\">\r\n            <p>For SaaS companies, payments are often collected upfront for annual subscriptions. Correctly recording deferred revenue ensures that income is recognized smoothly over the subscription period, providing a true picture of monthly performance.<\/p>\r\n        <\/div>\r\n    <\/div>\r\n\r\n<script>\r\n    function toggleAccordion() {\r\n        var acc = document.getElementsByClassName(\"header-faq\");\r\n        for (var i = 0; i < acc.length; i++) {\r\n            acc[i].addEventListener(\"click\", function() {\r\n                for (var j = 0; j < acc.length; j++) {\r\n                    if (acc[j] !== this && acc[j].classList.contains(\"active\")) {\r\n                        acc[j].classList.remove(\"active\");\r\n                        acc[j].closest('.accordion-wrapper').classList.remove('active');\r\n                        var panel = acc[j].nextElementSibling;\r\n                        panel.style.maxHeight = null;\r\n                    }\r\n                }\r\n\r\n                this.classList.toggle(\"active\");\r\n                var accordionWrapper = this.closest('.accordion-wrapper');\r\n                var panel = this.nextElementSibling;\r\n                if (this.classList.contains(\"active\")) {\r\n                    panel.style.maxHeight = panel.scrollHeight + \"px\";\r\n                    accordionWrapper.classList.add('active');\r\n                } else {\r\n                    panel.style.maxHeight = null;\r\n                    accordionWrapper.classList.remove('active');\r\n                }\r\n            });\r\n        }\r\n    }\r\n\r\n    document.addEventListener('DOMContentLoaded', toggleAccordion);\r\n<\/script>\r\n\r\n<!-- <script>\r\n    document.addEventListener('DOMContentLoaded', function() {\r\n        document.querySelectorAll('.header-faq .question').forEach(btn => {\r\n            const text = btn.textContent.trim();\r\n            const h3 = document.createElement('h3');\r\n            h3.textContent = text;\r\n            h3.className = \"faq-h3-addition\";\r\n            btn.textContent = '';\r\n            btn.appendChild(h3);\r\n        });\r\n    });\r\n<\/script> -->\n","protected":false},"excerpt":{"rendered":"<p>Deferred revenue is money you&#8217;ve received but haven&#8217;t earned yet. Customer pays upfront \u2192 you owe them a service \u2192 it&#8217;s a liability, not income. Mastering the deferred revenue journal entry is not merely a bookkeeping exercise; it is a fundamental requirement for compliance with global accounting standards such as ASC 606 and IFRS 15. [&hellip;]<\/p>\n","protected":false},"author":199,"featured_media":79327,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[153],"tags":[],"class_list":{"0":"post-79319","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-accounting"},"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>Deferred Revenue Journal Entry 101 - BusinessTech<\/title>\n<meta name=\"description\" content=\"Deferred revenue is money you&#039;ve received but haven&#039;t earned yet. Customer pays upfront \u2192 you owe them a service \u2192 it&#039;s a liability, not income. Mastering\" \/>\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\/blog\/deferred-revenue-journal-entry\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Deferred Revenue Journal Entry 101\" \/>\n<meta property=\"og:description\" content=\"Deferred revenue is money you&#039;ve received but haven&#039;t earned yet. Customer pays upfront \u2192 you owe them a service \u2192 it&#039;s a liability, not income. Mastering\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/\" \/>\n<meta property=\"og:site_name\" content=\"BusinessTech\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/web.facebook.com\/hashmicro\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-05T07:38:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-06T09:42:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/Banner-Embun-3.png\" \/>\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\/png\" \/>\n<meta name=\"author\" content=\"Lucas\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@hashmicro\" \/>\n<meta name=\"twitter:site\" content=\"@hashmicro\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lucas\" \/>\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\":\"Article\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/\"},\"author\":{\"name\":\"Lucas\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#\/schema\/person\/1d507d1ae58f14604279ad39f6076838\"},\"headline\":\"Deferred Revenue Journal Entry 101\",\"datePublished\":\"2026-04-05T07:38:04+00:00\",\"dateModified\":\"2026-04-06T09:42:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/\"},\"wordCount\":2695,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/Banner-Embun-3.png\",\"articleSection\":[\"Accounting\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/\",\"url\":\"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/\",\"name\":\"Deferred Revenue Journal Entry 101 - BusinessTech\",\"isPartOf\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/Banner-Embun-3.png\",\"datePublished\":\"2026-04-05T07:38:04+00:00\",\"dateModified\":\"2026-04-06T09:42:46+00:00\",\"description\":\"Deferred revenue is money you've received but haven't earned yet. Customer pays upfront \u2192 you owe them a service \u2192 it's a liability, not income. Mastering\",\"breadcrumb\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/#primaryimage\",\"url\":\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/Banner-Embun-3.png\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/Banner-Embun-3.png\",\"width\":1200,\"height\":675,\"caption\":\"Deferred Revenue Journal Entry\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.hashmicro.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Deferred Revenue Journal Entry 101\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#website\",\"url\":\"https:\/\/www.hashmicro.com\/blog\/\",\"name\":\"BusinessTech\",\"description\":\"Business Management Blog\",\"publisher\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.hashmicro.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#organization\",\"name\":\"HashMicro\",\"url\":\"https:\/\/www.hashmicro.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2016\/02\/bt_logo-1.png\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2016\/02\/bt_logo-1.png\",\"width\":334,\"height\":51,\"caption\":\"HashMicro\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/web.facebook.com\/hashmicro\/\",\"https:\/\/x.com\/hashmicro\",\"https:\/\/www.linkedin.com\/company\/hashmicro\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#\/schema\/person\/1d507d1ae58f14604279ad39f6076838\",\"name\":\"Lucas\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/01\/cropped-expertise-blog-2-96x96.png\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/01\/cropped-expertise-blog-2-96x96.png\",\"caption\":\"Lucas\"},\"description\":\"Lucas Yeo creates in-depth articles on accounting topics tailored to the challenges and questions faced by finance professionals. His articles are SEO-friendly and designed to attract readers seeking accounting solutions.\",\"url\":\"https:\/\/www.hashmicro.com\/blog\/author\/lucas-yeo\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Deferred Revenue Journal Entry 101 - BusinessTech","description":"Deferred revenue is money you've received but haven't earned yet. Customer pays upfront \u2192 you owe them a service \u2192 it's a liability, not income. Mastering","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\/blog\/deferred-revenue-journal-entry\/","og_locale":"en_US","og_type":"article","og_title":"Deferred Revenue Journal Entry 101","og_description":"Deferred revenue is money you've received but haven't earned yet. Customer pays upfront \u2192 you owe them a service \u2192 it's a liability, not income. Mastering","og_url":"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/","og_site_name":"BusinessTech","article_publisher":"https:\/\/web.facebook.com\/hashmicro\/","article_published_time":"2026-04-05T07:38:04+00:00","article_modified_time":"2026-04-06T09:42:46+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/Banner-Embun-3.png","type":"image\/png"}],"author":"Lucas","twitter_card":"summary_large_image","twitter_creator":"@hashmicro","twitter_site":"@hashmicro","twitter_misc":{"Written by":"Lucas","Est. reading time":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/#article","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/"},"author":{"name":"Lucas","@id":"https:\/\/www.hashmicro.com\/blog\/#\/schema\/person\/1d507d1ae58f14604279ad39f6076838"},"headline":"Deferred Revenue Journal Entry 101","datePublished":"2026-04-05T07:38:04+00:00","dateModified":"2026-04-06T09:42:46+00:00","mainEntityOfPage":{"@id":"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/"},"wordCount":2695,"commentCount":0,"publisher":{"@id":"https:\/\/www.hashmicro.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/Banner-Embun-3.png","articleSection":["Accounting"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/","url":"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/","name":"Deferred Revenue Journal Entry 101 - BusinessTech","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/#primaryimage"},"image":{"@id":"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/Banner-Embun-3.png","datePublished":"2026-04-05T07:38:04+00:00","dateModified":"2026-04-06T09:42:46+00:00","description":"Deferred revenue is money you've received but haven't earned yet. Customer pays upfront \u2192 you owe them a service \u2192 it's a liability, not income. Mastering","breadcrumb":{"@id":"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/#primaryimage","url":"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/Banner-Embun-3.png","contentUrl":"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/02\/Banner-Embun-3.png","width":1200,"height":675,"caption":"Deferred Revenue Journal Entry"},{"@type":"BreadcrumbList","@id":"https:\/\/www.hashmicro.com\/blog\/deferred-revenue-journal-entry\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.hashmicro.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Deferred Revenue Journal Entry 101"}]},{"@type":"WebSite","@id":"https:\/\/www.hashmicro.com\/blog\/#website","url":"https:\/\/www.hashmicro.com\/blog\/","name":"BusinessTech","description":"Business Management Blog","publisher":{"@id":"https:\/\/www.hashmicro.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.hashmicro.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.hashmicro.com\/blog\/#organization","name":"HashMicro","url":"https:\/\/www.hashmicro.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hashmicro.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2016\/02\/bt_logo-1.png","contentUrl":"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2016\/02\/bt_logo-1.png","width":334,"height":51,"caption":"HashMicro"},"image":{"@id":"https:\/\/www.hashmicro.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/web.facebook.com\/hashmicro\/","https:\/\/x.com\/hashmicro","https:\/\/www.linkedin.com\/company\/hashmicro"]},{"@type":"Person","@id":"https:\/\/www.hashmicro.com\/blog\/#\/schema\/person\/1d507d1ae58f14604279ad39f6076838","name":"Lucas","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hashmicro.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/01\/cropped-expertise-blog-2-96x96.png","contentUrl":"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/01\/cropped-expertise-blog-2-96x96.png","caption":"Lucas"},"description":"Lucas Yeo creates in-depth articles on accounting topics tailored to the challenges and questions faced by finance professionals. His articles are SEO-friendly and designed to attract readers seeking accounting solutions.","url":"https:\/\/www.hashmicro.com\/blog\/author\/lucas-yeo\/"}]}},"order_j":"","_links":{"self":[{"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/posts\/79319","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/comments?post=79319"}],"version-history":[{"count":2,"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/posts\/79319\/revisions"}],"predecessor-version":[{"id":79326,"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/posts\/79319\/revisions\/79326"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/media\/79327"}],"wp:attachment":[{"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/media?parent=79319"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/categories?post=79319"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/tags?post=79319"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}