👨‍⚕️

BekDac

Kullanıcı adı veya şifre hatalı.
👨‍⚕️ BekDac
Dr.

Akıllı Arama

Kitaplığınızda ve notlarınızda yapay zeka ile arama yapın

Kitaplık

Tıbbi referans kitaplarınız

PDF Yükle

Tıklayın veya dosyayı sürükleyin

Yüklenen Kitaplar

Henüz kitap yüklenmedi

PDF dosyalarınızı yükleyin

Notlarım

Klinik gözlem ve notlarınız

Etiket: Tümü

Henüz not eklenmedi

Yeni not ekleyerek başlayın

Hasta Takibi

Klinik vakalar ve hasta notları

Hasta kaydı yok

İlk hastayı ekleyerek başlayın

Hasta Listesine Dön

İlaç & Doz

AI destekli ilaç bilgisi ve doz hesaplama

Örn: "Metformin dozu ve etkileşimleri" veya "Amoksisilin + Warfarin"

Medikal Hesap Makinesi

45 klinik hesaplayıcı — arama yapın veya kategoriye göre filtreleyin

Arama Geçmişi

Son aramalar ve favoriler

Geçmiş boş

Arama yaptıkça burada görünür

Dashboard

Genel bakış

Son Aktivite

⚙️ Hesap & Ayarlar

Kullanıcı adı değiştir, kullanıcı ekle/sil

👥 Kullanıcı Yönetimi
🔤 Kullanıcı Adını Değiştir
🔑 Şifre Değiştir
ℹ️ Oturum Bilgisi
👤 Giriş yapan:
🔐 Token:
`; w.document.write(html);w.document.close();setTimeout(()=>w.print(),500); } function exportPatientsPDF(){ if(!patients.length){showToast('Dışa aktarılacak hasta yok','err');return;} const w=window.open('','_blank'); const html=`BekDac Hastalar

🏥 BekDac — Hasta Raporu

Tarih: ${new Date().toLocaleDateString('tr-TR',{day:'2-digit',month:'long',year:'numeric'})}

${patients.map(p=>{ const age=p.birth_year?`${new Date().getFullYear()-p.birth_year} yaş`:'—'; const stLabel={active:'Aktif',followup:'Takipte',discharged:'Taburcu'}; return`

${escH(p.name)}

${[['Cinsiyet',p.gender||'—'],['Yaş',age],['Ana Tanı',p.diagnosis||'—'],['Durum',stLabel[p.status]||'Aktif'],['Notlar',p.notes||'—']].map(([k,v])=>``).join('')}
${k}${escH(String(v))}
${(p.visits||[]).length?`
VİZİT GEÇMİŞİ:
${(p.visits||[]).slice().reverse().map(v=>`
${new Date(v.date).toLocaleDateString('tr-TR')} — ${escH(v.note)}
`).join('')}`:''}
`;}).join('')} `; w.document.write(html);w.document.close();setTimeout(()=>w.print(),500); } // ── DASHBOARD ── async function updateDashboard(){ const sg=document.getElementById('stat-grid'); let totalPages=books.reduce((s,b)=>s+(b.pages||0),0); try{ const st=await api('stats'); if(st.success){ const d=st.data; sg.innerHTML=`
${d.books}
Kitap
${d.notes}
Not
${d.patients}
Hasta
${d.total_pages}
Sayfa
${d.searches}
Arama
${d.favorites}
Favori
`; return; } }catch(e){} sg.innerHTML=`
${books.length}
Kitap
${notes.length}
Not
${patients.length}
Hasta
${totalPages}
Sayfa
${searchHistory.length}
Arama
${searchHistory.filter(h=>h.fav).length}
Favori
`; const ra=document.getElementById('recent-act'); const acts=[ ...books.slice(0,2).map(b=>({time:b.addedAt,text:`📚 "${b.name.replace('.pdf','')}" kitabı yüklendi`})), ...notes.slice(0,2).map(n=>({time:n.createdAt,text:`📝 "${n.title}" notu eklendi`})), ...patients.slice(0,2).map(p=>({time:p.createdAt,text:`🏥 "${p.name}" hastası eklendi`})), ...searchHistory.slice(0,2).map(h=>({time:h.time,text:`🔍 "${h.query}" arandı`})) ].sort((a,b)=>new Date(b.time)-new Date(a.time)).slice(0,6); ra.innerHTML=acts.length?acts.map(a=>`
${new Date(a.time).toLocaleDateString('tr-TR')}
${escH(a.text)}
`).join(''):'

Henüz aktivite yok

'; } // ── HELPERS ── function extractSnippetsWithPages(pageTexts,query,max=3){ const words=query.toLowerCase().split(/\s+/).filter(w=>w.length>2); const results=[]; for(const[pg,txt]of Object.entries(pageTexts)){ const lt=txt.toLowerCase();const score=words.reduce((s,w)=>s+(lt.includes(w)?1:0),0); if(score>0)results.push({page:parseInt(pg),score,text:txt.substring(0,500)}); } return results.sort((a,b)=>b.score-a.score).slice(0,max); } function escH(s){return String(s).replace(/&/g,'&').replace(//g,'>').replace(/"/g,'"');} function escAttr(s){return String(s).replace(/'/g,"\\'").replace(/"/g,'"');} // ── TOAST ── function showToast(msg,type=''){const t=document.getElementById('toast');t.textContent=msg;t.className='toast show'+(type?' '+type:'');setTimeout(()=>t.classList.remove('show'),2800);} // ── MODAL OUTSIDE CLICK ── ['nmodal','ptmodal','visitmodal'].forEach(id=>{ document.getElementById(id).addEventListener('click',function(e){if(e.target===this){this.classList.remove('open');}}); }); // ── AYARLAR ────────────────────────────────────────────────── function togglePass(inputId, btn){ const inp = document.getElementById(inputId); if(inp.type === 'password'){inp.type = 'text'; btn.textContent = '🙈';} else{inp.type = 'password'; btn.textContent = '👁';} } async function changeUsername(){ const newU = document.getElementById('new-username').value.trim(); if(!newU){showToast('Kullanıcı adı boş olamaz','err');return;} if(newU.length < 3){showToast('En az 3 karakter olmalı','err');return;} const btn = event.target; btn.textContent='Güncelleniyor...'; btn.disabled=true; try{ const res = await api('change_username','POST',{new_username: newU}); if(!res.success){showToast(res.error||'Hata','err');btn.textContent='Kullanıcı Adını Güncelle';btn.disabled=false;return;} CU.username = newU; sessionStorage.setItem('bekdac_name', CU.name); showToast('Kullanıcı adı güncellendi ✓','ok'); const su=document.getElementById('settings-username');if(su)su.textContent=newU; document.getElementById('new-username').value = ''; }catch(e){showToast('Bağlantı hatası','err');} btn.textContent='Kullanıcı Adını Güncelle'; btn.disabled=false; } async function changePassword(){ const oldP = document.getElementById('old-pass').value; const newP = document.getElementById('new-pass').value; const newP2 = document.getElementById('new-pass2').value; const errEl = document.getElementById('pass-error'); errEl.style.display='none'; if(!oldP || !newP || !newP2){ errEl.textContent='Tüm alanları doldurun.'; errEl.style.display='block'; return; } if(newP.length < 6){ errEl.textContent='Yeni şifre en az 6 karakter olmalıdır.'; errEl.style.display='block'; return; } if(newP !== newP2){ errEl.textContent='Yeni şifreler eşleşmiyor.'; errEl.style.display='block'; return; } const btn = event.target; btn.textContent='Güncelleniyor...'; btn.disabled=true; try{ const res = await api('change_password','POST',{old_password: oldP, new_password: newP}); if(!res.success){ errEl.textContent = res.error || 'Hata oluştu.'; errEl.style.display='block'; btn.textContent='Şifreyi Güncelle'; btn.disabled=false; return; } showToast('Şifre başarıyla güncellendi ✓','ok'); document.getElementById('old-pass').value = ''; document.getElementById('new-pass').value = ''; document.getElementById('new-pass2').value = ''; // Güvenlik için yeniden giriş yaptır setTimeout(()=>{showToast('Güvenlik için yeniden giriş yapın','ok');doLogout();}, 1500); }catch(e){ errEl.textContent='Bağlantı hatası: '+e.message; errEl.style.display='block'; } btn.textContent='Şifreyi Güncelle'; btn.disabled=false; }