{"id":180373,"date":"2025-12-11T13:42:58","date_gmt":"2025-12-11T06:42:58","guid":{"rendered":"https:\/\/www.hashmicro.com\/id\/blog\/?p=180373"},"modified":"2026-01-19T08:39:39","modified_gmt":"2026-01-19T01:39:39","slug":"capacity-requirements-planning","status":"publish","type":"post","link":"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/","title":{"rendered":"Panduan Lengkap Capacity Requirements Planning"},"content":{"rendered":"<p>Apakah perusahaan Anda yakin dapat memenuhi permintaan produksi tanpa hambatan kapasitas? Capacity Requirements Planning (CRP) adalah metode perencanaan produksi yang mengevaluasi apakah kapasitas tenaga kerja dan mesin tersedia untuk memenuhi jadwal produksi yang ditetapkan.<\/p>\n<p>Di Indonesia, pengendalian proses produksi juga makin terkait kepatuhan perizinan berbasis risiko lewat <a href=\"https:\/\/peraturan.bpk.go.id\/Details\/333111\/permenperin-no-37-tahun-2025\" target=\"_blank\" rel=\"noopener\">Permenperin No. 37 Tahun 2025<\/a> yang memuat standar kegiatan usaha dan\/atau standar produk\/jasa di sektor perindustrian. Artinya, perusahaan perlu memastikan prosesnya terukur dan terdokumentasi, bukan hanya berjalan berdasarkan kebiasaan.<\/p>\n<p>Dengan menerapkan CRP, perusahaan dapat mengidentifikasi titik-titik kelebihan dan kekurangan beban kerja pada setiap pusat kerja, memastikan bahwa jadwal produksi realistis dan sumber daya tidak terbuang sia-sia.<\/p>\n<table style=\"border-collapse: collapse; background-color: #fffacd; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); border-radius: 25px 25px 25px 25px;\" width=\"100%\">\n<tbody>\n<tr>\n<td style=\"padding: 15px; border: none;\">\n<h3 style=\"margin-bottom: 10px;\"><span style=\"background-color: #990000; color: #ffffff; padding: 5px;\"><b>Key Takeaways<\/b><\/span><\/h3>\n<ul>\n<li aria-level=\"1\"><a href=\"#a\">CRP adalah<\/a> proses menentukan jumlah tenaga kerja dan sumber daya mesin yang dibutuhkan untuk mencapai target produksi sesuai jadwal yang direncanakan.<\/li>\n<li aria-level=\"1\"><a href=\"#b\">Tujuan utamanya adalah<\/a> menyeimbangkan beban kerja (<em>load<\/em>) dengan kapasitas (<em>capacity<\/em>) yang tersedia untuk efisiensi maksimal.<\/li>\n<li>Dengan bantuan <a href=\"https:\/\/www.hashmicro.com\/id\/blog\/daftar-5-software-manufaktur-terbaik-di-indonesia\/\">software untuk bisnis manufaktur<\/a>, perusahaan mampu mengoptimalkan capacity requirements planning dengan perhitungan kapasitas otomatis yang memastikan produksi tetap lancar dan efisien.<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span data-sheets-root=\"1\"><div id=\"toc_group_article\" style=''>\r\n\t<p style='font-size:25px;font-weight:bold; margin-bottom:0px'>\r\n\t\tDaftar Isi:\r\n\t<\/p>\r\n\t<ul id=\"list_toc\" class='list_toc'><\/ul>\r\n<\/div>\r\n\r\n<div id=\"placeholder-toc\"><\/div>\r\n<div id=\"toc\">\r\n    <div class=\"header\">\r\n\t<span class=\"toc-title\" id=\"toc-title\">Daftar Isi<\/span>\t\r\n\t <i class=\"toc-icon\">\r\n        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"30\" height=\"30\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#000\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"header-icon\">\r\n          <path d=\"m6 9 6 6 6-6\" \/>\r\n        <\/svg>\r\n      <\/i>\r\n\t<\/div>\r\n    <div class=\"list\">\r\n      <ul id=\"toc-list\"><\/ul>\r\n    <\/div>\r\n <\/div>\r\n\r\n<style>\r\n\/* Simple styling for the TOC *\/\r\n\t\r\n\t#toc ul li:last-child {\r\n    padding-bottom: 16px; \/* Adjust the value as needed *\/\r\n}\r\n\r\n.td-fix-index {\r\n\t transform: unset !important;\r\n     -webkit-transform: unset !important; \r\n}\r\n.footer-contact .td-fix-index {\r\n\t transform: translateZ(0) !important;\r\n     -webkit-transform: translateZ(0) !important; \r\n}\r\n\t.tdb_single_content .tdb-block-inner.td-fix-index{\r\n\t\tposition: static;\r\n\t}\r\n\t\r\n\r\n\r\n\t\r\n#toc {\r\n  background-color: #FFF;\r\n\tpadding: 17px 24px 0px 24px !important;\r\n  margin-bottom: 20px;\r\n\/*   border: 1px solid #9C171E; *\/\r\n  border-radius: 6px;\r\n\tdisplay: none;\r\n  max-width: 100%;\r\n  transition: .4s ease height;\r\n\tmargin-left: 0;\r\n\toverflow: hidden;\r\n}\r\n\r\n#toc .header{\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n\tbackground-color: transparent;\r\n}\r\n\t\r\n\t#toc.sticky .header{\r\n\t\tpadding: 4px 0;\r\n\t}\r\n\t\r\n.header p{\r\n  font-size: 18px !important;\r\n  font-weight: 600 !important;\r\n  color: #393939;\r\n   margin-bottom: 0;\r\n  \/* margin-top: 20px; *\/\r\n}\r\n\r\n.toc-icon{\r\n  float: right;\r\n\/*   visibility: hidden; *\/\r\n}\r\n\r\n\t.toc-title{\r\n\t\tmargin-right: auto;\r\n\/* \t\tpadding-left: 20px; *\/\r\n\t\tfont-weight: 600;\r\n\t\talign-self: center;\t}\t\r\n\r\n#toc ul {\r\n  list-style-type: none;\r\n  padding-left: 0;\r\n}\r\n\t\r\n#toc.sticky ul{\r\n\toverflow-y: auto;\r\n\tmax-height: 250px;\r\n\tmargin-top: 0px;\r\n\tpadding-top: 20px;\r\n\/* \tborder-top: 1px solid #d3d3d3; *\/\r\n}\r\n\t\r\n#toc ul li {\r\n\/*   margin-bottom: 10px; *\/\r\n  margin-bottom: 10px;\r\n\tmargin-left: 0;\r\n\ttransition: .2s ease;\r\n\tcursor: pointer;\r\n}\r\n\t\r\n\t#toc.sticky ul li {\r\n\t  margin-right: 10px;\r\n\t}\r\n\t\r\n.td-post-content #toc-list li a:hover, .td-post-content #toc-list a.active{\r\n\tbackground-color: #FFF;\r\n\/* \tpadding: 8px 16px 8px 16px; *\/\r\n\tpadding: 4px 16px 4px 16px;\r\n\tborder-radius: 6px;\r\n\tcolor: #9c171e !important;\r\n\tfont-weight: 600 !important;\r\n}\r\n\t\r\n\t.td-post-content #toc-list li:hover a, .td-post-content #toc-list a.active{\r\n\t\tcolor: #9C171E !important;\r\n\t\tfont-weight: 600 !important;\r\n\t}\r\n\t\r\n.td-post-content #toc-list a.active{\r\n\tfont-weight: bold !important;\r\n\tcolor: #9C171E !important;\r\n}\r\n\t\r\n#toc a, .td-post-content #toc-list a {\r\n  text-decoration: none;\r\n  color: #ea1717 !important;\r\n  transition: .2s ease;\r\n\tfont-weight: 400 !important;\r\n\tdisplay: block;\r\n\t\r\n\tpadding: 4px 16px 4px 0;\r\n}\r\n\r\n#toc.sticky {\r\n  position: fixed;\r\n\/*   top: 73px; *\/\r\n\tbottom: 0;\r\n  z-index: 100; \r\n  box-shadow: 0 2px 5px rgba(0,0,0,0.1); \r\n\twidth: 100%; \r\n\tbackground-color: #FFF;\r\n\/* \tbackground-color: #FFF1F1; *\/\r\n\tborder-bottom: 1px solid #ea1717;\r\n\/*   border: 1px solid #393939; *\/\r\n  box-shadow: 0px 0px 14px 0px #00000040;\r\n  cursor: pointer;\r\n\tanimation: fadein .3s ease;\r\n\tpadding: 12px 16px !important;\r\n}\r\n\t\r\n\t.fadein{\r\n\t\tanimation: fadein .3s ease;\r\n\t}\r\n\t\r\n\t.fadeout{\r\n\t\tanimation: fadeout .3s ease;\r\n\t}\r\n\t\r\n\t\r\n\t@keyframes fadein{\r\n\t\t0% {\r\n\t\t\topacity: 0;\r\n\t\t}\r\n\t\t100%{\r\n\t\t\topacity: 1;\r\n\t\t}\r\n\t}\r\n\t\r\n\t@keyframes fadeout{\r\n\t\t0% {\r\n\t\t\topacity: 1;\r\n\t\t}\r\n\t\t100%{\r\n\t\t\topacity: 0;\r\n\t\t}\r\n\t}\r\n\r\n\t\r\n#toc.sticky .header p{\r\n\tmargin-bottom: 10px;\r\n\tmargin-top: 10px;\r\n}\r\n\r\n#toc.sticky .toc-icon{\r\n  visibility: visible;\r\n\/* \ttransition: 0.4s ease; *\/\r\n}\r\n\t\r\n\t.toc-icon{\r\n\t\talign-items: center;\r\n    \tdisplay: flex;\r\n\t}\r\n\t\r\n\tsvg.header-icon{\r\n\/* \t\tbackground-color: #9c171e; *\/\r\n\t\tbackground-color: #FFF;\r\n\t\tborder-radius: 30px;\r\n\t\tpadding: 5px;\r\n\t}\r\n\r\n#toc.sticky .list{\r\n\/*   max-height: 0; *\/\r\n  transition: height 0.4s ease;\r\n}\r\n\t\r\n\t#toc .list{\r\n\/*   max-height: 0; *\/\r\n  transition: height 0.4s ease;\r\n}\r\n\r\n#toc .header.active .toc-icon{\r\n\ttransform: rotate(0deg); \r\n\topacity: 1;\r\n}\r\n\r\n\t#toc .header.active + .list {\r\n\t  max-height: 200px; \/* Adjust this value as needed *\/\r\n\t  opacity: 1;\r\n\t}\r\n\t\r\n\t#placeholder-toc{\r\n\/* \t\tdisplay: none; *\/\r\n\t}\r\n\t\r\n\t@media (min-width: 768px) and (max-width: 991px){\r\n\t\t#toc.sticky{\r\n\/* \t\t\ttop: 104px; *\/\r\n\t\t\tbottom: 0px;\r\n\t\t}\r\n\t\t\r\n\t\t#toc{\r\n\t\t\twidth: unset !important;\r\n\t\t}\r\n\t}\r\n\t\r\n\t@media (max-width: 767px){\r\n\t\t#toc{\r\n\t\t\twidth: 100% !important;\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\t\t\r\n\t\t#toc.sticky{\r\n\t\t\twidth: 90% !important;\r\n\/* \t\t\ttop: 81px; *\/\r\n\t\t\tbottom: 60px;\r\n\t\t\tmargin-left: auto;\r\n\t\t\tmargin-right: auto;\r\n\t\t\tpadding: 0 16px;\r\n\t\t\tright: 5%;\r\n\t\t}\r\n\t}\r\n\t\r\n\t<\/style>\r\n\r\n<style>\r\n\t#list_toc li {margin-bottom: 0;margin-top: 5px;}\r\n\t#list_toc > li > ul {padding-left: 20px;margin-bottom: 0;}\r\n\t#list_toc{height:max-content;transition:ease-in-out}\r\n\t#list_toc li {margin-bottom: 0;margin-top: 5px;}\r\n\t#list_toc_float li.active > a {color:#b1252d;background: #ffe1e3;}\r\n\t#list_toc_float li a {padding:3px 7px}\r\n\t#list_toc_float li a {\r\n\t\tdisplay: block;\r\n\t\tcolor:#000;\r\n\t\tmargin-bottom: 10px;\r\n\t\ttransition:all 0.2s ease-in-out;\r\n\t\tfont-size:15px\r\n\t}\r\n\t#list_toc_float li{list-style:none;list-style-position:inside; margin-left:0;}\r\n\t#list_toc_float a:hover{color:#b1252d;}\r\n\t\r\n\t#list_toc_float li a{margin-bottom:0px}\r\n\t#toc_group_float{\r\n\t\tline-height: 24px;\r\n\t\tmax-height: calc(100vh - 100px);\r\n\t\toverflow: auto;\r\n\t\tz-index: 99;\r\n\t\tdisplay:none!important;\r\n\t\tbackground:#fff;\r\n\t\ttransition:all 0.5s linear\r\n\t}\r\n\t\r\n\t@media (min-width:1019px){\r\n\t\t#toc_group_float {\r\n\t\t\tdisplay:block!important;\r\n\t\t\t}\r\n\t\t#toc_group_article {\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\t}\r\n\t\r\n\t@media (max-width:768px){\r\n\t\t#toc_group_article {\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\t}\r\n\t\r\n\t \/* custom scrollbar style *\/\r\n::-webkit-scrollbar {\r\n    width: 7px;\r\n}\r\n::-webkit-scrollbar-track {\r\n    background: #d7a2a4;\r\n}\r\n::-webkit-scrollbar-thumb {\r\n    background: #b1252d;\r\n    border-radius: 15px;\r\n}\t\t\r\n\r\n<\/style>\r\n\r\n<script>\r\n\tdocument.addEventListener('DOMContentLoaded', function() {\r\n\t\t\/\/ Fungsi untuk menangani klik pada semua elemen <a> dengan href yang dimulai dengan #\r\n\t\tfunction handleTitleClick(event) {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tconst targetId = this.getAttribute('href').substring(1);\r\n\t\t\tconst targetElement = document.getElementById(targetId);\r\n\r\n\t\t\tif (targetElement) {\r\n\t\t\t\tconst headerHeight = document.querySelector('#toc .header').offsetHeight;\r\n\t\t\t\tconst navbarHeight = document.getElementById('tdi_34') ? document.getElementById('tdi_34').offsetHeight : 0;\r\n\t\t\t\tconst windowHeight = window.innerHeight;\r\n\t\t\t\tconst targetOffset = targetElement.offsetTop;\r\n\t\t\t\tconst scrollTo = targetOffset + (windowHeight \/ 2) + (headerHeight) - navbarHeight - 40;\r\n\r\n\t\t\t\twindow.scrollTo({\r\n\t\t\t\t\ttop: scrollTo,\r\n\t\t\t\t\tbehavior: 'smooth'\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t\/\/ Tambahkan event listener untuk semua elemen <a> di toc-list dan list-toc\r\n\t\tconst titleLinks = document.querySelectorAll('#toc-list a, #list_toc a');\r\n\t\ttitleLinks.forEach(link => {\r\n\t\t\tlink.addEventListener('click', handleTitleClick);\r\n\t\t});\r\n\t});\r\n<\/script>\r\n\r\n<!-- ToC List for mobile -->\r\n<script>\r\n \/\/ Generate TOC based on headings\r\ndocument.addEventListener(\"DOMContentLoaded\", function() {\r\n  \/\/ Get the element that will contain the TOC\r\n  const tocList = document.getElementById('toc-list');\r\n\r\n  \/\/ Get the element with the ID 'article-left'\r\n  const article = document.querySelector('.td-post-content');\r\n\r\n  \/\/ Find all h2 elements within 'myarticle'\r\n  const headers = article.getElementsByTagName('h2');\r\n\r\n  \/\/ Loop through the h2 elements and create a list item for each one\r\n  for (let i = 0; i < headers.length; i++) {\r\n    const header = headers[i];\r\n    const headerText = header.textContent;\r\n\/\/     const headerId = 'header-' + i;\r\n    const headerId = headerText\r\n    .toLowerCase()\r\n    .trim()\r\n    .replace(\/[^\\w\\s-]\/g, '')  \/\/ hapus tanda baca\r\n    .replace(\/\\s+\/g, '-'); \/\/ ganti spasi jadi \"-\"\r\n\r\n    \/\/ Set an ID for the header if it doesn't have one\r\n    header.setAttribute('id', headerId);\r\n\r\n    \/\/ Create a list item for the TOC\r\n    const listItem = document.createElement('li');\r\n\r\n    \/\/ Create a link for the list item\r\n    const link = document.createElement('a');\r\n    link.setAttribute('href', '#' + headerId);\r\n    link.textContent = headerText;\r\n\r\n    \/\/ Append the link to the list item\r\n    listItem.appendChild(link);\r\n\r\n    \/\/ Append the list item to the TOC list\r\n    tocList.appendChild(listItem);\r\n  }\r\n});\r\n\r\n\/\/ Keep height and placement of content using placeholder in place of TOC\r\ndocument.addEventListener(\"DOMContentLoaded\", function() {\r\n  const toc = document.querySelector('#toc');\r\n  const placeholderToc = document.querySelector('#placeholder-toc');\r\n\r\n  function setPlaceholderHeight() {\r\n    placeholderToc.style.height = `${toc.offsetHeight}px`;\r\n  }\r\n\r\n  \/\/ Set the initial height of the placeholder\r\n  setPlaceholderHeight();\r\n\r\n  \/\/ Update the height on window resize\r\n  window.addEventListener('resize', setPlaceholderHeight);\r\n});\r\n  const tocTitle = document.querySelector('#toc-title'); \/\/ Assuming header-faq is the element for TOC title\r\n\r\n\/\/ Sticky TOC and update heading\r\n\/\/ document.addEventListener(\"DOMContentLoaded\", function() {\r\n\/\/   const toc = document.querySelector('#toc');\r\n\/\/   const footer = document.querySelector('.td-footer-template-wrap');\r\n\/\/   const tocParent = toc.parentElement;\r\n\/\/   const divTop = tocParent.getBoundingClientRect().top + window.pageYOffset;\r\n\/\/   const tocHeight = toc.offsetHeight;\r\n\/\/   const triggerPoint = divTop + tocHeight + 700;\r\n\/\/   const footerHeight = footer.offsetHeight;\r\n\/\/   const triggerFooterPoint = footer.getBoundingClientRect().top + window.pageYOffset - footerHeight - footerHeight - footerHeight;\r\n\/\/   const phtoc = document.querySelector('#placeholder-toc');\r\n\/\/   const headers = document.querySelectorAll('.td-post-content h2');\r\n\/\/   const navLinks = document.querySelectorAll('#toc-list a');\r\n\t\r\n\/\/ \tconst panel2 = document.querySelector(\"#toc .list\");\r\n\/\/ \tvar icon = document.querySelector(\".toc-icon\");\r\n\r\n\/\/   let activeLink = null; \/\/ Declare activeLink outside the loop\r\n\t\r\n\/\/   \/\/ Function to handle scroll and add\/remove .sticky class\r\n\/\/   function handleScroll() {\r\n\/\/     const windowTop = window.pageYOffset || document.documentElement.scrollTop;\r\n\/\/     let currentHeader = '';\r\n\r\n\/\/     \/\/ Highlight user progress as the heading comes\r\n\/\/     headers.forEach(header => {\r\n\/\/ \t\tconst headerTop = header.offsetTop;\r\n\/\/ \t\tconst headerHeight = header.clientHeight;\r\n\/\/ \/\/ \t\tif (window.scrollY >= (headerTop - headerHeight + 700)) {\r\n\/\/ \/\/ \t\t\tconst currentHeaderId = header.getAttribute('id');\r\n\/\/ \/\/ \t\t\tconst currentHeaderText = document.getElementById(currentHeaderId).textContent;\r\n\/\/ \/\/ \t\t\tconsole.log(\"current header text:\", currentHeaderText);\r\n\/\/ \/\/ \t\t\ttocTitle.textContent = currentHeaderText;\r\n\/\/ \/\/ \t\t\tcurrentHeader = currentHeaderId;\r\n\t\t\t\r\n\/\/ \/\/ \t\t\tif(window.innerWidth < 767){\r\n\/\/ \/\/ \t\t\t\ttocTitle.textContent = 'Daftar Isi';\r\n\/\/ \/\/ \t\t\t}\r\n\/\/ \/\/ \t\t}\r\n\/\/ \t\tif(window.innerWidth < 767){\r\n\/\/ \t\t\ttocTitle.textContent = 'Daftar Isi'; \/\/ Selalu pertahankan judul ini di mobile\r\n\/\/ \t\t} else {\r\n\/\/ \t\t\tif (window.scrollY >= (headerTop - headerHeight + 700)) {\r\n\/\/ \t\t\t\tconst currentHeaderId = header.getAttribute('id');\r\n\/\/ \t\t\t\tconst currentHeaderText = document.getElementById(currentHeaderId).textContent;\r\n\/\/ \t\t\t\ttocTitle.textContent = currentHeaderText;\r\n\/\/ \t\t\t\tcurrentHeader = currentHeaderId;\r\n\/\/ \t\t\t}\r\n\/\/ \t\t}\r\n\/\/ \t});\r\n\r\n\/\/     navLinks.forEach(link => {\r\n\/\/       link.classList.remove('active');\r\n\/\/       if(currentHeader != '') {\r\n\/\/ \t\t  if (link.getAttribute('href').includes(currentHeader)) {\r\n\/\/ \t\t\t  link.classList.add('active');\r\n\/\/ \t\t  }\r\n\/\/ \t  }\r\n\/\/     });\r\n\/\/ \/\/     if (windowTop < triggerFooterPoint) {\r\n\/\/ \/\/         toc.style.display = 'block';\r\n\/\/ \/\/ \t}else{\r\n\/\/ \/\/         toc.style.display = 'none';\r\n\/\/ \/\/ \t}\r\n\/\/     \/\/ Update TOC title if sticky\r\n\/\/     if (windowTop > triggerPoint) {\r\n\/\/       if (!toc.classList.contains('sticky')) {\r\n\/\/         phtoc.style.display = \"block\";\r\n\/\/         toc.classList.add('sticky');\r\n\/\/         toc.style.width = `${tocParent.offsetWidth}px`; \/\/ Set width to match the parent element\r\n\/\/         toc.setAttribute('style', 'width: ' + tocParent.offsetWidth + 'px !important;');\r\n\/\/         toc.style.backgroundColor = \"#FFF\";\r\n\/\/ \t\tpanel2.style.height = '0px';\r\n\/\/ \t\t  icon.style.transform = \"rotate(180deg)\";\r\n\/\/ \t\t  if(window.innerWidth < 767){\r\n\/\/ \/\/ \t\t\t  const tocs = document.querySelector('#toc.sticky');\r\n\/\/ \t\t\t  tocTitle.textContent = 'Daftar Isi'; \/\/ Reset title\r\n\/\/        \t\t  toc.style.width = '150px'; \/\/ Set width to match the parent element\r\n\/\/ \t\t  }\r\n\/\/       }\r\n\/\/       if (currentHeader) {\r\n\/\/ \/\/         console.log(\"activeLink:\", activeLink);\r\n\/\/         if (activeLink) {\r\n\/\/ \/\/           tocTitle.textContent = activeLink.textContent; \/\/ Update TOC title\r\n\/\/           tocTitle.textContent = activeLink ? activeLink.textContent : \"\"; \/\/ Update title only if activeLink exists\r\n\/\/         }\r\n\/\/       }\r\n\/\/     } else {\r\n\/\/       toc.classList.remove('sticky');\r\n\/\/       phtoc.style.display = \"none\";\r\n\/\/       toc.style.width = 'unset'; \/\/ Reset to original width\r\n\/\/       toc.style.backgroundColor = \"#FFF\";\r\n\/\/       tocTitle.textContent = 'Daftar isi'; \/\/ Reset title\r\n\/\/ \t\tpanel2.style.height = panel2.scrollHeight + \"px\";\r\n\/\/ \t\ticon.style.transform = \"rotate(180deg)\";\r\n\/\/     }\r\n\/\/   }\r\n\r\n\/\/     \/\/ Attach the scroll event listener to the window\r\n\/\/     window.addEventListener('scroll', handleScroll);\r\n\r\n\/\/     \/\/ Initial call to handleScroll to set the correct state on load\r\n\/\/     handleScroll();\r\n\/\/ });\r\n\t\r\n\/\/ \t\/\/ Open toggle TOC\r\n\/\/ \t  document.addEventListener(\"DOMContentLoaded\", function() {\r\n\/\/ \t\tvar tocHeader = document.querySelector(\"#toc .header\");\r\n\/\/ \t\tvar toc = document.querySelector(\"#toc\");\r\n\/\/ \t\tvar icon = document.querySelector(\".toc-icon\");\r\n\/\/ \t\tconst tocTitle = document.querySelector('#toc-title');\r\n\/\/ \t\tconst tocs = document.querySelector('#toc.sticky');\r\n\/\/  \t\tconst tocParent = toc.parentElement;\t\t  \r\n\r\n\/\/ \t\t  tocHeader.addEventListener(\"click\", function() {\r\n\/\/ \t\t\tvar panel = this.nextElementSibling;\r\n\/\/ \t\t\tif (panel.style.height !== '0px') { \/\/ Check if height is not 0px\r\n\/\/ \t\t\t  panel.style.height = '0px'; \/\/ Set height to 0 for full collapse\r\n\/\/ \t\t\t  icon.style.transform = \"rotate(180deg)\";\r\n\/\/ \/\/ \t\t\t\ttoc.style.paddingBottom = '6px'; \r\n\/\/ \t\t\t\tif(window.innerWidth > 768){\r\n\/\/ \t\t\t\t\tif(!toc.classList.contains('sticky')){\r\n\/\/ \t\t\t\t\t\ttoc.style.width = \"unset\";\r\n\/\/ \/\/ \t\t\t\t\t\ttoc.setAttribute('style', 'width: ' + tocParent.offsetWidth + 'px !important;');\r\n\/\/ \t\t\t\t\t}\r\n\/\/ \t\t\t\t\tif (toc.classList.contains('sticky')){\r\n\/\/ \t\t\t\t\t\ttoc.style.width = '${tocParent.offsetWidth}px';\r\n\/\/ \t\t\t\t\t\ttoc.setAttribute('style', 'width: ' + tocParent.offsetWidth + 'px !important;');\r\n\/\/ \t\t\t\t\t}\r\n\/\/ \t\t\t\t}\r\n\/\/ \t\t\t\tif(window.innerWidth < 767){\r\n\/\/ \t\t\t\t\ttoc.style.width = \"unset\"; \/\/ Reset width\r\n\/\/ \t\t\t\t}\r\n\/\/ \t\t\t\ttoc.style.backgroundColor = \"#FFF1F1\";\r\n\/\/ \t\t\t} else {\r\n\/\/ \t\t\t  panel.style.height = panel.scrollHeight + \"px\";\r\n\/\/ \t\t\t  icon.style.transform = \"rotate(0deg)\";\r\n\/\/ \t\t\t  toc.style.backgroundColor = \"#FFF\";\r\n\/\/ \t\t\t  tocTitle.textContent = 'Daftar isi'; \/\/ Reset title\r\n\/\/ \t\t\t\ttoc.style.paddingBottom = '24px';\r\n\/\/ \t\t\t \tif(window.innerWidth < 767){\r\n\/\/ \t\t\t\t\ttoc.style.width = `${tocParent.offsetWidth}px`; \/\/ Set width to match the parent element\r\n\/\/ \t\t\t\t\ttoc.setAttribute('style', 'width: ' + tocParent.offsetWidth + 'px !important;');\r\n\/\/ \t\t\t\t}\r\n\/\/ \t\t\t}\r\n\/\/ \t\t  });\r\n\r\n\/\/ \t\t  \/\/ Close TOC when a link inside it is clicked\r\n\/\/ \t\t  var tocLinks = document.querySelectorAll(\"#toc .list a\");\r\n\/\/ \t\t  tocLinks.forEach(function(link) {\r\n\/\/ \t\t\tlink.addEventListener(\"click\", function() {\r\n\/\/ \t\t\t  var panel = document.querySelector(\"#toc .list\");\r\n\/\/ \t\t\t  panel.style.height = '0px'; \/\/ Set height to 0 for full collapse\r\n\/\/ \t\t\t  icon.style.transform = \"rotate(180deg)\";\r\n\/\/ \t\t\t  toc.style.backgroundColor = \"#FFF\";\r\n\/\/ \t\t\t});\r\n\/\/ \t\t  });\r\n\/\/ \t\t});\r\n\r\n\/\/ START new JS for ToC improvements\r\ndocument.addEventListener(\"DOMContentLoaded\", function() {\r\n  const toc = document.querySelector('#toc');\r\n  const footer = document.querySelector('.td-footer-template-wrap');\r\n  const tocParent = toc.parentElement;\r\n  const divTop = tocParent.getBoundingClientRect().top + window.pageYOffset;\r\n  const tocHeight = toc.offsetHeight;\r\n  const triggerPoint = divTop + tocHeight + 1750;\r\n\tconsole.log(triggerPoint)\r\n  const footerHeight = footer.offsetHeight;\r\n  const triggerFooterPoint = footer.getBoundingClientRect().top + window.pageYOffset - footerHeight*3;\r\n  const phtoc = document.querySelector('#placeholder-toc');\r\n  const headers = document.querySelectorAll('.td-post-content h2');\r\n  const navLinks = document.querySelectorAll('#toc-list a');\r\n  \r\n  const panel2 = document.querySelector(\"#toc .list\");\r\n  const icon = document.querySelector(\".toc-icon\");\r\n  const tocTitle = document.querySelector('#toc-title');\r\n\r\n  let activeLink = null;\r\n  let userClosedTOC = false; \/\/ Flag user menutup TOC\r\n\r\n  function handleScroll() {\r\n    const windowTop = window.pageYOffset || document.documentElement.scrollTop;\r\n    let currentHeader = '';\r\n\r\n    \/\/ Update TOC title sesuai header yang terlihat\r\n    headers.forEach(header => {\r\n      const headerTop = header.offsetTop;\r\n      const headerHeight = header.clientHeight;\r\n      if(window.innerWidth < 767){\r\n        tocTitle.textContent = 'Daftar Isi'; \r\n      } else {\r\n        if (window.scrollY >= (headerTop - headerHeight + 1750)) {\r\n          const currentHeaderId = header.getAttribute('id');\r\n          const currentHeaderText = document.getElementById(currentHeaderId).textContent;\r\n          tocTitle.textContent = currentHeaderText;\r\n          currentHeader = currentHeaderId;\r\n        }\r\n      }\r\n    });\r\n\r\n    navLinks.forEach(link => {\r\n      link.classList.remove('active');\r\n      if(currentHeader && link.getAttribute('href').includes(currentHeader)) {\r\n        link.classList.add('active');\r\n      }\r\n    });\r\n\r\n    if (windowTop > triggerPoint) {\r\n      if (!toc.classList.contains('sticky')) {\r\n        phtoc.style.display = \"block\";\r\n        toc.classList.add('sticky');\r\n        toc.style.width = `${tocParent.offsetWidth}px`;\r\n        toc.style.backgroundColor = \"#FFF\";\r\n        \/\/ Saat sticky, TOC otomatis tertutup\r\n        panel2.style.height = '0px';\r\n        icon.style.transform = \"rotate(180deg)\";\r\n        userClosedTOC = true; \/\/ Set flag supaya tidak terbuka saat scroll\r\n      }\r\n      \r\n      if(window.innerWidth < 767){\r\n        tocTitle.textContent = 'Daftar Isi'; \r\n        toc.style.width = '150px';\r\n      }\r\n\r\n    } else {\r\n      toc.classList.remove('sticky');\r\n      phtoc.style.display = \"none\";\r\n      toc.style.width = 'unset';\r\n      toc.style.backgroundColor = \"#FFF\";\r\n      tocTitle.textContent = 'Daftar isi'; \r\n\r\n      \/\/ Kembalikan panel jika user belum menutup manual\r\n      if(!userClosedTOC) {\r\n        panel2.style.height = panel2.scrollHeight + \"px\";\r\n        icon.style.transform = \"rotate(0deg)\";\r\n      }\r\n    }\r\n  }\r\n\r\n  window.addEventListener('scroll', handleScroll);\r\n  handleScroll();\r\n\r\n  \/\/ Toggle TOC saat user klik\r\n  const tocHeader = document.querySelector(\"#toc .header\");\r\n  tocHeader.addEventListener(\"click\", function() {\r\n    const panel = panel2;\r\n    if (panel.style.height !== '0px') {\r\n      panel.style.height = '0px';\r\n      icon.style.transform = \"rotate(180deg)\";\r\n      userClosedTOC = true;\r\n    } else {\r\n      panel.style.height = panel.scrollHeight + \"px\";\r\n      icon.style.transform = \"rotate(0deg)\";\r\n      userClosedTOC = false;\r\n    }\r\n  });\r\n\r\n  \/\/ Close TOC saat link diklik\r\n  document.querySelectorAll(\"#toc .list a\").forEach(link => {\r\n    link.addEventListener(\"click\", function() {\r\n      panel2.style.height = '0px';\r\n      icon.style.transform = \"rotate(180deg)\";\r\n      userClosedTOC = true;\r\n    });\r\n  });\r\n});\r\n\/\/ END new JS for ToC improvements\r\n\r\n\t\r\n\/\/ \tmake the heading at the center of the viewport\r\n\/\/ \tdocument.addEventListener('DOMContentLoaded', function() {\r\n\/\/     \/\/ Add click event listener to all links in the TOC list\r\n\/\/     document.querySelectorAll('#toc-list a').forEach(anchor => {\r\n\/\/         anchor.addEventListener('click', function (e) {\r\n\/\/             e.preventDefault(); \/\/ Prevent the default behavior of jumping to the anchor\r\n\/\/ \/\/ \t\t\tconsole.log(\"prevent default\");\r\n\/\/             const targetId = this.getAttribute('href').substring(1); \/\/ Get the ID of the target element\r\n\/\/             const targetElement = document.getElementById(targetId); \/\/ Get the target element\r\n\r\n\/\/             if (targetElement) {\r\n\/\/                 const headerHeight = document.querySelector('#toc .header').offsetHeight; \/\/ Get the height of the fixed header\r\n\/\/                 const windowHeight = window.innerHeight; \/\/ Get the height of the viewport\r\n\/\/                 const targetOffset = targetElement.offsetTop; \/\/ Get the top offset of the target element\r\n\/\/                 const scrollTo = targetOffset + (windowHeight \/ 2) + (headerHeight); \/\/ Calculate the scroll position to center the target element\r\n\r\n\/\/                 \/\/ Scroll to the calculated position smoothly\r\n\/\/                 window.scrollTo({\r\n\/\/                     top: scrollTo,\r\n\/\/                     behavior: 'smooth'\r\n\/\/                 });\r\n\/\/             }\r\n\/\/         });\r\n\/\/     });\r\n\/\/ });\r\n<\/script>\r\n\r\n<script>\r\n    \/\/ Scrollspy function to highlight the active TOC item based on the scroll position\r\n  function scrollSpy(tocClass) {\r\n    const scrollPosition = window.scrollY;\r\n\r\n    \/\/ Find the active h2 and h3 headings based on their position in the corresponding TOC\r\n    let activeH2 = null;\r\n    let activeH3 = null;\r\n\r\n    const tocItems = document.querySelectorAll(`.${tocClass} li`);\r\n    tocItems.forEach(item => {\r\n      const a = item.querySelector('a');\r\n      if (!a) return;\r\n      const href = a.getAttribute('href');\r\n      const targetId = href.substring(1); \/\/ Remove the '#' from the href to get the target ID\r\n      const targetElement = document.getElementById(targetId);\r\n      if (!targetElement) return;\r\n\r\n      const targetTop = targetElement.getBoundingClientRect().top + scrollPosition;\r\n      const nextItem = item.nextElementSibling;\r\n      const nextTop = nextItem ? nextItem.getBoundingClientRect().top + scrollPosition : Infinity;\r\n\r\n      if (targetTop <= scrollPosition + 150) {\r\n        if (a.parentElement.parentElement === tocItems) {\r\n          \/\/ The h2 heading is at the root level of the TOC\r\n          activeH2 = { id: targetId, level: 'h2' };\r\n        } \r\n\t\t  else {\r\n          \/\/ The h3 heading is nested under an h2 heading\r\n          const parentH2 = a.parentElement.parentElement.previousElementSibling;\r\n          if (parentH2) {\r\n            const h2Link = parentH2.querySelector('a');\r\n            if (h2Link) {\r\n              const h2Href = h2Link.getAttribute('href');\r\n              const h2Id = h2Href.substring(1);\r\n              activeH2 = { id: h2Id, level: 'h2' };\r\n            }\r\n          }\r\n          activeH3 = { id: targetId, level: 'h3' };\r\n        }\r\n      }\r\n\r\n      if (targetTop > scrollPosition + 150 && nextTop > scrollPosition + 150 && !activeH3) {\r\n        \/\/ Reset the activeH2 when there are no more active h3 headings\r\n        activeH2 = null;\r\n      }\r\n    });\r\n\r\n    \/\/ Update the active state for the TOC items\r\n    tocItems.forEach(item => {\r\n      item.classList.remove('active');\r\n      const a = item.querySelector('a');\r\n      if (a) {\r\n        const href = a.getAttribute('href');\r\n        const targetId = href.substring(1);\r\n        if ((activeH2 && activeH2.id === targetId) || (activeH3 && activeH3.id === targetId)) {\r\n          item.classList.add('active');\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  \/\/ Call scrollSpy for each TOC on window scroll\r\n  const tocClasses = ['list_toc', 'list_toc_float']; \/\/ Add other TOC class names here if you have more than two instances\r\n  tocClasses.forEach(tocClass => {\r\n    window.addEventListener('scroll', () => scrollSpy(tocClass));\r\n  });\r\n<\/script>\r\n\r\n<!-- ToC List for desktop side bar, diganti jadi inject by php, di code snippet \"Sidebar Accordion\" -->\r\n<!-- <script>\r\n\tdocument.addEventListener(\"DOMContentLoaded\", function() {\r\n\r\n        \/\/ Fungsi untuk membuat nested list\r\n        function createNestedList(parentNode, children) {\r\n            if (children.length === 0) return;\r\n\r\n            const nestedUl = document.createElement('ul');\r\n            children.forEach(child => {\r\n                const nestedLi = document.createElement('li');\r\n                const nestedA = document.createElement('a');\r\n                nestedA.textContent = child.title;\r\n                nestedA.href = `#${child.id}`;\r\n                nestedLi.appendChild(nestedA);\r\n                nestedUl.appendChild(nestedLi);\r\n\r\n                if (child.children.length > 0) {\r\n                    createNestedList(nestedLi, child.children);\r\n                }\r\n            });\r\n\r\n            parentNode.appendChild(nestedUl);\r\n        }\r\n\r\n        \/\/ Membuat objek untuk menyimpan daftar h2 dan h3 beserta judulnya\r\n        const headings = [];\r\n\r\n           \/\/ Mengambil semua elemen h2 dan h3\r\n        \/\/ Mengambil semua elemen h2 dan h3\r\n\t\tconst elements = document.querySelectorAll('.td-post-content h2');\r\n\r\n\t\t\tfunction newFormatId(text) {\r\n\t\t\t\tif(text.toLowerCase() === \"key takeaways\") {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tconst result = text.toLowerCase()\r\n\t\t\t\t.trim()\r\n\t\t\t\t.replace(\/[^\\w\\s-]\/g, '')  \/\/ hapus tanda baca\r\n\t\t\t\t.replace(\/\\s+\/g, '-'); \/\/ ganti spasi jadi \"-\"\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\r\n\t\telements.forEach(element => {\r\n\t\t\tif (element.tagName === 'H2') {\r\n\t\t\t\tconst id = newFormatId(element.textContent); \/\/ Hasilkan ID baru\r\n\t\t\t\telement.id = id; \/\/ Tetapkan ID ke elemen h2\r\n\t\t\t\tif (element.textContent.toLowerCase() === \"key takeaways\") {return;} \/\/ Kalau Key Takeaways, jangan dimasukin\r\n\t\t\t\theadings.push({ level: 'h2', id: id, title: element.textContent, children: [] });\r\n\t\t\t} else if (element.tagName === 'H3') {\r\n\t\t\t\tconst id = newFormatId(element.textContent); \/\/ Hasilkan ID baru\r\n\t\t\t\telement.id = id; \/\/ Tetapkan ID ke elemen h3\r\n\t\t\t\tif (headings.length > 0) {\r\n\t\t\t\t\theadings[headings.length - 1].children.push({ level: 'h3', id: id, title: element.textContent, children: [] });\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n       \/\/ Membuat list HTML dari objek headings\r\n\t\tconst ul = document.getElementById('list_toc');\r\n\t\tlet currentUl = ul;\r\n\t\theadings.forEach(heading => {\r\n\t\t\tconst li = document.createElement('li');\r\n\t\t\tconst a = document.createElement('a');\r\n\t\t\ta.textContent = heading.title;\r\n\t\t\ta.href = `#${heading.id}`; \/\/ Gunakan ID yang baru dihasilkan\r\n\t\t\tli.appendChild(a);\r\n\r\n\t\t\tif (heading.level === 'h2') {\r\n\t\t\t\tcurrentUl = li;\r\n\t\t\t\tul.appendChild(li);\r\n\t\t\t} else if (heading.level === 'h3') {\r\n\t\t\t\tif (!currentUl.lastElementChild || currentUl.lastElementChild.tagName !== 'UL') {\r\n\t\t\t\t\tconst nestedUl = document.createElement('ul');\r\n\t\t\t\t\tcurrentUl.appendChild(nestedUl);\r\n\t\t\t\t\tcurrentUl = nestedUl;\r\n\t\t\t\t}\r\n\t\t\t\tcurrentUl.appendChild(li);\r\n\t\t\t}\r\n\r\n\t\t\tcreateNestedList(li, heading.children);\r\n\t\t});\r\n\t\t\/\/ Dapatkan elemen ul dengan id 'list_toc'\r\n\t\tconst ulFloat = document.getElementById('list_toc');\r\n\r\n\t\t\/\/ Dapatkan isi (child elements) dari ul dengan id 'list_toc'\r\n\t\tconst clonedChildren = ulFloat.cloneNode(true).children;\r\n\r\n\t\t\/\/ Dapatkan elemen ul dengan id 'list_toc_float'\r\n\t\tconst ulToc = document.getElementById('list_toc_float');\r\n\r\n\t\t\/\/ Tambahkan isi yang telah didapatkan dari 'list_toc' ke ul dengan id 'list_toc_float'\r\n\t\tulToc.append(...clonedChildren);\r\n\r\n\r\n        \/\/ Fungsi untuk mengambil tinggi navbar\r\n\t\tfunction getNavbarHeight() {\r\n\t\t\tconst navbar = document.getElementById('tdi_34');\r\n\t\t\treturn navbar ? navbar.offsetHeight : 0;\r\n\t\t}\r\n\r\n\t\t\/\/ Fungsi untuk menambahkan offset posisi scroll\r\n\t\tfunction scrollToElementWithOffset(elementId) {\r\n\t\t\tconst element = document.getElementById(elementId);\r\n\t\t\tif (element) {\r\n\t\t\t\tconst offset = getNavbarHeight();\r\n\t\t\t\tconst elementPosition = element.getBoundingClientRect().top;\r\n\t\t\t\tconst offsetPosition = elementPosition - offset - 40;\r\n\r\n\t\t\t\twindow.scrollBy({\r\n\t\t\t\t\ttop: offsetPosition,\r\n\t\t\t\t\tbehavior: 'smooth'\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t\/\/ Fungsi untuk menangani klik pada tautan judul\r\n\t\tfunction handleTitleClick(event) {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tconst href = event.target.getAttribute('href').substr(1);\r\n\t\t\tscrollToElementWithOffset(href);\r\n\t\t}\r\n\r\n\t\t\/\/ Tambahkan event listener untuk semua tautan judul\r\n\t\tconst titleLinks = document.querySelectorAll('a[href^=\"#\"]');\r\n\t\ttitleLinks.forEach(link => {\r\n\t\t\tlink.addEventListener('click', handleTitleClick);\r\n\t\t});\r\n\t\t\r\n\t});\r\n    <\/script> -->\r\n<\/span><\/p>\n<h2><span id=\"a\"><\/span><strong>Penjelasan Singkat Tentang Capacity Requirements Planning (CRP)<\/strong><\/h2>\n<p>CRP adalah proses menentukan jumlah tenaga kerja dan sumber daya mesin yang dibutuhkan untuk mencapai target produksi sesuai jadwal yang direncanakan.<\/p>\n<p>CRP memegang posisi krusial dalam hierarki perencanaan manufaktur modern saat ini. Proses ini bukan sekadar menghitung jumlah barang yang harus diproduksi, melainkan memvalidasi realitas di lantai pabrik. CRP memastikan apakah jadwal produksi atau <em>Master Production Schedule<\/em> (MPS) benar-benar realistis untuk dijalankan berdasarkan kapasitas yang tersedia.<\/p>\n<p>Tanpa penerapan CRP yang tepat, perusahaan manufaktur sering kali terjebak dalam situasi <em>over-commitment<\/em> kepada pelanggan. Hal ini berujung pada keterlambatan pengiriman dan pembengkakan biaya <em>overhead<\/em> karena lembur yang tidak terkendali. Oleh karena itu, pemahaman mendalam tentang kapasitas pabrik adalah kunci profitabilitas.<\/p>\n<h3><strong>Perbedaan CRP, MRP, dan MPS<\/strong><\/h3>\n<p>Penting untuk membedakan ketiga istilah perencanaan ini agar tidak terjadi kebingungan dalam operasional. MPS fokus pada &#8220;kapan dan apa&#8221; yang akan diproduksi untuk memenuhi permintaan pasar. <a href=\"https:\/\/www.hashmicro.com\/id\/blog\/requirement-planning-mrp\/\">Perencanaan kebutuhan bahan<\/a>\u00a0fokus pada &#8220;apa material yang dibutuhkan&#8221;. Sedangkan CRP menjawab pertanyaan krusial: &#8220;apakah kita memiliki kapasitas sumber daya untuk melakukannya?&#8221;.<\/p>\n<h2><strong>Siapa yang Cocok Menggunakan CRP?<\/strong><\/h2>\n<p>CRP paling tepat digunakan ketika rencana produksi sudah ada, tetapi perusahaan perlu memastikan kapasitas di lantai produksi benar-benar mampu mengeksekusinya. Dengan begitu, keputusan seperti penambahan shift, lembur, atau penyesuaian jadwal bisa dibuat lebih terukur sejak awal.<\/p>\n<ol>\n<li>Perusahaan manufaktur dengan proses berulang yang bergantung pada mesin dan tenaga kerja, sehingga jadwal produksi harus selaras dengan kapasitas aktual.<\/li>\n<li>Industri dengan operasi padat kapasitas seperti makanan dan minuman, kimia, otomotif, baja, dan consumer goods yang rentan terganggu bila ada bottleneck.<\/li>\n<li>Pabrik dengan multi work center atau lini produksi kompleks, agar beban kerja dapat dipantau per mesin atau departemen secara periodik.<\/li>\n<li>Perusahaan yang sudah menerapkan MRP atau ERP dan ingin meningkatkan akurasi perencanaan kapasitas agar planned orders lebih realistis untuk dieksekusi.<\/li>\n<li>Bisnis dengan permintaan fluktuatif atau lead time ketat, sehingga butuh dasar data untuk rescheduling, lembur, tambah shift, atau subkontrak.<\/li>\n<\/ol>\n<h2><strong>Data Input Vital untuk Menjalankan CRP<\/strong><\/h2>\n<p>Input utama meliputi <em>Planned Order Releases<\/em> dari MRP, data <em>Routing<\/em>, dan informasi status <em>Work Center<\/em>.<\/p>\n<p>Data dari MRP (<em>Material Requirements Planning<\/em>) adalah fondasi utama dalam menjalankan perhitungan CRP. CRP membutuhkan informasi spesifik tentang &#8220;apa yang akan dibuat&#8221; dan &#8220;kapan material tersedia&#8221; untuk mulai menghitung beban kerja. Tanpa data MRP yang akurat, perhitungan kapasitas tidak akan valid.<\/p>\n<p>Akurasi CRP juga sangat bergantung pada data dari <em>Routing Sheet<\/em> dan <em>Work Center Master File<\/em>. Anda perlu mengetahui standar waktu pengerjaan, seperti waktu <em>setup<\/em> dan <em>run time<\/em> per unit produk. Informasi kapasitas efektif setiap mesin juga wajib tersedia untuk mendapatkan hasil perencanaan yang presisi.<\/p>\n<h3>1. Routing File (Lembar Alur Produksi)<\/h3>\n<p>File ini menjelaskan detail jalur atau rute yang harus dilalui oleh sebuah produk selama proses produksi. Data ini mencakup urutan operasi dan standar waktu pengerjaan di setiap pos kerja. Informasi ini vital untuk menghitung berapa lama waktu yang dibutuhkan setiap produk di setiap stasiun kerja.<\/p>\n<h3>2. Work Center Master File<\/h3>\n<p>File ini berisi data kapasitas spesifik per stasiun kerja atau mesin yang ada di lantai produksi. Data ini mencakup jumlah mesin, jumlah <em>shift<\/em> kerja, tingkat efisiensi, dan faktor utilitas mesin. Data ini menjadi parameter pembatas dalam perhitungan kapasitas yang realistis.<br \/>\n<span id=\"b\"><\/span><\/p>\n<h2><strong>Tujuan Utama Penerapan CRP dalam Industri Manufaktur<\/strong><\/h2>\n<p>Tujuan utamanya adalah menyeimbangkan beban kerja (<em>load<\/em>) dengan kapasitas (<em>capacity<\/em>) yang tersedia untuk efisiensi maksimal.<\/p>\n<p>Penerapan CRP membantu perusahaan menghindari denda keterlambatan pengiriman yang merugikan reputasi bisnis. Dengan mengetahui batasan kapasitas sejak awal, manajer operasional dapat melakukan penyesuaian jadwal secara proaktif. Langkah ini mencegah terjadinya masalah mendadak di tengah proses produksi yang sedang berjalan.<\/p>\n<p>Selain itu, CRP berfokus pada aspek finansial dan pengurangan pemborosan atau <em>waste<\/em> di area produksi. Metode ini membantu meminimalkan penumpukan inventori <a href=\"https:\/\/www.hashmicro.com\/id\/blog\/work-in-progress-artinya\/\">barang setengah jadi (WIP)<\/a> di lantai pabrik. Hasilnya, perusahaan dapat mengurangi biaya penyimpanan dan menekan biaya lembur yang sering kali muncul akibat perencanaan yang buruk.<\/p>\n<h3>1. Memaksimalkan Penggunaan Work Center<\/h3>\n<p>Salah satu fungsi utama CRP adalah memastikan setiap stasiun kerja atau <em>work center<\/em> digunakan secara optimal. Sistem ini mencegah adanya mesin yang terlalu sibuk (<em>overloaded<\/em>) sementara mesin lain menganggur (<em>underutilized<\/em>). Keseimbangan beban kerja ini sangat penting untuk menjaga aliran produksi tetap stabil dan efisien.<\/p>\n<h3>2. Validasi Jadwal Produksi<\/h3>\n<p>CRP berfungsi sebagai alat validasi akhir sebelum rencana produksi benar-benar dieksekusi oleh tim lantai pabrik. Proses ini memastikan bahwa <em>Master Production Schedule<\/em> (MPS) yang disusun adalah rencana yang <em>feasible<\/em> atau dapat dilaksanakan. Validasi ini mencegah gangguan operasional yang disebabkan oleh target yang tidak realistis.<\/p>\n<h2><strong>6 Tahapan Proses Capacity Requirements Planning<\/strong><\/h2>\n<p>Proses dimulai dari pelepasan order dari MRP hingga analisis kesenjangan kapasitas.<\/p>\n<p>Tiga tahap awal CRP melibatkan pengolahan data mentah menjadi informasi beban kerja yang terukur. Pertama, sistem mengambil data <em>planned orders<\/em> yang dihasilkan oleh MRP. Kedua, kebutuhan produk diubah menjadi kebutuhan jam kerja menggunakan data <em>routing<\/em>. Ketiga, angka tersebut disesuaikan dengan faktor efisiensi dan utilisasi mesin.<\/p>\n<p>Tiga tahap akhir berfokus pada alokasi dan analisis untuk pengambilan keputusan manajerial. Beban kerja dibebankan ke setiap <em>work center<\/em> berdasarkan periode waktu tertentu. Kemudian, beban kerja dibandingkan dengan kapasitas yang tersedia untuk melihat kesenjangan. Terakhir, dilakukan analisis penyimpangan untuk memutuskan tindakan seperti lembur atau subkontrak.<\/p>\n<p>Untuk lebih jelasnya, simak infografis berikut ini.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-184000 size-full\" src=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/12\/6-Tahapan-Proses-Capacity-Requirements-Planning-Infografis-e1768208596489.webp\" alt=\"6 Tahapan Proses Capacity Requirements Planning\" width=\"1024\" height=\"1126\" srcset=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/12\/6-Tahapan-Proses-Capacity-Requirements-Planning-Infografis-e1768208596489.webp 1024w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/12\/6-Tahapan-Proses-Capacity-Requirements-Planning-Infografis-e1768208596489-273x300.webp 273w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/12\/6-Tahapan-Proses-Capacity-Requirements-Planning-Infografis-e1768208596489-931x1024.webp 931w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/12\/6-Tahapan-Proses-Capacity-Requirements-Planning-Infografis-e1768208596489-768x845.webp 768w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/12\/6-Tahapan-Proses-Capacity-Requirements-Planning-Infografis-e1768208596489-382x420.webp 382w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/12\/6-Tahapan-Proses-Capacity-Requirements-Planning-Infografis-e1768208596489-150x165.webp 150w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/12\/6-Tahapan-Proses-Capacity-Requirements-Planning-Infografis-e1768208596489-300x330.webp 300w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/12\/6-Tahapan-Proses-Capacity-Requirements-Planning-Infografis-e1768208596489-696x765.webp 696w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<h2><strong>Jenis-Jenis Pembebanan dalam CRP (Loading Types)<\/strong><\/h2>\n<p>Terdapat dua pendekatan utama dalam CRP, yaitu <em>Infinite Loading<\/em> dan <em>Finite Loading<\/em>.<\/p>\n<p><em>Infinite Loading<\/em> atau pembebanan tak terbatas adalah metode yang mengasumsikan kapasitas pabrik tidak memiliki batasan. Pendekatan ini hanya fokus pada apa yang <em>dibutuhkan<\/em> untuk memenuhi jadwal pesanan pelanggan. Metode ini sangat cocok digunakan untuk identifikasi total kebutuhan sumber daya dalam perencanaan jangka panjang.<\/p>\n<p>Sebaliknya, <em>Finite Loading<\/em> atau pembebanan terbatas adalah pendekatan yang jauh lebih realistis untuk operasional harian. Metode ini memperhitungkan batasan kapasitas aktual dari setiap <em>work center<\/em> yang ada di pabrik. Jika kapasitas penuh, jadwal produksi harus digeser atau diprioritaskan ulang untuk menghindari <em>bottleneck<\/em>.<\/p>\n<h2><strong>Strategi Mengatasi Ketidakseimbangan Kapasitas<\/strong><\/h2>\n<p>Strategi dibagi menjadi penyesuaian kapasitas (menambah\/mengurangi sumber daya) atau penyesuaian beban (menggeser jadwal).<\/p>\n<p>Saat terjadi <em>Over-capacity<\/em> di mana permintaan melebihi kapasitas, perusahaan perlu menerapkan strategi jangka pendek yang taktis. Solusi yang bisa diambil meliputi penerapan jam lembur (<em>overtime<\/em>) atau penambahan <em>shift<\/em> sementara. Opsi lain adalah melakukan <a href=\"https:\/\/www.hashmicro.com\/id\/blog\/tantangan-subkontraktor-dalam-proyek-pembangunan\/\">mitra pelaksana proyek<\/a> (<em>outsourcing<\/em>) sebagian pekerjaan ke pihak ketiga atau memindahkan tenaga kerja.<\/p>\n<p>Sebaliknya, saat terjadi <em>Under-capacity<\/em> atau kapasitas berlebih, perusahaan harus bertindak efisien untuk mencegah kerugian. Solusi yang dapat dilakukan adalah menarik pekerjaan dari periode mendatang untuk memajukan jadwal produksi. Waktu luang ini juga bisa dimanfaatkan untuk melakukan pemeliharaan preventif pada mesin atau mengurangi jam kerja sementara.<\/p>\n<h2><strong>Peran Sistem Digital Manufaktur dalam Optimasi CRP<\/strong><\/h2>\n<p>Menggunakan <em>spreadsheet<\/em> manual untuk CRP sering kali menyebabkan data tidak sinkron dan rentan kesalahan hitung. Maka dari itu, sistem modern seperti software manufaktur diperlukan untuk mengatur proses produksi.<\/p>\n<p>Fitur spesifik dalam sistem digital untuk manufaktur ini sangat membantu dalam memantau produktivitas mesin secara langsung. Berikut adalah fitur yang harus ada dalam sistem digital manufaktur:<\/p>\n<ol>\n<li><strong>Integrasi dengan IoT dan OEE<br \/>\n<\/strong>Integrasi CRP dengan sensor IoT (<em>Internet of Things<\/em>) dan pelacakan OEE (<em>Overall Equipment Effectiveness<\/em>) memberikan data kapasitas yang jauh lebih akurat. Sensor pada mesin dapat mengirimkan data kinerja aktual secara langsung ke sistem software manajemen manufaktur. Ini menghilangkan ketergantungan pada estimasi manual yang sering kali meleset dari kenyataan.<\/li>\n<li><strong>Simulasi skenario produksi<br \/>\n<\/strong>Kemampuan software untuk melakukan simulasi &#8220;What-If&#8221; adalah keunggulan kompetitif yang sangat besar. Manajer dapat menguji skenario seperti &#8220;bagaimana jika ada pesanan mendadak?&#8221; untuk melihat dampaknya terhadap kapasitas. Simulasi ini memungkinkan pengambilan keputusan yang cepat tanpa mengganggu proses produksi yang sedang berjalan.<\/li>\n<\/ol>\n<h3><strong>Bagaimana Sistem Manufaktur Membantu Marimas dalam Menyelaraskan CRP?<\/strong><\/h3>\n<p>Sistem manufaktur berperan sebagai penghubung antara rencana produksi dan kapasitas nyata di lapangan, sehingga CRP tidak hanya menjadi perhitungan teoritis. Pada Marimas, <a href=\"https:\/\/www.hashmicro.com\/id\/hash-manufacturing-software?ref=capacity-requirements-planning\">aplikasi untuk bisnis manufaktur<\/a> memastikan setiap rencana hasil MRP langsung diuji terhadap kapasitas mesin, lini produksi, dan tenaga kerja sebelum dieksekusi.<\/p>\n<ol>\n<li><strong>Sinkronisasi rencana produksi dan kapasitas aktual<\/strong><br \/>\nMarimas memanfaatkan software manufaktur untuk menghubungkan hasil MRP dengan CRP, sehingga setiap rencana produksi sirup dan serbuk minuman langsung divalidasi terhadap kapasitas mesin, lini pengemasan, dan tenaga kerja yang tersedia.<\/li>\n<li><strong>Pemantauan beban kerja per work center<\/strong><br \/>\nMelalui CRP, Marimas dapat melihat beban produksi di setiap mesin pencampur, filling, hingga packaging line. Ini membantu tim produksi mengidentifikasi titik overload lebih awal sebelum berdampak pada keterlambatan pengiriman.<\/li>\n<li><strong>Deteksi bottleneck berbasis data real-time<\/strong><br \/>\nSaat permintaan meningkat, sistem menandai work center yang berpotensi menjadi bottleneck, seperti mesin filling atau sealing. Informasi ini digunakan untuk menentukan apakah perlu rescheduling, penambahan shift, atau redistribusi beban kerja.<\/li>\n<li><strong>Keputusan penambahan shift yang terukur<\/strong><br \/>\nAlih-alih mengandalkan intuisi, Marimas menggunakan output CRP untuk menghitung kebutuhan jam kerja tambahan secara presisi, termasuk dampaknya terhadap kapasitas harian dan target produksi.<\/li>\n<li><strong>Penyesuaian jadwal produksi lebih cepat<\/strong><br \/>\nJika terjadi perubahan forecast atau kendala operasional, CRP memungkinkan Marimas melakukan penjadwalan ulang tanpa mengganggu keseluruhan alur produksi, karena keputusan diambil berdasarkan kapasitas aktual, bukan asumsi.<\/li>\n<\/ol>\n<h2><strong>Kesimpulan<\/strong><\/h2>\n<p data-start=\"0\" data-end=\"216\">Capacity Requirements Planning (CRP) penting untuk menjaga kelancaran produksi dan mencegah pemborosan sumber daya. Dengan perencanaan kapasitas yang tepat, perusahaan dapat memenuhi permintaan tanpa keterlambatan.<\/p>\n<p data-start=\"218\" data-end=\"423\">Teknologi seperti software untuk bisnis manufaktur membantu menghitung kapasitas secara otomatis sehingga alokasi beban kerja lebih akurat dan efisien. Tertarik untuk menjaga kelancaran produksi pabrik Anda dengan CRP? <a href=\"https:\/\/www.hashmicro.com\/id\/tour-produk-gratis\/\">Konsultasikan kebutuhan bisnis<\/a> Anda sekarang.<\/p>\n<p><span data-sheets-root=\"1\"><a href=\"https:\/\/www.hashmicro.com\/id\/hash-manufacturing-software?medium=moneysite-banner\" target=\"_blank\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/02\/49-Hash-Manufacturing-Automation-Mobile.webp\" data-desktop-src=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/02\/49-Hash-Manufacturing-Automation-Mobile.webp\" data-mobile-src=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/02\/49-Hash-Manufacturing-Automation-Desktop.webp\" alt=\"HashManufacturingAutomation\" class=\"responsive-image-banner\"><\/a>\r\n\r\n<script>\r\n    \/\/ check which image to use based on screensize\r\n    document.addEventListener(\"DOMContentLoaded\", function() {\r\n        function updateImageSource() {\r\n            var images = document.querySelectorAll('.responsive-image-banner');\r\n            var screenWidth = window.innerWidth;\r\n\r\n            images.forEach(function(img) {\r\n                var mobileSrc = img.getAttribute('data-mobile-src');\r\n                var desktopSrc = img.getAttribute('data-desktop-src');\r\n\r\n                if (screenWidth < 576 && mobileSrc) {\r\n                    img.setAttribute('src', mobileSrc);\r\n                } else {\r\n                    img.setAttribute('src', desktopSrc);\r\n                }\r\n            });\r\n        }\r\n\r\n        \/\/ Initial check\r\n        updateImageSource();\r\n\r\n        \/\/ Update on resize\r\n        window.addEventListener('resize', updateImageSource);\r\n    });\r\n<\/script><\/span><\/p>\n<h2><strong>Pertanyaan Seputar Capacity Requirements Planning<\/strong><\/h2>\n<ul class=\"bottom_faq\">\n<li>\n<details>\n<summary><strong>Apa perbedaan antara CRP kasar (Rough-Cut) dan CRP detail?<\/strong><\/summary>\n<p>CRP kasar (RCCP) digunakan untuk validasi MPS jangka panjang, sedangkan CRP detail digunakan untuk validasi MRP jangka pendek dengan data yang lebih presisi.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>Kapan waktu yang tepat menggunakan Infinite Loading?<\/strong><\/summary>\n<p>Infinite Loading sebaiknya digunakan saat perusahaan ingin mengetahui total beban kerja tanpa batasan untuk perencanaan penambahan kapasitas jangka panjang.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>Apa dampak CRP terhadap biaya produksi?<\/strong><\/summary>\n<p>CRP dapat mengurangi biaya lembur yang tidak perlu, meminimalkan denda keterlambatan pengiriman, dan mengurangi biaya penyimpanan inventori WIP.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>Apakah CRP bisa berjalan tanpa software ERP?<\/strong><\/summary>\n<p>Bisa dilakukan manual untuk skala kecil, namun sangat berisiko, lambat, dan tidak efisien untuk skala menengah hingga besar.<\/p>\n<\/details>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Apakah perusahaan Anda yakin dapat memenuhi permintaan produksi tanpa hambatan kapasitas? Capacity Requirements Planning (CRP) adalah metode perencanaan produksi yang mengevaluasi apakah kapasitas tenaga kerja dan mesin tersedia untuk memenuhi jadwal produksi yang ditetapkan. Di Indonesia, pengendalian proses produksi juga makin terkait kepatuhan perizinan berbasis risiko lewat Permenperin No. 37 Tahun 2025 yang memuat standar [&hellip;]<\/p>\n","protected":false},"author":222,"featured_media":180365,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[353],"tags":[],"class_list":{"0":"post-180373","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-manufacturing"},"acf":{"post_reviewer":""},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.1 (Yoast SEO v25.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Panduan Lengkap Capacity Requirements Planning<\/title>\n<meta name=\"description\" content=\"Pelajari tentang Capacity Requirements Planning dan bagaimana strategi ini dapat mengatasi masalah produksi di pabrik Anda.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/\" \/>\n<meta property=\"og:locale\" content=\"id_ID\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Panduan Lengkap Capacity Requirements Planning\" \/>\n<meta property=\"og:description\" content=\"Pelajari tentang Capacity Requirements Planning dan bagaimana strategi ini dapat mengatasi masalah produksi di pabrik Anda.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/\" \/>\n<meta property=\"og:site_name\" content=\"HashMicro Indonesia\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/hashmicro\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-11T06:42:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-19T01:39:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/12\/capacity-requirements-planning.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=\"Kinan Eliana\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@hashmicro\" \/>\n<meta name=\"twitter:site\" content=\"@hashmicro\" \/>\n<meta name=\"twitter:label1\" content=\"Ditulis oleh\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kinan Eliana\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimasi waktu membaca\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 menit\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/\"},\"author\":{\"name\":\"Kinan Eliana\",\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/person\/53c7ddb69fea5f813a7687ddf4196411\"},\"headline\":\"Panduan Lengkap Capacity Requirements Planning\",\"datePublished\":\"2025-12-11T06:42:58+00:00\",\"dateModified\":\"2026-01-19T01:39:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/\"},\"wordCount\":1757,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/12\/capacity-requirements-planning.webp\",\"articleSection\":[\"Manufacturing Automation\"],\"inLanguage\":\"id\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/\",\"url\":\"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/\",\"name\":\"Panduan Lengkap Capacity Requirements Planning\",\"isPartOf\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/12\/capacity-requirements-planning.webp\",\"datePublished\":\"2025-12-11T06:42:58+00:00\",\"dateModified\":\"2026-01-19T01:39:39+00:00\",\"description\":\"Pelajari tentang Capacity Requirements Planning dan bagaimana strategi ini dapat mengatasi masalah produksi di pabrik Anda.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/#breadcrumb\"},\"inLanguage\":\"id\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/#primaryimage\",\"url\":\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/12\/capacity-requirements-planning.webp\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/12\/capacity-requirements-planning.webp\",\"width\":1200,\"height\":675,\"caption\":\"capacity requirements planning\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.hashmicro.com\/id\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Panduan Lengkap Capacity Requirements Planning\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/#website\",\"url\":\"https:\/\/www.hashmicro.com\/id\/blog\/\",\"name\":\"HashMicro Indonesia\",\"description\":\"Blog Software Manajemen Bisnis Indonesia #1\",\"publisher\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.hashmicro.com\/id\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"id\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/#organization\",\"name\":\"HashMicro Indonesia\",\"url\":\"https:\/\/www.hashmicro.com\/id\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2023\/11\/hashmicro-logo-blog.webp\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2023\/11\/hashmicro-logo-blog.webp\",\"width\":924,\"height\":121,\"caption\":\"HashMicro Indonesia\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/hashmicro\",\"https:\/\/x.com\/hashmicro\",\"https:\/\/www.linkedin.com\/company\/hashmicro\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/person\/53c7ddb69fea5f813a7687ddf4196411\",\"name\":\"Kinan Eliana\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/kinan-96x96.webp\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/kinan-96x96.webp\",\"caption\":\"Kinan Eliana\"},\"description\":\"Kinan telah berpengalaman selama 3 tahun di bidang content writing untuk industri manufaktur, konstruksi, dan retail. Ia secara konsisten mengulas topik terkait proses operasional bisnis manufaktur, manajemen omnichannel, manajemen proyek, serta implementasi teknologi digital untuk proses bisnis.\",\"sameAs\":[\"https:\/\/www.hashmicro.com\/id\/\"],\"gender\":\"Perempuan\",\"knowsAbout\":[\"industri\",\"manajemen bisnis\"],\"knowsLanguage\":[\"Inggris\",\"Indonesia\"],\"jobTitle\":\"Content Writer\",\"url\":\"https:\/\/www.hashmicro.com\/id\/blog\/author\/kinan-eliana\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Panduan Lengkap Capacity Requirements Planning","description":"Pelajari tentang Capacity Requirements Planning dan bagaimana strategi ini dapat mengatasi masalah produksi di pabrik Anda.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/","og_locale":"id_ID","og_type":"article","og_title":"Panduan Lengkap Capacity Requirements Planning","og_description":"Pelajari tentang Capacity Requirements Planning dan bagaimana strategi ini dapat mengatasi masalah produksi di pabrik Anda.","og_url":"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/","og_site_name":"HashMicro Indonesia","article_publisher":"https:\/\/www.facebook.com\/hashmicro","article_published_time":"2025-12-11T06:42:58+00:00","article_modified_time":"2026-01-19T01:39:39+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/12\/capacity-requirements-planning.webp","type":"image\/webp"}],"author":"Kinan Eliana","twitter_card":"summary_large_image","twitter_creator":"@hashmicro","twitter_site":"@hashmicro","twitter_misc":{"Ditulis oleh":"Kinan Eliana","Estimasi waktu membaca":"10 menit"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/#article","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/"},"author":{"name":"Kinan Eliana","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/person\/53c7ddb69fea5f813a7687ddf4196411"},"headline":"Panduan Lengkap Capacity Requirements Planning","datePublished":"2025-12-11T06:42:58+00:00","dateModified":"2026-01-19T01:39:39+00:00","mainEntityOfPage":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/"},"wordCount":1757,"commentCount":0,"publisher":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/#organization"},"image":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/12\/capacity-requirements-planning.webp","articleSection":["Manufacturing Automation"],"inLanguage":"id","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/","url":"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/","name":"Panduan Lengkap Capacity Requirements Planning","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/#primaryimage"},"image":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/12\/capacity-requirements-planning.webp","datePublished":"2025-12-11T06:42:58+00:00","dateModified":"2026-01-19T01:39:39+00:00","description":"Pelajari tentang Capacity Requirements Planning dan bagaimana strategi ini dapat mengatasi masalah produksi di pabrik Anda.","breadcrumb":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/#breadcrumb"},"inLanguage":"id","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/"]}]},{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/#primaryimage","url":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/12\/capacity-requirements-planning.webp","contentUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/12\/capacity-requirements-planning.webp","width":1200,"height":675,"caption":"capacity requirements planning"},{"@type":"BreadcrumbList","@id":"https:\/\/www.hashmicro.com\/id\/blog\/capacity-requirements-planning\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.hashmicro.com\/id\/blog\/"},{"@type":"ListItem","position":2,"name":"Panduan Lengkap Capacity Requirements Planning"}]},{"@type":"WebSite","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#website","url":"https:\/\/www.hashmicro.com\/id\/blog\/","name":"HashMicro Indonesia","description":"Blog Software Manajemen Bisnis Indonesia #1","publisher":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.hashmicro.com\/id\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"id"},{"@type":"Organization","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#organization","name":"HashMicro Indonesia","url":"https:\/\/www.hashmicro.com\/id\/blog\/","logo":{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2023\/11\/hashmicro-logo-blog.webp","contentUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2023\/11\/hashmicro-logo-blog.webp","width":924,"height":121,"caption":"HashMicro Indonesia"},"image":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/hashmicro","https:\/\/x.com\/hashmicro","https:\/\/www.linkedin.com\/company\/hashmicro"]},{"@type":"Person","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/person\/53c7ddb69fea5f813a7687ddf4196411","name":"Kinan Eliana","image":{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/person\/image\/","url":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/kinan-96x96.webp","contentUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/kinan-96x96.webp","caption":"Kinan Eliana"},"description":"Kinan telah berpengalaman selama 3 tahun di bidang content writing untuk industri manufaktur, konstruksi, dan retail. Ia secara konsisten mengulas topik terkait proses operasional bisnis manufaktur, manajemen omnichannel, manajemen proyek, serta implementasi teknologi digital untuk proses bisnis.","sameAs":["https:\/\/www.hashmicro.com\/id\/"],"gender":"Perempuan","knowsAbout":["industri","manajemen bisnis"],"knowsLanguage":["Inggris","Indonesia"],"jobTitle":"Content Writer","url":"https:\/\/www.hashmicro.com\/id\/blog\/author\/kinan-eliana\/"}]}},"focus_keyword":"capacity requirements planning","order_j":"","_links":{"self":[{"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/posts\/180373","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/users\/222"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/comments?post=180373"}],"version-history":[{"count":10,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/posts\/180373\/revisions"}],"predecessor-version":[{"id":185454,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/posts\/180373\/revisions\/185454"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/media\/180365"}],"wp:attachment":[{"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/media?parent=180373"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/categories?post=180373"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/tags?post=180373"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}