const Reports=(()=>{function t(){return localStorage.getItem("pos_token")||""}function a(t){return parseFloat(t||0).toLocaleString("es-MX",{minimumFractionDigits:2,maximumFractionDigits:2})}function e(t){return parseInt(t||0).toLocaleString("es-MX")}function n(t){if(!t)return"--";var a=new Date(t);return isNaN(a)?t:a.toLocaleDateString("es-MX",{day:"2-digit",month:"short",year:"numeric"})+" "+a.toLocaleTimeString("es-MX",{hour:"2-digit",minute:"2-digit"})}function r(t){return'
'+t+"
"}function o(t){return'
'+t+"
"}var d={ventas:!1,inventario:!1,clientes:!1,financieros:!1};function l(t){document.documentElement.setAttribute("data-theme",t);try{localStorage.setItem("nexus-theme",t)}catch(t){}var a=document.getElementById("btn-industrial"),e=document.getElementById("btn-modern");a&&a.classList.toggle("is-active","industrial"===t),e&&e.classList.toggle("is-active","modern"===t)}function s(t,a){document.querySelectorAll(".tab-panel").forEach((function(t){t.classList.remove("is-active")})),document.querySelectorAll(".tab-btn").forEach((function(t){t.classList.remove("is-active")}));var e=document.getElementById("panel-"+t);e&&e.classList.add("is-active"),a&&a.classList.add("is-active"),d[t]||("ventas"===t?h():"inventario"===t?v():"clientes"===t?m():"financieros"===t&&p())}function i(){var t=document.getElementById("live-clock");if(t){var a=new Date,e=function(t){return String(t).padStart(2,"0")};t.textContent=e(a.getHours())+":"+e(a.getMinutes())+":"+e(a.getSeconds())}}async function c(a){var e=await fetch(a,{headers:{Authorization:`Bearer ${t()}`,"Content-Type":"application/json"}});if(!e.ok)throw new Error("HTTP "+e.status);return e.json()}function g(t,a,e){return'
'+t+'
'+a+"
"+(e?'
'+e+"
":"")+"
"}async function h(){d.ventas=!0;var t=document.getElementById("ventas-date-from").value,l=document.getElementById("ventas-date-to").value,s=new URLSearchParams;t&&s.set("date_from",t),l&&s.set("date_to",l),s.set("per_page","200");var i=document.getElementById("ventas-kpis"),h=document.getElementById("ventas-bar-chart"),v=document.getElementById("ventas-por-vendedor"),m=document.getElementById("ventas-por-metodo"),p=document.getElementById("ventas-detalle");i.innerHTML='
Cargando...
',h.innerHTML="",v.innerHTML='
Cargando...
',m.innerHTML='
Cargando...
',p.innerHTML='
Cargando...
';try{for(var u=[],y=1,b=1;y<=b;){s.set("page",y);var f=await c("/pos/api/sales?"+s.toString());if(u=u.concat(f.data||[]),b=f.pagination?f.pagination.total_pages:1,++y>50)break}var _=u.filter((function(t){return"completed"===t.status})),T=_.reduce((function(t,a){return t+a.total}),0),M=_.length,x=M>0?T/M:0;i.innerHTML=g("Total Ventas","$"+a(T),M+" transacciones")+g("Ticket Promedio","$"+a(x),"")+g("Transacciones",e(M),"")+g("Descuentos","$"+a(_.reduce((function(t,a){return t+a.discount_total}),0)),"");var L={},E=["Dom","Lun","Mar","Mie","Jue","Vie","Sab"];_.forEach((function(t){var a=t.created_at.substring(0,10);L[a]=(L[a]||0)+t.total}));var C=Object.keys(L).sort().slice(-7),w=Math.max.apply(null,C.map((function(t){return L[t]})))||1;if(C.length>0){var $='
Ventas por Dia
';C.forEach((function(t){var e=L[t],n=Math.round(e/w*100),r=E[new Date(t+"T12:00:00").getDay()],o=e>=1e3?"$"+(e/1e3).toFixed(1)+"k":"$"+a(e);$+='
'+o+'
'+r+"
"})),$+="
",h.innerHTML=$}var S={};_.forEach((function(t){var a=t.employee_id||0;S[a]||(S[a]={name:t.employee_name||"Sin asignar",count:0,total:0}),S[a].count++,S[a].total+=t.total}));var I=Object.values(S).sort((function(t,a){return a.total-t.total})),H='
Ventas por Vendedor
';H+='
',I.forEach((function(t){var e=t.name.split(" ").map((function(t){return t[0]})).join("").substring(0,2).toUpperCase();H+='"})),H+="
Vendedor# VentasTotalTicket Prom.
'+e+'
'+t.name+'
'+t.count+'$'+a(t.total)+'$'+a(t.count>0?t.total/t.count:0)+"
",v.innerHTML=I.length?H:r("Sin datos de vendedores");var k={};_.forEach((function(t){var a=t.payment_method||"Otro";k[a]=(k[a]||0)+t.total}));var B=Object.entries(k).sort((function(t,a){return a[1]-t[1]})),A=(B.length>0&&B[0][1],{cash:"Efectivo",card:"Tarjeta",transfer:"Transferencia",credit:"Credito",mixed:"Mixto"}),D=["","pay-method__bar--b","pay-method__bar--c","pay-method__bar--d"],P='
Ventas por Metodo de Pago
';P+='
',B.forEach((function(t,e){var n=T>0?Math.round(t[1]/T*100):0,r=A[t[0]]||t[0];P+='
'+r+'
$'+a(t[1])+' '+n+"%
"})),P+="
",m.innerHTML=B.length?P:r("Sin datos de metodos");var V='
Detalle de Ventas'+u.length+" registros
";V+='
',u.slice(0,100).forEach((function(t){var e="completed"===t.status?"pill--success":"cancelled"===t.status?"pill--error":"pill--warning",r="completed"===t.status?"Completada":"cancelled"===t.status?"Cancelada":t.status;V+='"})),V+="
#FechaVendedorClientePagoSubtotalDesc.IVATotalEstado
'+t.id+""+n(t.created_at)+""+(t.employee_name||"--")+""+(t.customer_name||"Mostrador")+""+(A[t.payment_method]||t.payment_method||"--")+'$'+a(t.subtotal)+'$'+a(t.discount_total)+'$'+a(t.tax_total)+'$'+a(t.total)+''+r+"
",p.innerHTML=V}catch(t){i.innerHTML=o("Error cargando ventas: "+t.message),v.innerHTML="",m.innerHTML="",p.innerHTML=""}}async function v(){d.inventario=!0;var t=document.getElementById("inventario-kpis"),n=document.getElementById("inventario-valorizacion"),l=document.getElementById("inventario-abc"),s=document.getElementById("inventario-low-stock"),i=document.getElementById("inventario-no-movement");t.innerHTML='
Cargando...
',n.innerHTML='
Cargando...
',l.innerHTML='
Cargando...
',s.innerHTML='
Cargando...
',i.innerHTML='
Cargando...
';try{var[h,v,m,p]=await Promise.all([c("/pos/api/inventory/reports/valuation"),c("/pos/api/inventory/reports/abc"),c("/pos/api/inventory/reports/low-stock"),c("/pos/api/inventory/reports/no-movement")]);t.innerHTML=g("Valor Total Inventario","$"+a(h.grand_total),e(h.item_count)+" SKUs activos")+g("Clasificacion A",e(v.summary.A)+" SKUs","80% del volumen de ventas")+g("Stock Bajo",e(m.count)+" productos","debajo del minimo")+g("Sin Movimiento",e(p.count)+" productos",">"+p.days_threshold+" dias");var u=(h.data||[]).slice(0,20),y='
Inventario ValorizadoTop 20 de '+e(h.item_count)+"
";y+='
',u.forEach((function(t){y+='"})),y+="
ProductoNo. ParteMarcaStockCosto Unit.Valor
'+t.name+''+(t.part_number||"--")+""+(t.brand||"--")+''+e(t.stock)+'$'+a(t.cost)+'$'+a(t.value)+"
",n.innerHTML=y;var b=(v.data||[]).slice(0,30),f='
Clasificacion ABC de InventarioA: '+v.summary.A+' B: '+v.summary.B+' C: '+v.summary.C+"
";f+='
',b.forEach((function(t){var a="A"===t.classification?"pill--success":"B"===t.classification?"pill--warning":"pill--muted";f+='"})),f+="
ProductoNo. ParteMarcaVol. Ventas% Acum.Clase
'+t.name+''+(t.part_number||"--")+""+(t.brand||"--")+''+e(t.sales_volume)+''+t.cumulative_pct+'%'+t.classification+"
",l.innerHTML=f;var _=m.data||[],T='
Productos con Stock Bajo'+m.count+" productos
";T+='
',_.slice(0,30).forEach((function(t){var a=t.stock<=0||t.stock"})),T+="
ProductoNo. ParteMarcaStockMinimoDeficit
'+(t.part_number||"--")+""+(t.brand||"--")+''+e(t.stock)+''+e(t.min_stock)+''+e(t.deficit)+"
",s.innerHTML=_.length?T:r("No hay productos con stock bajo");var M=p.data||[],x='
Productos Sin Movimiento (>'+p.days_threshold+' dias)'+p.count+" SKUs
";x+='
',M.slice(0,30).forEach((function(t){x+='"})),x+="
ProductoNo. ParteMarcaStockCosto Unit.Ultimo Movimiento
'+t.name+''+(t.part_number||"--")+""+(t.brand||"--")+''+e(t.stock)+'$'+a(t.cost)+''+function(t){if(!t)return"--";var a=new Date(t);return isNaN(a)?t:a.toLocaleDateString("es-MX",{day:"2-digit",month:"short",year:"numeric"})}(t.last_movement)+"
",i.innerHTML=M.length?x:r("No hay productos sin movimiento")}catch(a){t.innerHTML=o("Error cargando inventario: "+a.message),n.innerHTML="",l.innerHTML="",s.innerHTML="",i.innerHTML=""}}async function m(){d.clientes=!0;var t=document.getElementById("clientes-kpis"),n=document.getElementById("clientes-aging");t.innerHTML='
Cargando...
',n.innerHTML='
Cargando...
';try{var l=await c("/pos/api/accounting/aging"),s=l.data||[],i=l.totals||{};t.innerHTML=g("Clientes con Credito",e(s.length),"con saldo pendiente")+g("Saldo Total","$"+a(i.total),"")+g("Corriente","$"+a(i.corriente),"no vencido")+g("Vencido >90 dias","$"+a(i.d90_plus),i.d90_plus>0?'requiere atencion':"");var h='
Antiguedad de Saldos'+s.length+" clientes
";h+='
',s.forEach((function(t){h+='"})),h+='",h+="
ClienteRFCCorriente1-30 dias31-60 dias61-90 dias90+ diasTotal
'+t.name+''+(t.rfc||"--")+'$'+a(t.corriente)+'$'+a(t.d1_30)+'0?' style="color:var(--color-warning)"':"")+">$"+a(t.d31_60)+'0?' style="color:var(--color-error)"':"")+">$"+a(t.d61_90)+'0?' style="color:var(--color-error);font-weight:700"':"")+">$"+a(t.d90_plus)+'$'+a(t.total)+"
TOTAL$'+a(i.corriente)+'$'+a(i.d1_30)+'$'+a(i.d31_60)+'$'+a(i.d61_90)+'$'+a(i.d90_plus)+'$'+a(i.total)+"
",n.innerHTML=s.length?h:r("No hay saldos pendientes de credito")}catch(a){t.innerHTML=o("Error cargando datos de clientes: "+a.message),n.innerHTML=""}}async function p(){d.financieros=!0;var t=document.getElementById("fin-month"),e=document.getElementById("fin-year"),l=parseInt(e.value),s=parseInt(t.value),i=document.getElementById("financieros-kpis"),h=document.getElementById("financieros-income"),v=document.getElementById("financieros-balance"),m=document.getElementById("financieros-trial"),p=document.getElementById("financieros-cortes");i.innerHTML='
Cargando...
',h.innerHTML='
Cargando...
',v.innerHTML='
Cargando...
',m.innerHTML='
Cargando...
',p.innerHTML='
Cargando...
';try{var[u,y,b,f]=await Promise.all([c("/pos/api/accounting/income-statement?year="+l+"&month="+s),c("/pos/api/accounting/balance-sheet"),c("/pos/api/accounting/trial-balance?year="+l+"&month="+s),c("/pos/api/register/history?per_page=50")]);i.innerHTML=g("Ingresos","$"+a(u.ingresos.total),"periodo "+s+"/"+l)+g("Costos","$"+a(u.costos.total),"")+g("Utilidad Bruta","$"+a(u.utilidad_bruta),"")+g("Utilidad Neta","$"+a(u.utilidad_neta),u.ingresos.total>0?"Margen: "+(u.utilidad_neta/u.ingresos.total*100).toFixed(1)+"%":"");var _='
Estado de Resultados'+s+"/"+l+"
";_+='
',_+='',(u.ingresos.items||[]).forEach((function(t){_+='"})),_+='",_+='',(u.costos.items||[]).forEach((function(t){_+='"})),_+='",_+='",_+='',(u.gastos.items||[]).forEach((function(t){_+='"})),_+='";var T=u.utilidad_neta>=0?"var(--color-success)":"var(--color-error)";_+='",_+="
CuentaCodigoMonto
INGRESOS
'+t.name+''+t.code+'$'+a(t.amount)+"
Total Ingresos$'+a(u.ingresos.total)+"
COSTOS
'+t.name+''+t.code+'$'+a(t.amount)+"
Total Costos$'+a(u.costos.total)+"
UTILIDAD BRUTA$'+a(u.utilidad_bruta)+"
GASTOS
'+t.name+''+t.code+'$'+a(t.amount)+"
Total Gastos$'+a(u.gastos.total)+"
UTILIDAD NETA$'+a(u.utilidad_neta)+"
",h.innerHTML=_;var M='
Balance General'+(y.balanced?"Cuadrado":"Descuadrado")+"
";M+='
',M+='',(y.activo.items||[]).forEach((function(t){M+='"})),M+='",M+='',(y.pasivo.items||[]).forEach((function(t){M+='"})),M+='",M+='',(y.capital.items||[]).forEach((function(t){M+='"})),M+='",M+='",M+="
CuentaCodigoSaldo
ACTIVO
'+t.name+''+t.code+'$'+a(t.balance)+"
Total Activo$'+a(y.activo.total)+"
PASIVO
'+t.name+''+t.code+'$'+a(t.balance)+"
Total Pasivo$'+a(y.pasivo.total)+"
CAPITAL
'+t.name+''+t.code+'$'+a(t.balance)+"
Total Capital$'+a(y.capital.total)+"
Pasivo + Capital$'+a(y.pasivo.total+y.capital.total)+"
",v.innerHTML=M;var x=b.data||[],L='
Balanza de Comprobacion'+s+"/"+l+"
";L+='
',x.forEach((function(t){L+='"})),L+="
CodigoCuentaTipoSaldo InicialCargosAbonosSaldo Final
'+t.code+''+t.name+''+t.type+'$'+a(t.saldo_inicial)+'$'+a(t.cargos)+'$'+a(t.abonos)+'$'+a(t.saldo_final)+"
",m.innerHTML=x.length?L:r("Sin movimientos contables en este periodo");var E=f.data||[],C='
Cortes de Caja'+(f.pagination?f.pagination.total:E.length)+" cortes
";C+='
',E.forEach((function(t){var e=t.difference<0?"color:var(--color-error)":t.difference>0?"color:var(--color-warning)":"color:var(--color-success)";C+='"})),C+="
CajaEmpleadoAperturaCierreMonto AperturaEsperadoCierre RealDiferencia
#'+t.register_number+''+(t.employee_name||"--")+''+n(t.opened_at)+''+n(t.closed_at)+'$'+a(t.opening_amount)+'$'+a(t.expected_amount)+'$'+a(t.closing_amount)+'$'+a(t.difference)+"
",p.innerHTML=E.length?C:r("No hay cortes de caja registrados")}catch(t){i.innerHTML=o("Error cargando reportes financieros: "+t.message),h.innerHTML="",v.innerHTML="",m.innerHTML="",p.innerHTML=""}}function u(){if(t()||(window.location.href="/pos/login",0)){try{l(localStorage.getItem("nexus-theme")||"industrial")}catch(t){}i(),setInterval(i,1e3);var a=new Date,e=new Date(a.getFullYear(),a.getMonth(),1),n=document.getElementById("ventas-date-from"),r=document.getElementById("ventas-date-to");n&&(n.value=e.toISOString().substring(0,10)),r&&(r.value=a.toISOString().substring(0,10));var o=document.getElementById("fin-month"),d=document.getElementById("fin-year");if(o)for(var s=["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],c=0;c<12;c++){(v=document.createElement("option")).value=c+1,v.textContent=s[c],c===a.getMonth()&&(v.selected=!0),o.appendChild(v)}if(d)for(var g=a.getFullYear();g>=a.getFullYear()-3;g--){var v;(v=document.createElement("option")).value=g,v.textContent=g,d.appendChild(v)}h()}}return window.setTheme=l,window.switchTab=s,document.addEventListener("DOMContentLoaded",u),{init:u,setTheme:l,switchTab:s,loadVentas:h,loadInventario:v,loadClientes:m,loadFinancieros:p,fmt:a}})();function exportReportCSV(){for(var t=document.querySelectorAll("table"),a=null,e=0;e