{"id":9,"date":"2025-11-21T01:08:49","date_gmt":"2025-11-21T01:08:49","guid":{"rendered":"https:\/\/dionata.envionacional.com.br\/?page_id=9"},"modified":"2026-01-14T21:30:11","modified_gmt":"2026-01-14T21:30:11","slug":"retorno-de-encomenda","status":"publish","type":"page","link":"https:\/\/dionata.envionacional.com.br\/","title":{"rendered":"retorno de encomenda"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"9\" class=\"elementor elementor-9\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8b0153e e-flex e-con-boxed e-con e-parent\" data-id=\"8b0153e\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-12d7093 elementor-widget elementor-widget-html\" data-id=\"12d7093\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"pt-BR\">\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n    <title>COMPRAS 2.0 - Sistema Completo<\/title>\r\n    <style>\r\n        \/* RESET E VARI\u00c1VEIS *\/\r\n        * {\r\n            margin: 0;\r\n            padding: 0;\r\n            box-sizing: border-box;\r\n        }\r\n\r\n        :root {\r\n            --primary-color: #2563eb;\r\n            --primary-dark: #1e40af;\r\n            --secondary-color: #64748b;\r\n            --success-color: #22c55e;\r\n            --danger-color: #ef4444;\r\n            --warning-color: #f59e0b;\r\n            --background: #f8fafc;\r\n            --surface: #ffffff;\r\n            --text-primary: #0f172a;\r\n            --text-secondary: #64748b;\r\n            --border-color: #e2e8f0;\r\n            --shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\r\n            --shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1);\r\n            --border-radius: 8px;\r\n        }\r\n\r\n        body {\r\n            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\r\n            background-color: var(--background);\r\n            color: var(--text-primary);\r\n            line-height: 1.6;\r\n        }\r\n\r\n        \/* TELA DE LOGIN *\/\r\n        .login-screen {\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            min-height: 100vh;\r\n            background: linear-gradient(135deg, var(--primary-color), var(--primary-dark));\r\n        }\r\n\r\n        .login-container {\r\n            background: var(--surface);\r\n            padding: 2rem;\r\n            border-radius: var(--border-radius);\r\n            box-shadow: var(--shadow-lg);\r\n            width: 100%;\r\n            max-width: 400px;\r\n        }\r\n\r\n        .login-container h1 {\r\n            text-align: center;\r\n            margin-bottom: 1.5rem;\r\n            color: var(--primary-color);\r\n        }\r\n\r\n        .login-container form {\r\n            display: flex;\r\n            flex-direction: column;\r\n            gap: 1rem;\r\n        }\r\n\r\n        .login-container input {\r\n            padding: 0.75rem;\r\n            border: 1px solid var(--border-color);\r\n            border-radius: var(--border-radius);\r\n            font-size: 1rem;\r\n        }\r\n\r\n        .login-container button {\r\n            padding: 0.75rem;\r\n            background: var(--primary-color);\r\n            color: white;\r\n            border: none;\r\n            border-radius: var(--border-radius);\r\n            font-size: 1rem;\r\n            font-weight: 600;\r\n            cursor: pointer;\r\n            transition: background 0.2s;\r\n        }\r\n\r\n        .login-container button:hover {\r\n            background: var(--primary-dark);\r\n        }\r\n\r\n        .error-message {\r\n            color: var(--danger-color);\r\n            text-align: center;\r\n            margin-top: 1rem;\r\n        }\r\n\r\n        \/* APLICA\u00c7\u00c3O PRINCIPAL *\/\r\n        .app-screen {\r\n            min-height: 100vh;\r\n            display: flex;\r\n            flex-direction: column;\r\n        }\r\n\r\n        .hidden {\r\n            display: none !important;\r\n        }\r\n\r\n        \/* CABE\u00c7ALHO *\/\r\n        .app-header {\r\n            background: var(--surface);\r\n            border-bottom: 1px solid var(--border-color);\r\n            box-shadow: var(--shadow);\r\n            position: sticky;\r\n            top: 0;\r\n            z-index: 100;\r\n        }\r\n\r\n        .header-content {\r\n            max-width: 1400px;\r\n            margin: 0 auto;\r\n            padding: 1rem 2rem;\r\n            display: flex;\r\n            justify-content: space-between;\r\n            align-items: center;\r\n            gap: 2rem;\r\n        }\r\n\r\n        .header-content h1 {\r\n            font-size: 1.5rem;\r\n            color: var(--primary-color);\r\n        }\r\n\r\n        .saldo-display {\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 0.5rem;\r\n            background: var(--success-color);\r\n            color: white;\r\n            padding: 0.75rem 1.5rem;\r\n            border-radius: var(--border-radius);\r\n            font-weight: 600;\r\n        }\r\n\r\n        .saldo-valor {\r\n            font-size: 1.25rem;\r\n        }\r\n\r\n        .user-info {\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 1rem;\r\n        }\r\n\r\n        .btn-logout {\r\n            padding: 0.5rem 1rem;\r\n            background: var(--danger-color);\r\n            color: white;\r\n            border: none;\r\n            border-radius: var(--border-radius);\r\n            cursor: pointer;\r\n            transition: background 0.2s;\r\n        }\r\n\r\n        .btn-logout:hover {\r\n            background: #dc2626;\r\n        }\r\n\r\n        \/* NAVEGA\u00c7\u00c3O POR ABAS *\/\r\n        .tabs-nav {\r\n            background: var(--surface);\r\n            border-bottom: 1px solid var(--border-color);\r\n            position: sticky;\r\n            top: 73px;\r\n            z-index: 99;\r\n            overflow-x: auto;\r\n            display: flex;\r\n            max-width: 1400px;\r\n            margin: 0 auto;\r\n            padding: 0 2rem;\r\n        }\r\n\r\n        .tab-btn {\r\n            padding: 1rem 1.5rem;\r\n            background: none;\r\n            border: none;\r\n            border-bottom: 3px solid transparent;\r\n            color: var(--text-secondary);\r\n            font-size: 0.95rem;\r\n            font-weight: 600;\r\n            cursor: pointer;\r\n            transition: all 0.2s;\r\n            white-space: nowrap;\r\n        }\r\n\r\n        .tab-btn:hover {\r\n            color: var(--primary-color);\r\n            background: var(--background);\r\n        }\r\n\r\n        .tab-btn.active {\r\n            color: var(--primary-color);\r\n            border-bottom-color: var(--primary-color);\r\n        }\r\n\r\n        \/* CONTE\u00daDO PRINCIPAL *\/\r\n        .main-content {\r\n            flex: 1;\r\n            max-width: 1400px;\r\n            width: 100%;\r\n            margin: 0 auto;\r\n            padding: 2rem;\r\n        }\r\n\r\n        .tab-content {\r\n            display: none;\r\n            animation: fadeIn 0.3s;\r\n        }\r\n\r\n        .tab-content.active {\r\n            display: block;\r\n        }\r\n\r\n        @keyframes fadeIn {\r\n            from { opacity: 0; transform: translateY(10px); }\r\n            to { opacity: 1; transform: translateY(0); }\r\n        }\r\n\r\n        .tab-header {\r\n            display: flex;\r\n            justify-content: space-between;\r\n            align-items: center;\r\n            margin-bottom: 2rem;\r\n            flex-wrap: wrap;\r\n            gap: 1rem;\r\n        }\r\n\r\n        \/* BOT\u00d5ES *\/\r\n        .btn-primary, .btn-secondary, .btn-success, .btn-warning, .btn-danger {\r\n            padding: 0.75rem 1.5rem;\r\n            border: none;\r\n            border-radius: var(--border-radius);\r\n            font-size: 0.95rem;\r\n            font-weight: 600;\r\n            cursor: pointer;\r\n            transition: all 0.2s;\r\n        }\r\n\r\n        .btn-primary {\r\n            background: var(--primary-color);\r\n            color: white;\r\n        }\r\n\r\n        .btn-primary:hover {\r\n            background: var(--primary-dark);\r\n            transform: translateY(-1px);\r\n            box-shadow: var(--shadow);\r\n        }\r\n\r\n        .btn-secondary {\r\n            background: var(--secondary-color);\r\n            color: white;\r\n        }\r\n\r\n        .btn-secondary:hover {\r\n            background: #475569;\r\n        }\r\n\r\n        .btn-success {\r\n            background: var(--success-color);\r\n            color: white;\r\n        }\r\n\r\n        .btn-success:hover {\r\n            background: #16a34a;\r\n        }\r\n\r\n        .btn-warning {\r\n            background: var(--warning-color);\r\n            color: white;\r\n        }\r\n\r\n        .btn-warning:hover {\r\n            background: #d97706;\r\n        }\r\n\r\n        .btn-danger {\r\n            background: var(--danger-color);\r\n            color: white;\r\n        }\r\n\r\n        .btn-danger:hover {\r\n            background: #dc2626;\r\n        }\r\n\r\n        .btn-group {\r\n            display: flex;\r\n            gap: 0.5rem;\r\n            flex-wrap: wrap;\r\n        }\r\n\r\n        \/* FILTROS *\/\r\n        .filtros {\r\n            display: flex;\r\n            gap: 0.5rem;\r\n            flex-wrap: wrap;\r\n        }\r\n\r\n        .input-date, .input-select {\r\n            padding: 0.5rem 0.75rem;\r\n            border: 1px solid var(--border-color);\r\n            border-radius: var(--border-radius);\r\n            font-size: 0.95rem;\r\n        }\r\n\r\n        \/* CARDS *\/\r\n        .cards-container {\r\n            display: grid;\r\n            grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\r\n            gap: 1.5rem;\r\n        }\r\n\r\n        .card {\r\n            background: var(--surface);\r\n            border: 1px solid var(--border-color);\r\n            border-radius: var(--border-radius);\r\n            padding: 1.5rem;\r\n            box-shadow: var(--shadow);\r\n            transition: all 0.2s;\r\n        }\r\n\r\n        .card:hover {\r\n            transform: translateY(-2px);\r\n            box-shadow: var(--shadow-lg);\r\n        }\r\n\r\n        .card-image {\r\n            width: 100%;\r\n            height: 200px;\r\n            object-fit: cover;\r\n            border-radius: var(--border-radius);\r\n            margin-bottom: 1rem;\r\n        }\r\n\r\n        .card-title {\r\n            font-size: 1.1rem;\r\n            font-weight: 600;\r\n            margin-bottom: 0.5rem;\r\n            color: var(--text-primary);\r\n        }\r\n\r\n        .card-info {\r\n            display: flex;\r\n            flex-direction: column;\r\n            gap: 0.5rem;\r\n            margin-bottom: 1rem;\r\n        }\r\n\r\n        .card-info-item {\r\n            display: flex;\r\n            justify-content: space-between;\r\n            align-items: center;\r\n            font-size: 0.9rem;\r\n        }\r\n\r\n        .card-info-label {\r\n            color: var(--text-secondary);\r\n        }\r\n\r\n        .card-info-value {\r\n            font-weight: 600;\r\n            color: var(--text-primary);\r\n        }\r\n\r\n        .badge {\r\n            display: inline-block;\r\n            padding: 0.25rem 0.75rem;\r\n            border-radius: 12px;\r\n            font-size: 0.85rem;\r\n            font-weight: 600;\r\n        }\r\n\r\n        .badge-priority {\r\n            background: var(--warning-color);\r\n            color: white;\r\n        }\r\n\r\n        .badge-normal {\r\n            background: var(--secondary-color);\r\n            color: white;\r\n        }\r\n\r\n        .card-actions {\r\n            display: flex;\r\n            gap: 0.5rem;\r\n            flex-wrap: wrap;\r\n        }\r\n\r\n        .card-actions button {\r\n            flex: 1;\r\n            padding: 0.5rem;\r\n            border: none;\r\n            border-radius: var(--border-radius);\r\n            font-size: 0.85rem;\r\n            font-weight: 600;\r\n            cursor: pointer;\r\n            transition: all 0.2s;\r\n        }\r\n\r\n        \/* FORNECEDORES *\/\r\n        .fornecedores-container {\r\n            display: flex;\r\n            flex-direction: column;\r\n            gap: 2rem;\r\n        }\r\n\r\n        .fornecedor-group {\r\n            background: var(--surface);\r\n            border: 1px solid var(--border-color);\r\n            border-radius: var(--border-radius);\r\n            padding: 1.5rem;\r\n            box-shadow: var(--shadow);\r\n        }\r\n\r\n        .fornecedor-header {\r\n            display: flex;\r\n            justify-content: space-between;\r\n            align-items: center;\r\n            margin-bottom: 1.5rem;\r\n            padding-bottom: 1rem;\r\n            border-bottom: 2px solid var(--border-color);\r\n        }\r\n\r\n        .fornecedor-nome {\r\n            font-size: 1.25rem;\r\n            font-weight: 700;\r\n            color: var(--primary-color);\r\n        }\r\n\r\n        .fornecedor-total {\r\n            font-size: 1.5rem;\r\n            font-weight: 700;\r\n            color: var(--success-color);\r\n        }\r\n\r\n        .fornecedor-produtos {\r\n            display: grid;\r\n            grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));\r\n            gap: 1rem;\r\n        }\r\n\r\n        \/* SALDO *\/\r\n        .saldo-info {\r\n            display: grid;\r\n            grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\r\n            gap: 1.5rem;\r\n            margin-bottom: 2rem;\r\n        }\r\n\r\n        .saldo-card {\r\n            background: var(--surface);\r\n            border: 1px solid var(--border-color);\r\n            border-radius: var(--border-radius);\r\n            padding: 1.5rem;\r\n            text-align: center;\r\n            box-shadow: var(--shadow);\r\n        }\r\n\r\n        .saldo-card h3 {\r\n            color: var(--text-secondary);\r\n            font-size: 0.9rem;\r\n            margin-bottom: 0.5rem;\r\n            font-weight: 600;\r\n        }\r\n\r\n        .valor-grande {\r\n            font-size: 2rem;\r\n            font-weight: 700;\r\n            color: var(--success-color);\r\n        }\r\n\r\n        .valor-grande.danger {\r\n            color: var(--danger-color);\r\n        }\r\n\r\n        \/* RANKING *\/\r\n        .ranking-sections {\r\n            display: grid;\r\n            grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));\r\n            gap: 2rem;\r\n        }\r\n\r\n        .ranking-section {\r\n            background: var(--surface);\r\n            border: 1px solid var(--border-color);\r\n            border-radius: var(--border-radius);\r\n            padding: 1.5rem;\r\n            box-shadow: var(--shadow);\r\n        }\r\n\r\n        .ranking-section h3 {\r\n            margin-bottom: 1.5rem;\r\n            color: var(--primary-color);\r\n        }\r\n\r\n        .ranking-list {\r\n            display: flex;\r\n            flex-direction: column;\r\n            gap: 1rem;\r\n        }\r\n\r\n        .ranking-item {\r\n            display: flex;\r\n            justify-content: space-between;\r\n            align-items: center;\r\n            padding: 1rem;\r\n            background: var(--background);\r\n            border-radius: var(--border-radius);\r\n            border-left: 4px solid var(--primary-color);\r\n        }\r\n\r\n        .ranking-item:nth-child(1) {\r\n            border-left-color: #fbbf24;\r\n        }\r\n\r\n        .ranking-item:nth-child(2) {\r\n            border-left-color: #94a3b8;\r\n        }\r\n\r\n        .ranking-item:nth-child(3) {\r\n            border-left-color: #cd7f32;\r\n        }\r\n\r\n        .ranking-info {\r\n            flex: 1;\r\n        }\r\n\r\n        .ranking-nome {\r\n            font-weight: 600;\r\n            margin-bottom: 0.25rem;\r\n        }\r\n\r\n        .ranking-detalhes {\r\n            font-size: 0.85rem;\r\n            color: var(--text-secondary);\r\n        }\r\n\r\n        .ranking-valor {\r\n            font-size: 1.25rem;\r\n            font-weight: 700;\r\n            color: var(--primary-color);\r\n        }\r\n\r\n        \/* MODAIS *\/\r\n        .modal {\r\n            display: none;\r\n            position: fixed;\r\n            z-index: 1000;\r\n            left: 0;\r\n            top: 0;\r\n            width: 100%;\r\n            height: 100%;\r\n            background-color: rgba(0, 0, 0, 0.5);\r\n            animation: fadeIn 0.3s;\r\n        }\r\n\r\n        .modal.active {\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n        }\r\n\r\n        .modal-content {\r\n            background: var(--surface);\r\n            padding: 2rem;\r\n            border-radius: var(--border-radius);\r\n            box-shadow: var(--shadow-lg);\r\n            width: 90%;\r\n            max-width: 500px;\r\n            max-height: 90vh;\r\n            overflow-y: auto;\r\n            position: relative;\r\n        }\r\n\r\n        .modal-large {\r\n            max-width: 800px;\r\n        }\r\n\r\n        .close {\r\n            position: absolute;\r\n            right: 1rem;\r\n            top: 1rem;\r\n            font-size: 2rem;\r\n            font-weight: 700;\r\n            color: var(--text-secondary);\r\n            cursor: pointer;\r\n            transition: color 0.2s;\r\n        }\r\n\r\n        .close:hover {\r\n            color: var(--danger-color);\r\n        }\r\n\r\n        .modal-content h2 {\r\n            margin-bottom: 1.5rem;\r\n            color: var(--primary-color);\r\n        }\r\n\r\n        \/* FORMUL\u00c1RIOS *\/\r\n        .form-group {\r\n            margin-bottom: 1rem;\r\n        }\r\n\r\n        .form-group label {\r\n            display: block;\r\n            margin-bottom: 0.5rem;\r\n            font-weight: 600;\r\n            color: var(--text-primary);\r\n        }\r\n\r\n        .form-group input,\r\n        .form-group select {\r\n            width: 100%;\r\n            padding: 0.75rem;\r\n            border: 1px solid var(--border-color);\r\n            border-radius: var(--border-radius);\r\n            font-size: 1rem;\r\n            font-family: inherit;\r\n        }\r\n\r\n        .form-group input:focus,\r\n        .form-group select:focus {\r\n            outline: none;\r\n            border-color: var(--primary-color);\r\n        }\r\n\r\n        .form-actions {\r\n            display: flex;\r\n            gap: 0.5rem;\r\n            justify-content: flex-end;\r\n            margin-top: 1.5rem;\r\n        }\r\n\r\n        \/* LOADING *\/\r\n        .loading-overlay {\r\n            position: fixed;\r\n            top: 0;\r\n            left: 0;\r\n            width: 100%;\r\n            height: 100%;\r\n            background: rgba(0, 0, 0, 0.5);\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            z-index: 9999;\r\n        }\r\n\r\n        .spinner {\r\n            width: 50px;\r\n            height: 50px;\r\n            border: 5px solid rgba(255, 255, 255, 0.3);\r\n            border-top-color: white;\r\n            border-radius: 50%;\r\n            animation: spin 0.8s linear infinite;\r\n        }\r\n\r\n        @keyframes spin {\r\n            to { transform: rotate(360deg); }\r\n        }\r\n\r\n        \/* EMPTY STATE *\/\r\n        .empty-state {\r\n            text-align: center;\r\n            padding: 3rem;\r\n            color: var(--text-secondary);\r\n        }\r\n\r\n        .empty-state-icon {\r\n            font-size: 4rem;\r\n            margin-bottom: 1rem;\r\n        }\r\n\r\n        .empty-state-text {\r\n            font-size: 1.1rem;\r\n        }\r\n\r\n        \/* AUTOCOMPLETE DE PRODUTOS *\/\r\n        .autocomplete-container {\r\n            position: relative;\r\n        }\r\n\r\n        .autocomplete-results {\r\n            position: absolute;\r\n            top: 100%;\r\n            left: 0;\r\n            right: 0;\r\n            background: var(--surface);\r\n            border: 1px solid var(--border-color);\r\n            border-radius: var(--border-radius);\r\n            box-shadow: var(--shadow-lg);\r\n            max-height: 300px;\r\n            overflow-y: auto;\r\n            z-index: 1000;\r\n            display: none;\r\n        }\r\n\r\n        .autocomplete-results.show {\r\n            display: block;\r\n        }\r\n\r\n        .autocomplete-item {\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 1rem;\r\n            padding: 0.75rem;\r\n            cursor: pointer;\r\n            transition: background 0.2s;\r\n            border-bottom: 1px solid var(--border-color);\r\n        }\r\n\r\n        .autocomplete-item:last-child {\r\n            border-bottom: none;\r\n        }\r\n\r\n        .autocomplete-item:hover {\r\n            background: var(--background);\r\n        }\r\n\r\n        .autocomplete-item.active {\r\n            background: var(--primary-color);\r\n            color: white;\r\n        }\r\n\r\n        .autocomplete-item-image {\r\n            width: 50px;\r\n            height: 50px;\r\n            object-fit: cover;\r\n            border-radius: 4px;\r\n            flex-shrink: 0;\r\n        }\r\n\r\n        .autocomplete-item-placeholder {\r\n            width: 50px;\r\n            height: 50px;\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            background: var(--background);\r\n            border-radius: 4px;\r\n            font-size: 1.5rem;\r\n            flex-shrink: 0;\r\n        }\r\n\r\n        .autocomplete-item-name {\r\n            flex: 1;\r\n            font-weight: 500;\r\n        }\r\n\r\n        .autocomplete-no-results {\r\n            padding: 1rem;\r\n            text-align: center;\r\n            color: var(--text-secondary);\r\n        }\r\n\r\n        \/* RESPONSIVO *\/\r\n        @media (max-width: 768px) {\r\n            .header-content {\r\n                flex-direction: column;\r\n                gap: 1rem;\r\n            }\r\n\r\n            .tabs-nav {\r\n                padding: 0 1rem;\r\n            }\r\n\r\n            .main-content {\r\n                padding: 1rem;\r\n            }\r\n\r\n            .tab-header {\r\n                flex-direction: column;\r\n                align-items: flex-start;\r\n            }\r\n\r\n            .cards-container {\r\n                grid-template-columns: 1fr;\r\n            }\r\n\r\n            .ranking-sections {\r\n                grid-template-columns: 1fr;\r\n            }\r\n\r\n            .fornecedor-header {\r\n                flex-direction: column;\r\n                align-items: flex-start;\r\n                gap: 0.5rem;\r\n            }\r\n\r\n            .fornecedor-produtos {\r\n                grid-template-columns: 1fr;\r\n            }\r\n\r\n            .saldo-info {\r\n                grid-template-columns: 1fr;\r\n            }\r\n        }\r\n    <\/style>\r\n<\/head>\r\n<body>\r\n    <!-- Tela de Login -->\r\n    <div id=\"loginScreen\" class=\"login-screen\">\r\n        <div class=\"login-container\">\r\n            <h1>\ud83d\uded2 COMPRAS 2.0<\/h1>\r\n            <form id=\"loginForm\">\r\n                <input type=\"email\" id=\"loginEmail\" placeholder=\"E-mail\" required>\r\n                <input type=\"password\" id=\"loginPassword\" placeholder=\"Senha\" required>\r\n                <button type=\"submit\">Entrar<\/button>\r\n            <\/form>\r\n            <p id=\"loginError\" class=\"error-message\"><\/p>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <!-- Aplica\u00e7\u00e3o Principal -->\r\n    <div id=\"appScreen\" class=\"app-screen hidden\">\r\n        <!-- Cabe\u00e7alho -->\r\n        <header class=\"app-header\">\r\n            <div class=\"header-content\">\r\n                <h1>\ud83d\uded2 COMPRAS 2.0<\/h1>\r\n                <div class=\"saldo-display\">\r\n                    <span class=\"saldo-label\">Saldo do Dia:<\/span>\r\n                    <span class=\"saldo-valor\" id=\"saldoAtual\">R$ 0,00<\/span>\r\n                <\/div>\r\n                <div class=\"user-info\">\r\n                    <span id=\"userName\"><\/span>\r\n                    <button id=\"logoutBtn\" class=\"btn-logout\">Sair<\/button>\r\n                <\/div>\r\n            <\/div>\r\n        <\/header>\r\n\r\n        <!-- Navega\u00e7\u00e3o -->\r\n        <nav class=\"tabs-nav\">\r\n            <button class=\"tab-btn active\" data-tab=\"requisicoes\">Requisi\u00e7\u00f5es<\/button>\r\n            <button class=\"tab-btn\" data-tab=\"comprados\">Comprados<\/button>\r\n            <button class=\"tab-btn\" data-tab=\"vendas\">\ud83d\udcb0 Vendas Internas<\/button>\r\n            <button class=\"tab-btn\" data-tab=\"saldo\">Saldo Di\u00e1rio<\/button>\r\n            <button class=\"tab-btn\" data-tab=\"catalogo\">Cat\u00e1logo<\/button>\r\n            <button class=\"tab-btn\" data-tab=\"arquivado\">Arquivado<\/button>\r\n            <button class=\"tab-btn\" data-tab=\"ranking\">Ranking<\/button>\r\n            <button class=\"tab-btn\" data-tab=\"exclusoes\">\ud83d\uddd1\ufe0f Hist\u00f3rico<\/button>\r\n        <\/nav>\r\n\r\n        <!-- Conte\u00fado -->\r\n        <main class=\"main-content\">\r\n            <!-- ABA: REQUISI\u00c7\u00d5ES -->\r\n            <div id=\"tab-requisicoes\" class=\"tab-content active\">\r\n                <div class=\"tab-header\">\r\n                    <h2>Requisi\u00e7\u00f5es de Compra<\/h2>\r\n                    <button class=\"btn-primary\" id=\"btnNovoPedido\">+ Novo Pedido<\/button>\r\n                <\/div>\r\n                <div id=\"listaRequisicoes\" class=\"cards-container\"><\/div>\r\n            <\/div>\r\n\r\n            <!-- ABA: COMPRADOS -->\r\n            <div id=\"tab-comprados\" class=\"tab-content\">\r\n                <div class=\"tab-header\">\r\n                    <h2>Produtos Comprados<\/h2>\r\n                    <div class=\"filtros\">\r\n                        <input type=\"date\" id=\"filtroDataComprados\" class=\"input-date\">\r\n                        <select id=\"filtroFornecedor\" class=\"input-select\">\r\n                            <option value=\"\">Todos os Fornecedores<\/option>\r\n                        <\/select>\r\n                        <button class=\"btn-secondary\" id=\"btnAgruparPDF\">\ud83c\udfa8 Agrupar e Exportar PDF<\/button>\r\n                    <\/div>\r\n                <\/div>\r\n                <div id=\"listaComprados\" class=\"fornecedores-container\"><\/div>\r\n            <\/div>\r\n\r\n            <!-- ABA: VENDAS INTERNAS -->\r\n            <div id=\"tab-vendas\" class=\"tab-content\">\r\n                <div class=\"tab-header\">\r\n                    <h2>\ud83d\udcb0 Vendas Internas<\/h2>\r\n                    <button class=\"btn-primary\" id=\"btnNovaVenda\">+ Registrar Venda<\/button>\r\n                <\/div>\r\n                <div class=\"filtros\" style=\"margin-bottom: 1.5rem;\">\r\n                    <input type=\"date\" id=\"filtroDataVendas\" class=\"input-date\">\r\n                    <select id=\"filtroStatusVendas\" class=\"input-select\">\r\n                        <option value=\"\">Todas<\/option>\r\n                        <option value=\"paid\">Pagas<\/option>\r\n                        <option value=\"unpaid\">Pendentes<\/option>\r\n                    <\/select>\r\n                    <button class=\"btn-secondary\" id=\"btnFiltrarVendas\">Filtrar<\/button>\r\n                <\/div>\r\n                <div id=\"listaVendas\" class=\"cards-container\"><\/div>\r\n            <\/div>\r\n\r\n            <!-- ABA: SALDO DI\u00c1RIO -->\r\n            <div id=\"tab-saldo\" class=\"tab-content\">\r\n                <div class=\"tab-header\">\r\n                    <h2>Gest\u00e3o de Saldo<\/h2>\r\n                    <div class=\"btn-group\">\r\n                        <button class=\"btn-primary\" id=\"btnAdicionarSaldo\">+ Adicionar Saldo<\/button>\r\n                        <button class=\"btn-success\" id=\"btnAdicionarSaldoPix\">\ud83d\udcb3 Adicionar via PIX<\/button>\r\n                    <\/div>\r\n                <\/div>\r\n                <div class=\"saldo-info\">\r\n                    <div class=\"saldo-card\">\r\n                        <h3>Saldo Hoje<\/h3>\r\n                        <p class=\"valor-grande\" id=\"saldoHoje\">R$ 0,00<\/p>\r\n                    <\/div>\r\n                    <div class=\"saldo-card\">\r\n                        <h3>Total Gasto<\/h3>\r\n                        <p class=\"valor-grande danger\" id=\"totalGastoHoje\">R$ 0,00<\/p>\r\n                    <\/div>\r\n                    <div class=\"saldo-card\">\r\n                        <h3>Saldo Inicial<\/h3>\r\n                        <p class=\"valor-grande\" id=\"saldoInicial\">R$ 0,00<\/p>\r\n                    <\/div>\r\n                <\/div>\r\n                <div class=\"tab-header\">\r\n                    <h3>\ud83d\udccb Entradas de Hoje<\/h3>\r\n                <\/div>\r\n                <div id=\"entradasHoje\" style=\"margin-bottom: 2rem;\"><\/div>\r\n                <div class=\"tab-header\">\r\n                    <h3>Hist\u00f3rico de Saldo<\/h3>\r\n                    <div class=\"filtros\">\r\n                        <input type=\"date\" id=\"filtroDataInicioSaldo\" class=\"input-date\">\r\n                        <input type=\"date\" id=\"filtroDataFimSaldo\" class=\"input-date\">\r\n                        <button class=\"btn-secondary\" id=\"btnFiltrarSaldo\">Filtrar<\/button>\r\n                    <\/div>\r\n                <\/div>\r\n                <div id=\"historicoSaldo\" class=\"cards-container\"><\/div>\r\n            <\/div>\r\n\r\n            <!-- ABA: CAT\u00c1LOGO -->\r\n            <div id=\"tab-catalogo\" class=\"tab-content\">\r\n                <div class=\"tab-header\">\r\n                    <h2>Cat\u00e1logo de Produtos<\/h2>\r\n                    <div class=\"btn-group\">\r\n                        <button class=\"btn-primary\" id=\"btnAdicionarProduto\">+ Adicionar Produto<\/button>\r\n                        <button class=\"btn-secondary\" id=\"btnImportarCSV\">\ud83d\udcc1 Importar CSV<\/button>\r\n                    <\/div>\r\n                <\/div>\r\n                <div id=\"listaCatalogo\" class=\"cards-container\"><\/div>\r\n            <\/div>\r\n\r\n            <!-- ABA: ARQUIVADO -->\r\n            <div id=\"tab-arquivado\" class=\"tab-content\">\r\n                <div class=\"tab-header\">\r\n                    <h2>Compras Arquivadas<\/h2>\r\n                    <button class=\"btn-primary\" id=\"btnArquivarHoje\">\ud83d\udce6 Arquivar Compras de Hoje<\/button>\r\n                <\/div>\r\n                <div id=\"listaArquivado\" class=\"cards-container\"><\/div>\r\n            <\/div>\r\n\r\n            <!-- ABA: RANKING -->\r\n            <div id=\"tab-ranking\" class=\"tab-content\">\r\n                <div class=\"tab-header\">\r\n                    <h2>Rankings<\/h2>\r\n                    <div class=\"filtros\">\r\n                        <input type=\"date\" id=\"filtroDataInicioRanking\" class=\"input-date\">\r\n                        <input type=\"date\" id=\"filtroDataFimRanking\" class=\"input-date\">\r\n                        <button class=\"btn-secondary\" id=\"btnFiltrarRanking\">Filtrar<\/button>\r\n                    <\/div>\r\n                <\/div>\r\n                <div class=\"ranking-sections\">\r\n                    <div class=\"ranking-section\">\r\n                        <h3>\ud83c\udfc6 Produtos Mais Comprados<\/h3>\r\n                        <div id=\"rankingProdutos\" class=\"ranking-list\"><\/div>\r\n                    <\/div>\r\n                    <div class=\"ranking-section\">\r\n                        <h3>\ud83c\udfea Ranking de Fornecedores<\/h3>\r\n                        <div id=\"rankingFornecedores\" class=\"ranking-list\"><\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <!-- ABA: EXCLUS\u00d5ES -->\r\n            <div id=\"tab-exclusoes\" class=\"tab-content\">\r\n                <div class=\"tab-header\">\r\n                    <h2>Produtos Exclu\u00eddos<\/h2>\r\n                <\/div>\r\n                <div id=\"listaExclusoes\" class=\"cards-container\"><\/div>\r\n            <\/div>\r\n        <\/main>\r\n    <\/div>\r\n\r\n    <!-- MODAIS -->\r\n    <!-- Modal: Nova Venda Interna -->\r\n    <div id=\"modalNovaVenda\" class=\"modal\">\r\n        <div class=\"modal-content\">\r\n            <span class=\"close\" data-modal=\"modalNovaVenda\">&times;<\/span>\r\n            <h2>\ud83d\udcb0 Registrar Venda Interna<\/h2>\r\n            <form id=\"formNovaVenda\">\r\n                <div class=\"form-group\">\r\n                    <label>Email do Funcion\u00e1rio *<\/label>\r\n                    <input type=\"email\" id=\"vendaFuncionarioEmail\" required>\r\n                <\/div>\r\n                <div class=\"form-group\">\r\n                    <label>Nome do Funcion\u00e1rio<\/label>\r\n                    <input type=\"text\" id=\"vendaFuncionarioNome\">\r\n                <\/div>\r\n                <div class=\"form-group autocomplete-container\">\r\n                    <label>Produto *<\/label>\r\n                    <input type=\"text\" id=\"vendaProdutoNome\" autocomplete=\"off\" required>\r\n                    <input type=\"hidden\" id=\"vendaProdutoId\">\r\n                    <input type=\"hidden\" id=\"vendaProdutoImagem\">\r\n                    <div id=\"autocompleteVendaResults\" class=\"autocomplete-results\"><\/div>\r\n                <\/div>\r\n                <div id=\"vendaPreview\" style=\"display: none; margin: 1rem 0; text-align: center;\">\r\n                    <img id=\"vendaPreviewImage\" style=\"width: 100%; max-height: 200px; object-fit: cover; border-radius: var(--border-radius);\" alt=\"Preview\">\r\n                <\/div>\r\n                <div class=\"form-group\">\r\n                    <label>Quantidade *<\/label>\r\n                    <input type=\"number\" id=\"vendaQuantidade\" min=\"1\" required>\r\n                <\/div>\r\n                <div class=\"form-group\">\r\n                    <label>Valor Unit\u00e1rio (R$) *<\/label>\r\n                    <input type=\"number\" id=\"vendaValorUnitario\" min=\"0\" step=\"0.01\" required>\r\n                <\/div>\r\n                <div class=\"form-group\">\r\n                    <label>Valor Total (R$)<\/label>\r\n                    <input type=\"number\" id=\"vendaValorTotal\" readonly style=\"background: #f0f0f0;\">\r\n                <\/div>\r\n                <div class=\"form-actions\">\r\n                    <button type=\"submit\" class=\"btn-success\">\u2705 Registrar Venda<\/button>\r\n                    <button type=\"button\" class=\"btn-secondary\" onclick=\"fecharModal('modalNovaVenda')\">Cancelar<\/button>\r\n                <\/div>\r\n            <\/form>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <!-- Modal: Agrupamento Visual -->\r\n    <div id=\"modalAgrupamento\" class=\"modal\">\r\n        <div class=\"modal-content\" style=\"max-width: 1200px;\">\r\n            <span class=\"close\" data-modal=\"modalAgrupamento\">&times;<\/span>\r\n            <h2>\ud83c\udfa8 Organizar Produtos para PDF<\/h2>\r\n            <p style=\"color: var(--text-secondary); margin-bottom: 1.5rem;\">Arraste os produtos para organizar por grupos antes de gerar o PDF<\/p>\r\n            <div class=\"agrupamento-container\" id=\"agrupamentoContainer\"><\/div>\r\n            <div class=\"form-actions\" style=\"margin-top: 2rem;\">\r\n                <button class=\"btn-primary\" onclick=\"confirmarAgrupamento()\">\ud83d\udcc4 Gerar PDF com Agrupamento<\/button>\r\n                <button class=\"btn-secondary\" onclick=\"fecharModal('modalAgrupamento')\">Cancelar<\/button>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <!-- Modal: Adicionar Saldo PIX -->\r\n    <div id=\"modalSaldoPix\" class=\"modal\">\r\n        <div class=\"modal-content\">\r\n            <span class=\"close\" data-modal=\"modalSaldoPix\">&times;<\/span>\r\n            <h2>\ud83d\udcb3 Adicionar Saldo via PIX<\/h2>\r\n            <form id=\"formSaldoPix\">\r\n                <div class=\"form-group\">\r\n                    <label>Valor (R$) *<\/label>\r\n                    <input type=\"number\" id=\"saldoPixValor\" min=\"0\" step=\"0.01\" required>\r\n                <\/div>\r\n                <div class=\"form-group\">\r\n                    <label>Descri\u00e7\u00e3o<\/label>\r\n                    <input type=\"text\" id=\"saldoPixDescricao\" placeholder=\"Ex: Transfer\u00eancia PIX - Jo\u00e3o\">\r\n                <\/div>\r\n                <div class=\"form-actions\">\r\n                    <button type=\"submit\" class=\"btn-success\">\u2705 Adicionar<\/button>\r\n                    <button type=\"button\" class=\"btn-secondary\" onclick=\"fecharModal('modalSaldoPix')\">Cancelar<\/button>\r\n                <\/div>\r\n            <\/form>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div id=\"modalNovoPedido\" class=\"modal\">\r\n        <div class=\"modal-content\">\r\n            <span class=\"close\" data-modal=\"modalNovoPedido\">&times;<\/span>\r\n            <h2>Novo Pedido<\/h2>\r\n            <form id=\"formNovoPedido\">\r\n                <div id=\"produtoPreview\" style=\"display: none; margin-bottom: 1rem; text-align: center;\">\r\n                    <img id=\"produtoPreviewImage\" style=\"width: 100%; max-height: 200px; object-fit: cover; border-radius: var(--border-radius);\" alt=\"Preview\">\r\n                <\/div>\r\n                <div class=\"form-group autocomplete-container\">\r\n                    <label>Nome do Produto *<\/label>\r\n                    <input type=\"text\" id=\"produtoNome\" autocomplete=\"off\" required>\r\n                    <input type=\"hidden\" id=\"produtoIdSelecionado\">\r\n                    <input type=\"hidden\" id=\"produtoImagemUrl\">\r\n                    <div id=\"autocompleteResults\" class=\"autocomplete-results\"><\/div>\r\n                <\/div>\r\n                <div class=\"form-group\">\r\n                    <label>URL da Foto<\/label>\r\n                    <input type=\"url\" id=\"produtoFoto\" placeholder=\"https:\/\/...\">\r\n                <\/div>\r\n                <div class=\"form-group\">\r\n                    <label>OU Upload da Foto<\/label>\r\n                    <input type=\"file\" id=\"produtoFotoUpload\" accept=\"image\/*\">\r\n                <\/div>\r\n                <div class=\"form-group\">\r\n                    <label>Quantidade Desejada *<\/label>\r\n                    <input type=\"number\" id=\"produtoQuantidade\" min=\"1\" required>\r\n                <\/div>\r\n                <div class=\"form-group\">\r\n                    <label>Prioridade<\/label>\r\n                    <select id=\"produtoPrioridade\">\r\n                        <option value=\"nao\">N\u00e3o<\/option>\r\n                        <option value=\"sim\">Sim<\/option>\r\n                    <\/select>\r\n                <\/div>\r\n                <div class=\"form-group\">\r\n                    <label>Local de Compra<\/label>\r\n                    <input type=\"text\" id=\"produtoLocal\">\r\n                <\/div>\r\n                <div class=\"form-actions\">\r\n                    <button type=\"button\" class=\"btn-secondary\" data-close=\"modalNovoPedido\">Cancelar<\/button>\r\n                    <button type=\"submit\" class=\"btn-primary\">Adicionar<\/button>\r\n                <\/div>\r\n            <\/form>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div id=\"modalComprarProduto\" class=\"modal\">\r\n        <div class=\"modal-content\">\r\n            <span class=\"close\" data-modal=\"modalComprarProduto\">&times;<\/span>\r\n            <h2>Comprar Produto<\/h2>\r\n            <div id=\"produtoCompraInfo\"><\/div>\r\n            <form id=\"formComprarProduto\">\r\n                <input type=\"hidden\" id=\"compraRequisicaoId\">\r\n                <div class=\"form-group\">\r\n                    <label>Fornecedor *<\/label>\r\n                    <input type=\"text\" id=\"compraFornecedor\" required>\r\n                <\/div>\r\n                <div class=\"form-group\">\r\n                    <label>Valor Unit\u00e1rio *<\/label>\r\n                    <input type=\"number\" id=\"compraValorUnitario\" step=\"0.01\" min=\"0\" required>\r\n                <\/div>\r\n                <div class=\"form-group\">\r\n                    <label>Quantidade Comprada *<\/label>\r\n                    <input type=\"number\" id=\"compraQuantidade\" min=\"1\" required>\r\n                <\/div>\r\n                <div class=\"form-group\">\r\n                    <label>Valor Total<\/label>\r\n                    <input type=\"text\" id=\"compraValorTotal\" readonly>\r\n                <\/div>\r\n                <div class=\"form-actions\">\r\n                    <button type=\"button\" class=\"btn-secondary\" data-close=\"modalComprarProduto\">Cancelar<\/button>\r\n                    <button type=\"submit\" class=\"btn-primary\">Confirmar Compra<\/button>\r\n                <\/div>\r\n            <\/form>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div id=\"modalAdicionarSaldo\" class=\"modal\">\r\n        <div class=\"modal-content\">\r\n            <span class=\"close\" data-modal=\"modalAdicionarSaldo\">&times;<\/span>\r\n            <h2>Adicionar Saldo<\/h2>\r\n            <form id=\"formAdicionarSaldo\">\r\n                <div class=\"form-group\">\r\n                    <label>Valor *<\/label>\r\n                    <input type=\"number\" id=\"saldoValor\" step=\"0.01\" min=\"0\" required>\r\n                <\/div>\r\n                <div class=\"form-group\">\r\n                    <label>Forma de Pagamento *<\/label>\r\n                    <select id=\"saldoFormaPagamento\" required>\r\n                        <option value=\"Pix\">Pix<\/option>\r\n                        <option value=\"Dinheiro\">Dinheiro<\/option>\r\n                        <option value=\"Cart\u00e3o\">Cart\u00e3o<\/option>\r\n                    <\/select>\r\n                <\/div>\r\n                <div class=\"form-actions\">\r\n                    <button type=\"button\" class=\"btn-secondary\" data-close=\"modalAdicionarSaldo\">Cancelar<\/button>\r\n                    <button type=\"submit\" class=\"btn-primary\">Adicionar<\/button>\r\n                <\/div>\r\n            <\/form>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div id=\"modalAdicionarCatalogo\" class=\"modal\">\r\n        <div class=\"modal-content\">\r\n            <span class=\"close\" data-modal=\"modalAdicionarCatalogo\">&times;<\/span>\r\n            <h2>Adicionar ao Cat\u00e1logo<\/h2>\r\n            <form id=\"formAdicionarCatalogo\">\r\n                <div class=\"form-group\">\r\n                    <label>Nome do Produto *<\/label>\r\n                    <input type=\"text\" id=\"catalogoNome\" required>\r\n                <\/div>\r\n                <div class=\"form-group\">\r\n                    <label>URL da Foto<\/label>\r\n                    <input type=\"url\" id=\"catalogoFoto\" placeholder=\"https:\/\/...\">\r\n                <\/div>\r\n                <div class=\"form-group\">\r\n                    <label>OU Upload da Foto<\/label>\r\n                    <input type=\"file\" id=\"catalogoFotoUpload\" accept=\"image\/*\">\r\n                <\/div>\r\n                <div class=\"form-actions\">\r\n                    <button type=\"button\" class=\"btn-secondary\" data-close=\"modalAdicionarCatalogo\">Cancelar<\/button>\r\n                    <button type=\"submit\" class=\"btn-primary\">Adicionar<\/button>\r\n                <\/div>\r\n            <\/form>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div id=\"modalImportarCSV\" class=\"modal\">\r\n        <div class=\"modal-content\">\r\n            <span class=\"close\" data-modal=\"modalImportarCSV\">&times;<\/span>\r\n            <h2>Importar Produtos via CSV<\/h2>\r\n            <p>Formato: Nome,URL_Foto (uma linha por produto)<\/p>\r\n            <form id=\"formImportarCSV\">\r\n                <div class=\"form-group\">\r\n                    <label>Arquivo CSV<\/label>\r\n                    <input type=\"file\" id=\"csvFile\" accept=\".csv\" required>\r\n                <\/div>\r\n                <div class=\"form-actions\">\r\n                    <button type=\"button\" class=\"btn-secondary\" data-close=\"modalImportarCSV\">Cancelar<\/button>\r\n                    <button type=\"submit\" class=\"btn-primary\">Importar<\/button>\r\n                <\/div>\r\n            <\/form>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div id=\"modalDetalhesArquivo\" class=\"modal\">\r\n        <div class=\"modal-content modal-large\">\r\n            <span class=\"close\" data-modal=\"modalDetalhesArquivo\">&times;<\/span>\r\n            <h2>Detalhes do Arquivo<\/h2>\r\n            <div id=\"detalhesArquivoContent\"><\/div>\r\n            <div class=\"form-actions\">\r\n                <button type=\"button\" class=\"btn-secondary\" data-close=\"modalDetalhesArquivo\">Fechar<\/button>\r\n                <button type=\"button\" class=\"btn-primary\" id=\"btnExportarArquivoPDF\">\ud83d\udcc4 Exportar PDF<\/button>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div id=\"loadingOverlay\" class=\"loading-overlay hidden\">\r\n        <div class=\"spinner\"><\/div>\r\n    <\/div>\r\n\r\n    <script type=\"module\">\r\n        console.log('\ud83d\ude80 SCRIPT CARREGADO - Iniciando sistema COMPRAS 2.0');\r\n        \r\n        \/\/ Importar Appwrite SDK\r\n        import { Client, Databases, Storage, Account, Query, ID } from 'https:\/\/cdn.jsdelivr.net\/npm\/appwrite@14.0.1\/+esm';\r\n\r\n        console.log('\u2705 SDK Appwrite importado com sucesso');\r\n\r\n        \/\/ Configura\u00e7\u00e3o do Appwrite\r\n        const client = new Client();\r\n        client\r\n            .setEndpoint('https:\/\/nacional-appwrite.nounpw.easypanel.host\/v1')\r\n            .setProject('6967b7f8001698edb973');\r\n        \r\n        console.log('\u2705 Cliente Appwrite configurado:', {\r\n            endpoint: 'https:\/\/nacional-appwrite.nounpw.easypanel.host\/v1',\r\n            projectId: '6967b7f8001698edb973'\r\n        });\r\n\r\n        const databases = new Databases(client);\r\n        const storage = new Storage(client);\r\n        const account = new Account(client);\r\n\r\n        console.log('\u2705 Servi\u00e7os Appwrite inicializados');\r\n\r\n        const DATABASE_ID = '6967b8ff002731c29a95';\r\n        const STORAGE_ID = '6967b94500011d45acea';\r\n        \r\n        console.log('\ud83d\udcca IDs de configura\u00e7\u00e3o:', { DATABASE_ID, STORAGE_ID });\r\n\r\n        const COLLECTIONS = {\r\n            PRODUTOS: '6967bcc5003806fa9935',           \/\/ catalogo_produtos\r\n            FORNECEDORES: '6967c10c0010f4715a26',       \/\/ fornecedores\r\n            PRODUTO_FORNECEDOR: '6967c1cc002f5a2f43d3', \/\/ produto_fornecedor\r\n            REQUISICOES: '6967c4070031aa0337fc',        \/\/ requisicoes\r\n            COMPRAS: '6967c564002acdb6cc16',            \/\/ compras\r\n            SALDO_DIARIO: '6967c9eb001646cee58c',       \/\/ saldo_diario\r\n            ARQUIVADO: '6967cca2000563cff34e',          \/\/ arquivamentos\r\n            ITENS_ARQUIVADOS: '6967cd3e000878292652',   \/\/ arquivamento_itens\r\n            EXCLUSOES: '6967cd92002fed7f2552',          \/\/ exclusoes\r\n            RANKING_CACHE: '6967cddc001f1b4567f2'       \/\/ ranking_cache\r\n        };\r\n\r\n        \/\/ Estado global\r\n        const appState = {\r\n            currentUser: null,\r\n            currentTab: 'requisicoes',\r\n            saldoAtual: 0,\r\n            requisicoes: [],\r\n            comprados: [],\r\n            catalogo: [],\r\n            arquivados: [],\r\n            exclusoes: []\r\n        };\r\n\r\n        \/\/ Servi\u00e7os implementados inline para vers\u00e3o completa\r\n        const authService = {\r\n            async getCurrentUser() {\r\n                try {\r\n                    return await account.get();\r\n                } catch (error) {\r\n                    return null;\r\n                }\r\n            },\r\n            async login(email, password) {\r\n                return await account.createEmailPasswordSession(email, password);\r\n            },\r\n            async logout() {\r\n                return await account.deleteSession('current');\r\n            }\r\n        };\r\n\r\n        \/\/ Inicializa\u00e7\u00e3o\r\n        document.addEventListener('DOMContentLoaded', async () => {\r\n            console.log('\ud83d\udd04 DOMContentLoaded - Iniciando aplica\u00e7\u00e3o');\r\n            showLoading();\r\n            \r\n            console.log('\ud83d\udd0d Verificando usu\u00e1rio logado...');\r\n            const user = await authService.getCurrentUser();\r\n            \r\n            if (user) {\r\n                console.log('\u2705 Usu\u00e1rio encontrado:', user.name, user.email);\r\n                appState.currentUser = user;\r\n                mostrarAplicacao();\r\n                await inicializarApp();\r\n            } else {\r\n                console.log('\u26a0\ufe0f Nenhum usu\u00e1rio logado, mostrando tela de login');\r\n                mostrarLogin();\r\n            }\r\n            hideLoading();\r\n\r\n            console.log('\ud83d\udd27 Configurando eventos...');\r\n            configurarEventos();\r\n            console.log('\u2705 Sistema inicializado com sucesso!');\r\n        });\r\n\r\n        function mostrarLogin() {\r\n            document.getElementById('loginScreen').classList.remove('hidden');\r\n            document.getElementById('appScreen').classList.add('hidden');\r\n        }\r\n\r\n        function mostrarAplicacao() {\r\n            document.getElementById('loginScreen').classList.add('hidden');\r\n            document.getElementById('appScreen').classList.remove('hidden');\r\n            document.getElementById('userName').textContent = appState.currentUser.name;\r\n        }\r\n\r\n        async function inicializarApp() {\r\n            await atualizarSaldo();\r\n            await carregarRequisicoes();\r\n            const hoje = new Date().toISOString().split('T')[0];\r\n            document.getElementById('filtroDataComprados').value = hoje;\r\n        }\r\n\r\n        async function atualizarSaldo() {\r\n            try {\r\n                const hoje = new Date().toISOString().split('T')[0];\r\n                const response = await databases.listDocuments(\r\n                    DATABASE_ID,\r\n                    COLLECTIONS.SALDO_DIARIO,\r\n                    [Query.equal('data', hoje), Query.limit(1)]\r\n                );\r\n\r\n                if (response.documents.length > 0) {\r\n                    const saldo = response.documents[0];\r\n                    appState.saldoAtual = saldo.saldo_final;\r\n                    document.getElementById('saldoAtual').textContent = formatarMoeda(saldo.saldo_final);\r\n                } else {\r\n                    appState.saldoAtual = 0;\r\n                    document.getElementById('saldoAtual').textContent = 'R$ 0,00';\r\n                }\r\n            } catch (error) {\r\n                console.error('Erro ao atualizar saldo:', error);\r\n                \r\n                \/\/ Se a cole\u00e7\u00e3o n\u00e3o existe, mostrar mensagem amig\u00e1vel\r\n                if (error.message && error.message.includes('could not be found')) {\r\n                    mostrarAvisoConfigura\u00e7\u00e3o();\r\n                }\r\n                \r\n                appState.saldoAtual = 0;\r\n                document.getElementById('saldoAtual').textContent = 'R$ 0,00';\r\n            }\r\n        }\r\n\r\n        function mostrarAvisoConfigura\u00e7\u00e3o() {\r\n            const aviso = document.createElement('div');\r\n            aviso.style.cssText = `\r\n                position: fixed;\r\n                top: 20px;\r\n                right: 20px;\r\n                background: #fee;\r\n                border: 2px solid #c33;\r\n                border-radius: 8px;\r\n                padding: 1.5rem;\r\n                max-width: 400px;\r\n                z-index: 10000;\r\n                box-shadow: 0 4px 12px rgba(0,0,0,0.15);\r\n            `;\r\n            aviso.innerHTML = `\r\n                <h3 style=\"color: #c33; margin: 0 0 0.5rem 0;\">\u26a0\ufe0f Banco de Dados N\u00e3o Configurado<\/h3>\r\n                <p style=\"margin: 0 0 1rem 0; color: #333;\">\r\n                    As cole\u00e7\u00f5es do Appwrite ainda n\u00e3o foram criadas. \r\n                    Voc\u00ea precisa configurar o banco de dados antes de usar o sistema.\r\n                <\/p>\r\n                <p style=\"margin: 0 0 1rem 0; font-size: 0.9rem; color: #666;\">\r\n                    <strong>Passos necess\u00e1rios:<\/strong><br>\r\n                    1. Acesse o Appwrite Console<br>\r\n                    2. Crie as 9 cole\u00e7\u00f5es conforme o README.md<br>\r\n                    3. Configure os campos e permiss\u00f5es<br>\r\n                    4. Recarregue esta p\u00e1gina\r\n                <\/p>\r\n                <button onclick=\"this.parentElement.remove()\" style=\"\r\n                    background: #c33;\r\n                    color: white;\r\n                    border: none;\r\n                    padding: 0.5rem 1rem;\r\n                    border-radius: 4px;\r\n                    cursor: pointer;\r\n                    font-weight: 600;\r\n                \">Entendi<\/button>\r\n            `;\r\n            document.body.appendChild(aviso);\r\n            \r\n            \/\/ Remover automaticamente ap\u00f3s 15 segundos\r\n            setTimeout(() => {\r\n                if (aviso.parentElement) {\r\n                    aviso.remove();\r\n                }\r\n            }, 15000);\r\n        }\r\n\r\n        function configurarEventos() {\r\n            \/\/ Login\r\n            document.getElementById('loginForm').addEventListener('submit', async (e) => {\r\n                e.preventDefault();\r\n                const email = document.getElementById('loginEmail').value;\r\n                const password = document.getElementById('loginPassword').value;\r\n                const errorEl = document.getElementById('loginError');\r\n\r\n                try {\r\n                    showLoading();\r\n                    await authService.login(email, password);\r\n                    const user = await authService.getCurrentUser();\r\n                    appState.currentUser = user;\r\n                    mostrarAplicacao();\r\n                    await inicializarApp();\r\n                    errorEl.textContent = '';\r\n                } catch (error) {\r\n                    errorEl.textContent = 'E-mail ou senha inv\u00e1lidos';\r\n                } finally {\r\n                    hideLoading();\r\n                }\r\n            });\r\n\r\n            \/\/ Logout\r\n            document.getElementById('logoutBtn').addEventListener('click', async () => {\r\n                try {\r\n                    showLoading();\r\n                    await authService.logout();\r\n                    mostrarLogin();\r\n                } catch (error) {\r\n                    console.error('Erro ao fazer logout:', error);\r\n                } finally {\r\n                    hideLoading();\r\n                }\r\n            });\r\n\r\n            \/\/ Navega\u00e7\u00e3o por abas\r\n            document.querySelectorAll('.tab-btn').forEach(btn => {\r\n                btn.addEventListener('click', () => {\r\n                    const tab = btn.dataset.tab;\r\n                    document.querySelectorAll('.tab-btn').forEach(b => b.classList.remove('active'));\r\n                    document.querySelectorAll('.tab-content').forEach(c => c.classList.remove('active'));\r\n                    btn.classList.add('active');\r\n                    document.getElementById(`tab-${tab}`).classList.add('active');\r\n                });\r\n            });\r\n\r\n            \/\/ Fechar modais\r\n            document.querySelectorAll('.close, [data-close]').forEach(el => {\r\n                el.addEventListener('click', (e) => {\r\n                    const modalId = e.target.dataset.modal || e.target.dataset.close;\r\n                    fecharModal(modalId);\r\n                });\r\n            });\r\n\r\n            \/\/ Bot\u00f5es\r\n            document.getElementById('btnNovoPedido').addEventListener('click', () => abrirModal('modalNovoPedido'));\r\n            document.getElementById('btnAdicionarSaldo').addEventListener('click', () => abrirModal('modalAdicionarSaldo'));\r\n            document.getElementById('btnAdicionarProduto').addEventListener('click', () => abrirModal('modalAdicionarCatalogo'));\r\n            \r\n            \/\/ Bot\u00f5es das novas funcionalidades\r\n            document.getElementById('btnNovaVenda').addEventListener('click', () => abrirModal('modalNovaVenda'));\r\n            document.getElementById('btnAdicionarSaldoPix').addEventListener('click', () => abrirModal('modalSaldoPix'));\r\n            document.getElementById('btnAgruparPDF').addEventListener('click', abrirModalAgrupamento);\r\n            document.getElementById('btnFiltrarVendas').addEventListener('click', async () => {\r\n                const dataFiltro = document.getElementById('filtroDataVendas').value;\r\n                const statusFiltro = document.getElementById('filtroStatusVendas').value;\r\n                await carregarVendas({ data: dataFiltro, status: statusFiltro });\r\n            });\r\n\r\n\r\n            \/\/ Formul\u00e1rio de Novo Pedido\r\n            const formNovoPedido = document.getElementById('formNovoPedido');\r\n            if (formNovoPedido) {\r\n                console.log('\u2705 Formul\u00e1rio encontrado, registrando evento submit');\r\n                formNovoPedido.addEventListener('submit', handleNovoPedido);\r\n            } else {\r\n                console.error('\u274c Formul\u00e1rio formNovoPedido n\u00e3o encontrado!');\r\n            }\r\n\r\n            \/\/ Formul\u00e1rio de Adicionar Saldo\r\n            const formAdicionarSaldo = document.getElementById('formAdicionarSaldo');\r\n            if (formAdicionarSaldo) {\r\n                console.log('\u2705 Formul\u00e1rio de saldo encontrado, registrando evento submit');\r\n                formAdicionarSaldo.addEventListener('submit', handleAdicionarSaldo);\r\n            } else {\r\n                console.error('\u274c Formul\u00e1rio formAdicionarSaldo n\u00e3o encontrado!');\r\n            }\r\n\r\n            \/\/ Formul\u00e1rio de Adicionar ao Cat\u00e1logo\r\n            const formAdicionarCatalogo = document.getElementById('formAdicionarCatalogo');\r\n            if (formAdicionarCatalogo) {\r\n                console.log('\u2705 Formul\u00e1rio de cat\u00e1logo encontrado, registrando evento submit');\r\n                formAdicionarCatalogo.addEventListener('submit', handleAdicionarCatalogo);\r\n            } else {\r\n                console.error('\u274c Formul\u00e1rio formAdicionarCatalogo n\u00e3o encontrado!');\r\n            }\r\n\r\n            \/\/ Formul\u00e1rio de Nova Venda\r\n            const formNovaVenda = document.getElementById('formNovaVenda');\r\n            if (formNovaVenda) {\r\n                formNovaVenda.addEventListener('submit', registrarVenda);\r\n                \r\n                \/\/ Autocomplete para vendas\r\n                const vendaProdutoInput = document.getElementById('vendaProdutoNome');\r\n                vendaProdutoInput.addEventListener('input', async (e) => {\r\n                    const termo = e.target.value;\r\n                    if (termo.length < 2) {\r\n                        document.getElementById('autocompleteVendaResults').innerHTML = '';\r\n                        return;\r\n                    }\r\n                    \r\n                    const produtos = await databases.listDocuments(\r\n                        DATABASE_ID,\r\n                        COLLECTIONS.PRODUTOS,\r\n                        [Query.equal('ativo', true), Query.limit(20)]\r\n                    );\r\n                    \r\n                    const filtrados = produtos.documents.filter(p => \r\n                        p.nome.toLowerCase().includes(termo.toLowerCase())\r\n                    );\r\n                    \r\n                    const resultsDiv = document.getElementById('autocompleteVendaResults');\r\n                    resultsDiv.innerHTML = filtrados.map(prod => `\r\n                        <div class=\"autocomplete-item\" onclick=\"selecionarProdutoVenda('${prod.productId}', '${prod.nome}', '${prod.imagemUrl || ''}')\">\r\n                            ${prod.imagemUrl ? `<img decoding=\"async\" src=\"${prod.imagemUrl}\" style=\"width: 40px; height: 40px; object-fit: cover; border-radius: 4px; margin-right: 0.5rem;\">` : ''}\r\n                            <span>${prod.nome}<\/span>\r\n                        <\/div>\r\n                    `).join('');\r\n                });\r\n                \r\n                \/\/ Calcular valor total automaticamente\r\n                document.getElementById('vendaQuantidade').addEventListener('input', calcularValorTotalVenda);\r\n                document.getElementById('vendaValorUnitario').addEventListener('input', calcularValorTotalVenda);\r\n            }\r\n\r\n            \/\/ Formul\u00e1rio de Saldo PIX\r\n            const formSaldoPix = document.getElementById('formSaldoPix');\r\n            if (formSaldoPix) {\r\n                formSaldoPix.addEventListener('submit', adicionarSaldoPix);\r\n            }\r\n\r\n\r\n            \/\/ Autocomplete de produtos\r\n            configurarAutocompleteProdutos();\r\n\r\n            \/\/ Formul\u00e1rio de Compra - calcular valor total\r\n            const compraValorUnitario = document.getElementById('compraValorUnitario');\r\n            const compraQuantidade = document.getElementById('compraQuantidade');\r\n            const compraValorTotal = document.getElementById('compraValorTotal');\r\n\r\n            function calcularValorTotal() {\r\n                const unitario = parseFloat(compraValorUnitario.value) || 0;\r\n                const quantidade = parseInt(compraQuantidade.value) || 0;\r\n                const total = unitario * quantidade;\r\n                compraValorTotal.value = formatarMoeda(total);\r\n            }\r\n\r\n            if (compraValorUnitario && compraQuantidade) {\r\n                compraValorUnitario.addEventListener('input', calcularValorTotal);\r\n                compraQuantidade.addEventListener('input', calcularValorTotal);\r\n            }\r\n\r\n            \/\/ Formul\u00e1rio de Comprar Produto\r\n            const formComprarProduto = document.getElementById('formComprarProduto');\r\n            if (formComprarProduto) {\r\n                console.log('\u2705 Formul\u00e1rio de compra encontrado, registrando evento submit');\r\n                formComprarProduto.addEventListener('submit', handleComprarProduto);\r\n            } else {\r\n                console.error('\u274c Formul\u00e1rio formComprarProduto n\u00e3o encontrado!');\r\n            }\r\n\r\n            \/\/ Navega\u00e7\u00e3o de abas - carregar dados ao trocar\r\n            document.querySelectorAll('.tab-btn').forEach(btn => {\r\n                btn.addEventListener('click', async () => {\r\n                    const tab = btn.dataset.tab;\r\n                    if (tab === 'requisicoes') {\r\n                        await carregarRequisicoes();\r\n                    } else if (tab === 'catalogo') {\r\n                        await carregarCatalogo();\r\n                    } else if (tab === 'comprados') {\r\n                        await carregarComprados();\r\n                    } else if (tab === 'vendas') {\r\n                        await carregarVendas();\r\n                    } else if (tab === 'saldo') {\r\n                        await carregarEntradasHoje();\r\n                    }\r\n                });\r\n            });\r\n        }\r\n\r\n        function calcularValorTotalVenda() {\r\n            const quantidade = parseInt(document.getElementById('vendaQuantidade').value) || 0;\r\n            const valorUnitario = parseFloat(document.getElementById('vendaValorUnitario').value) || 0;\r\n            const valorTotal = quantidade * valorUnitario;\r\n            document.getElementById('vendaValorTotal').value = valorTotal.toFixed(2);\r\n        }\r\n\r\n        function selecionarProdutoVenda(productId, nome, imagemUrl) {\r\n            document.getElementById('vendaProdutoNome').value = nome;\r\n            document.getElementById('vendaProdutoId').value = productId;\r\n            document.getElementById('vendaProdutoImagem').value = imagemUrl;\r\n            document.getElementById('autocompleteVendaResults').innerHTML = '';\r\n            \r\n            \/\/ Mostrar preview\r\n            if (imagemUrl) {\r\n                document.getElementById('vendaPreview').style.display = 'block';\r\n                document.getElementById('vendaPreviewImage').src = imagemUrl;\r\n            }\r\n        }\r\n\r\n\r\n        function trocarAba(tabName) {\r\n            \/\/ Remover active de todos os bot\u00f5es e conte\u00fados\r\n            document.querySelectorAll('.tab-btn').forEach(btn => btn.classList.remove('active'));\r\n            document.querySelectorAll('.tab-content').forEach(content => content.classList.remove('active'));\r\n\r\n            \/\/ Ativar o bot\u00e3o e conte\u00fado da aba selecionada\r\n            const btnTab = document.querySelector(`[data-tab=\"${tabName}\"]`);\r\n            const contentTab = document.getElementById(`tab-${tabName}`);\r\n\r\n            if (btnTab) btnTab.classList.add('active');\r\n            if (contentTab) contentTab.classList.add('active');\r\n\r\n            \/\/ Carregar dados da aba\r\n            if (tabName === 'comprados') {\r\n                carregarComprados();\r\n            }\r\n        }\r\n\r\n        async function carregarComprados() {\r\n            try {\r\n                showLoading();\r\n                console.log('\ud83d\udd04 Carregando comprados...');\r\n\r\n                const hoje = new Date().toISOString().split('T')[0];\r\n\r\n                \/\/ Buscar todas as compras\r\n                const compras = await databases.listDocuments(\r\n                    DATABASE_ID,\r\n                    COLLECTIONS.COMPRAS,\r\n                    [\r\n                        Query.equal('data_compra', hoje),\r\n                        Query.orderDesc('$createdAt'),\r\n                        Query.limit(100)\r\n                    ]\r\n                );\r\n\r\n                console.log('Compras encontradas:', compras.documents.length);\r\n\r\n                const container = document.getElementById('listaComprados');\r\n\r\n                if (compras.documents.length === 0) {\r\n                    container.innerHTML = `\r\n                        <div class=\"empty-state\">\r\n                            <div class=\"empty-state-icon\">\ud83d\uded2<\/div>\r\n                            <div class=\"empty-state-text\">Nenhuma compra realizada hoje<\/div>\r\n                        <\/div>\r\n                    `;\r\n                    return;\r\n                }\r\n\r\n                \/\/ Enriquecer dados com informa\u00e7\u00f5es de produtos e fornecedores\r\n                const comprasEnriquecidas = await Promise.all(\r\n                    compras.documents.map(async (compra) => {\r\n                        \/\/ Buscar produto\r\n                        const produtoResp = await databases.listDocuments(\r\n                            DATABASE_ID,\r\n                            COLLECTIONS.PRODUTOS,\r\n                            [Query.equal('productId', compra.productId), Query.limit(1)]\r\n                        );\r\n\r\n                        \/\/ Buscar fornecedor\r\n                        const fornecedorResp = await databases.listDocuments(\r\n                            DATABASE_ID,\r\n                            COLLECTIONS.FORNECEDORES,\r\n                            [Query.equal('fornecedorId', compra.fornecedorId), Query.limit(1)]\r\n                        );\r\n\r\n                        return {\r\n                            ...compra,\r\n                            produto: produtoResp.documents[0] || { nome: 'Produto n\u00e3o encontrado' },\r\n                            fornecedor: fornecedorResp.documents[0] || { nome: 'Fornecedor n\u00e3o encontrado' }\r\n                        };\r\n                    })\r\n                );\r\n\r\n                \/\/ Agrupar por fornecedor\r\n                const porFornecedor = {};\r\n                comprasEnriquecidas.forEach(compra => {\r\n                    const fornecedorNome = compra.fornecedor.nome;\r\n                    if (!porFornecedor[fornecedorNome]) {\r\n                        porFornecedor[fornecedorNome] = {\r\n                            nome: fornecedorNome,\r\n                            compras: [],\r\n                            total: 0\r\n                        };\r\n                    }\r\n                    porFornecedor[fornecedorNome].compras.push(compra);\r\n                    porFornecedor[fornecedorNome].total += compra.valor_total;\r\n                });\r\n\r\n                \/\/ Renderizar por fornecedor\r\n                container.innerHTML = Object.values(porFornecedor).map(fornecedor => `\r\n                    <div class=\"fornecedor-group\">\r\n                        <div class=\"fornecedor-header\">\r\n                            <div class=\"fornecedor-nome\">\ud83c\udfea ${fornecedor.nome}<\/div>\r\n                            <div class=\"fornecedor-total\">${formatarMoeda(fornecedor.total)}<\/div>\r\n                        <\/div>\r\n                        <div class=\"fornecedor-produtos\">\r\n                            ${fornecedor.compras.map(compra => `\r\n                                <div class=\"card\">\r\n                                    ${compra.produto.imagemUrl ? `<img decoding=\"async\" src=\"${compra.produto.imagemUrl}\" class=\"card-image\" alt=\"${compra.produto.nome}\">` : ''}\r\n                                    <h3 class=\"card-title\">${compra.produto.nome}<\/h3>\r\n                                    <div class=\"card-info\">\r\n                                        <div class=\"card-info-item\">\r\n                                            <span class=\"card-info-label\">Quantidade:<\/span>\r\n                                            <span class=\"card-info-value\">${compra.quantidade_comprada}<\/span>\r\n                                        <\/div>\r\n                                        <div class=\"card-info-item\">\r\n                                            <span class=\"card-info-label\">Valor Unit.:<\/span>\r\n                                            <span class=\"card-info-value\">${formatarMoeda(compra.valor_unitario)}<\/span>\r\n                                        <\/div>\r\n                                        <div class=\"card-info-item\">\r\n                                            <span class=\"card-info-label\">Total:<\/span>\r\n                                            <span class=\"card-info-value\" style=\"font-weight: 700; color: var(--success-color);\">${formatarMoeda(compra.valor_total)}<\/span>\r\n                                        <\/div>\r\n                                    <\/div>\r\n                                <\/div>\r\n                            `).join('')}\r\n                        <\/div>\r\n                    <\/div>\r\n                `).join('');\r\n\r\n                console.log('\u2705 Comprados carregados com sucesso');\r\n\r\n            } catch (error) {\r\n                console.error('\u274c Erro ao carregar comprados:', error);\r\n                document.getElementById('listaComprados').innerHTML = `\r\n                    <div class=\"empty-state\">\r\n                        <div class=\"empty-state-icon\">\u26a0\ufe0f<\/div>\r\n                        <div class=\"empty-state-text\">Erro ao carregar comprados<\/div>\r\n                    <\/div>\r\n                `;\r\n            } finally {\r\n                hideLoading();\r\n            }\r\n        }\r\n\r\n        async function abrirModalCompra(documentId, requisicaoId) {\r\n            try {\r\n                console.log('Abrindo modal de compra:', { documentId, requisicaoId });\r\n                \r\n                \/\/ Buscar dados da requisi\u00e7\u00e3o\r\n                const requisicao = await databases.getDocument(\r\n                    DATABASE_ID,\r\n                    COLLECTIONS.REQUISICOES,\r\n                    documentId\r\n                );\r\n\r\n                \/\/ Buscar dados do produto\r\n                const produtoResp = await databases.listDocuments(\r\n                    DATABASE_ID,\r\n                    COLLECTIONS.PRODUTOS,\r\n                    [Query.equal('productId', requisicao.productId), Query.limit(1)]\r\n                );\r\n\r\n                const produto = produtoResp.documents[0];\r\n\r\n                if (!produto) {\r\n                    alert('\u274c Produto n\u00e3o encontrado!');\r\n                    return;\r\n                }\r\n\r\n                \/\/ Preencher informa\u00e7\u00f5es no modal\r\n                const infoDiv = document.getElementById('produtoCompraInfo');\r\n                infoDiv.innerHTML = `\r\n                    <div style=\"margin-bottom: 1.5rem; padding: 1rem; background: var(--background); border-radius: var(--border-radius);\">\r\n                        ${produto.imagemUrl ? `<img decoding=\"async\" src=\"${produto.imagemUrl}\" style=\"width: 100%; max-height: 200px; object-fit: cover; border-radius: var(--border-radius); margin-bottom: 1rem;\" alt=\"${produto.nome}\">` : ''}\r\n                        <h3 style=\"margin: 0 0 0.5rem 0;\">${produto.nome}<\/h3>\r\n                        <p style=\"margin: 0; color: var(--text-secondary);\">Quantidade desejada: <strong>${requisicao.quantidade_desejada}<\/strong><\/p>\r\n                        ${requisicao.local_compra ? `<p style=\"margin: 0.25rem 0 0 0; color: var(--text-secondary);\">Local: ${requisicao.local_compra}<\/p>` : ''}\r\n                    <\/div>\r\n                `;\r\n\r\n                \/\/ Preencher campos\r\n                document.getElementById('compraRequisicaoId').value = documentId;\r\n                document.getElementById('compraQuantidade').value = requisicao.quantidade_desejada;\r\n                document.getElementById('compraFornecedor').value = '';\r\n                document.getElementById('compraValorUnitario').value = '';\r\n                document.getElementById('compraValorTotal').value = 'R$ 0,00';\r\n\r\n                \/\/ Abrir modal\r\n                abrirModal('modalComprarProduto');\r\n\r\n            } catch (error) {\r\n                console.error('Erro ao abrir modal de compra:', error);\r\n                alert('\u274c Erro ao carregar dados: ' + error.message);\r\n            }\r\n        }\r\n\r\n        async function excluirRequisicao(documentId, requisicaoId) {\r\n            if (!confirm('Tem certeza que deseja excluir esta requisi\u00e7\u00e3o?')) {\r\n                return;\r\n            }\r\n\r\n            try {\r\n                showLoading();\r\n                console.log('Excluindo requisi\u00e7\u00e3o:', { documentId, requisicaoId });\r\n\r\n                \/\/ Atualizar status para 'excluido'\r\n                await databases.updateDocument(\r\n                    DATABASE_ID,\r\n                    COLLECTIONS.REQUISICOES,\r\n                    documentId,\r\n                    { status: 'excluido' }\r\n                );\r\n\r\n                console.log('\u2705 Requisi\u00e7\u00e3o exclu\u00edda');\r\n                await carregarRequisicoes();\r\n                alert('\u2705 Requisi\u00e7\u00e3o exclu\u00edda com sucesso!');\r\n\r\n            } catch (error) {\r\n                console.error('\u274c Erro ao excluir requisi\u00e7\u00e3o:', error);\r\n                alert('\u274c Erro ao excluir: ' + error.message);\r\n            } finally {\r\n                hideLoading();\r\n            }\r\n        }\r\n\r\n        function configurarAutocompleteProdutos() {\r\n            const input = document.getElementById('produtoNome');\r\n            const resultsDiv = document.getElementById('autocompleteResults');\r\n            const hiddenInput = document.getElementById('produtoIdSelecionado');\r\n            let produtos = [];\r\n            let selectedIndex = -1;\r\n\r\n            \/\/ Carregar produtos do cat\u00e1logo\r\n            async function carregarProdutosCatalogo() {\r\n                try {\r\n                    const response = await databases.listDocuments(\r\n                        DATABASE_ID,\r\n                        COLLECTIONS.PRODUTOS,\r\n                        [Query.equal('ativo', true), Query.limit(100)]\r\n                    );\r\n                    produtos = response.documents;\r\n                    console.log('Produtos carregados para autocomplete:', produtos.length);\r\n                } catch (error) {\r\n                    console.error('Erro ao carregar produtos:', error);\r\n                }\r\n            }\r\n\r\n            \/\/ Filtrar e exibir resultados\r\n            function mostrarResultados() {\r\n                const termo = input.value.trim().toLowerCase();\r\n                resultsDiv.innerHTML = '';\r\n                selectedIndex = -1;\r\n\r\n                if (termo.length < 2) {\r\n                    resultsDiv.classList.remove('show');\r\n                    return;\r\n                }\r\n\r\n                const resultados = produtos.filter(p => \r\n                    p.nome.toLowerCase().includes(termo)\r\n                );\r\n\r\n                if (resultados.length === 0) {\r\n                    resultsDiv.innerHTML = '<div class=\"autocomplete-no-results\">\ud83d\udd0d Produto n\u00e3o encontrado no cat\u00e1logo<\/div>';\r\n                    resultsDiv.classList.add('show');\r\n                    return;\r\n                }\r\n\r\n                resultsDiv.innerHTML = resultados.map((produto, index) => `\r\n                    <div class=\"autocomplete-item\" data-index=\"${index}\" data-product-id=\"${produto.productId}\" data-product-name=\"${produto.nome}\">\r\n                        ${produto.imagemUrl ? \r\n                            `<img decoding=\"async\" src=\"${produto.imagemUrl}\" class=\"autocomplete-item-image\" alt=\"${produto.nome}\">` :\r\n                            '<div class=\"autocomplete-item-placeholder\">\ud83d\udce6<\/div>'\r\n                        }\r\n                        <span class=\"autocomplete-item-name\">${produto.nome}<\/span>\r\n                    <\/div>\r\n                `).join('');\r\n\r\n                resultsDiv.classList.add('show');\r\n\r\n                \/\/ Adicionar eventos de clique\r\n                resultsDiv.querySelectorAll('.autocomplete-item').forEach(item => {\r\n                    item.addEventListener('click', async () => {\r\n                        await selecionarProduto(item.dataset.productId, item.dataset.productName);\r\n                    });\r\n                });\r\n            }\r\n\r\n            \/\/ Selecionar produto\r\n            async function selecionarProduto(productId, nome) {\r\n                input.value = nome;\r\n                hiddenInput.value = productId;\r\n                resultsDiv.classList.remove('show');\r\n                console.log('Produto selecionado:', { productId, nome });\r\n\r\n                \/\/ Buscar dados completos do produto\r\n                const produtoSelecionado = produtos.find(p => p.productId === productId);\r\n                \r\n                if (produtoSelecionado) {\r\n                    \/\/ Exibir foto do produto\r\n                    const previewDiv = document.getElementById('produtoPreview');\r\n                    const previewImg = document.getElementById('produtoPreviewImage');\r\n                    const hiddenImagemUrl = document.getElementById('produtoImagemUrl');\r\n                    \r\n                    if (produtoSelecionado.imagemUrl) {\r\n                        previewImg.src = produtoSelecionado.imagemUrl;\r\n                        hiddenImagemUrl.value = produtoSelecionado.imagemUrl;\r\n                        previewDiv.style.display = 'block';\r\n                    } else {\r\n                        previewDiv.style.display = 'none';\r\n                    }\r\n\r\n                    \/\/ Buscar hist\u00f3rico de compras para preencher local automaticamente\r\n                    await buscarLocalHistorico(productId);\r\n                }\r\n            }\r\n\r\n            \/\/ Buscar local de compra mais recente do produto\r\n            async function buscarLocalHistorico(productId) {\r\n                try {\r\n                    \/\/ Buscar requisi\u00e7\u00f5es anteriores deste produto\r\n                    const historicoReq = await databases.listDocuments(\r\n                        DATABASE_ID,\r\n                        COLLECTIONS.REQUISICOES,\r\n                        [\r\n                            Query.equal('productId', productId),\r\n                            Query.notEqual('local_compra', null),\r\n                            Query.orderDesc('$createdAt'),\r\n                            Query.limit(1)\r\n                        ]\r\n                    );\r\n\r\n                    if (historicoReq.documents.length > 0 && historicoReq.documents[0].local_compra) {\r\n                        const localInput = document.getElementById('produtoLocal');\r\n                        localInput.value = historicoReq.documents[0].local_compra;\r\n                        console.log('\u2705 Local preenchido automaticamente:', historicoReq.documents[0].local_compra);\r\n                    } else {\r\n                        console.log('\u2139\ufe0f Nenhum hist\u00f3rico de local encontrado para este produto');\r\n                    }\r\n                } catch (error) {\r\n                    console.error('Erro ao buscar hist\u00f3rico de local:', error);\r\n                }\r\n            }\r\n\r\n            \/\/ Navega\u00e7\u00e3o com teclado\r\n            input.addEventListener('keydown', async (e) => {\r\n                const items = resultsDiv.querySelectorAll('.autocomplete-item');\r\n                \r\n                if (e.key === 'ArrowDown') {\r\n                    e.preventDefault();\r\n                    selectedIndex = Math.min(selectedIndex + 1, items.length - 1);\r\n                    updateSelection(items);\r\n                } else if (e.key === 'ArrowUp') {\r\n                    e.preventDefault();\r\n                    selectedIndex = Math.max(selectedIndex - 1, 0);\r\n                    updateSelection(items);\r\n                } else if (e.key === 'Enter' && selectedIndex >= 0) {\r\n                    e.preventDefault();\r\n                    const item = items[selectedIndex];\r\n                    await selecionarProduto(item.dataset.productId, item.dataset.productName);\r\n                } else if (e.key === 'Escape') {\r\n                    resultsDiv.classList.remove('show');\r\n                }\r\n            });\r\n\r\n            function updateSelection(items) {\r\n                items.forEach((item, index) => {\r\n                    if (index === selectedIndex) {\r\n                        item.classList.add('active');\r\n                        item.scrollIntoView({ block: 'nearest' });\r\n                    } else {\r\n                        item.classList.remove('active');\r\n                    }\r\n                });\r\n            }\r\n\r\n            \/\/ Input change\r\n            input.addEventListener('input', () => {\r\n                hiddenInput.value = ''; \/\/ Limpar sele\u00e7\u00e3o anterior\r\n                document.getElementById('produtoImagemUrl').value = '';\r\n                document.getElementById('produtoPreview').style.display = 'none';\r\n                mostrarResultados();\r\n            });\r\n\r\n            \/\/ Fechar ao clicar fora\r\n            document.addEventListener('click', (e) => {\r\n                if (!input.contains(e.target) && !resultsDiv.contains(e.target)) {\r\n                    resultsDiv.classList.remove('show');\r\n                }\r\n            });\r\n\r\n            \/\/ Carregar produtos ao abrir modal\r\n            document.getElementById('btnNovoPedido').addEventListener('click', () => {\r\n                carregarProdutosCatalogo();\r\n            });\r\n        }\r\n\r\n        async function handleNovoPedido(e) {\r\n            e.preventDefault();\r\n            console.log('=== INICIANDO handleNovoPedido ===');\r\n            showLoading();\r\n\r\n            try {\r\n                const nome = document.getElementById('produtoNome').value.trim();\r\n                const produtoIdSelecionado = document.getElementById('produtoIdSelecionado').value;\r\n                const fotoUrl = document.getElementById('produtoFoto').value.trim();\r\n                const fotoFile = document.getElementById('produtoFotoUpload').files[0];\r\n                const quantidade = parseInt(document.getElementById('produtoQuantidade').value);\r\n                const prioridade = document.getElementById('produtoPrioridade').value === 'sim';\r\n                const local = document.getElementById('produtoLocal').value.trim();\r\n\r\n                console.log('Dados completos:', { nome, produtoIdSelecionado, quantidade, prioridade, local });\r\n\r\n                \/\/ Validar usu\u00e1rio logado\r\n                if (!appState.currentUser) {\r\n                    throw new Error('Usu\u00e1rio n\u00e3o est\u00e1 logado. Por favor, fa\u00e7a login novamente.');\r\n                }\r\n                console.log('Usu\u00e1rio logado:', appState.currentUser.$id, appState.currentUser.name);\r\n\r\n                \/\/ 1. Usar produto selecionado do autocomplete ou buscar\/criar novo\r\n                let productId;\r\n                if (produtoIdSelecionado) {\r\n                    console.log('Usando produto selecionado do autocomplete:', produtoIdSelecionado);\r\n                    productId = produtoIdSelecionado;\r\n                } else {\r\n                    console.log('Buscando ou criando produto...');\r\n                    productId = await buscarOuCriarProduto(nome, fotoUrl, fotoFile);\r\n                }\r\n                console.log('ProductId obtido:', productId);\r\n\r\n                \/\/ 2. Criar requisi\u00e7\u00e3o\r\n                const dadosRequisicao = {\r\n                    requisicaoId: ID.unique(),\r\n                    productId: productId,\r\n                    quantidade_desejada: quantidade,\r\n                    prioridade: prioridade,\r\n                    local_compra: local || null,\r\n                    status: 'pendente',\r\n                    usuarioId: appState.currentUser.$id,\r\n                    data_criacao: new Date().toISOString()\r\n                };\r\n                console.log('Criando requisi\u00e7\u00e3o com dados:', dadosRequisicao);\r\n                console.log('IDs de banco:', { DATABASE_ID, COLLECTION_ID: COLLECTIONS.REQUISICOES });\r\n                \r\n                \/\/ Tentar criar o documento\r\n                console.log('\ud83d\udd04 Chamando databases.createDocument...');\r\n                const requisicao = await databases.createDocument(\r\n                    DATABASE_ID,\r\n                    COLLECTIONS.REQUISICOES,\r\n                    ID.unique(),\r\n                    dadosRequisicao\r\n                );\r\n                console.log('\u2705 Documento criado no Appwrite, resposta:', requisicao);\r\n\r\n                console.log('\u2705 Requisi\u00e7\u00e3o criada com sucesso:', requisicao);\r\n                \r\n                \/\/ Fechar modal e limpar formul\u00e1rio\r\n                fecharModal('modalNovoPedido');\r\n                document.getElementById('formNovoPedido').reset();\r\n                document.getElementById('produtoIdSelecionado').value = '';\r\n                document.getElementById('produtoImagemUrl').value = '';\r\n                document.getElementById('produtoPreview').style.display = 'none';\r\n\r\n                \/\/ Recarregar lista de requisi\u00e7\u00f5es\r\n                await carregarRequisicoes();\r\n\r\n                alert('\u2705 Pedido adicionado com sucesso!');\r\n            } catch (error) {\r\n                console.error('\u274c ERRO ao criar pedido:', error);\r\n                console.error('Tipo do erro:', error.constructor.name);\r\n                console.error('Mensagem:', error.message);\r\n                console.error('Detalhes completos:', error);\r\n                console.error('JSON do erro:', JSON.stringify(error, null, 2));\r\n                \r\n                let mensagemErro = error.message || 'Erro desconhecido';\r\n                \r\n                if (error.code) {\r\n                    console.error('C\u00f3digo do erro:', error.code);\r\n                    mensagemErro += `\\nC\u00f3digo: ${error.code}`;\r\n                    \r\n                    \/\/ Erro de permiss\u00e3o\r\n                    if (error.code === 401) {\r\n                        mensagemErro += '\\n\\n\ud83d\udd12 ERRO DE AUTENTICA\u00c7\u00c3O\\nVoc\u00ea n\u00e3o est\u00e1 autenticado. Fa\u00e7a login novamente.';\r\n                    } else if (error.code === 403) {\r\n                        mensagemErro += '\\n\\n\ud83d\udeab ERRO DE PERMISS\u00c3O\\nVoc\u00ea n\u00e3o tem permiss\u00e3o para criar documentos.\\n\\nVerifique no Appwrite Console:\\n1. Settings \u2192 Permissions da cole\u00e7\u00e3o REQUISICOES\\n2. Adicione: Create - role:all (ou role:users)';\r\n                    } else if (error.code === 404) {\r\n                        mensagemErro += '\\n\\n\u26a0\ufe0f COLE\u00c7\u00c3O N\u00c3O ENCONTRADA\\nA cole\u00e7\u00e3o REQUISICOES n\u00e3o existe no Appwrite.\\nVerifique o ID: ' + COLLECTIONS.REQUISICOES;\r\n                    }\r\n                }\r\n                \r\n                if (error.response) {\r\n                    console.error('Response do erro:', error.response);\r\n                    mensagemErro += `\\nResponse: ${JSON.stringify(error.response)}`;\r\n                }\r\n                \r\n                if (error.message && error.message.includes('Invalid document structure')) {\r\n                    mensagemErro += '\\n\\n\u26a0\ufe0f Os atributos da cole\u00e7\u00e3o no Appwrite n\u00e3o correspondem aos campos enviados.\\n\\n' +\r\n                        'Verifique se a cole\u00e7\u00e3o REQUISICOES tem os atributos:\\n' +\r\n                        '- requisicaoId (string)\\n' +\r\n                        '- productId (string)\\n' +\r\n                        '- quantidade_desejada (integer)\\n' +\r\n                        '- prioridade (boolean)\\n' +\r\n                        '- local_compra (string, opcional)\\n' +\r\n                        '- status (string)\\n' +\r\n                        '- usuarioId (string)\\n' +\r\n                        '- data_criacao (datetime)';\r\n                }\r\n                \r\n                alert('\u274c Erro ao adicionar pedido: ' + mensagemErro);\r\n            } finally {\r\n                console.log('=== FIM handleNovoPedido ===');\r\n                hideLoading();\r\n            }\r\n        }\r\n\r\n        async function handleAdicionarSaldo(e) {\r\n            e.preventDefault();\r\n            console.log('=== INICIANDO handleAdicionarSaldo ===');\r\n            showLoading();\r\n\r\n            try {\r\n                const valor = parseFloat(document.getElementById('saldoValor').value);\r\n                const formaPagamento = document.getElementById('saldoFormaPagamento').value;\r\n                \r\n                console.log('Dados do saldo:', { valor, formaPagamento });\r\n\r\n                \/\/ Validar usu\u00e1rio\r\n                if (!appState.currentUser) {\r\n                    throw new Error('Usu\u00e1rio n\u00e3o est\u00e1 logado');\r\n                }\r\n\r\n                const hoje = new Date().toISOString().split('T')[0];\r\n                console.log('Data de hoje:', hoje);\r\n\r\n                \/\/ Buscar saldo existente do dia\r\n                const saldosExistentes = await databases.listDocuments(\r\n                    DATABASE_ID,\r\n                    COLLECTIONS.SALDO_DIARIO,\r\n                    [Query.equal('data', hoje), Query.limit(1)]\r\n                );\r\n\r\n                console.log('Saldos existentes:', saldosExistentes);\r\n\r\n                let novoSaldoFinal = valor;\r\n                let saldoInicial = 0;\r\n\r\n                if (saldosExistentes.documents.length > 0) {\r\n                    \/\/ Atualizar saldo existente - adicionar ao saldo inicial\r\n                    const saldoAtual = saldosExistentes.documents[0];\r\n                    const novoSaldoInicial = (saldoAtual.saldo_inicial || 0) + valor;\r\n                    const totalGasto = saldoAtual.total_gasto || 0;\r\n                    novoSaldoFinal = novoSaldoInicial - totalGasto;\r\n\r\n                    console.log('Atualizando saldo existente:', {\r\n                        documentId: saldoAtual.$id,\r\n                        saldoInicialAntigo: saldoAtual.saldo_inicial,\r\n                        valorAdicionado: valor,\r\n                        novoSaldoInicial,\r\n                        totalGasto,\r\n                        novoSaldoFinal\r\n                    });\r\n\r\n                    await databases.updateDocument(\r\n                        DATABASE_ID,\r\n                        COLLECTIONS.SALDO_DIARIO,\r\n                        saldoAtual.$id,\r\n                        {\r\n                            saldo_inicial: novoSaldoInicial,\r\n                            saldo_final: novoSaldoFinal,\r\n                            forma_pagamento: formaPagamento,\r\n                            data_atualizacao: new Date().toISOString()\r\n                        }\r\n                    );\r\n                    \r\n                    saldoInicial = novoSaldoInicial;\r\n                } else {\r\n                    \/\/ Criar novo registro de saldo\r\n                    saldoInicial = valor;\r\n                    novoSaldoFinal = valor;\r\n\r\n                    console.log('Criando novo registro de saldo:', {\r\n                        data: hoje,\r\n                        saldoInicial,\r\n                        saldoFinal: novoSaldoFinal\r\n                    });\r\n\r\n                    await databases.createDocument(\r\n                        DATABASE_ID,\r\n                        COLLECTIONS.SALDO_DIARIO,\r\n                        ID.unique(),\r\n                        {\r\n                            saldoId: ID.unique(),\r\n                            data: hoje,\r\n                            saldo_inicial: saldoInicial,\r\n                            total_gasto: 0,\r\n                            saldo_final: novoSaldoFinal,\r\n                            forma_pagamento: formaPagamento,\r\n                            usuarioId: appState.currentUser.$id,\r\n                            data_atualizacao: new Date().toISOString()\r\n                        }\r\n                    );\r\n                }\r\n\r\n                console.log('\u2705 Saldo atualizado com sucesso');\r\n\r\n                \/\/ Atualizar display\r\n                appState.saldoAtual = novoSaldoFinal;\r\n                document.getElementById('saldoAtual').textContent = formatarMoeda(novoSaldoFinal);\r\n                \r\n                \/\/ Atualizar valores na aba de saldo se estiver vis\u00edvel\r\n                document.getElementById('saldoHoje').textContent = formatarMoeda(novoSaldoFinal);\r\n                document.getElementById('saldoInicial').textContent = formatarMoeda(saldoInicial);\r\n\r\n                \/\/ Fechar modal e limpar formul\u00e1rio\r\n                fecharModal('modalAdicionarSaldo');\r\n                document.getElementById('formAdicionarSaldo').reset();\r\n\r\n                alert(`\u2705 Saldo de ${formatarMoeda(valor)} adicionado com sucesso!\\nNovo saldo: ${formatarMoeda(novoSaldoFinal)}`);\r\n\r\n            } catch (error) {\r\n                console.error('\u274c ERRO ao adicionar saldo:', error);\r\n                console.error('Mensagem:', error.message);\r\n                console.error('Detalhes:', error);\r\n                \r\n                let mensagem = error.message || 'Erro desconhecido';\r\n                if (error.code === 404) {\r\n                    mensagem += '\\n\\n\u26a0\ufe0f A cole\u00e7\u00e3o SALDO_DIARIO n\u00e3o foi encontrada no Appwrite.';\r\n                } else if (error.code === 403) {\r\n                    mensagem += '\\n\\n\ud83d\udeab Sem permiss\u00e3o para criar\/atualizar saldo.\\nVerifique as permiss\u00f5es da cole\u00e7\u00e3o no Appwrite Console.';\r\n                }\r\n                \r\n                alert('\u274c Erro ao adicionar saldo: ' + mensagem);\r\n            } finally {\r\n                console.log('=== FIM handleAdicionarSaldo ===');\r\n                hideLoading();\r\n            }\r\n        }\r\n\r\n        async function handleComprarProduto(e) {\r\n            e.preventDefault();\r\n            console.log('=== INICIANDO handleComprarProduto ===');\r\n            showLoading();\r\n\r\n            try {\r\n                const requisicaoDocId = document.getElementById('compraRequisicaoId').value;\r\n                const fornecedor = document.getElementById('compraFornecedor').value.trim();\r\n                const valorUnitario = parseFloat(document.getElementById('compraValorUnitario').value);\r\n                const quantidade = parseInt(document.getElementById('compraQuantidade').value);\r\n                const valorTotal = valorUnitario * quantidade;\r\n\r\n                console.log('Dados da compra:', { requisicaoDocId, fornecedor, valorUnitario, quantidade, valorTotal });\r\n\r\n                if (!appState.currentUser) {\r\n                    throw new Error('Usu\u00e1rio n\u00e3o est\u00e1 logado');\r\n                }\r\n\r\n                \/\/ Buscar requisi\u00e7\u00e3o\r\n                const requisicao = await databases.getDocument(\r\n                    DATABASE_ID,\r\n                    COLLECTIONS.REQUISICOES,\r\n                    requisicaoDocId\r\n                );\r\n\r\n                console.log('Requisi\u00e7\u00e3o encontrada:', requisicao);\r\n\r\n                \/\/ Buscar ou criar fornecedor\r\n                let fornecedorId = await buscarOuCriarFornecedor(fornecedor);\r\n                console.log('FornecedorId:', fornecedorId);\r\n\r\n                \/\/ Criar registro de compra\r\n                const dadosCompra = {\r\n                    compraId: ID.unique(),\r\n                    requisicaoId: requisicao.requisicaoId,\r\n                    productId: requisicao.productId,\r\n                    fornecedorId: fornecedorId,\r\n                    quantidade_comprada: quantidade,\r\n                    valor_unitario: valorUnitario,\r\n                    valor_total: valorTotal,\r\n                    forma_pagamento: 'Dinheiro', \/\/ Valor padr\u00e3o - pode ser customizado depois\r\n                    usuarioId: appState.currentUser.$id,\r\n                    data_compra: new Date().toISOString().split('T')[0]\r\n                };\r\n\r\n                console.log('Criando compra:', dadosCompra);\r\n\r\n                const compra = await databases.createDocument(\r\n                    DATABASE_ID,\r\n                    COLLECTIONS.COMPRAS,\r\n                    ID.unique(),\r\n                    dadosCompra\r\n                );\r\n\r\n                console.log('\u2705 Compra criada:', compra);\r\n\r\n                \/\/ Atualizar status da requisi\u00e7\u00e3o para 'comprado'\r\n                await databases.updateDocument(\r\n                    DATABASE_ID,\r\n                    COLLECTIONS.REQUISICOES,\r\n                    requisicaoDocId,\r\n                    { status: 'comprado' }\r\n                );\r\n\r\n                console.log('\u2705 Status da requisi\u00e7\u00e3o atualizado');\r\n\r\n                \/\/ Atualizar saldo do dia\r\n                await atualizarSaldoAposCompra(valorTotal);\r\n\r\n                \/\/ Fechar modal e limpar\r\n                fecharModal('modalComprarProduto');\r\n                document.getElementById('formComprarProduto').reset();\r\n\r\n                \/\/ Recarregar lista\r\n                await carregarRequisicoes();\r\n                await atualizarSaldo();\r\n\r\n                alert(`\u2705 Compra realizada com sucesso!\\nTotal: ${formatarMoeda(valorTotal)}`);\r\n\r\n                \/\/ Trocar para aba Comprados\r\n                trocarAba('comprados');\r\n\r\n            } catch (error) {\r\n                console.error('\u274c ERRO ao comprar produto:', error);\r\n                console.error('Detalhes:', JSON.stringify(error, null, 2));\r\n\r\n                let mensagem = error.message || 'Erro desconhecido';\r\n                if (error.code === 404) {\r\n                    mensagem += '\\n\\n\u26a0\ufe0f Cole\u00e7\u00e3o n\u00e3o encontrada. Verifique COMPRAS ou FORNECEDORES.';\r\n                } else if (error.code === 403) {\r\n                    mensagem += '\\n\\n\ud83d\udeab Sem permiss\u00e3o. Verifique as permiss\u00f5es no Appwrite Console.';\r\n                }\r\n\r\n                alert('\u274c Erro ao realizar compra: ' + mensagem);\r\n            } finally {\r\n                console.log('=== FIM handleComprarProduto ===');\r\n                hideLoading();\r\n            }\r\n        }\r\n\r\n        async function buscarOuCriarFornecedor(nome) {\r\n            try {\r\n                \/\/ Buscar fornecedor existente\r\n                const response = await databases.listDocuments(\r\n                    DATABASE_ID,\r\n                    COLLECTIONS.FORNECEDORES,\r\n                    [Query.equal('nome', nome), Query.limit(1)]\r\n                );\r\n\r\n                if (response.documents.length > 0) {\r\n                    return response.documents[0].fornecedorId;\r\n                }\r\n\r\n                \/\/ Criar novo fornecedor\r\n                const novoFornecedor = await databases.createDocument(\r\n                    DATABASE_ID,\r\n                    COLLECTIONS.FORNECEDORES,\r\n                    ID.unique(),\r\n                    {\r\n                        fornecedorId: ID.unique(),\r\n                        nome: nome,\r\n                        ativo: true,\r\n                        dataCriacao: new Date().toISOString()\r\n                    }\r\n                );\r\n\r\n                return novoFornecedor.fornecedorId;\r\n            } catch (error) {\r\n                console.error('Erro ao buscar\/criar fornecedor:', error);\r\n                throw error;\r\n            }\r\n        }\r\n\r\n        async function atualizarSaldoAposCompra(valorGasto) {\r\n            try {\r\n                const hoje = new Date().toISOString().split('T')[0];\r\n\r\n                const saldosExistentes = await databases.listDocuments(\r\n                    DATABASE_ID,\r\n                    COLLECTIONS.SALDO_DIARIO,\r\n                    [Query.equal('data', hoje), Query.limit(1)]\r\n                );\r\n\r\n                if (saldosExistentes.documents.length > 0) {\r\n                    const saldoAtual = saldosExistentes.documents[0];\r\n                    const novoTotalGasto = (saldoAtual.total_gasto || 0) + valorGasto;\r\n                    const novoSaldoFinal = saldoAtual.saldo_inicial - novoTotalGasto;\r\n\r\n                    await databases.updateDocument(\r\n                        DATABASE_ID,\r\n                        COLLECTIONS.SALDO_DIARIO,\r\n                        saldoAtual.$id,\r\n                        {\r\n                            total_gasto: novoTotalGasto,\r\n                            saldo_final: novoSaldoFinal,\r\n                            data_atualizacao: new Date().toISOString()\r\n                        }\r\n                    );\r\n\r\n                    console.log('\u2705 Saldo atualizado:', { novoTotalGasto, novoSaldoFinal });\r\n                } else {\r\n                    console.log('\u26a0\ufe0f Nenhum saldo cadastrado para hoje');\r\n                }\r\n            } catch (error) {\r\n                console.error('Erro ao atualizar saldo:', error);\r\n                \/\/ N\u00e3o bloquear a compra se falhar atualizar saldo\r\n            }\r\n        }\r\n\r\n        async function handleAdicionarCatalogo(e) {\r\n            e.preventDefault();\r\n            console.log('=== INICIANDO handleAdicionarCatalogo ===');\r\n            showLoading();\r\n\r\n            try {\r\n                const nome = document.getElementById('catalogoNome').value.trim();\r\n                const fotoUrl = document.getElementById('catalogoFoto').value.trim();\r\n                const fotoFile = document.getElementById('catalogoFotoUpload').files[0];\r\n\r\n                console.log('Dados do cat\u00e1logo:', { nome, temFotoUrl: !!fotoUrl, temFotoFile: !!fotoFile });\r\n\r\n                if (!nome) {\r\n                    throw new Error('Nome do produto \u00e9 obrigat\u00f3rio');\r\n                }\r\n\r\n                \/\/ Verificar se produto j\u00e1 existe\r\n                const existente = await databases.listDocuments(\r\n                    DATABASE_ID,\r\n                    COLLECTIONS.PRODUTOS,\r\n                    [Query.equal('nome', nome), Query.limit(1)]\r\n                );\r\n\r\n                if (existente.documents.length > 0) {\r\n                    alert('\u26a0\ufe0f J\u00e1 existe um produto com este nome no cat\u00e1logo!');\r\n                    return;\r\n                }\r\n\r\n                \/\/ Upload de imagem se houver arquivo\r\n                let imagemUrl = fotoUrl || '';\r\n                let imagemId = null;\r\n\r\n                if (fotoFile) {\r\n                    console.log('Fazendo upload de imagem...');\r\n                    const uploadResult = await storage.createFile(\r\n                        STORAGE_ID,\r\n                        ID.unique(),\r\n                        fotoFile\r\n                    );\r\n                    imagemId = uploadResult.$id;\r\n                    imagemUrl = `https:\/\/nacional-appwrite.nounpw.easypanel.host\/v1\/storage\/buckets\/${STORAGE_ID}\/files\/${imagemId}\/view?project=6967b7f8001698edb973`;\r\n                    console.log('Upload conclu\u00eddo:', { imagemId, imagemUrl });\r\n                }\r\n\r\n                \/\/ Criar produto no cat\u00e1logo\r\n                const dadosProduto = {\r\n                    productId: ID.unique(),\r\n                    nome: nome,\r\n                    imagemId: imagemId,\r\n                    imagemUrl: imagemUrl,\r\n                    ativo: true,\r\n                    data_criacao: new Date().toISOString()\r\n                };\r\n\r\n                console.log('Criando produto no cat\u00e1logo:', dadosProduto);\r\n\r\n                const produto = await databases.createDocument(\r\n                    DATABASE_ID,\r\n                    COLLECTIONS.PRODUTOS,\r\n                    ID.unique(),\r\n                    dadosProduto\r\n                );\r\n\r\n                console.log('\u2705 Produto criado no cat\u00e1logo:', produto);\r\n\r\n                \/\/ Fechar modal e limpar formul\u00e1rio\r\n                fecharModal('modalAdicionarCatalogo');\r\n                document.getElementById('formAdicionarCatalogo').reset();\r\n\r\n                \/\/ Recarregar cat\u00e1logo\r\n                await carregarCatalogo();\r\n\r\n                alert('\u2705 Produto adicionado ao cat\u00e1logo com sucesso!');\r\n\r\n            } catch (error) {\r\n                console.error('\u274c ERRO ao adicionar ao cat\u00e1logo:', error);\r\n                console.error('Mensagem:', error.message);\r\n                console.error('Detalhes:', JSON.stringify(error, null, 2));\r\n\r\n                let mensagem = error.message || 'Erro desconhecido';\r\n                if (error.code === 404) {\r\n                    mensagem += '\\n\\n\u26a0\ufe0f A cole\u00e7\u00e3o PRODUTOS n\u00e3o foi encontrada.';\r\n                } else if (error.code === 403) {\r\n                    mensagem += '\\n\\n\ud83d\udeab Sem permiss\u00e3o para criar produto.\\nVerifique as permiss\u00f5es no Appwrite Console.';\r\n                }\r\n\r\n                alert('\u274c Erro ao adicionar produto: ' + mensagem);\r\n            } finally {\r\n                console.log('=== FIM handleAdicionarCatalogo ===');\r\n                hideLoading();\r\n            }\r\n        }\r\n\r\n        async function buscarOuCriarProduto(nome, fotoUrl, fotoFile) {\r\n            try {\r\n                console.log('buscarOuCriarProduto - Buscando produto:', nome);\r\n                \/\/ Buscar se j\u00e1 existe produto com esse nome\r\n                const response = await databases.listDocuments(\r\n                    DATABASE_ID,\r\n                    COLLECTIONS.PRODUTOS,\r\n                    [Query.equal('nome', nome), Query.limit(1)]\r\n                );\r\n\r\n                console.log('Resultado da busca:', response);\r\n\r\n                if (response.documents.length > 0) {\r\n                    console.log('Produto j\u00e1 existe, usando productId:', response.documents[0].productId);\r\n                    return response.documents[0].productId;\r\n                }\r\n\r\n                console.log('Produto n\u00e3o existe, criando novo...');\r\n\r\n                \/\/ Criar novo produto\r\n                let imagemUrl = fotoUrl || '';\r\n                let imagemId = null;\r\n\r\n                \/\/ Upload de imagem se houver arquivo\r\n                if (fotoFile) {\r\n                    console.log('Fazendo upload de imagem...');\r\n                    const uploadResult = await storage.createFile(\r\n                        STORAGE_ID,\r\n                        ID.unique(),\r\n                        fotoFile\r\n                    );\r\n                    imagemId = uploadResult.$id;\r\n                    imagemUrl = `https:\/\/nacional-appwrite.nounpw.easypanel.host\/v1\/storage\/buckets\/${STORAGE_ID}\/files\/${imagemId}\/view?project=6967b7f8001698edb973`;\r\n                    console.log('Upload conclu\u00eddo:', { imagemId, imagemUrl });\r\n                }\r\n\r\n                const dadosProduto = {\r\n                    productId: ID.unique(),\r\n                    nome: nome,\r\n                    imagemId: imagemId,\r\n                    imagemUrl: imagemUrl,\r\n                    ativo: true,\r\n                    data_criacao: new Date().toISOString()\r\n                };\r\n                console.log('Criando produto com dados:', dadosProduto);\r\n\r\n                const produto = await databases.createDocument(\r\n                    DATABASE_ID,\r\n                    COLLECTIONS.PRODUTOS,\r\n                    ID.unique(),\r\n                    dadosProduto\r\n                );\r\n\r\n                console.log('\u2705 Produto criado com sucesso:', produto);\r\n                return produto.productId;\r\n            } catch (error) {\r\n                console.error('\u274c ERRO ao buscar\/criar produto:', error);\r\n                console.error('Mensagem:', error.message);\r\n                console.error('Detalhes completos:', error);\r\n                console.error('JSON do erro:', JSON.stringify(error, null, 2));\r\n                throw new Error('Erro ao criar produto: ' + (error.message || 'Verifique os atributos da cole\u00e7\u00e3o no Appwrite'));\r\n            }\r\n        }\r\n\r\n        async function carregarCatalogo() {\r\n            try {\r\n                showLoading();\r\n                console.log('\ud83d\udd04 Carregando cat\u00e1logo...');\r\n\r\n                const response = await databases.listDocuments(\r\n                    DATABASE_ID,\r\n                    COLLECTIONS.PRODUTOS,\r\n                    [\r\n                        Query.equal('ativo', true),\r\n                        Query.limit(100)\r\n                    ]\r\n                );\r\n\r\n                console.log('Produtos encontrados:', response.documents.length);\r\n\r\n                const container = document.getElementById('listaCatalogo');\r\n\r\n                if (response.documents.length === 0) {\r\n                    container.innerHTML = `\r\n                        <div class=\"empty-state\">\r\n                            <div class=\"empty-state-icon\">\ud83d\udce6<\/div>\r\n                            <div class=\"empty-state-text\">Nenhum produto no cat\u00e1logo<\/div>\r\n                        <\/div>\r\n                    `;\r\n                    return;\r\n                }\r\n\r\n                container.innerHTML = response.documents.map(prod => `\r\n                    <div class=\"card\">\r\n                        ${prod.imagemUrl ? `<img decoding=\"async\" src=\"${prod.imagemUrl}\" class=\"card-image\" alt=\"${prod.nome}\">` : ''}\r\n                        <h3 class=\"card-title\">${prod.nome}<\/h3>\r\n                        <div class=\"card-info\">\r\n                            <div class=\"card-info-item\">\r\n                                <span class=\"card-info-label\">Cadastrado em:<\/span>\r\n                                <span class=\"card-info-value\">${formatarData((prod.data_criacao || prod.$createdAt).split('T')[0])}<\/span>\r\n                            <\/div>\r\n                            <div class=\"card-info-item\">\r\n                                <span class=\"card-info-label\">ID:<\/span>\r\n                                <span class=\"card-info-value\" style=\"font-size: 0.8rem;\">${prod.productId}<\/span>\r\n                            <\/div>\r\n                        <\/div>\r\n                        <div class=\"card-actions\">\r\n                            <button class=\"btn-primary\" onclick=\"alert('Funcionalidade de edi\u00e7\u00e3o ser\u00e1 implementada')\" style=\"background: var(--primary-color);\">\u270f\ufe0f Editar<\/button>\r\n                            <button class=\"btn-danger\" onclick=\"desativarProduto('${prod.$id}', '${prod.productId}')\" style=\"background: var(--danger-color);\">\ud83d\uddd1\ufe0f Remover<\/button>\r\n                        <\/div>\r\n                    <\/div>\r\n                `).join('');\r\n\r\n                console.log('\u2705 Cat\u00e1logo carregado com sucesso');\r\n\r\n            } catch (error) {\r\n                console.error('\u274c Erro ao carregar cat\u00e1logo:', error);\r\n                document.getElementById('listaCatalogo').innerHTML = `\r\n                    <div class=\"empty-state\">\r\n                        <div class=\"empty-state-icon\">\u26a0\ufe0f<\/div>\r\n                        <div class=\"empty-state-text\">Erro ao carregar cat\u00e1logo<\/div>\r\n                    <\/div>\r\n                `;\r\n            } finally {\r\n                hideLoading();\r\n            }\r\n        }\r\n\r\n        async function desativarProduto(documentId, productId) {\r\n            if (!confirm('Tem certeza que deseja remover este produto do cat\u00e1logo?')) {\r\n                return;\r\n            }\r\n\r\n            try {\r\n                showLoading();\r\n                console.log('Desativando produto:', { documentId, productId });\r\n\r\n                await databases.updateDocument(\r\n                    DATABASE_ID,\r\n                    COLLECTIONS.PRODUTOS,\r\n                    documentId,\r\n                    { ativo: false }\r\n                );\r\n\r\n                console.log('\u2705 Produto desativado');\r\n                await carregarCatalogo();\r\n                alert('\u2705 Produto removido do cat\u00e1logo!');\r\n\r\n            } catch (error) {\r\n                console.error('\u274c Erro ao desativar produto:', error);\r\n                alert('\u274c Erro ao remover produto: ' + error.message);\r\n            } finally {\r\n                hideLoading();\r\n            }\r\n        }\r\n\r\n        async function carregarRequisicoes() {\r\n            try {\r\n                showLoading();\r\n                \r\n                const response = await databases.listDocuments(\r\n                    DATABASE_ID,\r\n                    COLLECTIONS.REQUISICOES,\r\n                    [\r\n                        Query.equal('status', 'pendente'),\r\n                        Query.orderDesc('data_criacao'),\r\n                        Query.limit(100)\r\n                    ]\r\n                );\r\n\r\n                const container = document.getElementById('listaRequisicoes');\r\n                \r\n                if (response.documents.length === 0) {\r\n                    container.innerHTML = `\r\n                        <div class=\"empty-state\">\r\n                            <div class=\"empty-state-icon\">\ud83d\udccb<\/div>\r\n                            <div class=\"empty-state-text\">Nenhuma requisi\u00e7\u00e3o pendente<\/div>\r\n                        <\/div>\r\n                    `;\r\n                    return;\r\n                }\r\n\r\n                \/\/ Buscar dados dos produtos\r\n                const requisicoes = await Promise.all(\r\n                    response.documents.map(async (req) => {\r\n                        const prodResp = await databases.listDocuments(\r\n                            DATABASE_ID,\r\n                            COLLECTIONS.PRODUTOS,\r\n                            [Query.equal('productId', req.productId), Query.limit(1)]\r\n                        );\r\n                        return {\r\n                            ...req,\r\n                            produto: prodResp.documents[0] || null\r\n                        };\r\n                    })\r\n                );\r\n\r\n                container.innerHTML = requisicoes.map(req => `\r\n                    <div class=\"card\">\r\n                        ${req.produto?.imagemUrl ? `<img decoding=\"async\" src=\"${req.produto.imagemUrl}\" class=\"card-image\" alt=\"${req.produto.nome}\">` : ''}\r\n                        <h3 class=\"card-title\">${req.produto?.nome || 'Produto n\u00e3o encontrado'}<\/h3>\r\n                        <div class=\"card-info\">\r\n                            <div class=\"card-info-item\">\r\n                                <span class=\"card-info-label\">Quantidade:<\/span>\r\n                                <span class=\"card-info-value\">${req.quantidade_desejada}<\/span>\r\n                            <\/div>\r\n                            ${req.local_compra ? `\r\n                            <div class=\"card-info-item\">\r\n                                <span class=\"card-info-label\">Local:<\/span>\r\n                                <span class=\"card-info-value\">${req.local_compra}<\/span>\r\n                            <\/div>\r\n                            ` : ''}\r\n                            <div class=\"card-info-item\">\r\n                                <span class=\"card-info-label\">Prioridade:<\/span>\r\n                                <span class=\"badge ${req.prioridade ? 'badge-priority' : 'badge-normal'}\">\r\n                                    ${req.prioridade ? 'Sim' : 'N\u00e3o'}\r\n                                <\/span>\r\n                            <\/div>\r\n                        <\/div>\r\n                        <div class=\"card-actions\">\r\n                            <button class=\"btn-success\" onclick=\"abrirModalCompra('${req.$id}', '${req.requisicaoId}')\" style=\"background: var(--success-color);\">\ud83d\uded2 Comprar<\/button>\r\n                            <button class=\"btn-danger\" onclick=\"excluirRequisicao('${req.$id}', '${req.requisicaoId}')\" style=\"background: var(--danger-color);\">\u274c Excluir<\/button>\r\n                        <\/div>\r\n                    <\/div>\r\n                `).join('');\r\n\r\n            } catch (error) {\r\n                console.error('Erro ao carregar requisi\u00e7\u00f5es:', error);\r\n                document.getElementById('listaRequisicoes').innerHTML = `\r\n                    <div class=\"empty-state\">\r\n                        <div class=\"empty-state-icon\">\u26a0\ufe0f<\/div>\r\n                        <div class=\"empty-state-text\">Erro ao carregar requisi\u00e7\u00f5es<\/div>\r\n                    <\/div>\r\n                `;\r\n            } finally {\r\n                hideLoading();\r\n            }\r\n        }\r\n\r\n        function abrirModal(modalId) {\r\n            document.getElementById(modalId).classList.add('active');\r\n        }\r\n\r\n        function fecharModal(modalId) {\r\n            document.getElementById(modalId).classList.remove('active');\r\n        }\r\n\r\n        function showLoading() {\r\n            document.getElementById('loadingOverlay').classList.remove('hidden');\r\n        }\r\n\r\n        function hideLoading() {\r\n            document.getElementById('loadingOverlay').classList.add('hidden');\r\n        }\r\n\r\n        function formatarMoeda(valor) {\r\n            return new Intl.NumberFormat('pt-BR', {\r\n                style: 'currency',\r\n                currency: 'BRL'\r\n            }).format(valor);\r\n        }\r\n\r\n        function formatarData(dataStr) {\r\n            const data = new Date(dataStr + 'T12:00:00');\r\n            return data.toLocaleDateString('pt-BR');\r\n        }\r\n\r\n        \/\/ ========================================\r\n        \/\/ VENDAS INTERNAS\r\n        \/\/ ========================================\r\n        \r\n        const VENDAS_COLLECTION = '67873def0028b56fb318'; \/\/ Criar no Appwrite!\r\n\r\n        async function carregarVendas(filtros = {}) {\r\n            try {\r\n                showLoading();\r\n                const queries = [Query.limit(100), Query.orderDesc('$createdAt')];\r\n                \r\n                if (filtros.data) {\r\n                    queries.push(Query.equal('saleDate', filtros.data));\r\n                }\r\n                \r\n                const response = await databases.listDocuments(\r\n                    DATABASE_ID,\r\n                    VENDAS_COLLECTION,\r\n                    queries\r\n                );\r\n\r\n                let vendas = response.documents;\r\n\r\n                \/\/ Filtrar por status\r\n                if (filtros.status === 'paid') {\r\n                    vendas = vendas.filter(v => v.isPaid);\r\n                } else if (filtros.status === 'unpaid') {\r\n                    vendas = vendas.filter(v => !v.isPaid);\r\n                }\r\n\r\n                const container = document.getElementById('listaVendas');\r\n                \r\n                if (vendas.length === 0) {\r\n                    container.innerHTML = `\r\n                        <div class=\"empty-state\">\r\n                            <div class=\"empty-state-icon\">\ud83d\udcb0<\/div>\r\n                            <div class=\"empty-state-text\">Nenhuma venda registrada<\/div>\r\n                        <\/div>\r\n                    `;\r\n                    return;\r\n                }\r\n\r\n                container.innerHTML = vendas.map(venda => `\r\n                    <div class=\"card venda-card\">\r\n                        ${venda.imageUrl ? `<img decoding=\"async\" src=\"${venda.imageUrl}\" class=\"card-image\" alt=\"${venda.productName}\">` : ''}\r\n                        <h3 class=\"card-title\">${venda.productName}<\/h3>\r\n                        <div class=\"card-info\">\r\n                            <div class=\"card-info-item\">\r\n                                <span class=\"card-info-label\">Funcion\u00e1rio:<\/span>\r\n                                <span class=\"card-info-value\">${venda.employeeName || venda.employeeEmail}<\/span>\r\n                            <\/div>\r\n                            <div class=\"card-info-item\">\r\n                                <span class=\"card-info-label\">Quantidade:<\/span>\r\n                                <span class=\"card-info-value\">${venda.quantity}<\/span>\r\n                            <\/div>\r\n                            <div class=\"card-info-item\">\r\n                                <span class=\"card-info-label\">Valor Total:<\/span>\r\n                                <span class=\"card-info-value\">${formatarMoeda(venda.totalValue)}<\/span>\r\n                            <\/div>\r\n                            <div class=\"card-info-item\">\r\n                                <span class=\"card-info-label\">Data:<\/span>\r\n                                <span class=\"card-info-value\">${formatarData(venda.saleDate)}<\/span>\r\n                            <\/div>\r\n                            <div class=\"card-info-item\">\r\n                                <span class=\"card-info-label\">Status:<\/span>\r\n                                <span class=\"${venda.isPaid ? 'badge-paid' : 'badge-unpaid'}\">\r\n                                    ${venda.isPaid ? '\u2705 Pago' : '\u23f3 Pendente'}\r\n                                <\/span>\r\n                            <\/div>\r\n                        <\/div>\r\n                        <div class=\"card-actions\">\r\n                            ${!venda.isPaid ? `<button class=\"btn-success\" onclick=\"marcarComoPago('${venda.$id}')\">\ud83d\udcb3 Marcar como Pago<\/button>` : ''}\r\n                        <\/div>\r\n                    <\/div>\r\n                `).join('');\r\n\r\n            } catch (error) {\r\n                console.error('\u274c Erro ao carregar vendas:', error);\r\n                document.getElementById('listaVendas').innerHTML = `\r\n                    <div class=\"empty-state\">\r\n                        <div class=\"empty-state-icon\">\u26a0\ufe0f<\/div>\r\n                        <div class=\"empty-state-text\">Erro ao carregar vendas: ${error.message}<\/div>\r\n                    <\/div>\r\n                `;\r\n            } finally {\r\n                hideLoading();\r\n            }\r\n        }\r\n\r\n        async function registrarVenda(event) {\r\n            event.preventDefault();\r\n            \r\n            try {\r\n                showLoading();\r\n                \r\n                const funcionarioEmail = document.getElementById('vendaFuncionarioEmail').value;\r\n                const funcionarioNome = document.getElementById('vendaFuncionarioNome').value;\r\n                const produtoNome = document.getElementById('vendaProdutoNome').value;\r\n                const produtoId = document.getElementById('vendaProdutoId').value;\r\n                const produtoImagem = document.getElementById('vendaProdutoImagem').value;\r\n                const quantidade = parseInt(document.getElementById('vendaQuantidade').value);\r\n                const valorUnitario = parseFloat(document.getElementById('vendaValorUnitario').value);\r\n                const valorTotal = quantidade * valorUnitario;\r\n\r\n                const saleId = 'venda_' + Date.now();\r\n                const dataHoje = new Date().toISOString().split('T')[0];\r\n\r\n                await databases.createDocument(\r\n                    DATABASE_ID,\r\n                    VENDAS_COLLECTION,\r\n                    ID.unique(),\r\n                    {\r\n                        saleId: saleId,\r\n                        productName: produtoNome,\r\n                        productId: produtoId,\r\n                        imageUrl: produtoImagem || '',\r\n                        quantity: quantidade,\r\n                        unitValue: valorUnitario,\r\n                        totalValue: valorTotal,\r\n                        employeeEmail: funcionarioEmail,\r\n                        employeeName: funcionarioNome || funcionarioEmail,\r\n                        isPaid: false,\r\n                        saleDate: dataHoje,\r\n                        createdAt: new Date().toISOString(),\r\n                        userId: currentUser.$id\r\n                    }\r\n                );\r\n\r\n                alert('\u2705 Venda registrada com sucesso!');\r\n                fecharModal('modalNovaVenda');\r\n                document.getElementById('formNovaVenda').reset();\r\n                await carregarVendas();\r\n\r\n            } catch (error) {\r\n                console.error('\u274c Erro ao registrar venda:', error);\r\n                alert('\u274c Erro ao registrar venda: ' + error.message);\r\n            } finally {\r\n                hideLoading();\r\n            }\r\n        }\r\n\r\n        async function marcarComoPago(vendaId) {\r\n            if (!confirm('Marcar esta venda como paga?')) return;\r\n            \r\n            try {\r\n                showLoading();\r\n                \r\n                await databases.updateDocument(\r\n                    DATABASE_ID,\r\n                    VENDAS_COLLECTION,\r\n                    vendaId,\r\n                    {\r\n                        isPaid: true,\r\n                        paidAt: new Date().toISOString(),\r\n                        paidBy: currentUser.$id\r\n                    }\r\n                );\r\n\r\n                alert('\u2705 Venda marcada como paga!');\r\n                await carregarVendas();\r\n\r\n            } catch (error) {\r\n                console.error('\u274c Erro ao marcar como pago:', error);\r\n                alert('\u274c Erro: ' + error.message);\r\n            } finally {\r\n                hideLoading();\r\n            }\r\n        }\r\n\r\n        \/\/ ========================================\r\n        \/\/ SALDO COM ENTRADAS INDIVIDUAIS\r\n        \/\/ ========================================\r\n        \r\n        const ENTRADAS_COLLECTION = '67873e18002c6f0f5d5b'; \/\/ Criar no Appwrite!\r\n\r\n        async function carregarEntradasHoje() {\r\n            try {\r\n                const dataHoje = new Date().toISOString().split('T')[0];\r\n                \r\n                const response = await databases.listDocuments(\r\n                    DATABASE_ID,\r\n                    ENTRADAS_COLLECTION,\r\n                    [\r\n                        Query.equal('date', dataHoje),\r\n                        Query.orderDesc('$createdAt')\r\n                    ]\r\n                );\r\n\r\n                const container = document.getElementById('entradasHoje');\r\n                \r\n                if (response.documents.length === 0) {\r\n                    container.innerHTML = '<p style=\"color: var(--text-secondary); text-align: center;\">Nenhuma entrada registrada hoje<\/p>';\r\n                    return;\r\n                }\r\n\r\n                container.innerHTML = response.documents.map(entrada => `\r\n                    <div class=\"entrada-item ${entrada.isPixPayment ? 'entrada-pix' : ''}\">\r\n                        <div class=\"entrada-info\">\r\n                            <div class=\"entrada-valor\">${formatarMoeda(entrada.amount)}<\/div>\r\n                            <div style=\"font-size: 0.9rem; color: var(--text-secondary);\">\r\n                                ${entrada.time} ${entrada.isPixPayment ? '\u2022 \ud83d\udcb3 PIX' : ''}\r\n                                ${entrada.description ? `\u2022 ${entrada.description}` : ''}\r\n                            <\/div>\r\n                            <div style=\"font-size: 0.85rem; color: var(--text-secondary);\">\r\n                                Por: ${entrada.addedByEmail}\r\n                            <\/div>\r\n                        <\/div>\r\n                        <div class=\"entrada-actions\">\r\n                            <button class=\"btn-small btn-danger\" onclick=\"excluirEntrada('${entrada.$id}')\" style=\"background: var(--danger-color); color: white;\">\r\n                                \ud83d\uddd1\ufe0f\r\n                            <\/button>\r\n                        <\/div>\r\n                    <\/div>\r\n                `).join('');\r\n\r\n            } catch (error) {\r\n                console.error('\u274c Erro ao carregar entradas:', error);\r\n            }\r\n        }\r\n\r\n        async function adicionarSaldoPix(event) {\r\n            event.preventDefault();\r\n            \r\n            try {\r\n                showLoading();\r\n                \r\n                const valor = parseFloat(document.getElementById('saldoPixValor').value);\r\n                const descricao = document.getElementById('saldoPixDescricao').value;\r\n                \r\n                const dataHoje = new Date().toISOString().split('T')[0];\r\n                const horaAtual = new Date().toLocaleTimeString('pt-BR');\r\n\r\n                await databases.createDocument(\r\n                    DATABASE_ID,\r\n                    ENTRADAS_COLLECTION,\r\n                    ID.unique(),\r\n                    {\r\n                        amount: valor,\r\n                        date: dataHoje,\r\n                        time: horaAtual,\r\n                        createdAt: new Date().toISOString(),\r\n                        addedBy: currentUser.$id,\r\n                        addedByEmail: currentUser.email,\r\n                        isPixPayment: true,\r\n                        description: descricao || 'Entrada PIX'\r\n                    }\r\n                );\r\n\r\n                \/\/ Atualizar saldo principal\r\n                const saldoAtual = await obterSaldoAtual();\r\n                const novoSaldo = saldoAtual + valor;\r\n                await atualizarSaldo(novoSaldo);\r\n\r\n                alert('\u2705 Saldo PIX adicionado com sucesso!');\r\n                fecharModal('modalSaldoPix');\r\n                document.getElementById('formSaldoPix').reset();\r\n                await carregarEntradasHoje();\r\n                await carregarSaldoAtual();\r\n\r\n            } catch (error) {\r\n                console.error('\u274c Erro ao adicionar saldo PIX:', error);\r\n                alert('\u274c Erro: ' + error.message);\r\n            } finally {\r\n                hideLoading();\r\n            }\r\n        }\r\n\r\n        async function excluirEntrada(entradaId) {\r\n            if (!confirm('Excluir esta entrada? O saldo ser\u00e1 recalculado.')) return;\r\n            \r\n            try {\r\n                showLoading();\r\n                \r\n                \/\/ Buscar valor da entrada\r\n                const entrada = await databases.getDocument(DATABASE_ID, ENTRADAS_COLLECTION, entradaId);\r\n                \r\n                \/\/ Deletar entrada\r\n                await databases.deleteDocument(DATABASE_ID, ENTRADAS_COLLECTION, entradaId);\r\n                \r\n                \/\/ Atualizar saldo\r\n                const saldoAtual = await obterSaldoAtual();\r\n                const novoSaldo = saldoAtual - entrada.amount;\r\n                await atualizarSaldo(novoSaldo);\r\n\r\n                alert('\u2705 Entrada exclu\u00edda!');\r\n                await carregarEntradasHoje();\r\n                await carregarSaldoAtual();\r\n\r\n            } catch (error) {\r\n                console.error('\u274c Erro ao excluir entrada:', error);\r\n                alert('\u274c Erro: ' + error.message);\r\n            } finally {\r\n                hideLoading();\r\n            }\r\n        }\r\n\r\n        \/\/ ========================================\r\n        \/\/ MODAL DE AGRUPAMENTO VISUAL\r\n        \/\/ ========================================\r\n\r\n        let produtosParaPDF = [];\r\n\r\n        async function abrirModalAgrupamento() {\r\n            try {\r\n                showLoading();\r\n                \r\n                const dataFiltro = document.getElementById('filtroDataComprados').value;\r\n                \r\n                if (!dataFiltro) {\r\n                    alert('\u26a0\ufe0f Selecione uma data primeiro!');\r\n                    return;\r\n                }\r\n\r\n                \/\/ Buscar compras do dia\r\n                const compras = await databases.listDocuments(\r\n                    DATABASE_ID,\r\n                    COLLECTIONS.COMPRAS,\r\n                    [\r\n                        Query.equal('data_compra', dataFiltro),\r\n                        Query.equal('arquivado', false)\r\n                    ]\r\n                );\r\n\r\n                produtosParaPDF = compras.documents;\r\n\r\n                if (produtosParaPDF.length === 0) {\r\n                    alert('\u26a0\ufe0f Nenhum produto encontrado nesta data!');\r\n                    return;\r\n                }\r\n\r\n                \/\/ Agrupar por fornecedor automaticamente\r\n                const grupos = {};\r\n                produtosParaPDF.forEach(compra => {\r\n                    const fornecedor = compra.fornecedor || 'Sem Fornecedor';\r\n                    if (!grupos[fornecedor]) {\r\n                        grupos[fornecedor] = [];\r\n                    }\r\n                    grupos[fornecedor].push(compra);\r\n                });\r\n\r\n                \/\/ Renderizar grupos\r\n                const container = document.getElementById('agrupamentoContainer');\r\n                container.innerHTML = Object.keys(grupos).map(fornecedor => `\r\n                    <div class=\"grupo-box\" data-fornecedor=\"${fornecedor}\" ondrop=\"drop(event)\" ondragover=\"allowDrop(event)\">\r\n                        <div class=\"grupo-header\">${fornecedor}<\/div>\r\n                        ${grupos[fornecedor].map(prod => `\r\n                            <div class=\"produto-item\" draggable=\"true\" ondragstart=\"drag(event)\" data-compra-id=\"${prod.$id}\">\r\n                                <div class=\"produto-item-nome\">${prod.nome}<\/div>\r\n                                <div class=\"produto-item-info\">\r\n                                    Qtd: ${prod.quantidade_comprada} \u2022 ${formatarMoeda(prod.valor_unitario)}\r\n                                <\/div>\r\n                            <\/div>\r\n                        `).join('')}\r\n                    <\/div>\r\n                `).join('');\r\n\r\n                abrirModal('modalAgrupamento');\r\n\r\n            } catch (error) {\r\n                console.error('\u274c Erro ao abrir modal de agrupamento:', error);\r\n                alert('\u274c Erro: ' + error.message);\r\n            } finally {\r\n                hideLoading();\r\n            }\r\n        }\r\n\r\n        function allowDrop(ev) {\r\n            ev.preventDefault();\r\n            ev.currentTarget.classList.add('drag-over');\r\n        }\r\n\r\n        function drag(ev) {\r\n            ev.dataTransfer.setData(\"compraId\", ev.target.getAttribute('data-compra-id'));\r\n            ev.target.classList.add('dragging');\r\n        }\r\n\r\n        function drop(ev) {\r\n            ev.preventDefault();\r\n            ev.currentTarget.classList.remove('drag-over');\r\n            \r\n            const compraId = ev.dataTransfer.getData(\"compraId\");\r\n            const draggedElement = document.querySelector(`[data-compra-id=\"${compraId}\"]`);\r\n            \r\n            if (draggedElement) {\r\n                draggedElement.classList.remove('dragging');\r\n                \r\n                \/\/ Encontrar o grupo-box mais pr\u00f3ximo\r\n                let dropZone = ev.target;\r\n                while (dropZone && !dropZone.classList.contains('grupo-box')) {\r\n                    dropZone = dropZone.parentElement;\r\n                }\r\n                \r\n                if (dropZone && dropZone.classList.contains('grupo-box')) {\r\n                    dropZone.appendChild(draggedElement);\r\n                }\r\n            }\r\n        }\r\n\r\n        async function confirmarAgrupamento() {\r\n            \/\/ Coletar agrupamento atual\r\n            const grupos = {};\r\n            document.querySelectorAll('.grupo-box').forEach(grupoBox => {\r\n                const fornecedor = grupoBox.getAttribute('data-fornecedor');\r\n                grupos[fornecedor] = [];\r\n                \r\n                grupoBox.querySelectorAll('.produto-item').forEach(item => {\r\n                    const compraId = item.getAttribute('data-compra-id');\r\n                    const compra = produtosParaPDF.find(p => p.$id === compraId);\r\n                    if (compra) {\r\n                        grupos[fornecedor].push(compra);\r\n                    }\r\n                });\r\n            });\r\n\r\n            \/\/ Gerar PDF com agrupamento\r\n            await gerarPDFComGrupos(grupos);\r\n            fecharModal('modalAgrupamento');\r\n        }\r\n\r\n        async function gerarPDFComGrupos(grupos) {\r\n            alert('\ud83c\udfa8 PDF ser\u00e1 gerado com o agrupamento personalizado!\\n\\nGrupos: ' + Object.keys(grupos).join(', '));\r\n            \/\/ Aqui voc\u00ea pode adicionar a l\u00f3gica de gera\u00e7\u00e3o de PDF com jsPDF\r\n        }\r\n\r\n        \/\/ Exportar globalmente para uso em onclick\r\n        window.formatarMoeda = formatarMoeda;\r\n        window.formatarData = formatarData;\r\n        window.desativarProduto = desativarProduto;\r\n        window.abrirModalCompra = abrirModalCompra;\r\n        window.excluirRequisicao = excluirRequisicao;\r\n        window.marcarComoPago = marcarComoPago;\r\n        window.excluirEntrada = excluirEntrada;\r\n        window.confirmarAgrupamento = confirmarAgrupamento;\r\n        window.allowDrop = allowDrop;\r\n        window.drag = drag;\r\n        window.drop = drop;\r\n        window.calcularValorTotalVenda = calcularValorTotalVenda;\r\n        window.selecionarProdutoVenda = selecionarProdutoVenda;\r\n    <\/script>\r\n<\/body>\r\n<\/html>\r\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>COMPRAS 2.0 &#8211; Sistema Completo \ud83d\uded2 COMPRAS 2.0 Entrar \ud83d\uded2 COMPRAS 2.0 Saldo do Dia: R$ 0,00 Sair Requisi\u00e7\u00f5es Comprados \ud83d\udcb0 Vendas Internas Saldo Di\u00e1rio Cat\u00e1logo Arquivado Ranking \ud83d\uddd1\ufe0f Hist\u00f3rico Requisi\u00e7\u00f5es de Compra + Novo Pedido Produtos Comprados Todos os Fornecedores \ud83c\udfa8 Agrupar e Exportar PDF \ud83d\udcb0 Vendas Internas + Registrar Venda TodasPagasPendentes Filtrar Gest\u00e3o [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-9","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/dionata.envionacional.com.br\/index.php\/wp-json\/wp\/v2\/pages\/9","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dionata.envionacional.com.br\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/dionata.envionacional.com.br\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/dionata.envionacional.com.br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dionata.envionacional.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=9"}],"version-history":[{"count":193,"href":"https:\/\/dionata.envionacional.com.br\/index.php\/wp-json\/wp\/v2\/pages\/9\/revisions"}],"predecessor-version":[{"id":207,"href":"https:\/\/dionata.envionacional.com.br\/index.php\/wp-json\/wp\/v2\/pages\/9\/revisions\/207"}],"wp:attachment":[{"href":"https:\/\/dionata.envionacional.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=9"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}