Zákon o ochraně spotřebitele - Další povinnosti při prodeji výrobků a poskytování služeb

Předpis č. 634/1992 Sb.

Znění od 13. 12. 2024

634/1992 Sb. Zákon o ochraně spotřebitele

Další povinnosti při prodeji výrobků a poskytování služeb

§ 15

(1) Umožňuje-li to povaha výrobku a forma prodeje, je prodávající povinen na žádost spotřebitele výrobek překontrolovat nebo předvést.

(2) Prodávající je povinen vydat spotřebiteli na jeho žádost písemné potvrzení o povinnostech z vadného plnění v rozsahu stanoveném zákonem12).

(3) Není-li služba poskytnuta na počkání, je prodávající povinen vydat spotřebiteli písemné potvrzení o převzetí objednávky. Potvrzení musí obsahovat označení předmětu služby, její rozsah, jakost, cenu za provedení služby a termín jejího plnění.

§ 16

(1) Na žádost spotřebitele je prodávající povinen vydat doklad o zakoupení výrobku nebo o poskytnutí služby s uvedením data prodeje výrobku nebo poskytnutí služby, o jaký výrobek nebo o jakou službu se jedná a za jakou cenu byl výrobek prodán nebo služba poskytnuta, spolu s identifikačními údaji prodávajícího obsahujícími jméno a příjmení nebo název nebo obchodní firmu, případně název prodávajícího, jeho identifikační číslo osoby, pokud zvláštní právní předpis nestanoví jinak.

(2) Při prodeji výrobků s následnou dodávkou musí doklad obsahovat také místo určení a datum dodávky.

(3) Při prodeji použitých nebo upravovaných výrobků, výrobků s vadou nebo výrobků, jejichž užitné vlastnosti jsou jinak omezeny, musí být tyto skutečnosti v dokladu zřetelně vyznačeny.

(4) Na žádost orgánů dozoru nebo Policie v mezích jejích oprávnění je prodávající povinen, jde-li o nákup použitého výrobku nebo výrobku bez dokladu o nabytí, přijímání tohoto výrobku do zástavy nebo zprostředkování nebo nákupu či přijetí do zástavy, předložit identifikační údaje podle zvláštního právního předpisu.12b)

§ 17

Vyžaduje-li to povaha výrobků, zejména s ohledem na hygienické podmínky prodeje a charakter použití, je prodávající povinen výrobky prodávat v hygienicky nezávadných obalech nebo je do takových obalů při prodeji zabalit, při samoobslužném prodeji je povinen spotřebiteli poskytnout vhodný obalový materiál.

§ 18

(1) Prodávající je povinen informovat spotřebitele o peněžní částce za výkup vratných zálohovaných obalů a tuto informaci na viditelném místě zpřístupnit.

(2) O změně peněžní částky za vykupované vratné zálohované obaly nebo o ukončení výkupu vratných zálohovaných obalů je prodávající povinen informovat spotřebitele po dobu nejméně 30 kalendářních dnů před dnem provedení změny nebo ukončení výkupu. Po tuto dobu nesmí být výkup těchto obalů zastaven.

§ 18a

Výrobce nebo dovozce a prodávající nesmí používat názvy jednotlivých druhů křišťálového skla a jim přiřazené symboly, uvedené v prováděcím právním předpisu, u těch výrobků, které nejsou tímto prováděcím právním předpisem blíže charakterizovány, a to ani při reklamě těchto výrobků. Pokud výrobek ze skla nese firemní nebo výrobní označení či značku nebo obchodní jméno nebo název obsahující označení "křišťál", "křišťálové", "crystal" nebo odvozeniny, jsou výrobce nebo dovozce a prodávající povinni toto označení doplnit upřesňujícími údaji v souladu s prováděcím právním předpisem.

§ 18b

Neoprávněné používání ekoznačky12c) se zakazuje.

§ 18c

Užívání ubytovacího zařízení s noclehem na více než 1 časový úsek nebo výhoda spojená s ubytováním, popřípadě včetně dopravy nebo jiných rekreačních služeb30), nesmějí být uváděny na trh nebo prodávány spotřebiteli jako investice.

§ 19

(1) S výjimkou případů, kdy je k provedení opravy určena jiná osoba13), je prodávající povinen přijmout reklamaci v kterékoli provozovně, v níž je přijetí reklamace možné s ohledem na sortiment prodávaných výrobků nebo poskytovaných služeb, případně i ve svém sídle. V provozovně musí být po celou provozní dobu přítomen pracovník pověřený vyřizováním reklamací.

(2) Prodávající je povinen spotřebiteli vydat při uplatnění reklamace písemné potvrzení, ve kterém uvede datum, kdy spotřebitel reklamaci uplatnil, co je jejím obsahem, jaký způsob vyřízení reklamace spotřebitel požaduje a kontaktní údaje spotřebitele pro účely poskytnutí informace o vyřízení reklamace. Tato povinnost se vztahuje i na jiné osoby určené k provedení opravy.

(3) Reklamace včetně odstranění vady musí být vyřízena a spotřebitel o tom musí být informován nejpozději do 30 dnů ode dne uplatnění reklamace, pokud se prodávající se spotřebitelem nedohodne na delší lhůtě. Je-li předmětem závazku poskytnutí digitálního obsahu, včetně digitálního obsahu dodaného na hmotném nosiči, nebo služby digitálního obsahu, musí být reklamace vyřízena v přiměřené době s přihlédnutím k povaze digitálního obsahu nebo služby digitálního obsahu a k účelu, pro nějž je spotřebitel požadoval.

(4) Po marném uplynutí lhůty podle odstavce 3 může spotřebitel od smlouvy odstoupit nebo požadovat přiměřenou slevu.

(5) Prodávající je povinen vydat spotřebiteli potvrzení o datu a způsobu vyřízení reklamace, včetně potvrzení o provedení opravy, a době jejího trvání, případně písemné odůvodnění zamítnutí reklamace. Tato povinnost se vztahuje i na jiné osoby určené k provedení opravy.

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 »