{"id":134,"date":"2026-04-25T17:50:46","date_gmt":"2026-04-25T17:50:46","guid":{"rendered":"https:\/\/cashchat.se\/dir\/?page_id=134"},"modified":"2026-04-25T20:52:00","modified_gmt":"2026-04-25T20:52:00","slug":"stats","status":"publish","type":"page","link":"https:\/\/cashchat.se\/dir\/stats\/","title":{"rendered":"Stats"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.5, user-scalable=yes\">\n    <title>URA Tax Dashboard | Modern Income &#038; Expense<\/title>\n    <!-- Chart.js for data visualization -->\n    <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js@4.4.1\/dist\/chart.umd.min.js\"><\/script>\n    <style>\n        :root {\n            --primary: #0f4c2f;\n            --primary-light: #1a6b40;\n            --primary-soft: #e8f5e9;\n            --accent: #d49c3d;\n            --accent-light: #f7e3c0;\n            --bg: #f8faf9;\n            --surface: #ffffff;\n            --surface-alt: #f1f3f2;\n            --text: #1a1f1c;\n            --text-secondary: #5f6b64;\n            --text-muted: #8a9490;\n            --border: #dde1df;\n            --danger: #c0392b;\n            --success: #1d7a3f;\n            --warning: #b76e0e;\n            --info: #2c5f8a;\n            --shadow-sm: 0 1px 2px rgba(0,0,0,0.03);\n            --shadow: 0 4px 12px rgba(0,0,0,0.04);\n            --shadow-lg: 0 12px 28px rgba(0,0,0,0.08);\n            --radius-sm: 8px;\n            --radius: 14px;\n            --radius-lg: 20px;\n            --transition: 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n        }\n\n        * { margin: 0; padding: 0; box-sizing: border-box; }\n\n        body {\n            font-family: 'Inter', system-ui, -apple-system, sans-serif;\n            background: var(--bg);\n            color: var(--text);\n            display: flex;\n            min-height: 100vh;\n            line-height: 1.5;\n            overflow-x: hidden;\n        }\n\n        \/* STARTUP OVERLAY *\/\n        .startup-overlay {\n            position: fixed; inset: 0; background: rgba(10,20,15,0.8);\n            backdrop-filter: blur(10px); display: flex; align-items: center;\n            justify-content: center; z-index: 9999; padding: 20px;\n        }\n        .startup-card {\n            background: var(--surface); border-radius: var(--radius-lg);\n            box-shadow: var(--shadow-lg); padding: 36px 32px;\n            max-width: 460px; width: 100%; text-align: center;\n        }\n        .startup-card h2 { font-size: 1.7rem; font-weight: 700; color: var(--primary); margin-bottom: 6px; }\n        .startup-card .sub { color: var(--text-secondary); margin-bottom: 28px; font-size: 0.9rem; }\n        .startup-card .form-group { margin-bottom: 18px; text-align: left; }\n        .startup-card label { font-weight: 600; font-size: 0.8rem; color: var(--text-secondary); display: block; margin-bottom: 5px; }\n        .startup-card input { width: 100%; padding: 13px 15px; border: 2px solid var(--border); border-radius: var(--radius-sm); font-size: 0.95rem; background: #fafbfc; transition: var(--transition); }\n        .startup-card input:focus { border-color: var(--primary); outline: none; box-shadow: 0 0 0 3px rgba(15,76,47,0.1); }\n        .sponsor-link { display: inline-block; margin-top: 8px; color: var(--primary); font-weight: 600; text-decoration: none; font-size: 0.8rem; border: 1.5px solid var(--primary); padding: 6px 14px; border-radius: 20px; transition: var(--transition); }\n        .sponsor-link:hover { background: var(--primary); color: #fff; }\n        .startup-error { color: var(--danger); font-size: 0.8rem; min-height: 22px; margin-top: 4px; }\n\n        \/* SIDEBAR *\/\n        .sidebar {\n            width: 260px; min-width: 260px; background: #0a1f14;\n            backdrop-filter: blur(10px); color: #d0d8d4; display: flex;\n            flex-direction: column; height: 100vh; position: sticky; top: 0;\n            box-shadow: 2px 0 24px rgba(0,0,0,0.3); z-index: 100;\n            transition: transform var(--transition);\n        }\n        .sidebar-header { padding: 22px 20px; border-bottom: 1px solid rgba(255,255,255,0.08); display: flex; align-items: center; gap: 12px; }\n        .sidebar-logo { width: 42px; height: 42px; background: var(--accent); border-radius: 12px; display: flex; align-items: center; justify-content: center; font-weight: 800; font-size: 1.3rem; color: #0a1f14; }\n        .sidebar-title { font-size: 1rem; font-weight: 700; color: #fff; letter-spacing: -0.3px; }\n        .sidebar-subtitle { font-size: 0.7rem; color: #8a9a90; }\n        .sidebar-nav { flex: 1; padding: 16px 12px; display: flex; flex-direction: column; gap: 6px; }\n        .nav-item { display: flex; align-items: center; gap: 12px; padding: 13px 18px; border-radius: 12px; cursor: pointer; font-weight: 500; font-size: 0.9rem; transition: var(--transition); color: #b0bcb4; background: none; border: none; width: 100%; text-align: left; }\n        .nav-item:hover { background: rgba(255,255,255,0.05); color: #e8ece9; }\n        .nav-item.active { background: var(--primary-light); color: #fff; font-weight: 600; box-shadow: 0 8px 16px rgba(0,0,0,0.2); }\n        .nav-icon { font-size: 1.2rem; width: 24px; text-align: center; }\n\n        \/* MAIN *\/\n        .main { flex: 1; display: flex; flex-direction: column; min-height: 100vh; overflow-x: hidden; }\n        .topbar { background: var(--surface); padding: 12px 28px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid var(--border); gap: 16px; position: sticky; top: 0; z-index: 50; box-shadow: var(--shadow-sm); }\n        .topbar-left { display: flex; align-items: center; gap: 16px; }\n        .menu-toggle { display: none; background: none; border: none; font-size: 1.6rem; cursor: pointer; color: var(--text); }\n        .page-title { font-size: 1.4rem; font-weight: 700; letter-spacing: -0.4px; }\n        .company-badge { background: var(--primary-soft); color: var(--primary); padding: 5px 16px; border-radius: 20px; font-weight: 600; font-size: 0.8rem; display: flex; align-items: center; gap: 6px; }\n        .topbar-right { display: flex; align-items: center; gap: 20px; }\n        .date-display { font-size: 0.85rem; color: var(--text-secondary); font-weight: 500; }\n\n        .content { padding: 24px 28px; display: flex; flex-direction: column; gap: 24px; flex: 1; }\n\n        \/* STATS ROW *\/\n        .stats-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 18px; }\n        .stat-card { background: var(--surface); border-radius: var(--radius); padding: 22px 24px; box-shadow: var(--shadow); display: flex; align-items: center; gap: 18px; transition: var(--transition); border: 1px solid transparent; }\n        .stat-card:hover { box-shadow: var(--shadow-lg); border-color: var(--border); transform: translateY(-2px); }\n        .stat-icon { width: 52px; height: 52px; border-radius: 14px; display: flex; align-items: center; justify-content: center; font-size: 1.8rem; }\n        .stat-icon.income { background: #e6f7ee; color: #1d7a3f; }\n        .stat-icon.expense { background: #fde8e8; color: #c0392b; }\n        .stat-icon.balance { background: #eef2ff; color: #2c5f8a; }\n        .stat-icon.entries { background: #fff3e0; color: #b76e0e; }\n        .stat-info .stat-label { font-size: 0.78rem; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.5px; font-weight: 600; }\n        .stat-info .stat-value { font-size: 1.7rem; font-weight: 700; letter-spacing: -0.6px; }\n\n        \/* GRID LAYOUTS *\/\n        .two-col { display: grid; grid-template-columns: 1fr 1fr; gap: 22px; }\n        .card { background: var(--surface); border-radius: var(--radius); box-shadow: var(--shadow); padding: 22px 24px; }\n        .card-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 18px; flex-wrap: wrap; gap: 10px; }\n        .card-title { font-size: 1.1rem; font-weight: 700; }\n\n        \/* CHART *\/\n        .chart-container { width: 100%; max-height: 240px; display: flex; align-items: center; justify-content: center; }\n\n        \/* TABLE *\/\n        .table-wrap { overflow-x: auto; border-radius: var(--radius-sm); }\n        table { width: 100%; border-collapse: collapse; font-size: 0.85rem; min-width: 700px; }\n        table th, table td { padding: 14px 16px; text-align: left; border-bottom: 1px solid var(--border); }\n        table th { font-weight: 700; color: var(--text-secondary); font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.5px; background: var(--surface-alt); }\n        table tbody tr:hover { background: #f9fbfa; }\n        .type-badge { padding: 4px 12px; border-radius: 20px; font-size: 0.7rem; font-weight: 700; }\n        .type-badge.income { background: #e6f7ee; color: #1d7a3f; }\n        .type-badge.expense { background: #fde8e8; color: #c0392b; }\n        .action-btns { display: flex; gap: 8px; }\n\n        \/* BUTTONS *\/\n        .btn { padding: 10px 18px; border-radius: var(--radius-sm); font-weight: 600; font-size: 0.85rem; cursor: pointer; border: none; transition: var(--transition); display: inline-flex; align-items: center; gap: 6px; background: none; }\n        .btn-primary { background: var(--primary); color: #fff; }\n        .btn-primary:hover { background: #0a3a22; box-shadow: 0 6px 14px rgba(15,76,47,0.3); transform: translateY(-1px); }\n        .btn-outline { background: #fff; color: var(--primary); border: 1.5px solid var(--primary); }\n        .btn-outline:hover { background: var(--primary-soft); }\n        .btn-danger { background: #fff; color: var(--danger); border: 1.5px solid var(--danger); }\n        .btn-danger:hover { background: #fdeded; }\n        .btn-sm { padding: 6px 12px; font-size: 0.75rem; }\n        .btn-accent { background: var(--accent); color: #0a1f14; font-weight: 700; }\n        .btn-accent:hover { background: #c48e2d; box-shadow: 0 4px 12px rgba(212,156,61,0.3); }\n\n        \/* MODAL *\/\n        .modal-overlay { display: none; position: fixed; inset: 0; background: rgba(0,0,0,0.5); align-items: center; justify-content: center; z-index: 500; padding: 20px; backdrop-filter: blur(2px); }\n        .modal-overlay.active { display: flex; }\n        .modal { background: var(--surface); border-radius: var(--radius-lg); padding: 28px; max-width: 520px; width: 100%; box-shadow: var(--shadow-lg); }\n        .modal h3 { margin-bottom: 20px; font-weight: 700; }\n\n        \/* TOAST *\/\n        .toast { position: fixed; bottom: 30px; right: 30px; background: #1a1f1c; color: #fff; padding: 14px 22px; border-radius: 10px; font-weight: 600; z-index: 9999; opacity: 0; transform: translateY(20px); pointer-events: none; transition: all 0.35s ease; }\n        .toast.show { opacity: 1; transform: translateY(0); }\n        .toast.success { background: #1d7a3f; }\n        .toast.error { background: #c0392b; }\n\n        \/* PRINT *\/\n        @media print { .sidebar, .topbar, .btn, .menu-toggle, .modal-overlay, .toast, .startup-overlay { display: none !important; } .main { overflow: visible; } .content { padding: 0; } }\n\n        \/* RESPONSIVE *\/\n        @media (max-width: 1024px) {\n            .two-col { grid-template-columns: 1fr; }\n        }\n        @media (max-width: 768px) {\n            .sidebar { position: fixed; left: 0; top: 0; height: 100vh; transform: translateX(-100%); z-index: 200; transition: transform 0.3s; }\n            .sidebar.open { transform: translateX(0); }\n            .menu-toggle { display: block; }\n            .overlay { display: none; position: fixed; inset: 0; background: rgba(0,0,0,0.4); z-index: 150; }\n            .overlay.active { display: block; }\n            .content { padding: 16px; }\n            .stats-row { grid-template-columns: 1fr 1fr; }\n        }\n        @media (max-width: 480px) {\n            .stats-row { grid-template-columns: 1fr; }\n            .topbar { padding: 10px 16px; }\n        }\n    <\/style>\n<\/head>\n<body>\n    <!-- STARTUP OVERLAY -->\n    <div class=\"startup-overlay\" id=\"startupOverlay\">\n        <div class=\"startup-card\">\n            <h2>\ud83d\udd10 Company Access<\/h2>\n            <p class=\"sub\">Enter your details to access the URA dashboard<\/p>\n            <div class=\"form-group\">\n                <label>Company Name *<\/label>\n                <input type=\"text\" id=\"companyNameInput\" placeholder=\"Registered company name\">\n            <\/div>\n            <div class=\"form-group\">\n                <label>Sponsor Code *<\/label>\n                <input type=\"text\" id=\"sponsorCodeInput\" placeholder=\"Enter sponsor code\">\n                <a href=\"https:\/\/cashchatbank.com\" target=\"_blank\" rel=\"noopener\" class=\"sponsor-link\">\ud83d\udd17 Get Sponsor Code<\/a>\n            <\/div>\n            <div class=\"startup-error\" id=\"startupError\"><\/div>\n            <button class=\"btn btn-primary btn-block\" id=\"startupSubmit\" style=\"width:100%;\">\ud83d\ude80 Access Dashboard<\/button>\n        <\/div>\n    <\/div>\n\n    <!-- MOBILE OVERLAY -->\n    <div class=\"overlay\" id=\"overlay\"><\/div>\n\n    <!-- SIDEBAR -->\n    <aside class=\"sidebar\" id=\"sidebar\">\n        <div class=\"sidebar-header\">\n            <div class=\"sidebar-logo\">URA<\/div>\n            <div>\n                <div class=\"sidebar-title\">Tax Dashboard<\/div>\n                <div class=\"sidebar-subtitle\">Uganda Revenue Authority<\/div>\n            <\/div>\n        <\/div>\n        <nav class=\"sidebar-nav\">\n            <button class=\"nav-item active\" data-page=\"dashboard\"><span class=\"nav-icon\">\ud83d\udcca<\/span> Dashboard<\/button>\n            <button class=\"nav-item\" data-page=\"income\"><span class=\"nav-icon\">\ud83d\udcb0<\/span> Income<\/button>\n            <button class=\"nav-item\" data-page=\"expense\"><span class=\"nav-icon\">\ud83d\udccb<\/span> Expenses<\/button>\n            <button class=\"nav-item\" data-page=\"transactions\"><span class=\"nav-icon\">\ud83d\udcdc<\/span> All Records<\/button>\n        <\/nav>\n    <\/aside>\n\n    <!-- MAIN -->\n    <div class=\"main\">\n        <header class=\"topbar\">\n            <div class=\"topbar-left\">\n                <button class=\"menu-toggle\" id=\"menuToggle\">\u2630<\/button>\n                <span class=\"page-title\" id=\"pageTitle\">Dashboard<\/span>\n                <span class=\"company-badge\" id=\"companyBadge\">\ud83c\udfe2 Company<\/span>\n            <\/div>\n            <div class=\"topbar-right\">\n                <span class=\"date-display\" id=\"currentDate\"><\/span>\n                <button class=\"btn btn-accent btn-sm\" id=\"quickAddBtn\">\u2795 Quick Entry<\/button>\n            <\/div>\n        <\/header>\n        <div class=\"content\" id=\"pageContent\"><\/div>\n    <\/div>\n\n    <!-- QUICK ENTRY MODAL -->\n    <div class=\"modal-overlay\" id=\"quickEntryModal\">\n        <div class=\"modal\">\n            <h3>\u26a1 Quick Transaction<\/h3>\n            <form id=\"quickEntryForm\" class=\"form-grid\">\n                <div class=\"form-group\">\n                    <label>Type<\/label>\n                    <select id=\"quickType\" class=\"form-select\" required>\n                        <option value=\"income\">Income<\/option>\n                        <option value=\"expense\">Expense<\/option>\n                    <\/select>\n                <\/div>\n                <div class=\"form-group\">\n                    <label>Date<\/label>\n                    <input type=\"date\" id=\"quickDate\" class=\"form-input\" required>\n                <\/div>\n                <div class=\"form-group\">\n                    <label>Category<\/label>\n                    <select id=\"quickCategory\" class=\"form-select\" required><\/select>\n                <\/div>\n                <div class=\"form-group\">\n                    <label>Amount (UGX)<\/label>\n                    <input type=\"number\" id=\"quickAmount\" class=\"form-input\" min=\"1\" step=\"0.01\" required>\n                <\/div>\n                <div class=\"form-group full\">\n                    <label>Description<\/label>\n                    <textarea id=\"quickDescription\" class=\"form-textarea\" rows=\"2\"><\/textarea>\n                <\/div>\n                <div class=\"form-group full btn-group\">\n                    <button type=\"submit\" class=\"btn btn-primary\">\ud83d\udcbe Save<\/button>\n                    <button type=\"button\" class=\"btn btn-outline\" id=\"closeQuickModal\">Cancel<\/button>\n                <\/div>\n            <\/form>\n        <\/div>\n    <\/div>\n\n    <!-- EDIT MODAL -->\n    <div class=\"modal-overlay\" id=\"editModal\">\n        <div class=\"modal\">\n            <h3>\u270f\ufe0f Edit Transaction<\/h3>\n            <form id=\"editForm\" class=\"form-grid\">\n                <input type=\"hidden\" id=\"editId\">\n                <div class=\"form-group\"><label>Date<\/label><input type=\"date\" id=\"editDate\" class=\"form-input\" required><\/div>\n                <div class=\"form-group\"><label>Category<\/label><select id=\"editCategory\" class=\"form-select\" required><\/select><\/div>\n                <div class=\"form-group\"><label>Amount (UGX)<\/label><input type=\"number\" id=\"editAmount\" class=\"form-input\" min=\"1\" step=\"0.01\" required><\/div>\n                <div class=\"form-group\"><label>Status<\/label><select id=\"editStatus\" class=\"form-select\"><option value=\"completed\">Completed<\/option><option value=\"pending\">Pending<\/option><\/select><\/div>\n                <div class=\"form-group full\"><label>Description<\/label><textarea id=\"editDescription\" class=\"form-textarea\" rows=\"2\"><\/textarea><\/div>\n                <div class=\"form-group full btn-group\">\n                    <button type=\"submit\" class=\"btn btn-primary\">Update<\/button>\n                    <button type=\"button\" class=\"btn btn-outline\" id=\"closeEditModal\">Cancel<\/button>\n                <\/div>\n            <\/form>\n        <\/div>\n    <\/div>\n\n    <div class=\"toast\" id=\"toast\"><\/div>\n\n    <script>\n        (() => {\n            \/\/ URA Categories\n            const URA_INCOME = ['Business Income','Employment Income','Rental Income','Agricultural Income','Investment Income (Dividends)','Investment Income (Interest)','Capital Gains','Royalty Income','Professional \/ Consultancy Fees','Other Income'];\n            const URA_EXPENSE = ['Cost of Goods Sold','Salaries and Wages','Rent Expenses','Repairs and Maintenance','Bad Debts Written Off','Depreciation & Amortization','Interest Expenses','Insurance Premiums','Professional & Legal Fees','Office Supplies & Stationery','Transport & Travel Expenses','Advertising & Marketing','Utilities (Electricity, Water)','Communication (Internet, Airtime)','Taxes, Licenses & Permits','Staff Welfare & Training','Security Expenses','Cleaning & Sanitation','Bank Charges','Other Allowable Expenses'];\n\n            let currentCompany = '';\n            let transactions = JSON.parse(localStorage.getItem('ura_modern_transactions')) || [];\n            let currentPage = 'dashboard';\n            let chartInstance = null;\n\n            \/\/ DOM\n            const startupOverlay = document.getElementById('startupOverlay');\n            const companyNameInput = document.getElementById('companyNameInput');\n            const sponsorCodeInput = document.getElementById('sponsorCodeInput');\n            const startupError = document.getElementById('startupError');\n            const companyBadge = document.getElementById('companyBadge');\n            const pageTitle = document.getElementById('pageTitle');\n            const pageContent = document.getElementById('pageContent');\n            const toast = document.getElementById('toast');\n            const sidebar = document.getElementById('sidebar');\n            const overlay = document.getElementById('overlay');\n            const menuToggle = document.getElementById('menuToggle');\n            const quickAddBtn = document.getElementById('quickAddBtn');\n            const quickEntryModal = document.getElementById('quickEntryModal');\n            const editModal = document.getElementById('editModal');\n            const navItems = document.querySelectorAll('.nav-item');\n\n            \/\/ Helpers\n            const formatCurrency = (x) => 'UGX ' + Number(x).toLocaleString('en-UG');\n            const formatDate = (d) => new Date(d).toLocaleDateString('en-UG', { year:'numeric', month:'short', day:'numeric' });\n            const today = () => new Date().toISOString().split('T')[0];\n            const showToast = (msg, type='success') => {\n                toast.textContent = msg; toast.className = `toast ${type} show`;\n                clearTimeout(toast._t); toast._t = setTimeout(() => toast.classList.remove('show'), 2800);\n            };\n            const save = () => localStorage.setItem('ura_modern_transactions', JSON.stringify(transactions));\n            const compTx = () => transactions.filter(t => t.company === currentCompany);\n            const stats = () => {\n                const tx = compTx();\n                let inc=0, exp=0;\n                tx.forEach(t => t.type==='income' ? inc+=t.amount : exp+=t.amount);\n                return { inc, exp, bal: inc-exp, count: tx.length };\n            };\n\n            \/\/ Populate category dropdowns\n            const populateCategory = (select, type) => {\n                select.innerHTML = '';\n                const cats = type === 'income' ? URA_INCOME : URA_EXPENSE;\n                cats.forEach(c => { const o = document.createElement('option'); o.value=c; o.textContent=c; select.appendChild(o); });\n            };\n\n            \/\/ Chart rendering\n            const renderChart = () => {\n                const ctx = document.getElementById('dashboardChart')?.getContext('2d');\n                if (!ctx) return;\n                if (chartInstance) chartInstance.destroy();\n                const s = stats();\n                chartInstance = new Chart(ctx, {\n                    type: 'bar',\n                    data: {\n                        labels: ['Income', 'Expenses'],\n                        datasets: [{\n                            label: 'Amount (UGX)',\n                            data: [s.inc, s.exp],\n                            backgroundColor: ['#1d7a3f', '#c0392b'],\n                            borderRadius: 8,\n                            barThickness: 36,\n                        }]\n                    },\n                    options: {\n                        responsive: true,\n                        maintainAspectRatio: false,\n                        plugins: { legend: { display: false } },\n                        scales: { y: { beginAtZero: true, ticks: { callback: v => formatCurrency(v) } } }\n                    }\n                });\n            };\n\n            \/\/ Render table\n            const renderTable = (data) => {\n                if (!data.length) return `<div class=\"empty-state\" style=\"text-align:center;padding:40px;\"><span style=\"font-size:2.5rem;\">\ud83d\udced<\/span><p>No transactions yet.<\/p><\/div>`;\n                return `\n                <div class=\"table-wrap\"><table>\n                    <thead><tr><th>Date<\/th><th>Type<\/th><th>Category<\/th><th>Description<\/th><th>Amount<\/th><th>Status<\/th><th>Actions<\/th><\/tr><\/thead>\n                    <tbody>${data.map(t=>`\n                        <tr>\n                            <td>${formatDate(t.date)}<\/td>\n                            <td><span class=\"type-badge ${t.type}\">${t.type}<\/span><\/td>\n                            <td>${t.category}<\/td>\n                            <td>${t.description || '\u2014'}<\/td>\n                            <td><strong>${formatCurrency(t.amount)}<\/strong><\/td>\n                            <td>${t.status==='completed'?'\u2705':'\u23f3'}<\/td>\n                            <td class=\"action-btns\">\n                                <button class=\"btn btn-outline btn-sm edit-btn\" data-id=\"${t.id}\">\u270f\ufe0f<\/button>\n                                <button class=\"btn btn-danger btn-sm delete-btn\" data-id=\"${t.id}\">\ud83d\uddd1\ufe0f<\/button>\n                            <\/td>\n                        <\/tr>`).join('')}\n                    <\/tbody>\n                <\/table><\/div>`;\n            };\n\n            \/\/ Dashboard\n            const renderDashboard = () => {\n                pageTitle.textContent = 'Dashboard';\n                companyBadge.innerHTML = `\ud83c\udfe2 ${currentCompany}`;\n                const s = stats();\n                pageContent.innerHTML = `\n                <div class=\"stats-row\">\n                    <div class=\"stat-card\"><div class=\"stat-icon income\">\ud83d\udcc8<\/div><div class=\"stat-info\"><div class=\"stat-label\">Total Income<\/div><div class=\"stat-value\">${formatCurrency(s.inc)}<\/div><\/div><\/div>\n                    <div class=\"stat-card\"><div class=\"stat-icon expense\">\ud83d\udcc9<\/div><div class=\"stat-info\"><div class=\"stat-label\">Total Expenses<\/div><div class=\"stat-value\">${formatCurrency(s.exp)}<\/div><\/div><\/div>\n                    <div class=\"stat-card\"><div class=\"stat-icon balance\">\u2696\ufe0f<\/div><div class=\"stat-info\"><div class=\"stat-label\">Net Balance<\/div><div class=\"stat-value\">${formatCurrency(s.bal)}<\/div><\/div><\/div>\n                    <div class=\"stat-card\"><div class=\"stat-icon entries\">\ud83d\udcdd<\/div><div class=\"stat-info\"><div class=\"stat-label\">Entries<\/div><div class=\"stat-value\">${s.count}<\/div><\/div><\/div>\n                <\/div>\n                <div class=\"two-col\">\n                    <div class=\"card\">\n                        <div class=\"card-header\"><span class=\"card-title\">\ud83d\udcca Income vs Expenses<\/span><\/div>\n                        <div class=\"chart-container\"><canvas id=\"dashboardChart\"><\/canvas><\/div>\n                    <\/div>\n                    <div class=\"card\">\n                        <div class=\"card-header\"><span class=\"card-title\">\ud83d\udd52 Recent Transactions<\/span><\/div>\n                        ${renderTable(compTx().slice(-5).reverse())}\n                    <\/div>\n                <\/div>`;\n                renderChart();\n                attachTableEvents();\n            };\n\n            \/\/ Income page\n            const renderIncome = () => {\n                pageTitle.textContent = 'Income Records';\n                companyBadge.innerHTML = `\ud83c\udfe2 ${currentCompany}`;\n                pageContent.innerHTML = `\n                <div class=\"card\">\n                    <div class=\"card-header\"><span class=\"card-title\">\ud83d\udcb0 Record Income<\/span><\/div>\n                    <form id=\"incomeForm\" class=\"form-grid\">\n                        <div class=\"form-group\"><label>Date *<\/label><input type=\"date\" class=\"form-input\" name=\"date\" value=\"${today()}\" required><\/div>\n                        <div class=\"form-group\"><label>Category *<\/label><select class=\"form-select\" name=\"category\" required>${URA_INCOME.map(c=>`<option>${c}<\/option>`).join('')}<\/select><\/div>\n                        <div class=\"form-group\"><label>Amount (UGX) *<\/label><input type=\"number\" class=\"form-input\" name=\"amount\" min=\"1\" step=\"0.01\" required><\/div>\n                        <div class=\"form-group\"><label>Status<\/label><select class=\"form-select\" name=\"status\"><option value=\"completed\">Completed<\/option><option value=\"pending\">Pending<\/option><\/select><\/div>\n                        <div class=\"form-group full\"><label>Description<\/label><textarea class=\"form-textarea\" name=\"description\"><\/textarea><\/div>\n                        <div class=\"form-group full btn-group\"><button type=\"submit\" class=\"btn btn-primary\">\ud83d\udcbe Save Income<\/button><\/div>\n                    <\/form>\n                <\/div>`;\n                document.getElementById('incomeForm').addEventListener('submit', (e) => {\n                    e.preventDefault(); const f=e.target;\n                    transactions.push({ id:'txn_'+Date.now(), type:'income', company:currentCompany, date:f.date.value, category:f.category.value, amount:+f.amount.value, status:f.status.value, description:f.description.value.trim() });\n                    save(); showToast('Income recorded'); navigateTo('dashboard');\n                });\n            };\n\n            \/\/ Expense page\n            const renderExpense = () => {\n                pageTitle.textContent = 'Expense Records';\n                companyBadge.innerHTML = `\ud83c\udfe2 ${currentCompany}`;\n                pageContent.innerHTML = `\n                <div class=\"card\">\n                    <div class=\"card-header\"><span class=\"card-title\">\ud83d\udccb Record Expense<\/span><\/div>\n                    <form id=\"expenseForm\" class=\"form-grid\">\n                        <div class=\"form-group\"><label>Date *<\/label><input type=\"date\" class=\"form-input\" name=\"date\" value=\"${today()}\" required><\/div>\n                        <div class=\"form-group\"><label>Category *<\/label><select class=\"form-select\" name=\"category\" required>${URA_EXPENSE.map(c=>`<option>${c}<\/option>`).join('')}<\/select><\/div>\n                        <div class=\"form-group\"><label>Amount (UGX) *<\/label><input type=\"number\" class=\"form-input\" name=\"amount\" min=\"1\" step=\"0.01\" required><\/div>\n                        <div class=\"form-group\"><label>Status<\/label><select class=\"form-select\" name=\"status\"><option value=\"completed\">Completed<\/option><option value=\"pending\">Pending<\/option><\/select><\/div>\n                        <div class=\"form-group full\"><label>Description<\/label><textarea class=\"form-textarea\" name=\"description\"><\/textarea><\/div>\n                        <div class=\"form-group full btn-group\"><button type=\"submit\" class=\"btn btn-primary\">\ud83d\udcbe Save Expense<\/button><\/div>\n                    <\/form>\n                <\/div>`;\n                document.getElementById('expenseForm').addEventListener('submit', (e) => {\n                    e.preventDefault(); const f=e.target;\n                    transactions.push({ id:'txn_'+Date.now(), type:'expense', company:currentCompany, date:f.date.value, category:f.category.value, amount:+f.amount.value, status:f.status.value, description:f.description.value.trim() });\n                    save(); showToast('Expense recorded'); navigateTo('dashboard');\n                });\n            };\n\n            \/\/ Transactions page with search, filter, export\n            const renderTransactions = () => {\n                pageTitle.textContent = 'All Records';\n                companyBadge.innerHTML = `\ud83c\udfe2 ${currentCompany}`;\n                const all = compTx().reverse();\n                pageContent.innerHTML = `\n                <div class=\"card\">\n                    <div class=\"card-header\"><span class=\"card-title\">\ud83d\udcdc Transaction History (${all.length})<\/span><\/div>\n                    <div style=\"display:flex; gap:12px; flex-wrap:wrap; margin-bottom:16px;\">\n                        <input type=\"text\" id=\"searchInput\" class=\"form-input\" placeholder=\"\ud83d\udd0d Search...\" style=\"max-width:260px;\">\n                        <select id=\"filterType\" class=\"form-select\" style=\"max-width:140px;\"><option value=\"all\">All<\/option><option value=\"income\">Income<\/option><option value=\"expense\">Expense<\/option><\/select>\n                        <button class=\"btn btn-outline btn-sm\" id=\"clearFilters\">Clear<\/button>\n                        <button class=\"btn btn-primary btn-sm\" id=\"exportCSV\">\ud83d\udce5 CSV<\/button>\n                        <button class=\"btn btn-outline btn-sm\" id=\"printTable\">\ud83d\udda8\ufe0f PDF \/ Print<\/button>\n                    <\/div>\n                    <div id=\"filteredTable\">${renderTable(all)}<\/div>\n                <\/div>`;\n                const apply = () => {\n                    let filtered = all;\n                    const q = document.getElementById('searchInput').value.toLowerCase();\n                    const type = document.getElementById('filterType').value;\n                    if (type!=='all') filtered = filtered.filter(t=>t.type===type);\n                    if (q) filtered = filtered.filter(t=> t.category.toLowerCase().includes(q) || (t.description||'').toLowerCase().includes(q) );\n                    document.getElementById('filteredTable').innerHTML = renderTable(filtered);\n                    attachTableEvents();\n                };\n                document.getElementById('searchInput').addEventListener('input', apply);\n                document.getElementById('filterType').addEventListener('change', apply);\n                document.getElementById('clearFilters').addEventListener('click', ()=> { document.getElementById('searchInput').value=''; document.getElementById('filterType').value='all'; apply(); });\n                document.getElementById('exportCSV').addEventListener('click', ()=>{\n                    const tx = compTx();\n                    let csv = 'Date,Type,Category,Description,Amount,Status\\n';\n                    tx.forEach(t=> csv += `${t.date},${t.type},${t.category},\"${t.description||''}\",${t.amount},${t.status}\\n`);\n                    const blob = new Blob([csv],{type:'text\/csv'});\n                    const a = document.createElement('a'); a.href=URL.createObjectURL(blob); a.download=`URA_${currentCompany}_transactions.csv`; a.click();\n                    showToast('CSV exported');\n                });\n                document.getElementById('printTable').addEventListener('click', ()=> window.print());\n                attachTableEvents();\n            };\n\n            \/\/ Attach edit\/delete events\n            const attachTableEvents = () => {\n                document.querySelectorAll('.edit-btn').forEach(b => b.onclick = (e) => openEdit(e.currentTarget.dataset.id));\n                document.querySelectorAll('.delete-btn').forEach(b => b.onclick = (e) => {\n                    if(confirm('Delete?')) { transactions = transactions.filter(t=>t.id!==e.currentTarget.dataset.id); save(); showToast('Deleted','error'); navigateTo(currentPage); }\n                });\n            };\n\n            \/\/ Edit modal\n            const openEdit = (id) => {\n                const t = transactions.find(x=>x.id===id); if(!t) return;\n                document.getElementById('editId').value = t.id;\n                document.getElementById('editDate').value = t.date;\n                document.getElementById('editAmount').value = t.amount;\n                document.getElementById('editStatus').value = t.status;\n                document.getElementById('editDescription').value = t.description||'';\n                const catSel = document.getElementById('editCategory');\n                populateCategory(catSel, t.type);\n                catSel.value = t.category;\n                editModal.classList.add('active');\n            };\n            document.getElementById('closeEditModal').onclick = ()=> editModal.classList.remove('active');\n            document.getElementById('editForm').onsubmit = (e) => {\n                e.preventDefault();\n                const id = document.getElementById('editId').value;\n                const t = transactions.find(x=>x.id===id);\n                if(t) {\n                    t.date = document.getElementById('editDate').value;\n                    t.category = document.getElementById('editCategory').value;\n                    t.amount = +document.getElementById('editAmount').value;\n                    t.status = document.getElementById('editStatus').value;\n                    t.description = document.getElementById('editDescription').value.trim();\n                    save(); showToast('Updated'); editModal.classList.remove('active'); navigateTo(currentPage);\n                }\n            };\n\n            \/\/ Quick Entry Modal\n            const openQuickModal = () => {\n                document.getElementById('quickDate').value = today();\n                const type = document.getElementById('quickType').value;\n                populateCategory(document.getElementById('quickCategory'), type);\n                document.getElementById('quickAmount').value = '';\n                document.getElementById('quickDescription').value = '';\n                quickEntryModal.classList.add('active');\n            };\n            document.getElementById('quickType').onchange = () => populateCategory(document.getElementById('quickCategory'), document.getElementById('quickType').value);\n            document.getElementById('quickEntryForm').onsubmit = (e) => {\n                e.preventDefault();\n                const type = document.getElementById('quickType').value;\n                const cat = document.getElementById('quickCategory').value;\n                const amt = +document.getElementById('quickAmount').value;\n                if(!cat || amt<=0) return showToast('Fill fields correctly','error');\n                transactions.push({\n                    id:'txn_'+Date.now(), type, company:currentCompany,\n                    date: document.getElementById('quickDate').value,\n                    category: cat, amount: amt,\n                    status: 'completed',\n                    description: document.getElementById('quickDescription').value.trim()\n                });\n                save(); showToast('Added!'); quickEntryModal.classList.remove('active'); navigateTo('dashboard');\n            };\n            document.getElementById('closeQuickModal').onclick = ()=> quickEntryModal.classList.remove('active');\n            quickAddBtn.onclick = openQuickModal;\n\n            \/\/ Navigation\n            const navigateTo = (page) => {\n                currentPage = page;\n                navItems.forEach(b => b.classList.remove('active'));\n                document.querySelector(`.nav-item[data-page=\"${page}\"]`)?.classList.add('active');\n                if(page==='dashboard') renderDashboard();\n                else if(page==='income') renderIncome();\n                else if(page==='expense') renderExpense();\n                else if(page==='transactions') renderTransactions();\n                if(window.innerWidth<768){ sidebar.classList.remove('open'); overlay.classList.remove('active'); }\n            };\n            navItems.forEach(b => b.addEventListener('click', ()=> navigateTo(b.dataset.page)));\n\n            \/\/ Mobile sidebar\n            menuToggle.onclick = ()=> { sidebar.classList.toggle('open'); overlay.classList.toggle('active'); };\n            overlay.onclick = ()=> { sidebar.classList.remove('open'); overlay.classList.remove('active'); };\n\n            \/\/ Startup\n            document.getElementById('startupSubmit').onclick = ()=>{\n                const name = companyNameInput.value.trim();\n                const code = sponsorCodeInput.value.trim();\n                if(!name || !code) { startupError.textContent = 'Both fields required.'; return; }\n                currentCompany = name;\n                startupOverlay.style.display = 'none';\n                companyBadge.innerHTML = `\ud83c\udfe2 ${currentCompany}`;\n                navigateTo('dashboard');\n            };\n            document.getElementById('currentDate').textContent = new Date().toLocaleDateString('en-UG', { weekday:'short', year:'numeric', month:'long', day:'numeric' });\n            startupOverlay.style.display = 'flex';\n        })();\n    <\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>URA Tax Dashboard | Modern Income &#038; Expense \ud83d\udd10 Company Access Enter your details to access the URA dashboard Company Name * Sponsor Code * \ud83d\udd17 Get Sponsor Code \ud83d\ude80 Access Dashboard URA Tax Dashboard Uganda Revenue Authority \ud83d\udcca Dashboard \ud83d\udcb0 Income \ud83d\udccb Expenses \ud83d\udcdc All Records \u2630 Dashboard \ud83c\udfe2 Company \u2795 Quick Entry \u26a1 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"pagelayer_contact_templates":[],"_pagelayer_content":"","footnotes":""},"class_list":["post-134","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/pages\/134","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/comments?post=134"}],"version-history":[{"count":2,"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/pages\/134\/revisions"}],"predecessor-version":[{"id":138,"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/pages\/134\/revisions\/138"}],"wp:attachment":[{"href":"https:\/\/cashchat.se\/dir\/wp-json\/wp\/v2\/media?parent=134"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}