${MOVED.size?`${MOVED.size} ${MOVED.size===1?"pacient přesunut":MOVED.size<5?"pacienti přesunuti":"pacientů přesunuto"} z dnešní porady: ${[...MOVED].map(i=>esc(P[i].n)).join(", ")}. `:""}Program se uzavře v pondělí 19. 10. ve 12:00 a rozešle členům.
${[...MOVED].map(i=>``).join("")}
${MOVED.size?``:""}
Proběhlé
15. 10.st · 10:00
Onkologické MDT
Zdeněk Hájek: rozhodnutí odloženo do doplnění RAS a PET/CT
13. 10.út · 14:00
Porada InterSystems
Dorota Máchalová: 2 rozhodnutí, zápis zpět do IRIS
`,
jednani:()=>{ const p=P[LIVE]; const N=15;
const rec=p.st==="bad"?1:p.miss.some(m=>m[2])?2:p.miss.length?1:0;
const sel=SEL[LIVE]??null; const V=VT[LIVE]||(VT[LIVE]={});
const TM=TK[LIVE]||(TK[LIVE]=p.miss.map(m=>({w:m[0],k:m[1],on:1,req:m[2]})));
const OPTS=[["✓","Doporučit léčbu","Podklady stačí, porada doporučí postup."],["⏸","Odložit do doplnění podkladů","Rozpor nebo chybějící údaj brání rozhodnutí."],["+","Doplnit vyšetření","Vyžádat vyšetření mimo tým, žádanky se připraví."],["↗","Předat jinému pracovišti","Péče přechází jinam, předá se celý souhrn."]];
const yes=Object.values(V).filter(x=>x==="y").length, no=Object.values(V).filter(x=>x==="n").length;
const dot=x=>x.st==="bad"?"bad":x.st==="none"?"none":x.miss.length?"miss":"ok";
const chips=[...p.bad.map(b=>`≠${esc(b)}`),...p.miss.map(m=>`+${esc(m[0])}${m[2]?`žádanka`:""}`)].join("");
return `
Výsledky přesně podle zpráv laboratoře. AI varianty neinterpretuje, jen hlídá rozpory a chybějící vyšetření.
${stat("bad","Rozpor","dvě zprávy si odporují")}${stat("chk","Ověřit","varianta bez klasifikace","var(--violet)")}${stat("miss","Chybí","žádanka na patologii")}${stat("ok","Doloženo","výsledek ze zprávy")}
Vstupní onkologické vyšetření · 5. 3. 2026KRAS G12Dmutace uvedena
Na stavu RAS závisí volba cílené léčby. Rozhodnutí z 12. 10.: vyžádat potvrzení od molekulární laboratoře.žádanka · molekulární laboratoř${pidx("Zdeněk Hájek")>=0?``:""}
✓Rozhodnutí zapsáno${n} ${n===1?"úkol založen":n>1&&n<5?"úkoly založeny":"úkolů založeno"} · zápis do IRIS · zpráva pro Beatu
`; d.appendChild(ov); setTimeout(()=>{ if(LIVE<14){ LIVE++; go("jednani"); startTimer(); } else { toast("Porada ukončena, záznam z jednání je připravený"); go("porady"); } },1500); return; }
},true);
nav();
render(true);
setTimeout(()=>document.getElementById("root").classList.remove("anim"),2500);
/* ===== Nápověda při najetí myší (Claude) ===== */
window.TIPS_ON=(()=>{ try{ return localStorage.getItem("mdt-tips")!=="0"; }catch(_){ return true; } })();
function tipKit(win,doc,TIPS,isOn){
if(doc.__tipkit) return; doc.__tipkit=1;
const st=doc.createElement("style");
st.textContent=`.mtip{position:fixed;z-index:2147483600;max-width:290px;background:var(--surface,#fff);color:var(--ink,#0d1220);border:1px solid var(--line2,#d6dae1);font:500 13px/1.45 "Outfit",ui-sans-serif,system-ui,sans-serif;padding:9px 12px 10px;border-radius:12px;box-shadow:0 16px 36px -14px rgba(10,15,30,.35);pointer-events:none;opacity:0;transform:translateY(4px);transition:opacity .16s ease,transform .16s ease}
.mtip.on{opacity:1;transform:none}
.mtip b{display:block;font-size:10.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--accent,#134e6f);margin-bottom:2px}
@media (prefers-reduced-motion:reduce){.mtip{transition:none}}`;
doc.head.appendChild(st);
const tip=doc.createElement("div"); tip.className="mtip"; tip.setAttribute("role","tooltip"); doc.body.appendChild(tip);
let cur=null, t=null, mx=0, my=0;
const find=el=>{ if(!el||!el.closest||el.closest(".mtip,.dw,.modal")) return null; for(let e=el;e&&e!==doc.body;e=e.parentElement){ for(const [sel,txt,lab] of TIPS){ if(e.matches&&e.matches(sel)) return [e,txt,lab]; } } return null; };
const place=()=>{ const w=tip.offsetWidth,h=tip.offsetHeight,W=win.innerWidth,H=win.innerHeight; let x=mx+14,y=my+20; if(x+w>W-10) x=Math.max(10,mx-w-14); if(y+h>H-10) y=Math.max(10,my-h-14); tip.style.left=x+"px"; tip.style.top=y+"px"; };
const hide=()=>{ clearTimeout(t); cur=null; tip.classList.remove("on"); };
doc.addEventListener("mousemove",e=>{ mx=e.clientX; my=e.clientY; if(tip.classList.contains("on")) place(); },{passive:true});
doc.addEventListener("mouseover",e=>{
const on=isOn();
if(!on){ hide(); return; }
const f=find(e.target); if(!f){ hide(); return; } if(f[0]===cur) return;
cur=f[0]; tip.classList.remove("on"); clearTimeout(t);
t=setTimeout(()=>{ tip.innerHTML=(f[2]?`${f[2]}`:"")+f[1]; place(); tip.classList.add("on"); },380);
});
doc.addEventListener("mousedown",hide); win.addEventListener("scroll",hide,true); doc.addEventListener("mouseleave",hide);
}
const MAINTIPS=[
['.mtipt',"Zapne nebo vypne tyhle vysvětlivky."],
['#nav [data-v="prehled"]',"Dnešní porada na jednom místě: program, kdo je připravený a co chybí.","Přehled"],
['#nav [data-v="porady"]',"Seznam porad MDT. Odtud otevřeš program nebo spustíš jednání.","Porady"],
['#nav [data-v="pripady"]',"Všechny případy na programu porady, seřazené podle připravenosti.","Případy"],
['#nav [data-v="pacienti"]',"Kartotéka: pacient a celá jeho historie napříč všemi poradami.","Pacienti"],
['#nav [data-v="ukoly"]',"Kdo co má dodat a do kdy. Úkoly z porad a chybějící podklady.","Úkoly"],
['#nav [data-v="zobrazeni"]',"Pracovní seznam radiologa: snímky a nálezy, které má projít před poradou.","Zobrazení"],
['#nav [data-v="genomika"]',"Molekulární nálezy přesně podle zpráv laboratoře, včetně rozporů.","Genomika"],
['#nav [data-v="moduly"]',"Co AI v aplikaci dělá, z čeho čerpá a co nikdy nedělá.","Moduly ACI"],
['.brand',"SUPER MDT od MEMOyA. Příprava a vedení multidisciplinární porady na jednom místě."],
['.aibadge',"Jazykový model MedGemma běží lokálně na serveru nemocnice. Data pacientů neopouštějí síť nemocnice.","Lokální AI"],
['.fsz',"Zvětší nebo zmenší písmo v celé aplikaci."],
['[data-live]',"Spustí živé jednání: pacient po pacientovi, s časomírou, hlasováním a zápisem.","Jednání porady"],
['.date .cal,.mrow .cal',"Kdy porada začíná."],
['.sent',"Potvrzení, že seznam pacientů už odešel všem členům týmu."],
['.rolebar',"Vyber svou odbornost a uvidíš, co je u kterého pacienta právě na tobě.","Role"],
['.tiles .tile',"Souhrn celé porady jedním pohledem. Klikni a seznam se podle toho vyfiltruje."],
['[data-mail="team"]',"Náhled e-mailu, který dostanou všichni členové MDT, s odkazy na případy."],
['[data-mail="coord"]',"Co musí koordinátorka sehnat, aby se o každém pacientovi dalo rozhodnout."],
['[data-mail^="p"]',"Připraví e-mail se žádostí o chybějící podklady právě pro tohoto pacienta."],
['[data-jdatum]',"Přesune pacienta na jinou poradu. Objeví se v Poradách u příštího týdne."],
['.act [data-open]',"Rychlý náhled pacienta, aniž bys opustil stránku."],
['.row .t',"Plánovaný čas a kolik minut je na pacienta."],
['.row .q,.row .qx',"Otázka, kterou má porada u tohoto pacienta rozhodnout.","Otázka pro poradu"],
['.row .why',"Co konkrétně brání rozhodnutí."],
['.row .bar',"Rozhodovací minimum: zelená je doložená, červená je rozpor, prázdná chybí.","Připravenost"],
['.tag',"Stav případu: jestli se o něm dá na poradě rozhodnout."],
['.row .id,.cid',"Identifikátor pacienta v nemocnici."],
['.prog .row',"Pacient v programu porady. Klikni a otevře se náhled."],
['.hidden-note',"Další žádosti, které systém právě čte z došlých PDF."],
['.side .task',"Úkol, který je na tobě, s pacientem a termínem.","Co je na mně"],
['.side .dec',"Poslední rozhodnutí porady a kolik členů souhlasilo."],
['.mrow .mini',"Každé kolečko je jeden pacient, barva ukazuje, jak je připravený."],
['.mrow',"Jedna porada: datum, počet pacientů a připravenost."],
['.cstats .cst',"Filtr podle stavu. Klikni a seznam se zúží jen na tyhle případy."],
['.csearch',"Hledání podle jména, ID nebo diagnózy."],
['.rseg2',"Řazení nebo filtr seznamu."],
['.crow .cring',"Kolik procent rozhodovacího minima je doloženo zdrojem."],
['.cchips .cc',"Rozpor ve spisu: dva dokumenty tvrdí o stejné věci něco jiného.","Rozpor"],
['.tnm',"Kód diagnózy podle MKN-10."],
['.crow',"Případ k poradě. Klikni a otevře se celá stránka případu."],
['.ki',"Pacient v kartotéce. Klikni a vpravo uvidíš jeho historii."],
['.kstats',"Kolik porad, událostí a rozhodnutí pacient za sebou má."],
['.kc',"Jedna porada, na které pacient byl: otázka a co se rozhodlo."],
['.ktl',"Časová osa pacienta od první zprávy po dnešek."],
['.demo',"Údaj doplněný jen pro ukázku. Ve skutečném spisu není."],
['.kcol .kch',"Sloupec podle stavu úkolu."],
['.tc .tkr,.tkr',"Žádanka jde mimo tým, úkol řeší někdo z týmu."],
['.tc .due,.due',"Termín. Červeně je po termínu."],
['.tsrc',"Ze které porady úkol vzešel."],
['.tcf .gbtn',"Vezmeš si úkol na sebe."],
['.tc',"Úkol: co, u kterého pacienta, pro koho a do kdy."],
['.dvb,.dv',"Jak hlasovali členové týmu."],
['.dtl li,.dtl',"Rozhodnutí porad v čase."],
['.cmq',"Na co se porada radiologa ptá."],
['.cmpx',"Srovnání: jak se ložisko mění mezi vyšetřeními."],
['.ith',"Klikni a snímek se otevře přes celou obrazovku."],
['mark.mm',"Velikost ložiska přesně ze zprávy."],
['.ift .gbtn',"Radiolog potvrdí, že snímek před poradou prošel."],
['.ic',"Vyšetření k posouzení: nález, velikost a termín revize."],
['.gconf',"Dvě zprávy o stejném genu si odporují. Dokud se to nevyřeší, nejde vybrat cílenou léčbu.","Rozpor"],
['.gv',"Hodnota doslova ze zprávy laboratoře."],
['.gt',"Jeden molekulární nález a jeho stav."],
['.mcard',"Jeden modul AI: co dělá, z čeho čerpá a co nedělá."],
['.lbadge',"Právě běží porada. Kolikátý pacient je na řadě."],
['.tring',"Časomíra na aktuálního pacienta."],
['.lbtns',"Přepnout na předchozího nebo dalšího pacienta."],
['.lprog,.lp',"Postup porady: kolik pacientů je hotovo a kolik zbývá."],
['.li2',"Pacient v programu. Klikni a přeskočíš na něj."],
['.bigq2',"Otázka, kterou porada právě rozhoduje.","Otázka pro poradu"],
['.block',"Co musí být vyřešené, než se dá rozhodnout."],
['.rg',"Co má k pacientovi říct která odbornost."],
['.sugg',"Návrh podle stavu podkladů. Rozhoduje vždy porada."],
['.opt2',"Možný výsledek porady. Vyber jeden."],
['.tk2',"Úkol, který z porady vznikne, s řešitelem a termínem."],
['.tm',"Hlas člena týmu. Klikni a přepneš souhlas nebo nesouhlas."],
['.cons',"Kolik členů s rozhodnutím souhlasí."],
['.srow',"Co se stane po zapsání: zápis do spisu a do IRIS s tím, kdo rozhodl."],
['.beafab',"Bea odpovídá jen z dokumentů pacienta a ke každé odpovědi dá zdroj.","Bea"],
['.bmode',"Rozhovor: ptáš se ty. Poslech porady: Bea poslouchá a ozve se, až ji oslovíš."],
['.bmic',"Zeptej se hlasem."],
['.bchips',"Rychlé otázky na pacienta jedním klikem."],
['.bsrc,.bside',"Zdroj odpovědi. Klikni a uvidíš dokument se zvýrazněnou citací."],
['.bspk',"Bea odpověď přečte nahlas."],
];
const CASETIPS=[
['.crumb',"Kde jsi: případ a ID pacienta."],
['.linkb',"Ukáže, ze kterých dokumentů diagnóza pochází."],
['.meta',"Základní údaje pacienta. Rodné číslo je skryté."],
['.when',"Na kterou poradu případ jde a k jakému dni jsou podklady."],
['.acts-h .gbtn',"Akce s případem: poslední vyšetření, výběr porady a další."],
['.rolebar',"Vyber svou odbornost a zvýrazní se, co je na tobě.","Role"],
['.ring,.rc',"Kolik z rozhodovacího minima je doloženo zdrojem.","Rozhodovací minimum"],
['.tiles .tile',"Rozpory, chybějící a k ověření. Klikni a skočíš rovnou na ně."],
['.q .by',"Kdo otázku pro poradu zadal."],
['.q',"Otázka, kterou má porada rozhodnout.","Otázka pro poradu"],
['.ph .more',"Seznam dokumentů, ze kterých shrnutí vychází."],
['.inc',"Zapne nebo vypne tuto část v PDF reportu."],
['.ref',"Zdroj. Klikni a otevře se dokument se zvýrazněnou větou."],
['.flag',"Údaj je starý, před poradou ho ověřit."],
['.qt',"Doslovná citace ze zprávy."],
['.cmpt',"Rozpor: co tvrdí jeden zdroj a co druhý.","Rozpor"],
['.wk',"Výsledek z laboratoře, který IRIS spároval s podmínkou porady. Uzavření potvrzuje lékař.","Probuzení případu"],
['.rows .r .a',"Co s tím: úkol pro tým nebo žádanka ven."],
['.rows .r',"Položka, která chybí nebo se má ověřit, a kdo ji dodá."],
['.lt-tile',"Laboratorní hodnota s trendem a normou ze zdroje. Klikni pro graf."],
['.strip .cell',"Oblast případu a jestli je doložená. Klikni pro detail."],
['.det',"Detail oblasti s citacemi ze zdrojů."],
['.vw',"Přepnout mezi časovou osou a seznamem."],
['.hx',"Časová osa léčby, vyšetření a laboratoře."],
['.docs',"Všechny dokumenty ve spisu."],
['.upl',"Nahraj nový dokument. Případ se sám přepočítá."],
['.pagelinks',"Odkazy na celé seznamy zpráv, osy a laboratoře."],
['.selbox',"Vyber, které části půjdou do PDF reportu."],
['.lbl,textarea',"Sem napiš závěr týmu. Půjde do reportu."],
['.side .pbtn',"Vytvoří PDF report s citacemi a zdroji."],
['.votes',"Jak hlasovali členové týmu."],
['.side .dec',"Rozhodnutí porady k tomuto případu."],
['.wake',"Dorazil výsledek, na který porada čekala. Uzavření potvrzuje lékař.","Probuzení případu"],
['.demo',"Údaj doplněný jen pro ukázku. Ve skutečném spisu není."],
];
tipKit(window,document,MAINTIPS,()=>window.TIPS_ON);
(function(){ const fs=document.querySelector(".fsz"); if(!fs) return; const b=document.createElement("button"); b.type="button"; b.className="mtipt"; b.setAttribute("aria-pressed",String(window.TIPS_ON)); b.textContent="?"; b.setAttribute("aria-label","Vysvětlivky při najetí myší"); fs.appendChild(b);
b.addEventListener("click",()=>{ window.TIPS_ON=!window.TIPS_ON; b.setAttribute("aria-pressed",String(window.TIPS_ON)); try{ localStorage.setItem("mdt-tips",window.TIPS_ON?"1":"0"); }catch(_){} toast(window.TIPS_ON?"Vysvětlivky zapnuté":"Vysvětlivky vypnuté"); }); })();
document.addEventListener("load",e=>{ const f=e.target; if(f&&f.classList&&f.classList.contains("casefr")){ try{ tipKit(f.contentWindow,f.contentDocument,CASETIPS,()=>window.TIPS_ON); }catch(_){} } },true);