;

Potřebují nemocnice BI?

23. 7. 2010
Doba čtení: 6 minut

Sdílet

Skutečnost, že zdravotnictví v době ekonomické krize není ostrůvkem klidu, asi nikoho nepřekvapila. Finanční rezervy zdravotních pojišťoven, dosahující ještě na začátku roku 2009 zhruba 12 miliard, se rychle tenčí a tlak na efektivitu zdravotní péče stoupá.

Snahu učinit systém spravedlivějším pro poskytovatele efektivnější zdravotní péče je ale rozhodně pozitivní. Více peněz  může směřovat k nemocnicím a soukromým lékařům, kteří se v pomyslném kvadrantu kvality a ceny nacházejí „vpravo nahoře“, tedy léčí levně a dobře. Tato snaha „platit za kvalitu“ však nezbytně činí celý systém stále složitějším, a to zejména pro nemocnice poskytující péči na lůžkách.

Historické úhradové mechanizmy motivují zdravotnická zařízení především k optimalizaci vykazování této péče zdravotním pojišťovnám. Skutečný tlak na efektivitu ale vytvářejí až postupně se rozvíjející moderní úhradové mechanizmy (především tzv. DRG a balíčky), kdy nemocnice má pevně stanovenou cenu za vyřešení celého hospitalizačního případu, a je tedy jasně definován vztah mezi vstupem, výstupem a cenou. Veškeré náklady na nežádoucí události v průběhu hospitalizace pacienta (např. zpoždění, duplicity či chyby při diagnostických a terapeu­tických výkonech) jdou na účet nemocnic, které jsou tak motivovány k jejich prevenci a poskytování kvalitní péče.

Náklady na pacienta

Pro vyčíslení ceny takového případu není důležitý jen prostý seznam provedených lékařských výkonů a použitého nákladnějšího materiálu a léků, který se odesílá na pojišťovnu. Je nutné znát mnoho dalších položek. Od personálních nákladů, které jsou mimo jiné dány i počtem různých druhů nelékařských výkonů, přes náklady na provoz „hotelových“ služeb, pro které je zase nutné vycházet z pasportizace prostorových kapacit, až po náklady na externě a interně prováděná laboratorní vyšetření, zjistitelné z účetního a laboratorního systému.

Z výše uvedeného vyplývá, že žádný z dílčích informačních systémů nemocnice, tedy ani klinický systém pro vedení zdravotnické dokumentace a vyúčtování pro zdravotní pojišťovny, ani ekonomický systém pro vedení účetní a personální agendy, není sám o sobě vhodným místem pro takto komplexní výpočet nákladů na individuální případ.

Výhody BI řešení

Pro řešení problematiky vyčíslení nákladů na jednotlivé případy je ideální koncept datového skladu, shromažďujícího data z mnoha zdrojů a se schopností udržet historii těchto dat. Pro dlouhodobou udržitelnost řešení by struktura uložených dat měla být pokud možno nezávislá na aktuální legislativě a postupech výkaznictví pro zdravotní pojišťovny, byť jedním z cílů řešení je také potřeba nemocnice vytěžit maximum při aktuálních pravidlech daných pojišťovnou v rámci platné legislativy. Vybudování Business Intelligence nadstavby pro statistické sestavy a výpočet ukazatelů kvality a efektivity poskytované péče nad dobře strukturovanými daty je úkolem pro zkušeného implementátora zvolené technologie.

Kromě statistik za určené období lze jako nadstavbu nad integrovanými daty zavést i systém rychlé signalizace nežádoucích událostí v procesu poskytování zdravotních služeb. Jde o „screeningový“ systém pro detekci podezřelých situací, které mohou být následně předávány odpovědným osobám k další analýze. Například provedení rentgenu předloktí třetí den hospitalizace u pacienta, který byl přijat na interní kliniku pro zápal plic, by mohl indikovat, že došlo k pádu pacienta v důsledku nedostatečného posouzení jeho schopnosti samostatné chůze.

Dvojnásobné překročení standardní délky hospitalizace pacienta pro danou přijímací diagnózu může indikovat komplikace, které je potřeba sledovat a pravidelně vyhodnocovat z hlediska trendů vývoje jejich počtu a v případě neočekávaného zvýšení analyzovat hlouběji jejich důvody. Část takových incidentů lze samozřejmě zjistit pomocí  pasivního hlášení zdravotníků. Zahraniční zkušenost ale ukazuje, že automatizovaná analýza dat zachytává problémy, které by pracovníci sami nehlásili.

Každopádně všechny nežádoucí události začínají při moderních úhradových mechanizmech představovat pro nemocnici kromě etického problému také problém ekonomický, neboť jde o zbytečné náklady navíc a bez nároku na úhradu od zdravotní pojišťovny.

Zdroje dat

Cyber25

Základním předpokladem realizace datového skladu a jeho Business Intelligence nadstavby, která bude poskytovat informace sloučené z více zdrojů, jsou kvalitní a ověřená data. Tato data jsou nashromážděna pomocí tzv. ETL procesů zahrnujících vytěžování primárních zdrojů (Extract), transformaci dat do navržené struktury (Transform) a nakonec jejich uložení do datového skladu (Load). V nemocničním prostředí se můžeme setkat s těmito typy dat:

  • strukturovaná elektronická data v přímé vazbě na pacientský případ – např. výkazy kódů pro pojišťovnu, laboratorní výsledky
  • strukturovaná data bez vazby na pacienta – např. ekonomické agendy, skladové zásoby a jejich použití
  • data v textové podobě nebo jen na papíře – např. většina lékařské i ošetřovatelské zdravotnické dokumentace, většina informací o plánování a skutečném použití zdrojů (vytížení ambulancí, operačních sálů, sterilizovaného materiálu)
  • neevidovaná data – např. informace o rozloze jednotlivých místností (nutné pro reálné rozúčtování paušálních nákladů)
  • nezjistitelná data – např. informace o příslušnosti lékaře k danému pacientovi, pokud nemocnice nemá zaveden institut ošetřujícího lékaře.

Některá data z různých systémů mohou být vzájemně neslučitelná, například při rozdílné struktuře nákladových středisek a struktuře pracovišť pro vykazování pojišťovně. Efektivní realizace datového skladu si tak může vyžádat změny ve vedení zdravotnické dokumentace či jiných evidencích, ale i organizační změny, které nemusí být kladně přijímány zejména klinickými pracovníky. V konečném důsledku však může datový sklad poskytnout cenné informace, které nemocnice jiným způsobem získat nemůže a které mohou významně přispět k jejich schopnosti poskytovat efektivně kvalitní zdravotní péči.

'; 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'; } }
OSZAR »