Dashboard LGPD

Visão Geral do Mapeamento

Total de Processos

0
processos mapeados

Categorias de Dados

0
tipos de dados identificados

Dados Sensíveis

0
processos com dados sensíveis

Compartilhamentos

0
compartilhamentos externos

Processos por Categoria

Tipos de Dados Pessoais

Finalidades de Uso

Formas de Coleta

Processos com Maior Risco

Processo Categoria Dados Sensíveis Compartilhamento Documentação Nível de Risco

Compartilhamentos Externos

Processo Categoria Dados Compartilhados Destinatário Finalidade
if (processo.dadosPessoais) { processo.dadosPessoais.split(',').forEach(dado => { categoriasDados.add(dado.trim()); }); } }); document.getElementById('total-categorias').textContent = categoriasDados.size; // Contar processos com dados sensíveis const dadosSensiveisRegex = /cpf|rg|saúde|biométrico|racial|religião|orientação sexual|saude|biometrico|racial|religiao|orientacao sexual/i; let processosDadosSensiveis = 0; dadosProcessos.forEach(processo => { if (processo.dadosPessoais && dadosSensiveisRegex.test(processo.dadosPessoais)) { processosDadosSensiveis++; } }); processosLGPD.forEach(processo => { if (processo.dados && dadosSensiveisRegex.test(processo.dados)) { processosDadosSensiveis++; } }); document.getElementById('total-sensiveis').textContent = processosDadosSensiveis; // Contar compartilhamentos externos let totalCompartilhamentos = 0; dadosProcessos.forEach(processo => { if (processo.compartilhamento && processo.compartilhamento.trim() !== '') { totalCompartilhamentos++; } }); processosLGPD.forEach(processo => { if (processo.compartilhamento && processo.compartilhamento.trim() !== '') { totalCompartilhamentos++; } }); document.getElementById('total-compartilhamentos').textContent = totalCompartilhamentos; // Gráfico de Processos por Categoria const categorias = { 'rh': 0, 'vendas': 0, 'financeiro': 0, 'marketing': 0, 'outros': 0 }; processosLGPD.forEach(processo => { if (processo.tipo && categorias.hasOwnProperty(processo.tipo)) { categorias[processo.tipo]++; } else { categorias['outros']++; } }); const ctxCategorias = document.getElementById('chart-categorias').getContext('2d'); new Chart(ctxCategorias, { type: 'pie', data: { labels: ['RH', 'Vendas', 'Financeiro', 'Marketing', 'Outros'], datasets: [{ data: [ categorias.rh, categorias.vendas, categorias.financeiro, categorias.marketing, categorias.outros ], backgroundColor: [ '#3498db', '#2ecc71', '#f1c40f', '#e74c3c', '#9b59b6' ] }] }, options: { responsive: true, plugins: { legend: { position: 'right', } } } }); // Gráfico de Tipos de Dados Pessoais const tiposDados = { 'identificação': 0, 'contato': 0, 'financeiro': 0, 'profissional': 0, 'sensível': 0, 'outros': 0 }; const regexIdentificacao = /nome|cpf|rg|identidade|passaporte/i; const regexContato = /email|e-mail|telefone|celular|endereço|endereco/i; const regexFinanceiro = /bancário|bancario|cartão|cartao|financeiro|pagamento/i; const regexProfissional = /profissão|profissao|cargo|empresa|trabalho/i; const regexSensivel = /saúde|saude|biométrico|biometrico|racial|religião|religiao|orientação sexual|orientacao sexual/i; dadosProcessos.forEach(processo => { if (processo.dadosPessoais) { if (regexIdentificacao.test(processo.dadosPessoais)) tiposDados.identificação++; if (regexContato.test(processo.dadosPessoais)) tiposDados.contato++; if (regexFinanceiro.test(processo.dadosPessoais)) tiposDados.financeiro++; if (regexProfissional.test(processo.dadosPessoais)) tiposDados.profissional++; if (regexSensivel.test(processo.dadosPessoais)) tiposDados.sensível++; if (!regexIdentificacao.test(processo.dadosPessoais) && !regexContato.test(processo.dadosPessoais) && !regexFinanceiro.test(processo.dadosPessoais) && !regexProfissional.test(processo.dadosPessoais) && !regexSensivel.test(processo.dadosPessoais)) { tiposDados.outros++; } } }); const ctxDados = document.getElementById('chart-dados').getContext('2d'); new Chart(ctxDados, { type: 'bar', data: { labels: ['Identificação', 'Contato', 'Financeiro', 'Profissional', 'Sensível', 'Outros'], datasets: [{ label: 'Quantidade de Processos', data: [ tiposDados.identificação, tiposDados.contato, tiposDados.financeiro, tiposDados.profissional, tiposDados.sensível, tiposDados.outros ], backgroundColor: '#3498db' }] }, options: { responsive: true, scales: { y: { beginAtZero: true, ticks: { precision: 0 } } } } }); // Gráfico de Finalidades de Uso const finalidades = { 'contrato': 0, 'legal': 0, 'consentimento': 0, 'legitimo': 0, 'outros': 0 }; const regexContrato = /contrato|execução|execucao|serviço|servico/i; const regexLegal = /legal|lei|obrigação|obrigacao|regulatório|regulatorio/i; const regexConsentimento = /consentimento|autorização|autorizacao|aceite/i; const regexLegitimo = /legítimo|legitimo|interesse/i; dadosProcessos.forEach(processo => { if (processo.finalidade) { if (regexContrato.test(processo.finalidade)) finalidades.contrato++; else if (regexLegal.test(processo.finalidade)) finalidades.legal++; else if (regexConsentimento.test(processo.finalidade)) finalidades.consentimento++; else if (regexLegitimo.test(processo.finalidade)) finalidades.legitimo++; else finalidades.outros++; } }); processosLGPD.forEach(processo => { if (processo.finalidade) { if (regexContrato.test(processo.finalidade)) finalidades.contrato++; else if (regexLegal.test(processo.finalidade)) finalidades.legal++; else if (regexConsentimento.test(processo.finalidade)) finalidades.consentimento++; else if (regexLegitimo.test(processo.finalidade)) finalidades.legitimo++; else finalidades.outros++; } }); const ctxFinalidades = document.getElementById('chart-finalidades').getContext('2d'); new Chart(ctxFinalidades, { type: 'doughnut', data: { labels: ['Execução de Contrato', 'Obrigação Legal', 'Consentimento', 'Interesse Legítimo', 'Outros'], datasets: [{ data: [ finalidades.contrato, finalidades.legal, finalidades.consentimento, finalidades.legitimo, finalidades.outros ], backgroundColor: [ '#2ecc71', '#3498db', '#e74c3c', '#f1c40f', '#9b59b6' ] }] }, options: { responsive: true, plugins: { legend: { position: 'right', } } } }); // Gráfico de Formas de Coleta const coletas = { 'formulario': 0, 'site': 0, 'app': 0, 'fisico': 0, 'outros': 0 }; const regexFormulario = /formulário|formulario/i; const regexSite = /site|web|online|internet/i; const regexApp = /app|aplicativo|mobile|celular/i; const regexFisico = /físico|fisico|papel|impresso/i; dadosProcessos.forEach(processo => { if (processo.coleta) { if (regexFormulario.test(processo.coleta)) coletas.formulario++; else if (regexSite.test(processo.coleta)) coletas.site++; else if (regexApp.test(processo.coleta)) coletas.app++; else if (regexFisico.test(processo.coleta)) coletas.fisico++; else coletas.outros++; } }); const ctxColetas = document.getElementById('chart-coletas').getContext('2d'); new Chart(ctxColetas, { type: 'polarArea', data: { labels: ['Formulário', 'Site/Web', 'Aplicativo', 'Documento Físico', 'Outros'], datasets: [{ data: [ coletas.formulario, coletas.site, coletas.app, coletas.fisico, coletas.outros ], backgroundColor: [ 'rgba(52, 152, 219, 0.7)', 'rgba(46, 204, 113, 0.7)', 'rgba(231, 76, 60, 0.7)', 'rgba(241, 196, 15, 0.7)', 'rgba(155, 89, 182, 0.7)' ] }] }, options: { responsive: true, plugins: { legend: { position: 'right', } } } }); // Tabela de Processos com Maior Risco const tabelaRiscos = document.getElementById('table-riscos').getElementsByTagName('tbody')[0]; // Função para calcular nível de risco function calcularRisco(processo) { let pontos = 0; // Verificar dados sensíveis if (processo.dadosPessoais && dadosSensiveisRegex.test(processo.dadosPessoais)) { pontos += 3; } else if (processo.dados && dadosSensiveisRegex.test(processo.dados)) { pontos += 3; } // Verificar compartilhamento if (processo.compartilhamento && processo.compartilhamento.trim() !== '') { pontos += 2; } // Verificar documentação if (processo.politica && processo.politica.trim() === '') { pontos += 1; } // Verificar tempo de retenção if (processo.retencao && (processo.retencao.includes('indefinido') || processo.retencao.trim() === '')) { pontos += 2; } return pontos; } // Combinar todos os processos e calcular risco const todosProcessos = []; dadosProcessos.forEach(processo => { todosProcessos.push({ nome: processo.nome || 'Sem nome', categoria: 'Dados', dadosSensiveis: processo.dadosPessoais && dadosSensiveisRegex.test(processo.dadosPessoais) ? 'Sim' : 'Não', compartilhamento: processo.compartilhamento && processo.compartilhamento.trim() !== '' ? 'Sim' : 'Não', documentacao: 'N/A', risco: calcularRisco(processo) }); }); processosLGPD.forEach(processo => { todosProcessos.push({ nome: processo.nome || 'Sem nome', categoria: processo.tipo ? processo.tipo.toUpperCase() : 'Outros', dadosSensiveis: processo.dados && dadosSensiveisRegex.test(processo.dados) ? 'Sim' : 'Não', compartilhamento: processo.compartilhamento && processo.compartilhamento.trim() !== '' ? 'Sim' : 'Não', documentacao: processo.politica && processo.politica.trim() !== '' ? 'Sim' : 'Não', risco: calcularRisco(processo) }); }); // Ordenar por nível de risco (decrescente) todosProcessos.sort((a, b) => b.risco - a.risco); // Preencher tabela (top 5 de maior risco) const topRiscos = todosProcessos.slice(0, 5); topRiscos.forEach(processo => { const row = tabelaRiscos.insertRow(); row.insertCell(0).textContent = processo.nome; row.insertCell(1).textContent = processo.categoria; row.insertCell(2).textContent = processo.dadosSensiveis; row.insertCell(3).textContent = processo.compartilhamento; row.insertCell(4).textContent = processo.documentacao; const cellRisco = row.insertCell(5); let riscoClass = ''; let riscoTexto = ''; if (processo.risco >= 5) { riscoClass = 'risk-high'; riscoTexto = 'Alto'; } else if (processo.risco >= 3) { riscoClass = 'risk-medium'; riscoTexto = 'Médio'; } else { riscoClass = 'risk-low'; riscoTexto = 'Baixo'; } cellRisco.innerHTML = `${riscoTexto}`; }); // Tabela de Compartilhamentos Externos const tabelaCompartilhamentos = document.getElementById('table-compartilhamentos').getElementsByTagName('tbody')[0]; // Listar processos com compartilhamento const processosComCompartilhamento = []; dadosProcessos.forEach(processo => { if (processo.compartilhamento && processo.compartilhamento.trim() !== '') { processosComCompartilhamento.push({ nome: processo.nome || 'Sem nome', categoria: 'Dados', dados: processo.dadosPessoais || 'N/A', destinatario: processo.compartilhamento, finalidade: processo.finalidade || 'N/A' }); } }); processosLGPD.forEach(processo => { if (processo.compartilhamento && processo.compartilhamento.trim() !== '') { processosComCompartilhamento.push({ nome: processo.nome || 'Sem nome', categoria: processo.tipo ? processo.tipo.toUpperCase() : 'Outros', dados: processo.dados || 'N/A', destinatario: processo.compartilhamento, finalidade: processo.finalidade || 'N/A' }); } }); // Preencher tabela de compartilhamentos processosComCompartilhamento.forEach(processo => { const row = tabelaCompartilhamentos.insertRow(); row.insertCell(0).textContent = processo.nome; row.insertCell(1).textContent = processo.categoria; row.insertCell(2).textContent = processo.dados; row.insertCell(3).textContent = processo.destinatario; row.insertCell(4).textContent = processo.finalidade; }); // Exportar relatório document.getElementById('btn-export-dashboard').addEventListener('click', function() { alert('Funcionalidade de exportação de relatório será implementada em uma versão futura.'); }); // Filtros document.getElementById('filter-period').addEventListener('change', function() { alert('Funcionalidade de filtro por período será implementada em uma versão futura.'); }); document.getElementById('filter-category').addEventListener('change', function() { alert('Funcionalidade de filtro por categoria será implementada em uma versão futura.'); }); });