const Accounting=(()=>{function a(){return localStorage.getItem("pos_token")||""}async function e(e,n={}){const t=await fetch(`/pos/api/accounting${e}`,{headers:{Authorization:`Bearer ${a()}`,"Content-Type":"application/json"},...n});if(!t.ok){const a=await t.json().catch((()=>({error:t.statusText})));throw new Error(a.error||"Request failed")}return t.json()}function n(a){return parseFloat(a||0).toLocaleString("es-MX",{minimumFractionDigits:2,maximumFractionDigits:2})}function t(a){document.querySelectorAll(".tab-btn").forEach((a=>{a.classList.remove("is-active"),a.setAttribute("aria-selected","false")})),document.querySelectorAll(".tab-panel").forEach((a=>a.classList.remove("is-active")));const e=document.querySelector(`.tab-btn[onclick*="'${a}'"]`);e&&(e.classList.add("is-active"),e.setAttribute("aria-selected","true"));const n=document.getElementById(`panel-${a}`);n&&n.classList.add("is-active"),"cxc"===a&&o(),"cxp"===a&&c(),"balance"===a&&s(),"resultados"===a&&i(),"flujo"===a&&l(),"conciliacion"===a&&d(),"cierre"===a&&p()}function r(a,e){return`${e||a}`}async function o(){const a=document.getElementById("panel-cxc");if(!a)return;const t=a.querySelector(".data-table tbody");if(t)try{const o=await e("/aging"),c=o.data||[];if(!c.length)return void(t.innerHTML='No hay cuentas por cobrar.');t.innerHTML=c.map((a=>{const e=a.days_overdue>0?"overdue":a.paid>0&&a.balance>0?"partial":a.balance<=0?"ok":"pending",t="overdue"===e?"Vencida":"partial"===e?"Parcial":"ok"===e?"Pagada":"Vigente";return`\n ${a.invoice||a.folio||"-"}\n ${a.name||a.customer_name||"-"}\n ${a.issue_date?new Date(a.issue_date).toLocaleDateString("es-MX"):"-"}\n ${a.due_date?new Date(a.due_date).toLocaleDateString("es-MX"):"-"}\n $${n(a.total)}\n $${n(a.paid||0)}\n $${n(a.balance||a.total)}\n ${r(e,t)}\n \n `})).join("");const s=a.querySelector(".pagination span");s&&(s.textContent=`Mostrando 1-${c.length} de ${o.totals?.count||c.length} registros`),function(a,e){const n=document.querySelector(`.tab-btn[onclick*="'${a}'"]`);if(!n)return;const t=n.querySelector(".tab-btn__badge");t&&(t.textContent=e)}("cxc",c.length)}catch(a){t.innerHTML=`Error: ${a.message}`}}async function c(){const a=document.getElementById("panel-cxp");if(!a)return;const t=a.querySelector(".data-table tbody");if(t)try{const o=await e("/aging?type=payable"),c=o.data||[];if(!c.length)return void(t.innerHTML='No hay cuentas por pagar.');t.innerHTML=c.map((a=>{const e=a.days_overdue>0?"overdue":a.paid>0&&a.balance>0?"partial":a.balance<=0?"ok":"pending",t="overdue"===e?"Vencida":"partial"===e?"Parcial":"ok"===e?"Pagada":"Vigente";return`\n ${a.invoice||a.folio||"-"}\n ${a.name||a.vendor_name||"-"}\n ${a.receipt_date?new Date(a.receipt_date).toLocaleDateString("es-MX"):"-"}\n ${a.due_date?new Date(a.due_date).toLocaleDateString("es-MX"):"-"}\n $${n(a.total)}\n $${n(a.paid||0)}\n $${n(a.balance||a.total)}\n ${r(e,t)}\n \n `})).join("");const s=a.querySelector(".pagination span");s&&(s.textContent=`Mostrando 1-${c.length} de ${o.totals?.count||c.length} registros`)}catch(a){t.innerHTML=`Error: ${a.message}`}}async function s(){const a=document.getElementById("panel-balance");if(!a)return;const t=a.querySelector(".finance-grid");if(t)try{const r=new Date,o=await e(`/balance-sheet?date=${r.toISOString().slice(0,10)}`),c=t.querySelector(".finance-card:first-child"),s=t.querySelector(".finance-card:last-child");if(c){let a='
Activos
';if(o.activo&&o.activo.items)for(const e of o.activo.items){const t=e.balance<0;a+=`
\n ${e.code?e.code+" ":""}${e.name}\n $${n(e.balance)}\n
`}a+=`
\n Total Activos\n $${n(o.activo?.total||0)}\n
`,c.innerHTML=a}if(s){let a='
Pasivo + Capital
';if(o.pasivo&&o.pasivo.items){a+='
Pasivo
';for(const e of o.pasivo.items)a+=`
\n ${e.code?e.code+" ":""}${e.name}\n $${n(e.balance)}\n
`;a+=`
Total Pasivo$${n(o.pasivo.total)}
`}if(o.capital&&o.capital.items){a+='
Capital Contable
';for(const e of o.capital.items){const t=e.balance>0;a+=`
\n ${e.code?e.code+" ":""}${e.name}\n $${n(e.balance)}\n
`}a+=`
Total Capital$${n(o.capital.total)}
`}a+=`
\n Total Pasivo + Capital\n $${n((o.pasivo?.total||0)+(o.capital?.total||0))}\n
`,s.innerHTML=a}const i=a.querySelector(".select-filter");i&&o.as_of&&(i.innerHTML=``)}catch(a){t.innerHTML=`

Error: ${a.message}

`}}async function i(){const a=document.getElementById("panel-resultados");if(!a)return;const t=a.querySelector(".finance-grid");if(t)try{const a=new Date,r=await e(`/income-statement?year=${a.getFullYear()}&month=${a.getMonth()+1}`),o=t.querySelector(".finance-card");if(!o)return;let c='
Estado de Resultados
';if(c+='
Ingresos
',r.ingresos&&r.ingresos.items)for(const a of r.ingresos.items)c+=`
\n ${a.name}\n $${n(a.amount)}\n
`;if(c+=`
Total Ingresos$${n(r.ingresos?.total||0)}
`,c+='
Costo de Ventas
',r.costos&&r.costos.items)for(const a of r.costos.items)c+=`
\n ${a.name}\n -$${n(Math.abs(a.amount))}\n
`;if(c+=`
Utilidad Bruta$${n(r.utilidad_bruta||0)}
`,c+='
Gastos de Operacion
',r.gastos&&r.gastos.items)for(const a of r.gastos.items)c+=`
\n ${a.name}\n -$${n(Math.abs(a.amount))}\n
`;c+=`
Total Gastos Operacion-$${n(Math.abs(r.gastos?.total||0))}
`;c+=`
\n Utilidad Neta\n $${n(r.utilidad_neta||0)}\n
`,o.innerHTML=c}catch(a){t.innerHTML=`

Error: ${a.message}

`}}async function l(){}async function d(){}async function p(){const a=document.getElementById("panel-cierre");if(!a)return;const n=a.querySelector(".btn--primary");n&&!n.dataset.wired&&(n.dataset.wired="true",n.addEventListener("click",(async()=>{const a=new Date,n=a.getFullYear(),t=a.getMonth()+1;if(confirm(`Cerrar periodo ${t}/${n}? Esta accion no se puede revertir.`))try{await e("/periods/close",{method:"POST",body:JSON.stringify({year:n,month:t})}),alert("Periodo cerrado exitosamente.")}catch(a){alert("Error: "+a.message)}})))}function u(){for(var a=document.querySelectorAll("table"),e=null,n=0;n×',a.appendChild(e)}async function m(){const a=document.getElementById("entryDate").value,n=document.getElementById("entryType").value,t=document.getElementById("entryDescription").value.trim(),r=document.getElementById("entryResult");if(!a||!t)return void(r.innerHTML='Fecha y descripcion son obligatorios.');const o=[];if(document.querySelectorAll("#entryLines .entry-line").forEach((a=>{const e=a.querySelector(".entry-account").value.trim(),n=parseFloat(a.querySelector(".entry-debit").value)||0,t=parseFloat(a.querySelector(".entry-credit").value)||0;e&&(n||t)&&o.push({account:e,debit:n,credit:t})})),o.length)try{await e("/entries",{method:"POST",body:JSON.stringify({date:a,type:n,description:t,lines:o})}),r.innerHTML='Poliza creada exitosamente.',setTimeout((()=>v()),1200)}catch(a){r.innerHTML='Error: '+a.message+""}else r.innerHTML='Agregue al menos una partida.'}return document.addEventListener("DOMContentLoaded",(function(){(a()||(window.location.href="/pos/login",0))&&(!function(){const a=document.getElementById("live-clock");if(!a)return;const e=()=>{const e=new Date;a.textContent=e.toLocaleTimeString("es-MX",{hour:"2-digit",minute:"2-digit"})};e(),setInterval(e,1e3)}(),async function(){if(!(document.querySelectorAll(".summary-card").length<4))try{const a=new Date;await e(`/trial-balance?year=${a.getFullYear()}&month=${a.getMonth()+1}`)}catch(a){}}(),o())})),window.switchTab=t,window.exportarContabilidad=u,window.showNewEntryModal=f,window.closeNewEntryModal=v,window.addEntryLine=_,window.submitNewEntry=m,{switchTab:t,loadAging:o,loadAccountsPayable:c,loadBalanceSheet:s,loadIncomeStatement:i,loadCashFlow:l,loadReconciliation:d,loadPeriodClose:p,exportarContabilidad:u,showNewEntryModal:f,closeNewEntryModal:v,addEntryLine:_,submitNewEntry:m}})();