{"id":15125,"date":"2026-01-27T06:56:25","date_gmt":"2026-01-27T06:56:25","guid":{"rendered":"https:\/\/www.hashmicro.com\/my\/blog\/?p=15125"},"modified":"2026-03-04T03:38:07","modified_gmt":"2026-03-04T03:38:07","slug":"payroll-foreign-workers-malaysia","status":"publish","type":"post","link":"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/","title":{"rendered":"Navigating Foreign Worker &#038; Expat Payroll in Malaysia for 2026"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">Managing foreign worker payroll Malaysia is less about \u201crunning payroll\u201d and more about getting statuses, contributions, and tax treatment right every month. One employee might fall under a different SOCSO scheme, another depends on tax residency days. So HR and finance need a workflow that stays consistent under pressure.<\/span><\/p>\n<p>Foreign workers and expatriates also follow different rules on EPF, SOCSO coverage, and how PCB applies. Meanwhile, work pass details and onboarding documents affect what you can deduct and report, so it helps to align your process with the <a href=\"https:\/\/esd.imi.gov.my\/portal\/pdf\/EN%20FAQ%20-%20NEW%20EXPATRIATE%20EMPLOYMENT%20POLICY%20(EFFECTIVE%201%20JUNE%202026).pdf.%5B8\">Malaysia\u2019s New Expatriate Employment Policy<\/a>. As a result, a small classification slip can create messy corrections later.<\/p>\n<p><span style=\"font-weight: 400;\">This guide breaks down the key differences, the mandatory payroll components, and the end-to-end process you can follow for 2026. It also highlights common payroll pitfalls and how teams typically fix them with clearer data checks and better systems. That way, you can run payroll confidently without second-guessing each cycle.<\/span><\/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: #8a0e19; color: #ffffff; padding: 5px;\"><b>Key Takeaways<\/b><\/span><\/h3>\n<ul>\n<li aria-level=\"1\"><a href=\"#1\">Foreign worker payroll Malaysia<\/a> runs smoother when HR and finance agree on the same employee status and deduction rules before every cycle.<\/li>\n<li aria-level=\"1\">A consistent <a href=\"#2\">checklist and approval flow<\/a> keeps EPF, SOCSO, and PCB handling cleaner across teams.<\/li>\n<li aria-level=\"1\">When volume grows, a central payroll workflow with clear audit trails <a href=\"#3\">reduces manual follow-ups<\/a> and makes reporting easier.<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><!-- <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\">Content Lists<\/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<!-- TOC mobile -->\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<!-- TOC mobile -->\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}\r\n\t\t#toc_group_article {\r\n\t\t\tdisplay:none;\r\n\t\t}\t\t\t\t\r\n\t}\r\n\r\n<\/style>\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<!-- START 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<!-- END ToC styling  -->\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<\/script>\r\n\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\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', '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\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\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;} \/\/ Biar ga nampilin Key Takeaways di ToC\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\t\/\/ Dapatkan elemen ul dengan id 'list_toc_float'\r\nconst ulFloat = document.getElementById('list_toc');\r\nconst ulJourney = document.getElementById('list_journey');\r\n\r\n\/\/ Dapatkan 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\r\n\r\n\r\n\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<!-- \t<style>#toc_group_float{display:block !important}<\/style> -->\r\n<span id=\"1\"><\/span><\/p>\n<h2><b>Understanding Payroll Differences: Foreign Workers vs. Expatriates in Malaysia<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">Before proceeding, it is crucial to understand the key distinction between a foreign worker and an expatriate in Malaysia. This status difference affects payroll, mandatory contributions, and taxes. Thus, clear classification helps prevent penalties and ensures accurate, compliant payroll each cycle.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Proper classification protects the company from legal issues and ensures each employee\u2019s rights and obligations follow regulations. In turn, this knowledge streamlines administration and builds trust. The next section explains how each status affects payroll in Malaysia.<\/span><\/p>\n<h3><b>1. Definition and categories of foreign worker<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Foreign workers generally refer to non-citizen labour employed in specific sectors such as manufacturing, construction, plantation, agriculture, and services. They typically hold a Visit Pass (Temporary Employment) and their recruitment is strictly regulated by the Ministry of Human Resources and the Immigration Department of Malaysia.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">From a payroll perspective, their mandatory contributions differ significantly from local workers. For instance, they are covered under a specific SOCSO scheme and are generally not required to contribute to the EPF unless they voluntarily opt-in, which alters the <a href=\"https:\/\/www.hashmicro.com\/my\/blog\/gross-pay\/\">payroll calculation process<\/a>.<\/span><\/p>\n<h3><b>2. Definition and categories of expatriate<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">An expatriate is a foreign professional, managerial, or technical worker possessing specific qualifications and experience required by a company in Malaysia. They usually hold an Employment Pass, which is categorized (Category I, II, III) based on their salary level and contract duration.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The payroll treatment for expatriates is more complex, particularly in determining their tax residency status. This status directly impacts their <a href=\"https:\/\/www.hashmicro.com\/my\/blog\/tax-deduction\/\">Monthly Tax Deduction (PCB)<\/a> rate and their obligation to contribute to the Employees Provident Fund (EPF) in the same manner as local employees, making accurate status tracking essential for compliance.<\/span><\/p>\n<h3><b>3. Implications of status differences on the payroll process<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">The primary implication of this status difference lies in the type and amount of mandatory contributions payable by both the employer and the employee. For example, employers must register foreign workers under PERKESO&#8217;s Employment Injury Scheme, whereas qualifying expatriates are registered under the same scheme as local workers.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Furthermore, the income tax calculation (PCB) for an expatriate heavily depends on their tax residency status, determined by their physical presence in Malaysia for 182 days or more in a calendar year, which dictates whether they are subject to progressive tax rates or a higher flat rate.<\/span><\/p>\n<h2><b>Mandatory Payroll Components for Foreign Workers in Malaysia<\/b><\/h2>\n<p><span style=\"font-weight: 400;\"><a href=\"https:\/\/www.hashmicro.com\/my\/blog\/best-payroll-software\/\">Managing payroll in Malaysia<\/a>, especially for foreign employees, requires a clear grasp of each statutory contribution. Each has its own rules, rates, and purpose, so employers must comply to avoid sanctions. Ultimately, these components create a social safety net that protects workers.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Failure to calculate or remit these contributions on time can lead to heavy fines and legal issues. Therefore, HR and finance must master each component. This section explains the key mandatory contributions for foreign workers and expatriates in Malaysia to keep your payroll compliant.<\/span><\/p>\n<h3><b>1. Employees Provident Fund (KWSP\/EPF)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">The <\/span><a href=\"https:\/\/www.kwsp.gov.my\/\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">Employees Provident Fund<\/span><\/a><span style=\"font-weight: 400;\"> is a compulsory retirement scheme for Malaysian employees. For foreign workers, contributions are optional. However, for some expatriates, EPF can become mandatory once they opt in, so employers must verify each employee\u2019s status to avoid errors and penalties.<\/span><\/p>\n<h3><b>2. Social Security Organisation (PERKESO\/SOCSO)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">For foreign workers, SOCSO contributions under <\/span><a href=\"https:\/\/www.perkeso.gov.my\/\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">PERKESO<\/span><\/a><span style=\"font-weight: 400;\">\u2019s Employment Injury Scheme are mandatory. This scheme offers medical and financial protection for workplace accidents and diseases. Therefore, employers must apply the correct 1.25% rate to ensure proper coverage and compliance.<\/span><\/p>\n<h3><b>3. Employment Insurance System (SIP\/EIS)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">The Employment Insurance System (EIS) provides temporary financial support to workers who lose their jobs. However, only Malaysian citizens must contribute. Foreign workers and expatriates are exempt, so EIS should be excluded from non-citizen payroll to avoid over-contribution.<\/span><\/p>\n<h3><b>4. Monthly Tax Deduction (PCB\/MTD)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">The Monthly Tax Deduction (MTD), or Potongan Cukai Bulanan (PCB), deducts income tax from monthly salary. PCB for foreign workers and expatriates depends on tax residency. Residents (182 days or more) face progressive rates, while non-residents face a 30% flat rate without any reliefs from the <\/span><a href=\"https:\/\/www.hasil.gov.my\/\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">Inland Revenue Board of Malaysia (LHDN)<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n<h3><b>5. Human Resource Development Corporation (HRD Corp Levy)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Companies in certain sectors with at least 10 employees must register with HRD Corp and pay a monthly levy, usually 1% of wages. This obligation includes foreign workers and expatriates, and it funds training programs that help upskill the workforce.<span id=\"2\"><\/span><\/span><\/p>\n<h2><b>The End-to-End Payroll Process for Foreign Workers<\/b><\/h2>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-15179 size-full\" src=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/01\/ChatGPT-Image-Jan-27-2026-10_58_55-AM.webp\" alt=\"The End-to-End Payroll Process for Foreign Workers\" width=\"1024\" height=\"1536\" srcset=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/01\/ChatGPT-Image-Jan-27-2026-10_58_55-AM.webp 1024w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/01\/ChatGPT-Image-Jan-27-2026-10_58_55-AM-200x300.webp 200w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/01\/ChatGPT-Image-Jan-27-2026-10_58_55-AM-683x1024.webp 683w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/01\/ChatGPT-Image-Jan-27-2026-10_58_55-AM-768x1152.webp 768w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/01\/ChatGPT-Image-Jan-27-2026-10_58_55-AM-280x420.webp 280w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/01\/ChatGPT-Image-Jan-27-2026-10_58_55-AM-150x225.webp 150w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/01\/ChatGPT-Image-Jan-27-2026-10_58_55-AM-300x450.webp 300w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/01\/ChatGPT-Image-Jan-27-2026-10_58_55-AM-696x1044.webp 696w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Executing payroll for foreign workers is more than calculating numbers. Instead, it is a monthly cycle that requires precision from data collection to final reporting. When each step is handled carefully, it ensures accuracy, compliance, and trust with employees.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">By fully understanding this workflow, companies can build an efficient system, reduce human error, and keep operations smooth each month. In addition, a structured workflow gives management peace of mind and strengthens employee confidence in how their pay is managed.<\/span><\/p>\n<h3><b>1. Pre-payroll stage (onboarding and data verification)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">This stage is the foundation of payroll and starts when a foreign employee joins. HR must collect and verify key documents, then enter them accurately into the system. Otherwise, errors in IDs or visa status can cause calculation and reporting issues, leading to non-compliance and dissatisfaction.<\/span><\/p>\n<h3><b>2. Payroll calculation stage (accurate computation)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">This is the core of payroll, where all salary components are calculated. It covers basic pay, allowances, overtime, and deductions. For foreign workers, calculations must include SOCSO and PCB based on status and tax residency to ensure correct net pay and full compliance.<\/span><\/p>\n<h3><b>3. Post-payroll stage (payment and reporting)<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Once calculations are verified, the company disburses salaries via bank transfer. At the same time, it issues detailed payslips for transparency. Finally, it must remit SOCSO, PCB, and HRD Corp Levy on time to avoid penalties and keep good standing with the authorities.<span id=\"3\"><\/span><\/span><\/p>\n<h2><b>Common Challenges in Managing Foreign Worker Payroll and Their Solutions<\/b><\/h2>\n<p><span style=\"font-weight: 400;\">While hiring foreign talent can boost innovation and productivity, payroll administration brings unique challenges, from shifting regulations to data security risks. If not managed with the right strategies, these issues can waste time, drain resources, and increase legal and financial risk.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">However, each of these challenges has a practical solution, especially with modern technology. By spotting issues early and applying proactive fixes, companies can turn a cumbersome payroll process into an efficient, compliant, and well-managed operation.<\/span><\/p>\n<h3><b>1. Complex and frequently changing regulations<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Employment and tax regulations in Malaysia change frequently, so HR must track updates from LHDN, KWSP, and PERKESO. Instead, companies can subscribe to official updates, join HR seminars, or use payroll software that auto updates, which reduces manual monitoring and keeps payroll compliant.<\/span><\/p>\n<h3><b>2. Complicated tax and contribution calculations<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Determining tax residency and the correct PCB rate for expatriates is one of the most complex payroll tasks. Even small errors can cause audit issues. Therefore, using automated payroll software with LHDN based formulas helps reduce human error and protects the company from penalties.<\/span><\/p>\n<h3><b>3. Data management and information security<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Managing sensitive data for many foreign employees requires secure, centralized storage. Relying on scattered spreadsheets increases breach and inconsistency risks. Therefore, a cloud-based HRIS with payroll, encryption, and role-based access is vital to protect data and ensure integrity.<\/span><\/p>\n<h3><b>4. Limitations of manual processes<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Manual payroll using spreadsheets is prone to data entry mistakes, formula errors, and wasted time. It also complicates tracking and reporting. Therefore, using robust <\/span><span style=\"font-weight: 400;\">payroll software<\/span><span style=\"font-weight: 400;\"> to automate calculations, payslips, and reports saves time and greatly improves accuracy and efficiency.<\/span><\/p>\n<h2><strong>The Role of HR Software in Optimizing Payroll Processes\u00a0<\/strong><\/h2>\n<h2><strong><img decoding=\"async\" class=\"aligncenter size-full wp-image-15131\" src=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/01\/Payroll-software-scaled.webp\" alt=\"Dashboard Payroll Software\" width=\"2560\" height=\"1325\" srcset=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/01\/Payroll-software-scaled.webp 2560w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/01\/Payroll-software-300x155.webp 300w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/01\/Payroll-software-1024x530.webp 1024w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/01\/Payroll-software-768x398.webp 768w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/01\/Payroll-software-1536x795.webp 1536w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/01\/Payroll-software-2048x1060.webp 2048w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/01\/Payroll-software-811x420.webp 811w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/01\/Payroll-software-150x78.webp 150w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/01\/Payroll-software-696x360.webp 696w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/01\/Payroll-software-1068x553.webp 1068w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/01\/Payroll-software-1920x994.webp 1920w\" sizes=\"(max-width: 2560px) 100vw, 2560px\" \/><\/strong><\/h2>\n<p>Regulations are complex, so manual foreign worker payroll often slows teams down and increases rework. Many businesses switch to integrated HR software with payroll modules for faster, more accurate processing. HashMicro offers<a href=\"https:\/\/www.hashmicro.com\/my\/human-resource-management\"> HR and integrated payroll software<\/a> to support a smoother, more automated workflow.<\/p>\n<h3><b>1. Automation of tax and mandatory contribution calculations<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">One key advantage of payroll software is its ability to automate complex calculations. For example, HashMicro\u2019s Payroll Software computes PCB, SOCSO, and HRD Corp Levy from stored data and current rules. This removes manual errors, keeps payslips accurate, and saves time.<\/span><\/p>\n<h3><b>2. Maintained regulatory compliance<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Leading payroll software providers keep their systems aligned with the latest Malaysian labour and tax laws. When <a href=\"https:\/\/www.hashmicro.com\/my\/blog\/malaysia-service-tax-expansion-guide\/\">new tax rates or rules<\/a> are announced, the system updates automatically. This reduces manual tracking, maintains compliance, and helps lower overall regulatory risk..<\/span><\/p>\n<h3><b>3. Secure centralization of employee data<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">An integrated HR software centralizes all employee data, from personal details and work permits to payroll history. With a secure cloud system, authorized staff can access updated records easily, which strengthens data security and keeps information consistent across departments.<\/span><\/p>\n<h3><b>4. Comprehensive and automated report generation<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Payroll software makes monthly and audit reporting much easier. With a few clicks, you can generate salary summaries, statutory contribution reports, and Form E. This cuts report prep time and provides accurate, real time data for decisions and on time filings.<\/span><\/p>\n<h2><strong>Conclusion<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Running foreign worker payroll Malaysia for 2025 works best when you treat classification and documentation as part of payroll, not a separate admin task. Work pass status, tax residency, and statutory treatment shape what you calculate and what you must report. So, a consistent process matters as much as the pay run itself.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The biggest takeaway is simple: payroll becomes predictable when HR and finance agree on one source of truth. When employee status changes, contribution settings, PCB treatment, and reporting fields should update in the same workflow, not through scattered emails. This reduces retroactive corrections and keeps compliance checks calmer.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">To keep things steady, standardize onboarding data, set clear approvals, and run a brief checklist each cycle. Then review exceptions early, especially for status changes. If you want a second opinion, a <\/span><a href=\"https:\/\/www.hashmicro.com\/my\/free-product-demo\/\"><span style=\"font-weight: 400;\">free consultation<\/span><\/a><span style=\"font-weight: 400;\"> can help map steps and spot gaps before they hit payroll.<\/span><\/p>\n<h2><strong>FAQ about Foreign Worker Payroll Malaysia<\/strong><\/h2>\n<ul class=\"bottom_faq\">\n<li>\n<details>\n<summary><strong>Is EPF\/KWSP contribution mandatory for all foreign workers in Malaysia?<br \/>\n<\/strong><\/summary>\n<p>No, EPF contribution is not mandatory for foreign workers holding a Visit Pass (Temporary Employment), though they can opt-in. However, it is mandatory for expatriates on an Employment Pass, similar to Malaysian citizens.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>How is tax (PCB) calculated for an expatriate working less than 182 days?<br \/>\n<\/strong><\/summary>\n<p>Expatriates in Malaysia for less than 182 days are non-tax residents and are subject to a flat tax rate of 30% on their income. They are not eligible for the tax reliefs available to residents.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>What primary documents are needed for a foreign worker&#8217;s payroll onboarding?<br \/>\n<\/strong><\/summary>\n<p>Key documents include a valid passport copy, a valid work permit or employment pass, an active local bank account number, and a completed personal data information form for system entry.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>Can payroll software handle salaries paid in foreign currency?<br \/>\n<\/strong><\/summary>\n<p>Yes, many modern payroll systems, including HashMicro&#8217;s, feature multi-currency capabilities. This allows companies to set salaries in a foreign currency and automatically convert it to MYR for statutory calculations based on prevailing exchange rates.<\/p>\n<\/details>\n<\/li>\n<\/ul>\n<p><script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [{\n    \"@type\": \"Question\",\n    \"name\": \"Is EPF\/KWSP contribution mandatory for all foreign workers in Malaysia?\",\n    \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"No, EPF contribution is not mandatory for foreign workers holding a Visit Pass (Temporary Employment), though they can opt-in. However, it is mandatory for expatriates on an Employment Pass, similar to Malaysian citizens.\"\n    }\n  },{\n    \"@type\": \"Question\",\n    \"name\": \"How is tax (PCB) calculated for an expatriate working less than 182 days?\",\n    \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"Expatriates in Malaysia for less than 182 days are non-tax residents and are subject to a flat tax rate of 30% on their income. They are not eligible for the tax reliefs available to residents.\"\n    }\n  },{\n    \"@type\": \"Question\",\n    \"name\": \"What primary documents are needed for a foreign worker's payroll onboarding?\",\n    \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"Key documents include a valid passport copy, a valid work permit or employment pass, an active local bank account number, and a completed personal data information form for system entry.\"\n    }\n  },{\n    \"@type\": \"Question\",\n    \"name\": \"Can payroll software handle salaries paid in foreign currency?\",\n    \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"Yes, many modern payroll systems, including HashMicro's, feature multi-currency capabilities. This allows companies to set salaries in a foreign currency and automatically convert it to MYR for statutory calculations based on prevailing exchange rates.\"\n    }\n  }]\n}\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Managing foreign worker payroll Malaysia is less about \u201crunning payroll\u201d and more about getting statuses, contributions, and tax treatment right every month. One employee might fall under a different SOCSO scheme, another depends on tax residency days. So HR and finance need a workflow that stays consistent under pressure. Foreign workers and expatriates also follow [&hellip;]<\/p>\n","protected":false},"author":17,"featured_media":15188,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-15125","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-other"},"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>Navigating Foreign Worker &amp; Expat Payroll in Malaysia for 2026<\/title>\n<meta name=\"description\" content=\"Master foreign worker and expat payroll in Malaysia in 2026. Understand EPF, SOCSO, PCB, and key compliance steps. Read the full guide now.\" \/>\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\/my\/blog\/payroll-foreign-workers-malaysia\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Navigating Foreign Worker &amp; Expat Payroll in Malaysia for 2026\" \/>\n<meta property=\"og:description\" content=\"Master foreign worker and expat payroll in Malaysia in 2026. Understand EPF, SOCSO, PCB, and key compliance steps. Read the full guide now.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/\" \/>\n<meta property=\"og:site_name\" content=\"HashMicro Malaysia\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-27T06:56:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-04T03:38:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/01\/foreign-worker-payroll-Malaysia-1.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=\"Fahrul Muharman\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fahrul Muharman\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/\"},\"author\":{\"name\":\"Fahrul Muharman\",\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/#\/schema\/person\/e53eebf1739b93c84a26161052745bb6\"},\"headline\":\"Navigating Foreign Worker &#038; Expat Payroll in Malaysia for 2026\",\"datePublished\":\"2026-01-27T06:56:25+00:00\",\"dateModified\":\"2026-03-04T03:38:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/\"},\"wordCount\":1999,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/01\/foreign-worker-payroll-Malaysia-1.webp\",\"articleSection\":[\"Other\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/\",\"url\":\"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/\",\"name\":\"Navigating Foreign Worker & Expat Payroll in Malaysia for 2026\",\"isPartOf\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/01\/foreign-worker-payroll-Malaysia-1.webp\",\"datePublished\":\"2026-01-27T06:56:25+00:00\",\"dateModified\":\"2026-03-04T03:38:07+00:00\",\"description\":\"Master foreign worker and expat payroll in Malaysia in 2026. Understand EPF, SOCSO, PCB, and key compliance steps. Read the full guide now.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/#primaryimage\",\"url\":\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/01\/foreign-worker-payroll-Malaysia-1.webp\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/01\/foreign-worker-payroll-Malaysia-1.webp\",\"width\":1200,\"height\":675},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.hashmicro.com\/my\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Navigating Foreign Worker &#038; Expat Payroll in Malaysia for 2026\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/#website\",\"url\":\"https:\/\/www.hashmicro.com\/my\/blog\/\",\"name\":\"HashMicro Malaysia\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.hashmicro.com\/my\/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\/my\/blog\/#organization\",\"name\":\"HashMicro Malaysia\",\"url\":\"https:\/\/www.hashmicro.com\/my\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/09\/logo.webp\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/09\/logo.webp\",\"width\":422,\"height\":255,\"caption\":\"HashMicro Malaysia\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/#\/schema\/person\/e53eebf1739b93c84a26161052745bb6\",\"name\":\"Fahrul Muharman\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/99e31d39c20b9ea905fbdbdf36ef26ee?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/99e31d39c20b9ea905fbdbdf36ef26ee?s=96&d=mm&r=g\",\"caption\":\"Fahrul Muharman\"},\"url\":\"https:\/\/www.hashmicro.com\/my\/blog\/author\/fahrul-muharman\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Navigating Foreign Worker & Expat Payroll in Malaysia for 2026","description":"Master foreign worker and expat payroll in Malaysia in 2026. Understand EPF, SOCSO, PCB, and key compliance steps. Read the full guide now.","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\/my\/blog\/payroll-foreign-workers-malaysia\/","og_locale":"en_US","og_type":"article","og_title":"Navigating Foreign Worker & Expat Payroll in Malaysia for 2026","og_description":"Master foreign worker and expat payroll in Malaysia in 2026. Understand EPF, SOCSO, PCB, and key compliance steps. Read the full guide now.","og_url":"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/","og_site_name":"HashMicro Malaysia","article_published_time":"2026-01-27T06:56:25+00:00","article_modified_time":"2026-03-04T03:38:07+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/01\/foreign-worker-payroll-Malaysia-1.webp","type":"image\/webp"}],"author":"Fahrul Muharman","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Fahrul Muharman","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/#article","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/"},"author":{"name":"Fahrul Muharman","@id":"https:\/\/www.hashmicro.com\/my\/blog\/#\/schema\/person\/e53eebf1739b93c84a26161052745bb6"},"headline":"Navigating Foreign Worker &#038; Expat Payroll in Malaysia for 2026","datePublished":"2026-01-27T06:56:25+00:00","dateModified":"2026-03-04T03:38:07+00:00","mainEntityOfPage":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/"},"wordCount":1999,"commentCount":0,"publisher":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/#organization"},"image":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/01\/foreign-worker-payroll-Malaysia-1.webp","articleSection":["Other"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/","url":"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/","name":"Navigating Foreign Worker & Expat Payroll in Malaysia for 2026","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/#primaryimage"},"image":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/01\/foreign-worker-payroll-Malaysia-1.webp","datePublished":"2026-01-27T06:56:25+00:00","dateModified":"2026-03-04T03:38:07+00:00","description":"Master foreign worker and expat payroll in Malaysia in 2026. Understand EPF, SOCSO, PCB, and key compliance steps. Read the full guide now.","breadcrumb":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/#primaryimage","url":"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/01\/foreign-worker-payroll-Malaysia-1.webp","contentUrl":"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/01\/foreign-worker-payroll-Malaysia-1.webp","width":1200,"height":675},{"@type":"BreadcrumbList","@id":"https:\/\/www.hashmicro.com\/my\/blog\/payroll-foreign-workers-malaysia\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.hashmicro.com\/my\/blog\/"},{"@type":"ListItem","position":2,"name":"Navigating Foreign Worker &#038; Expat Payroll in Malaysia for 2026"}]},{"@type":"WebSite","@id":"https:\/\/www.hashmicro.com\/my\/blog\/#website","url":"https:\/\/www.hashmicro.com\/my\/blog\/","name":"HashMicro Malaysia","description":"","publisher":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.hashmicro.com\/my\/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\/my\/blog\/#organization","name":"HashMicro Malaysia","url":"https:\/\/www.hashmicro.com\/my\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hashmicro.com\/my\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/09\/logo.webp","contentUrl":"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/09\/logo.webp","width":422,"height":255,"caption":"HashMicro Malaysia"},"image":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.hashmicro.com\/my\/blog\/#\/schema\/person\/e53eebf1739b93c84a26161052745bb6","name":"Fahrul Muharman","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hashmicro.com\/my\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/99e31d39c20b9ea905fbdbdf36ef26ee?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/99e31d39c20b9ea905fbdbdf36ef26ee?s=96&d=mm&r=g","caption":"Fahrul Muharman"},"url":"https:\/\/www.hashmicro.com\/my\/blog\/author\/fahrul-muharman\/"}]}},"order_j":"","_links":{"self":[{"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/posts\/15125","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/users\/17"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/comments?post=15125"}],"version-history":[{"count":12,"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/posts\/15125\/revisions"}],"predecessor-version":[{"id":17095,"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/posts\/15125\/revisions\/17095"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/media\/15188"}],"wp:attachment":[{"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/media?parent=15125"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/categories?post=15125"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/tags?post=15125"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}