{"id":6,"date":"2025-12-09T18:32:26","date_gmt":"2025-12-09T18:32:26","guid":{"rendered":"https:\/\/utiles.fagales360.com\/?page_id=6"},"modified":"2026-02-21T05:44:33","modified_gmt":"2026-02-21T05:44:33","slug":"contabilidad-fm","status":"publish","type":"page","link":"https:\/\/utiles.fagales360.com\/","title":{"rendered":"Contabilidad FM"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"es\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n    <title>FagalesMarket v9.9 Freedom<\/title>\n    <script src=\"https:\/\/cdn.tailwindcss.com\"><\/script>\n    <script src=\"https:\/\/unpkg.com\/@phosphor-icons\/web\"><\/script>\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/Chart.js\/3.9.1\/chart.min.js\"><\/script>\n    <style>\n        @import url('https:\/\/fonts.googleapis.com\/css2?family=JetBrains+Mono:wght@400;700&family=Inter:wght@400;500;600;700;800&display=swap');\n        \n        body { font-family: 'Inter', sans-serif; background-color: #f1f5f9; color: #0f172a; }\n        .mono { font-family: 'JetBrains Mono', monospace; }\n        \n        \/* Animaciones *\/\n        @keyframes fadeIn { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: translateY(0); } }\n        .animate-fade { animation: fadeIn 0.3s ease-out forwards; }\n        .tab-content { display: none; }\n        .tab-content.active { display: block; }\n        \n        \/* Scrollbar *\/\n        ::-webkit-scrollbar { width: 6px; height: 6px; }\n        ::-webkit-scrollbar-track { background: #f1f5f9; }\n        ::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 3px; }\n\n        \/* Estilos UI *\/\n        .card { background: white; border: 1px solid #e2e8f0; box-shadow: 0 2px 4px rgba(0,0,0,0.02); border-radius: 12px; }\n        .input-std { width: 100%; border: 1px solid #cbd5e1; padding: 0.5rem; border-radius: 0.5rem; font-size: 0.9rem; transition: 0.2s; }\n        .input-std:focus { outline: none; border-color: #2563eb; ring: 2px solid rgba(37,99,235,0.1); }\n        \n        .nav-btn { display: flex; flex-direction: column; align-items: center; padding: 0.5rem; border-radius: 0.5rem; color: #64748b; font-size: 0.7rem; font-weight: 700; text-transform: uppercase; transition: all 0.2s; }\n        .nav-btn:hover { background-color: #e2e8f0; color: #334155; }\n        .nav-btn.active { background-color: #0f172a; color: white; transform: translateY(-1px); box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1); }\n        .nav-btn i { font-size: 1.4rem; margin-bottom: 2px; }\n\n        .kpi-value { font-family: 'JetBrains Mono', monospace; font-weight: 700; }\n        \n        \/* Ajuste inputs m\u00f3viles *\/\n        input, select, textarea { font-size: 16px !important; }\n\n        .dash-stat { @apply bg-slate-50 p-3 rounded-lg border border-slate-200; }\n    <\/style>\n<\/head>\n<body class=\"bg-slate-100 min-h-screen pb-24 md:pb-0 overflow-y-auto\">\n\n    <header class=\"bg-white border-b border-slate-200 sticky top-0 z-30 shadow-sm\">\n        <div class=\"max-w-7xl mx-auto px-4 py-3 flex justify-between items-center\">\n            <div class=\"flex items-center gap-3\">\n                <div class=\"bg-indigo-600 text-white p-2 rounded-lg shadow-lg shadow-indigo-200\">\n                    <i class=\"ph-bold ph-storefront text-xl\"><\/i>\n                <\/div>\n                <div>\n                    <h1 class=\"font-bold text-lg text-slate-900 tracking-tight\">Fagales<span class=\"text-indigo-600\">Market<\/span> <span class=\"text-[10px] bg-slate-800 text-white px-2 py-0.5 rounded-full align-middle\">v9.9 Freedom<\/span><\/h1>\n                <\/div>\n            <\/div>\n            <div class=\"text-xs font-bold text-slate-400 bg-slate-100 px-2 py-1 rounded\" id=\"header-date-display\">&#8230;<\/div>\n        <\/div>\n    <\/header>\n\n    <main class=\"max-w-7xl mx-auto p-4 md:p-6 mb-20\">\n\n        <div id=\"tab-dashboard\" class=\"tab-content active animate-fade\">\n            \n            <div class=\"card p-5 mb-6 border-l-4 border-indigo-600\">\n                <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n                    <div>\n                        <label class=\"text-[10px] font-bold text-slate-400 uppercase block mb-1\">\ud83d\udcc5 Fecha de Trabajo<\/label>\n                        <input type=\"date\" id=\"work-date\" class=\"w-full text-lg font-bold text-slate-700 bg-slate-50 border border-slate-300 rounded p-2 focus:outline-none focus:border-indigo-500 shadow-sm\">\n                    <\/div>\n                    <div>\n                        <label class=\"text-[10px] font-bold text-slate-400 uppercase block mb-1\">\ud83d\udcb1 Tasa de Cambio General (1 USD = ? CUP)<\/label>\n                        <div class=\"flex gap-2\">\n                            <input type=\"number\" id=\"daily-rate\" class=\"w-full text-lg font-bold text-indigo-700 bg-slate-50 border border-slate-300 rounded p-2 focus:outline-none focus:border-indigo-500 shadow-sm text-right\" placeholder=\"320\">\n                            <button onclick=\"saveRate()\" class=\"bg-indigo-600 text-white px-4 rounded font-bold shadow hover:bg-indigo-700\"><i class=\"ph-bold ph-check\"><\/i><\/button>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <div class=\"mb-6\">\n                <div class=\"flex justify-between items-end mb-3\">\n                    <h2 class=\"font-bold text-lg text-slate-800 flex items-center gap-2\">\n                        <i class=\"ph-duotone ph-wallet text-indigo-600\"><\/i> Auditor\u00eda (Cierre &#8211; Ganancia)\n                    <\/h2>\n                    <span class=\"text-[10px] bg-yellow-100 text-yellow-700 px-2 py-1 rounded border border-yellow-200 font-bold\">\n                        \u26a0\ufe0f Ingresa el Saldo FINAL real\n                    <\/span>\n                <\/div>\n\n                <div id=\"dashboard-accounts\" class=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n                    <\/div>\n            <\/div>\n\n            <div class=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n                <div class=\"dash-stat bg-white shadow-sm\">\n                    <p class=\"text-[10px] uppercase font-bold text-slate-400\">Ventas Hoy ($)<\/p>\n                    <p id=\"dash-sales-usd\" class=\"text-xl font-mono font-bold text-emerald-600\">$0.00<\/p>\n                <\/div>\n                <div class=\"dash-stat bg-white shadow-sm\">\n                    <p class=\"text-[10px] uppercase font-bold text-slate-400\">Gastos Hoy<\/p>\n                    <p id=\"dash-expenses\" class=\"text-xl font-mono font-bold text-red-500\">$0.00<\/p>\n                <\/div>\n                <div class=\"dash-stat bg-white shadow-sm\">\n                    <p class=\"text-[10px] uppercase font-bold text-slate-400\">Utilidad Est.<\/p>\n                    <p id=\"dash-profit\" class=\"text-xl font-mono font-bold text-indigo-600\">$0.00<\/p>\n                <\/div>\n                 <div class=\"dash-stat bg-white shadow-sm\">\n                    <p class=\"text-[10px] uppercase font-bold text-slate-400\">Movimientos<\/p>\n                    <p id=\"dash-mov-count\" class=\"text-xl font-mono font-bold text-slate-600\">0<\/p>\n                <\/div>\n            <\/div>\n\n        <\/div>\n\n        <div id=\"tab-sales\" class=\"tab-content animate-fade\">\n            <div class=\"grid grid-cols-1 lg:grid-cols-12 gap-6\">\n                <div class=\"lg:col-span-8\">\n                    <div class=\"card p-5 border-l-4 border-emerald-500 mb-6 relative\">\n                        <div class=\"flex justify-between items-center mb-4\">\n                            <h2 class=\"font-bold text-slate-800 flex items-center gap-2\"><i class=\"ph-duotone ph-shopping-cart text-emerald-600 text-xl\"><\/i> Nueva Venta<\/h2>\n                            <button onclick=\"resetSaleForm()\" class=\"text-[10px] font-bold bg-slate-100 text-slate-500 px-2 py-1 rounded hover:bg-red-50 hover:text-red-500 transition\">LIMPIAR<\/button>\n                        <\/div>\n\n                        <div class=\"grid grid-cols-1 md:grid-cols-3 gap-4 mb-4\">\n                            <div>\n                                <label class=\"text-[10px] font-bold text-slate-400 uppercase\">Cliente<\/label>\n                                <div class=\"flex gap-2\">\n                                    <input list=\"clients-datalist\" id=\"sale-client\" class=\"input-std font-bold\" placeholder=\"Buscar o escribir nuevo...\">\n                                    <datalist id=\"clients-datalist\"><\/datalist>\n                                <\/div>\n                            <\/div>\n                            <div>\n                                <label class=\"text-[10px] font-bold text-slate-400 uppercase\">Cuenta de Ingreso<\/label>\n                                <select id=\"sale-account\" class=\"input-std font-bold bg-yellow-50 border-yellow-200 text-yellow-900\"><\/select>\n                            <\/div>\n                            <div>\n                                <label class=\"text-[10px] font-bold text-slate-400 uppercase\">Tasa de esta Venta (CUP)<\/label>\n                                <input type=\"number\" id=\"sale-rate\" class=\"input-std font-bold border-indigo-200 bg-indigo-50 text-indigo-800\" placeholder=\"Tasa\">\n                            <\/div>\n                        <\/div>\n\n                        <div class=\"bg-slate-50 border border-slate-200 rounded-lg p-3 mb-4\">\n                            <div class=\"flex justify-between mb-2\">\n                                <label class=\"text-[10px] font-bold text-slate-500 uppercase\">Productos<\/label>\n                                <span class=\"text-[10px] italic text-indigo-500 font-bold bg-indigo-50 px-2 rounded\">Tus cambios manuales mandan<\/span>\n                            <\/div>\n                            \n                            <div class=\"grid grid-cols-12 gap-2 text-[9px] uppercase font-bold text-slate-400 mb-1 px-1\">\n                                <div class=\"col-span-12 md:col-span-4\">Nombre Producto<\/div>\n                                <div class=\"col-span-3 md:col-span-2 text-center\">Cant<\/div>\n                                <div class=\"col-span-4 md:col-span-2 text-right\">Precio ($)<\/div>\n                                <div class=\"col-span-4 md:col-span-2 text-right\">Costo (CUP)<\/div>\n                                <div class=\"col-span-1 md:col-span-2 text-center\">Acci\u00f3n<\/div>\n                            <\/div>\n\n                            <div id=\"sale-rows-container\" class=\"space-y-3\"><\/div>\n                            \n                            <button onclick=\"addSaleRow()\" class=\"mt-4 w-full py-3 border border-dashed border-indigo-300 text-indigo-600 font-bold rounded hover:bg-indigo-50 text-xs flex justify-center items-center gap-2\">\n                                <i class=\"ph-bold ph-plus\"><\/i> AGREGAR PRODUCTO\n                            <\/button>\n                        <\/div>\n\n                        <div class=\"flex flex-col md:flex-row items-end gap-4\">\n                            <div class=\"flex gap-2 w-full md:w-auto\">\n                                <div class=\"w-1\/2 md:w-auto\">\n                                    <label class=\"text-[10px] font-bold text-slate-400 uppercase\">Descuento<\/label>\n                                    <input type=\"number\" id=\"sale-discount\" class=\"input-std text-right text-red-500 font-bold\" placeholder=\"0\">\n                                <\/div>\n                                <div class=\"w-1\/2 md:w-auto\">\n                                    <label class=\"text-[10px] font-bold text-slate-400 uppercase\">Propina<\/label>\n                                    <input type=\"number\" id=\"sale-tip\" class=\"input-std text-right text-green-500 font-bold\" placeholder=\"0\">\n                                <\/div>\n                            <\/div>\n                            <div class=\"flex-grow text-right w-full md:w-auto\">\n                                <p class=\"text-[10px] font-bold text-slate-400 uppercase\">Total a Pagar<\/p>\n                                <p id=\"sale-total-display\" class=\"text-3xl font-mono font-bold text-indigo-700\">$0.00<\/p>\n                            <\/div>\n                            <button onclick=\"processSale()\" class=\"w-full md:w-40 bg-emerald-600 text-white py-3 rounded-lg font-bold shadow-lg shadow-emerald-200 hover:bg-emerald-700 transition\">\n                                COBRAR\n                            <\/button>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"card p-5\">\n                        <h3 class=\"font-bold text-slate-700 text-sm mb-3 uppercase\">Ventas de esta Fecha (Detallado)<\/h3>\n                        <div class=\"overflow-x-auto\">\n                            <table class=\"w-full text-sm text-left\">\n                                <thead class=\"text-[10px] uppercase text-slate-400 bg-slate-50 border-b\">\n                                    <tr>\n                                        <th class=\"px-3 py-2\">Cliente \/ Detalle<\/th>\n                                        <th class=\"px-3 py-2 text-right\">Total<\/th>\n                                        <th class=\"px-3 py-2 text-center\">Acci\u00f3n<\/th>\n                                    <\/tr>\n                                <\/thead>\n                                <tbody id=\"daily-sales-body\" class=\"divide-y divide-slate-100 text-slate-600 font-medium\"><\/tbody>\n                            <\/table>\n                        <\/div>\n                    <\/div>\n                <\/div>\n\n                <div class=\"lg:col-span-4 space-y-4\">\n                    <div class=\"card p-5\">\n                        <label class=\"text-[10px] font-bold text-slate-400 uppercase mb-2 block\">Notas del D\u00eda<\/label>\n                        <textarea id=\"daily-notes\" class=\"input-std h-32 text-xs resize-none\" placeholder=\"Anotaciones importantes de hoy...\"><\/textarea>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <div id=\"tab-movements\" class=\"tab-content animate-fade\">\n            <div class=\"grid grid-cols-1 md:grid-cols-12 gap-6\">\n                <div class=\"md:col-span-5\">\n                    <div class=\"card p-6 border-t-4 border-orange-500 sticky top-4\">\n                        <h2 class=\"font-bold text-lg text-slate-800 mb-4 flex items-center gap-2\">\n                            <i class=\"ph-duotone ph-arrows-left-right text-orange-600\"><\/i> Registrar Movimiento\n                        <\/h2>\n                        \n                        <div class=\"space-y-4\">\n                            <div class=\"flex bg-slate-100 p-1 rounded-lg\">\n                                <button onclick=\"setMovType('IN')\" id=\"btn-in\" class=\"flex-1 py-2 rounded font-bold text-xs transition\">INGRESO (+)<\/button>\n                                <button onclick=\"setMovType('OUT')\" id=\"btn-out\" class=\"flex-1 py-2 rounded font-bold text-xs bg-white text-red-600 shadow transition\">GASTO (-)<\/button>\n                            <\/div>\n                            <input type=\"hidden\" id=\"mov-type\" value=\"OUT\">\n\n                            <div>\n                                <label class=\"text-[10px] font-bold text-slate-500 uppercase\">Categor\u00eda<\/label>\n                                <select id=\"mov-category\" class=\"input-std font-bold\">\n                                    <option value=\"OPERATIVO\">\ud83d\udfe0 Gasto Operativo (Resta Ganancia)<\/option>\n                                    <option value=\"DUENO\">\ud83d\udc64 Retiro Due\u00f1o (No Gasto)<\/option>\n                                    <option value=\"AYUDA\">\ud83e\udd1d Ayuda \/ Donaci\u00f3n (No Gasto)<\/option>\n                                    <option value=\"INFRA\">\ud83c\udfd7\ufe0f Infraestructura (Fondo)<\/option>\n                                    <option value=\"INVENTARIO\">\ud83d\udce6 Compra Inventario (Inversi\u00f3n)<\/option>\n                                    <option value=\"AJUSTE\">\ud83d\udd27 Ajuste Caja<\/option>\n                                <\/select>\n                            <\/div>\n\n                            <div>\n                                <label class=\"text-[10px] font-bold text-slate-500 uppercase\">Descripci\u00f3n<\/label>\n                                <input type=\"text\" id=\"mov-desc\" class=\"input-std\" placeholder=\"Ej: Pago electricidad...\">\n                            <\/div>\n\n                            <div class=\"grid grid-cols-2 gap-3\">\n                                <div>\n                                    <label class=\"text-[10px] font-bold text-slate-500 uppercase\">Monto<\/label>\n                                    <input type=\"number\" id=\"mov-amount\" class=\"input-std font-bold text-lg\" step=\"0.01\">\n                                <\/div>\n                                <div>\n                                    <label class=\"text-[10px] font-bold text-slate-500 uppercase\">Cuenta<\/label>\n                                    <select id=\"mov-account\" class=\"input-std font-bold text-xs\"><\/select>\n                                <\/div>\n                            <\/div>\n\n                            <button onclick=\"saveMovement()\" class=\"w-full bg-orange-600 text-white py-3 rounded-lg font-bold shadow hover:bg-orange-700 transition\">\n                                GUARDAR\n                            <\/button>\n                        <\/div>\n                    <\/div>\n                <\/div>\n\n                <div class=\"md:col-span-7\">\n                    <div class=\"card p-6 h-full\">\n                        <h3 class=\"font-bold text-slate-700 mb-4 border-b pb-2 uppercase text-sm\">Historial Movimientos (Fecha Actual)<\/h3>\n                        <div id=\"movements-list\" class=\"space-y-3 max-h-[600px] overflow-y-auto pr-2\"><\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <div id=\"tab-clients\" class=\"tab-content animate-fade\">\n            <div class=\"card p-6 border-t-4 border-teal-500\">\n                <div class=\"flex justify-between items-center mb-6\">\n                    <h2 class=\"font-bold text-xl text-slate-800 flex items-center gap-2\"><i class=\"ph-duotone ph-users text-teal-600\"><\/i> Directorio Clientes<\/h2>\n                    <button onclick=\"promptNewClient()\" class=\"bg-teal-600 text-white px-4 py-2 rounded-lg font-bold text-xs flex items-center gap-2 hover:bg-teal-700\">\n                        <i class=\"ph-bold ph-plus\"><\/i> Nuevo Cliente\n                    <\/button>\n                <\/div>\n                <div class=\"overflow-x-auto\">\n                    <table class=\"w-full text-sm text-left\">\n                        <thead class=\"bg-teal-50 text-teal-900 uppercase text-xs\">\n                            <tr>\n                                <th class=\"p-3\">Nombre<\/th>\n                                <th class=\"p-3\">Notas \/ Contacto<\/th>\n                                <th class=\"p-3 text-right\">Acciones<\/th>\n                            <\/tr>\n                        <\/thead>\n                        <tbody id=\"clients-body\" class=\"divide-y divide-slate-100\"><\/tbody>\n                    <\/table>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <div id=\"tab-inventory\" class=\"tab-content animate-fade\">\n            <div class=\"card p-6 border-t-4 border-blue-500\">\n                <div class=\"flex flex-col md:flex-row justify-between items-center mb-6 gap-4\">\n                    <h2 class=\"font-bold text-xl text-slate-800 flex items-center gap-2\"><i class=\"ph-duotone ph-package text-blue-600\"><\/i> Inventario<\/h2>\n                    <div class=\"flex gap-2 w-full md:w-auto\">\n                        <input type=\"text\" id=\"inv-search\" onkeyup=\"renderInventory()\" placeholder=\"Buscar...\" class=\"input-std text-xs md:w-64\">\n                        <button onclick=\"editProduct(null)\" class=\"bg-blue-600 text-white px-4 py-2 rounded-lg font-bold text-xs flex items-center gap-2 whitespace-nowrap\">\n                            <i class=\"ph-bold ph-plus\"><\/i> Agregar\n                        <\/button>\n                    <\/div>\n                <\/div>\n\n                <div id=\"prod-editor\" class=\"hidden bg-slate-50 border border-slate-200 p-4 rounded-xl mb-6 shadow-inner\">\n                    <div class=\"grid grid-cols-1 md:grid-cols-6 gap-3 items-end\">\n                        <input type=\"hidden\" id=\"prod-id\">\n                        <div class=\"md:col-span-2\">\n                            <label class=\"text-[10px] font-bold uppercase\">Nombre<\/label>\n                            <input type=\"text\" id=\"prod-name\" class=\"input-std h-8\">\n                        <\/div>\n                        <div>\n                            <label class=\"text-[10px] font-bold uppercase\">Stock<\/label>\n                            <input type=\"number\" id=\"prod-stock\" class=\"input-std h-8 font-bold\">\n                        <\/div>\n                        <div>\n                            <label class=\"text-[10px] font-bold uppercase\">Costo (CUP)<\/label>\n                            <input type=\"number\" id=\"prod-cost\" class=\"input-std h-8\" step=\"0.01\">\n                        <\/div>\n                        <div>\n                            <label class=\"text-[10px] font-bold uppercase\">Precio ($)<\/label>\n                            <input type=\"number\" id=\"prod-price\" class=\"input-std h-8\" step=\"0.01\">\n                        <\/div>\n                        <div class=\"flex gap-1\">\n                            <button onclick=\"saveProduct()\" class=\"bg-green-600 text-white px-3 py-1.5 rounded font-bold text-xs flex-grow\">OK<\/button>\n                            <button onclick=\"document.getElementById('prod-editor').classList.add('hidden')\" class=\"bg-slate-300 px-3 py-1.5 rounded font-bold text-xs\">X<\/button>\n                        <\/div>\n                    <\/div>\n                <\/div>\n\n                <div class=\"overflow-x-auto max-h-[500px] overflow-y-auto\">\n                    <table class=\"w-full text-sm text-left\">\n                        <thead class=\"bg-slate-100 text-slate-600 uppercase text-xs sticky top-0\">\n                            <tr>\n                                <th class=\"p-3\">Producto<\/th>\n                                <th class=\"p-3 text-center\">Stock<\/th>\n                                <th class=\"p-3 text-right\">Costo (CUP)<\/th>\n                                <th class=\"p-3 text-right\">Precio ($)<\/th>\n                                <th class=\"p-3 text-center\">Acciones<\/th>\n                            <\/tr>\n                        <\/thead>\n                        <tbody id=\"inv-body\" class=\"divide-y divide-slate-100\"><\/tbody>\n                    <\/table>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <div id=\"tab-reports\" class=\"tab-content animate-fade\">\n            <div class=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n                <div class=\"lg:col-span-2 space-y-6\">\n                    <div class=\"card p-6 border-l-4 border-indigo-600\">\n                        <h2 class=\"font-bold text-lg text-slate-800 mb-4\">\n                            <i class=\"ph-duotone ph-safe text-indigo-600\"><\/i> Reporte Diario (L\u00f3gica Ganancia)\n                        <\/h2>\n                        <div class=\"text-xs text-slate-500 mb-4 bg-slate-50 p-2 rounded border border-slate-200\">\n                            <strong>Formula:<\/strong> <code>Cierre - (Flujo - COSTO) = Inicio<\/code>. \n                            <br>Si no cuadra, es porque tienes dinero del COSTO mezclado en la caja.\n                        <\/div>\n                        <div id=\"closing-accounts-report\" class=\"space-y-3\"><\/div>\n                    <\/div>\n\n                    <div class=\"card p-6\">\n                        <h3 class=\"font-bold text-slate-700 mb-4\">\ud83d\udcca Utilidad y Reparto<\/h3>\n                        <div class=\"grid grid-cols-2 gap-4 mb-6\">\n                            <div class=\"p-4 bg-emerald-50 rounded-lg border border-emerald-100\">\n                                <p class=\"text-[10px] font-bold text-emerald-800 uppercase\">Ganancia Neta<\/p>\n                                <p id=\"report-net-profit\" class=\"text-2xl kpi-value text-emerald-600\">$0.00<\/p>\n                            <\/div>\n                            <div class=\"p-4 bg-purple-50 rounded-lg border border-purple-100\">\n                                <p class=\"text-[10px] font-bold text-purple-800 uppercase\">Diezmo (10%)<\/p>\n                                <p id=\"report-tithe\" class=\"text-2xl kpi-value text-purple-600\">$0.00<\/p>\n                            <\/div>\n                            <div class=\"p-4 bg-blue-50 rounded-lg border border-blue-100 col-span-2\">\n                                <p class=\"text-[10px] font-bold text-blue-800 uppercase flex items-center gap-2\"><i class=\"ph-bold ph-package\"><\/i> Valor Inventario (Stock Actual)<\/p>\n                                <div class=\"grid grid-cols-2 gap-4 mt-2\">\n                                    <div>\n                                        <span class=\"text-[10px] text-blue-600 uppercase font-bold\">Invertido (Costo CUP)<\/span>\n                                        <p id=\"report-inv-cost\" class=\"text-lg font-mono font-bold text-slate-700\">$0.00<\/p>\n                                    <\/div>\n                                    <div class=\"text-right\">\n                                        <span class=\"text-[10px] text-blue-600 uppercase font-bold\">Recaudaci\u00f3n Est. (CUP)<\/span>\n                                        <p id=\"report-inv-sale\" class=\"text-lg font-mono font-bold text-blue-600\">$0.00<\/p>\n                                    <\/div>\n                                <\/div>\n                                <p id=\"report-inv-profit\" class=\"text-xs text-right font-bold text-emerald-600 mt-2 border-t border-blue-200 pt-1\">Utilidad Potencial: $0.00<\/p>\n                            <\/div>\n                        <\/div>\n                        <div class=\"space-y-2 text-sm border-t border-slate-100 pt-4\">\n                            <div class=\"flex justify-between items-center\"><span class=\"text-slate-600\">\ud83c\udfe2 Fagales (50%)<\/span><span id=\"dist-company\" class=\"font-bold text-slate-800\">$0.00<\/span><\/div>\n                            <div class=\"flex justify-between items-center\"><span class=\"text-slate-600\">\ud83d\udc64 Due\u00f1o (25%)<\/span><span id=\"dist-owner\" class=\"font-bold text-slate-800\">$0.00<\/span><\/div>\n                            <div class=\"flex justify-between items-center\"><span class=\"text-slate-600\">\ud83c\udfd7\ufe0f Infra (25%)<\/span><span id=\"dist-infra\" class=\"font-bold text-slate-800\">$0.00<\/span><\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n\n                <div class=\"lg:col-span-1\">\n                    <div class=\"bg-slate-800 text-white p-3 rounded-t-xl flex justify-between items-center\">\n                        <span class=\"text-xs font-bold uppercase\"><i class=\"ph-bold ph-whatsapp-logo\"><\/i> Texto Reporte<\/span>\n                        <button onclick=\"copyReport()\" class=\"text-xs bg-green-600 hover:bg-green-500 px-2 py-1 rounded font-bold\">COPIAR<\/button>\n                    <\/div>\n                    <div id=\"report-text\" class=\"bg-white border border-slate-200 border-t-0 p-4 font-mono text-[10px] md:text-xs h-[600px] overflow-y-auto whitespace-pre-wrap leading-relaxed shadow-lg\"><\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <div id=\"tab-stats\" class=\"tab-content animate-fade\">\n            <div class=\"card p-6\">\n                <div class=\"flex flex-col md:flex-row justify-between items-center mb-6 gap-4 border-b pb-4\">\n                    <h2 class=\"font-bold text-xl text-slate-800 flex items-center gap-2\"><i class=\"ph-duotone ph-chart-line-up text-indigo-600\"><\/i> An\u00e1lisis Financiero<\/h2>\n                    <div class=\"flex gap-2 items-center bg-slate-100 p-1 rounded-lg\">\n                        <input type=\"date\" id=\"stats-start\" class=\"bg-white border border-slate-300 rounded text-xs p-1\">\n                        <span class=\"text-slate-400 font-bold\">&#8211;<\/span>\n                        <input type=\"date\" id=\"stats-end\" class=\"bg-white border border-slate-300 rounded text-xs p-1\">\n                        <button onclick=\"renderStats()\" class=\"bg-indigo-600 text-white px-3 py-1 rounded text-xs font-bold shadow hover:bg-indigo-700\">ANALIZAR<\/button>\n                    <\/div>\n                <\/div>\n                \n                <div id=\"stats-content\" class=\"hidden\">\n                    <div class=\"grid grid-cols-2 md:grid-cols-4 gap-4 mb-6\">\n                        <div class=\"p-4 bg-emerald-50 rounded-lg border border-emerald-100\">\n                            <p class=\"text-[10px] uppercase font-bold text-emerald-800\">Ganancia Neta<\/p>\n                            <p id=\"stat-net\" class=\"text-xl kpi-value text-emerald-600\">$0.00<\/p>\n                        <\/div>\n                        <div class=\"p-4 bg-indigo-50 rounded-lg border border-indigo-100\">\n                            <p class=\"text-[10px] uppercase font-bold text-indigo-800\">Ganancia Bruta<\/p>\n                            <p id=\"stat-gross\" class=\"text-xl kpi-value text-indigo-600\">$0.00<\/p>\n                        <\/div>\n                        <div class=\"p-4 bg-slate-50 rounded-lg border border-slate-200\">\n                            <p class=\"text-[10px] uppercase font-bold text-slate-600\">Inversi\u00f3n (COGS)<\/p>\n                            <p id=\"stat-cost\" class=\"text-xl kpi-value text-slate-700\">$0.00<\/p>\n                        <\/div>\n                        <div class=\"p-4 bg-purple-50 rounded-lg border border-purple-100\">\n                            <p class=\"text-[10px] uppercase font-bold text-purple-800\">Diezmo Gen.<\/p>\n                            <p id=\"stat-tithe\" class=\"text-xl kpi-value text-purple-600\">$0.00<\/p>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n                        <div>\n                            <h3 class=\"font-bold text-slate-700 text-xs uppercase mb-3 border-b pb-1\">\ud83d\udd25 Productos Top<\/h3>\n                            <div id=\"stat-products-list\" class=\"space-y-2 text-xs\"><\/div>\n                        <\/div>\n                        <div>\n                            <h3 class=\"font-bold text-slate-700 text-xs uppercase mb-3 border-b pb-1\">\ud83d\udc8e Mejores Clientes<\/h3>\n                            <div id=\"stat-clients-list\" class=\"space-y-2 text-xs\"><\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n                \n                <div id=\"stats-empty\" class=\"text-center py-10 text-slate-400 italic text-sm\">\n                    Selecciona un rango de fechas para ver el an\u00e1lisis.\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <div id=\"tab-config\" class=\"tab-content animate-fade\">\n            <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n                <div class=\"card p-6 border-l-4 border-slate-500\">\n                    <h2 class=\"font-bold text-lg mb-4 flex items-center gap-2\"><i class=\"ph-duotone ph-database\"><\/i> Datos y Respaldo<\/h2>\n                    <div class=\"space-y-3\">\n                        <button onclick=\"fetchRemoteData()\" class=\"w-full bg-indigo-600 text-white py-2 rounded font-bold text-xs flex justify-center items-center gap-2 hover:bg-indigo-700\">\n                            <i class=\"ph-bold ph-cloud-arrow-down\"><\/i> Sincronizar Nube\n                        <\/button>\n                        <div class=\"grid grid-cols-1 gap-2\">\n                             <button onclick=\"exportData()\" class=\"bg-slate-800 text-white py-3 rounded font-bold text-xs flex justify-center items-center gap-2\">\n                                <i class=\"ph-bold ph-download\"><\/i> RESPALDO COMPLETO (.JSON)\n                            <\/button>\n                            <button onclick=\"exportDailyData()\" class=\"bg-slate-600 text-white py-3 rounded font-bold text-xs flex justify-center items-center gap-2\">\n                                <i class=\"ph-bold ph-calendar-check\"><\/i> RESPALDO SOLO DE HOY (.JSON)\n                            <\/button>\n                            <label class=\"bg-white border border-slate-300 text-slate-700 py-3 rounded font-bold text-xs text-center cursor-pointer hover:bg-slate-50 mt-2 block\">\n                                Restaurar Archivo <input type=\"file\" class=\"hidden\" onchange=\"importData(this)\">\n                            <\/label>\n                            \n                             <button onclick=\"setGlobalReference()\" class=\"mt-4 border border-indigo-200 text-indigo-700 bg-indigo-50 py-2 rounded font-bold text-xs flex justify-center items-center gap-2 hover:bg-indigo-100\">\n                                <i class=\"ph-bold ph-push-pin\"><\/i> FIJAR SALDO GLOBAL (REFERENCIA)\n                            <\/button>\n                        <\/div>\n                    <\/div>\n                <\/div>\n\n                <div class=\"card p-6\">\n                    <h2 class=\"font-bold text-lg mb-4 flex items-center gap-2\"><i class=\"ph-duotone ph-wallet\"><\/i> Gesti\u00f3n Cuentas<\/h2>\n                    <div id=\"config-accounts-list\" class=\"space-y-2 mb-4\"><\/div>\n                    <form onsubmit=\"event.preventDefault(); addAccount();\" class=\"flex gap-2\">\n                        <input id=\"new-acc-name\" placeholder=\"Nombre\" class=\"input-std text-xs\" required>\n                        <select id=\"new-acc-currency\" class=\"input-std w-24 text-xs font-bold\">\n                            <option value=\"MN\">MN<\/option>\n                            <option value=\"USD\">USD<\/option>\n                        <\/select>\n                        <button class=\"bg-slate-700 text-white px-3 rounded font-bold\">+<\/button>\n                    <\/form>\n                <\/div>\n            <\/div>\n        <\/div>\n\n    <\/main>\n\n    <nav class=\"fixed bottom-0 left-0 w-full bg-white border-t border-slate-200 z-40 pb-safe shadow-[0_-4px_6px_-1px_rgba(0,0,0,0.05)]\">\n        <div class=\"max-w-7xl mx-auto px-2 py-2 flex justify-between gap-1 overflow-x-auto\">\n            <button onclick=\"showTab('dashboard')\" class=\"nav-btn active flex-1\" data-tab=\"dashboard\">\n                <i class=\"ph-duotone ph-house\"><\/i> Inicio\n            <\/button>\n            <button onclick=\"showTab('sales')\" class=\"nav-btn flex-1\" data-tab=\"sales\">\n                <i class=\"ph-duotone ph-shopping-cart\"><\/i> Ventas\n            <\/button>\n            <button onclick=\"showTab('movements')\" class=\"nav-btn flex-1\" data-tab=\"movements\">\n                <i class=\"ph-duotone ph-arrows-left-right\"><\/i> Movim.\n            <\/button>\n            <button onclick=\"showTab('clients')\" class=\"nav-btn flex-1\" data-tab=\"clients\">\n                <i class=\"ph-duotone ph-users\"><\/i> Clientes\n            <\/button>\n            <button onclick=\"showTab('inventory')\" class=\"nav-btn flex-1\" data-tab=\"inventory\">\n                <i class=\"ph-duotone ph-package\"><\/i> Invent.\n            <\/button>\n            <button onclick=\"showTab('reports')\" class=\"nav-btn flex-1\" data-tab=\"reports\">\n                <i class=\"ph-duotone ph-chart-pie-slice\"><\/i> Reportes\n            <\/button>\n            <button onclick=\"showTab('stats')\" class=\"nav-btn flex-1\" data-tab=\"stats\">\n                <i class=\"ph-duotone ph-chart-bar\"><\/i> Stats\n            <\/button>\n            <button onclick=\"showTab('config')\" class=\"nav-btn flex-1\" data-tab=\"config\">\n                <i class=\"ph-duotone ph-gear\"><\/i> Config\n            <\/button>\n        <\/div>\n    <\/nav>\n\n    <div id=\"toast\" class=\"fixed top-5 right-5 z-50 transform transition-all duration-300 translate-x-full opacity-0\">\n        <div class=\"bg-slate-800 text-white px-4 py-3 rounded-lg shadow-xl font-bold text-sm flex items-center gap-3\">\n            <i class=\"ph-fill ph-info\"><\/i> <span id=\"toast-msg\">Notificaci\u00f3n<\/span>\n        <\/div>\n    <\/div>\n\n    <script>\n        const DB_KEY = 'FagalesMarket_DB_V7'; \n        let db = {\n            config: { products: [], clients: [], accounts: [], defaultAccountId: null },\n            history: {}\n        };\n        \n        let currentDate = new Date().toISOString().split('T')[0];\n        let currentRate = 320;\n\n        window.onload = () => {\n            loadDB();\n            \n            const dateInput = document.getElementById('work-date');\n            dateInput.value = currentDate;\n            dateInput.addEventListener('change', (e) => {\n                currentDate = e.target.value;\n                loadDailyData();\n                refreshUI();\n                showToast(`\ud83d\udcc5 Cambiado a: ${currentDate}`);\n            });\n            \n            document.getElementById('stats-start').value = currentDate.substring(0, 7) + '-01';\n            document.getElementById('stats-end').value = currentDate;\n\n            const daily = getDailyData();\n            if(daily.rate) currentRate = daily.rate;\n            document.getElementById('daily-rate').value = currentRate;\n            document.getElementById('sale-rate').value = currentRate; \/\/ Tasa inicial de venta\n\n            updateLists();\n            refreshUI();\n            addSaleRow();\n        };\n\n        function loadDB() {\n            const stored = localStorage.getItem(DB_KEY);\n            if (stored) {\n                try {\n                    db = JSON.parse(stored);\n                    if(!db.config.clients) db.config.clients = [];\n                    if(!db.config.accounts) db.config.accounts = [];\n                } catch(e) { console.error(\"Error DB\", e); }\n            } else {\n                db.config.accounts = [\n                    { id: 1, name: 'Caja Principal', currency: 'MN', globalBalance: 0 },\n                    { id: 2, name: 'Caja USD', currency: 'USD', globalBalance: 0 }\n                ];\n            }\n            if(!db.config.defaultAccountId && db.config.accounts.length > 0) {\n                db.config.defaultAccountId = db.config.accounts[0].id;\n            }\n        }\n\n        function saveDB() { localStorage.setItem(DB_KEY, JSON.stringify(db)); }\n\n        function getDailyData() {\n            if (!db.history[currentDate]) {\n                db.history[currentDate] = {\n                    rate: currentRate,\n                    notes: '',\n                    sales: [],\n                    expenses: [],\n                    closingBalances: {}, \n                };\n            }\n            if (!db.history[currentDate].closingBalances) db.history[currentDate].closingBalances = {};\n            return db.history[currentDate];\n        }\n\n        function loadDailyData() {\n            const d = getDailyData();\n            currentRate = d.rate || 320;\n            document.getElementById('daily-rate').value = currentRate;\n            document.getElementById('sale-rate').value = currentRate; \/\/ Resetear tasa venta al cambiar d\u00eda\n            document.getElementById('daily-notes').value = d.notes || '';\n            document.getElementById('header-date-display').innerText = currentDate;\n        }\n\n        window.showTab = (id) => {\n            document.querySelectorAll('.tab-content').forEach(el => el.classList.remove('active'));\n            document.getElementById(`tab-${id}`).classList.add('active');\n            \n            document.querySelectorAll('.nav-btn').forEach(el => el.classList.remove('active'));\n            const btn = document.querySelector(`.nav-btn[data-tab=\"${id}\"]`);\n            if(btn) btn.classList.add('active');\n\n            if(id === 'dashboard') renderDashboard();\n            if(id === 'inventory') renderInventory();\n            if(id === 'clients') renderClients();\n            if(id === 'reports') generateReport();\n            if(id === 'config') updateLists(); \n        };\n\n        window.saveRate = () => {\n            currentRate = parseFloat(document.getElementById('daily-rate').value) || 1;\n            getDailyData().rate = currentRate;\n            document.getElementById('sale-rate').value = currentRate; \/\/ Sugerir la nueva tasa en ventas\n            saveDB();\n            refreshUI();\n            showToast(\"\u2705 Tasa Actualizada\");\n        };\n\n        \/\/ --- DASHBOARD LOGIC ---\n        function renderDashboard() {\n            const d = getDailyData();\n            const container = document.getElementById('dashboard-accounts');\n            let totalSalesUSD = 0;\n            let totalExpensesUSD = 0; \n            \n            d.sales.forEach(s => totalSalesUSD += s.totalUSD);\n            d.expenses.forEach(e => {\n                if(!e.isIncome) totalExpensesUSD += e.amount \/ (e.accountId===2 ? 1 : currentRate); \n            });\n\n            document.getElementById('dash-sales-usd').innerText = `$${totalSalesUSD.toFixed(2)}`;\n            document.getElementById('dash-expenses').innerText = `Est. $${totalExpensesUSD.toFixed(2)}`;\n            document.getElementById('dash-mov-count').innerText = d.expenses.length;\n            \n            \/\/ Calc Ganancia Dashboard usando tasas espec\u00edficas de cada venta\n            let totalCostCUP = 0;\n            let incomeCUP = 0;\n            d.sales.forEach(s => {\n                totalCostCUP += s.totalCostCUP;\n                const sRate = s.saleRate || currentRate;\n                incomeCUP += (s.totalUSD * sRate);\n            });\n\n            const gross = incomeCUP - totalCostCUP;\n            let ops = 0;\n            d.expenses.forEach(e => {\n                 if(!e.isIncome && (e.type === 'OPERATIVO' || e.type === 'AJUSTE')) {\n                     const acc = db.config.accounts.find(a => a.id === e.accountId);\n                     let val = e.amount;\n                     if(acc && acc.currency === 'USD') val = e.amount * currentRate;\n                     ops += val;\n                 }\n            });\n            \n            document.getElementById('dash-profit').innerText = formatMoney(gross - ops);\n            \n            const dates = Object.keys(db.history).sort();\n            const prevDate = dates.reverse().find(d => d < currentDate);\n            const prevData = prevDate ? db.history[prevDate] : null;\n\n            container.innerHTML = db.config.accounts.map(acc => {\n                let finalClosing = d.closingBalances[acc.id] !== undefined ? d.closingBalances[acc.id] : 0;\n                let revenue = 0;\n                let costOfGoods = 0;\n                \n                d.sales.filter(s => s.accountId === acc.id).forEach(s => {\n                    const sRate = s.saleRate || currentRate;\n                    let val = (acc.currency === 'USD') ? s.totalUSD : (s.totalUSD * sRate);\n                    revenue += val;\n                    \n                    let itemsCostCUP = s.totalCostCUP || 0;\n                    if(acc.currency === 'USD') costOfGoods += (itemsCostCUP \/ sRate);\n                    else costOfGoods += itemsCostCUP;\n                });\n\n                let expenses = 0;\n                d.expenses.filter(e => e.accountId === acc.id).forEach(e => {\n                    if(e.isIncome) expenses -= e.amount;\n                    else expenses += e.amount;\n                });\n                \n                let netFlow = revenue - costOfGoods - expenses;\n                let theoreticalInitial = finalClosing - netFlow;\n                \n                let prevClosingVal = 0;\n                let comparisonHTML = `<span class=\"text-slate-400 italic\">Sin datos ayer<\/span>`;\n                \n                if(prevData && prevData.closingBalances && prevData.closingBalances[acc.id] !== undefined) {\n                    prevClosingVal = prevData.closingBalances[acc.id];\n                    const diff = theoreticalInitial - prevClosingVal;\n                    const diffDisplay = Math.abs(diff) < 0.1 ? \n                        `<span class=\"text-emerald-600 font-bold\"><i class=\"ph-bold ph-check\"><\/i> Cuadra<\/span>` : \n                        `<span class=\"text-red-500 font-bold\">\u26a0\ufe0f Dif: ${diff.toFixed(2)}<\/span>`;\n                        \n                    comparisonHTML = `\n                        <div class=\"flex justify-between text-[10px] mt-1 bg-slate-100 p-1 rounded\">\n                            <span>Ayer Cerr\u00f3: <strong>${prevClosingVal.toFixed(2)}<\/strong><\/span>\n                            ${diffDisplay}\n                        <\/div>\n                    `;\n                }\n                else if (acc.globalBalance !== undefined) {\n                        comparisonHTML = `\n                        <div class=\"flex justify-between text-[10px] mt-1 bg-slate-100 p-1 rounded\">\n                            <span>Ref Global: <strong>${acc.globalBalance}<\/strong><\/span>\n                            <span class=\"text-slate-400\">?<\/span>\n                        <\/div>\n                    `;\n                }\n                \n                return `\n                <div class=\"card p-4 relative overflow-hidden\">\n                    <div class=\"flex justify-between items-start mb-2 relative z-10\">\n                        <h3 class=\"font-bold text-slate-700\">${acc.name}<\/h3>\n                        <span class=\"text-xs font-bold bg-slate-100 px-2 py-1 rounded text-slate-500\">${acc.currency}<\/span>\n                    <\/div>\n                    \n                    <div class=\"space-y-3 relative z-10\">\n                        <div>\n                            <label class=\"text-[9px] font-bold uppercase text-indigo-600 block mb-1\">Saldo Cierre Real<\/label>\n                            <input type=\"number\" step=\"0.01\" value=\"${finalClosing}\" \n                                onchange=\"updateAccountClosing(${acc.id}, this.value)\"\n                                class=\"w-full font-mono font-bold text-indigo-700 bg-indigo-50 border border-indigo-200 rounded p-2 text-lg focus:bg-white focus:border-indigo-500 transition shadow-inner\">\n                        <\/div>\n                        \n                        <div class=\"flex justify-between text-xs border-t border-slate-100 pt-2\">\n                            <span class=\"text-slate-400\">Ganancia Hoy (Est):<\/span>\n                            <span class=\"font-bold ${netFlow >= 0 ? 'text-emerald-500' : 'text-red-500'}\">\n                                ${netFlow >= 0 ? '+' : ''}${netFlow.toFixed(2)}\n                            <\/span>\n                        <\/div>\n                        \n                        <div class=\"bg-slate-800 text-white p-2 rounded\">\n                            <div class=\"flex justify-between items-center\">\n                                <span class=\"text-[10px] font-bold uppercase text-slate-400\">Debi\u00f3 Amanecer:<\/span>\n                                <span class=\"font-mono font-bold text-base\">${theoreticalInitial.toFixed(2)}<\/span>\n                            <\/div>\n                        <\/div>\n                        ${comparisonHTML}\n                    <\/div>\n                <\/div>\n                `;\n            }).join('');\n        }\n\n        window.updateAccountClosing = (accId, value) => {\n            const d = getDailyData();\n            d.closingBalances[accId] = parseFloat(value) || 0;\n            saveDB(); renderDashboard(); \n        };\n        \n        window.setGlobalReference = () => {\n             const d = getDailyData();\n             if(!confirm(\"\u00bfFijar los SALDOS DE CIERRE DE HOY como referencia global?\")) return;\n             db.config.accounts.forEach(acc => {\n                 if(d.closingBalances[acc.id] !== undefined) acc.globalBalance = d.closingBalances[acc.id];\n             });\n             saveDB(); updateLists(); showToast(\"\u2705 Referencias actualizadas\");\n        };\n\n        \/\/ --- VENTAS ---\n        window.addSaleRow = (data = null) => {\n            const container = document.getElementById('sale-rows-container');\n            const div = document.createElement('div');\n            div.className = 'sale-row grid grid-cols-12 gap-x-2 gap-y-3 items-center border-b border-slate-100 pb-4 mb-2 last:border-0';\n            div.innerHTML = `\n                <div class=\"col-span-12 md:col-span-4 relative flex items-center gap-1\">\n                    <input type=\"text\" class=\"input-std text-xs font-bold prod-search flex-grow\" placeholder=\"Buscar producto...\" list=\"prods-datalist\" onchange=\"autoFillRow(this)\">\n                    <datalist id=\"prods-datalist\">${generateProdOptions()}<\/datalist>\n                    <input type=\"hidden\" class=\"prod-id\">\n                     <button onclick=\"updateInventoryFromRow(this)\" title=\"Guardar\/Actualizar en Inventario\" class=\"p-2 bg-slate-200 text-slate-600 rounded hover:bg-indigo-600 hover:text-white transition\">\n                        <i class=\"ph-bold ph-floppy-disk\"><\/i>\n                    <\/button>\n                <\/div>\n                <div class=\"col-span-3 md:col-span-2\">\n                    <input type=\"number\" class=\"input-std text-center text-xs font-bold prod-qty\" value=\"1\" min=\"1\" onchange=\"calcRow(this)\" placeholder=\"Cant\">\n                <\/div>\n                <div class=\"col-span-4 md:col-span-2\">\n                    <input type=\"number\" class=\"input-std text-right text-xs font-bold text-blue-600 prod-usd\" placeholder=\"USD\" step=\"0.01\" onchange=\"calcRow(this)\">\n                <\/div>\n                <div class=\"col-span-4 md:col-span-2\">\n                    <input type=\"number\" class=\"input-std text-right text-xs font-bold text-slate-600 prod-cost\" placeholder=\"CUP\" step=\"1\" onchange=\"calcRow(this)\">\n                <\/div>\n                <div class=\"col-span-1 md:col-span-2 text-center\">\n                    <button onclick=\"this.closest('.sale-row').remove(); updateSaleTotal()\" class=\"text-red-400 hover:text-red-600\"><i class=\"ph-bold ph-trash text-lg\"><\/i><\/button>\n                <\/div>\n            `;\n            container.appendChild(div);\n\n            if(data) {\n                div.querySelector('.prod-search').value = data.productName;\n                div.querySelector('.prod-id').value = data.productId;\n                div.querySelector('.prod-qty').value = data.quantity;\n                div.querySelector('.prod-cost').value = data.costCUP; \n                div.querySelector('.prod-usd').value = data.priceUSD;\n            }\n        };\n\n        function generateProdOptions() {\n            return db.config.products.map(p => `<option value=\"${p.name}\" data-id=\"${p.id}\" data-usd=\"${p.priceUSD}\" data-cost=\"${p.cost}\" data-stock=\"${p.stock}\">Stock: ${p.stock}<\/option>`).join('');\n        }\n\n        window.autoFillRow = (input) => {\n            const list = document.getElementById('prods-datalist');\n            const options = Array.from(list.options);\n            const opt = options.find(o => o.value === input.value);\n            const row = input.closest('.sale-row');\n\n            if(opt) {\n                row.querySelector('.prod-id').value = opt.getAttribute('data-id');\n                row.querySelector('.prod-cost').value = opt.getAttribute('data-cost');\n                row.querySelector('.prod-usd').value = parseFloat(opt.getAttribute('data-usd')).toFixed(2);\n                updateSaleTotal();\n            }\n        };\n        \n        window.updateInventoryFromRow = (btn) => {\n            const row = btn.closest('.sale-row');\n            const name = row.querySelector('.prod-search').value;\n            const cost = parseFloat(row.querySelector('.prod-cost').value) || 0;\n            const usd = parseFloat(row.querySelector('.prod-usd').value) || 0;\n            \n            if(!name) return showToast(\"\u26a0\ufe0f Escribe un nombre primero\");\n            let prodIndex = db.config.products.findIndex(p => p.name === name);\n            \n            if(prodIndex >= 0) {\n                db.config.products[prodIndex].cost = cost;\n                db.config.products[prodIndex].priceUSD = usd;\n                showToast(`\u2705 Actualizado: ${name}`);\n            } else {\n                const newProd = { id: Date.now(), name, stock: 0, cost, priceUSD: usd };\n                db.config.products.push(newProd);\n                row.querySelector('.prod-id').value = newProd.id;\n                showToast(`\u2705 Creado: ${name}`);\n            }\n            saveDB();\n            const options = generateProdOptions();\n            document.querySelectorAll('datalist#prods-datalist').forEach(dl => dl.innerHTML = options);\n        };\n\n        window.calcRow = (input) => { updateSaleTotal(); };\n\n        window.updateSaleTotal = () => {\n            let total = 0;\n            document.querySelectorAll('.sale-row').forEach(row => {\n                const qty = parseFloat(row.querySelector('.prod-qty').value) || 0;\n                const usd = parseFloat(row.querySelector('.prod-usd').value) || 0;\n                total += (qty * usd);\n            });\n            const disc = parseFloat(document.getElementById('sale-discount').value) || 0;\n            const tip = parseFloat(document.getElementById('sale-tip').value) || 0;\n            const final = total - disc + tip;\n            document.getElementById('sale-total-display').innerText = `$${final.toFixed(2)}`;\n            return final;\n        };\n\n        window.processSale = () => {\n            const clientInput = document.getElementById('sale-client');\n            const accountId = document.getElementById('sale-account').value;\n            const clientName = clientInput.value.trim();\n            const saleRate = parseFloat(document.getElementById('sale-rate').value) || currentRate;\n\n            if(!clientName) return showToast(\"\u26a0\ufe0f Falta Cliente\");\n            if(!accountId) return showToast(\"\u26a0\ufe0f Falta Cuenta\");\n\n            const exists = db.config.clients.find(c => c.name === clientName);\n            if(!exists) {\n                db.config.clients.push({ id: Date.now(), name: clientName, contact: '' });\n                updateLists();\n            }\n\n            const items = [];\n            let totalCostCUP = 0;\n            let totalUSD = 0;\n\n            document.querySelectorAll('.sale-row').forEach(row => {\n                const name = row.querySelector('.prod-search').value;\n                const pid = row.querySelector('.prod-id').value;\n                const qty = parseFloat(row.querySelector('.prod-qty').value) || 0;\n                const cost = parseFloat(row.querySelector('.prod-cost').value) || 0;\n                const usd = parseFloat(row.querySelector('.prod-usd').value) || 0;\n\n                if(name && qty > 0) {\n                    items.push({ productId: pid, productName: name, quantity: qty, priceUSD: usd, costCUP: cost });\n                    totalCostCUP += (cost * qty);\n                    totalUSD += (usd * qty);\n                    if(pid) {\n                        const p = db.config.products.find(x => x.id == pid);\n                        if(p) p.stock -= qty;\n                    }\n                }\n            });\n\n            if(items.length === 0) return showToast(\"\u26a0\ufe0f Carrito vac\u00edo\");\n\n            const discount = parseFloat(document.getElementById('sale-discount').value) || 0;\n            const tip = parseFloat(document.getElementById('sale-tip').value) || 0;\n            const finalTotal = totalUSD - discount + tip;\n\n            const sale = {\n                id: Date.now(),\n                customer: clientName,\n                accountId: parseInt(accountId),\n                saleRate: saleRate, \/\/ GUARDAR TASA ESPEC\u00cdFICA\n                items,\n                discountUSD: discount,\n                tipUSD: tip,\n                totalUSD: finalTotal, \n                totalCostCUP\n            };\n\n            getDailyData().sales.push(sale);\n            saveDB();\n            resetSaleForm();\n            refreshUI();\n            showToast(\"\u2705 Venta Guardada\");\n        };\n\n        window.resetSaleForm = () => {\n            document.getElementById('sale-client').value = '';\n            document.getElementById('sale-discount').value = '';\n            document.getElementById('sale-tip').value = '';\n            document.getElementById('sale-rate').value = currentRate; \/\/ Resetear a tasa global\n            document.getElementById('sale-rows-container').innerHTML = '';\n            addSaleRow();\n            updateSaleTotal();\n            if(db.config.defaultAccountId) document.getElementById('sale-account').value = db.config.defaultAccountId;\n        };\n\n        window.editSale = (id) => {\n            if(!confirm(\"\u00bfEditar venta?\")) return;\n            const d = getDailyData();\n            const s = d.sales.find(x => x.id === id);\n            if(!s) return;\n\n            s.items.forEach(i => {\n                const p = db.config.products.find(prod => prod.id == i.productId);\n                if(p) p.stock += i.quantity;\n            });\n\n            d.sales = d.sales.filter(x => x.id !== id);\n            saveDB();\n\n            document.getElementById('sale-client').value = s.customer;\n            document.getElementById('sale-account').value = s.accountId;\n            document.getElementById('sale-discount').value = s.discountUSD;\n            document.getElementById('sale-tip').value = s.tipUSD;\n            document.getElementById('sale-rate').value = s.saleRate || d.rate; \/\/ Recuperar tasa cobrada\n\n            document.getElementById('sale-rows-container').innerHTML = '';\n            s.items.forEach(item => addSaleRow(item));\n\n            updateSaleTotal();\n            refreshUI();\n            showTab('sales'); \n        };\n\n        \/\/ --- MOVIMIENTOS ---\n        window.setMovType = (type) => {\n            document.getElementById('mov-type').value = type;\n            const btnIn = document.getElementById('btn-in');\n            const btnOut = document.getElementById('btn-out');\n            if(type === 'IN') {\n                btnIn.className = \"flex-1 py-2 rounded font-bold text-xs bg-white text-emerald-600 shadow transition\";\n                btnOut.className = \"flex-1 py-2 rounded font-bold text-xs transition text-slate-400 hover:bg-slate-50\";\n            } else {\n                btnIn.className = \"flex-1 py-2 rounded font-bold text-xs transition text-slate-400 hover:bg-slate-50\";\n                btnOut.className = \"flex-1 py-2 rounded font-bold text-xs bg-white text-red-600 shadow transition\";\n            }\n        };\n\n        window.saveMovement = () => {\n            const type = document.getElementById('mov-type').value; \n            const cat = document.getElementById('mov-category').value;\n            const desc = document.getElementById('mov-desc').value;\n            const amount = parseFloat(document.getElementById('mov-amount').value);\n            const accId = document.getElementById('mov-account').value;\n            if(!desc || !amount) return showToast(\"\u26a0\ufe0f Completa datos\");\n            const expense = { id: Date.now(), type: cat, isIncome: (type === 'IN'), reason: desc, amount: amount, accountId: parseInt(accId) };\n            getDailyData().expenses.push(expense);\n            saveDB();\n            document.getElementById('mov-desc').value = '';\n            document.getElementById('mov-amount').value = '';\n            refreshUI();\n            showToast(\"\u2705 Movimiento Guardado\");\n        };\n\n        window.editMov = (id) => {\n            if(!confirm(\"\u00bfEditar movimiento?\")) return;\n            const d = getDailyData();\n            const m = d.expenses.find(x => x.id === id);\n            if(!m) return;\n            d.expenses = d.expenses.filter(x => x.id !== id);\n            saveDB();\n            setMovType(m.isIncome ? 'IN' : 'OUT');\n            document.getElementById('mov-category').value = m.type;\n            document.getElementById('mov-desc').value = m.reason;\n            document.getElementById('mov-amount').value = m.amount;\n            document.getElementById('mov-account').value = m.accountId;\n            refreshUI();\n        };\n\n        \/\/ --- CLIENTES & INVENTARIO ---\n        window.promptNewClient = () => {\n            const name = prompt(\"Nombre:\");\n            if(name) { db.config.clients.push({ id: Date.now(), name, contact: '' }); saveDB(); renderClients(); }\n        };\n        function renderClients() {\n            document.getElementById('clients-body').innerHTML = db.config.clients.map(c => `\n                <tr class=\"hover:bg-teal-50 border-b border-slate-100\">\n                    <td class=\"p-3 font-bold\">${c.name}<\/td>\n                    <td class=\"p-3 text-slate-500\">${c.contact || '-'}<\/td>\n                    <td class=\"p-3 text-right\">\n                        <button onclick=\"deleteClient(${c.id})\" class=\"text-red-400\"><i class=\"ph-bold ph-trash\"><\/i><\/button>\n                    <\/td>\n                <\/tr>\n            `).join('');\n        }\n        window.deleteClient = (id) => {\n            if(confirm(\"\u00bfBorrar?\")) { db.config.clients = db.config.clients.filter(c => c.id !== id); saveDB(); renderClients(); }\n        };\n\n        function renderInventory() {\n            const term = document.getElementById('inv-search').value.toLowerCase();\n            const filtered = db.config.products.filter(p => p.name.toLowerCase().includes(term)).sort((a,b) => a.name.localeCompare(b.name));\n            document.getElementById('inv-body').innerHTML = filtered.map(p => `\n                <tr class=\"hover:bg-blue-50 border-b border-slate-100\">\n                    <td class=\"p-3 font-medium\">${p.name}<\/td>\n                    <td class=\"p-3 text-center\"><span class=\"bg-slate-100 px-2 rounded font-bold\">${p.stock}<\/span><\/td>\n                    <td class=\"p-3 text-right text-slate-500\">${p.cost}<\/td>\n                    <td class=\"p-3 text-right text-blue-600 font-bold\">$${p.priceUSD}<\/td>\n                    <td class=\"p-3 text-center flex justify-center gap-2\">\n                        <button onclick='editProduct(${JSON.stringify(p)})' class=\"text-indigo-600 bg-indigo-50 p-1 rounded\"><i class=\"ph-bold ph-pencil-simple\"><\/i><\/button>\n                        <button onclick='deleteProduct(${p.id})' class=\"text-red-600 bg-red-50 p-1 rounded\"><i class=\"ph-bold ph-trash\"><\/i><\/button>\n                    <\/td>\n                <\/tr>\n            `).join('');\n        }\n        window.editProduct = (p) => {\n            document.getElementById('prod-editor').classList.remove('hidden');\n            if(p) {\n                document.getElementById('prod-id').value = p.id;\n                document.getElementById('prod-name').value = p.name;\n                document.getElementById('prod-stock').value = p.stock;\n                document.getElementById('prod-cost').value = p.cost;\n                document.getElementById('prod-price').value = p.priceUSD;\n            } else {\n                document.getElementById('prod-id').value = '';\n                document.getElementById('prod-name').value = '';\n                document.getElementById('prod-stock').value = 0;\n                document.getElementById('prod-cost').value = 0;\n                document.getElementById('prod-price').value = 0;\n            }\n        };\n        window.saveProduct = () => {\n            const id = document.getElementById('prod-id').value;\n            const name = document.getElementById('prod-name').value;\n            if(!name) return;\n            const prod = { id: id ? parseInt(id) : Date.now(), name, stock: parseFloat(document.getElementById('prod-stock').value), cost: parseFloat(document.getElementById('prod-cost').value), priceUSD: parseFloat(document.getElementById('prod-price').value) };\n            if(id) {\n                const idx = db.config.products.findIndex(p => p.id == id);\n                if(idx !== -1) db.config.products[idx] = prod;\n            } else {\n                db.config.products.push(prod);\n            }\n            saveDB(); renderInventory(); document.getElementById('prod-editor').classList.add('hidden');\n        };\n        window.deleteProduct = (id) => {\n             if(!confirm(\"\u00bfEliminar producto?\")) return;\n             db.config.products = db.config.products.filter(p => p.id !== id);\n             saveDB(); renderInventory(); showToast(\"\ud83d\uddd1\ufe0f Producto Eliminado\");\n        };\n\n        \/\/ --- REPORTES ---\n        function generateReport() {\n            const d = getDailyData();\n            const globalRate = d.rate || 1;\n\n            let totalSalesUSD = 0;\n            let totalCostCUP = 0; \n            let incomeCUP = 0; \/\/ Calcularemos ingreso CUP sumando cada venta con su propia tasa\n\n            d.sales.forEach(s => {\n                totalSalesUSD += s.totalUSD;\n                totalCostCUP += s.totalCostCUP;\n                const sRate = s.saleRate || globalRate;\n                incomeCUP += (s.totalUSD * sRate);\n            });\n\n            const grossProfit = incomeCUP - totalCostCUP;\n\n            let opsExpenses = 0;\n            let ownerWithdrawals = 0;\n            let infraReserved = 0;\n            let inventoryPurchases = 0;\n            let charityGiven = 0;\n            let movementsText = \"\";\n\n            d.expenses.forEach(e => {\n                const acc = db.config.accounts.find(a => a.id === e.accountId);\n                let valCUP = e.amount;\n                if(acc && acc.currency === 'USD') valCUP = e.amount * globalRate;\n                const sign = e.isIncome ? '+' : '-';\n                movementsText += `${sign} ${e.reason} (${e.amount} ${acc ? acc.currency : ''})\\n`;\n                if(!e.isIncome) {\n                    if (e.type === 'OPERATIVO' || e.type === 'AJUSTE') opsExpenses += valCUP;\n                    else if (e.type === 'DUENO') ownerWithdrawals += valCUP;\n                    else if (e.type === 'AYUDA') charityGiven += valCUP;\n                    else if (e.type === 'INFRA') infraReserved += valCUP;\n                    else if (e.type === 'INVENTARIO') inventoryPurchases += valCUP;\n                }\n            });\n\n            const netProfit = grossProfit - opsExpenses; \n            const tithe = netProfit > 0 ? netProfit * 0.10 : 0; \n            const distributable = netProfit - tithe;\n            const distComp = distributable > 0 ? distributable * 0.50 : 0;\n            const distOwn = distributable > 0 ? distributable * 0.25 : 0;\n            const distInf = distributable > 0 ? distributable * 0.25 : 0;\n\n            document.getElementById('report-net-profit').innerText = formatMoney(netProfit);\n            document.getElementById('report-tithe').innerText = formatMoney(tithe);\n            document.getElementById('dist-company').innerText = formatMoney(distComp);\n            document.getElementById('dist-owner').innerText = formatMoney(distOwn);\n            document.getElementById('dist-infra').innerText = formatMoney(distInf);\n\n            let invCostTotal = 0; let invSaleTotal = 0;\n            db.config.products.forEach(p => {\n                invCostTotal += (p.stock * p.cost); \n                invSaleTotal += (p.stock * p.priceUSD * globalRate); \n            });\n            document.getElementById('report-inv-cost').innerText = formatMoney(invCostTotal);\n            document.getElementById('report-inv-sale').innerText = formatMoney(invSaleTotal);\n            document.getElementById('report-inv-profit').innerText = `Utilidad Potencial: ${formatMoney(invSaleTotal - invCostTotal)}`;\n\n            const dates = Object.keys(db.history).sort();\n            const prevDate = dates.reverse().find(dt => dt < currentDate);\n            const prevData = prevDate ? db.history[prevDate] : null;\n\n            let accountsText = \"\";\n            let htmlAccounts = db.config.accounts.map(acc => {\n                let finalBal = d.closingBalances[acc.id] !== undefined ? d.closingBalances[acc.id] : 0;\n                let revenueAcc = 0; let costOfGoodsAcc = 0;\n                d.sales.filter(s => s.accountId === acc.id).forEach(s => {\n                    const sRate = s.saleRate || globalRate;\n                    let val = (acc.currency === 'USD') ? s.totalUSD : (s.totalUSD * sRate);\n                    revenueAcc += val;\n                    let itemsCostCUP = s.totalCostCUP || 0;\n                    if(acc.currency === 'USD') costOfGoodsAcc += (itemsCostCUP \/ sRate);\n                    else costOfGoodsAcc += itemsCostCUP;\n                });\n                let expensesAcc = 0;\n                d.expenses.filter(e => e.accountId === acc.id).forEach(e => {\n                    if(e.isIncome) expensesAcc -= e.amount; else expensesAcc += e.amount;\n                });\n                let netFlowAcc = revenueAcc - costOfGoodsAcc - expensesAcc;\n                let startBalance = acc.globalBalance !== undefined ? acc.globalBalance : (prevData && prevData.closingBalances ? (prevData.closingBalances[acc.id] || 0) : 0);\n                if (startBalance === 0 && acc.globalBalance === undefined && !prevData) startBalance = finalBal - netFlowAcc;\n                let calculatedFinal = startBalance + netFlowAcc;\n                accountsText += `\ud83d\udd39 *${acc.name}* (${acc.currency})\\n   Inicio: ${parseFloat(startBalance).toFixed(2)} | Final Calc: ${calculatedFinal.toFixed(2)} | Real: ${finalBal.toFixed(2)}\\n`;\n                return `<div class=\"flex justify-between border-b pb-1 text-xs\"><span>${acc.name}<\/span><span><strong>${finalBal.toFixed(2)}<\/strong> (Calc: ${calculatedFinal.toFixed(2)})<\/span><\/div>`;\n            }).join('');\n            document.getElementById('closing-accounts-report').innerHTML = htmlAccounts;\n\n            let clientsText = \"\";\n            const customers = [...new Set(d.sales.map(s => s.customer))];\n            customers.forEach(cust => {\n                let custSalesUSD = 0; let custCostCUP = 0; let custIncomeCUP = 0; let details = \"\";\n                d.sales.filter(s => s.customer === cust).forEach(s => {\n                    const sRate = s.saleRate || globalRate;\n                    custSalesUSD += s.totalUSD; custCostCUP += s.totalCostCUP;\n                    custIncomeCUP += (s.totalUSD * sRate);\n                    s.items.forEach(i => {\n                        const iProfit = ((i.priceUSD * sRate) - i.costCUP) * i.quantity;\n                        details += `   - ${i.productName} (x${i.quantity}): Costo $${i.costCUP} vs Venta $${i.priceUSD} USD -> Ganancia: ${formatMoney(iProfit)}\\n`;\n                    });\n                    if(s.saleRate && s.saleRate !== globalRate) details += `   [\ud83d\udcb1] Tasa Especial: 1 USD = ${s.saleRate} CUP\\n`;\n                    if(s.discountUSD > 0) details += `   [\ud83d\udd3b] Descuento: -$${s.discountUSD} USD (-${formatMoney(s.discountUSD * sRate)})\\n`;\n                    if(s.tipUSD > 0) details += `   [\ud83d\udc9a] Propina: +$${s.tipUSD} USD (+${formatMoney(s.tipUSD * sRate)})\\n`;\n                });\n                clientsText += `\ud83d\udc64 ${cust} | Total: $${custSalesUSD.toFixed(2)} | Ganancia: ${formatMoney(custIncomeCUP - custCostCUP)}\\n${details}\\n`;\n            });\n\n            const txt = `REPORTE FINANCIERO FAGALES \ud83d\udcca\\n\ud83d\udcc5 ${currentDate} | Tasa Gen: ${globalRate} CUP\\n\\n\u2705 UTILIDAD NETA: ${formatMoney(netProfit)}\\n\ud83d\ude4f DIEZMO (10%): ${formatMoney(tithe)}\\n\\nINVENTARIO:\\n\ud83d\udce6 Costo: ${formatMoney(invCostTotal)}\\n\ud83d\udcb0 Venta Est: ${formatMoney(invSaleTotal)}\\n\\nRESULTADOS (P&L)\\n(+) Ventas: $${totalSalesUSD.toFixed(2)} (~${formatMoney(incomeCUP)})\\n(-) Costo: ${formatMoney(totalCostCUP)}\\n(=) Ganancia Bruta: ${formatMoney(grossProfit)}\\n(-) Gastos Ops: ${formatMoney(opsExpenses)}\\n\\nDETALLE VENTAS:\\n${clientsText || \"Sin ventas hoy.\"}\\n------------------------------\\n\ud83d\udcb0 REPARTO (${formatMoney(distributable)})\\n   \ud83c\udfe2 Fagales: ${formatMoney(distComp)}\\n   \ud83d\udc64 Due\u00f1o: ${formatMoney(distOwn)}\\n   \ud83c\udfd7\ufe0f Infra: ${formatMoney(distInf)}\\n\\nCASH FLOW \ud83c\udfe6\\n${accountsText}\\n\\nDETALLE MOVIMIENTOS\\n${movementsText || \"Sin movimientos.\"}\\n\\n\ud83d\udcdd Nota: ${d.notes}`;\n            document.getElementById('report-text').innerText = txt;\n        }\n\n        \/\/ --- STATS ---\n        window.renderStats = () => {\n            const start = document.getElementById('stats-start').value;\n            const end = document.getElementById('stats-end').value;\n            if(!start || !end) return;\n            document.getElementById('stats-content').classList.remove('hidden');\n            document.getElementById('stats-empty').classList.add('hidden');\n            let totSalesUSD = 0, totCost = 0, totGross = 0, totNet = 0;\n            let prodCounts = {}; let clientRanking = {};\n\n            Object.keys(db.history).forEach(date => {\n                if (date >= start && date <= end) {\n                    const d = db.history[date];\n                    const globalRate = d.rate || 1;\n                    let dailySalesUSD = 0; let dailyCost = 0; let dailyIncomeCUP = 0;\n                    d.sales.forEach(s => {\n                        const sRate = s.saleRate || globalRate;\n                        dailySalesUSD += s.totalUSD; dailyCost += s.totalCostCUP;\n                        dailyIncomeCUP += (s.totalUSD * sRate);\n                        if(!clientRanking[s.customer]) clientRanking[s.customer] = 0;\n                        clientRanking[s.customer] += s.totalUSD;\n                        s.items.forEach(i => {\n                            if(!prodCounts[i.productName]) prodCounts[i.productName] = 0;\n                            prodCounts[i.productName] += i.quantity;\n                        });\n                    });\n                    let dailyOps = 0;\n                    d.expenses.forEach(e => {\n                         if(!e.isIncome && (e.type === 'OPERATIVO' || e.type === 'AJUSTE')) {\n                             let val = e.amount;\n                             const acc = db.config.accounts.find(a => a.id === e.accountId);\n                             if(acc && acc.currency === 'USD') val = e.amount * globalRate;\n                             dailyOps += val;\n                         }\n                    });\n                    const dailyGross = dailyIncomeCUP - dailyCost;\n                    totSalesUSD += dailySalesUSD; totCost += dailyCost; totGross += dailyGross; totNet += (dailyGross - dailyOps);\n                }\n            });\n            document.getElementById('stat-net').innerText = formatMoney(totNet);\n            document.getElementById('stat-gross').innerText = formatMoney(totGross);\n            document.getElementById('stat-cost').innerText = formatMoney(totCost);\n            document.getElementById('stat-tithe').innerText = formatMoney(totNet > 0 ? totNet * 0.1 : 0);\n            const topProds = Object.entries(prodCounts).sort((a,b) => b[1]-a[1]).slice(0, 5);\n            document.getElementById('stat-products-list').innerHTML = topProds.map((p, i) => `<div class=\"flex justify-between border-b pb-1\"><span>${i+1}. ${p[0]}<\/span><span class=\"font-bold\">${p[1]} un.<\/span><\/div>`).join('');\n            const topClients = Object.entries(clientRanking).sort((a,b) => b[1]-a[1]).slice(0, 5);\n            document.getElementById('stat-clients-list').innerHTML = topClients.map((c, i) => `<div class=\"flex justify-between border-b pb-1\"><span>${i+1}. ${c[0]}<\/span><span class=\"font-bold text-emerald-600\">$${c[1].toFixed(2)}<\/span><\/div>`).join('');\n        };\n\n        \/\/ --- UTILS ---\n        window.exportData = () => {\n            const blob = new Blob([JSON.stringify(db)], {type: 'application\/json'});\n            const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = `Fagales_FULL_${currentDate}.json`; a.click();\n        };\n        window.exportDailyData = () => {\n            const blob = new Blob([JSON.stringify({date: currentDate, data: getDailyData()})], {type: 'application\/json'});\n            const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = `Fagales_DIA_${currentDate}.json`; a.click();\n        };\n        window.importData = (input) => {\n            const f = input.files[0]; if(!f) return;\n            const r = new FileReader();\n            r.onload = (e) => { \n                try {\n                    const json = JSON.parse(e.target.result);\n                    if(json.history && json.config) { if(confirm(\"\u00bfRestaurar TODO?\")) { db = json; saveDB(); location.reload(); } }\n                    else if(json.date && json.data) { if(confirm(`\u00bfImportar d\u00eda ${json.date}?`)) { db.history[json.date] = json.data; saveDB(); location.reload(); } }\n                } catch(err) { showToast(\"Error JSON\"); }\n            };\n            r.readAsText(f);\n        };\n\n        function updateLists() {\n            document.getElementById('clients-datalist').innerHTML = db.config.clients.map(c => `<option value=\"${c.name}\">`).join('');\n            const opts = db.config.accounts.map(a => `<option value=\"${a.id}\">${a.name} (${a.currency})<\/option>`).join('');\n            document.getElementById('sale-account').innerHTML = opts;\n            document.getElementById('mov-account').innerHTML = opts;\n            if(db.config.defaultAccountId) {\n                document.getElementById('sale-account').value = db.config.defaultAccountId;\n                document.getElementById('mov-account').value = db.config.defaultAccountId;\n            }\n            document.getElementById('config-accounts-list').innerHTML = db.config.accounts.map(a => {\n                const isDefault = a.id === db.config.defaultAccountId;\n                return `<div class=\"flex justify-between items-center p-2 bg-slate-50 border border-slate-200 rounded text-xs\"><span class=\"font-bold flex items-center gap-2\">${a.name} (${a.currency}) ${isDefault ? '<span class=\"text-[9px] bg-yellow-100 text-yellow-700 px-1 rounded border border-yellow-200\">DEF<\/span>' : ''}<\/span><div class=\"flex items-center gap-2\"><button onclick=\"setDefaultAccount(${a.id})\" class=\"text-lg transition\" title=\"Hacer Principal\"><i class=\"${isDefault ? 'ph-fill ph-star text-yellow-500' : 'ph-bold ph-star text-slate-300 hover:text-yellow-400'}\"><\/i><\/button><button onclick=\"delAccount(${a.id})\" class=\"text-red-400 hover:text-red-600\"><i class=\"ph-bold ph-trash\"><\/i><\/button><\/div><\/div>`;\n            }).join('');\n        }\n        \n        window.setDefaultAccount = (id) => { db.config.defaultAccountId = id; saveDB(); updateLists(); showToast(\"\u2b50 Principal\"); };\n        window.addAccount = () => {\n            const name = document.getElementById('new-acc-name').value;\n            const cur = document.getElementById('new-acc-currency').value;\n            if(name) { db.config.accounts.push({ id: Date.now(), name, currency: cur }); saveDB(); updateLists(); refreshUI(); }\n        };\n        window.delAccount = (id) => {\n            if(confirm(\"\u00bfBorrar?\")) { db.config.accounts = db.config.accounts.filter(a => a.id !== id); saveDB(); updateLists(); refreshUI(); }\n        };\n\n        function refreshUI() {\n            const d = getDailyData();\n            const globalRate = d.rate || 1;\n            document.getElementById('daily-sales-body').innerHTML = d.sales.slice().reverse().map(s => {\n                const sRate = s.saleRate || globalRate;\n                const itemsDetails = s.items.map(i => {\n                    const profitTotalCUP = ((i.priceUSD * sRate) - i.costCUP) * i.quantity;\n                    return `<div class=\"text-[10px] text-slate-500 pl-4 border-l-2 border-slate-200 ml-1 mb-1\">${i.productName} (x${i.quantity}) <span class=\"mx-1 text-slate-300\">|<\/span> Venta: $${i.priceUSD} (Tasa: ${sRate}) <span class=\"mx-1 text-slate-300\">|<\/span> Ganancia: <span class=\"font-bold ${profitTotalCUP >= 0 ? 'text-green-600' : 'text-red-500'}\">${profitTotalCUP.toFixed(0)} CUP<\/span><\/div>`;\n                }).join('');\n                let extraDetails = '';\n                if(s.discountUSD > 0) extraDetails += `<div class=\"text-[10px] text-red-500 font-bold pl-4 ml-1 mb-1\">\ud83d\udd3b Descuento: -$${s.discountUSD}<\/div>`;\n                if(s.tipUSD > 0) extraDetails += `<div class=\"text-[10px] text-emerald-500 font-bold pl-4 ml-1 mb-1\">\ud83d\udc9a Propina: +$${s.tipUSD}<\/div>`;\n                return `<tr class=\"hover:bg-slate-50 border-b border-slate-100\"><td class=\"px-3 py-2\"><div class=\"font-bold text-slate-800\">${s.customer}<\/div><div class=\"mt-1\">${itemsDetails}${extraDetails}<\/div><\/td><td class=\"px-3 py-2 text-right font-mono font-bold text-indigo-700 align-top pt-3\">$${s.totalUSD.toFixed(2)}<\/td><td class=\"px-3 py-2 text-center align-top pt-3\"><button onclick=\"editSale(${s.id})\" class=\"text-indigo-500 mr-2\"><i class=\"ph-bold ph-pencil\"><\/i><\/button><button onclick=\"delSale(${s.id})\" class=\"text-red-400 hover:text-red-600\"><i class=\"ph-bold ph-trash\"><\/i><\/button><\/td><\/tr>`;\n            }).join('');\n            document.getElementById('movements-list').innerHTML = d.expenses.slice().reverse().map(e => `<div class=\"flex justify-between items-center bg-slate-50 p-2 rounded border border-slate-200 text-xs\"><div><span class=\"font-bold ${e.isIncome?'text-green-600':'text-red-600'}\">${e.isIncome?'+':'-'} ${e.type}<\/span><span class=\"text-slate-500 ml-1\">${e.reason}<\/span><\/div><div class=\"flex items-center\"><div class=\"font-mono font-bold text-slate-700 mr-3\">${e.amount.toFixed(2)}<\/div><button onclick=\"editMov(${e.id})\" class=\"text-indigo-500 mr-2\"><i class=\"ph-bold ph-pencil\"><\/i><\/button><button onclick=\"delMov(${e.id})\" class=\"text-red-400\"><i class=\"ph-bold ph-trash\"><\/i><\/button><\/div><\/div>`).join('');\n            document.getElementById('daily-notes').value = d.notes;\n            document.getElementById('daily-notes').onchange = (e) => { d.notes = e.target.value; saveDB(); };\n            if(document.getElementById('tab-dashboard').classList.contains('active')) renderDashboard();\n            if(document.getElementById('tab-reports').classList.contains('active')) generateReport();\n        }\n        \n        window.delSale = (id) => { if(confirm(\"\u00bfBorrar?\")) { const d = getDailyData(); d.sales = d.sales.filter(x => x.id !== id); saveDB(); refreshUI(); }};\n        window.delMov = (id) => { if(confirm(\"\u00bfBorrar?\")) { const d = getDailyData(); d.expenses = d.expenses.filter(x => x.id !== id); saveDB(); refreshUI(); }};\n        function formatMoney(n) { return (n||0).toLocaleString('es-CU', {style:'currency', currency:'CUP'}); }\n        function showToast(m) { const t = document.getElementById('toast'); document.getElementById('toast-msg').innerText = m; t.classList.remove('translate-x-full', 'opacity-0'); setTimeout(() => t.classList.add('translate-x-full', 'opacity-0'), 3000); }\n        window.copyReport = () => { navigator.clipboard.writeText(document.getElementById('report-text').innerText); showToast(\"\ud83d\udccb Copiado\"); };\n        window.fetchRemoteData = async () => { if(confirm(\"\u26a0\ufe0f \u00bfDescargar?\")) { try { const res = await fetch('https:\/\/api.allorigins.win\/raw?url=' + encodeURIComponent('https:\/\/www.fagales360.com\/data\/FM.json')); const json = await res.json(); db = json; saveDB(); location.reload(); } catch(e) { showToast(\"Error\"); } } };\n    <\/script>\n<\/body>\n<\/html>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>FagalesMarket v9.9 Freedom FagalesMarket v9.9 Freedom &#8230; \ud83d\udcc5 Fecha de Trabajo \ud83d\udcb1 Tasa de Cambio General (1 USD = ? [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-6","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/utiles.fagales360.com\/index.php?rest_route=\/wp\/v2\/pages\/6","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/utiles.fagales360.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/utiles.fagales360.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/utiles.fagales360.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/utiles.fagales360.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6"}],"version-history":[{"count":33,"href":"https:\/\/utiles.fagales360.com\/index.php?rest_route=\/wp\/v2\/pages\/6\/revisions"}],"predecessor-version":[{"id":116,"href":"https:\/\/utiles.fagales360.com\/index.php?rest_route=\/wp\/v2\/pages\/6\/revisions\/116"}],"wp:attachment":[{"href":"https:\/\/utiles.fagales360.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}