Všichni platí státu stejně? Ale kdepak. Od jaké mzdy začíná zdanění práce klesat

06.06.2025 | , Finance.cz
DANĚ


perex-img Zdroj: Shutterstock

Celkové zdanění práce zaměstnanců s velmi vysokou roční hrubou mzdou je v Česku nižší než zaměstnanců „pouze“ s nadprůměrnou mzdou. Jak je to možné? Podívejme se na praktické výpočty.

sluchatka

Poslechněte si článek v audio verzi

00:00 / 00:00

Tento článek pro vás načetl robotický hlas. Jestliže v něm najdete chybu ve výslovnosti, dejte nám prosím vědět.

Zaměstnanci odvádějí ze své hrubé mzdy zdravotní pojištění, sociální pojištění a daň z příjmu. Sazba zdravotního pojištění placeného zaměstnancem je 4,5 % z hrubé mzdy. Sazba sociálního pojištění je 7,1 %, ovšem sociální pojištění se odvádí pouze do dosažení maximálního vyměřovacího základu. Ten pro rok 2025 činí 2 234 736 Kč. Sazba daně z příjmu je 15 % do ročního daňového základu ve výši 1 676 052 Kč, daňový základ nad 1 676 052 Kč již podléhá 23% daně z příjmu.

Pojistné placené zaměstnavatelem

Mzdové náklady zaměstnavatelů netvoří pouze hrubé mzda zaměstnance, ale i povinné pojistné placené zaměstnavatelem za zaměstnance. Zaměstnavatelé odvádějí za zaměstnance 9 % na zdravotním pojištění a 24,8 % na sociálním pojištění. I zaměstnavatelé odvádějí sociální pojištění pouze do dosažení maximálního vyměřovacího základu, z částky nad strop již zaměstnavatelé rovněž sociální pojištění neplatí.

Tip: Sociální pojištění může pro někoho být nejvyšší daní. Deset čísel pro rok 2025

Do zdanění práce se započítávají i odvody placené zaměstnavatelem

Souhrnné zdanění práce se vypočítává jako rozdíl mezi mzdovými náklady zaměstnavatele a čistou mzdou zaměstnance. Do celkového zdanění práce se tak zahrnuje i povinné pojistné placené zaměstnavatelem za zaměstnance.

Mzdová kalkulačka 2025

 

Praktický výpočet

V následující tabulce máme pro názornost vypočteno zdanění práce u hrubé měsíční mzdy ve výši 46 000 Kč. Daň z příjmu snižuje měsíční sleva na poplatníka ve výši 2 570 Kč.

Položka

Částka

Hrubá mzda

46 000 Kč

Zdravotní pojištění placené zaměstnavatelem

4 140 Kč

Sociální pojištění placené zaměstnavatelem

11 408 Kč

Mzdové náklady

61 548 Kč

Zdravotní pojištění placené zaměstnancem

2 070 Kč

Sociální pojištění placené zaměstnancem

3 266 Kč

Daň z příjmu

4 330 Kč

Čistá mzda na účet

36 334 Kč

Zdanění práce

41 %

Zdroj: vlastní výpočet autora

Zdanění práce u hrubé mzdy ve výši 46 000 Kč dosahuje 41 %, neboť mzdové náklady zaměstnavatele činí 61 548 Kč a čistá mzda na účet 36 334 Kč, jak jsme si vypočítali v tabulce výše.

Čtěte také: Zdanění nízkých a vysokých mezd se ve světě výrazně liší. Jak si vede ČR?

Zdanění práce podle roční mzdy

V další tabulce máme vypočteno celkové zdanění práce u jednotlivých ročních mezd. Při výpočtu daně z příjmu počítáme pouze s uplatněním roční slevy na poplatníka ve výši 30 840 Kč, na kterou mají nárok všichni daňoví poplatníci.

Roční hrubá mzda

Roční mzdové náklady

Roční čistá mzda

Zdanění práce v %

300 000 Kč

401 400 Kč

251 040 Kč

37,5 %

400 000 Kč

535 200 Kč

324 440 Kč

39,4 %

500 000 Kč

669 000 Kč

397 840 Kč

40,5 %

700 000 Kč

936 600 Kč

544 640 Kč

41,8 %

1 000 000 Kč

1 338 000 Kč

764 840 Kč

42,8 %

1 500 000 Kč

2 007 000 Kč

1 131 840 Kč

43,6 %

2 000 000 Kč

2 676 000 Kč

1 472 924 Kč

45,0 %

3 000 000 Kč

3 824 215 Kč

2 181 257 Kč

43,0 %

5 000 000 Kč

6 004 215 Kč

3 631 257 Kč

39,5 %

Zdroj: vlastní výpočet autora

Z tabulky vidíme, že po dosažení maximálního vyměřovacího základu klesá celkové zdanění práce. Důvodem je skutečnost, že z částky nad strop již neplatí sociální pojištění zaměstnanec ani zaměstnavatel.

Čtěte také: Nechcete platit sociální pojištění? Tady jsou ideální příjmy, ale pozor na důchod

Lépe placení jsou i méně zdanění

Zaměstnanec s roční hrubou mzdou ve výši 1 500 000 Kč tak má vyšší zdanění práce, přestože celá jeho hrubá mzda podléhá pouze 15% sazbě daně z příjmů, než zaměstnanec s roční hrubou mzdou 3 000 000 Kč, u něhož část hrubé mzdy podléhá již vyšší 23% sazbě daně z příjmů. Souhrnná platba sociálního pojištění, placená zaměstnancem i zaměstnavatelem, je značně vyšší než rozdíl mezi sazbou daně z příjmů v prvním a druhém daňovém pásmu.

Zdanění práce v Česku se v závislosti na výši roční hrubé mzdy příliš neliší. U roční hrubé mzdy ve výši 300 000 Kč dosahuje 37,5 % a u roční hrubé mzdy 2 000 000 Kč činí 45,0 %. Vzhledem k tomu, že je pro výpočet sociálního pojištění zaveden maximální vyměřovací základ, tak u velmi vysokých ročních mezd začíná celkové zdanění práce postupně klesat.

 

Autor článku

Petr Gola

Petr Gola  


Pomohl vám tento obsah? Dejte mu hodnocení:

Průměrné hodnocení: 2.5
Hlasováno: 16 krát

Články ze sekce: DANĚ


'; document.getElementById('preroll_iframe').onload = function(){ preroll_setupIframe(); } } function preroll_setupIframe() { prerollDocument = document.getElementById('preroll_iframe').contentWindow.document; let el = prerollDocument.createElement('style'); el.type = 'text/css'; prerollDocument.head.appendChild(el); el.innerText = "#preroll_adContainer>div:nth-of-type(1),#preroll_adContainer>div:nth-of-type(1) > iframe {width: 99% !important;height: 99% !important;max-width: 100%;}#preroll_videoContent,body{width:100vw;height:100vh}body{font-family:'Helvetica Neue',Arial,sans-serif}#preroll_videoContent{overflow:hidden;background:#000}#preroll_adMuteBtn{width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:-5px;right:25px}"; preroll_videoContent = prerollDocument.getElementById('preroll_contentElement'); preroll_videoContent.style.display = 'none'; preroll_videoContent.volume = 1; preroll_videoContent.muted = false; const playPromise = preroll_videoContent.play(); if (playPromise !== undefined) { console.log('PREROLL sound forbidden');preroll_videoContent.volume = 0;preroll_videoContent.muted = true;preroll_setUpIMA(false); //playPromise.then(function () { console.log('PREROLL sound allowed');preroll_setUpIMA(true); }).catch(function () { console.log('PREROLL sound forbidden');preroll_videoContent.volume = 0;preroll_videoContent.muted = true;preroll_setUpIMA(false); }); } } function preroll_setUpIMA(sound) { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. preroll_createAdDisplayContainer(); // Create ads loader. preroll_adsLoader = new google.ima.AdsLoader(preroll_adDisplayContainer); // Listen and respond to ads loaded and error events. preroll_adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, preroll_onAdsManagerLoaded, false); preroll_adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, preroll_onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function() { preroll_adsLoader.contentComplete(); }; preroll_videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); if (sound && preroll_iinfoVastUrlIndex <= preroll_iinfoVastUrls.length-1) { adsRequest.adTagUrl = preroll_iinfoVastUrls[preroll_iinfoVastUrlIndex]; console.log('Preroll advert: ' + preroll_iinfoVastUrls[preroll_iinfoVastUrlIndex]); preroll_current = 0; preroll_videoContent.muted = false; preroll_videoContent.volume = 1; } else { adsRequest.adTagUrl = preroll_iinfoVastUrlsMuted[preroll_iinfoVastUrlIndexMuted]; console.log('Preroll advert: ' + preroll_iinfoVastUrlsMuted[preroll_iinfoVastUrlIndexMuted]); preroll_current = 1; preroll_videoContent.muted = true; preroll_videoContent.volume = 0; } adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; preroll_adsLoader.requestAds(adsRequest); } function preroll_createAdDisplayContainer() { prerollDocument.getElementById('preroll_videoContent').style.display = 'none'; preroll_adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('preroll_adContainer'), preroll_videoContent); } function preroll_onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. preroll_adsManager = adsManagerLoadedEvent.getAdsManager(preroll_videoContent, adsRenderingSettings); // Add listeners to the required events. preroll_adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, preroll_onAdError); preroll_adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, preroll_onContentPauseRequested); preroll_adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, preroll_onContentResumeRequested); preroll_adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, preroll_onAdEvent); // Listen to any additional events, if necessary. preroll_adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, preroll_onAdEvent); preroll_adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, preroll_onAdEvent); preroll_adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, preroll_onAdEvent); preroll_playAds(); } function preroll_playAds() { // Initialize the container. Must be done through a user action on mobile // devices. preroll_videoContent.load(); preroll_adDisplayContainer.initialize(); try { preroll_adsManager.init(preroll_width_init, preroll_height_init, google.ima.ViewMode.NORMAL); preroll_adsManager.start(); } catch (adError) { } } function preroll_onAdEvent(adEvent) { // Retrieve the ad from the event. Some events (for example, // ALL_ADS_COMPLETED) don't have ad object associated. const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: prerollDocument.getElementById('preroll_adContainer').style.width = '100%'; prerollDocument.getElementById('preroll_adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('preroll_adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: prerollDocument.getElementById('preroll_adMuteBtn').style.display = 'block'; preroll_init_container.style.display = 'none'; try { adsManager.pause(); } catch (error) { } break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: preroll_play_yt(); break; case google.ima.AdEvent.Type.COMPLETE: preroll_play_yt(); break; } } function preroll_onAdError(adErrorEvent) { // Handle the error logging. console.log(adErrorEvent.getError()); preroll_last_error = adErrorEvent.getError().getErrorCode(); console.log(preroll_last_error); if (!preroll_loadNext()) { preroll_play_yt(); } } function preroll_onContentPauseRequested() { preroll_videoContent.pause(); } function preroll_onContentResumeRequested() { preroll_videoContent.play(); } function preroll_loadNext() { if (preroll_current === 0) { preroll_iinfoVastUrlIndex++; if (preroll_iinfoVastUrls.length > preroll_iinfoVastUrlIndex) { preroll_init(); } else { return false; } } else { preroll_iinfoVastUrlIndexMuted++; if (preroll_iinfoVastUrlsMuted.length > preroll_iinfoVastUrlIndexMuted) { preroll_init(); } else { return false; } } preroll_adVolume = 1; return true; } function preroll_unmuteAdvert() { preroll_adVolume = !preroll_adVolume; if (preroll_adVolume) { preroll_adsManager.setVolume(1); prerollDocument.getElementById('preroll_adMuteBtn').innerHTML = ''; } else { preroll_adsManager.setVolume(0); prerollDocument.getElementById('preroll_adMuteBtn').innerHTML = ''; } } function tryToInicializePreroll() { preroll_init(); } function preroll_play_yt() { preroll_videoElement.style.display = 'block'; const youTubeUrlQueryString = preroll_videoElement.src.includes('?'); const firstLetterOfAddedUrl = youTubeUrlQueryString ? '&' : '?'; preroll_videoElement.src += firstLetterOfAddedUrl + 'autoplay=1&mute=0'; preroll_init_container.style.display = 'none'; document.querySelectorAll('.preroll-container').forEach(e => e.remove()); finance_init_container.style.display = 'block'; try { adsManager.pause(); } catch (error) { } }

'; document.getElementById('outstream-iframe').onload = function(){ setupIframe(); } } function setupIframe() { outstreamDocument = document.getElementById('outstream-iframe').contentWindow.document; let el = outstreamDocument.createElement('style'); el.type = 'text/css'; outstreamDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe {width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{width:100vw;height:100vh}body{font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{overflow:hidden;background:#000}#adMuteBtn{width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:-5px;right:25px}"; videoContent = outstreamDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; if (!outstream_direct_played) { console.log('Setup iframe: direct'); setUpIMA(true); } else if (iinfoOutstreamAllowed) { console.log('Setup iframe: allowed article'); const playPromise = videoContent.play(); playPromise.then(function () { console.log('OUTSTREAM sound allowed'); setUpIMA(false); }).catch(function () { renderPassback(); }); } else { console.log('Setup iframe: passback'); renderPassback(); } } /** * Sets up IMA ad display container, ads loader, and makes an ad request. */ function setUpIMA(direct) { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function() { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); if (direct) { adsRequest.adTagUrl = iinfoVastDirect; console.log('Outstream DIRECT CAMPAING advert: ' + iinfoVastDirect); videoContent.muted = true; videoContent.volume = 0; outstream_direct_played = true; } else { adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Outstream advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; } adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } /** * Sets the 'adContainer' div as the IMA ad display container. */ function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. outstreamDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( outstreamDocument.getElementById('adContainer'), videoContent); } function unmuteAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(1); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); outstreamDocument.getElementById('adMuteBtn').innerHTML = ''; } } /** * Loads the video content and initializes IMA ad playback. */ function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); try { adsManager.init(outstream_width_init, outstream_height_init, google.ima.ViewMode.NORMAL); adsManager.start(); } catch (adError) { } } /** * Handles the ad manager loading and sets ad event listeners. * @param {!google.ima.AdsManagerLoadedEvent} adsManagerLoadedEvent */ function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } /** * Handles actions taken in response to ad events. * @param {!google.ima.AdEvent} adEvent */ function onAdEvent(adEvent) { // Retrieve the ad from the event. Some events (for example, // ALL_ADS_COMPLETED) don't have ad object associated. const ad = adEvent.getAd(); console.log('Outstream event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: // This is the first event sent for an ad - it is possible to // determine whether the ad is a video ad or an overlay. if (!ad.isLinear()) { // Position AdDisplayContainer correctly for overlay. // Use ad.width and ad.height. videoContent.play(); } outstreamDocument.getElementById('adContainer').style.width = '100%'; outstreamDocument.getElementById('adContainer').style.maxWidth = '640px'; outstreamDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); // This event indicates the ad has started - the video player // can adjust the UI, for example display a pause button and // remaining time. if (ad.isLinear()) { // For a linear ad, a timer can be started to poll for // the remaining time. intervalTimer = setInterval( function() { // Example: const remainingTime = adsManager.getRemainingTime(); }, 300); // every 300ms } //unmuteAdvert(); outstreamDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (outstream_last_error == 303) { renderPassback(); } break; case google.ima.AdEvent.Type.COMPLETE: // This event indicates the ad has finished - the video player // can perform appropriate UI actions, such as removing the timer for // remaining time detection. if (ad.isLinear()) { clearInterval(intervalTimer); } if (true) { renderPassback(); } break; } } function renderPassback() { console.log('Outstream Spouštím Passback'); advertContainer.innerHTML = ""; advertContainer.appendChild(passBackDiv); } /** * Handles ad errors. * @param {!google.ima.AdErrorEvent} adErrorEvent */ function onAdError(adErrorEvent) { // Handle the error logging. console.log(adErrorEvent.getError()); outstream_last_error = adErrorEvent.getError().getErrorCode(); console.log(outstream_last_error); if (!loadNext()) { renderPassback(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrls.length > iinfoVastUrlIndex) { outstream_init(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { console.log('outstream onActiveView()'); var wrapper = document.getElementsByClassName('outstream-container')[0]; if (wrapper) { var containerOffset = wrapper.getBoundingClientRect(); var windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (outstream_paused) { adsManager.resume(); outstream_paused = false; /*window.removeEventListener('scroll', onActiveView);*/ console.log('Outstream: ad resume()'); } return true; } else { if (!outstream_paused) { adsManager.pause(); outstream_paused = true; /*window.removeEventListener('scroll', onActiveView);*/ console.log('Outstream: ad pause()'); } } } return false; } let outstream_initialize_interval = setInterval(tryToInicializeOutstream, 100); function tryToInicializeOutstream() { console.log(cpexPackage.adserver.displayed); var wrapper = document.getElementsByClassName('outstream-container')[0]; if (wrapper) { var containerOffset = wrapper.getBoundingClientRect(); var windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { if (cpexPackage.adserver.displayed) { clearInterval(outstream_initialize_interval); outstream_init(); } } } }
OSZAR »