(()=>{'use strict';const $=s=>document.querySelector(s),esc=x=>String(x??'').replace(/[&<>"']/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[c])),fa=n=>Number(n||0).toLocaleString('fa-IR');
function active(a){return a&&a.status!=='لغو شده'} function paid(a){return Math.max(0,Number(a.payment)||0)+Math.max(0,Number(a.prepaidAmount)||0)} function fee(a){return Math.max(0,Number(a.estimatedFee)||Number(db.sessionFee)||0)}
function balance(pid){const rows=db.appointments.filter(a=>a.patientId===pid&&active(a)&&a.visitType!=='initial'&&((a.attendance||'pending')==='present'||a.prepaidFirstSession));const due=rows.reduce((s,a)=>s+fee(a),0),got=rows.reduce((s,a)=>s+paid(a),0);return {due,got,balance:Math.max(0,due-got)}}
function ensure(){if(typeof db==='undefined'||!$('#page-dashboard'))return false;if(!$('#m4Finance')){const x=document.createElement('section');x.id='m4Finance';x.className='m4-panel manager-only';x.innerHTML='<div class="m4-head"><div><h3>مالی حرفه‌ای</h3><small>صندوق امروز، مطالبات و کنترل مانده بیماران</small></div><button class="btn secondary" id="m4Refresh">به‌روزرسانی</button></div><div class="m4-cards" id="m4Cards"></div><div class="m4-grid"><div><h4>بدهکاران</h4><div id="m4Debtors"></div></div><div><h4>عملکرد امروز کاربران</h4><div id="m4Staff"></div></div></div>';$('#page-dashboard').appendChild(x);$('#m4Refresh').onclick=render}return true}
function render(){if(!ensure())return;const today=localDate(),todayRows=db.appointments.filter(a=>a.date===today&&active(a)),cash=todayRows.reduce((s,a)=>s+paid(a),0),present=todayRows.filter(a=>a.attendance==='present').length,debtors=db.patients.map(p=>({p,b:balance(p.id)})).filter(x=>x.b.balance>0).sort((a,b)=>b.b.balance-a.b.balance),totalDebt=debtors.reduce((s,x)=>s+x.b.balance,0);$('#m4Cards').innerHTML='<div><small>دریافتی امروز</small><b>'+fa(cash)+' تومان</b></div><div><small>مراجعه انجام‌شده</small><b>'+fa(present)+'</b></div><div><small>مطالبات ثبت‌شده</small><b>'+fa(totalDebt)+' تومان</b></div><div><small>بیمار بدهکار</small><b>'+fa(debtors.length)+'</b></div>';$('#m4Debtors').innerHTML=debtors.length?debtors.slice(0,12).map(x=>'<div class="m4-row"><span><b>'+esc(x.p.name)+'</b><small>دریافت '+fa(x.b.got)+' از '+fa(x.b.due)+'</small></span><strong>'+fa(x.b.balance)+' تومان</strong></div>').join(''):'<div class="m4-empty">مطالبه ثبت‌شده‌ای وجود ندارد.</div>';const logs=Array.isArray(db.activityLog)?db.activityLog.filter(l=>String(l.at||l.time||'').slice(0,10)===today):[];const by={};logs.forEach(l=>{const u=l.user||l.by||'سیستم';by[u]=(by[u]||0)+1});$('#m4Staff').innerHTML=Object.keys(by).length?Object.entries(by).sort((a,b)=>b[1]-a[1]).map(([u,n])=>'<div class="m4-row"><span><b>'+esc(u)+'</b><small>فعالیت ثبت‌شده امروز</small></span><strong>'+fa(n)+'</strong></div>').join(''):'<div class="m4-empty">هنوز فعالیتی برای امروز ثبت نشده است.</div>'}
const old=window.renderAll;if(typeof old==='function')window.renderAll=function(){const r=old.apply(this,arguments);setTimeout(render,0);return r};if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',()=>setTimeout(render,0));else setTimeout(render,0);})();