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);$+='
"})),$+="
",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='';H+='| Vendedor | # Ventas | Total | Ticket Prom. |
',I.forEach((function(t){var e=t.name.split(" ").map((function(t){return t[0]})).join("").substring(0,2).toUpperCase();H+=' | '+t.count+' | $'+a(t.total)+' | $'+a(t.count>0?t.total/t.count:0)+" |
"})),H+="
",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='';P+='',B.forEach((function(t,e){var n=T>0?Math.round(t[1]/T*100):0,r=A[t[0]]||t[0];P+='
"})),P+="
",m.innerHTML=B.length?P:r("Sin datos de metodos");var V='";V+='| # | Fecha | Vendedor | Cliente | Pago | Subtotal | Desc. | IVA | Total | Estado |
',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+='| '+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+" |
"})),V+="
",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='";y+='| Producto | No. Parte | Marca | Stock | Costo Unit. | Valor |
',u.forEach((function(t){y+='| '+t.name+' | '+(t.part_number||"--")+" | "+(t.brand||"--")+' | '+e(t.stock)+' | $'+a(t.cost)+' | $'+a(t.value)+" |
"})),y+="
",n.innerHTML=y;var b=(v.data||[]).slice(0,30),f='";f+='| Producto | No. Parte | Marca | Vol. Ventas | % Acum. | Clase |
',b.forEach((function(t){var a="A"===t.classification?"pill--success":"B"===t.classification?"pill--warning":"pill--muted";f+='| '+t.name+' | '+(t.part_number||"--")+" | "+(t.brand||"--")+' | '+e(t.sales_volume)+' | '+t.cumulative_pct+'% | '+t.classification+" |
"})),f+="
",l.innerHTML=f;var _=m.data||[],T='";T+='| Producto | No. Parte | Marca | Stock | Minimo | Deficit |
',_.slice(0,30).forEach((function(t){var a=t.stock<=0||t.stock'+t.name+' | '+(t.part_number||"--")+" | "+(t.brand||"--")+' | '+e(t.stock)+' | '+e(t.min_stock)+' | '+e(t.deficit)+" | "})),T+="
",s.innerHTML=_.length?T:r("No hay productos con stock bajo");var M=p.data||[],x='";x+='| Producto | No. Parte | Marca | Stock | Costo Unit. | Ultimo Movimiento |
',M.slice(0,30).forEach((function(t){x+='| '+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)+" |
"})),x+="
",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='";h+='| Cliente | RFC | Corriente | 1-30 dias | 31-60 dias | 61-90 dias | 90+ dias | Total |
',s.forEach((function(t){h+='| '+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)+" |
"})),h+='| TOTAL | $'+a(i.corriente)+' | $'+a(i.d1_30)+' | $'+a(i.d31_60)+' | $'+a(i.d61_90)+' | $'+a(i.d90_plus)+' | $'+a(i.total)+" |
",h+="
",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 _='";_+='| Cuenta | Codigo | Monto |
',_+='| INGRESOS | |
',(u.ingresos.items||[]).forEach((function(t){_+='| '+t.name+' | '+t.code+' | $'+a(t.amount)+" |
"})),_+='| Total Ingresos | | $'+a(u.ingresos.total)+" |
",_+='| COSTOS | |
',(u.costos.items||[]).forEach((function(t){_+='| '+t.name+' | '+t.code+' | $'+a(t.amount)+" |
"})),_+='| Total Costos | | $'+a(u.costos.total)+" |
",_+='| UTILIDAD BRUTA | | $'+a(u.utilidad_bruta)+" |
",_+='| GASTOS | |
',(u.gastos.items||[]).forEach((function(t){_+='| '+t.name+' | '+t.code+' | $'+a(t.amount)+" |
"})),_+='| Total Gastos | | $'+a(u.gastos.total)+" |
";var T=u.utilidad_neta>=0?"var(--color-success)":"var(--color-error)";_+='| UTILIDAD NETA | | $'+a(u.utilidad_neta)+" |
",_+="
",h.innerHTML=_;var M='";M+='| Cuenta | Codigo | Saldo |
',M+='| ACTIVO | |
',(y.activo.items||[]).forEach((function(t){M+='| '+t.name+' | '+t.code+' | $'+a(t.balance)+" |
"})),M+='| Total Activo | | $'+a(y.activo.total)+" |
",M+='| PASIVO | |
',(y.pasivo.items||[]).forEach((function(t){M+='| '+t.name+' | '+t.code+' | $'+a(t.balance)+" |
"})),M+='| Total Pasivo | | $'+a(y.pasivo.total)+" |
",M+='| CAPITAL | |
',(y.capital.items||[]).forEach((function(t){M+='| '+t.name+' | '+t.code+' | $'+a(t.balance)+" |
"})),M+='| Total Capital | | $'+a(y.capital.total)+" |
",M+='| Pasivo + Capital | | $'+a(y.pasivo.total+y.capital.total)+" |
",M+="
",v.innerHTML=M;var x=b.data||[],L='";L+='| Codigo | Cuenta | Tipo | Saldo Inicial | Cargos | Abonos | Saldo Final |
',x.forEach((function(t){L+='| '+t.code+' | '+t.name+' | '+t.type+' | $'+a(t.saldo_inicial)+' | $'+a(t.cargos)+' | $'+a(t.abonos)+' | $'+a(t.saldo_final)+" |
"})),L+="
",m.innerHTML=x.length?L:r("Sin movimientos contables en este periodo");var E=f.data||[],C='";C+='| Caja | Empleado | Apertura | Cierre | Monto Apertura | Esperado | Cierre Real | Diferencia |
',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+='| #'+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)+" |
"})),C+="
",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