Hledali jsme gynekologa bez poplatků. Najít jde, dá to ale práci

6. 10. 2021

Sdílet

Autor: Depositphotos
V žádné jiné ordinaci nenajdete tak pestrý ceník jako u gynekologa. Server Vitalia.cz zjišťoval v bezmála padesáti gynekologických ambulancích, za co všechno chtějí peníze a zda vás bez platby vůbec zaregistrují či vyšetří.

Poplatek za jednorázové plastové zrcadlo, roční poplatek, registrační poplatek, sponzorský dar, poplatek za první konzultaci, poplatek za delší ordinační dobu nebo možnost přijít mimo ni či zavolat na mobil lékaře… Jde o některé příklady služeb a materiálu, za které si gynekologové nechávají platit. Nikoliv zdravotními pojišťovnami, ale pacientkami. Ceník v některých ordinacích za poslední léta nabobtnal a částky mohou přesahovat i tisícikorunu.

„Mezi gynekology je vybírání poplatku rozhodně nejrozšířenější,“ řekl serveru Vitalia.cz prezident České lékařské komory (ČLK) Milan Kubek. Podle něj přitom gynekologové nejsou v podobné situaci jako zubaři, kteří mají značnou část úkonů a materiálu nehrazenou z veřejného zdravotního pojištění.

Gynekologové nové pacientky většinou berou, ale má to háček

Obvolaly jsme coby potenciální pacientky 48 ordinací, abychom zjistily, kde a jaké poplatky vybírají a zda je vůbec chtějí. Výběr byl nahodilý a soustřeďoval se zejména na větší města – Prahu, Brno, Ostravu, České Budějovice, Ústí nad Labem, Karlovy Vary, Zlín a Žďár nad Sázavou. V ordinacích jsme se telefonicky ptaly, zda přijímají nové pacientky. A pokud ano, zda se u nich platí nějaký registrační poplatek či za něco spojeného s prevencí. A zajímalo nás také to, zda by pacientce provedli preventivní prohlídku, pokud by nezaplatila.

V patnácti ordinacích jsme se dozvěděly, že nové pacientky nepřijímají, šlo především o metropoli. V jedné ordinaci lékařka neměla smlouvy se zdravotními pojišťovnami. Ovšem tam, kde by pacientka uspěla, je to často podmíněno nějakou platbou nad rámec zdravotního pojištění. O určitou formu spolufinancování si sestřičky či lékaři a lékařky řekli v jednadvaceti ambulancích.

Nejrozšířenější platba je ta za plastové zrcátko

Ve většině případů si gynekologové nechávají zaplatit takzvaná plastová zrcátka. Chtějí za ně třicet a více korun. Jedná se o jednorázový materiál, který se používá jak při roční prevenci, tak při dalších vyšetřeních, například poševních stěn nebo děložního čípku. V internetových obchodech se zdravotnickým materiálem se ceny těchto pomůcek pohybují od šesti korun výše.

Plastová zrcátka zdravotní pojišťovny skutečně nehradí, takže platba je v tomto případě v pořádku. Co už v pořádku není, pokud si lékař platbu jakkoliv vynucuje a bez ní pacientce odmítne provést preventivní vyšetření. To se totiž může dělat i zrcátkem kovovým, které sice není jednorázové, ale jeho použití je plně hrazeno z veřejného zdravotního pojištění.


Autor: Depositphotos

Kovové zrcátko proplácejí zdravotní pojišťovny, po každé pacientce se ale musí sterilizovat

Používání plastových zrcátek je rozšířené zřejmě jednak kvůli penězům pro ordinaci, ale také proto, že pro část pacientek může být vyšetření s nimi příjemnější. Zrcátko údajně nestudí a jeho jednorázovost zaručuje výbornou hygienu. Podle lékaře Vladimíra Dvořáka, jenž stojí v čele hned tří lékařských organizací (České gynekologické a porodnické společnosti ČLS JEP, Sdružení soukromých gynekologů ČR a České odborné společnosti pro cervikální patologii a kolposkopii), ale žádnou extra výhodu nemají.

„Pokud někdo má sterilizátor a možnost sterilizovat, tak v použití kovových zrcátek problém nevidím a zastanou stejný účel jako ta plastová,“ říká pro server Vitalia.cz Vladimír Dvořák s tím, že většina gynekologů si nemyslí, že by kovová zrcátka nepatřila do 21. století.

„Nemyslím si, že pro lékaře je to nějaká jednoznačná preference. Je ale pravda, že mohou být komfortnější, protože nestudí a není nutné je sterilizovat, takže je s nimi jednodušší manipulace. Některé klientky plastové zrcátko chtějí i proto, že mají jistotu, že je určeno jen pro ně a bude po vyšetření zničeno,“ uvádí Vladimír Dvořák.

Platí se i za registraci k lékaři a roční poplatek

Dalším typem časté platby byl registrační poplatek nebo poplatek za vstupní konzultaci. Například v Ostravě takovou platbu požadovaly tři ordinace ze šesti oslovených. Dvě z nich chtěly pět set korun. V jedné z ordinací překvapily slevami. „Registrační poplatek pro pracující je tři sta korun, pro důchodce a studenty sto padesát,“ vyjmenovala sestřička na gynekologii v Ostravě-jih s tím, že ještě chtějí při vyšetření za jednorázové zrcátko šedesát korun.

Podobně pragmaticky k platbě přistupovali také na gynekologii v pražském Kamýku. „Za první konzultaci si bereme čtyři sta korun, protože ta bývá delší a pojišťovna ji neplatí,“ uvedla sestřička s tím, že za každé vyšetření pacientka platí ještě sedmdesát korun za zrcadlo. Na otázku, zda je možné absolvovat vyšetření kovovými zrcadly, které jsou hrazené pojišťovnou, odpovídá: „Ne, to možné není. Pouze pokud přinesete potvrzení o hmotné nouzi, tak po vás peníze chtít nebudeme, i když použijeme to jednorázové zrcátko a pak ho vyhodíme.“

V Praze je ostatně vybírání poplatků za „nadstandardní služby“ celkem běžné. Nejčastěji si ordinace říkaly o roční poplatek. V jedné ordinaci chtěli každý rok 700 korun. „Máme dlouhou ordinační dobu, pan doktor má certifikáty a je to na ultrazvuky,“ vysvětluje sestřička. Na otázku, zda se k nim může pacientka registrovat i bez poplatku, vyhýbavě odpovídá, že u nich je to nastaveno takto a hotovo. 

Za každou návštěvu gynekologa sedm set korun?

Ve třech pražských ordinacích si nezávisle na sobě řekli o roční poplatek jeden tisíc korun. „Je to poplatek za zrcátka, ultrazvuk a za to, co pojišťovny neplatí,“ vysvětluje sestřička v jedné z ordinací v Praze 2 s tím, že bez poplatku to nejde. „Ne ne. Pan doktor má tolik pacientů, že tímto se to aspoň trošičku koordinuje,“ dodává sestra. V další ordinaci, tentokrát v Praze 4, chtějí také ročně tisíc korun. „Nemusíte ho hradit, pak ale jednou ročně za prevenci zaplatíte pět set korun a k tomu šedesát korun za zrcátko,“ varuje sestra. Podle ní je platba nutná, protože „při prevenci děláme ultrazvuk, který pojišťovna nehradí“.

V další ordinaci, která je tentokrát na Malé Straně, lékařka uvádí, že za každou návštěvu je potřeba zaplatit sedm set korun. „Veškerou zdravotní péči vám hradí pojišťovna, připlácí se za nezdravotní služby – objednání na konkrétní čas bez čekání, možnost objednání mimo ordinační hodiny v případě akutních potíží, dostatečný čas na probrání jakýchkoliv složitostí, non-stop kontakt na mě na mobil a e-mail,“ vyjmenovává lékařka.

Jiné vysvětlení u poplatku, tentokrát ve výši sedmi set korun za rok, má lékař z Brna-střed: „Mám tolik lidí, že domů chodím o půl druhé. Já už nemůžu ani na záchod, takže kdybyste si to rozmyslela, zavolejte,“ odpověděl lékař pacientce na dotaz, zda by byla možná registrace i bez sedmi stovek.

My jsme normální, poplatky nebereme

Ale jak v Brně, tak i v Praze se našli lékaři, kde se neplatí nic. „Za prevenci u nás určitě platit nebudete. Pouze pokud si budete přát plastové zrcátko, tak jedno stojí třicet korun,“ říká sestřička v jiné ordinaci v Brně-střed s tím, že pro vyšetření stačí jedno zrcadlo. A kdo nechce plast, dostane z úhrady pojišťoven to kovové.

„Žádné poplatky nebereme. My jsme ještě normální, protože to, co předvádí jiné ordinace, je nezákonné,“ odpoví s jistou razancí na otázku k platbám sestřička v jedné z ambulancí v Praze-Vršovicích. Žádné peníze nechtějí ani v jedné z ordinací v Karlíně. Nechtěli je ani ve dvou ordinacích v Ústí nad Labem či v jedné z ordinací ve Žďáru nad Sázavou: „U nás se poplatky neplatí, tady jste na okrese, poplatky můžete chtít leda tak někde v Praze.“

Lékař nesmí odmítnout poskytování hrazené péče

A jak je to tedy se zmiňovanou nezákonností? Může lékař registrační platby či roční poplatky vybírat, a pokud ano, za jakých podmínek?

Tady se pacientky i lékaři ocitají tak trochu na tenkém ledě. Pokud lékař vybírá za to, co například vyjmenovala gynekoložka z Malé Strany (objednání bez čekání, mimo ordinační dobu, možnost zavolat lékařce kdykoliv), platby si zřejmě uhájí. Horší už to je, že bez sedmisetkorunového poplatku za každou návštěvu pacientku odmítne ošetřit. To už je za hranou pravidel, která by měla dodržovat.

Poplatky za první dlouhou konzultaci by asi také prošly, ale pokud lékař chce registrační poplatek bez služeb navíc nebo vybírá roční poplatky a bez nich vás do ordinace nevezme, pak už jde jeho chování opět přes pomyslnou čáru.

Například Všeobecná zdravotní pojišťovna (VZP) se v minulosti k platbám u gynekologů opakovaně vyjadřovala a uvedla, že lékař, tedy alespoň ten, který má smlouvu s pojišťovnou, nemá právo vybírat registrační poplatky, vymáhat sponzorské dary a nesmí odmítnout poskytnout péči hrazenou z veřejného zdravotního pojištění. V žádném případě by lékař neměl chtít po pacientce také peníze za to, co už mu platí zdravotní pojišťovna.

„V gynekologické péči je z veřejného zdravotního pojištění hrazená veškerá pravidelná péče, zejména preventivní prohlídky, péče o těhotné i všechny operační výkony související s gynekologickými obtížemi,“ vyjmenovává mluvčí VZP Viktorie Plívová.

Server Vitalia.cz požádal o stanovisko také ministerstvo zdravotnictví, to ale do vydání textu na otázky neodpovědělo.

Povinnosti lékařů

(odst. 2 § 45 zákona č. 372/2011 Sb., o zdravotních službách)

  • informovat pacientku o ceně poskytovaných zdravotních služeb nehrazených nebo částečně hrazených z veřejného zdravotního pojištění, a to před jejich poskytnutím
  • vystavit účet za uhrazené zdravotní služby, nestanoví-li jiný právní předpis jinak
  • zpracovat seznam cen poskytovaných zdravotních služeb nehrazených a částečně hrazených z veřejného zdravotního pojištění a umístit ho tak, aby byl přístupný pacientkám (toto neplatí pro poskytovatele lékárenské péče)

Platby procházejí, protože ženy si nestěžují

Jak je tedy možné, že lékaři poplatky stále chtějí a někteří je dokonce navyšují? Jednak je to dáno tím, že stejně jako jiní lékaři i gynekologové si mohou nechat platit za takzvaný nadstandard, tedy péči a materiál, který není hrazen zdravotními pojišťovnami. Jenže definice nadstandardu neexistuje, a tak se do něj může vejít leccos.

Za tím, že se u gynekologů platí více než kde jinde, vidí Milan Kubek také to, že se ženy proti platbám neohrazují. „Nad placením většinou mávnou rukou, takže to lékařům prochází,“ míní prezident ČLK. To dokládá i vyjádření VZP. „V roce 2020 evidujeme dvě stížnosti týkající se poplatků v ordinacích gynekologů, v roce 2021 jednu stížnost,“ uvádí Viktorie Plívová.

Milan Kubek absenci stížností přičítá tomu, že pokud žena chodí ke gynekologovi léta, zná jej a má v něj důvěru, peníze jí nestojí za to, aby vztah narušila. Tomu může nahrávat i obava, že po roztržce si pacientka nenajde novou ambulanci, protože zejména v Praze jich část nové pacientky nenabírá. A ty, co nové pacientky berou, zase chtějí také nějakou formu platby, takže se ženě někdy ani finančně nevyplatí nového gynekologa či gynekoložku hledat.

Ordinace nevystavují účtenky, i když musí

Situaci se stížností může komplikovat i fakt, že některé ordinace po zaplacení pacientkám nevystavují účtenku. Stížnost proto může být jen tvrzením proti tvrzení. Podle ministerstva financí se ale takto v ambulancích chovat nesmí, byť na lékaře se zatím nevztahuje povinnost elektronické evidence tržeb (EET). Ta by u nich podle původních plánů měla nastat v lednu 2023. Harmonogram ale může po volbách vzít za své.

Jak se tedy má pacientka zachovat, když se nechce hádat přímo v ordinaci? V prvé řadě by se měla obrátit na svoji zdravotní pojišťovnu. Druhou variantou je poslat stížnost na krajský úřad, v případě Prahy na magistrát, protože právě tyto úřady registrují zdravotnická zařízení. A registrace jim mohou také odebírat.

Nevystaví-li sestřička či lékař účtenku, lze se obrátit na Finanční nebo Celní správu, která tuto povinnost kontroluje. „Pokud podnikatel v rozporu s povinností založenou zákonem nezaeviduje tržbu nebo nevystaví účtenku, dopustí se přestupku a vystavuje se riziku uložení sankce až do výše padesát tisíc korun,“ uvedl Šimon Blecha z oddělení komunikace ministerstva financí.

Kde a jak si stěžovat

  • U své zdravotní pojišťovny – stížnost lze podat na pobočce dle bydliště pacientky či na pobočce, kde má lékař pracoviště. Před jejím podáním si pacientky mohou telefonicky ověřit, na co mají nárok z pojištění. Např. VZP doporučuje volat linku 952 222 222.
  • Na krajském úřadu či magistrátu – jde o úřad v kraji, kde má lékař ordinaci. Jak ale upozorňuje např. Středočeský kraj, stěžovatel se musí nejprve písemně obrátit na samotného lékaře. A pokud ten stížnost uspokojivě nevyřeší, teprve pak může podat stížnost u odboru zdravotnictví na krajském úřadu. Na vyřízení stížnosti má úřad třicet, maximálně sto dvacet dnů.
  • Na Finanční či Celní správě – jde o úřad v místě, kde má lékař ordinaci, stížnost lze podat ústně, dopisem nebo elektronicky, tedy e-mailem opatřeným elektronickým podpisem či přes datovou schránku.

U gynekologických sdružení si nestěžujte

Naopak obracet se se stížnostmi na profesní lékařské organizace podle prezidenta ČLK příliš smysl nemá. „Jde o zájmové spolky, které nemají žádnou kompetenci kontroly,“ uvádí Milan Kubek.

V Česku jde zejména o dvě organizace – Sdružení soukromých gynekologů ČR a Českou gynekologickou a porodnickou společnost ČLS JEP. Obě vede již výše citovaný Vladimír Dvořák. Serveru Vitalia.cz řekl, že neví o případech, kdy by lékař podmiňoval vyšetření zaplacením. 

„Pokud se to někde děje, asi by bylo dobře, kdyby se klientky pobavily se svojí pojišťovnou nebo přímo s tím lékařem. Ale vážně nevím o tom, že by se to někde praktikovalo,“ říká gynekolog. A odmítá také, že by rozšířenou praxí bylo vybírání ročních či registračních poplatků. „V mém regionu, což je Brno a okolí, žádné registrační ani roční poplatky nejsou. Když se někdo rozhodne sponzorovat zdravotnické zařízení, tak určitě koná bohulibou činnost, ale nevím o tom, že by někdo v Brně a okolí vyžadoval roční poplatek,“ dodává Vladimír Dvořák. Redaktorka přitom při namátkovém obvolávání ambulancí narazila i na ordinaci v Brně-střed, kde lékař požadoval 700 korun za rok. Bez peněz registrace nebyla možná.

Vybírání peněz v gynekologických ordinacích není nový fenomén. Autorka tohoto textu na něj upozorňovala už před jedenácti lety a server Vitalia.cz o něm v minulosti již také opakovaně informoval. Popsal například chování pražského GynCentra, které podmiňovalo vypsání eReceptu zakoupením klientské karty za 990 Kč ročně, navíc předání receptu vykázalo jako vyšetření. Jak ukázala aktuální anketa, v ordinacích se za tu dobu téměř nic nezměnilo.

Autor článku

Redaktorka Vitalia.cz. Vystudovala žurnalistiku a češtinu na Univerzitě Palackého v Olomouci, pracovala v Deníku, na webu TV Nova a iDNES.cz. Píše o zdravotnictví. Je držitelkou novinářských cen Psychiatrické společností ČLS JEP za rok 2021 a 2022. 

'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.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:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { 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(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll 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 = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } 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(); } 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(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }
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 »