{"id":78705,"date":"2026-03-23T04:13:44","date_gmt":"2026-03-23T04:13:44","guid":{"rendered":"https:\/\/www.hashmicro.com\/blog\/?p=78705"},"modified":"2026-04-06T09:44:59","modified_gmt":"2026-04-06T09:44:59","slug":"cpf-contribution-singapore","status":"publish","type":"post","link":"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/","title":{"rendered":"Singapore CPF Contribution Guide for Employers"},"content":{"rendered":"<p>CPF contributions are a compulsory social security savings program in Singapore, where both employers and employees contribute monthly to the employee\u2019s CPF account. These contributions help build funds across Ordinary, Special, and MediSave accounts for long-term needs.<\/p>\n<p>This system helps more than 4.3 million members save for retirement, housing, and healthcare, with contributions totalling billions each quarter, according to the <a href=\"https:\/\/www.cpf.gov.sg\/employer\/infohub\/reports-and-statistics\/cpf-statistics\" target=\"_blank\" rel=\"noopener\">CPF Board\u2019s latest statistics<\/a>. Understanding how CPF contributions work is crucial for employers and employees in Singapore\u2019s job market.<\/p>\n<p>For employers, getting CPF contribution rates and ceilings right ensures compliance with Singapore law and smooth payroll processing. From basics to updated rates and ceilings, the system affects take-home pay and future benefits. That\u2019s why an employee needs to understand CPF contribution in Singapore.<\/p>\n<!-- <div id=\"toc_group_article\" style=''>\r\n\t<p style='font-size:25px;font-weight:bold; margin-bottom:0px'>\r\n\t\tTable of 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<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: #8a0e19; color: #ffffff; padding: 5px;\"><b>Key Takeaways<\/b><\/span><\/h3>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"#1\">CPF contribution<\/a> is a mandatory monthly savings paid by employers and employees in Singapore to fund retirement, healthcare, and housing needs.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"#2\">Employers must pay<\/a> CPF contributions for Singapore Citizens and Permanent Residents, with deductions also made from eligible employees\u2019 wages.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">CPF contributions are <a href=\"#3\">calculated as a percentage of monthly wages<\/a>, based on employee age, contribution rates, and applicable wage ceilings set by the CPF Board.<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2><strong>Get to Know CPF Contribution and Why It Is Important for Your Business<\/strong><\/h2>\n<p><a href=\"https:\/\/www.mom.gov.sg\/employment-practices\/central-provident-fund\/employers-contributions\" target=\"_blank\" rel=\"noopener\">CPF contribution<\/a> is a mandatory social security savings scheme in Singapore where employers and employees make monthly payments into an employee\u2019s CPF account. The fund supports long-term needs such as retirement, housing, and healthcare for Singapore Citizens and Permanent Residents.<\/p>\n<p>CPF contributions have two core parts: the employer\u2019s contribution (an added cost on top of gross salary) and the employee\u2019s contribution (<a href=\"https:\/\/www.hashmicro.com\/blog\/how-does-payroll-deduction-work-in-business\/\">a payroll deduction the employer must remit<\/a>). Both are calculated in accordance with CPF rules, including age-based rates and wage ceilings.<\/p>\n<p>For businesses, CPF affects compliance, payroll accuracy, and cost planning, so mistakes can create audit and penalty risk. Consistent, on-time CPF management also strengthens trust and retention because employees see their employer protecting their future.<\/p>\n<h2><strong><span id=\"2\">Who Is Required to Receive and Pay CPF Contributions?<\/span><\/strong><\/h2>\n<p>Generally, any employee who is a Singapore Citizen or a Permanent Resident and earns more than S$50 per month is required to receive CPF contributions. Here is a breakdown of who is eligible for CPF and the obligations that fall upon the employer.<\/p>\n<h3><strong>1. Criteria for eligible employees<\/strong><\/h3>\n<p>Employees eligible for CPF are Singapore Citizens or Permanent Residents working in Singapore under a contract of service, including full-time, part-time, temporary, and contract roles. CPF generally applies when monthly wages exceed S$50, regardless of hours worked or whether pay is hourly, daily, or project-based.<\/p>\n<h3><strong>2. Exemptions and special cases<\/strong><\/h3>\n<p>Foreign workers on Employment Pass, S Pass, or Work Permit are not covered under CPF, so no CPF contributions are required for them. Some arrangements also fall outside CPF on that income, such as partners in a partnership or directors paid only directors\u2019 fees instead of wages.<\/p>\n<h3><strong>3. Obligations of the employer<\/strong><\/h3>\n<p>Employers must compute CPF, deduct the employee share, add the employer share, and pay the total to the CPF Board by the last day of each calendar month. Late or incorrect payments can trigger interest\/penalties, and employers should keep clear CPF records for audit purposes.<\/p>\n<h2><strong><span id=\"3\">Details of the Latest CPF Contribution Rates and Calculations<\/span><\/strong><\/h2>\n<p><a href=\"https:\/\/www.cpf.gov.sg\/employer\/employer-obligations\/how-much-cpf-contributions-to-pay\" target=\"_blank\" rel=\"noopener\">CPF contribution rates<\/a> are structured progressively, determined by the employee&#8217;s age bracket and their monthly wage.\u00a0Let&#8217;s examine the rates, ceilings, and a calculation example in more detail.<\/p>\n<h3><strong>1. Table of CPF contribution rates by age group<\/strong><\/h3>\n<p>Take a look at this table of CPF contribution rates by age group.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: center;\" rowspan=\"2\">Employee&#8217;s age (years)<\/th>\n<th style=\"text-align: center;\" colspan=\"3\">Contribution rates from 1 January 2026 (monthly wages &gt; $750)<\/th>\n<\/tr>\n<tr>\n<th style=\"text-align: center;\">By employer (% of wage)<\/th>\n<th style=\"text-align: center;\">By employee (% of wage)<\/th>\n<th style=\"text-align: center;\">Total (% of wage)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>55 and below<\/td>\n<td>17<\/td>\n<td>20<\/td>\n<td>37<\/td>\n<\/tr>\n<tr>\n<td>Above 55 to 60<\/td>\n<td>16<\/td>\n<td>18<\/td>\n<td>34<\/td>\n<\/tr>\n<tr>\n<td>Above 60 to 65<\/td>\n<td>12.5<\/td>\n<td>12.5<\/td>\n<td>25<\/td>\n<\/tr>\n<tr>\n<td>Above 65 to 70<\/td>\n<td>9<\/td>\n<td>7.5<\/td>\n<td>16.5<\/td>\n<\/tr>\n<tr>\n<td>Above 70<\/td>\n<td>7.5<\/td>\n<td>5<\/td>\n<td>12.5<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3><strong>2. Understanding CPF contribution caps (Ordinary &amp; Additional Wage Ceiling)<\/strong><\/h3>\n<p>The Ordinary Wage (OW) Ceiling sets the maximum monthly salary subject to CPF contributions, currently set at S$6,800 as of September 2023, with further increases planned. Meanwhile, the Additional Wage (AW) Ceiling applies to supplementary income like annual bonuses.<\/p>\n<p>Its calculation is more complex, as it depends on the total OW already subjected to CPF throughout the year. Mastering both ceilings is essential to ensure a company neither overpays nor underpays its CPF obligations.<\/p>\n<h3><strong>3. Case study of a CPF calculation<\/strong><\/h3>\n<p>To provide a clearer picture, consider an employee aged 35 with a monthly salary (OW) of S$7,000 and an annual bonus (AW) of S$10,000. The CPF contribution for their monthly salary will only be based on the OW Ceiling of S$6,800.<\/p>\n<p>The calculation for the bonus will then take into account the total OW subject to CPF for the year to determine how much of the S$10,000 bonus falls within the AW Ceiling, ensuring the total annual contribution does not exceed the overall limit.<\/p>\n<h2><strong>Mandatory vs. Voluntary CPF Contributions<\/strong><\/h2>\n<p>Beyond the compulsory CPF payments (Mandatory Contributions), CPF also allows Voluntary Contributions as extra top-ups by employers or employees. Knowing how both work helps companies structure payroll and benefits clearly, while giving employees a practical way to strengthen long-term savings.<\/p>\n<ol>\n<li><strong>Mandatory Contribution (MC)<\/strong><br \/>\nMandatory Contribution is the legally required CPF payment for eligible employees, and employers must calculate and remit it every month. The amount follows CPF Board rates based on the employee\u2019s age and wages, creating a baseline for retirement, housing, and healthcare.<\/li>\n<li><strong>Voluntary Contribution (VC)<\/strong><br \/>\nVoluntary Contribution is an additional CPF top-up made beyond the mandatory amount, either by the employer or the employee. For employers, it can be positioned as a meaningful benefit that supports retention and makes the total package more attractive.<\/li>\n<li><strong>Tax implications and benefits for the company<\/strong><br \/>\nEmployer Voluntary Contributions may be tax-deductible as a business expense, as long as they stay within the applicable limits and rules. This can be a cost-efficient way to enhance employee benefits without simply increasing base salary.<\/li>\n<\/ol>\n<h2><strong>Common Challenges in CPF Management and How to Overcome Them<\/strong><\/h2>\n<p>Managing CPF contributions, or <a href=\"https:\/\/www.hashmicro.com\/blog\/payroll-management-optimization\/\">managing payroll in a business<\/a>, particularly in a company with a large workforce, can present numerous administrative challenges. Here are some prevalent challenges and how technology provides effective solutions to them.<\/p>\n<ol>\n<li><strong>Calculation errors due to age-related rate changes<\/strong><br \/>\nTracking when employees move into a new age bracket can easily cause CPF rate miscalculations if HR misses the cutoff. Use a payroll system that auto-updates CPF rates based on date of birth and applies the correct rate every cycle.<\/li>\n<li><strong>Late payments and the risk of fines<\/strong><br \/>\nCPF payments have a fixed month-end deadline, and even a one-day delay can trigger interest and penalties. Set automated payroll timelines with reminders and standardized month-end checklists so submissions are always on time.<\/li>\n<li><strong>The complexity of reporting for many employees<\/strong><br \/>\nManaging CPF records for many employees is detail-heavy, and small data mistakes can create rework or audit risk. Centralize employee data and generate CPF-ready reports automatically to keep records consistent and exportable.<\/li>\n<li><strong>Automation solution<\/strong><br \/>\nManual CPF handling increases the chance of rate errors, late payments, and slow reporting as headcount grows. Technology such as payroll software automates age-based CPF updates, sends payment reminders, and produces compliance reports quickly to keep payroll clean and audit-ready.<\/li>\n<\/ol>\n<h2><strong>Step-by-Step Guide to Paying CPF Contributions<\/strong><\/h2>\n<p>The government has significantly streamlined the process of paying CPF contributions through dedicated digital platforms. Here is a brief guide to the main steps involved in the CPF payment process, from initial registration to monthly submission.<\/p>\n<ol>\n<li><strong>Registering an employer account (CSN)<\/strong><br \/>\nRegister with the CPF Board to get your CPF Submission Number (CSN) before you make any payments. Complete it online and prepare your ACRA business details, as well as <a href=\"https:\/\/www.hashmicro.com\/blog\/singapore-payroll\/\">the Singapore payroll<\/a> contact person\u2019s information.<\/li>\n<li><strong>Payment process via CPF EZPay<\/strong><br \/>\nSubmit monthly CPF details through CPF EZPay by uploading the required file format or entering employee data manually. After you confirm the entries, the portal calculates the total payable amount for that month.<\/li>\n<li><strong>Payment schedule and deadlines<\/strong><br \/>\nPay CPF by the last day of each calendar month to stay compliant and avoid interest. Start earlier to avoid processing delays, as payments received after the 14th of the next month are treated as late and may trigger penalties.<\/li>\n<\/ol>\n<p>To understand better, take a look at this infographic.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-78961\" src=\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/01\/Step-by-Step-Guide-to-Paying-CPF-Contributions.webp\" alt=\"Step-by-Step Guide to Paying CPF Contributions\" width=\"1024\" height=\"1536\" srcset=\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/01\/Step-by-Step-Guide-to-Paying-CPF-Contributions.webp 1024w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/01\/Step-by-Step-Guide-to-Paying-CPF-Contributions-200x300.webp 200w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/01\/Step-by-Step-Guide-to-Paying-CPF-Contributions-683x1024.webp 683w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/01\/Step-by-Step-Guide-to-Paying-CPF-Contributions-768x1152.webp 768w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/01\/Step-by-Step-Guide-to-Paying-CPF-Contributions-280x420.webp 280w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/01\/Step-by-Step-Guide-to-Paying-CPF-Contributions-150x225.webp 150w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/01\/Step-by-Step-Guide-to-Paying-CPF-Contributions-300x450.webp 300w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/01\/Step-by-Step-Guide-to-Paying-CPF-Contributions-696x1044.webp 696w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<h2><strong>How Mitsubishi Automates CPF Contribution Payment with HR System<\/strong><\/h2>\n<p>Mitsubishi operates complex manufacturing and engineering businesses with large, multi-generational workforces. To manage CPF contributions accurately and at scale, the company relies on an integrated HRM system that embeds CPF compliance directly into payroll operations.<\/p>\n<ol>\n<li><strong>Centralised employee data across manufacturing sites<\/strong><br \/>\nMitsubishi uses its HRM system to centralise employee profiles across plants, offices, and operational units. This ensures CPF calculations always reference a single, accurate source of employee age, citizenship status, and employment type.<\/li>\n<li><strong>Automatic CPF rate adjustments based on employee age<\/strong><br \/>\nIn a workforce with long tenure, age-based CPF rate changes are frequent and easy to miss manually. The HR system automatically updates CPF contribution rates when employees cross age thresholds, eliminating calculation errors.<\/li>\n<li><strong>Built-in payroll rules aligned with CPF regulations<\/strong><br \/>\nCPF contribution formulas, wage ceilings, and eligibility rules are pre-configured in the HRM system. Payroll teams no longer need to interpret CPF updates manually, reducing compliance risk during regulatory changes.<\/li>\n<li><strong>Seamless payroll-to-CPF submission workflow<\/strong><br \/>\nOnce payroll is processed, CPF contribution data is generated in CPF EZPay\u2013ready formats. This allows Mitsubishi to submit CPF payments efficiently without re-entering or revalidating employee data.<\/li>\n<li><strong>Consistent compliance across permanent and contract workers<\/strong><br \/>\nMitsubishi manages a mix of full-time, contract, and shift-based employees in Singapore. The HRM system applies CPF rules consistently across employment types, ensuring no eligible worker is missed.<\/li>\n<li><strong>Audit-ready CPF records for governance and reporting<\/strong><br \/>\nEvery CPF deduction, employer contribution, and submission record is logged automatically. This supports Mitsubishi\u2019s internal audits, statutory inspections, and corporate governance standards.<\/li>\n<li><strong>Reduced payroll workload for HR and finance teams<\/strong><br \/>\nBy automating CPF calculations and submissions, HR teams spend less time on repetitive checks. This frees resources for workforce planning, skills development, and operational efficiency initiatives.<\/li>\n<\/ol>\n<h3><strong>Conclusion<\/strong><\/h3>\n<p>CPF contribution is a mandatory social security framework in Singapore that directly affects payroll accuracy, legal compliance, and employee financial security. Managing it properly helps businesses stay compliant while building trust and long-term confidence among their workforce.<\/p>\n<p>If CPF calculations, submissions, or compliance checks are slowing your payroll down, getting the right guidance can make a real difference. <a href=\"https:\/\/www.hashmicro.com\/free-product-tour\/\">Speak with our experts<\/a> to review your CPF contribution process and ensure it runs accurately, efficiently, and in line with current regulations.<\/p>\n<h3><strong>FAQ About CPF Contribution Singapore<\/strong><\/h3>\n<ul class=\"bottom_faq\">\n<li>\n<details>\n<summary><strong>What happens if a company is late in paying CPF contributions?<\/strong><\/summary>\n<p>Companies that pay late are subject to a late payment interest of 1.5% per month on the outstanding amount, calculated on a daily basis.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>Are part-time employees also entitled to CPF?<\/strong><\/summary>\n<p>Yes, as long as the employee is a Singapore Citizen or PR and earns more than S$50 a month, they are entitled to CPF contributions, regardless of their part-time status.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>Can the CPF calculation and payment process be automated?<\/strong><\/summary>\n<p>Absolutely. Using payroll software like HashMicro&#8217;s can automate the entire process, from calculating rates to generating files for CPF EZPay, reducing errors and saving time.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>What documents need to be kept regarding CPF payments?<\/strong><\/summary>\n<p>Companies must keep detailed payroll and CPF payment records for each employee for at least 2 years. These records are crucial for internal audits and official inspections.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>How are bonuses (Additional Wages) treated in CPF calculations?<\/strong><\/summary>\n<p>Bonuses have a separate annual contribution ceiling. The calculation is based on the difference between the annual Total Wage Ceiling and the total Ordinary Wages (OW) already subjected to CPF throughout the year.<\/p>\n<\/details>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>CPF contributions are a compulsory social security savings program in Singapore, where both employers and employees contribute monthly to the employee\u2019s CPF account. These contributions help build funds across Ordinary, Special, and MediSave accounts for long-term needs. This system helps more than 4.3 million members save for retirement, housing, and healthcare, with contributions totalling billions [&hellip;]<\/p>\n","protected":false},"author":218,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[6],"tags":[],"class_list":{"0":"post-78705","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-hrm"},"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.6 (Yoast SEO v26.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>CPF Contribution Singapore Guide for Employers<\/title>\n<meta name=\"description\" content=\"Get the latest CPF contribution Singapore rates, ceilings, and employer steps. Use this guide to stay compliant and run payroll accurately.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Singapore CPF Contribution Guide for Employers\" \/>\n<meta property=\"og:description\" content=\"Get the latest CPF contribution Singapore rates, ceilings, and employer steps. Use this guide to stay compliant and run payroll accurately.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/\" \/>\n<meta property=\"og:site_name\" content=\"BusinessTech\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/web.facebook.com\/hashmicro\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-23T04:13:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-06T09:44:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/01\/Step-by-Step-Guide-to-Paying-CPF-Contributions.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"1536\" \/>\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=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Aulia kholqiana\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/\"},\"author\":{\"name\":\"Aulia kholqiana\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#\/schema\/person\/8ba48ccbeb0c9f5c51940619f406e5e7\"},\"headline\":\"Singapore CPF Contribution Guide for Employers\",\"datePublished\":\"2026-03-23T04:13:44+00:00\",\"dateModified\":\"2026-04-06T09:44:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/\"},\"wordCount\":1923,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/01\/Step-by-Step-Guide-to-Paying-CPF-Contributions.webp\",\"articleSection\":[\"HRM\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/\",\"url\":\"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/\",\"name\":\"CPF Contribution Singapore Guide for Employers\",\"isPartOf\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/01\/Step-by-Step-Guide-to-Paying-CPF-Contributions.webp\",\"datePublished\":\"2026-03-23T04:13:44+00:00\",\"dateModified\":\"2026-04-06T09:44:59+00:00\",\"description\":\"Get the latest CPF contribution Singapore rates, ceilings, and employer steps. Use this guide to stay compliant and run payroll accurately.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/#primaryimage\",\"url\":\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/01\/Step-by-Step-Guide-to-Paying-CPF-Contributions.webp\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/01\/Step-by-Step-Guide-to-Paying-CPF-Contributions.webp\",\"width\":1024,\"height\":1536,\"caption\":\"Step-by-Step Guide to Paying CPF Contributions\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.hashmicro.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Singapore CPF Contribution Guide for Employers\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#website\",\"url\":\"https:\/\/www.hashmicro.com\/blog\/\",\"name\":\"BusinessTech\",\"description\":\"Business Management Blog\",\"publisher\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.hashmicro.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#organization\",\"name\":\"HashMicro\",\"url\":\"https:\/\/www.hashmicro.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2016\/02\/bt_logo-1.png\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2016\/02\/bt_logo-1.png\",\"width\":334,\"height\":51,\"caption\":\"HashMicro\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/web.facebook.com\/hashmicro\/\",\"https:\/\/x.com\/hashmicro\",\"https:\/\/www.linkedin.com\/company\/hashmicro\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#\/schema\/person\/8ba48ccbeb0c9f5c51940619f406e5e7\",\"name\":\"Aulia kholqiana\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/9843219f141142ee7baeaf92522635a6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/9843219f141142ee7baeaf92522635a6?s=96&d=mm&r=g\",\"caption\":\"Aulia kholqiana\"},\"description\":\"As a content writer who turns technical complexity into compelling narratives, my words guide businesses through the labyrinth of technology, transforming challenges into opportunities for growth.\",\"url\":\"https:\/\/www.hashmicro.com\/blog\/author\/auliakholqiana\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"CPF Contribution Singapore Guide for Employers","description":"Get the latest CPF contribution Singapore rates, ceilings, and employer steps. Use this guide to stay compliant and run payroll accurately.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/","og_locale":"en_US","og_type":"article","og_title":"Singapore CPF Contribution Guide for Employers","og_description":"Get the latest CPF contribution Singapore rates, ceilings, and employer steps. Use this guide to stay compliant and run payroll accurately.","og_url":"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/","og_site_name":"BusinessTech","article_publisher":"https:\/\/web.facebook.com\/hashmicro\/","article_published_time":"2026-03-23T04:13:44+00:00","article_modified_time":"2026-04-06T09:44:59+00:00","og_image":[{"width":1024,"height":1536,"url":"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/01\/Step-by-Step-Guide-to-Paying-CPF-Contributions.webp","type":"image\/webp"}],"author":"Aulia kholqiana","twitter_card":"summary_large_image","twitter_creator":"@hashmicro","twitter_site":"@hashmicro","twitter_misc":{"Written by":"Aulia kholqiana","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/#article","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/"},"author":{"name":"Aulia kholqiana","@id":"https:\/\/www.hashmicro.com\/blog\/#\/schema\/person\/8ba48ccbeb0c9f5c51940619f406e5e7"},"headline":"Singapore CPF Contribution Guide for Employers","datePublished":"2026-03-23T04:13:44+00:00","dateModified":"2026-04-06T09:44:59+00:00","mainEntityOfPage":{"@id":"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/"},"wordCount":1923,"commentCount":0,"publisher":{"@id":"https:\/\/www.hashmicro.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/01\/Step-by-Step-Guide-to-Paying-CPF-Contributions.webp","articleSection":["HRM"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/","url":"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/","name":"CPF Contribution Singapore Guide for Employers","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/#primaryimage"},"image":{"@id":"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/01\/Step-by-Step-Guide-to-Paying-CPF-Contributions.webp","datePublished":"2026-03-23T04:13:44+00:00","dateModified":"2026-04-06T09:44:59+00:00","description":"Get the latest CPF contribution Singapore rates, ceilings, and employer steps. Use this guide to stay compliant and run payroll accurately.","breadcrumb":{"@id":"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/#primaryimage","url":"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/01\/Step-by-Step-Guide-to-Paying-CPF-Contributions.webp","contentUrl":"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2026\/01\/Step-by-Step-Guide-to-Paying-CPF-Contributions.webp","width":1024,"height":1536,"caption":"Step-by-Step Guide to Paying CPF Contributions"},{"@type":"BreadcrumbList","@id":"https:\/\/www.hashmicro.com\/blog\/cpf-contribution-singapore\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.hashmicro.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Singapore CPF Contribution Guide for Employers"}]},{"@type":"WebSite","@id":"https:\/\/www.hashmicro.com\/blog\/#website","url":"https:\/\/www.hashmicro.com\/blog\/","name":"BusinessTech","description":"Business Management Blog","publisher":{"@id":"https:\/\/www.hashmicro.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.hashmicro.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.hashmicro.com\/blog\/#organization","name":"HashMicro","url":"https:\/\/www.hashmicro.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hashmicro.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2016\/02\/bt_logo-1.png","contentUrl":"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2016\/02\/bt_logo-1.png","width":334,"height":51,"caption":"HashMicro"},"image":{"@id":"https:\/\/www.hashmicro.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/web.facebook.com\/hashmicro\/","https:\/\/x.com\/hashmicro","https:\/\/www.linkedin.com\/company\/hashmicro"]},{"@type":"Person","@id":"https:\/\/www.hashmicro.com\/blog\/#\/schema\/person\/8ba48ccbeb0c9f5c51940619f406e5e7","name":"Aulia kholqiana","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hashmicro.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/9843219f141142ee7baeaf92522635a6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9843219f141142ee7baeaf92522635a6?s=96&d=mm&r=g","caption":"Aulia kholqiana"},"description":"As a content writer who turns technical complexity into compelling narratives, my words guide businesses through the labyrinth of technology, transforming challenges into opportunities for growth.","url":"https:\/\/www.hashmicro.com\/blog\/author\/auliakholqiana\/"}]}},"order_j":"","_links":{"self":[{"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/posts\/78705","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/users\/218"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/comments?post=78705"}],"version-history":[{"count":2,"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/posts\/78705\/revisions"}],"predecessor-version":[{"id":78978,"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/posts\/78705\/revisions\/78978"}],"wp:attachment":[{"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/media?parent=78705"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/categories?post=78705"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/tags?post=78705"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}