{"id":2967,"date":"2026-04-21T17:02:40","date_gmt":"2026-04-21T07:02:40","guid":{"rendered":"https:\/\/www.hashmicro.com\/au\/blog\/?p=2967"},"modified":"2026-06-02T16:30:58","modified_gmt":"2026-06-02T06:30:58","slug":"single-touch-payroll","status":"publish","type":"post","link":"https:\/\/www.hashmicro.com\/au\/blog\/single-touch-payroll\/","title":{"rendered":"Single Touch Payroll Australia: How Businesses Stay Compliant"},"content":{"rendered":"<p>Single Touch Payroll (STP) is the framework that requires Australian employers to transmit wages, PAYG withholding, and superannuation data to the ATO through the Standard Business <a href=\"https:\/\/www.hashmicro.com\/au\/blog\/best-payroll-software\/\">single touch payroll tools<\/a>.<\/p>\n<p>STP works by embedding statutory reporting inside the payroll process. Therefore, each pay run generates a pay event file containing year-to-date figures, which the software submits to the ATO via the SBR gateway.<\/p>\n<p>This guide covers the definition of payroll, why Australian businesses need it, the best practices, and everything you need to know for your business to fully comply.<\/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-is-single-touch-payroll-stp\">STP is<\/a> a real-time ATO reporting framework that sends wages, PAYG withholding, and superannuation data from payroll software to the ATO.<\/p><\/div><div class=\"item\">    <div class=\"circle\"><\/div>    <p><a href=\"#how-to-set-up-and-register-for-stp\">Implementing STP involves<\/a> choosing ATO-certified payroll software, linking it through Access Manager, configuring employee master data, and running a test pay event.<\/p><\/div><div class=\"item\">    <div class=\"circle\"><\/div>    <p><a href=\"#stp-compliance-checklist-for-2026\">The 2026 Compliance Checklist<\/a> covers verifying software version, auditing employee records, confirming pay item mapping, resolving ATO warnings, and diarising the 14 July finalisation deadline.<\/p><\/div><div class=\"item\">    <div class=\"circle\"><\/div>    <p><a href=\"#best-practices-for-managing-stp-in-your-business\">Best practices<\/a> include keeping records accurate, reporting on or before each pay day, automating submissions through payroll or ERP software, and reviewing EOFY finalisation early.<\/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<!-- <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\r\n    <div class=\"adjustable-banner-wrap\">\r\n        <a href=\"https:\/\/www.hashmicro.com\/au\/human-resource-management?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\/hr_desktop_1-scaled.webp\"\r\n                 data-desktop-src=\"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/03\/hr_desktop_1-scaled.webp\"\r\n                 data-mobile-src=\"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/03\/hr_mobile_1.webp\"\r\n                 alt=\"HRGeneral1\"\r\n                 class=\"responsive-image-banner\">\r\n\r\n            \r\n            <div class=\"adjustable-banner-overlay\" style=\"width: 55%\">\r\n                <p class=\"adjustable-banner-text\">Looking for <strong>ATO-certified payroll software<\/strong> that automates STP for your team? <strong>Schedule a consultation<\/strong>.<\/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>\n<h2><strong>What Is Single Touch Payroll (STP)?<\/strong><\/h2>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-2995\" src=\"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/moneymoney.webp\" alt=\"what-is-single-touch-payroll-(STP)?\" width=\"800\" height=\"400\" srcset=\"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/moneymoney.webp 800w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/moneymoney-300x150.webp 300w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/moneymoney-768x384.webp 768w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/moneymoney-150x75.webp 150w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/moneymoney-696x348.webp 696w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/p>\n<p>Single Touch Payroll is a digital reporting mandate introduced by the ATO on 1 July 2018 for large employers, extended to all employers by 1 July 2019, and expanded again through Phase 2 from 1 January 2022.<\/p>\n<p>Before STP, employers lodged PAYG withholding monthly or quarterly and issued Payment Summaries (formerly group certificates) at year-end, alongside a Payment Summary Annual Report (PSAR) to the ATO.<\/p>\n<p>The current framework replaces that batch process with real-time lodgement. Every pay run now triggers an automatic transmission to the ATO on or before the payment date, giving live visibility of tax and super.<\/p>\n<p>The system serves three objectives. First, it integrates statutory reporting into normal business processes. Second, it gives employees live visibility of earnings through their myGov account.<\/p>\n<p>Third, it feeds real-time data to Services Australia and the Child Support Agency, so welfare entitlements and child support deductions are calculated against current income rather than historical estimates.<\/p>\n<p>STP relies on Application Programming Interfaces (APIs) embedded in compliant payroll software. When a pay run is finalised, the software compiles an XML or JSON payload and transmits it via the SBR network.<\/p>\n<p>The ATO validates the payload against the employer&#8217;s ABN and each Tax File Number, then updates employee records. Successful lodgements usually appear in myGov within minutes.<\/p>\n<h2><strong>Why Single Touch Payroll Is Important for Australian Businesses<\/strong><\/h2>\n<p>STP reshapes payroll compliance in Australia by reducing manual reporting, improves accuracy, and gives the ATO a live view of employer obligations, benefiting businesses, employees, and agencies alike.<\/p>\n<p>Single Touch Payroll also strengthens <a href=\"https:\/\/www.hashmicro.com\/au\/blog\/hr-compliance\/\">regulatory compliance for HR<\/a> by sending salary, PAYG, and super data to the ATO every pay cycle, surfacing errors early and keeping Fair Work records accurate.<\/p>\n<style>\r\n    #custom-quote {\r\n        background-color: #f0f0f0;\r\n        padding: 20px;\r\n        border-radius: 12px;\r\n        margin: 20px;\r\n        display: flex;\r\n        flex-direction: column;\r\n    }\r\n\r\n    #custom-quote .quote-body {\r\n        display: flex;\r\n        flex-direction: row;\r\n        align-items: flex-start;\r\n        gap: 15px;\r\n        font-size: 16px;\r\n        line-height: 1.5;\r\n        font-style: italic;\r\n    }\r\n\r\n    #custom-quote .quote-icon {\r\n        width: 40px;\r\n        height: 40px;\r\n        flex-shrink: 0;\r\n    }\r\n\r\n    #custom-quote .quote-author-wrapper {\r\n        margin-top: 15px;\r\n        align-self: flex-start;\r\n        margin-left: 55px; \r\n\t\tmargin-bottom: 0px;\r\n    }\r\n\r\n    #custom-quote em {\r\n        font-family: 'Roboto Serif', serif !important;\r\n        font-size: 12px;\r\n        font-weight: bold;\r\n        font-style: normal;\r\n    }\r\n\r\n    @media screen and (max-width: 768px) {\r\n        #custom-quote {\r\n            margin: 15px 0;\r\n            padding: 15px;\r\n        }\r\n        \r\n        #custom-quote .quote-body {\r\n            gap: 12px;\r\n        }\r\n\r\n        #custom-quote .quote-author-wrapper {\r\n            margin-left: 52px;\r\n        }\r\n    }\r\n\r\n    @media screen and (max-width: 480px) {\r\n        #custom-quote {\r\n            margin: 10px 0;\r\n            padding: 12px;\r\n        }\r\n\r\n        #custom-quote .quote-body {\r\n            font-size: 14px;\r\n            gap: 10px;\r\n        }\r\n\r\n        #custom-quote .quote-icon {\r\n            width: 32px;\r\n            height: 32px;\r\n        }\r\n\r\n        #custom-quote .quote-author-wrapper {\r\n            margin-top: 10px;\r\n            margin-left: 42px;\r\n        }\r\n    }\r\n<\/style>\r\n\r\n<div id=\"custom-quote\">\r\n    <div class=\"quote-body\">\r\n        <img decoding=\"async\" src=\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2025\/12\/quote.webp\" alt=\"Quote Icon\" class=\"quote-icon\">\r\n        <div>\r\n            STP fundamentally changed how Australian businesses manage payroll compliance. Those who adopted it early now have real-time visibility, fewer year-end surprises, and a cleaner relationship with the ATO.        <\/div>\r\n    <\/div>\r\n    <p class=\"quote-author-wrapper\">\r\n        <em>Claire Donnelly, Senior HR Manager<\/em>\r\n    <\/p>\r\n<\/div>\n<h3>1. Streamlined payroll reporting to the ATO<\/h3>\n<p>Reporting happens automatically through the payroll software at each pay event. Therefore, employers stop duplicating effort across separate BAS statements, PAYG reports, and payment summaries.<\/p>\n<p>The software produces a validated file in a single action. For example, a weekly pay run for 50 employees can be lodged with the ATO in under two minutes, without any spreadsheet manipulation.<\/p>\n<h3>2. Greater transparency for employees<\/h3>\n<p>Employees can view year-to-date wages, tax, and super in their myGov account at any time during the year. As a result, they spot payroll errors early and raise them before the figures compound.<\/p>\n<p>This visibility also supports loan, rental, and Centrelink applications. For example, banks can verify income directly through the Income Statement rather than requiring historical payslips from the employer.<\/p>\n<h3>3. Reduced end-of-year reporting burden<\/h3>\n<p>STP removes the need to produce payment summaries or an annual PAYG report. Once the EOFY finalisation declaration is submitted by 14 July, employee Income Statements are marked &#8220;tax ready&#8221; in myGov.<\/p>\n<p>Therefore, payroll teams reclaim time previously spent on year-end reconciliation. A mid-sized employer saves roughly 20 hours of admin each July by using finalisation rather than manual summaries.<\/p>\n<h2><strong>Who Must Use Single Touch Payroll?<\/strong><\/h2>\n<p>According to the\u00a0<a href=\"https:\/\/www.abs.gov.au\/\" target=\"_blank\" rel=\"noopener\">Australian Bureau of Statistics<\/a>, more than 2.6 million actively trading businesses operate in Australia, and every employer among them falls within STP reporting rules.<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">STP applies to every legal structure that employs staff in Australia, including companies, sole traders, partnerships, trusts, and not-for-profits.<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">All worker types are covered: full-time, part-time, casual, directors, closely held payees, working holiday makers, and termination or lump sum recipients.<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">Micro employers with one to four staff follow the same rules. Most now lodge on or before each payday using low-cost STP software.<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">Full exemptions are rare, limited to employers in remote areas without reliable internet. Short-term deferrals are available for disruptions like natural disasters or outages.<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">Entities with a WPN rather than an ABN, such as households employing a nanny, operate under transitional rules.<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">Foreign employers with Australian-based staff must register for an ABN and use compliant software to lodge pay events correctly.<\/p>\n<p>The table below summarises how STP reporting rules apply across different employer types.<\/p>\n<div class=\"apollo-table-wrapper\">\n<table class=\"apollo-table\">\n<thead>\n<tr style=\"background-color: #8b0000; color: #ffffff;\">\n<th>Employer Type<\/th>\n<th>Definition<\/th>\n<th>Reporting Frequency<\/th>\n<th>Concessions Available<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Micro Employer<\/strong><\/td>\n<td>1\u20134 employees<\/td>\n<td>On or before each payday<\/td>\n<td>Quarterly reporting available in specific circumstances via registered tax or BAS agent<\/td>\n<\/tr>\n<tr>\n<td><strong>Small Employer<\/strong><\/td>\n<td>5\u201319 employees<\/td>\n<td>On or before each payday<\/td>\n<td>No concessions; standard STP rules apply<\/td>\n<\/tr>\n<tr>\n<td><strong>Large Employer<\/strong><\/td>\n<td>20 or more employees<\/td>\n<td>On or before each payday<\/td>\n<td>No concessions; standard STP rules apply<\/td>\n<\/tr>\n<tr>\n<td><strong>Closely Held Payees<\/strong><\/td>\n<td>Family members, directors, or trust beneficiaries directly related to the paying entity<\/td>\n<td>On or before each payday or quarterly<\/td>\n<td>Quarterly reporting permitted; later EOFY finalisation deadline of 30 September<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h2><strong>Key Components of STP Reporting<\/strong><\/h2>\n<p>The ATO expects a detailed breakdown of pay, tax, super, and employment information at every pay event, so accuracy across each component protects both the employer and the employee.<\/p>\n<h3>1. Wages, PAYG withholding, and superannuation data<\/h3>\n<p>Employers report gross wages, allowances, bonuses, commissions, and deductions alongside PAYG withholding and the Superannuation Guarantee liability calculated on Ordinary Time Earnings (OTE).<\/p>\n<p>Therefore, payroll calculations must reconcile cleanly against each STP submission. For example, a miscoded allowance can inflate OTE, overstate super liability, and distort an employee&#8217;s tax position.<\/p>\n<h3>2. Employment details and income types<\/h3>\n<p>STP Phase 2 requires granular employment data, such as income type (salary and wages, closely held, working holiday maker, labour hire), employment basis, and tax treatment code.<\/p>\n<p>The tax treatment code is a six-character alphanumeric field that encodes tax scale, residency, study loan status, and Medicare Levy variations. Then the ATO applies the correct withholding rules automatically.<\/p>\n<p>Cessation data is also reported when an employee leaves. The cessation reason code (voluntary resignation, redundancy, dismissal, contract cessation) replaces the old separation certificate used by Centrelink.<\/p>\n<h3>3. EOFY finalisation and income statements<\/h3>\n<p>At year-end, employers lodge a Finalisation Declaration confirming that all reported year-to-date figures are complete and accurate for each employee.<\/p>\n<p>Once lodged, each employee&#8217;s Income Statement in myGov changes from &#8220;year-to-date&#8221; to &#8220;tax ready&#8221;. Individuals or their tax agents can then lodge annual returns without waiting for a payment summary.<\/p>\n<p>The finalisation deadline is 14 July for most employers. For example, closely held payees have a later deadline (typically 30 September) to allow for end-of-year adjustments within family businesses.<\/p>\n<h3>4. Exemptions and deferral options<\/h3>\n<p>Some employers qualify for deferrals when software is not compliant or when disruptions prevent reporting. For example, a ransomware attack disabling a payroll system supports a short-term deferral request.<\/p>\n<p>Deferrals are requested through the ATO&#8217;s online services for business or via a registered tax or BAS agent. Therefore, the request must specify the affected pay cycles and the expected resolution date.<\/p>\n<h2><strong>What Changed with Single Touch Payroll?<\/strong><\/h2>\n<p>STP has evolved since its 2018 launch. The second iteration, effective from 1 January 2022, expanded the reporting scope and replaced multiple separate obligations with one enriched data feed to the ATO.<\/p>\n<h3>1. How Phase 1 and Phase 2 differ in reporting scope<\/h3>\n<p>The original rollout captured top-level financial data: gross wages, PAYG withheld, and super liability. This satisfied the ATO but lacked the detail needed by other agencies such as Services Australia.<\/p>\n<p>The updated framework disaggregates gross pay into specific categories. Therefore, a single &#8220;gross&#8221; figure now splits into ordinary earnings, overtime, allowances, bonuses, paid leave types, and directors&#8217; fees.<\/p>\n<p>The updated framework also embeds the TFN declaration inside the pay event. For example, separate paper or digital TFN declarations are no longer required, reducing onboarding paperwork significantly.<\/p>\n<p>Services Australia, the Child Support Agency, and Home Affairs now receive data directly through STP. As a result, employers issue fewer separation certificates and supporting letters for employee benefit claims.<\/p>\n<table style=\"width: 100%; border-collapse: collapse; border: 1px solid #ddd;\">\n<thead>\n<tr style=\"background-color: #c0392b; color: #ffffff;\">\n<th style=\"padding: 12px; text-align: left; border: 1px solid #ddd;\">Reporting Scope<\/th>\n<th style=\"padding: 12px; text-align: left; border: 1px solid #ddd;\">STP Phase 1<\/th>\n<th style=\"padding: 12px; text-align: left; border: 1px solid #ddd;\">STP Phase 2<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"padding: 12px; border: 1px solid #ddd;\"><strong><br \/>\nFinancial data captured<br \/>\n<\/strong><\/td>\n<td style=\"padding: 12px; border: 1px solid #ddd;\">Top-level totals only: gross wages, PAYG withheld, and super liability.<\/td>\n<td style=\"padding: 12px; border: 1px solid #ddd;\">Disaggregated data feeding both ATO and partner agencies.<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 12px; border: 1px solid #ddd;\"><strong><br \/>\nGross pay breakdown<br \/>\n<\/strong><\/td>\n<td style=\"padding: 12px; border: 1px solid #ddd;\">Reported as a single combined gross figure.<\/td>\n<td style=\"padding: 12px; border: 1px solid #ddd;\">Split into ordinary earnings, overtime, allowances, bonuses, paid leave types, and directors&#8217; fees.<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 12px; border: 1px solid #ddd;\"><strong><br \/>\nTFN declarations<br \/>\n<\/strong><\/td>\n<td style=\"padding: 12px; border: 1px solid #ddd;\">Lodged separately via paper or digital forms.<\/td>\n<td style=\"padding: 12px; border: 1px solid #ddd;\">Embedded directly inside each pay event, removing duplicate paperwork.<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 12px; border: 1px solid #ddd;\"><strong><br \/>\nAgency data sharing<br \/>\n<\/strong><\/td>\n<td style=\"padding: 12px; border: 1px solid #ddd;\">Other agencies relied on employer-issued letters and certificates.<\/td>\n<td style=\"padding: 12px; border: 1px solid #ddd;\">Services Australia, Child Support Agency, and Home Affairs receive data directly.<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 12px; border: 1px solid #ddd;\"><strong><br \/>\nEmployer admin burden<br \/>\n<\/strong><\/td>\n<td style=\"padding: 12px; border: 1px solid #ddd;\">Frequent issuing of separation certificates and supporting letters for employee claims.<\/td>\n<td style=\"padding: 12px; border: 1px solid #ddd;\">Reduced paperwork, as agencies source data directly from STP submissions.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h3>2. STP Phase 2 income and reporting categories<\/h3>\n<p>Income splits into six primary categories: salary and wages, closely held payees, working holiday makers, seasonal workers, labour hire, and voluntary agreements. Each record reflects the nature of the engagement.<\/p>\n<p>Allowances must be itemised by type. For example, tool, task, qualification, travel, meals, and laundry allowances each require their own reporting category rather than being lumped into gross pay.<\/p>\n<p>Paid leave is separated, too. Categories include annual leave (O), personal or carer&#8217;s leave (S), long service leave (L), ancillary and defence leave (A), workers&#8217; compensation (W), and paid parental leave (P).<\/p>\n<p>Lump sum and termination components carry distinct codes. Lump Sum A covers unused leave on termination, Lump Sum B legacy LSL, Lump Sum D tax-free redundancy, and Lump Sum E backpay from prior years.<\/p>\n<p>Salary sacrifice arrangements must also be split. Therefore, super contributions (type S) and other employee benefits such as novated leases or devices (type O) are reported separately rather than bundled.<\/p>\n<h2><strong>How STP Reporting Works for Your Business<\/strong><\/h2>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">STP operates on a year-to-date (YTD) basis. Each pay event sends cumulative YTD totals, not just the current pay period, so every submission effectively overwrites the previous one with updated figures.<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">This YTD approach is self-correcting. If an underpayment of $50 is discovered in week 2, the week 2 submission contains the corrected YTD total, and no amendment to week 1 is required.<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">A pay run moves through five technical stages from <a href=\"https:\/\/www.hashmicro.com\/au\/blog\/payroll-process\/\">automated payroll processing<\/a> to ATO confirmation.<\/p>\n<ol class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal flex flex-col gap-1 pl-8 mb-3\">\n<li class=\"whitespace-normal break-words pl-2\"><strong>Calculate and finalise the pay run.<\/strong> The administrator calculates timesheets, applies leave, processes deductions, and finalises the pay run in compliant software.<\/li>\n<li class=\"whitespace-normal break-words pl-2\"><strong>Map pay data to ATO categories.<\/strong> The software extracts YTD figures and maps each item to its corresponding ATO reporting category.<\/li>\n<li class=\"whitespace-normal break-words pl-2\"><strong>Sign the digital declaration.<\/strong> The user signs a digital declaration confirming that the data is true and correct.<\/li>\n<li class=\"whitespace-normal break-words pl-2\"><strong>Transmit the payload to the ATO.<\/strong> The software sends the encrypted payload to the ATO through the SBR gateway.<\/li>\n<li class=\"whitespace-normal break-words pl-2\"><strong>Review the ATO response.<\/strong> The ATO responds with a status message: success, partial success (some employees rejected for invalid TFNs or formatting), or full rejection (usually caused by an invalid ABN or disconnected Software ID).<\/li>\n<\/ol>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">Employers also handle corrections through Update Events. If a post-payment adjustment is needed, an Update Event pushes revised YTD values to the ATO without reissuing the original pay event.<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">Reports must be lodged on or before each payday. Payroll accuracy at the point of pay matters more than year-end reconciliation, because late or missing events trigger failure-to-lodge penalties.<\/p>\n<h2><strong>What Information Do You Need to Report?<\/strong><\/h2>\n<p>Every pay event combines three data layers: employer data, employee demographic data, and year-to-date financial data. Each layer must be validated before submission to avoid rejection or compliance breaches.<\/p>\n<p>Employer data includes the ABN, branch number (usually 001, or another if the business operates multiple registered branches), and the registered business name for ATO account matching.<\/p>\n<p>Employee demographic data covers the Tax File Number, full legal name, date of birth, and residential address. For example, missing a TFN triggers the use of exemption codes such as 000000000 or 111111111.<\/p>\n<p>Employment basis must also be declared: full-time, part-time, casual, labour hire, or non-employee, such as a voluntary-withholding contractor. Master file accuracy, therefore, drives correct STP lodgement.<\/p>\n<p>The tax treatment code captures TFN declaration outcomes. It records whether the employee claims the tax-free threshold, holds a HELP, VSL, or SSL study loan, or qualifies for a Medicare Levy variation.<\/p>\n<p>Cessation data reports the termination date and a standardised reason code. Codes cover voluntary resignation, redundancy, dismissal, contract cessation, and transfer, replacing legacy separation certificates.<\/p>\n<p>Financial data reports gross earnings disaggregated into Phase 2 categories, along with PAYG withholding, Superannuation Guarantee liability, and <a href=\"https:\/\/www.ato.gov.au\/businesses-and-organisations\/super-for-employers\/setting-up-super-for-your-business\/identify-reportable-employer-super-contributions\" target=\"_blank\" rel=\"noopener\">Reportable Employer Superannuation Contributions (RESC)<\/a>.<\/p>\n<p>Allowances and paid leave amounts are itemised, as outlined in the Key Components section above. Then deductions such as child support, union fees, and workplace giving appear with their own identifiers.<\/p>\n<p>Child support deductions warrant specific attention. Notices issued under section 45 of the Child Support (Registration and Collection) Act 1988 are reported directly through STP to the Child Support Agency.<\/p>\n<p>SG liability represents the amount owed, not the amount remitted. Therefore, the figure lodged through STP and the superannuation actually paid via the clearing house must reconcile before each quarterly deadline.<\/p>\n<h2><strong>How to Set Up and Register for STP<\/strong><\/h2>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-2988\" src=\"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/unnamed-18-scaled.webp\" alt=\"how-to-set-up-and-register-for-stp\" width=\"2560\" height=\"1429\" srcset=\"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/unnamed-18-scaled.webp 2560w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/unnamed-18-300x167.webp 300w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/unnamed-18-1024x572.webp 1024w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/unnamed-18-768x429.webp 768w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/unnamed-18-1536x857.webp 1536w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/unnamed-18-2048x1143.webp 2048w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/unnamed-18-753x420.webp 753w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/unnamed-18-150x84.webp 150w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/unnamed-18-696x388.webp 696w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/unnamed-18-1068x596.webp 1068w, https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/unnamed-18-1920x1072.webp 1920w\" sizes=\"(max-width: 2560px) 100vw, 2560px\" \/><\/p>\n<p>STP setup requires a structured approach because errors in configuration cascade into every future pay event. A careful rollout protects the business from rejected lodgements and ATO penalties.<\/p>\n<h3>1. Choosing STP-compliant payroll software<\/h3>\n<p>The foundation of STP compliance is choosing software listed on the ATO&#8217;s Product Register. The product must be certified for Phase 2 and support the SBR protocol for data transmission.<\/p>\n<p>For micro employers, low-cost standalone apps suffice for basic STP lodgement. Several ATO-approved apps cost under $10 per month and handle fewer than four employees with minimal setup.<\/p>\n<p>Mid-sized and large employers prefer integrated payroll and HR platforms. Embedding payroll inside an ERP or HRIS allows leave, timesheets, awards, and STP to flow through a single data model.<\/p>\n<h3>2. Connecting your software to the ATO<\/h3>\n<p>After installing the software, the business must link it to the ATO through the Access Manager portal using its myGovID credentials and Relationship Authorisation Manager (RAM).<\/p>\n<p>The connection requires the unique Software ID issued by the vendor. This identifier is registered against the ABN in ATO systems, and without it, pay event lodgements fail at the SBR gateway.<\/p>\n<p>Registered agents can link a client&#8217;s software through Online Services for Agents. For example, a BAS agent uses their agent number rather than the employer&#8217;s myGovID to authorise lodgements.<\/p>\n<h3>3. Configuring your employee details<\/h3>\n<p>Accurate master data is the single biggest determinant of STP success. Therefore, each employee record must contain a valid TFN, legal name, date of birth, residential address, and employment basis.<\/p>\n<p>The tax treatment code is derived from the employee&#8217;s TFN declaration. Claims for the tax-free threshold, HELP or VSL loans, and Medicare Levy variations all flow through the declaration into the code.<\/p>\n<p>Income type must be assigned at the employee level. For example, working holiday makers require a country code, closely held payees need the CHP flag, and labour hire staff use the LAH income type.<\/p>\n<p>Pay items, allowances, leave categories, and deductions must all be mapped to ATO reporting categories. The software then translates each pay run into a compliant Phase 2 payload automatically.<\/p>\n<h3>4. Running your first STP pay event<\/h3>\n<p>Before the first live pay event, most employers run a test submission. Therefore, the ATO provides a validation environment that checks data structure and business rules without updating production records.<\/p>\n<p>Once test lodgement succeeds, the first production pay run can be submitted. A payroll officer processes the weekly pay, reviews the draft file inside the software, and then lodges it through the SBR connection.<\/p>\n<p>The ATO response message must be reviewed immediately. As a result, any invalid TFNs, missing fields, or structural errors can be corrected through an Update Event before the next scheduled pay run.<\/p>\n<h2><strong>How Often Do You Report Payroll?<\/strong><\/h2>\n<p>The default rule is simple: STP reporting happens on or before every payday. Therefore, weekly payrolls lodge weekly, fortnightly payrolls lodge fortnightly, and monthly payrolls lodge monthly.<\/p>\n<p>The rule applies regardless of business size. A sole trader paying one casual employee weekly lodges a pay event every week, the same as a corporation paying 5,000 employees on the same cycle.<\/p>\n<p>Out-of-cycle payments require their own event. For example, a mid-month bonus, back-pay adjustment, or termination payment outside the regular run must be lodged on or before the day funds are transferred.<\/p>\n<p>Closely held payees have flexibility. Small employers can report these payments on each payday or quarterly, provided the quarterly estimate is reasonable and reconciled at year-end.<\/p>\n<p>Quarterly reporting is also available for micro employers in specific circumstances, generally accessed through a registered tax or BAS agent. The concession requires ATO approval rather than being automatic.<\/p>\n<p>Deferrals apply when an unavoidable disruption prevents lodgement. For example, a prolonged software outage or cyber incident supports a short-term deferral, but the employer must apply and document the cause.<\/p>\n<h2><strong>How Australian Businesses Across Industries Use STP<\/strong><\/h2>\n<p>STP applies universally, but industry conditions shape how it is implemented. Casual-heavy rosters, complex allowances, and seasonal workforces each create specific configurations and reporting priorities.<\/p>\n<h3>1. Retail and hospitality<\/h3>\n<p>Retail and hospitality employers run high-turnover rosters of casuals, part-timers, and penalty rates. STP configurations must handle rapidly changing headcount without delaying pay event lodgement.<\/p>\n<p>Over time, public holiday and weekend loadings must be split from ordinary time earnings. Sunday penalty rates sit within ordinary earnings, while genuine overtime reports under the dedicated overtime category.<\/p>\n<p>Rapid onboarding creates additional risk. For example, a new casual starting mid-week without a completed TFN declaration requires exemption codes, and missing that detail causes STP lodgement rejection.<\/p>\n<h3>2. Construction and trades<\/h3>\n<p>Construction payroll carries complex allowance structures dictated by enterprise agreements and awards. Therefore, tool, site, travel, meal, and inclement weather allowances must each map to a distinct STP category.<\/p>\n<p>Redundancy schemes such as Incolink produce specific reporting codes. Severance from industry funds is categorised differently from standard redundancy, affecting PAYG treatment and Lump Sum D eligibility.<\/p>\n<p>Closely held payees are common in family-run subcontracting businesses. As a result, directors drawing wages alongside non-family employees must be coded with the CHP income type to keep reporting accurately.<\/p>\n<h3>3. Healthcare and professional services<\/h3>\n<p>Healthcare employers navigate salary packaging, FBT exemptions for public and not-for-profit providers, and multi-role staff. STP configurations must handle several pay rates and allowances per employee.<\/p>\n<p>RESC and Reportable Fringe Benefits Amounts require precise reporting. For example, a nurse&#8217;s salary-packaging meal entertainment must see both figures reported through STP correctly.<\/p>\n<p>Professional services firms often engage contractors under voluntary withholding. The contractor is coded as a non-employee in payroll, with STP capturing PAYG withheld even where super is not payable.<\/p>\n<h3>4. Agriculture and seasonal workers<\/h3>\n<p>Agricultural employers deal with seasonal peaks, working holiday makers, and labour hire crews. Therefore, STP configurations must tag each worker type with the correct income category from the first pay event.<\/p>\n<p>Working holiday makers require country codes and the WHM tax scale. For example, a backpacker on a 417 visa must be registered with the ATO as a WHM employer, and PAYG withholds at standard rates.<\/p>\n<p>Seasonal Worker Programme participants have their own income type. As a result, growers using Pacific and Timor-Leste labour report these wages separately from permanent employees throughout the harvest.<\/p>\n<h2><strong>Common STP Mistakes to Avoid<\/strong><\/h2>\n<div>\n<div class=\"standard-markdown grid-cols-1 grid [&amp;_&gt;_*]:min-w-0 gap-3\">\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">Even with reliable software, manual errors and process breakdowns cause most STP compliance issues. Understanding the common pitfalls helps payroll teams build controls that prevent expensive rework at year-end.<\/p>\n<\/div>\n<\/div>\n<div>\n<div class=\"standard-markdown grid-cols-1 grid [&amp;_&gt;_*]:min-w-0 gap-3\">\n<ol class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal flex flex-col gap-1 pl-8 mb-3\">\n<li class=\"whitespace-normal break-words pl-2\"><strong>Confusing allowances with reimbursements.<\/strong> Allowances are taxable and reportable, while reimbursements of substantiated expenses are generally not. Miscoding inflates gross income and distorts tax and Centrelink outcomes.<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<div>\n<div class=\"standard-markdown grid-cols-1 grid [&amp;_&gt;_*]:min-w-0 gap-3\">\n<ol class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal flex flex-col gap-1 pl-8 mb-3\" start=\"2\">\n<li class=\"whitespace-normal break-words pl-2\"><strong>Incorrect termination payment codes.<\/strong> Lump Sum A, Lump Sum B, Lump Sum D, and Employment Termination Payments each carry distinct codes and PAYG treatments. Getting these wrong results in over- or under-withholding of tax.<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<div>\n<div class=\"standard-markdown grid-cols-1 grid [&amp;_&gt;_*]:min-w-0 gap-3\">\n<ol class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal flex flex-col gap-1 pl-8 mb-3\" start=\"3\">\n<li class=\"whitespace-normal break-words pl-2\"><strong>Missing the 14 July finalisation deadline.<\/strong> Employees cannot lodge annual returns, and the employer risks failure-to-lodge penalties issued by the ATO.<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<div>\n<div class=\"standard-markdown grid-cols-1 grid [&amp;_&gt;_*]:min-w-0 gap-3\">\n<ol class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal flex flex-col gap-1 pl-8 mb-3\" start=\"4\">\n<li class=\"whitespace-normal break-words pl-2\"><strong>Ignoring ATO response messages.<\/strong> A pay event accepted with warnings may contain invalid TFNs that compound across the year, producing a major reconciliation problem in June.<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<div>\n<div class=\"standard-markdown grid-cols-1 grid [&amp;_&gt;_*]:min-w-0 gap-3\">\n<ol class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal flex flex-col gap-1 pl-8 mb-3\" start=\"5\">\n<li class=\"whitespace-normal break-words pl-2\"><strong>Failing to lodge Update Events promptly.<\/strong> Correcting an error within 14 days is straightforward, but leaving it for months creates layered discrepancies that are difficult to unwind.<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<div>\n<div class=\"standard-markdown grid-cols-1 grid [&amp;_&gt;_*]:min-w-0 gap-3\">\n<ol class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal flex flex-col gap-1 pl-8 mb-3\" start=\"6\">\n<li class=\"whitespace-normal break-words pl-2\"><strong>Incorrect Software ID registration.<\/strong> Businesses switching payroll software must update the Software ID through Access Manager before the first pay event on the new system.<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<h2><strong>STP Compliance Checklist for 2026<\/strong><\/h2>\n<p>A proper <a href=\"https:\/\/www.hashmicro.com\/au\/blog\/payroll-management\/\">payroll compliance management<\/a> is a routine operations. The items below cover essential controls that every Australian employer should verify during the 2026 financial year.<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\">A proper payroll compliance management is a routine operation. The items below cover essential controls that every Australian employer should verify during the 2026 financial year.<\/p>\n<ol class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal flex flex-col gap-1 pl-8 mb-3\">\n<li class=\"whitespace-normal break-words pl-2\">Confirm your payroll software is listed on the ATO Product Register and is running the latest Phase 2 update. Check for 2026 version releases supporting updated reporting categories.<\/li>\n<li class=\"whitespace-normal break-words pl-2\">Audit every employee&#8217;s master record. Missing TFNs, outdated addresses, incorrect tax treatment codes, and stale employment basis flags can be corrected before the next pay event.<\/li>\n<li class=\"whitespace-normal break-words pl-2\">Verify the mapping of every pay item, allowance, leave type, and deduction to its ATO reporting category. Phase 2 compliance requires no bundled or miscategorised components anywhere in the pay model.<\/li>\n<li class=\"whitespace-normal break-words pl-2\">Review recent ATO response messages across the last 12 months. Unresolved warnings or partial failures should be rectified through Update Events to prevent year-end reconciliation problems.<\/li>\n<li class=\"whitespace-normal break-words pl-2\">Reconcile SG liability reported through STP with the super actually remitted through the clearing house. This ensures quarterly super deadlines align with STP figures.<\/li>\n<li class=\"whitespace-normal break-words pl-2\">Diarise the finalisation deadline of 14 July 2026 to ensure the EOFY finalisation declaration is lodged on time and employee Income Statements switch to &#8220;tax ready&#8221; in myGov without delay.<\/li>\n<li class=\"whitespace-normal break-words pl-2\">Test your disaster recovery protocol. Confirm that payroll can be restored and STP lodged within 24 hours of a ransomware incident or major software outage.<\/li>\n<li class=\"whitespace-normal break-words pl-2\">Confirm registered agents are linked correctly in Access Manager so your BAS agent or tax agent can lodge Update Events on your behalf without re-authentication delays.<\/li>\n<\/ol>\n<h2><strong>Best Practices for Managing STP in Your Business<\/strong><\/h2>\n<p>Consistent process discipline separates compliant employers from those scrambling at year-end. Adopting the following four practices keeps STP reporting accurate, timely, and audit-ready throughout the year.<\/p>\n<h3>1. Employee records are accurate and updated<\/h3>\n<p>Employee master data drives every STP submission. Onboarding checklists should confirm TFN declaration, residential address, employment basis, income type, and tax treatment code before the first pay run.<\/p>\n<p>Ongoing maintenance is equally important. For example, address changes, study loan status updates, and transitions from casual to permanent all require prompt master file updates to keep STP output accurate.<\/p>\n<h3>2. A Report on or before each pay day without exception<\/h3>\n<p>Late STP events attract failure-to-lodge penalties from the ATO. Therefore, build payroll workflows that treat STP lodgement as a non-negotiable part of the pay run, not a separate follow-up task.<\/p>\n<p>Build a clear escalation process for lodgement issues. If the SBR gateway rejects a file, the payroll team should follow a documented 24-hour resolution path that includes vendor and ATO contacts.<\/p>\n<h3>3. Payroll software to automate STP submissions<\/h3>\n<p>Manual STP handling scales badly as headcount grows. Therefore, a <a href=\"https:\/\/www.hashmicro.com\/au\/human-resource-management\">STP-ready HR system<\/a>\u00a0or ERP module that automates data mapping, lodgement, and reconciliation removes the bulk of human error risk.<\/p>\n<p>Integrated systems support continuous reconciliation. An ERP linking general ledger, payroll, and STP allows finance teams to reconcile wages, super, and PAYG on a pay-period basis rather than at year-end.<\/p>\n<h3>4. EOFY finalisation review before the 14 July deadline<\/h3>\n<p>Finalisation is the closing act of the STP year. Reconciliation should begin in early June to identify mismatches between payroll YTD figures, general ledger balances, and super clearing house records.<\/p>\n<p>Final checks protect against late surprises. Verifying RESC totals, lump sum categorisations, and termination payments before 14 July prevents tax return delays and unwanted ATO queries.<\/p>\n<h3 class=\"text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold\"><b>How Payroll Software Simplifies STP Compliance<\/b><\/h3>\n<p><a class=\"underline underline underline-offset-2 decoration-1 decoration-current\/40 hover:decoration-current focus:decoration-current\" href=\"https:\/\/www.abs.gov.au\/statistics\/industry\/technology-and-innovation\/characteristics-australian-business\/latest-release\">According to ABS data<\/a>, Australian businesses are increasingly adopting digital tools to manage regulatory obligations.<\/p>\n<p>This shift is especially critical because automated STP lodgement through integrated software reduces manual error and ensures compliance across every pay cycle.<\/p>\n<p><span style=\"color: #222222; font-family: Verdana, BlinkMacSystemFont, -apple-system, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; font-size: 15px;\">Modern payroll and ERP software removes the manual effort by embedding compliance directly into the pay run. Rather than processing lodgement seperately, the right platform handles it automatically at every stage.<\/span><\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Automatic pay event lodgement<\/strong> means each finalised pay run generates and submits a compliant STP file to the ATO without manual intervention. This eliminates the risk of missed or late lodgements.<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>ATO gateway integration<\/strong> connects the software directly to the SBR, so pay events are transmitted, validated, and acknowledged in real time. Response messages surface inside the platform<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Automated EOFY finalisation<\/strong> compiles year-to-date figures across all employees and lodges the finalisation declaration before the deadline. Employees receive &#8220;tax ready&#8221; Income Statements in myGov.<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Real-time reconciliation<\/strong> aligns payroll figures, PAYG withholding, and superannuation liability as each pay cycle closes. Finance teams can verify that STP submissions match general ledger balances on a pay-period basis.<\/p>\n<p class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Centralised employee master data management<\/strong> ensures TFN declarations, tax treatment codes, income types, and employment basis are stored and updated in one place.<\/p>\n<h2 class=\"font-claude-response-body break-words whitespace-normal leading-[1.7]\"><strong>Conclusion<\/strong><\/h2>\n<p>Single Touch Payroll sits at the centre of Australian payroll compliance. Therefore, every employer, from sole trader to enterprise, reports wages, PAYG, and super to the ATO in real time on every payday.<\/p>\n<p>The move to Phase 2 raised the technical bar, making accurate master data, precise pay item mapping, and disciplined lodgement core capabilities, thus pushing the importance of payroll management.<\/p>\n<p>Complying with single touch payroll can come with its own obstacles and difficulties. If this challenge concerns you too, you can request a <a href=\"https:\/\/www.hashmicro.com\/au\/free-product-tour\/?medium=free-product-tour\">free consultation<\/a> with us today, so we can assist you in this implementation.<\/p>\n<a href=\"https:\/\/www.hashmicro.com\/au\/human-resource-management?medium=moneysite-banner\" target=\"_blank\"><img decoding=\"async\" loading=\"lazy\" width=\"712\" src=\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2025\/06\/HRM.webp\" alt=\"HRM\"><\/a>\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 does STP Phase 2 mean?<\/button>\r\n        <\/div>\r\n        <div class=\"answer\">\r\n            <p>STP Phase 2 is the expanded version of the reporting framework. It requires employers to disaggregate gross pay into specific categories such as overtime, allowances, paid leave, and bonuses, and embeds TFN declaration data inside each pay event.<\/p>\r\n        <\/div>\r\n    <\/div>\r\n    <div class=\"accordion-wrapper\">\r\n        <div class=\"header-faq\">\r\n            <button class=\"question\">When did STP Phase 2 start?<\/button>\r\n        <\/div>\r\n        <div class=\"answer\">\r\n            <p>STP Phase 2 officially began on 1 January 2022. Software providers and employers were granted transitional deferrals through 2022 and into 2023, but every Australian employer is now expected to report under Phase 2 rules.<\/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 STP mandatory for all employers in Australia?<\/button>\r\n        <\/div>\r\n        <div class=\"answer\">\r\n            <p>Yes. STP is mandatory for virtually every Australian employer, regardless of size, industry, or legal structure. The rules apply to companies, sole traders, partnerships, trusts, not-for-profits, and foreign employers with Australian-based staff.<\/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 if I don&#039;t comply with STP?<\/button>\r\n        <\/div>\r\n        <div class=\"answer\">\r\n            <p>Non-compliance can trigger ATO failure-to-lodge penalties, interest charges, and audit activity. Employees may also be unable to lodge annual tax returns if finalisation is missed, exposing the business to complaints and reputational damage.<\/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<p><script type=\"application\/ld+json\">\n  {\n  \"@context\": \"https:\/\/schema.org\",\n  \"@graph\": [\n    {\n      \"@type\": \"Article\",\n      \"headline\": \"Single Touch Payroll Explained: Complete STP Guide for Australian Businesses\",\n      \"description\": \"Single Touch Payroll (STP) explained for Australian businesses: Phase 2 rules, reporting categories, setup, deadlines, and compliance best practices for 2026.\",\n      \"datePublished\": \"2026-04-20\",\n      \"dateModified\": \"2026-04-20\",\n      \"author\": {\n        \"@type\": \"Organization\",\n        \"name\": \"HashMicro\"\n      },\n      \"publisher\": {\n        \"@type\": \"Organization\",\n        \"name\": \"HashMicro\",\n        \"logo\": {\n          \"@type\": \"ImageObject\",\n          \"url\": \"https:\/\/www.hashmicro.com\/wp-content\/uploads\/hashmicro-logo.png\"\n        }\n      },\n      \"mainEntityOfPage\": {\n        \"@type\": \"WebPage\",\n        \"@id\": \"https:\/\/www.hashmicro.com\/blog\/single-touch-payroll-australia\/\"\n      }\n    },\n    {\n      \"@type\": \"FAQPage\",\n      \"mainEntity\": [\n        {\n          \"@type\": \"Question\",\n          \"name\": \"What does STP Phase 2 mean?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"STP Phase 2 is the expanded version of the reporting framework. It requires employers to disaggregate gross pay into specific categories such as overtime, allowances, paid leave, and bonuses, and embeds TFN declaration data inside each pay event.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"When did STP Phase 2 start?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"STP Phase 2 officially began on 1 January 2022. Software providers and employers were granted transitional deferrals through 2022 and into 2023, but every Australian employer is now expected to report under Phase 2 rules.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Is STP mandatory for all employers in Australia?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"Yes. STP is mandatory for virtually every Australian employer, regardless of size, industry, or legal structure. The rules apply to companies, sole traders, partnerships, trusts, not-for-profits, and foreign employers with Australian-based staff.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"What happens if I don't comply with STP?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"Non-compliance can trigger ATO failure-to-lodge penalties, interest charges, and audit activity. Employees may also be unable to lodge annual tax returns if finalisation is missed, exposing the business to complaints and reputational damage.\"\n          }\n        }\n      ]\n    }\n  ]\n}\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Single Touch Payroll (STP) is the framework that requires Australian employers to transmit wages, PAYG withholding, and superannuation data to the ATO through the Standard Business single touch payroll tools. STP works by embedding statutory reporting inside the payroll process. Therefore, each pay run generates a pay event file containing year-to-date figures, which the software [&hellip;]<\/p>\n","protected":false},"author":49,"featured_media":2997,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"tdm_status":"","tdm_grid_status":"","footnotes":""},"categories":[54],"tags":[],"class_list":{"0":"post-2967","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-hrm"},"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>Single Touch Payroll Australia: How Businesses Stay Compliant - HashMicro Australia<\/title>\n<meta name=\"description\" content=\"Single Touch Payroll (STP) explained: Phase 2 rules, reporting categories, setup, deadlines, and compliance best practices for 2026.\" \/>\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\/single-touch-payroll\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Single Touch Payroll Australia: How Businesses Stay Compliant\" \/>\n<meta property=\"og:description\" content=\"Single Touch Payroll (STP) explained: Phase 2 rules, reporting categories, setup, deadlines, and compliance best practices for 2026.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.hashmicro.com\/au\/blog\/single-touch-payroll\/\" \/>\n<meta property=\"og:site_name\" content=\"HashMicro Australia\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-21T07:02:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-02T06:30:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/moneymoney-1.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"400\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Ainsley McKenzie\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ainsley McKenzie\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"21 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\\\/single-touch-payroll\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/single-touch-payroll\\\/\"},\"author\":{\"name\":\"Ainsley McKenzie\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/#\\\/schema\\\/person\\\/ec5e092ab82fafbe8cf646ae81c8a4bc\"},\"headline\":\"Single Touch Payroll Australia: How Businesses Stay Compliant\",\"datePublished\":\"2026-04-21T07:02:40+00:00\",\"dateModified\":\"2026-06-02T06:30:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/single-touch-payroll\\\/\"},\"wordCount\":4564,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/single-touch-payroll\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/moneymoney-1.webp\",\"articleSection\":[\"HRM\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/single-touch-payroll\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/single-touch-payroll\\\/\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/single-touch-payroll\\\/\",\"name\":\"Single Touch Payroll Australia: How Businesses Stay Compliant - HashMicro Australia\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/single-touch-payroll\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/single-touch-payroll\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/moneymoney-1.webp\",\"datePublished\":\"2026-04-21T07:02:40+00:00\",\"dateModified\":\"2026-06-02T06:30:58+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/#\\\/schema\\\/person\\\/ec5e092ab82fafbe8cf646ae81c8a4bc\"},\"description\":\"Single Touch Payroll (STP) explained: Phase 2 rules, reporting categories, setup, deadlines, and compliance best practices for 2026.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/single-touch-payroll\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/single-touch-payroll\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/single-touch-payroll\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/moneymoney-1.webp\",\"contentUrl\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/moneymoney-1.webp\",\"width\":800,\"height\":400,\"caption\":\"single-touch-payroll-hashmicro\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/single-touch-payroll\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Single Touch Payroll Australia: How Businesses Stay Compliant\"}]},{\"@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\\\/ec5e092ab82fafbe8cf646ae81c8a4bc\",\"name\":\"Ainsley McKenzie\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/cropped-Ainsley-McKenzie-WP-96x96.webp\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/cropped-Ainsley-McKenzie-WP-96x96.webp\",\"contentUrl\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/cropped-Ainsley-McKenzie-WP-96x96.webp\",\"caption\":\"Ainsley McKenzie\"},\"description\":\"I write HR articles that show how HR actually runs day to day. My background in HR shapes how I explain payroll and statutory items, attendance and shift rules, onboarding, performance reviews, and employee documentation in a way that feels practical for managers and HR teams.\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/au\\\/blog\\\/author\\\/ainsley-mckenzie\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Single Touch Payroll Australia: How Businesses Stay Compliant - HashMicro Australia","description":"Single Touch Payroll (STP) explained: Phase 2 rules, reporting categories, setup, deadlines, and compliance best practices for 2026.","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\/single-touch-payroll\/","og_locale":"en_US","og_type":"article","og_title":"Single Touch Payroll Australia: How Businesses Stay Compliant","og_description":"Single Touch Payroll (STP) explained: Phase 2 rules, reporting categories, setup, deadlines, and compliance best practices for 2026.","og_url":"https:\/\/www.hashmicro.com\/au\/blog\/single-touch-payroll\/","og_site_name":"HashMicro Australia","article_published_time":"2026-04-21T07:02:40+00:00","article_modified_time":"2026-06-02T06:30:58+00:00","og_image":[{"width":800,"height":400,"url":"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/moneymoney-1.webp","type":"image\/webp"}],"author":"Ainsley McKenzie","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Ainsley McKenzie","Est. reading time":"21 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.hashmicro.com\/au\/blog\/single-touch-payroll\/#article","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/au\/blog\/single-touch-payroll\/"},"author":{"name":"Ainsley McKenzie","@id":"https:\/\/www.hashmicro.com\/au\/blog\/#\/schema\/person\/ec5e092ab82fafbe8cf646ae81c8a4bc"},"headline":"Single Touch Payroll Australia: How Businesses Stay Compliant","datePublished":"2026-04-21T07:02:40+00:00","dateModified":"2026-06-02T06:30:58+00:00","mainEntityOfPage":{"@id":"https:\/\/www.hashmicro.com\/au\/blog\/single-touch-payroll\/"},"wordCount":4564,"commentCount":0,"image":{"@id":"https:\/\/www.hashmicro.com\/au\/blog\/single-touch-payroll\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/moneymoney-1.webp","articleSection":["HRM"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.hashmicro.com\/au\/blog\/single-touch-payroll\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.hashmicro.com\/au\/blog\/single-touch-payroll\/","url":"https:\/\/www.hashmicro.com\/au\/blog\/single-touch-payroll\/","name":"Single Touch Payroll Australia: How Businesses Stay Compliant - HashMicro Australia","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/au\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.hashmicro.com\/au\/blog\/single-touch-payroll\/#primaryimage"},"image":{"@id":"https:\/\/www.hashmicro.com\/au\/blog\/single-touch-payroll\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/moneymoney-1.webp","datePublished":"2026-04-21T07:02:40+00:00","dateModified":"2026-06-02T06:30:58+00:00","author":{"@id":"https:\/\/www.hashmicro.com\/au\/blog\/#\/schema\/person\/ec5e092ab82fafbe8cf646ae81c8a4bc"},"description":"Single Touch Payroll (STP) explained: Phase 2 rules, reporting categories, setup, deadlines, and compliance best practices for 2026.","breadcrumb":{"@id":"https:\/\/www.hashmicro.com\/au\/blog\/single-touch-payroll\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.hashmicro.com\/au\/blog\/single-touch-payroll\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hashmicro.com\/au\/blog\/single-touch-payroll\/#primaryimage","url":"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/moneymoney-1.webp","contentUrl":"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/04\/moneymoney-1.webp","width":800,"height":400,"caption":"single-touch-payroll-hashmicro"},{"@type":"BreadcrumbList","@id":"https:\/\/www.hashmicro.com\/au\/blog\/single-touch-payroll\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.hashmicro.com\/au\/blog\/"},{"@type":"ListItem","position":2,"name":"Single Touch Payroll Australia: How Businesses Stay Compliant"}]},{"@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\/ec5e092ab82fafbe8cf646ae81c8a4bc","name":"Ainsley McKenzie","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/02\/cropped-Ainsley-McKenzie-WP-96x96.webp","url":"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/02\/cropped-Ainsley-McKenzie-WP-96x96.webp","contentUrl":"https:\/\/www.hashmicro.com\/au\/blog\/wp-content\/uploads\/2026\/02\/cropped-Ainsley-McKenzie-WP-96x96.webp","caption":"Ainsley McKenzie"},"description":"I write HR articles that show how HR actually runs day to day. My background in HR shapes how I explain payroll and statutory items, attendance and shift rules, onboarding, performance reviews, and employee documentation in a way that feels practical for managers and HR teams.","url":"https:\/\/www.hashmicro.com\/au\/blog\/author\/ainsley-mckenzie\/"}]}},"_links":{"self":[{"href":"https:\/\/www.hashmicro.com\/au\/blog\/wp-json\/wp\/v2\/posts\/2967","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\/49"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/au\/blog\/wp-json\/wp\/v2\/comments?post=2967"}],"version-history":[{"count":4,"href":"https:\/\/www.hashmicro.com\/au\/blog\/wp-json\/wp\/v2\/posts\/2967\/revisions"}],"predecessor-version":[{"id":4369,"href":"https:\/\/www.hashmicro.com\/au\/blog\/wp-json\/wp\/v2\/posts\/2967\/revisions\/4369"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/au\/blog\/wp-json\/wp\/v2\/media\/2997"}],"wp:attachment":[{"href":"https:\/\/www.hashmicro.com\/au\/blog\/wp-json\/wp\/v2\/media?parent=2967"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hashmicro.com\/au\/blog\/wp-json\/wp\/v2\/categories?post=2967"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hashmicro.com\/au\/blog\/wp-json\/wp\/v2\/tags?post=2967"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}