{"id":2662,"date":"2025-12-08T12:55:08","date_gmt":"2025-12-08T12:55:08","guid":{"rendered":"https:\/\/4easy.business\/?page_id=2662"},"modified":"2026-02-09T10:04:43","modified_gmt":"2026-02-09T10:04:43","slug":"payroll-calculator","status":"publish","type":"page","link":"https:\/\/4easy.business\/sr\/payroll-calculator\/","title":{"rendered":"Payroll Calculator Serbia"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2662\" class=\"elementor elementor-2662\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c8c3059 e-flex e-con-boxed e-con e-parent\" data-id=\"c8c3059\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-80e4cc9 elementor-widget elementor-widget-video\" data-id=\"80e4cc9\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;video_type&quot;:&quot;hosted&quot;,&quot;autoplay&quot;:&quot;yes&quot;,&quot;mute&quot;:&quot;yes&quot;,&quot;loop&quot;:&quot;yes&quot;}\" data-widget_type=\"video.default\">\n\t\t\t\t\t\t\t<div class=\"e-hosted-video elementor-wrapper elementor-open-inline\">\n\t\t\t\t\t<video class=\"elementor-video\" src=\"https:\/\/4easy.business\/wp-content\/uploads\/2025\/10\/Black-Green-and-White-Modern-Bold-Business-Service-Promotion-Ads-Video-1.mp4\" autoplay=\"\" loop=\"\" muted=\"muted\" controlsList=\"nodownload\"><\/video>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fd03cd2 elementor-widget elementor-widget-html\" data-id=\"fd03cd2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<p style=\"font-size:14px;color:#555;max-width:800px;\">\r\nThis <strong>Payroll Calculator for Serbia<\/strong> helps employers and entrepreneurs estimate \r\n<strong>net salaries, gross wages and total employment cost<\/strong> in accordance with Serbian labor \r\nand tax regulations. The calculator reflects mandatory taxes and social contributions used in \r\nmonthly <strong>payroll processing <\/strong> in Serbia.\r\n<\/p>\r\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-70604d1 elementor-widget elementor-widget-html\" data-id=\"70604d1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n\/* === GENERAL BOX === *\/\r\n.calc-box {\r\n  max-width: 650px;\r\n  margin: 30px auto;\r\n  padding: 25px;\r\n  background: #fff;\r\n  border-radius: 14px;\r\n  box-shadow: 0 4px 14px rgba(0,0,0,0.12);\r\n  font-family: Arial, sans-serif;\r\n}\r\n\r\nh3 {\r\n  text-align:center;\r\n  margin-bottom: 5px;\r\n  font-size: 26px;\r\n  font-weight: 700;\r\n}\r\n\r\nh3 small {\r\n  display:block;\r\n  font-size: 13px;\r\n  color:#666;\r\n  margin-top:3px;\r\n}\r\n\r\n.calc-label {\r\n  font-size: 15px;\r\n  margin-top: 12px;\r\n  font-weight: 600;\r\n}\r\n\r\n.value-box {\r\n  font-size: 14px;\r\n  margin-top: 8px;\r\n  margin-bottom: 12px;\r\n}\r\n\r\n\/* === INPUTS === *\/\r\ninput[type=number] {\r\n  width: 260px;              \/* smanjena \u0161irina gross\/net polja *\/\r\n  padding: 10px;\r\n  font-size: 16px;\r\n  border-radius: 6px;\r\n  border: 1px solid #ccc;\r\n  margin-top: 6px;\r\n}\r\n\r\n.small-input { width: 180px !important; }\r\n\r\n\/* === TABOVI \u2013 pill stil === *\/\r\n.tab-nav {\r\n  display: flex;\r\n  justify-content: center;\r\n  gap: 12px;\r\n  margin: 25px 0 30px;\r\n}\r\n\r\n.tab-btn {\r\n  padding: 12px 32px;\r\n  border-radius: 30px;\r\n  border: 2px solid #ddd;\r\n  background: #fff;\r\n  cursor: pointer;\r\n  font-size: 16px;\r\n  font-weight: 600;\r\n  transition: all 0.25s ease;\r\n  color: #444;\r\n  box-shadow: 0 2px 4px rgba(0,0,0,0.06);\r\n}\r\n\r\n.tab-btn:hover {\r\n  border-color: #ff7f32;\r\n  color: #ff7f32;\r\n}\r\n\r\n.tab-btn.active {\r\n  background: #ff7f32;\r\n  color: #fff;\r\n  border-color: #ff7f32;\r\n  box-shadow: 0 3px 8px rgba(255,128,0,0.4);\r\n  transform: translateY(-1px);\r\n}\r\n\r\n.tab-panel { display:none; }\r\n.tab-panel.active { display:block; }\r\n\r\n\/* === SLIDERS === *\/\r\n.result-header {\r\n  display:flex;\r\n  justify-content:space-between;\r\n  font-size:15px;\r\n  margin-top:18px;\r\n  font-weight:600;\r\n}\r\n\r\n.result-slider {\r\n  width:100%;\r\n  accent-color:#ff7f32;\r\n}\r\n\r\n\/* ADVANCED SETTINGS *\/\r\n.adv-toggle {\r\n  margin-top:6px;\r\n  font-size:12px;\r\n  text-align:right;\r\n  cursor:pointer;\r\n  color:#ff7f32;\r\n}\r\n\r\n.advanced-panel {\r\n  display:none;\r\n  border-left:3px solid #ff7f32;\r\n  margin-top:10px;\r\n  padding-left:10px;\r\n}\r\n\r\n.note {\r\n  font-size:12px;\r\n  color:#777;\r\n  margin-top:12px;\r\n}\r\n\r\n\/* MOBILE *\/\r\n@media(max-width:480px){\r\n  input[type=number] { width: 100%; }\r\n  .tab-btn { padding: 10px 22px; font-size: 14px; }\r\n}\r\n<\/style>\r\n\r\n\r\n<!-- ======== TAB NAVIGACIJA ======== -->\r\n<div class=\"tab-nav\">\r\n  <div class=\"tab-btn active\" data-tab=\"gross-tab\">Gross \u2192 Net<\/div>\r\n  <div class=\"tab-btn\" data-tab=\"net-tab\">Net \u2192 Gross<\/div>\r\n<\/div>\r\n\r\n\r\n<!-- ========================= GROSS \u2192 NET ========================= -->\r\n<div id=\"gross-tab\" class=\"tab-panel active\">\r\n  <div class=\"calc-box\">\r\n\r\n    <h3>\r\n      Gross \u2192 Net Salary\r\n      <small>based on Serbian labor law<\/small>\r\n    <\/h3>\r\n\r\n    <label class=\"calc-label\">Exchange rate (RSD per EUR)<\/label>\r\n    <input id=\"grossRate\" class=\"small-input\" type=\"number\" value=\"117\">\r\n\r\n    <div class=\"adv-toggle\" data-target=\"gross-adv\"><span>Advanced settings<\/span><\/div>\r\n    <div id=\"gross-adv\" class=\"advanced-panel\">\r\n      <label>Non-taxable amount (RSD)<\/label>\r\n      <input id=\"grossNonTax\" type=\"number\" value=\"34221\">\r\n\r\n      <label>Maximum contribution base (RSD)<\/label>\r\n      <input id=\"grossCap\" type=\"number\" value=\"732820\">\r\n    <\/div>\r\n\r\n    <label class=\"calc-label\">Gross salary (EUR)<\/label>\r\n    <input id=\"grossAmount\" type=\"number\" value=\"2500\">\r\n\r\n    <div class=\"value-box\">\r\n      Entered gross: <strong><span id=\"grossValue\">2500<\/span> EUR<\/strong>\r\n    <\/div>\r\n\r\n    <div class=\"result-header\">\r\n      <span><b>Net salary<\/b><\/span>\r\n      <span><b><span id=\"netValue2\">0<\/span> EUR<\/b><\/span>\r\n    <\/div>\r\n    <input type=\"range\" id=\"grossNetSlider_net\" class=\"result-slider\">\r\n\r\n    <div class=\"result-header\">\r\n      <span><b>Tax<\/b><\/span>\r\n      <span><b><span id=\"taxValue\">0<\/span> EUR<\/b><\/span>\r\n    <\/div>\r\n    <input type=\"range\" id=\"grossNetSlider_tax\" class=\"result-slider\">\r\n\r\n    <div class=\"result-header\">\r\n      <span><b>Employer contributions<\/b><\/span>\r\n      <span><b><span id=\"employerContrib\">0<\/span> EUR<\/b><\/span>\r\n    <\/div>\r\n    <input type=\"range\" id=\"grossNetSlider_emp\" class=\"result-slider\">\r\n\r\n    <div class=\"result-header\">\r\n      <span style=\"color:#ff7f32; font-weight:900;\">TOTAL EMPLOYER COST<\/span>\r\n      <span style=\"color:#ff7f32; font-weight:900;\"><span id=\"grossNet_totalCost\">0<\/span> EUR<\/span>\r\n    <\/div>\r\n    <input type=\"range\" id=\"grossNetSlider_total\" class=\"result-slider\">\r\n\r\n  <\/div>\r\n<\/div>\r\n\r\n\r\n<!-- ========================= NET \u2192 GROSS ========================= -->\r\n<div id=\"net-tab\" class=\"tab-panel\">\r\n  <div class=\"calc-box\">\r\n\r\n    <h3>\r\n      Net \u2192 Gross Salary\r\n      <small>based on Serbian labor law<\/small>\r\n    <\/h3>\r\n\r\n    <label class=\"calc-label\">Exchange rate (RSD per EUR)<\/label>\r\n    <input id=\"netRate\" class=\"small-input\" type=\"number\" value=\"117\">\r\n\r\n    <div class=\"adv-toggle\" data-target=\"net-adv\"><span>Advanced settings<\/span><\/div>\r\n    <div id=\"net-adv\" class=\"advanced-panel\">\r\n      <label>Non-taxable amount (RSD)<\/label>\r\n      <input id=\"netNonTax\" type=\"number\" value=\"34221\">\r\n\r\n      <label>Maximum contribution base (RSD)<\/label>\r\n      <input id=\"netCap\" type=\"number\" value=\"732820\">\r\n    <\/div>\r\n\r\n    <label class=\"calc-label\">Net salary (EUR)<\/label>\r\n    <input id=\"netAmount\" type=\"number\" value=\"3500\">\r\n\r\n    <div class=\"value-box\">\r\n      Entered net: <strong><span id=\"netInputEcho\">3500<\/span> EUR<\/strong>\r\n    <\/div>\r\n\r\n    <div class=\"result-header\">\r\n      <span><b>Gross salary<\/b><\/span>\r\n      <span><b><span id=\"grossOut2\">0<\/span> EUR<\/b><\/span>\r\n    <\/div>\r\n    <input type=\"range\" id=\"netGrossSlider_gross\" class=\"result-slider\">\r\n\r\n    <div class=\"result-header\">\r\n      <span><b>Tax<\/b><\/span>\r\n      <span><b><span id=\"taxOut\">0<\/span> EUR<\/b><\/span>\r\n    <\/div>\r\n    <input type=\"range\" id=\"netGrossSlider_tax\" class=\"result-slider\">\r\n\r\n    <div class=\"result-header\">\r\n      <span><b>Employer contributions<\/b><\/span>\r\n      <span><b><span id=\"employerOut\">0<\/span> EUR<\/b><\/span>\r\n    <\/div>\r\n    <input type=\"range\" id=\"netGrossSlider_emp\" class=\"result-slider\">\r\n\r\n    <div class=\"result-header\">\r\n      <span style=\"color:#ff7f32; font-weight:900;\">TOTAL EMPLOYER COST<\/span>\r\n      <span style=\"color:#ff7f32; font-weight:900;\"><span id=\"netGross_totalCost\">0<\/span> EUR<\/span>\r\n    <\/div>\r\n    <input type=\"range\" id=\"netGrossSlider_total\" class=\"result-slider\">\r\n\r\n  <\/div>\r\n<\/div>\r\n\r\n\r\n<script>\r\n\/* ========== TAB SWITCHING ========== *\/\r\ndocument.querySelectorAll(\".tab-btn\").forEach(btn => {\r\n  btn.addEventListener(\"click\", () => {\r\n    document.querySelectorAll(\".tab-btn\").forEach(b => b.classList.remove(\"active\"));\r\n    document.querySelectorAll(\".tab-panel\").forEach(p => p.classList.remove(\"active\"));\r\n    btn.classList.add(\"active\");\r\n    document.getElementById(btn.dataset.tab).classList.add(\"active\");\r\n  });\r\n});\r\n\r\n\/* ADVANCED SETTINGS TOGGLE *\/\r\ndocument.querySelectorAll(\".adv-toggle\").forEach(t => {\r\n  t.addEventListener(\"click\", () => {\r\n    const panel = document.getElementById(t.dataset.target);\r\n    panel.style.display = panel.style.display === \"block\" ? \"none\" : \"block\";\r\n  });\r\n});\r\n\r\n\/* Slider max helper *\/\r\nfunction getNiceMax(value) {\r\n  if (!value || value < 1) return 1000;\r\n  return Math.ceil(value \/ 1000) * 1000;\r\n}\r\n\r\n\/* ========== GROSS \u2192 NET ========== *\/\r\nfunction calcGrossNet() {\r\n  const rate   = +grossRate.value;\r\n  const nonTax = +grossNonTax.value;\r\n  const cap    = +grossCap.value;\r\n  const gross  = +grossAmount.value;\r\n\r\n  if (gross <= 0 || rate <= 0) return;\r\n\r\n  const grossRSD = gross * rate;\r\n\r\n  \/* employee contributions \u2013 19.9% do CAP-a *\/\r\n  const eeBase = (cap > 0) ? Math.min(grossRSD, cap) : grossRSD;\r\n  const ee = Math.round(eeBase * 0.14)\r\n           + Math.round(eeBase * 0.0515)\r\n           + Math.round(eeBase * 0.0075);\r\n\r\n  \/* tax = (gross - nonTax) * 10% *\/\r\n  let taxBase = grossRSD - nonTax;\r\n  if (taxBase < 0) taxBase = 0;\r\n  const taxRSD = Math.round(taxBase * 0.10);\r\n  const taxEUR = Math.round(taxRSD \/ rate);\r\n\r\n  \/* employer contributions \u2013 15.15% do CAP-a *\/\r\n  const erBase = (cap > 0) ? Math.min(grossRSD, cap) : grossRSD;\r\n  const erRSD  = Math.round(erBase * 0.1515);\r\n  const erEUR  = Math.round(erRSD \/ rate);\r\n\r\n  \/* net salary *\/\r\n  const netRSD = grossRSD - ee - taxRSD;\r\n  const netEUR = Math.round(netRSD \/ rate);\r\n\r\n  \/* total employer cost *\/\r\n  const total = Math.round(gross + erEUR);\r\n\r\n  grossValue.textContent         = gross.toFixed(0);\r\n  netValue2.textContent          = netEUR.toFixed(0);\r\n  taxValue.textContent           = taxEUR.toFixed(0);\r\n  employerContrib.textContent    = erEUR.toFixed(0);\r\n  grossNet_totalCost.textContent = total.toFixed(0);\r\n\r\n  \/* slider range *\/\r\n  const maxV = getNiceMax(Math.max(netEUR, taxEUR, erEUR, total));\r\n\r\n  grossNetSlider_net.max   = maxV;\r\n  grossNetSlider_tax.max   = maxV;\r\n  grossNetSlider_emp.max   = maxV;\r\n  grossNetSlider_total.max = maxV;\r\n\r\n  grossNetSlider_net.value   = netEUR;\r\n  grossNetSlider_tax.value   = taxEUR;\r\n  grossNetSlider_emp.value   = erEUR;\r\n  grossNetSlider_total.value = total;\r\n}\r\n\r\n\r\n\/* ========== NET \u2192 GROSS ========== *\/\r\nfunction calcNetGross() {\r\n  const rate   = +netRate.value;\r\n  const nonTax = +netNonTax.value;\r\n  const cap    = +netCap.value;\r\n  const net    = +netAmount.value;\r\n\r\n  netInputEcho.textContent = net.toFixed(0);\r\n\r\n  if (net <= 0 || rate <= 0) return;\r\n\r\n  const netRSD = Math.round(net * rate);\r\n\r\n  const eeRates = 0.14 + 0.0515 + 0.0075; \/\/ 19.9% employee\r\n\r\n  \/* raw brutto bez CAP-a *\/\r\n  let rawGross = (netRSD - nonTax \/ 10) \/ 0.701;\r\n\r\n  \/* CAP logika *\/\r\n  let grossRSD =\r\n    (cap > 0 && rawGross > cap)\r\n      ? ((netRSD - nonTax \/ 10) + cap * eeRates) \/ 0.9\r\n      : rawGross;\r\n\r\n  grossRSD = Math.round(grossRSD);\r\n  const grossEUR = Math.round(grossRSD \/ rate);\r\n\r\n  \/* tax = (brutto - nonTax) * 10% *\/\r\n  let taxBase = grossRSD - nonTax;\r\n  if (taxBase < 0) taxBase = 0;\r\n  const taxRSD = Math.round(taxBase * 0.10);\r\n  const taxEUR = Math.round(taxRSD \/ rate);\r\n\r\n  \/* employer contributions 15.15% do CAP-a *\/\r\n  const erBase = (cap > 0) ? Math.min(grossRSD, cap) : grossRSD;\r\n  const erRSD  = Math.round(erBase * 0.1515);\r\n  const erEUR  = Math.round(erRSD \/ rate);\r\n\r\n  const total  = Math.round(grossEUR + erEUR);\r\n\r\n  grossOut2.textContent        = grossEUR.toFixed(0);\r\n  taxOut.textContent           = taxEUR.toFixed(0);\r\n  employerOut.textContent      = erEUR.toFixed(0);\r\n  netGross_totalCost.textContent = total.toFixed(0);\r\n\r\n  const maxV = getNiceMax(Math.max(grossEUR, taxEUR, erEUR, total));\r\n\r\n  netGrossSlider_gross.max = maxV;\r\n  netGrossSlider_tax.max   = maxV;\r\n  netGrossSlider_emp.max   = maxV;\r\n  netGrossSlider_total.max = maxV;\r\n\r\n  netGrossSlider_gross.value = grossEUR;\r\n  netGrossSlider_tax.value   = taxEUR;\r\n  netGrossSlider_emp.value   = erEUR;\r\n  netGrossSlider_total.value = total;\r\n}\r\n\r\n\/* listeners *\/\r\n[grossAmount, grossRate, grossNonTax, grossCap].forEach(el =>\r\n  el.addEventListener(\"input\", calcGrossNet)\r\n);\r\n\r\n[netAmount, netRate, netNonTax, netCap].forEach(el =>\r\n  el.addEventListener(\"input\", calcNetGross)\r\n);\r\n\r\n\/* INIT *\/\r\ncalcGrossNet();\r\ncalcNetGross();\r\n<\/script>\r\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2e0faa5 e-flex e-con-boxed e-con e-parent\" data-id=\"2e0faa5\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7f9fab5 elementor-widget elementor-widget-button\" data-id=\"7f9fab5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm elementor-animation-grow\" href=\"https:\/\/4easy.business\/en\/payroll-advisory-services\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">How We Can Help More<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>https:\/\/4easy.business\/wp-content\/uploads\/2025\/10\/Black-Green-and-White-Modern-Bold-Business-Service-Promotion-Ads-Video-1.mp4 This Payroll Calculator for Serbia helps employers and entrepreneurs estimate net salaries, gross wages and total employment cost in accordance with Serbian labor and tax regulations. The calculator reflects mandatory taxes and social contributions used in monthly payroll processing in Serbia. Gross \u2192 Net Net \u2192 Gross Gross \u2192 Net Salary based on Serbian [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2662","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/4easy.business\/sr\/wp-json\/wp\/v2\/pages\/2662","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/4easy.business\/sr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/4easy.business\/sr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/4easy.business\/sr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/4easy.business\/sr\/wp-json\/wp\/v2\/comments?post=2662"}],"version-history":[{"count":72,"href":"https:\/\/4easy.business\/sr\/wp-json\/wp\/v2\/pages\/2662\/revisions"}],"predecessor-version":[{"id":3178,"href":"https:\/\/4easy.business\/sr\/wp-json\/wp\/v2\/pages\/2662\/revisions\/3178"}],"wp:attachment":[{"href":"https:\/\/4easy.business\/sr\/wp-json\/wp\/v2\/media?parent=2662"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}