{"id":4212,"date":"2025-03-05T07:07:27","date_gmt":"2025-03-05T07:07:27","guid":{"rendered":"https:\/\/www.hashmicro.com\/my\/blog\/?p=4212"},"modified":"2026-03-13T06:47:34","modified_gmt":"2026-03-13T06:47:34","slug":"quotation-letter","status":"publish","type":"post","link":"https:\/\/www.hashmicro.com\/my\/blog\/quotation-letter\/","title":{"rendered":"Quotation Letter: Definition, Types, and Components"},"content":{"rendered":"<p>Malaysian SMEs take an average of 64 days to receive payment from their customers, according to <a href=\"https:\/\/www.experian.com.my\/2025\/05\/21\/experian-malaysias-state-of-credit-2025-reveals-sme-resilience-but-cash-flow-strains-persist\/\" target=\"_blank\" rel=\"noopener\">Experian Malaysia&#8217;s State of Credit 2025 report<\/a>. That gap between issuing an invoice and actually getting paid is where cash flow problems start.<\/p>\n<p>In Malaysia, many SMEs drive GDP growth, but they often struggle with inflation, supply chain issues, and labour shortages. Worse, they are heavily affected by cash flow issues even though they have <a href=\"https:\/\/www.nst.com.my\/business\/economy\/2023\/10\/964700\/smes-have-less-two-months-cash-reserve-samenta-study\">seen revenue growth<\/a>.<\/p>\n<p>Even large enterprises aren&#8217;t immune; poor cash flow management can hurt business stability and growth. One overlooked factor? Inefficient quotation processes that lead to delays, miscommunication, and lost sales.<\/p>\n<p>So, if you\u2019re managing purchasing for a while and want to refine your quotation skills, this article is for you. We will guide you to understanding what a quotation letter is, what types there are, and how to write one. Let\u2019s get started!<\/p>\n<table style=\"border-collapse: collapse; background-color: #fffacd; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); border-radius: 25px 25px 25px 25px;\" width=\"100%\">\n<tbody>\n<tr>\n<td style=\"padding: 15px; border: none;\">\n<h3 style=\"margin-bottom: 10px;\"><span style=\"background-color: #990000; color: #ffffff; padding: 5px;\"><b>Key Takeaways<\/b><\/span><\/h3>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\">A <a href=\"#definition\">clear and professional quotation<\/a> letter builds trust and increases the chances of closing a deal.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Businesses use <a href=\"#type\">different types of quotations<\/a>, from sales quotes to purchase orders, to meet specific needs.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Fast and <a href=\"#when\">well-formatted quotations<\/a> give businesses an edge by improving customer experience and response times.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"#hashmicro\">Procurement Software<\/a> speeds up quotation creation, eliminates errors, and streamlines the entire process.<\/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\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><\/p>\n<p>Overcoming quotation delays and cash flow issues is essential for your business stability. Click the banner below to see how our software handles your sales process.<\/p>\n<p><span data-sheets-root=\"1\"><a href=\"https:\/\/www.hashmicro.com\/my\/invoicing-software?medium=moneysite-banner\" target=\"_blank\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/08\/e-Invoicing-Software.webp\" data-desktop-src=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/08\/e-Invoicing-Software.webp\" data-mobile-src=\"\" alt=\"eInvoicing\" 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>What a Quotation Letter Actually Covers<\/strong><\/h2>\n<p><span id=\"definition\">A quotation is a document a seller gives to a buyer, detailing the price and conditions for goods or services. Also called quotes, sales quotes, or sales quotations, they inform potential buyers of costs before making a purchase decision.<\/span><\/p>\n<p>While not typically legally binding unless included in a contract, accepting a quote generally indicates a commitment to the sale at the specified price. It follows a structured format and plays a key role in various business situations, such as responding to requests for quotations and providing pricing information to customers.<\/p>\n<h2><b>Types of Quotation Letters<\/b><\/h2>\n<p><span id=\"type\">Let&#8217;s take a closer look at the different <a href=\"https:\/\/www.hashmicro.com\/my\/blog\/price-quotation\/\">types of price quotation letters<\/a>.<\/span><\/p>\n<table style=\"width: 100%; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px;\">\n<thead>\n<tr style=\"background-color: #7f1e1f; color: #ffffff;\">\n<th style=\"padding: 12px; text-align: left; border: 1px solid #e0e0e0;\">Type<\/th>\n<th style=\"padding: 12px; text-align: left; border: 1px solid #e0e0e0;\">Purpose<\/th>\n<th style=\"padding: 12px; text-align: left; border: 1px solid #e0e0e0;\">Key details usually included<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"padding: 12px; border: 1px solid #e0e0e0; vertical-align: top;\"><strong>Standard Price Quotation<\/strong><\/td>\n<td style=\"padding: 12px; border: 1px solid #e0e0e0; vertical-align: top;\">Offers a proposed price for products or services.<\/td>\n<td style=\"padding: 12px; border: 1px solid #e0e0e0; vertical-align: top;\">Company name, client details, quotation validity\/expiry date, product or service description, pricing.<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 12px; border: 1px solid #e0e0e0; vertical-align: top;\"><strong>Sales Quotation<\/strong><\/td>\n<td style=\"padding: 12px; border: 1px solid #e0e0e0; vertical-align: top;\">Breaks down costs for a buyer\u2019s requested order and is sent upon request.<\/td>\n<td style=\"padding: 12px; border: 1px solid #e0e0e0; vertical-align: top;\">Itemised cost breakdown, quantities, unit price, total price, terms and validity period.<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 12px; border: 1px solid #e0e0e0; vertical-align: top;\"><strong>Purchase Order (PO)<\/strong><\/td>\n<td style=\"padding: 12px; border: 1px solid #e0e0e0; vertical-align: top;\">Confirms a purchase from buyer to seller and formalises the transaction.<\/td>\n<td style=\"padding: 12px; border: 1px solid #e0e0e0; vertical-align: top;\">Agreed price, quantity, item\/service type, delivery details, payment terms, PO number.<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 12px; border: 1px solid #e0e0e0; vertical-align: top;\"><strong>Business Travel Quotation<\/strong><\/td>\n<td style=\"padding: 12px; border: 1px solid #e0e0e0; vertical-align: top;\">Estimates travel-related costs for corporate trips.<\/td>\n<td style=\"padding: 12px; border: 1px solid #e0e0e0; vertical-align: top;\">Accommodation, transportation, itinerary details, taxes\/fees, validity period.<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 12px; border: 1px solid #e0e0e0; vertical-align: top;\"><strong>Corporate Event Quotation<\/strong><\/td>\n<td style=\"padding: 12px; border: 1px solid #e0e0e0; vertical-align: top;\">Summarises costs for organising company events, often across multiple suppliers.<\/td>\n<td style=\"padding: 12px; border: 1px solid #e0e0e0; vertical-align: top;\">Venue, catering, decorations, entertainment, timelines, supplier breakdown, total cost.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span id=\"when\"><br \/>\n<span data-sheets-root=\"1\">\r\n<style>\r\n    .accordion-wrapper-content{\r\n        background-color: white;\r\n        border: 1px solid #9c171e;\r\n        border-radius: 6px;\r\n        transition: 0.4s ease;\r\n        margin-bottom: 20px;\r\n        overflow: hidden;\r\n        box-shadow: 0px 0px 20px 0px #4034AB38;\r\n    }\r\n    \r\n    .header-content{\r\n        display: flex;\r\n        border: none;\r\n        border-radius: 6px 6px 6px 6px;\r\n        background: #9c171e;\r\n        align-items: center;\r\n        padding: 18px;\r\n        transition: 0.4s;\r\n        cursor: pointer;\r\n        justify-content: space-between;\r\n    }\r\n    \r\n    .header-content p{\r\n        margin-bottom: 0;\r\n    }\r\n    \r\n    .contenttitle {\r\n        color: #FFFFFF;\r\n        width: 100%;\r\n        text-align: left;\r\n        font-size: 16px;\r\n        line-height: 20px;\r\n        transition: 0.4s;\r\n        border: none;\r\n        border-radius: 6px 6px 6px 6px;\r\n        background: unset;\r\n        padding: 0;\r\n        text-transform: uppercase;\r\n        font-weight: 700;\r\n        display: flex;\r\n        justify-content: space-between;\r\n        align-items: center;\r\n        cursor: pointer;\r\n    }\r\n\r\n    .title-with-icon {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 10px;\r\n    }\r\n    \r\n    .title-with-icon svg {\r\n        flex-shrink: 0;\r\n    }\r\n\r\n    .header-content.active {\r\n      background-color: #9c171e;\r\n    }\r\n    \r\n    button.contenttitle{\r\n        background-color: unset;\r\n    }\r\n    \r\n    button.contenttitle::after{\r\n        content: \"<\";\r\n        width: 2.2rem;\r\n        height: 2.2rem;\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        border-radius: 50%;\r\n        color: #FFF;\r\n        flex-shrink: 0;\r\n        transition: 0.4s;\r\n        opacity: 1;\r\n        transform: rotate(90deg);\r\n        font-family: monospace;\r\n        font-size: 1.8rem;\r\n        font-weight: bold;\r\n        line-height: 1;\r\n    }\r\n\r\n    .contentbody {\r\n      padding: 0 18px;\r\n      max-height: none;\r\n      overflow: visible;\r\n      background-color: #ffffff;\r\n      border-radius: 0 0 6px 6px;\r\n      transition: max-height 0.4s ease, opacity 0.4s ease, padding 0.4s ease;\r\n      opacity: 1;\r\n    }\r\n\r\n    .contentbody.closed {\r\n      max-height: 0;\r\n      opacity: 0;\r\n      padding: 0 18px;\r\n    }\r\n\r\n    .contentbody p{\r\n        font-size: 16px;\r\n        font-weight: 400;\r\n        line-height: 28px;\r\n        text-align: left;\r\n        text-transform: none;\r\n        color: #494949;\r\n        padding: 18px 0;\r\n        margin: 0;\r\n    }\r\n    \r\n    .header-content:hover button.contenttitle::after{\r\n        opacity: 1;\r\n    }\r\n\r\n    .header-content.closed button.contenttitle::after{\r\n        transform: rotate(-90deg);\r\n    }\r\n<\/style>\r\n\r\n    <div class=\"accordion-wrapper-content\">\r\n        <div class=\"header-content active\" onclick=\"toggleAccordionItem(this)\">\r\n            <button class=\"contenttitle\" type=\"button\">\r\n                <span class=\"title-with-icon\">\r\n                    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"25\" height=\"25\" viewBox=\"0 0 25 25\" fill=\"#FFFFFF\">\r\n                        <path d=\"M18.6199 3.14893C17.8129 3.0182 17.003 3.36419 16.1982 3.84491C15.3796 4.33399 14.3916 5.07497 13.1853 5.97971L11.7497 7.0564L6 7.0564C3.37665 7.0564 1.25 9.18304 1.25 11.8064C1.25 14.4298 3.37665 16.5564 6 16.5564L11.7503 16.5564L13.1852 17.6326C14.3916 18.5374 15.3795 19.2784 16.1983 19.7674C17.003 20.2482 17.8129 20.5941 18.6199 20.4634C18.9831 20.4046 19.25 20.091 19.25 19.7231L19.25 3.88928C19.25 3.52136 18.9831 3.20776 18.6199 3.14893Z\" fill=\"#FFFFFF\"><\/path>\r\n                        <path d=\"M20.75 15.4814C22.4617 15.1339 23.75 13.6206 23.75 11.8064C23.75 9.99217 22.4617 8.47886 20.75 8.13141L20.75 15.4814Z\" fill=\"#FFFFFF\"><\/path>\r\n                        <path d=\"M5.25 18.0564L9.75 18.0564L9.75 20.3065C9.75 21.5491 8.74264 22.5565 7.5 22.5565C6.25736 22.5565 5.25 21.5491 5.25 20.3065L5.25 18.0564Z\" fill=\"#FFFFFF\"><\/path>\r\n                    <\/svg>\r\n                    <span>When to Send a Quote in Business<\/span>\r\n                <\/span>\r\n            <\/button>\r\n        <\/div>\r\n        <div class=\"contentbody\">\r\n            <p>Customers usually request quotations to compare options before committing to a purchase. Responding quickly gives you an advantage, but make sure your pricing is accurate and realistic before sending it out. A quotation is not legally binding, but quoting a price you cannot honor damages credibility and wastes both sides&#039; time.<\/p>\r\n        <\/div>\r\n    <\/div>\r\n\r\n<script>\r\nfunction toggleAccordionItem(element) {\r\n    var panel = element.nextElementSibling;\r\n    var isActive = element.classList.contains('active');\r\n    \r\n    if (isActive) {\r\n        element.classList.remove('active');\r\n        element.classList.add('closed');\r\n        panel.classList.add('closed');\r\n    } else {\r\n        element.classList.remove('closed');\r\n        element.classList.add('active');\r\n        panel.classList.remove('closed');\r\n    }\r\n}\r\n<\/script><\/span><\/span><\/p>\n<h2><b>Components of Quotation Letter<\/b><\/h2>\n<p>No matter how you create a quotation, it\u2019s essential to have a well-structured and professional template ready to use whenever needed.<\/p>\n<p>Unlike invoices, which are subject to various legal requirements, quotations have fewer formal regulations. However, including key details in your quotation template helps potential customers understand what they\u2019re agreeing to.<\/p>\n<ul>\n<li aria-level=\"1\"><b>Price<\/b>: Clearly state the total cost of the order along with itemized pricing for products or services. You may also include a breakdown of expenses, such as labor, materials, and VAT (if applicable).<\/li>\n<li aria-level=\"1\"><b>Expiration date<\/b>: Specify how long the quotation remains valid so customers know the timeframe for accepting or declining the offer.<\/li>\n<li aria-level=\"1\"><b>Company details<\/b>: Provide your business name, address, email, phone number, and, if applicable, VAT or business registration number.<\/li>\n<li aria-level=\"1\"><b>Customer details<\/b>: Include the recipient\u2019s name, phone number, and email address.<\/li>\n<\/ul>\n<p>Additional details, such as payment terms or an estimated timeline for project completion or delivery, can also be added for clarity.<\/p>\n<div style=\"border-collapse: collapse; background-color: #fffacd; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); border-radius: 20px; padding: 16px; border-left: 6px solid #8A0E19;\">\n<h3 style=\"margin: 0 0 10px 0;\"><span style=\"background-color: #8a0e19; color: #ffffff; padding: 6px 10px; border-radius: 6px;\"><b>Expert Insight<\/b><br \/>\n<\/span><\/h3>\n<p style=\"margin: 0 0 10px 0; line-height: 1.6;\">Brent Ladd, Digital Procurement Leader at Deloitte, shared a case where an AI-assisted review process reduced manual purchase request validation from <strong>80% to just 10%<\/strong>. His team noted that once the repetitive work was handled, procurement staff could shift their focus to higher-value tasks.<\/p>\n<p style=\"margin: 0; font-size: 12px; line-height: 1.5;\"><b>Reference:<\/b><a href=\"https:\/\/www.mckinsey.com\/capabilities\/operations\/our-insights\/autonomous-supply-chain-planning-for-consumer-goods-companies\" target=\"_blank\" rel=\"noopener\"><br \/>\n<\/a><a href=\"https:\/\/trustpair.com\/blog\/the-evolving-procurement-landscape-deloitte-experts-tell-all\/\" target=\"_blank\" rel=\"noopener\">Trustpair \u2013 The Evolving Procurement Landscape: Deloitte Experts Tell All<\/a><\/p>\n<\/div>\n<h2><b>How to Write a Quotation Letter<\/b><\/h2>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-4220\" src=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/type-of-quotation-letter.webp\" alt=\"type of quotation letter\" width=\"1200\" height=\"675\" srcset=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/type-of-quotation-letter.webp 1200w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/type-of-quotation-letter-300x169.webp 300w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/type-of-quotation-letter-1024x576.webp 1024w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/type-of-quotation-letter-768x432.webp 768w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/type-of-quotation-letter-747x420.webp 747w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/type-of-quotation-letter-150x84.webp 150w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/type-of-quotation-letter-696x392.webp 696w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/type-of-quotation-letter-1068x601.webp 1068w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/p>\n<p>There are several ways to create a quotation, including using online software, a Word or Excel template, or writing it by hand.<\/p>\n<p>When choosing a method, consider a few key factors:<\/p>\n<ol>\n<li><strong>First<\/strong>, think about the best way to communicate with customers. Since speed matters, many businesses prefer invoicing software to generate quotes quickly and send them via email, text, or messaging apps like WhatsApp and Facebook.<\/li>\n<li><strong>Next<\/strong>, consider professionalism. While there\u2019s no required format, a poorly presented quotation can leave a bad impression and affect how customers perceive your business.<\/li>\n<\/ol>\n<p>To maintain both speed and consistency, many companies now use <a href=\"https:\/\/www.hashmicro.com\/my\/blog\/best-erp-software\/\">ERP software with built-in quotation features<\/a> to create polished, branded quote letters in just minutes.<\/p>\n<h2><b>How to Format a Quotation Letter<\/b><\/h2>\n<p><img decoding=\"async\" class=\"size-large wp-image-16504 aligncenter\" src=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/Format-Quotation-Letter-1024x683.webp\" alt=\"Format Quotation Letter\" width=\"696\" height=\"464\" srcset=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/Format-Quotation-Letter-1024x683.webp 1024w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/Format-Quotation-Letter-300x200.webp 300w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/Format-Quotation-Letter-768x512.webp 768w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/Format-Quotation-Letter-630x420.webp 630w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/Format-Quotation-Letter-150x100.webp 150w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/Format-Quotation-Letter-696x464.webp 696w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/Format-Quotation-Letter-1068x712.webp 1068w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/Format-Quotation-Letter.webp 1536w\" sizes=\"(max-width: 696px) 100vw, 696px\" \/>There are no strict legal rules for formatting a sales quotation, but following standard formatting guidelines ensures clarity and professionalism. Many businesses design their quotations similarly to their invoices for consistency.<\/p>\n<p>A quotation template should prominently display the word &#8220;Quote&#8221; or &#8220;Quotation&#8221; at the top, making it easy to identify. Key details such as the date, document number, and customer contact information should be included at the top, followed by a breakdown of products and the total price.<\/p>\n<p>To maintain readability, use a clear font and organized layout. Adding a company logo or using brand colors can help personalize the document while keeping it professional.<\/p>\n<p>Even when sending quotations via email, consider how they will appear when printed. Since some customers prefer hard copies, it\u2019s best to format them to fit on an A4 page, with additional details attached as separate files if needed.<\/p>\n<h2><b>Example of a Quotation<\/b><\/h2>\n<p>Companies can use templates designed for different purposes to generate accurate price quotations. Here is a basic A4 quote letter example that can be created in Word:<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-4272 size-full\" src=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/acbde9ed-9315-4734-bdbf-2f4f0ffb6eac-0000-scaled-e1771828576864.webp\" alt=\"sales quotation template\" width=\"1978\" height=\"2112\" srcset=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/acbde9ed-9315-4734-bdbf-2f4f0ffb6eac-0000-scaled-e1771828576864.webp 1978w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/acbde9ed-9315-4734-bdbf-2f4f0ffb6eac-0000-scaled-e1771828576864-281x300.webp 281w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/acbde9ed-9315-4734-bdbf-2f4f0ffb6eac-0000-scaled-e1771828576864-959x1024.webp 959w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/acbde9ed-9315-4734-bdbf-2f4f0ffb6eac-0000-scaled-e1771828576864-768x820.webp 768w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/acbde9ed-9315-4734-bdbf-2f4f0ffb6eac-0000-scaled-e1771828576864-1439x1536.webp 1439w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/acbde9ed-9315-4734-bdbf-2f4f0ffb6eac-0000-scaled-e1771828576864-1918x2048.webp 1918w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/acbde9ed-9315-4734-bdbf-2f4f0ffb6eac-0000-scaled-e1771828576864-393x420.webp 393w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/acbde9ed-9315-4734-bdbf-2f4f0ffb6eac-0000-scaled-e1771828576864-150x160.webp 150w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/acbde9ed-9315-4734-bdbf-2f4f0ffb6eac-0000-scaled-e1771828576864-300x320.webp 300w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/acbde9ed-9315-4734-bdbf-2f4f0ffb6eac-0000-scaled-e1771828576864-696x743.webp 696w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/acbde9ed-9315-4734-bdbf-2f4f0ffb6eac-0000-scaled-e1771828576864-1068x1140.webp 1068w, https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/acbde9ed-9315-4734-bdbf-2f4f0ffb6eac-0000-scaled-e1771828576864-1920x2050.webp 1920w\" sizes=\"(max-width: 1978px) 100vw, 1978px\" \/>If you want more quotation templates that can be generated and already customized to your brand colors and design, why don\u2019t you try using <a href=\"https:\/\/www.hashmicro.com\/my\/blog\/best-procurement-software\/\">procurement software<\/a>? Aside from generating quote letters, it can also act as a bridge for your entire purchasing processes. Click the banner below to try it out!<\/p>\n<h2><b>Create Quote Letters Efficiently with Procurement Software<\/b><\/h2>\n<p><span id=\"hashmicro\">Templates help keep things consistent, but someone still has to fill them in, chase approvals, and track every version. Once quotation volume picks up, doing all of that manually gets slow and mistakes start slipping through.<\/span><\/p>\n<p>Procurement software takes the repetitive work off your team. When comparing options, focus on features that actually matter for quotation handling:<\/p>\n<ul>\n<li aria-level=\"1\"><b>E-Procurement:<\/b> Conduct tenders and request quotations online for a faster, more efficient procurement process.<\/li>\n<li aria-level=\"1\"><b>OCR for RFQ:<\/b> Automatically scan and process RFQ documents, eliminating manual data entry.<\/li>\n<li aria-level=\"1\"><b>Automatic Vendor Rating:<\/b> Evaluate vendors based on factors like punctuality, pricing, and order accuracy.<\/li>\n<li aria-level=\"1\"><b>Periodic Vendor Reviews:<\/b> Regularly assess supplier performance to maintain high standards.<\/li>\n<li aria-level=\"1\"><b>KPI Tracking per Purchaser:<\/b> Monitor each purchaser\u2019s performance to <a href=\"https:\/\/www.hashmicro.com\/my\/blog\/key-performance-indicators-kpi\/\">keep procurement goals on track<\/a>.<\/li>\n<li aria-level=\"1\"><b>Cost Savings Reports:<\/b> Track procurement savings and identify further cost-cutting opportunities.<\/li>\n<li aria-level=\"1\"><b>Vendor Promotion Management:<\/b> Organize and manage vendor deals for better collaboration.<\/li>\n<li aria-level=\"1\"><b>Custom RFQ Printouts:<\/b> Create tailored RFQ templates for clear, precise requests.<\/li>\n<li aria-level=\"1\"><b>Budget Tracking &amp; Purchase Limits:<\/b> Set spending limits and monitor budgets to prevent overspending.<\/li>\n<\/ul>\n<h2><b>Conclusion<\/b><\/h2>\n<p>A quotation letter helps businesses provide clear pricing details, ensuring transparency and professionalism in customer transactions. While templates can streamline the process, managing multiple quotes manually can become tedious and time-consuming.<\/p>\n<p>Why waste time on repetitive tasks when you can automate everything with Procurement Software? It lets you generate and send accurate, professional quotes in seconds. No more errors, no more back-and-forth edits.<\/p>\n<p>With features like e-procurement and automatic vendor rating, HashMicro makes your purchasing process smoother and smarter. Try the <a href=\"https:\/\/www.hashmicro.com\/my\/free-product-demo\/\">free demo<\/a> now and see how effortless procurement can be!<\/p>\n<p><span data-sheets-root=\"1\"><a href=\"https:\/\/www.hashmicro.com\/my\/free-product-demo\/?medium=free-product-demo\" target=\"_blank\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/08\/free-demo-desktop-my.webp\" data-desktop-src=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/08\/free-demo-desktop-my.webp\" data-mobile-src=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2024\/07\/free-demo-mobile-my.jpg\" alt=\"FreeDemo\" 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>Frequently Asked Questions on Quotation Letter<\/strong><\/h2>\n<ul class=\"bottom_faq\">\n<li>\n<details>\n<summary><strong>How does a price quote differ from an estimate?<\/strong><\/summary>\n<p>A price quote provides a fixed price for goods or services, which the seller commits to once accepted by the buyer. An estimate, on the other hand, offers an approximate cost that may change based on variables like project scope or material costs.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>Is a sales quotation legally binding?<\/strong><\/summary>\n<p>While a sales quotation itself isn&#8217;t typically a legally binding contract, once the buyer accepts the quoted terms, it can form the basis of a binding agreement between both parties.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>Can a price proposal include terms and conditions?<\/strong><\/summary>\n<p>Yes, a price proposal can and often should include terms and conditions, such as payment terms, delivery schedules, and warranties, to ensure both parties have a clear understanding of the agreement.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>How long should a quotation document remain valid?<\/strong><\/summary>\n<p>The validity period of a quotation document depends on factors like market conditions and company policy. Common practice is to set a validity period ranging from 30 to 90 days to account for potential changes in costs or availability.<\/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\": \"How does a price quote differ from an estimate?\",\n    \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"A price quote provides a fixed price for goods or services, which the seller commits to once accepted by the buyer. An estimate, on the other hand, offers an approximate cost that may change based on variables like project scope or material costs.\"\n    }\n  },{\n    \"@type\": \"Question\",\n    \"name\": \"Is a sales quotation legally binding?\",\n    \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"While a sales quotation itself isn't typically a legally binding contract, once the buyer accepts the quoted terms, it can form the basis of a binding agreement between both parties.\"\n    }\n  },{\n    \"@type\": \"Question\",\n    \"name\": \"Can a price proposal include terms and conditions?\",\n    \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"Yes, a price proposal can and often should include terms and conditions, such as payment terms, delivery schedules, and warranties, to ensure both parties have a clear understanding of the agreement.\"\n    }\n  },{\n    \"@type\": \"Question\",\n    \"name\": \"How long should a quotation document remain valid?\",\n    \"acceptedAnswer\": {\n      \"@type\": \"Answer\",\n      \"text\": \"The validity period of a quotation document depends on factors like market conditions and company policy. Common practice is to set a validity period ranging from 30 to 90 days to account for potential changes in costs or availability.\"\n    }\n  }]\n}\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Malaysian SMEs take an average of 64 days to receive payment from their customers, according to Experian Malaysia&#8217;s State of Credit 2025 report. That gap between issuing an invoice and actually getting paid is where cash flow problems start. In Malaysia, many SMEs drive GDP growth, but they often struggle with inflation, supply chain issues, [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":4219,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-4212","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>Quotation Letter: Definition, Types, and Components<\/title>\n<meta name=\"description\" content=\"A quotation letter is a formal document that provides pricing details, terms, and conditions for products or services to potential buyers.\" \/>\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\/quotation-letter\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Quotation Letter: Definition, Types, and Components\" \/>\n<meta property=\"og:description\" content=\"A quotation letter is a formal document that provides pricing details, terms, and conditions for products or services to potential buyers.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.hashmicro.com\/my\/blog\/quotation-letter\/\" \/>\n<meta property=\"og:site_name\" content=\"HashMicro Malaysia\" \/>\n<meta property=\"article:published_time\" content=\"2025-03-05T07:07:27+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-13T06:47:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/quotation-letter.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=\"Nur Fi&#039;llia Nugrahani\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nur Fi&#039;llia Nugrahani\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 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\/quotation-letter\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/quotation-letter\/\"},\"author\":{\"name\":\"Nur Fi'llia Nugrahani\",\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/#\/schema\/person\/691c3618a2b14a7af3696de5f3dd4660\"},\"headline\":\"Quotation Letter: Definition, Types, and Components\",\"datePublished\":\"2025-03-05T07:07:27+00:00\",\"dateModified\":\"2026-03-13T06:47:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/quotation-letter\/\"},\"wordCount\":1573,\"publisher\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/quotation-letter\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/quotation-letter.webp\",\"articleSection\":[\"Other\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/quotation-letter\/\",\"url\":\"https:\/\/www.hashmicro.com\/my\/blog\/quotation-letter\/\",\"name\":\"Quotation Letter: Definition, Types, and Components\",\"isPartOf\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/quotation-letter\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/quotation-letter\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/quotation-letter.webp\",\"datePublished\":\"2025-03-05T07:07:27+00:00\",\"dateModified\":\"2026-03-13T06:47:34+00:00\",\"description\":\"A quotation letter is a formal document that provides pricing details, terms, and conditions for products or services to potential buyers.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/quotation-letter\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.hashmicro.com\/my\/blog\/quotation-letter\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/quotation-letter\/#primaryimage\",\"url\":\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/quotation-letter.webp\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/quotation-letter.webp\",\"width\":1200,\"height\":675,\"caption\":\"quotation letter\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/quotation-letter\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.hashmicro.com\/my\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Quotation Letter: Definition, Types, and Components\"}]},{\"@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\/691c3618a2b14a7af3696de5f3dd4660\",\"name\":\"Nur Fi'llia Nugrahani\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.hashmicro.com\/my\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/03\/cropped-WhatsApp-Image-2023-12-11-at-14.23.32_bfe4caf2-96x96.jpg\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/03\/cropped-WhatsApp-Image-2023-12-11-at-14.23.32_bfe4caf2-96x96.jpg\",\"caption\":\"Nur Fi'llia Nugrahani\"},\"description\":\"A content writer specializing in the intersection of technology and business. Produces engaging articles that resonate with readers and give meaningful insights.\",\"url\":\"https:\/\/www.hashmicro.com\/my\/blog\/author\/filia-nugrahani\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Quotation Letter: Definition, Types, and Components","description":"A quotation letter is a formal document that provides pricing details, terms, and conditions for products or services to potential buyers.","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\/quotation-letter\/","og_locale":"en_US","og_type":"article","og_title":"Quotation Letter: Definition, Types, and Components","og_description":"A quotation letter is a formal document that provides pricing details, terms, and conditions for products or services to potential buyers.","og_url":"https:\/\/www.hashmicro.com\/my\/blog\/quotation-letter\/","og_site_name":"HashMicro Malaysia","article_published_time":"2025-03-05T07:07:27+00:00","article_modified_time":"2026-03-13T06:47:34+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/quotation-letter.webp","type":"image\/webp"}],"author":"Nur Fi'llia Nugrahani","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Nur Fi'llia Nugrahani","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.hashmicro.com\/my\/blog\/quotation-letter\/#article","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/quotation-letter\/"},"author":{"name":"Nur Fi'llia Nugrahani","@id":"https:\/\/www.hashmicro.com\/my\/blog\/#\/schema\/person\/691c3618a2b14a7af3696de5f3dd4660"},"headline":"Quotation Letter: Definition, Types, and Components","datePublished":"2025-03-05T07:07:27+00:00","dateModified":"2026-03-13T06:47:34+00:00","mainEntityOfPage":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/quotation-letter\/"},"wordCount":1573,"publisher":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/#organization"},"image":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/quotation-letter\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/quotation-letter.webp","articleSection":["Other"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.hashmicro.com\/my\/blog\/quotation-letter\/","url":"https:\/\/www.hashmicro.com\/my\/blog\/quotation-letter\/","name":"Quotation Letter: Definition, Types, and Components","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/quotation-letter\/#primaryimage"},"image":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/quotation-letter\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/quotation-letter.webp","datePublished":"2025-03-05T07:07:27+00:00","dateModified":"2026-03-13T06:47:34+00:00","description":"A quotation letter is a formal document that provides pricing details, terms, and conditions for products or services to potential buyers.","breadcrumb":{"@id":"https:\/\/www.hashmicro.com\/my\/blog\/quotation-letter\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.hashmicro.com\/my\/blog\/quotation-letter\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hashmicro.com\/my\/blog\/quotation-letter\/#primaryimage","url":"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/quotation-letter.webp","contentUrl":"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2025\/03\/quotation-letter.webp","width":1200,"height":675,"caption":"quotation letter"},{"@type":"BreadcrumbList","@id":"https:\/\/www.hashmicro.com\/my\/blog\/quotation-letter\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.hashmicro.com\/my\/blog\/"},{"@type":"ListItem","position":2,"name":"Quotation Letter: Definition, Types, and Components"}]},{"@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\/691c3618a2b14a7af3696de5f3dd4660","name":"Nur Fi'llia Nugrahani","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hashmicro.com\/my\/blog\/#\/schema\/person\/image\/","url":"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/03\/cropped-WhatsApp-Image-2023-12-11-at-14.23.32_bfe4caf2-96x96.jpg","contentUrl":"https:\/\/www.hashmicro.com\/my\/blog\/wp-content\/uploads\/2026\/03\/cropped-WhatsApp-Image-2023-12-11-at-14.23.32_bfe4caf2-96x96.jpg","caption":"Nur Fi'llia Nugrahani"},"description":"A content writer specializing in the intersection of technology and business. Produces engaging articles that resonate with readers and give meaningful insights.","url":"https:\/\/www.hashmicro.com\/my\/blog\/author\/filia-nugrahani\/"}]}},"order_j":"","_links":{"self":[{"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/posts\/4212","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\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/comments?post=4212"}],"version-history":[{"count":18,"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/posts\/4212\/revisions"}],"predecessor-version":[{"id":17674,"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/posts\/4212\/revisions\/17674"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/media\/4219"}],"wp:attachment":[{"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/media?parent=4212"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/categories?post=4212"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hashmicro.com\/my\/blog\/wp-json\/wp\/v2\/tags?post=4212"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}