{"id":7963,"date":"2026-06-23T18:51:34","date_gmt":"2026-06-23T21:51:34","guid":{"rendered":"https:\/\/saudecajati.com.br\/?page_id=7963"},"modified":"2026-06-23T19:15:09","modified_gmt":"2026-06-23T22:15:09","slug":"fechamento-mensal-de-testes-rapidos","status":"publish","type":"page","link":"https:\/\/saudecajati.com.br\/index.php\/fechamento-mensal-de-testes-rapidos\/","title":{"rendered":"Fechamento Mensal de Testes R\u00e1pidos"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"7963\" class=\"elementor elementor-7963\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c5a85fc e-flex e-con-boxed e-con e-parent\" data-id=\"c5a85fc\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fe9b81a elementor-align-center elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-invisible elementor-widget elementor-widget-icon-list\" data-id=\"fe9b81a\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;slideInDown&quot;}\" data-widget_type=\"icon-list.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul class=\"elementor-icon-list-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Fechamento Mensal de Testes R\u00e1pidos<\/span>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7bffa37 e-flex e-con-boxed e-con e-parent\" data-id=\"7bffa37\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f3d0bc4 elementor-widget elementor-widget-html\" data-id=\"f3d0bc4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\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    <title>Fechamento Mensal - Testes R\u00e1pidos<\/title>\r\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;600;700;800&display=swap\" rel=\"stylesheet\">\r\n    <style>\r\n        \/* =========================================\r\n           BLINDAGEM N\u00cdVEL M\u00c1XIMO CONTRA O WORDPRESS \r\n           ========================================= *\/\r\n        \r\n        #fechamento-testes-app {\r\n            all: revert !important; \r\n            box-sizing: border-box !important;\r\n            font-family: 'Inter', sans-serif !important;\r\n            background-color: #f4f6f8 !important;\r\n            padding: 15px !important;\r\n            color: #2c3e50 !important;\r\n            width: 100% !important;\r\n            max-width: 100% !important;\r\n            margin: 0 auto !important;\r\n            border-radius: 12px !important;\r\n            box-shadow: 0 4px 10px rgba(0,0,0,0.05) !important;\r\n            border: 1px solid #e2e8f0 !important;\r\n            overflow: hidden !important;\r\n            line-height: 1.5 !important;\r\n        }\r\n\r\n        #fechamento-testes-app * {\r\n            box-sizing: border-box !important;\r\n        }\r\n\r\n        #fechamento-testes-app .seletor-container {\r\n            display: flex !important;\r\n            flex-wrap: wrap !important;\r\n            gap: 15px !important;\r\n        }\r\n        \r\n        #fechamento-testes-app .seletor-container > div {\r\n            flex: 1 1 250px !important;\r\n        }\r\n\r\n        #fechamento-testes-app .card-config {\r\n            background: #ffffff !important;\r\n            padding: 20px !important;\r\n            border-radius: 12px !important;\r\n            border: 1px solid #edf2f7 !important;\r\n            margin-bottom: 15px !important;\r\n        }\r\n\r\n        #fechamento-testes-app .label-instrucao {\r\n            display: block !important;\r\n            font-weight: 700 !important;\r\n            margin-bottom: 8px !important;\r\n            color: #00A09A !important;\r\n            font-size: 13px !important;\r\n            text-transform: uppercase !important;\r\n            line-height: 1.2 !important;\r\n        }\r\n\r\n        #fechamento-testes-app select.tr-input,\r\n        #fechamento-testes-app input.tr-input {\r\n            width: 100% !important;\r\n            height: auto !important;\r\n            padding: 12px !important;\r\n            border: 2px solid #edf2f7 !important;\r\n            border-radius: 8px !important;\r\n            font-size: 15px !important;\r\n            font-family: 'Inter', sans-serif !important;\r\n            outline: none !important;\r\n            background: #ffffff !important;\r\n            color: #1e293b !important;\r\n            box-shadow: none !important;\r\n        }\r\n        #fechamento-testes-app .tr-input:focus { border-color: #00A09A !important; }\r\n\r\n        #fechamento-testes-app .container-abas { \r\n            display: flex !important; gap: 5px !important; margin-bottom: -1px !important; overflow-x: auto !important; \r\n            -webkit-overflow-scrolling: touch !important; padding-top: 5px !important;\r\n        }\r\n        #fechamento-testes-app .aba-teste {\r\n            background-color: #e2e8f0 !important; color: #475569 !important; border: 1px solid #cbd5e1 !important; border-bottom: none !important;\r\n            padding: 12px 15px !important; font-weight: 700 !important; font-size: 13px !important; border-radius: 8px 8px 0 0 !important;\r\n            cursor: pointer !important; transition: all 0.2s !important; white-space: nowrap !important; flex-shrink: 0 !important;\r\n            margin: 0 !important;\r\n        }\r\n        #fechamento-testes-app .aba-teste:hover { background-color: #cbd5e1 !important; }\r\n        #fechamento-testes-app .aba-teste.aba-ativa {\r\n            background-color: #ffffff !important; color: #00A09A !important; border-color: #edf2f7 !important;\r\n            border-top: 3px solid #00A09A !important; position: relative !important; z-index: 2 !important;\r\n        }\r\n\r\n        #fechamento-testes-app .painel-conteudo {\r\n            background: #ffffff !important; border: 1px solid #edf2f7 !important; border-radius: 0 0 12px 12px !important;\r\n            padding: 20px !important; box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02) !important;\r\n            width: 100% !important; overflow: hidden !important;\r\n        }\r\n\r\n        #fechamento-testes-app .card-lote {\r\n            border: 2px solid #e2e8f0 !important; border-radius: 8px !important; padding: 15px !important; margin-bottom: 25px !important;\r\n            background-color: #ffffff !important; position: relative !important;\r\n        }\r\n        \r\n        #fechamento-testes-app .header-lote {\r\n            display: flex !important; justify-content: space-between !important; align-items: center !important; margin-bottom: 15px !important;\r\n            padding-bottom: 10px !important; border-bottom: 2px dashed #e2e8f0 !important; flex-wrap: wrap !important; gap: 10px !important;\r\n        }\r\n        #fechamento-testes-app .titulo-lote { font-weight: 800 !important; color: #00A09A !important; font-size: 16px !important; text-transform: uppercase !important; margin: 0 !important; }\r\n        #fechamento-testes-app button.btn-remover-lote { \r\n            background-color: #fee2e2 !important; color: #dc2626 !important; border: none !important; padding: 6px 12px !important; \r\n            border-radius: 6px !important; font-weight: bold !important; cursor: pointer !important; font-size: 11px !important; text-transform: uppercase !important; \r\n            margin: 0 !important; height: auto !important; line-height: 1 !important;\r\n        }\r\n        #fechamento-testes-app button.btn-remover-lote:hover { background-color: #fca5a5 !important; }\r\n\r\n        #fechamento-testes-app .tabela-wrapper {\r\n            width: 100% !important;\r\n            overflow-x: auto !important;\r\n            -webkit-overflow-scrolling: touch !important;\r\n            border: 1px solid #edf2f7 !important;\r\n            border-radius: 0 0 8px 8px !important;\r\n            margin-bottom: 0 !important;\r\n        }\r\n\r\n        #fechamento-testes-app .bloco-secao { margin-bottom: 20px !important; border: 1px solid #e2e8f0 !important; border-radius: 8px !important; }\r\n        #fechamento-testes-app .bloco-titulo { background-color: #f8fafc !important; padding: 10px 15px !important; font-weight: 800 !important; color: #1e293b !important; font-size: 13px !important; border-bottom: 1px solid #e2e8f0 !important; text-transform: uppercase !important; margin: 0 !important; }\r\n        \r\n        #fechamento-testes-app table.tabela-bloco { width: 100% !important; min-width: 600px !important; border-collapse: collapse !important; font-size: 13px !important; table-layout: fixed !important; margin: 0 !important; background: transparent !important; border: none !important; }\r\n        #fechamento-testes-app table.tabela-bloco th { background-color: #00A09A !important; color: white !important; padding: 10px 5px !important; text-align: center !important; font-weight: 700 !important; border-right: 1px solid #008580 !important; font-size: 12px !important; border-top: none !important; border-bottom: none !important; }\r\n        #fechamento-testes-app table.tabela-bloco td { padding: 8px !important; text-align: center !important; border-right: 1px solid #edf2f7 !important; vertical-align: middle !important; background-color: #ffffff !important; border-top: none !important; border-bottom: none !important; }\r\n        #fechamento-testes-app table.tabela-bloco th:last-child, #fechamento-testes-app table.tabela-bloco td:last-child { border-right: none !important; }\r\n\r\n        #fechamento-testes-app input.input-lancamento {\r\n            width: 100% !important; min-width: 50px !important; padding: 10px 5px !important; \r\n            border: 2px solid #edf2f7 !important; background-color: #f8fafc !important; \r\n            border-radius: 6px !important; font-size: 15px !important;\r\n            font-weight: 600 !important; text-align: center !important; outline: none !important; color: #1e293b !important;\r\n            transition: all 0.2s !important; box-sizing: border-box !important; margin: 0 !important; height: auto !important; box-shadow: none !important;\r\n        }\r\n        #fechamento-testes-app input.input-lancamento:focus { border-color: #00A09A !important; background-color: #ffffff !important; box-shadow: 0 0 0 3px rgba(0, 160, 154, 0.1) !important; }\r\n        \r\n        #fechamento-testes-app input.input-texto { text-align: left !important; min-width: unset !important; padding-left: 10px !important; cursor: pointer !important; }\r\n        #fechamento-testes-app input.input-pos { color: #e11d48 !important; font-weight: 700 !important; }\r\n        #fechamento-testes-app input.input-neg { color: #0ea5e9 !important; font-weight: 700 !important; }\r\n\r\n        #fechamento-testes-app td.celula-formula { font-weight: 800 !important; color: #00A09A !important; font-size: 18px !important; background-color: #f8fafc !important; }\r\n\r\n        #fechamento-testes-app .alerta-erro-lote { display: none !important; background-color: #fef2f2 !important; border: 1px solid #f87171 !important; color: #991b1b !important; padding: 12px !important; border-radius: 8px !important; font-weight: 700 !important; text-align: center !important; margin-top: 15px !important; font-size: 13px !important; }\r\n\r\n        #fechamento-testes-app button.btn-adicionar { background-color: #f1f5f9 !important; color: #334155 !important; border: 2px dashed #cbd5e1 !important; padding: 15px !important; width: 100% !important; border-radius: 8px !important; font-weight: 700 !important; font-size: 14px !important; cursor: pointer !important; transition: all 0.2s !important; margin-bottom: 20px !important; margin-top: 0 !important; height: auto !important; }\r\n        #fechamento-testes-app button.btn-adicionar:hover { background-color: #e2e8f0 !important; border-color: #94a3b8 !important; }\r\n\r\n        #fechamento-testes-app button.btn-cajati {\r\n            display: block !important;\r\n            width: 280px !important;\r\n            min-width: 280px !important;\r\n            max-width: 100% !important;\r\n            margin: 20px auto !important; \r\n            background-color: #00A09A !important;\r\n            color: #ffffff !important;\r\n            border: none !important;\r\n            padding: 15px 20px !important;\r\n            border-radius: 6px !important;\r\n            font-weight: 700 !important;\r\n            font-size: 14px !important;\r\n            cursor: pointer !important;\r\n            transition: background-color 0.2s !important;\r\n            text-align: center !important;\r\n            text-transform: uppercase !important;\r\n            letter-spacing: 0.5px !important;\r\n            height: auto !important;\r\n            line-height: 1.2 !important;\r\n        }\r\n        #fechamento-testes-app button.btn-cajati:hover:not(:disabled) { background-color: #00827d !important; }\r\n        #fechamento-testes-app button.btn-cajati:disabled { background-color: #cbd5e1 !important; cursor: not-allowed !important; }\r\n        \r\n        #fechamento-testes-app .titulo-aba-ativa { text-align: center !important; font-size: 18px !important; font-weight: 800 !important; color: #1e293b !important; margin-bottom: 15px !important; text-transform: uppercase !important; }\r\n\r\n        #fechamento-testes-app .grid-info-produto {\r\n            display: grid !important; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)) !important; gap: 15px !important; \r\n            margin-bottom: 20px !important; background: #f8fafc !important; padding: 12px !important; border-radius: 8px !important; border: 1px solid #edf2f7 !important;\r\n        }\r\n    <\/style>\r\n<\/head>\r\n<body>\r\n\r\n<div id=\"fechamento-testes-app\">\r\n    \r\n    <div class=\"seletor-container\">\r\n        <div class=\"card-config\">\r\n            <label class=\"label-instrucao\">1. Unidade de Sa\u00fade<\/label>\r\n            <select id=\"nome-unidade\" class=\"tr-input\">\r\n                <option value=\"\">-- Selecione a Unidade --<\/option>\r\n                <option value=\"USF Barra do Azeite\">USF Barra do Azeite<\/option>\r\n                <option value=\"USF Capelinha\">USF Capelinha<\/option>\r\n                <option value=\"USF Capit\u00e3o Braz\">USF Capit\u00e3o Braz<\/option>\r\n                <option value=\"USF Centro\">USF Centro<\/option>\r\n                <option value=\"USF Jacupiranguinha\">USF Jacupiranguinha<\/option>\r\n                <option value=\"USF Mauro Leonel (Bico do Pato)\">USF Mauro Leonel (Bico do Pato)<\/option>\r\n                <option value=\"USF Parafuso\">USF Parafuso<\/option>\r\n                <option value=\"USF Parafuso II\">USF Parafuso II<\/option>\r\n                <option value=\"USF Vila Andr\u00e9ia\">USF Vila Andr\u00e9ia<\/option>\r\n                <option value=\"USF Vila Antunes\">USF Vila Antunes<\/option>\r\n                <option value=\"USF Vila Antunes II\">USF Vila Antunes II<\/option>\r\n                <option value=\"USF Vila Muniz\">USF Vila Muniz<\/option>\r\n                <option value=\"USF Vila Tatu\">USF Vila Tatu<\/option>\r\n            <\/select>\r\n        <\/div>\r\n        <div class=\"card-config\">\r\n            <label class=\"label-instrucao\">2. M\u00eas de Refer\u00eancia<\/label>\r\n            <input type=\"month\" id=\"mes-ref\" class=\"tr-input\" onchange=\"carregarDadosDaTela()\">\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"container-abas\">\r\n        <div class=\"aba-teste aba-ativa\" onclick=\"mudarAba('hiv1')\" id=\"aba-hiv1\">HIV - teste I<\/div>\r\n        <div class=\"aba-teste\" onclick=\"mudarAba('hiv2')\" id=\"aba-hiv2\">HIV - teste II<\/div>\r\n        <div class=\"aba-teste\" onclick=\"mudarAba('sifilis')\" id=\"aba-sifilis\">S\u00edfilis<\/div>\r\n        <div class=\"aba-teste\" onclick=\"mudarAba('duo')\" id=\"aba-duo\">DUO<\/div>\r\n        <div class=\"aba-teste\" onclick=\"mudarAba('hepatiteB')\" id=\"aba-hepatiteB\">Hepatite B<\/div>\r\n        <div class=\"aba-teste\" onclick=\"mudarAba('hepatiteC')\" id=\"aba-hepatiteC\">Hepatite C<\/div>\r\n    <\/div>\r\n\r\n    <div class=\"painel-conteudo\">\r\n        <div class=\"titulo-aba-ativa\" id=\"titulo-teste-ativo\">Lan\u00e7amento: HIV - teste I<\/div>\r\n        \r\n        <div id=\"container-lotes\"><\/div>\r\n\r\n        <button class=\"btn-adicionar\" onclick=\"adicionarLote()\">+ ADICIONAR NOVO LOTE DESTE TESTE<\/button>\r\n\r\n    <\/div>\r\n\r\n    <button onclick=\"imprimirPDF()\" class=\"btn-cajati\" id=\"btn-imprimir\">\r\n        Imprimir (PDF)\r\n    <\/button>\r\n<\/div>\r\n\r\n<script>\r\n    let db = { hiv1: {}, hiv2: {}, sifilis: {}, duo: {}, hepatiteB: {}, hepatiteC: {} };\r\n    let abaAtiva = 'hiv1';\r\n    \r\n    const nomesTestes = {\r\n        hiv1: \"HIV - teste I\", hiv2: \"HIV - teste II\", sifilis: \"S\u00edfilis\", \r\n        duo: \"DUO\", hepatiteB: \"Hepatite B\", hepatiteC: \"Hepatite C\"\r\n    };\r\n\r\n    const idsInputsTextos = ['in-marca', 'in-lote', 'in-validade'];\r\n    const idsInputsNumeros = ['in-cegonha', 'in-rotina', 'in-mobilizacao', 'in-treinamento', 'in-invalidos', 'in-perdidos', 'in-saldo-inicial', 'in-entradas', 'in-pos', 'in-neg'];\r\n\r\n    window.onload = function() {\r\n        document.getElementById('mes-ref').value = new Date().toISOString().slice(0, 7);\r\n        carregarDadosDaTela();\r\n    };\r\n\r\n    function mudarAba(novaAba) {\r\n        document.getElementById(`aba-${abaAtiva}`).classList.remove('aba-ativa');\r\n        abaAtiva = novaAba;\r\n        document.getElementById(`aba-${abaAtiva}`).classList.add('aba-ativa');\r\n        document.getElementById('titulo-teste-ativo').textContent = `Lan\u00e7amento: ${nomesTestes[abaAtiva]}`;\r\n        carregarDadosDaTela();\r\n    }\r\n\r\n    function carregarDadosDaTela() {\r\n        const mesRef = document.getElementById('mes-ref').value;\r\n        if (!mesRef) return;\r\n\r\n        if (!db[abaAtiva][mesRef]) {\r\n            db[abaAtiva][mesRef] = [ {} ];\r\n        }\r\n\r\n        renderizarLotesHTML();\r\n    }\r\n\r\n    function adicionarLote() {\r\n        const mesRef = document.getElementById('mes-ref').value;\r\n        if (!mesRef) return;\r\n        db[abaAtiva][mesRef].push({});\r\n        renderizarLotesHTML();\r\n    }\r\n\r\n    function removerLote(index) {\r\n        const mesRef = document.getElementById('mes-ref').value;\r\n        if (confirm(\"Tem certeza que deseja remover este registro?\")) {\r\n            db[abaAtiva][mesRef].splice(index, 1);\r\n            renderizarLotesHTML();\r\n        }\r\n    }\r\n\r\n    function renderizarLotesHTML() {\r\n        const mesRef = document.getElementById('mes-ref').value;\r\n        const lotes = db[abaAtiva][mesRef];\r\n        const container = document.getElementById('container-lotes');\r\n        let html = '';\r\n\r\n        lotes.forEach((lote, index) => {\r\n            let btnRemover = index > 0 ? `<button class=\"btn-remover-lote\" onclick=\"removerLote(${index})\">Remover Lote<\/button>` : '';\r\n            let val = (id) => lote[id] !== undefined ? lote[id] : \"\";\r\n\r\n            html += `\r\n            <div class=\"card-lote\">\r\n                <div class=\"header-lote\">\r\n                    <div class=\"titulo-lote\">LOTE \/ REGISTRO ${index + 1}<\/div>\r\n                    ${btnRemover}\r\n                <\/div>\r\n\r\n                <div class=\"grid-info-produto\">\r\n                    <div><label class=\"label-instrucao\" style=\"font-size: 11px;\">Marca<\/label>\r\n                    <input type=\"text\" class=\"input-lancamento input-texto\" id=\"in-marca-${index}\" value=\"${val('in-marca')}\" placeholder=\"Ex: WAMA\" oninput=\"calcularSalvar(${index})\"><\/div>\r\n                    \r\n                    <div><label class=\"label-instrucao\" style=\"font-size: 11px;\">Lote<\/label>\r\n                    <input type=\"text\" class=\"input-lancamento input-texto\" id=\"in-lote-${index}\" value=\"${val('in-lote')}\" placeholder=\"Ex: 23412A\" oninput=\"calcularSalvar(${index})\"><\/div>\r\n                    \r\n                    <div><label class=\"label-instrucao\" style=\"font-size: 11px;\">Validade<\/label>\r\n                    <input type=\"month\" class=\"input-lancamento input-texto\" id=\"in-validade-${index}\" value=\"${val('in-validade')}\" oninput=\"calcularSalvar(${index})\"><\/div>\r\n                <\/div>\r\n\r\n                <div class=\"bloco-secao\">\r\n                    <div class=\"bloco-titulo\">1. DESTINO DOS TESTES<\/div>\r\n                    <div class=\"tabela-wrapper\">\r\n                        <table class=\"tabela-bloco\">\r\n                            <thead>\r\n                                <tr>\r\n                                    <th width=\"14%\">Cegonha<\/th><th width=\"14%\">Rotina<\/th><th width=\"14%\">Mobiliz.<\/th>\r\n                                    <th width=\"14%\">Treinam.<\/th><th width=\"14%\">Inv\u00e1lidos<\/th><th width=\"14%\">Perdidos<\/th>\r\n                                    <th width=\"16%\" style=\"background-color: #008580;\">TOTAL USADO<\/th>\r\n                                <\/tr>\r\n                            <\/thead>\r\n                            <tbody>\r\n                                <tr>\r\n                                    <td><input type=\"number\" min=\"0\" placeholder=\"0\" class=\"input-lancamento\" id=\"in-cegonha-${index}\" value=\"${val('in-cegonha')}\" oninput=\"calcularSalvar(${index})\"><\/td>\r\n                                    <td><input type=\"number\" min=\"0\" placeholder=\"0\" class=\"input-lancamento\" id=\"in-rotina-${index}\" value=\"${val('in-rotina')}\" oninput=\"calcularSalvar(${index})\"><\/td>\r\n                                    <td><input type=\"number\" min=\"0\" placeholder=\"0\" class=\"input-lancamento\" id=\"in-mobilizacao-${index}\" value=\"${val('in-mobilizacao')}\" oninput=\"calcularSalvar(${index})\"><\/td>\r\n                                    <td><input type=\"number\" min=\"0\" placeholder=\"0\" class=\"input-lancamento\" id=\"in-treinamento-${index}\" value=\"${val('in-treinamento')}\" oninput=\"calcularSalvar(${index})\"><\/td>\r\n                                    <td><input type=\"number\" min=\"0\" placeholder=\"0\" class=\"input-lancamento\" id=\"in-invalidos-${index}\" value=\"${val('in-invalidos')}\" oninput=\"calcularSalvar(${index})\"><\/td>\r\n                                    <td><input type=\"number\" min=\"0\" placeholder=\"0\" class=\"input-lancamento\" id=\"in-perdidos-${index}\" value=\"${val('in-perdidos')}\" oninput=\"calcularSalvar(${index})\"><\/td>\r\n                                    <td class=\"celula-formula\" id=\"out-total-utilizado-${index}\">0<\/td>\r\n                                <\/tr>\r\n                            <\/tbody>\r\n                        <\/table>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <div class=\"bloco-secao\">\r\n                    <div class=\"bloco-titulo\">2. CONTROLE DE ESTOQUE<\/div>\r\n                    <div class=\"tabela-wrapper\">\r\n                        <table class=\"tabela-bloco\">\r\n                            <thead>\r\n                                <tr>\r\n                                    <th width=\"25%\">Saldo Inicial<\/th><th width=\"25%\">Entradas no M\u00eas<\/th>\r\n                                    <th width=\"25%\" style=\"background-color: #008580;\">Sa\u00eddas (Autom\u00e1tico)<\/th>\r\n                                    <th width=\"25%\" style=\"background-color: #008580;\">SALDO FINAL<\/th>\r\n                                <\/tr>\r\n                            <\/thead>\r\n                            <tbody>\r\n                                <tr>\r\n                                    <td><input type=\"number\" min=\"0\" placeholder=\"0\" class=\"input-lancamento\" id=\"in-saldo-inicial-${index}\" value=\"${val('in-saldo-inicial')}\" oninput=\"calcularSalvar(${index})\"><\/td>\r\n                                    <td><input type=\"number\" min=\"0\" placeholder=\"0\" class=\"input-lancamento\" id=\"in-entradas-${index}\" value=\"${val('in-entradas')}\" oninput=\"calcularSalvar(${index})\"><\/td>\r\n                                    <td class=\"celula-formula\" style=\"color: #475569;\" id=\"out-saidas-${index}\">0<\/td>\r\n                                    <td class=\"celula-formula\" id=\"out-saldo-final-${index}\">0<\/td>\r\n                                <\/tr>\r\n                            <\/tbody>\r\n                        <\/table>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <div class=\"bloco-secao\" style=\"margin-bottom:0;\">\r\n                    <div class=\"bloco-titulo\">3. RESULTADOS (Testes V\u00e1lidos)<\/div>\r\n                    <div class=\"tabela-wrapper\">\r\n                        <table class=\"tabela-bloco\">\r\n                            <thead>\r\n                                <tr>\r\n                                    <th width=\"33%\">Reagentes (+)<\/th><th width=\"33%\">N\u00e3o Reagentes (-)<\/th>\r\n                                    <th width=\"34%\" style=\"background-color: #008580;\">TOTAL LIDOS<\/th>\r\n                                <\/tr>\r\n                            <\/thead>\r\n                            <tbody>\r\n                                <tr>\r\n                                    <td><input type=\"number\" min=\"0\" placeholder=\"0\" class=\"input-lancamento input-pos\" id=\"in-pos-${index}\" value=\"${val('in-pos')}\" oninput=\"calcularSalvar(${index})\"><\/td>\r\n                                    <td><input type=\"number\" min=\"0\" placeholder=\"0\" class=\"input-lancamento input-neg\" id=\"in-neg-${index}\" value=\"${val('in-neg')}\" oninput=\"calcularSalvar(${index})\"><\/td>\r\n                                    <td class=\"celula-formula\" id=\"out-total-resultados-${index}\">0<\/td>\r\n                                <\/tr>\r\n                            <\/tbody>\r\n                        <\/table>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <div class=\"alerta-erro-lote\" id=\"alerta-erro-${index}\"><\/div>\r\n            <\/div>\r\n            `;\r\n        });\r\n\r\n        container.innerHTML = html;\r\n        lotes.forEach((lote, index) => calcularF\u00f3rmulasLote(index));\r\n        verificarBloqueioImpressao();\r\n    }\r\n\r\n    window.calcularSalvar = function(index) {\r\n        const mesRef = document.getElementById('mes-ref').value;\r\n        const loteData = db[abaAtiva][mesRef][index];\r\n\r\n        idsInputsTextos.forEach(id => {\r\n            loteData[id] = document.getElementById(`${id}-${index}`).value;\r\n        });\r\n\r\n        idsInputsNumeros.forEach(id => {\r\n            loteData[id] = document.getElementById(`${id}-${index}`).value;\r\n        });\r\n\r\n        calcularF\u00f3rmulasLote(index);\r\n        verificarBloqueioImpressao();\r\n    }\r\n\r\n    function calcularF\u00f3rmulasLote(index) {\r\n        const getV = (id) => parseInt(document.getElementById(`${id}-${index}`).value) || 0;\r\n        let temErro = false;\r\n        let msgErro = \"\";\r\n\r\n        idsInputsNumeros.forEach(id => {\r\n            if (getV(id) < 0) { temErro = true; msgErro = \"\u26a0\ufe0f Valores n\u00e3o podem ser negativos.\"; }\r\n        });\r\n\r\n        let valCegonha = getV('in-cegonha');\r\n        let valRotina = getV('in-rotina');\r\n        let valMob = getV('in-mobilizacao');\r\n        let aplicadosValidos = valCegonha + valRotina + valMob;\r\n        \r\n        let totalUtilizados = aplicadosValidos + getV('in-treinamento') + getV('in-invalidos') + getV('in-perdidos');\r\n        document.getElementById(`out-total-utilizado-${index}`).textContent = totalUtilizados;\r\n\r\n        document.getElementById(`out-saidas-${index}`).textContent = totalUtilizados;\r\n        let saldoFinal = getV('in-saldo-inicial') + getV('in-entradas') - totalUtilizados;\r\n        document.getElementById(`out-saldo-final-${index}`).textContent = saldoFinal;\r\n\r\n        if (saldoFinal < 0) {\r\n            temErro = true;\r\n            msgErro = \"\u26a0\ufe0f ERRO: Saldo Final negativo. Verifique as quantidades.\";\r\n            document.getElementById(`out-saldo-final-${index}`).style.color = \"#e11d48\";\r\n        } else {\r\n            document.getElementById(`out-saldo-final-${index}`).style.color = \"#00A09A\";\r\n        }\r\n\r\n        let totalResultados = getV('in-pos') + getV('in-neg');\r\n        document.getElementById(`out-total-resultados-${index}`).textContent = totalResultados;\r\n\r\n        if (!temErro && totalResultados > 0 && totalResultados !== aplicadosValidos) {\r\n            temErro = true;\r\n            msgErro = \"\u26a0\ufe0f DIVERG\u00caNCIA: A soma de Resultados difere da quantidade aplicada (Cegonha + Rotina + Mob).\";\r\n            document.getElementById(`out-total-resultados-${index}`).style.color = \"#e11d48\";\r\n        } else {\r\n            document.getElementById(`out-total-resultados-${index}`).style.color = \"#00A09A\";\r\n        }\r\n\r\n        const boxErro = document.getElementById(`alerta-erro-${index}`);\r\n        db[abaAtiva][document.getElementById('mes-ref').value][index]._temErro = temErro;\r\n\r\n        if (temErro) {\r\n            boxErro.textContent = msgErro; boxErro.style.display = 'block';\r\n        } else {\r\n            boxErro.style.display = 'none';\r\n        }\r\n    }\r\n\r\n    function verificarBloqueioImpressao() {\r\n        const mesRef = document.getElementById('mes-ref').value;\r\n        let temErroEmAlgumLugar = false;\r\n\r\n        Object.keys(db).forEach(aba => {\r\n            if(db[aba][mesRef]) {\r\n                db[aba][mesRef].forEach(lote => {\r\n                    if (lote._temErro) temErroEmAlgumLugar = true;\r\n                });\r\n            }\r\n        });\r\n\r\n        document.getElementById('btn-imprimir').disabled = temErroEmAlgumLugar;\r\n    }\r\n\r\n    function imprimirPDF() {\r\n        const unidade = document.getElementById('nome-unidade').value;\r\n        const mesRef = document.getElementById('mes-ref').value;\r\n\r\n        if (!unidade) { alert(\"Selecione a Unidade de Sa\u00fade antes de gerar o PDF.\"); return; }\r\n\r\n        const [ano, mes] = mesRef.split('-');\r\n        let linhasTabela = '';\r\n\r\n        Object.keys(nomesTestes).forEach(chaveAba => {\r\n            const lotesDoTeste = (db[chaveAba] && db[chaveAba][mesRef]) ? db[chaveAba][mesRef] : [{}]; \r\n\r\n            lotesDoTeste.forEach((d, indexLote) => {\r\n                const getV = (id) => parseInt(d[id]) || 0;\r\n\r\n                let marca = d['in-marca'] || \"-\";\r\n                let lote = d['in-lote'] || \"-\";\r\n                \r\n                let validadeRaw = d['in-validade'] || \"\";\r\n                let validadeFormatada = \"-\";\r\n                if (validadeRaw && validadeRaw.includes('-')) {\r\n                    const partes = validadeRaw.split('-');\r\n                    validadeFormatada = `${partes[1]}\/${partes[0]}`;\r\n                } else if (validadeRaw) {\r\n                    validadeFormatada = validadeRaw;\r\n                }\r\n                \r\n                let linhaNomePrincipal = `${nomesTestes[chaveAba]} - LOTE: ${lote}`;\r\n\r\n                let infoExtraHTML = `<span style=\"display: block; font-size: 8px; font-weight: normal; color: #475569; margin-top: 4px;\">\r\n                    Marca: ${marca} | Validade: ${validadeFormatada}\r\n                <\/span>`;\r\n\r\n                let totalUtilizados = getV('in-cegonha') + getV('in-rotina') + getV('in-mobilizacao') + getV('in-treinamento') + getV('in-invalidos') + getV('in-perdidos');\r\n                let saldoFinal = getV('in-saldo-inicial') + getV('in-entradas') - totalUtilizados;\r\n\r\n                linhasTabela += `\r\n                    <tr>\r\n                        <td style=\"font-weight: bold; background-color: #f1f5f9; text-align: left; padding: 6px;\">\r\n                            ${linhaNomePrincipal}\r\n                            ${infoExtraHTML}\r\n                        <\/td>\r\n                        <td>${getV('in-cegonha')}<\/td>\r\n                        <td>${getV('in-rotina')}<\/td>\r\n                        <td>${getV('in-mobilizacao')}<\/td>\r\n                        <td>${getV('in-treinamento')}<\/td>\r\n                        <td>${getV('in-invalidos')}<\/td>\r\n                        <td>${getV('in-perdidos')}<\/td>\r\n                        <td style=\"font-weight: bold; color: #00A09A; background-color: #f1f5f9;\">${totalUtilizados}<\/td>\r\n                        <td>${getV('in-saldo-inicial')}<\/td>\r\n                        <td>${getV('in-entradas')}<\/td>\r\n                        <td style=\"font-weight: bold; color: #00A09A; background-color: #f1f5f9;\">${saldoFinal}<\/td>\r\n                        <td style=\"color: #e11d48; font-weight: bold;\">${getV('in-pos')}<\/td>\r\n                        <td style=\"color: #0ea5e9; font-weight: bold;\">${getV('in-neg')}<\/td>\r\n                    <\/tr>\r\n                `;\r\n            });\r\n        });\r\n\r\n        \/\/ FORMATA\u00c7\u00c3O DO NOME DO ARQUIVO PDF (Remove caracteres especiais e espa\u00e7os)\r\n        let unidadeLimpa = unidade.replace(\/\\s+\/g, '_').replace(\/[^a-zA-Z0-9_]\/g, '');\r\n        let nomeDocumentoPDF = `Fechamento_Testes_${unidadeLimpa}_${mes}_${ano}`;\r\n\r\n        const htmlImpressao = `\r\n            <!DOCTYPE html>\r\n            <html>\r\n            <head>\r\n                <title>${nomeDocumentoPDF}<\/title>\r\n                <style>\r\n                    body { font-family: Arial, sans-serif; margin: 0; padding: 10px; color: #000; background: #fff; }\r\n                    .header-print { display: flex; align-items: center; border-bottom: 2px solid #00A09A; padding-bottom: 5px; margin-bottom: 10px; }\r\n                    .header-logo { height: 45px; } \r\n                    .header-center { margin-left: 20px; font-size: 11px; font-weight: 600; line-height: 1.2; }\r\n                    .titulo-documento-print { background-color: #00A09A; color: white; padding: 6px; border-radius: 6px; font-size: 14px; text-align: center; font-weight: 800; margin-bottom: 15px; text-transform: uppercase; -webkit-print-color-adjust: exact; print-color-adjust: exact; }\r\n                    .print-info { display: flex; justify-content: space-between; margin-bottom: 10px; font-size: 12px; font-weight: 700; }\r\n                    \r\n                    .print-table { width: 100%; border-collapse: collapse; font-size: 10px; text-align: center; }\r\n                    .print-table th { background-color: #00A09A; color: white; padding: 6px 2px; border: 1px solid #008580; -webkit-print-color-adjust: exact; print-color-adjust: exact; }\r\n                    .print-table td { border: 1px solid #00A09A; padding: 6px 2px; vertical-align: middle; }\r\n                    .t-header { background-color: #00827d !important; font-size: 9px; }\r\n                    \r\n                    .signature-box { border-top: 1px solid #000; width: 50%; margin: 40px auto 0 auto; text-align: center; padding-top: 5px; font-weight: bold; font-size: 11px; text-transform: uppercase; }\r\n                    @page { size: A4 landscape; margin: 1cm; }\r\n                <\/style>\r\n            <\/head>\r\n            <body>\r\n                <div class=\"header-print\">\r\n                    <img decoding=\"async\" src=\"https:\/\/saudecajati.com.br\/wp-content\/uploads\/2026\/04\/LOGO-SAUDE-UPSCALER-1-300x109.png\" class=\"header-logo\">\r\n                    <div class=\"header-center\">\r\n                        SECRETARIA MUNICIPAL DE SA\u00daDE - CAJATI\/SP<br>\r\n                        CONTROLE MENSAL DE ESTOQUE E UTILIZA\u00c7\u00c3O DE TESTES R\u00c1PIDOS\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <div class=\"print-info\">\r\n                    <div>UNIDADE: ${unidade.toUpperCase()}<\/div>\r\n                    <div>COMPET\u00caNCIA: ${mes}\/${ano}<\/div>\r\n                <\/div>\r\n\r\n                <table class=\"print-table\">\r\n                    <thead>\r\n                        <tr>\r\n                            <th rowspan=\"2\" width=\"25%\">AGRAVO \/ TESTE<\/th>\r\n                            <th colspan=\"7\">1. DESTINO DOS TESTES (USADOS)<\/th>\r\n                            <th colspan=\"3\">2. ESTOQUE<\/th>\r\n                            <th colspan=\"2\">3. RESULTADOS<\/th>\r\n                        <\/tr>\r\n                        <tr class=\"t-header\">\r\n                            <th>Cegonha<\/th><th>Rotina<\/th><th>Mobiliz.<\/th><th>Trein.<\/th><th>Inv\u00e1l.<\/th><th>Perd.<\/th><th>TOTAL USADO<\/th>\r\n                            <th>Saldo Inic.<\/th><th>Entradas<\/th><th>SALDO FINAL<\/th>\r\n                            <th>Reag. (+)<\/th><th>N\u00e3o Reag. (-)<\/th>\r\n                        <\/tr>\r\n                    <\/thead>\r\n                    <tbody>\r\n                        ${linhasTabela}\r\n                    <\/tbody>\r\n                <\/table>\r\n                \r\n                <div class=\"signature-box\">\r\n                    Enfermeiro(a) Respons\u00e1vel da Unidade\r\n                <\/div>\r\n            <\/body>\r\n            <\/html>\r\n        `;\r\n\r\n        let iframe = document.getElementById('iframe-impressao');\r\n        if (!iframe) {\r\n            iframe = document.createElement('iframe');\r\n            iframe.id = 'iframe-impressao';\r\n            iframe.style.display = 'none';\r\n            document.body.appendChild(iframe);\r\n        }\r\n\r\n        iframe.contentWindow.document.open();\r\n        iframe.contentWindow.document.write(htmlImpressao);\r\n        iframe.contentWindow.document.close();\r\n\r\n        iframe.onload = function() {\r\n            \/\/ Define o t\u00edtulo do documento principal temporariamente para que o navegador use como nome de arquivo padr\u00e3o ao salvar o PDF\r\n            let tituloOriginalSite = document.title;\r\n            document.title = nomeDocumentoPDF;\r\n            \r\n            iframe.contentWindow.focus();\r\n            iframe.contentWindow.print();\r\n            \r\n            \/\/ Restaura o t\u00edtulo original do seu site WordPress ap\u00f3s a abertura do di\u00e1logo de impress\u00e3o\r\n            setTimeout(() => {\r\n                document.title = tituloOriginalSite;\r\n            }, 1000);\r\n        };\r\n    }\r\n<\/script>\r\n<\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2a663fa e-con-full e-flex e-con e-child\" data-id=\"2a663fa\" data-element_type=\"container\" data-e-type=\"container\">\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>Fechamento Mensal de Testes R\u00e1pidos Fechamento Mensal &#8211; Testes R\u00e1pidos 1. Unidade de Sa\u00fade &#8212; Selecione a Unidade &#8212;USF Barra do AzeiteUSF CapelinhaUSF Capit\u00e3o BrazUSF CentroUSF JacupiranguinhaUSF Mauro Leonel (Bico do Pato)USF ParafusoUSF Parafuso IIUSF Vila Andr\u00e9iaUSF Vila AntunesUSF Vila Antunes IIUSF Vila MunizUSF Vila Tatu 2. M\u00eas de Refer\u00eancia HIV &#8211; teste I HIV [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"inline_featured_image":false,"footnotes":""},"class_list":["post-7963","page","type-page","status-publish","hentry"],"_hostinger_reach_plugin_has_subscription_block":false,"_hostinger_reach_plugin_is_elementor":false,"_links":{"self":[{"href":"https:\/\/saudecajati.com.br\/index.php\/wp-json\/wp\/v2\/pages\/7963","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/saudecajati.com.br\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/saudecajati.com.br\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/saudecajati.com.br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/saudecajati.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=7963"}],"version-history":[{"count":13,"href":"https:\/\/saudecajati.com.br\/index.php\/wp-json\/wp\/v2\/pages\/7963\/revisions"}],"predecessor-version":[{"id":7982,"href":"https:\/\/saudecajati.com.br\/index.php\/wp-json\/wp\/v2\/pages\/7963\/revisions\/7982"}],"wp:attachment":[{"href":"https:\/\/saudecajati.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=7963"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}