{"id":188009,"date":"2026-01-30T15:56:02","date_gmt":"2026-01-30T08:56:02","guid":{"rendered":"https:\/\/www.hashmicro.com\/id\/blog\/?p=188009"},"modified":"2026-03-04T08:54:11","modified_gmt":"2026-03-04T01:54:11","slug":"payroll-cycle","status":"publish","type":"post","link":"https:\/\/www.hashmicro.com\/id\/blog\/payroll-cycle\/","title":{"rendered":"Panduan Komprehensif Payroll Cycle dan Patuh Aturan RI"},"content":{"rendered":"<p>Bayangkan hari gajian tiba, namun tim HR masih bergulat dengan spreadsheet yang tidak sinkron. Data lembur terlewat, potongan pajak dihitung manual, dan revisi slip gaji terus muncul. Kondisi ini bukan sekadar kendala teknis, tetapi menyangkut kredibilitas perusahaan di mata karyawan.<\/p>\n<p>Mengelola gaji bukan hanya soal mentransfer angka ke rekening. Proses ini merupakan payroll cycle yang menjadi inti operasional perusahaan. Ketika siklus berjalan lancar, stabilitas finansial dan kepercayaan karyawan terjaga. Sebaliknya, kesalahan kecil dapat berdampak pada kepatuhan hukum dan retensi SDM.<\/p>\n<p>Memahami alur penggajian yang tepat adalah langkah awal menuju sistem kerja yang transparan dan akurat. Artikel ini akan membahas tahapan payroll cycle, tantangan yang umum terjadi, serta cara memastikan proses penggajian tetap sesuai regulasi di Indonesia.<\/p>\n<table style=\"border-collapse: collapse; background-color: #fffacd; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); border-radius: 25px 25px 25px 25px;\" width=\"100%\">\n<tbody>\n<tr>\n<td style=\"padding: 15px; border: none;\">\n<h3 style=\"margin-bottom: 10px;\"><span style=\"background-color: #990000; color: #ffffff; padding: 5px;\"><b>Key Takeaways<\/b><\/span><\/h3>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"#a\">Payroll cycle adalah<\/a> rangkaian prosedur berulang untuk menghitung dan mendistribusikan upah karyawan dalam periode tertentu<\/li>\n<li aria-level=\"1\">Pemilihan <a href=\"#b\">periode payroll<\/a> harus disesuaikan dengan karakter tenaga kerja, kapasitas administrasi, dan arus kas perusahaan agar operasional tetap efisien sekaligus menjaga kepuasan karyawan.<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span data-sheets-root=\"1\"><div id=\"toc_group_article\" style=''>\r\n\t<p style='font-size:25px;font-weight:bold; margin-bottom:0px'>\r\n\t\tDaftar Isi:\r\n\t<\/p>\r\n\t<ul id=\"list_toc\" class='list_toc'><\/ul>\r\n<\/div>\r\n\r\n<div id=\"placeholder-toc\"><\/div>\r\n<div id=\"toc\">\r\n    <div class=\"header\">\r\n\t<span class=\"toc-title\" id=\"toc-title\">Daftar Isi<\/span>\t\r\n\t <i class=\"toc-icon\">\r\n        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"30\" height=\"30\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#000\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"header-icon\">\r\n          <path d=\"m6 9 6 6 6-6\" \/>\r\n        <\/svg>\r\n      <\/i>\r\n\t<\/div>\r\n    <div class=\"list\">\r\n      <ul id=\"toc-list\"><\/ul>\r\n    <\/div>\r\n <\/div>\r\n\r\n<style>\r\n\/* Simple styling for the TOC *\/\r\n\t\r\n\t#toc ul li:last-child {\r\n    padding-bottom: 16px; \/* Adjust the value as needed *\/\r\n}\r\n\r\n.td-fix-index {\r\n\t transform: unset !important;\r\n     -webkit-transform: unset !important; \r\n}\r\n.footer-contact .td-fix-index {\r\n\t transform: translateZ(0) !important;\r\n     -webkit-transform: translateZ(0) !important; \r\n}\r\n\t.tdb_single_content .tdb-block-inner.td-fix-index{\r\n\t\tposition: static;\r\n\t}\r\n\t\r\n\r\n\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<style>\r\n\t#list_toc li {margin-bottom: 0;margin-top: 5px;}\r\n\t#list_toc > li > ul {padding-left: 20px;margin-bottom: 0;}\r\n\t#list_toc{height:max-content;transition:ease-in-out}\r\n\t#list_toc li {margin-bottom: 0;margin-top: 5px;}\r\n\t#list_toc_float li.active > a {color:#b1252d;background: #ffe1e3;}\r\n\t#list_toc_float li a {padding:3px 7px}\r\n\t#list_toc_float li a {\r\n\t\tdisplay: block;\r\n\t\tcolor:#000;\r\n\t\tmargin-bottom: 10px;\r\n\t\ttransition:all 0.2s ease-in-out;\r\n\t\tfont-size:15px\r\n\t}\r\n\t#list_toc_float li{list-style:none;list-style-position:inside; margin-left:0;}\r\n\t#list_toc_float a:hover{color:#b1252d;}\r\n\t\r\n\t#list_toc_float li a{margin-bottom:0px}\r\n\t#toc_group_float{\r\n\t\tline-height: 24px;\r\n\t\tmax-height: calc(100vh - 100px);\r\n\t\toverflow: auto;\r\n\t\tz-index: 99;\r\n\t\tdisplay:none!important;\r\n\t\tbackground:#fff;\r\n\t\ttransition:all 0.5s linear\r\n\t}\r\n\t\r\n\t@media (min-width:1019px){\r\n\t\t#toc_group_float {\r\n\t\t\tdisplay:block!important;\r\n\t\t\t}\r\n\t\t#toc_group_article {\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\t}\r\n\t\r\n\t@media (max-width:768px){\r\n\t\t#toc_group_article {\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\t}\r\n\t\r\n\t \/* custom scrollbar style *\/\r\n::-webkit-scrollbar {\r\n    width: 7px;\r\n}\r\n::-webkit-scrollbar-track {\r\n    background: #d7a2a4;\r\n}\r\n::-webkit-scrollbar-thumb {\r\n    background: #b1252d;\r\n    border-radius: 15px;\r\n}\t\t\r\n\r\n<\/style>\r\n\r\n<script>\r\n\tdocument.addEventListener('DOMContentLoaded', function() {\r\n\t\t\/\/ Fungsi untuk menangani klik pada semua elemen <a> dengan href yang dimulai dengan #\r\n\t\tfunction handleTitleClick(event) {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tconst targetId = this.getAttribute('href').substring(1);\r\n\t\t\tconst targetElement = document.getElementById(targetId);\r\n\r\n\t\t\tif (targetElement) {\r\n\t\t\t\tconst headerHeight = document.querySelector('#toc .header').offsetHeight;\r\n\t\t\t\tconst navbarHeight = document.getElementById('tdi_34') ? document.getElementById('tdi_34').offsetHeight : 0;\r\n\t\t\t\tconst windowHeight = window.innerHeight;\r\n\t\t\t\tconst targetOffset = targetElement.offsetTop;\r\n\t\t\t\tconst scrollTo = targetOffset + (windowHeight \/ 2) + (headerHeight) - navbarHeight - 40;\r\n\r\n\t\t\t\twindow.scrollTo({\r\n\t\t\t\t\ttop: scrollTo,\r\n\t\t\t\t\tbehavior: 'smooth'\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t\/\/ Tambahkan event listener untuk semua elemen <a> di toc-list dan list-toc\r\n\t\tconst titleLinks = document.querySelectorAll('#toc-list a, #list_toc a');\r\n\t\ttitleLinks.forEach(link => {\r\n\t\t\tlink.addEventListener('click', handleTitleClick);\r\n\t\t});\r\n\t});\r\n<\/script>\r\n\r\n<!-- ToC List for mobile -->\r\n<script>\r\n \/\/ Generate TOC based on headings\r\ndocument.addEventListener(\"DOMContentLoaded\", function() {\r\n  \/\/ Get the element that will contain the TOC\r\n  const tocList = document.getElementById('toc-list');\r\n\r\n  \/\/ Get the element with 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\n\/\/ document.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 = 'Daftar Isi';\r\n\/\/ \/\/ \t\t\t}\r\n\/\/ \/\/ \t\t}\r\n\/\/ \t\tif(window.innerWidth < 767){\r\n\/\/ \t\t\ttocTitle.textContent = 'Daftar Isi'; \/\/ Selalu pertahankan judul ini di mobile\r\n\/\/ \t\t} else {\r\n\/\/ \t\t\tif (window.scrollY >= (headerTop - headerHeight + 700)) {\r\n\/\/ \t\t\t\tconst currentHeaderId = header.getAttribute('id');\r\n\/\/ \t\t\t\tconst currentHeaderText = document.getElementById(currentHeaderId).textContent;\r\n\/\/ \t\t\t\ttocTitle.textContent = currentHeaderText;\r\n\/\/ \t\t\t\tcurrentHeader = currentHeaderId;\r\n\/\/ \t\t\t}\r\n\/\/ \t\t}\r\n\/\/ \t});\r\n\r\n\/\/     navLinks.forEach(link => {\r\n\/\/       link.classList.remove('active');\r\n\/\/       if(currentHeader != '') {\r\n\/\/ \t\t  if (link.getAttribute('href').includes(currentHeader)) {\r\n\/\/ \t\t\t  link.classList.add('active');\r\n\/\/ \t\t  }\r\n\/\/ \t  }\r\n\/\/     });\r\n\/\/ \/\/     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 = 'Daftar Isi'; \/\/ 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 = 'Daftar isi'; \/\/ 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 = 'Daftar isi'; \/\/ 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\/\/ START new JS for ToC improvements\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 + 1750;\r\n\tconsole.log(triggerPoint)\r\n  const footerHeight = footer.offsetHeight;\r\n  const triggerFooterPoint = footer.getBoundingClientRect().top + window.pageYOffset - footerHeight*3;\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  \r\n  const panel2 = document.querySelector(\"#toc .list\");\r\n  const icon = document.querySelector(\".toc-icon\");\r\n  const tocTitle = document.querySelector('#toc-title');\r\n\r\n  let activeLink = null;\r\n  let userClosedTOC = false; \/\/ Flag user menutup TOC\r\n\r\n  function handleScroll() {\r\n    const windowTop = window.pageYOffset || document.documentElement.scrollTop;\r\n    let currentHeader = '';\r\n\r\n    \/\/ Update TOC title sesuai header yang terlihat\r\n    headers.forEach(header => {\r\n      const headerTop = header.offsetTop;\r\n      const headerHeight = header.clientHeight;\r\n      if(window.innerWidth < 767){\r\n        tocTitle.textContent = 'Daftar Isi'; \r\n      } else {\r\n        if (window.scrollY >= (headerTop - headerHeight + 1750)) {\r\n          const currentHeaderId = header.getAttribute('id');\r\n          const currentHeaderText = document.getElementById(currentHeaderId).textContent;\r\n          tocTitle.textContent = currentHeaderText;\r\n          currentHeader = currentHeaderId;\r\n        }\r\n      }\r\n    });\r\n\r\n    navLinks.forEach(link => {\r\n      link.classList.remove('active');\r\n      if(currentHeader && link.getAttribute('href').includes(currentHeader)) {\r\n        link.classList.add('active');\r\n      }\r\n    });\r\n\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`;\r\n        toc.style.backgroundColor = \"#FFF\";\r\n        \/\/ Saat sticky, TOC otomatis tertutup\r\n        panel2.style.height = '0px';\r\n        icon.style.transform = \"rotate(180deg)\";\r\n        userClosedTOC = true; \/\/ Set flag supaya tidak terbuka saat scroll\r\n      }\r\n      \r\n      if(window.innerWidth < 767){\r\n        tocTitle.textContent = 'Daftar Isi'; \r\n        toc.style.width = '150px';\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';\r\n      toc.style.backgroundColor = \"#FFF\";\r\n      tocTitle.textContent = 'Daftar isi'; \r\n\r\n      \/\/ Kembalikan panel jika user belum menutup manual\r\n      if(!userClosedTOC) {\r\n        panel2.style.height = panel2.scrollHeight + \"px\";\r\n        icon.style.transform = \"rotate(0deg)\";\r\n      }\r\n    }\r\n  }\r\n\r\n  window.addEventListener('scroll', handleScroll);\r\n  handleScroll();\r\n\r\n  \/\/ Toggle TOC saat user klik\r\n  const tocHeader = document.querySelector(\"#toc .header\");\r\n  tocHeader.addEventListener(\"click\", function() {\r\n    const panel = panel2;\r\n    if (panel.style.height !== '0px') {\r\n      panel.style.height = '0px';\r\n      icon.style.transform = \"rotate(180deg)\";\r\n      userClosedTOC = true;\r\n    } else {\r\n      panel.style.height = panel.scrollHeight + \"px\";\r\n      icon.style.transform = \"rotate(0deg)\";\r\n      userClosedTOC = false;\r\n    }\r\n  });\r\n\r\n  \/\/ Close TOC saat link diklik\r\n  document.querySelectorAll(\"#toc .list a\").forEach(link => {\r\n    link.addEventListener(\"click\", function() {\r\n      panel2.style.height = '0px';\r\n      icon.style.transform = \"rotate(180deg)\";\r\n      userClosedTOC = true;\r\n    });\r\n  });\r\n});\r\n\/\/ END new JS for ToC improvements\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<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        } \r\n\t\t  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\r\n<!-- ToC List for desktop side bar, diganti jadi inject by php, di code snippet \"Sidebar Accordion\" -->\r\n<!-- <script>\r\n\tdocument.addEventListener(\"DOMContentLoaded\", function() {\r\n\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        \/\/ Mengambil semua elemen h2 dan h3\r\n\t\tconst elements = document.querySelectorAll('.td-post-content h2');\r\n\r\n\t\t\tfunction newFormatId(text) {\r\n\t\t\t\tif(text.toLowerCase() === \"key takeaways\") {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tconst result = text.toLowerCase()\r\n\t\t\t\t.trim()\r\n\t\t\t\t.replace(\/[^\\w\\s-]\/g, '')  \/\/ hapus tanda baca\r\n\t\t\t\t.replace(\/\\s+\/g, '-'); \/\/ ganti spasi jadi \"-\"\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\r\n\t\telements.forEach(element => {\r\n\t\t\tif (element.tagName === 'H2') {\r\n\t\t\t\tconst id = newFormatId(element.textContent); \/\/ Hasilkan ID baru\r\n\t\t\t\telement.id = id; \/\/ Tetapkan ID ke elemen h2\r\n\t\t\t\tif (element.textContent.toLowerCase() === \"key takeaways\") {return;} \/\/ Kalau Key Takeaways, jangan dimasukin\r\n\t\t\t\theadings.push({ level: 'h2', id: id, title: element.textContent, children: [] });\r\n\t\t\t} else if (element.tagName === 'H3') {\r\n\t\t\t\tconst id = newFormatId(element.textContent); \/\/ Hasilkan ID baru\r\n\t\t\t\telement.id = id; \/\/ Tetapkan ID ke elemen h3\r\n\t\t\t\tif (headings.length > 0) {\r\n\t\t\t\t\theadings[headings.length - 1].children.push({ level: 'h3', id: id, title: element.textContent, children: [] });\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n       \/\/ Membuat list HTML dari objek headings\r\n\t\tconst ul = document.getElementById('list_toc');\r\n\t\tlet currentUl = ul;\r\n\t\theadings.forEach(heading => {\r\n\t\t\tconst li = document.createElement('li');\r\n\t\t\tconst a = document.createElement('a');\r\n\t\t\ta.textContent = heading.title;\r\n\t\t\ta.href = `#${heading.id}`; \/\/ Gunakan ID yang baru dihasilkan\r\n\t\t\tli.appendChild(a);\r\n\r\n\t\t\tif (heading.level === 'h2') {\r\n\t\t\t\tcurrentUl = li;\r\n\t\t\t\tul.appendChild(li);\r\n\t\t\t} else if (heading.level === 'h3') {\r\n\t\t\t\tif (!currentUl.lastElementChild || currentUl.lastElementChild.tagName !== 'UL') {\r\n\t\t\t\t\tconst nestedUl = document.createElement('ul');\r\n\t\t\t\t\tcurrentUl.appendChild(nestedUl);\r\n\t\t\t\t\tcurrentUl = nestedUl;\r\n\t\t\t\t}\r\n\t\t\t\tcurrentUl.appendChild(li);\r\n\t\t\t}\r\n\r\n\t\t\tcreateNestedList(li, heading.children);\r\n\t\t});\r\n\t\t\/\/ Dapatkan elemen ul dengan id 'list_toc'\r\n\t\tconst ulFloat = document.getElementById('list_toc');\r\n\r\n\t\t\/\/ Dapatkan isi (child elements) dari ul dengan id 'list_toc'\r\n\t\tconst clonedChildren = ulFloat.cloneNode(true).children;\r\n\r\n\t\t\/\/ Dapatkan elemen ul dengan id 'list_toc_float'\r\n\t\tconst ulToc = document.getElementById('list_toc_float');\r\n\r\n\t\t\/\/ Tambahkan isi yang telah didapatkan dari 'list_toc' ke ul dengan id 'list_toc_float'\r\n\t\tulToc.append(...clonedChildren);\r\n\r\n\r\n        \/\/ Fungsi untuk mengambil tinggi navbar\r\n\t\tfunction getNavbarHeight() {\r\n\t\t\tconst navbar = document.getElementById('tdi_34');\r\n\t\t\treturn navbar ? navbar.offsetHeight : 0;\r\n\t\t}\r\n\r\n\t\t\/\/ Fungsi untuk menambahkan offset posisi scroll\r\n\t\tfunction scrollToElementWithOffset(elementId) {\r\n\t\t\tconst element = document.getElementById(elementId);\r\n\t\t\tif (element) {\r\n\t\t\t\tconst offset = getNavbarHeight();\r\n\t\t\t\tconst elementPosition = element.getBoundingClientRect().top;\r\n\t\t\t\tconst offsetPosition = elementPosition - offset - 40;\r\n\r\n\t\t\t\twindow.scrollBy({\r\n\t\t\t\t\ttop: offsetPosition,\r\n\t\t\t\t\tbehavior: 'smooth'\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t\/\/ Fungsi untuk menangani klik pada tautan judul\r\n\t\tfunction handleTitleClick(event) {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tconst href = event.target.getAttribute('href').substr(1);\r\n\t\t\tscrollToElementWithOffset(href);\r\n\t\t}\r\n\r\n\t\t\/\/ Tambahkan event listener untuk semua tautan judul\r\n\t\tconst titleLinks = document.querySelectorAll('a[href^=\"#\"]');\r\n\t\ttitleLinks.forEach(link => {\r\n\t\t\tlink.addEventListener('click', handleTitleClick);\r\n\t\t});\r\n\t\t\r\n\t});\r\n    <\/script> -->\r\n<\/span><\/p>\n<h2 id=\"definisi-dan-konsep-fundamental-payroll-cycle\"><span id=\"a\">Konsep Fundamental Payroll Cycle<\/span><\/h2>\n<p>payroll cycle adalah rangkaian prosedur berulang untuk menghitung dan mendistribusikan upah karyawan. Durasi siklus ini bervariasi, ada perusahaan yang menerapkan mingguan, namun mayoritas bisnis di Indonesia menggunakan siklus bulanan.<\/p>\n<p>Siklus ini tidak berdiri sendiri. Ia melibatkan koordinasi antara data kehadiran dari departemen HR, laporan performa dari manajer, hingga kebijakan anggaran dari departemen keuangan. Tanpa alur yang jelas, risiko keterlambatan gaji atau kesalahan bayar akan selalu menghantui setiap akhir bulan.<\/p>\n<h2 id=\"tahapan-kritis-dalam-ekosistem-siklus-penggajian\">Tahapan Payroll Cycle dalam Operasional Perusahaan<\/h2>\n<p>Untuk mencapai akurasi nol kesalahan (<em>zero-error accuracy<\/em>), siklus penggajian harus dipandang sebagai rangkaian proses yang terstruktur. Secara umum, siklus ini dapat dibagi menjadi tiga fase utama: Pra-Penggajian, Pemrosesan Aktual, dan Pasca-Penggajian. Kegagalan di satu tahap akan memicu efek domino pada tahap berikutnya.<\/p>\n<h3>1. Fase Pra-Penggajian (Pre-Payroll)<\/h3>\n<p>Fase ini adalah fondasi dari seluruh siklus. Aktivitas utama di sini berfokus pada pengumpulan dan validasi data. Tanpa data yang bersih (<em>clean data<\/em>), perhitungan gaji karyawan dipastikan akan salah. Elemen kunci dalam fase ini meliputi:<\/p>\n<ul>\n<li><strong>Konsolidasi Data Kehadiran:<\/strong> Mengumpulkan data dari mesin absensi atau aplikasi HRIS. HR harus memverifikasi ketidakhadiran, apakah itu cuti berbayar (<em>paid leave<\/em>), sakit dengan surat dokter, atau alpa yang akan memotong gaji.<\/li>\n<li><strong>Verifikasi Lembur:<\/strong> Memastikan setiap klaim lembur telah disetujui oleh manajer terkait dan sesuai dengan batasan jam lembur menurut regulasi pemerintah.<\/li>\n<li><strong>Pembaruan Data Karyawan:<\/strong> Memasukkan perubahan status karyawan yang berdampak pada gaji, seperti promosi (kenaikan gaji), mutasi, perubahan status pernikahan (mempengaruhi PTKP), atau penambahan anggota keluarga untuk tunjangan BPJS.<\/li>\n<li><strong>Perhitungan Komponen Variabel:<\/strong> Menghitung komisi penjualan, <a href=\"https:\/\/www.hashmicro.com\/id\/blog\/cara-menentukan-bonus-akhir-tahun-karyawan\/\">bonus kinerja akhir tahun<\/a>, atau insentif lain yang bersifat tidak tetap dan fluktuatif setiap bulannya.<\/li>\n<\/ul>\n<h3>2. Fase Pemrosesan Aktual (Actual Payroll)<\/h3>\n<p>Setelah data tervalidasi, proses perhitungan dimulai. Pada tahap ini, akurasi matematika dan pemahaman regulasi diuji. Langkah-langkahnya meliputi:<\/p>\n<ul>\n<li><strong>Perhitungan Gaji Kotor (Gross Salary):<\/strong> Menjumlahkan gaji pokok dan seluruh tunjangan.<\/li>\n<li><strong>Perhitungan Pengurang (Deductions):<\/strong> Menghitung iuran wajib karyawan (BPJS Kesehatan 1%, JHT 2%, JP 1%) serta potongan lain seperti pinjaman karyawan atau koperasi.<\/li>\n<li><strong>Perhitungan Pajak (PPh 21):<\/strong> Menerapkan tarif pajak yang sesuai. Sejak 2024, pemerintah Indonesia menerapkan skema Tarif Efektif Rata-Rata (TER) untuk perhitungan masa pajak bulanan, yang kemudian akan disesuaikan kembali (dihitung ulang) dengan tarif Pasal 17 pada masa pajak terakhir (Desember). Kompleksitas ini menuntut ketelitian tinggi.<\/li>\n<li><strong>Finalisasi Gaji Bersih (Net Salary):<\/strong> Nilai akhir yang akan diterima karyawan setelah gaji kotor dikurangi seluruh potongan.<\/li>\n<\/ul>\n<h3>3. Fase Pasca-Penggajian (Post-Payroll)<\/h3>\n<p>Siklus tidak berhenti saat tombol transfer ditekan. Fase pasca-penggajian melibatkan pelaporan dan pencatatan yang krusial bagi kepatuhan perusahaan.<\/p>\n<ul>\n<li><strong>Distribusi Pembayaran:<\/strong> Mengirimkan instruksi transfer ke bank (biasanya melalui file CSV atau integrasi API perbankan) untuk mendistribusikan gaji ke rekening karyawan.<\/li>\n<li><strong>Penerbitan Slip Gaji (Payslips):<\/strong> Menyediakan rincian pendapatan dan potongan kepada karyawan sebagai bukti sah pembayaran.<\/li>\n<li><strong>Penyetoran dan Pelaporan Pajak &amp; BPJS:<\/strong> Menyetorkan potongan pajak ke kas negara dan iuran ke BPJS, serta melaporkan SPT Masa PPh 21.<\/li>\n<li><strong>Pencatatan Akuntansi (Journal Entry):<\/strong> Mencatat beban gaji, utang gaji, dan utang pajak ke dalam sistem buku besar (General Ledger) perusahaan.<\/li>\n<\/ul>\n<style>\r\n\t#baca-juga {\r\n\t\tpadding: 16px;\r\n\t\tbackground-color: #f7eaea;\r\n\t\tborder-left: 3px solid #af2828;\r\n\t\tfont-weight: 500;\r\n\t\tmargin-bottom: 26px;\r\n\t}\r\n\t\r\n\t#baca-juga a {\r\n\t\tcolor: #af2828 !important;\r\n\t\ttransition: all 0.2s ease-in-out;\r\n\t}\r\n\t\r\n\t#baca-juga a:hover {\r\n\t\tcolor: #af282880 !important;\r\n\t}\r\n<\/style>\r\n\r\n<div id=\"baca-juga\">\r\n\t<span>Baca juga: <a href=\"https:\/\/www.hashmicro.com\/id\/blog\/pph-21-thr\/\">Panduan lengkap tentang Tunjangan Hari Raya (THR) dan bagaimana PPh 21 atas THR dihitung<\/a><\/span>\r\n<\/div>\n<h2 id=\"strategi-menentukan-periode-payroll-yang-ideal\"><span id=\"b\"><strong>Strategi Menentukan Periode Payroll yang Ideal<\/strong><\/span><\/h2>\n<p>Meskipun siklus bulanan menjadi praktik paling umum di Indonesia, perusahaan tetap memiliki fleksibilitas dalam menentukan frekuensi pembayaran gaji sesuai kebutuhan operasional dan karakter tenaga kerja. Pemilihan periode payroll berpengaruh langsung pada arus kas perusahaan serta tingkat kepuasan karyawan.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-188114\" src=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/01\/siklus-payroll.webp\" alt=\"siklus payroll\" width=\"1536\" height=\"1024\" srcset=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/01\/siklus-payroll.webp 1536w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/01\/siklus-payroll-300x200.webp 300w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/01\/siklus-payroll-1024x683.webp 1024w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/01\/siklus-payroll-768x512.webp 768w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/01\/siklus-payroll-630x420.webp 630w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/01\/siklus-payroll-150x100.webp 150w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/01\/siklus-payroll-696x464.webp 696w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/01\/siklus-payroll-1068x712.webp 1068w\" sizes=\"auto, (max-width: 1536px) 100vw, 1536px\" \/><\/p>\n<h3>1. Siklus Bulanan (Monthly)<\/h3>\n<p>Siklus bulanan adalah standar di Indonesia, khususnya bagi karyawan kantoran. Gaji dibayarkan satu kali setiap bulan, umumnya di akhir bulan atau tanggal tertentu. Keunggulannya terletak pada beban administrasi yang lebih ringan dan proses penggajian yang lebih sederhana, meskipun karyawan perlu mengelola keuangan dengan cermat untuk kebutuhan satu bulan penuh.<\/p>\n<h3>2. Siklus Mingguan (Weekly)<\/h3>\n<p>Siklus mingguan banyak diterapkan di sektor manufaktur, konstruksi, dan pekerjaan berbasis proyek. Pembayaran rutin setiap minggu memberikan likuiditas lebih cepat bagi karyawan dan membantu perusahaan menarik tenaga kerja harian. Namun, frekuensi proses yang tinggi meningkatkan beban administrasi HR serta risiko kesalahan penggajian.<\/p>\n<h3>3. Siklus Dua Mingguan (Bi-Weekly)<\/h3>\n<p>Model dua mingguan menawarkan keseimbangan antara arus kas karyawan dan efisiensi administrasi perusahaan. Pola ini umum di perusahaan multinasional, meski masih jarang di Indonesia. Tantangan utamanya terletak pada penyesuaian perhitungan pajak dan BPJS yang berbasis bulanan agar tidak menimbulkan selisih di akhir tahun.<\/p>\n<h2><strong>Kepatuhan Regulasi Payroll di Indonesia<\/strong><\/h2>\n<p>Payroll cycle di Indonesia wajib mengikuti kerangka hukum yang berlaku. Kepatuhan ini tidak hanya bersifat formal, tetapi juga memengaruhi bagaimana perusahaan membangun hubungan jangka panjang dengan karyawan dan otoritas terkait. Regulasi utama yang perlu diperhatikan meliputi:<\/p>\n<ol>\n<li><strong>Undang-Undang Ketenagakerjaan dan UU Cipta Kerja<\/strong>, yang mengatur hak upah, struktur penggajian, serta ketepatan waktu pembayaran kepada karyawan.<\/li>\n<li><a href=\"https:\/\/www.pajak.go.id\/id\/pemotongan-pajak-penghasilan-pasal-21\"><strong>Peraturan perpajakan PPh 21<\/strong><\/a>, termasuk penyesuaian tarif, metode perhitungan, dan kewajiban pelaporan pajak penghasilan karyawan.<\/li>\n<li><strong>BPJS Ketenagakerjaan dan BPJS Kesehatan<\/strong>, yang mewajibkan perusahaan melakukan pemotongan, penyetoran, dan pelaporan iuran secara rutin.<\/li>\n<li><strong>UU Perlindungan Data Pribadi (UU PDP)<\/strong>, yang menuntut perusahaan menjaga keamanan, kerahasiaan, dan penggunaan data penggajian secara bertanggung jawab.<\/li>\n<\/ol>\n<p>Kepatuhan pada regulasi ini membantu perusahaan menghindari sanksi sekaligus membangun reputasi sebagai pemberi kerja yang bertanggung jawab.<\/p>\n<h2><strong>Risiko Operasional dalam Payroll Cycle<\/strong><\/h2>\n<p>Dalam praktiknya, risiko payroll umumnya berkembang secara bertahap dan dapat dipetakan ke dalam beberapa poin utama berikut:<\/p>\n<ol>\n<li><strong>Ketidaksinkronan data antar departemen<\/strong>, misalnya perbedaan catatan absensi, lembur, atau perubahan data karyawan yang tidak diperbarui secara seragam.<\/li>\n<li><strong>Ketergantungan pada proses manual yang berulang<\/strong>, yang meningkatkan potensi human error dan memperlambat proses verifikasi data penggajian.<\/li>\n<li><strong>Perubahan regulasi yang tidak segera diadaptasi<\/strong>, sehingga prosedur internal tertinggal dari ketentuan terbaru.<\/li>\n<li><strong>Akumulasi kesalahan kecil, <\/strong>seperti selisih jam kerja, input lembur yang terlambat, atau data karyawan yang sudah tidak relevan, yang pada akhirnya memengaruhi akurasi <a href=\"https:\/\/www.hashmicro.com\/id\/blog\/komponen-gaji-karyawan\/\">perhitungan kompenen gaji<\/a>.<\/li>\n<li><strong>Dampak lanjutan terhadap operasional<\/strong>, mulai dari keterlambatan pembayaran, kesalahan potongan pajak dan jaminan sosial, hingga meningkatnya beban administratif dan pekerjaan korektif bagi tim HR serta manajemen.<\/li>\n<\/ol>\n<p>Jika dibiarkan, risiko-risiko tersebut dapat membentuk pola masalah yang berulang setiap periode penggajian. Karena itu, perusahaan perlu memandang payroll cycle sebagai proses yang harus dievaluasi secara berkala, bukan sekadar rutinitas bulanan, agar potensi kesalahan dapat dikendalikan sebelum berdampak lebih luas pada operasional dan hubungan kerja.<\/p>\n<h2 id=\"integrasi-akuntansi\">Integrasi Payroll Cycle dengan Akuntansi dan Arus Kas<\/h2>\n<p>Siklus penggajian merupakan bagian penting dari sistem keuangan perusahaan karena gaji sering menjadi komponen biaya operasional terbesar. Tanpa integrasi payroll dan akuntansi, perusahaan berisiko kehilangan visibilitas finansial yang akurat.<\/p>\n<p>Setelah proses penggajian selesai, data harus dicatat ke jurnal akuntansi, dengan gaji sebagai beban dan potongan seperti PPh 21 serta BPJS sebagai utang. Jika dilakukan secara manual, perbedaan data antara HR dan Finance mudah terjadi dan dapat memicu ketidaksesuaian laporan keuangan.<\/p>\n<p>Selain pencatatan, jadwal payroll sangat memengaruhi perencanaan arus kas. Sistem yang terintegrasi memungkinkan tim keuangan memantau proyeksi beban gaji, termasuk lembur dan bonus, secara real-time sehingga perencanaan likuiditas menjadi lebih presisi.<\/p>\n<h2 id=\"adaptasi-siklus-penggajian-di-berbagai-sektor-industri\">Adaptasi Siklus Penggajian di Berbagai Sektor Industri<\/h2>\n<p>Pendekatan &#8220;satu ukuran untuk semua&#8221; dalam sistem penggajian sering kali menjadi resep kegagalan. Sistem ERP modern seperti Equip memungkinkan kustomisasi mendalam untuk mengakomodasi nuansa operasional yang berbeda di setiap industri. Berikut adalah analisis mendalam mengenai penerapan siklus penggajian di sektor-sektor kunci:<\/p>\n<h3>1. Industri Manufaktur<\/h3>\n<p>Di sektor manufaktur, tantangan terbesar terletak pada volume tenaga kerja yang besar dan variasi jam kerja. Siklus penggajian harus terintegrasi secara <em>real-time<\/em> dengan mesin absensi biometrik atau IoT di lantai produksi.<\/p>\n<ul>\n<li><strong>Manajemen Shift Rotasi:<\/strong> Sistem harus mampu menghitung premi shift (shift malam atau shift akhir pekan) secara otomatis tanpa input manual yang rentan kesalahan.<\/li>\n<li><strong>Perhitungan Lembur Berjenjang:<\/strong> Sesuai regulasi di Indonesia, perhitungan lembur pada jam pertama berbeda dengan jam-jam berikutnya. Sistem harus mengalkulasi ini secara presisi, termasuk lembur pada hari libur nasional yang memiliki pengali upah lebih tinggi.<\/li>\n<li><strong>Upah Satuan (Piece-Rate):<\/strong> Untuk pekerja borongan, siklus penggajian tidak berbasis waktu, melainkan berbasis output. Integrasi dengan modul produksi diperlukan untuk menarik data jumlah unit yang diselesaikan per karyawan guna menentukan upah yang akurat.<\/li>\n<\/ul>\n<h3>2. Industri Retail dan F&amp;B<\/h3>\n<p>Dinamika industri retail yang memiliki banyak cabang dan tingkat keluar-masuk karyawan (<em>turnover<\/em>) yang tinggi menuntut fleksibilitas sistem penggajian.<\/p>\n<ul>\n<li><strong>Konsolidasi Data Multi-Cabang:<\/strong> Tantangan utama adalah mengumpulkan data kehadiran dari berbagai lokasi toko yang mungkin memiliki infrastruktur internet berbeda. Sistem berbasis <em>cloud<\/em> memungkinkan sinkronisasi data kehadiran secara terpusat (sentralisasi), memangkas waktu rekapitulasi dari berhari-hari menjadi hitungan menit.<\/li>\n<li><strong>Perhitungan Prorata Otomatis:<\/strong> Dengan <em>turnover<\/em> tinggi, perhitungan gaji prorata untuk karyawan yang masuk atau keluar di tengah bulan menjadi sangat sering terjadi. Sistem harus otomatis menghitung proporsi gaji pokok dan tunjangan berdasarkan hari kerja efektif.<\/li>\n<li><strong>Skema Komisi Bertingkat:<\/strong> Pramuniaga sering kali memiliki <a href=\"https:\/\/www.hashmicro.com\/id\/blog\/insentif-adalah\/\">skema insentif sendiri<\/a> berdasarkan target penjualan individu maupun toko. Integrasi antara modul <em>Point of Sales<\/em> (POS) dan Payroll diperlukan untuk menarik data penjualan dan mengonversinya menjadi bonus komisi dalam siklus penggajian yang sama.<\/li>\n<\/ul>\n<h3>3. Industri Distribusi dan Logistik<\/h3>\n<p>Sektor ini memiliki tenaga kerja yang sangat <em>mobile<\/em>, seperti pengemudi dan kurir, yang jarang berada di kantor pusat.<\/p>\n<ul>\n<li><strong>Tunjangan Berbasis Perjalanan (Trip-Based Allowances):<\/strong> Komponen gaji sering kali didominasi oleh variabel tunjangan perjalanan, uang makan harian, dan insentif pengiriman tepat waktu. Sistem perlu memvalidasi penyelesaian pengiriman sebelum mencairkan insentif tersebut.<\/li>\n<li><strong>Geo-Tagging Attendance:<\/strong> Karena tidak memungkinkan menggunakan mesin sidik jari, validasi kehadiran dilakukan melalui aplikasi <em>mobile<\/em> dengan fitur GPS (<em>Geo-tagging<\/em>) dan deteksi wajah (<em>Face Recognition<\/em>). Data ini harus mengalir langsung ke dalam perhitungan gaji tanpa intervensi manual.<\/li>\n<\/ul>\n<h2>Metrik Keberhasilan (KPI) Implementasi Payroll<\/h2>\n<p>Bagaimana Anda tahu bahwa sistem baru berhasil? Gunakan indikator berikut:<\/p>\n<ul>\n<li><strong>Akurasi Penggajian (Payroll Accuracy Rate):<\/strong> Target harus 100%. Rumusnya: <code>(Total Slip Gaji Tanpa Error \/ Total Slip Gaji) x 100%<\/code>. Kesalahan sekecil apa pun dapat merusak kepercayaan.<\/li>\n<li><strong>Waktu Pemrosesan (Cycle Time Reduction):<\/strong> Mengukur berapa lama waktu yang dibutuhkan dari <em>cut-off<\/em> data kehadiran hingga file transfer bank siap. Sistem yang baik harus mampu memangkas waktu ini hingga 50-70%.<\/li>\n<li><strong>Biaya per Slip Gaji (Cost per Payslip):<\/strong> Menghitung total biaya operasional tim payroll dibagi jumlah karyawan. Otomatisasi seharusnya menurunkan biaya ini secara signifikan dengan mengurangi kebutuhan lembur tim HR saat periode gajian.<\/li>\n<li><strong>Tingkat Kepatuhan (Compliance Rate):<\/strong> Persentase pembayaran pajak dan BPJS yang dilakukan tepat waktu dan akurat tanpa denda keterlambatan.<\/li>\n<\/ul>\n<h2 id=\"tren-masa-depan\">Tren Masa Depan dalam Payroll Cycle<\/h2>\n<p>Melihat ke depan, evolusi <em>payroll cycle<\/em> akan bergerak menuju fleksibilitas dan kecerdasan data yang lebih tinggi.<\/p>\n<h3>1. Earned Wage Access (EWA)<\/h3>\n<p>Konsep penggajian tradisional yang kaku (sebulan sekali) mulai ditantang oleh model <em>On-Demand Pay<\/em> atau <em>Earned Wage Access<\/em>. <a href=\"https:\/\/www.hashmicro.com\/id\/blog\/earned-wages-access\/\">Model ini<\/a> memungkinkan karyawan untuk menarik sebagian dari gaji yang telah mereka peroleh (berdasarkan hari kerja yang sudah dilalui) sebelum tanggal gajian resmi. Ini memberikan fleksibilitas finansial bagi karyawan untuk menghadapi kebutuhan mendesak tanpa harus berutang ke pinjaman online ilegal. Perusahaan yang mengadopsi EWA melihat peningkatan retensi dan kepuasan karyawan.<\/p>\n<h3>2. Analitik Payroll Berbasis AI<\/h3>\n<p>Kecerdasan Buatan (AI) mulai diterapkan untuk menganalisis data penggajian. AI dapat mendeteksi anomali, seperti lonjakan biaya lembur yang tidak wajar di departemen tertentu, atau memprediksi tren <em>turnover<\/em> berdasarkan pola kenaikan gaji. Analitik ini mengubah data payroll dari sekadar catatan biaya menjadi wawasan strategis bagi manajemen untuk pengambilan keputusan terkait anggaran SDM.<\/p>\n<h2 id=\"kesimpulan\">Kesimpulan<\/h2>\n<p>Payroll cycle yang dikelola dengan baik membantu perusahaan menjaga keseimbangan antara kepatuhan, efisiensi, dan kepercayaan karyawan. Dengan pendekatan yang terstruktur dan relevan terhadap regulasi Indonesia, siklus penggajian dapat menjadi fondasi operasional yang stabil dan berkelanjutan.<\/p>\n<p>Bagi perusahaan yang ingin mengevaluasi atau menyempurnakan proses penggajiannya, <a href=\"https:\/\/www.hashmicro.com\/id\/tour-produk-gratis\/\">melakukan konsultasi gratis<\/a> dengan pihak yang memahami aspek regulasi dan operasional payroll dapat menjadi langkah awal yang bijak sebelum menerapkan perubahan lebih lanjut.<\/p>\n<h2><strong>Pertanyaan Seputar Payroll Cycle<\/strong><\/h2>\n<ul class=\"bottom_faq\">\n<li>\n<details>\n<summary><strong>Apa itu payroll cycle dan mengapa penting bagi perusahaan?<\/strong><\/summary>\n<p>Payroll cycle adalah rentang waktu sistematis di mana perusahaan memproses perhitungan dan pembayaran gaji karyawan. Ini penting karena memastikan karyawan dibayar tepat waktu, menjaga kepatuhan terhadap undang-undang ketenagakerjaan, dan membantu manajemen arus kas perusahaan.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>Apa perbedaan antara payroll cycle bulanan dan mingguan?<\/strong><\/summary>\n<p>Siklus bulanan memproses gaji satu kali sebulan, umum digunakan untuk pekerja kantoran dan lebih efisien secara administrasi. Siklus mingguan memproses gaji setiap minggu, sering digunakan untuk pekerja harian atau manufaktur, memberikan likuiditas cepat bagi karyawan namun beban administrasi lebih tinggi.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>Apa saja tahapan utama dalam memproses payroll?<\/strong><\/summary>\n<p>Tahapan utama meliputi Pra-Penggajian (pengumpulan data absensi, validasi lembur), Pemrosesan Aktual (perhitungan gaji kotor, potongan pajak, BPJS, gaji bersih), dan Pasca-Penggajian (transfer gaji, slip gaji, pelaporan pajak, dan pencatatan akuntansi).<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>Mengapa integrasi payroll dengan akuntansi sangat diperlukan?<\/strong><\/summary>\n<p>Integrasi ini mencegah kesalahan pencatatan manual, memastikan beban gaji tercatat akurat dalam laporan laba rugi, mempermudah rekonsiliasi bank, dan memberikan visibilitas real-time terhadap arus kas perusahaan untuk perencanaan keuangan yang lebih baik.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>Bagaimana penerapan PPh 21 TER mempengaruhi siklus penggajian?<\/strong><\/summary>\n<p>Penerapan Tarif Efektif Rata-Rata (TER) menyederhanakan perhitungan bulanan dengan menggunakan tabel tarif berdasarkan status PTKP dan penghasilan bruto, namun mewajibkan perhitungan ulang menggunakan tarif Pasal 17 di masa pajak terakhir (Desember), yang menuntut ketelitian ekstra dalam sistem payroll.<span style=\"font-family: Verdana, BlinkMacSystemFont, -apple-system, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\">\u00a0<\/span><\/p>\n<\/details>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Bayangkan hari gajian tiba, namun tim HR masih bergulat dengan spreadsheet yang tidak sinkron. Data lembur terlewat, potongan pajak dihitung manual, dan revisi slip gaji terus muncul. Kondisi ini bukan sekadar kendala teknis, tetapi menyangkut kredibilitas perusahaan di mata karyawan. Mengelola gaji bukan hanya soal mentransfer angka ke rekening. Proses ini merupakan payroll cycle yang [&hellip;]<\/p>\n","protected":false},"author":233,"featured_media":188123,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[6],"tags":[],"class_list":{"0":"post-188009","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-hrm"},"acf":{"post_reviewer":""},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.1 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Panduan Komprehensif Payroll Cycle dan Patuh Aturan RI &#187; HashMicro Indonesia<\/title>\n<meta name=\"description\" content=\"Pelajari tentang payroll cycle dan bagaimana mengelolanya dengan baik untuk menjaga kredibilitas perusahaan dan karyawan.\" \/>\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\/id\/blog\/payroll-cycle\/\" \/>\n<meta property=\"og:locale\" content=\"id_ID\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Panduan Komprehensif Payroll Cycle dan Patuh Aturan RI\" \/>\n<meta property=\"og:description\" content=\"Pelajari tentang payroll cycle dan bagaimana mengelolanya dengan baik untuk menjaga kredibilitas perusahaan dan karyawan.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.hashmicro.com\/id\/blog\/payroll-cycle\/\" \/>\n<meta property=\"og:site_name\" content=\"HashMicro Indonesia\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/hashmicro\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-30T08:56:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-04T01:54:11+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/01\/payroll-fundamental.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Aulia Kholqiana\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@hashmicro\" \/>\n<meta name=\"twitter:site\" content=\"@hashmicro\" \/>\n<meta name=\"twitter:label1\" content=\"Ditulis oleh\" \/>\n\t<meta name=\"twitter:data1\" content=\"Aulia Kholqiana\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimasi waktu membaca\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 menit\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/payroll-cycle\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/payroll-cycle\\\/\"},\"author\":{\"name\":\"Aulia Kholqiana\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#\\\/schema\\\/person\\\/993108c3b814f42f9da45e1a7f2896f6\"},\"headline\":\"Panduan Komprehensif Payroll Cycle dan Patuh Aturan RI\",\"datePublished\":\"2026-01-30T08:56:02+00:00\",\"dateModified\":\"2026-03-04T01:54:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/payroll-cycle\\\/\"},\"wordCount\":2186,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/payroll-cycle\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/payroll-fundamental.webp\",\"articleSection\":[\"HRM\"],\"inLanguage\":\"id\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/payroll-cycle\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/payroll-cycle\\\/\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/payroll-cycle\\\/\",\"name\":\"Panduan Komprehensif Payroll Cycle dan Patuh Aturan RI &#187; HashMicro Indonesia\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/payroll-cycle\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/payroll-cycle\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/payroll-fundamental.webp\",\"datePublished\":\"2026-01-30T08:56:02+00:00\",\"dateModified\":\"2026-03-04T01:54:11+00:00\",\"description\":\"Pelajari tentang payroll cycle dan bagaimana mengelolanya dengan baik untuk menjaga kredibilitas perusahaan dan karyawan.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/payroll-cycle\\\/#breadcrumb\"},\"inLanguage\":\"id\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/payroll-cycle\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/payroll-cycle\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/payroll-fundamental.webp\",\"contentUrl\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/payroll-fundamental.webp\",\"width\":1200,\"height\":675,\"caption\":\"payroll fundamental\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/payroll-cycle\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Panduan Komprehensif Payroll Cycle dan Patuh Aturan RI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/\",\"name\":\"HashMicro Indonesia\",\"description\":\"Blog Software Manajemen Bisnis Indonesia #1\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"id\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#organization\",\"name\":\"HashMicro Indonesia\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/11\\\/hashmicro-logo-blog.webp\",\"contentUrl\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/11\\\/hashmicro-logo-blog.webp\",\"width\":924,\"height\":121,\"caption\":\"HashMicro Indonesia\"},\"image\":{\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/hashmicro\",\"https:\\\/\\\/x.com\\\/hashmicro\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/hashmicro\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/#\\\/schema\\\/person\\\/993108c3b814f42f9da45e1a7f2896f6\",\"name\":\"Aulia Kholqiana\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/cropped-WhatsApp-Image-2025-02-03-at-10.16.43-96x96.jpeg\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/cropped-WhatsApp-Image-2025-02-03-at-10.16.43-96x96.jpeg\",\"contentUrl\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/cropped-WhatsApp-Image-2025-02-03-at-10.16.43-96x96.jpeg\",\"caption\":\"Aulia Kholqiana\"},\"description\":\"Aulia telah menjadi spesialis yang sudah berpengalaman selama lebih dari 2 tahun di bidang Human Resource Management (HRM). Penulisan artikel berfokus pada pengelolaan siklus hidup karyawan, penilaian kinerja, penggunaan sistem HRIS, dan program pengembangan karyawan, sehingga dapat memberikan solusi bagi peningkatan performa perusahaan.\",\"url\":\"https:\\\/\\\/www.hashmicro.com\\\/id\\\/blog\\\/author\\\/aulia-kholqiana\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Panduan Komprehensif Payroll Cycle dan Patuh Aturan RI &#187; HashMicro Indonesia","description":"Pelajari tentang payroll cycle dan bagaimana mengelolanya dengan baik untuk menjaga kredibilitas perusahaan dan karyawan.","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\/id\/blog\/payroll-cycle\/","og_locale":"id_ID","og_type":"article","og_title":"Panduan Komprehensif Payroll Cycle dan Patuh Aturan RI","og_description":"Pelajari tentang payroll cycle dan bagaimana mengelolanya dengan baik untuk menjaga kredibilitas perusahaan dan karyawan.","og_url":"https:\/\/www.hashmicro.com\/id\/blog\/payroll-cycle\/","og_site_name":"HashMicro Indonesia","article_publisher":"https:\/\/www.facebook.com\/hashmicro","article_published_time":"2026-01-30T08:56:02+00:00","article_modified_time":"2026-03-04T01:54:11+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/01\/payroll-fundamental.webp","type":"image\/webp"}],"author":"Aulia Kholqiana","twitter_card":"summary_large_image","twitter_creator":"@hashmicro","twitter_site":"@hashmicro","twitter_misc":{"Ditulis oleh":"Aulia Kholqiana","Estimasi waktu membaca":"13 menit"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.hashmicro.com\/id\/blog\/payroll-cycle\/#article","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/payroll-cycle\/"},"author":{"name":"Aulia Kholqiana","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/person\/993108c3b814f42f9da45e1a7f2896f6"},"headline":"Panduan Komprehensif Payroll Cycle dan Patuh Aturan RI","datePublished":"2026-01-30T08:56:02+00:00","dateModified":"2026-03-04T01:54:11+00:00","mainEntityOfPage":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/payroll-cycle\/"},"wordCount":2186,"commentCount":0,"publisher":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/#organization"},"image":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/payroll-cycle\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/01\/payroll-fundamental.webp","articleSection":["HRM"],"inLanguage":"id","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.hashmicro.com\/id\/blog\/payroll-cycle\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.hashmicro.com\/id\/blog\/payroll-cycle\/","url":"https:\/\/www.hashmicro.com\/id\/blog\/payroll-cycle\/","name":"Panduan Komprehensif Payroll Cycle dan Patuh Aturan RI &#187; HashMicro Indonesia","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/payroll-cycle\/#primaryimage"},"image":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/payroll-cycle\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/01\/payroll-fundamental.webp","datePublished":"2026-01-30T08:56:02+00:00","dateModified":"2026-03-04T01:54:11+00:00","description":"Pelajari tentang payroll cycle dan bagaimana mengelolanya dengan baik untuk menjaga kredibilitas perusahaan dan karyawan.","breadcrumb":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/payroll-cycle\/#breadcrumb"},"inLanguage":"id","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.hashmicro.com\/id\/blog\/payroll-cycle\/"]}]},{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/www.hashmicro.com\/id\/blog\/payroll-cycle\/#primaryimage","url":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/01\/payroll-fundamental.webp","contentUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2026\/01\/payroll-fundamental.webp","width":1200,"height":675,"caption":"payroll fundamental"},{"@type":"BreadcrumbList","@id":"https:\/\/www.hashmicro.com\/id\/blog\/payroll-cycle\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.hashmicro.com\/id\/blog\/"},{"@type":"ListItem","position":2,"name":"Panduan Komprehensif Payroll Cycle dan Patuh Aturan RI"}]},{"@type":"WebSite","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#website","url":"https:\/\/www.hashmicro.com\/id\/blog\/","name":"HashMicro Indonesia","description":"Blog Software Manajemen Bisnis Indonesia #1","publisher":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.hashmicro.com\/id\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"id"},{"@type":"Organization","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#organization","name":"HashMicro Indonesia","url":"https:\/\/www.hashmicro.com\/id\/blog\/","logo":{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2023\/11\/hashmicro-logo-blog.webp","contentUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2023\/11\/hashmicro-logo-blog.webp","width":924,"height":121,"caption":"HashMicro Indonesia"},"image":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/hashmicro","https:\/\/x.com\/hashmicro","https:\/\/www.linkedin.com\/company\/hashmicro"]},{"@type":"Person","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/person\/993108c3b814f42f9da45e1a7f2896f6","name":"Aulia Kholqiana","image":{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/02\/cropped-WhatsApp-Image-2025-02-03-at-10.16.43-96x96.jpeg","url":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/02\/cropped-WhatsApp-Image-2025-02-03-at-10.16.43-96x96.jpeg","contentUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/02\/cropped-WhatsApp-Image-2025-02-03-at-10.16.43-96x96.jpeg","caption":"Aulia Kholqiana"},"description":"Aulia telah menjadi spesialis yang sudah berpengalaman selama lebih dari 2 tahun di bidang Human Resource Management (HRM). Penulisan artikel berfokus pada pengelolaan siklus hidup karyawan, penilaian kinerja, penggunaan sistem HRIS, dan program pengembangan karyawan, sehingga dapat memberikan solusi bagi peningkatan performa perusahaan.","url":"https:\/\/www.hashmicro.com\/id\/blog\/author\/aulia-kholqiana\/"}]}},"focus_keyword":"payroll cycle","order_j":"","_links":{"self":[{"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/posts\/188009","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/users\/233"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/comments?post=188009"}],"version-history":[{"count":9,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/posts\/188009\/revisions"}],"predecessor-version":[{"id":190277,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/posts\/188009\/revisions\/190277"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/media\/188123"}],"wp:attachment":[{"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/media?parent=188009"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/categories?post=188009"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/tags?post=188009"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}