Soud opět zrušil zvýšení daně pro Agrofert, vypomohl si však rozporuplnou argumentací

29. 4. 2025
Doba čtení: 5 minut

Sdílet

Pán s visačkou Agrofert, který smutní po prohraném soudu.
Autor: Podnikatel.cz s využitím DALL-E, podle licence: Rights Managed
Ilustrační obrázek
Krajský soud i napodruhé zrušil navýšení daně z nemovitostí pro firmu Lovochemie z holdingu Agrofert. Je ale otázkou, zda rozsudek opět neodmítne Nejvyšší správní soud.

Krajský soud v Ústí nad Labem totiž mimo jiné v rozsudku, který má server Podnikatel.cz k dispozici, argumentoval, že je zcela jednoznačné, že zákonodárce konstruoval novelu tak, aby koeficient upravující výši daně z nemovitých věcí mohl být opatřením obecné povahy stanoven nejdříve pro zdaňovací období roku 2026. 

Co se dozvíte v článku
  1. Místní koeficient lze stanovit i opatřením obecné povahy
  2. NSS už jednou rozsudek soudu k Lovochemii zrušil
  3. Část argumentace soudu je v rozporu s ministerstvem financí
  4. Odůvodnění opatření vykazuje nedostatky, konstatoval soud
  5. O věci bude opět rozhodovat NSS 

Ministerstvo financí, které návrh připravilo, však tvrdí, že norma byla naopak koncipována tak, aby šlo daň z nemovitých věcí upravit opatřením obecné povahy už pro zdaňovací období roku 2025. 

Místní koeficient lze stanovit i opatřením obecné povahy

Jestliže chce obec stanovit místní koeficient pro konkrétní jednotlivé nemovité věci, musí tak od roku 2025 učinit opatřením obecné povahy namísto obecně závazné vyhlášky. Jedním z měst, která tuto možnost využila, byly i Lovosice, které pro vybrané průmyslové a další podnikatelské nemovitosti stanovily vyšší místní koeficient 4, a to z důvodu vyššího zatížení společného prostoru a dopravní a technické infrastruktury města (emise, hluk, prach, otřesy, zvýšená intenzita dopravy apod.). 

NSS už jednou rozsudek soudu k Lovochemii zrušil

Zvýšení daně postihlo i firmu Lovochemie z holdingu Agrofert bývalého premiéra Andreje Babiše, která podala k soudu návrh na zrušení opatření. U Krajského soudu v Ústí nad Labem pak Lovochemie skutečně uspěla. Podle soudu nebylo možné do konce roku 2024 stanovit místní koeficient opatřením obecné povahy, ale pouze vyhláškou. Ustanovení, která umožnila určit koeficient i opatřením obecné povahy, totiž nabyla účinnosti až na začátku roku 2025. Lovosické opatření obecné povahy tak soud prohlásil za nicotné (rozhodnutí je od počátku právně neúčinné, jako by vůbec neexistovalo). 

Nejvyšší správní soud (NSS) ale v únoru rozsudek krajského soudu zrušil. Podle NSS je u nicotnosti důležitá intenzita vady a ta v daném případě nebyla dostatečná a opatření obecné povahy tak nemohlo být nicotné. NSS zároveň doplnil, že v projednávaném případě nehodnotil, zda zastupitelstvo odpůrce mělo či nemělo pravomoc napadené opatření obecné povahy vydat, a zda je z tohoto důvodu zákonné či nikoliv. 

Města stále v napětí, soudní prohra Agrofertu k dani z nemovitostí jistotu nedodala Přečtěte si také:

Města stále v napětí, soudní prohra Agrofertu k dani z nemovitostí jistotu nedodala

Část argumentace soudu je v rozporu s ministerstvem financí

Případ se tak ke krajskému soudu vrátil a ten před dvěma týdny opětovně rozhodl a opětovně navýšení daně pro Lovochemii zrušil. Část důvodů, proč tak učinil, zopakoval z původního zrušeného rozsudku. Soud opět uvedl, že v roce 2024 (pro rok 2025) nemohl být místní koeficient stanoven opatření obecné povahy, protože příslušná ustanovení zákona nabyla účinnosti až letos v lednu. Je zcela jednoznačné, že zákonodárce konstruoval právní úpravu tak, aby koeficient upravující výši daně z nemovitých věcí mohl být opatřením obecné povahy stanoven nejdříve pro zdaňovací období roku 2026. Na zdaňovací období předcházející roku 2026 mohl být koeficient upraven výhradně prostřednictvím obecně závazné vyhlášky, napsal v rozsudku krajský soud. 

Tato argumentace soudu je však pochybná, protože ministerstvo financí, které příslušnou novelu připravilo, tvrdí, že návrh konstruovalo tak, aby opatření obecné povahy šla využít už pro zdaňovací období 2025. Jak serveru Podnikatel.cz upřesnilo ministerstvo financí, proces vydání opatření obecné povahy (OOP) byl upraven v § 171 až 174 správního řádu a v § 16b zákona o dani z nemovitých věcí a všechna tato ustanovení byla účinná již v roce 2024. Ustanovení § 16b nabylo účinnosti k 1. 1. 2024, a to právě proto, aby bylo vydání OOP v roce 2024 možné, vysvětlil pro server Podnikatel.cz Patrik Madle, mluvčí Generálního finančního ředitelství (GFŘ), ve společném vyjádření ministerstva a GFŘ. 

Ostatně sama finanční správa v roce 2024 ve svých materiálech samosprávám uváděla, že mohou k dani z nemovitých věcí přijmout pro rok 2025 opatření obecné povahy, a radila jim, jak a dokdy tak mají učinit. 

Podle ministerstva bylo cílem zákona jednoznačně navázat na předchozí úpravu, podle které bylo možné stanovit místní koeficient i pro „jednotlivou část obce“, přičemž pojem „část obce“ vyložil Ústavní soud ve svém nálezu ze dne 18. 7. 2023 sp. zn. Pl. ÚS 24/23 velmi široce, čímž bylo obcím umožněno zatížit téměř jakýkoliv okruh nediskriminačně vymezených nemovitých věcí. Záměrem bylo na toto navázat, zároveň však takto dotčeným poplatníkům poskytnout možnost adekvátní obrany, což mělo být zajištěno právě využitím OOP. Vzhledem k tomu, že místní koeficient pro jednotlivou část obce bylo možné uplatnit naposledy v roce 2024, mělo být stanovení místního koeficientu OOP umožněno od roku 2025 tak, aby obce nebyly postiženy výpadkem příjmů, dodal Patrik Madle. 

Soudní výhra Agrofertu k dani z nemovitostí přidělala vrásky řadě měst a obcí Přečtěte si také:

Soudní výhra Agrofertu k dani z nemovitostí přidělala vrásky řadě měst a obcí

Odůvodnění opatření vykazuje nedostatky, konstatoval soud

Krajský soud nicméně uvedl i další důvody, proč lovosické opatření obecné povahy zrušil. Předně soud shledal nepřezkoumatelnost vymezení kritérií pro zahrnutí pozemků do seznamu parcel, které byly zatíženy zvýšeným koeficientem pro výběr daně z nemovitých věcí, a to hned v několika úrovních. Podle soudu není z opatření patrné, zda město chtělo postihnout zvýšeným koeficientem subjekty, které jsou původci zvýšené zátěže životního prostředí, nebo vlastníky pozemků zařazených do ploch s určitým funkčním využitím dle platného územního plánu a budov na těchto pozemcích stojících. 

Další neurčitost spočívá v otázce, zda zahrnutí pozemků do ploch s určitým funkčním využitím bylo jediným kritériem pro zahrnutí pozemků do působnosti napadeného opatření obecné povahy. V odůvodnění je totiž opakovaně uvedeno, že hlavním kritériem je platný územní plán a že a priori (především – pozn. soudu) jsou zatíženi zvýšeným koeficientem vlastníci nemovitostí zařazených v plochách s určitým funkčním využitím dle územního plánu. Takové formulace však nasvědčují existenci vedlejšího či nějakého druhotného kritéria pro zahrnutí nemovitostí do působnosti předmětného opatření obecné povahy. Tato jiná kritéria však z odůvodnění opatření obecné povahy nevyplývají, podotkl soud. 

Školení pro účetní - podzimní novinky

Soud dále konstatoval, že město nezdůvodnilo výši stanoveného koeficientu, přestože jde o zásadní kritérium obsažené ve výroku opatření obecné povahy a jako takové musí být výše koeficientu v odůvodnění opatření obecné povahy alespoň v základních rysech odůvodněna. Na rozdíl od stanovení koeficientu obecně závaznou vyhláškou, kdy může být předmětem následného přezkumu pouze její zákonnost, poskytuje institut opatření obecné povahy dotčeným subjektům vyšší stupeň ochrany spočívající mimo jiné i ve skutečnosti, že zásadní parametry pro stanovení koeficientu a vymezení dotčených nemovitostí musí být v opatření obecné povahy řádně odůvodněny, doplnil soud. 

O věci bude opět rozhodovat NSS 

O případu nicméně bude opět rozhodovat NSS, jelikož Lovosice podají podle serveru SeznamZprávy.cz kasační stížnost. Výsledné rozhodnutí ale nebude důležité jen pro samotné Lovosice. V roce 2024 totiž vydala k dani z nemovitých věcí opatření obecné povahy i další města a obce. Pokud by toto rozhodnutí krajského soudu posvětil i NSS, znamenalo by to nezákonnost i jejich opatření a výpadek příjmů z rozpočtu. Jedná se například o města Rokycany, Plzeň, Pardubice, Žďár nad Sázavou či Veselí nad Moravou.

Města stále v napětí, soudní prohra Agrofertu k dani z nemovitostí jistotu nedodala Přečtěte si také:

Města stále v napětí, soudní prohra Agrofertu k dani z nemovitostí jistotu nedodala

Autor článku

Daniel Morávek píše o daních, zákonech a důchodech. Vysvětluje, jak legislativa ovlivňuje podnikatele a živnostníky. Profil autora →

Upozorníme vás na články, které by vám neměly uniknout (maximálně 2x týdně).
'; document.getElementById('outstream-iframe').onload = function () { setupIframe(); } replayScreen = document.getElementById('iinfoOutstreamReplay'); iinfoOutstreamPosition = document.getElementById('iinfoOutstreamPosition'); outstreamContainer = document.getElementsByClassName('outstream-container')[0]; setupReplayScreen(); } function setupIframe() { outstreamDocument = document.getElementById('outstream-iframe').contentWindow.document; let el = outstreamDocument.createElement('style'); 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 ( location.href.indexOf('rejstriky.finance.cz') !== -1 || location.href.indexOf('finance-rejstrik') !== -1 || location.href.indexOf('firmy.euro.cz') !== -1 || location.href.indexOf('euro-rejstrik') !== -1 || location.href.indexOf('/rejstrik/') !== -1 || location.href.indexOf('/rejstrik-firem/') !== -1) { outstreamDirectPlayed = true; soundAllowed = true; iinfoVastUrlIndex = 0; } if (!outstreamDirectPlayed) { console.log('OUTSTREAM direct'); setUpIMA(true); } else { if (soundAllowed) { const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('OUTSTREAM sound allowed'); setUpIMA(false); }).catch(function () { console.log('OUTSTREAM sound forbidden'); renderBanner(); }); } } else { renderBanner(); } } } function getWrapper() { let articleWrapper = document.querySelector('.rs-outstream-placeholder'); // Outstream Placeholder from RedSys manipulation if (articleWrapper && articleWrapper.style.display !== 'block') { articleWrapper.innerHTML = ""; articleWrapper.style.display = 'block'; } // Don't render OutStream on homepages if (articleWrapper === null) { if (document.querySelector('body.p-index')) { return null; } } if (articleWrapper === null) { articleWrapper = document.getElementById('iinfo-outstream'); } if (articleWrapper === null) { articleWrapper = document.querySelector('.layout-main__content .detail__article p:nth-of-type(6)'); } if (articleWrapper === null) { // Euro, Autobible, Zdravi articleWrapper = document.querySelector('.o-article .o-article__text p:nth-of-type(6)'); } if (articleWrapper === null) { articleWrapper = document.getElementById('sidebar'); } if (!articleWrapper) { console.error("Outstream wrapper of article was not found."); } return articleWrapper; } function setupDimensions() { outstreamWidth = Math.min(iinfoOutstreamPosition.offsetWidth, 480); outstreamHeight = Math.min(iinfoOutstreamPosition.offsetHeight, 320); } /** * 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 = directVast; console.log('Outstream DIRECT CAMPAING advert: ' + directVast); videoContent.muted = true; videoContent.volume = 0; outstreamDirectPlayed = true; } else { adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Outstream advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; } // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = outstreamWidth; // adsRequest.linearAdSlotHeight = outstreamHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function setupReplayScreen() { replayScreen.addEventListener('click', function () { iinfoOutstreamPosition.remove(); iinfoVastUrlIndex = 0; outstreamInit(); }); } /** * 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(0.3); 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(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(outstreamWidth, outstreamHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } /** * 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(); // adsManager.pause(); }, 300); // every 300ms } outstreamDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (outstreamLastError === 303) { if (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } } 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 (isBanner) { renderBanner(); } else { replayScreen.style.display = 'flex'; } break; } } /** * Handles ad errors. * @param { !google.ima.AdErrorEvent } adErrorEvent */ function onAdError(adErrorEvent) { // Handle the error logging. console.log(adErrorEvent.getError()); outstreamLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { renderBanner(); } } function renderBanner() { if (isBanner) { console.log('Outstream: Render Banner'); iinfoOutstreamPosition.innerHTML = ""; iinfoOutstreamPosition.style.height = "330px"; iinfoOutstreamPosition.appendChild(bannerDiv); } else { console.log('Outstream: Banner is not set'); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoOutstreamPosition.remove(); outstreamInit(); } else { return false; } adVolume = 1; return true; } /** * Pauses video content and sets up ad UI. */ function onContentPauseRequested() { videoContent.pause(); // This function is where you should setup UI for showing ads (for example, // display ad timer countdown, disable seeking and more.) // setupUIForAds(); } /** * Resumes video content and removes ad UI. */ function onContentResumeRequested() { videoContent.play(); // This function is where you should ensure that your UI is ready // to play content. It is the responsibility of the Publisher to // implement this function when necessary. // setupUIForContent(); } function onActiveView() { if (outstreamContainer) { const containerOffset = outstreamContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (outstreamPaused) { adsManager.resume(); outstreamPaused = false; } return true; } else { if (!outstreamPaused) { adsManager.pause(); outstreamPaused = true; } } } return false; } let outstreamInitInterval; if (typeof cpexPackage !== "undefined") { outstreamInitInterval = setInterval(tryToInitializeOutstream, 100); } else { const wrapper = getWrapper(); if (wrapper) { let outstreamInitialized = false; window.addEventListener('scroll', () => { if (!outstreamInitialized) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { outstreamInit(); outstreamInitialized = true; } } }); } } function tryToInitializeOutstream() { const wrapper = getWrapper(); if (wrapper) { const containerOffset = wrapper.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight / 1 && containerOffset.bottom > 0.0) { if (cpexPackage.adserver.displayed) { clearInterval(outstreamInitInterval); outstreamInit(); } } } else { clearInterval(outstreamInitInterval); } } }
OSZAR »