Skip to content

jayrmotta/lgpd-compliance

Repository files navigation

Plataforma de Conformidade LGPD

Uma aplicação Next.js abrangente para gerenciar solicitações de conformidade LGPD (Lei Geral de Proteção de Dados), construída com TypeScript, Tailwind CSS, e seguindo práticas TDD.

🚀 Funcionalidades

  • Autenticação de Usuários: Login/registro seguro para titulares de dados e representantes de empresa
  • Gestão de Solicitações LGPD: Criar, acompanhar e gerenciar diferentes tipos de solicitações LGPD:
    • Solicitações de Acesso a Dados
    • Solicitações de Exclusão de Dados
    • Solicitações de Correção de Dados
    • Solicitações de Portabilidade de Dados
  • Integração de Pagamento PIX: Verificação de pagamento segura para processamento de solicitações
  • Criptografia Ponta a Ponta: Criptografia do lado do cliente para dados sensíveis
  • Histórico de Solicitações: Acompanhar status e progresso de todas as solicitações enviadas
  • Suporte Multi-idioma: Localização em português para usuários brasileiros

🛠 Stack Tecnológica

  • Frontend: Next.js 15.4+, React 19, TypeScript 5
  • Estilo: Tailwind CSS 4
  • Banco de Dados: SQLite3 com interface promisificada
  • Autenticação: Tokens JWT com middleware seguro
  • Criptografia: libsodium para criptografia ponta a ponta
  • Testes: Jest (unidade), Playwright (E2E)
  • Qualidade de Código: ESLint, TypeScript modo estrito

📋 Pré-requisitos

  • Node.js 18.17 ou posterior
  • npm, yarn, ou pnpm
  • Git

🚀 Primeiros Passos

1. Clonar e Instalar

git clone <repository-url>
cd lgpd-compliance
npm install

2. Configuração do Ambiente

  1. Copie o arquivo de exemplo do ambiente:

    cp .env.example .env
  2. Atualize o arquivo .env com seus valores de configuração.

3. Criar Conta de Super Administrador

⚠️ IMPORTANTE: Antes de usar a plataforma, você deve criar a conta inicial do operador da plataforma (super admin).

# Método 1: Com argumentos de linha de comando (recomendado)
npm run create-super-admin -- --email admin@yourplatform.com --password YourSecurePass123!

# Método 2: Modo interativo (solicita entrada)
npm run create-super-admin

# Ver ajuda
npm run create-super-admin -- --help

Requisitos de Senha:

  • Mínimo 8 caracteres
  • Pelo menos uma letra maiúscula
  • Pelo menos uma letra minúscula
  • Pelo menos um caractere especial

Recursos de Segurança:

  • ✅ Apenas um super admin permitido por sistema
  • ✅ Senhas são hasheadas com bcrypt (salt rounds: 12)
  • ✅ Validação rigorosa de entrada
  • ✅ Credenciais nunca armazenadas permanentemente no script

4. Servidor de Desenvolvimento

npm run dev

Abra http://localhost:3000 para visualizar a aplicação.

4. Build para Produção

npm run build
npm start

📝 Scripts Disponíveis

Script Descrição
npm run create-super-admin Criar conta de super administrador inicial
npm run dev Iniciar servidor de desenvolvimento
npm run build Construir a aplicação para produção
npm run start Iniciar o servidor de produção
npm run lint Executar análise de código ESLint
npm test Executar testes unitários com Jest
npm run test:watch Executar testes em modo watch
npm run test:coverage Executar testes com relatório de cobertura

🎭 História Completa da Jornada LGPD

Capítulo 1: O Administrador da Plataforma (Super Admin) Configura o Sistema

Maria, operadora da plataforma LGPD, inicia a configuração do sistema executando o comando de criação do super administrador:

npm run create-super-admin -- --email maria@lgpdplatform.com --password SecureAdmin123!

O sistema cria sua conta com o mais alto nível de acesso. Agora ela pode fazer login no painel administrativo (/admin) e precisa configurar uma nova empresa na plataforma.

Maria navega para a interface administrativa onde vê um aviso crítico: "Esta página é apenas para operadores da plataforma. Representantes da empresa devem ser criados através desta interface." Ela preenche o formulário de criação de representante da empresa para a TechCorp Ltd, inserindo:

  • Email: admin@techcorp.com
  • Company ID: techcorp-ltd
  • Função: admin
  • Seleciona "Gerar senha temporária automaticamente"

Quando ela clica em "Criar Representante da Empresa", o sistema chama /api/admin/company-representatives e gera uma senha temporária automaticamente que deve ser enviada de forma segura para João.

Capítulo 2: Representante da Empresa Configura a Criptografia

João, o recém-criado administrador da TechCorp Ltd, recebe suas credenciais de login de forma segura. Ele visita a plataforma e faz login em /login usando o sistema de autenticação. Após login bem-sucedido, ele é direcionado para /company-setup.

João vê um aviso crítico de segurança: "Private keys are generated in your browser and NEVER sent to our servers". Ele clica em "Gerar Chaves de Criptografia", que aciona a função de geração de chaves.

O sistema gera um par de chaves de criptografia:

  • Chave pública (para receber solicitações LGPD criptografadas)
  • Chave privada (para descriptografar solicitações - permanece no navegador)

João salva sua chave privada no gerenciador de senhas, baixa o backup usando "📁 Download Key File", marca "I have saved my private key securely" e clica em "✅ Register Public Key & Continue". O sistema registra a chave pública da empresa no banco de dados.

Capítulo 3: Titular de Dados Descobre Seus Direitos

Ana, uma cidadã comum, visita a página inicial da plataforma (/) e lê sobre conformidade LGPD. Ela aprende sobre seus direitos através dos cartões de funcionalidades:

  • 📝 Acesso a Dados ("Visualize todos os dados pessoais armazenados")
  • 🗑️ Exclusão de Dados ("Solicite a remoção completa dos seus dados")
  • ✏️ Correção de Dados ("Atualize informações incorretas")
  • 📤 Portabilidade de Dados ("Exporte seus dados em formato portável")

Impressionada com a abordagem de segurança primeiro descrita, Ana clica em "Criar Conta".

Capítulo 4: Registro do Titular de Dados

Ana preenche o formulário de registro em /register com seu email e uma senha forte. O sistema valida que sua senha atende aos requisitos: 8+ caracteres, maiúscula, minúscula e caracteres especiais.

Quando ela submete, o endpoint da API /api/auth/register processa sua solicitação:

  1. Valida formato do email
  2. Faz hash de sua senha com bcrypt
  3. Cria sua conta com função 'data_subject'
  4. Retorna código de sucesso 'REGISTRATION_SUCCESS'

Capítulo 5: Login e Acesso ao Dashboard do Titular de Dados

Ana faz login em /login usando suas credenciais. O sistema verifica sua senha, gera um token JWT, e a redireciona para /dashboard.

Em seu dashboard, Ana vê uma mensagem de boas-vindas e três opções principais:

  • "Solicitar Dados" (acesso a dados)
  • "Excluir Dados" (exclusão de dados)
  • "Corrigir Dados" (correção de dados)

Capítulo 6: Criando uma Solicitação LGPD

Ana clica em "Solicitar Dados" que a leva para /create-request?type=data_access. O sistema primeiro realiza uma verificação de compatibilidade do navegador e mostra "✓ Seu navegador é compatível".

Ana preenche sua solicitação:

  • Motivo: "Quero verificar meus dados pessoais"
  • Descrição: "Por favor, forneça todos os meus dados pessoais incluindo nome completo, endereço e dados comportamentais coletados sobre mim"

Quando ela preenche o formulário e procede, o sistema automaticamente inicia o processo de verificação de identidade via PIX.

Capítulo 7: Verificação de Identidade

O sistema agora requer verificação de identidade via PIX. Ana vê o formulário onde insere seu CPF: "123.456.789-00".

Ela clica em "🔐 Gerar QR Code PIX (R$ 0,01)", que gera um QR code PIX para pagamento de R$ 0,01. Após simular o pagamento com "✅ Simular Pagamento Realizado", sua identidade é verificada.

Capítulo 8: Submissão da Solicitação Criptografada

Com a identidade verificada, Ana vê a tela de confirmação mostrando "✅ Identidade verificada - Processando solicitação..." e "Sua solicitação está sendo criptografada e enviada automaticamente".

O sistema automaticamente aciona o processo de criptografia em /api/lgpd-requests:

  1. Verifica autenticação e valida os dados
  2. Busca a chave pública da TechCorp
  3. Criptografa os dados sensíveis usando criptografia sealed box
  4. Armazena apenas metadados e o blob criptografado no banco de dados

O sistema responde com sucesso e confirmação de criptografia:

✅ Solicitação LGPD criada com sucesso!
🔒 DADOS CRIPTOGRAFADOS COM SEGURANÇA
• Apenas a empresa pode descriptografar
• A plataforma NÃO pode ver seus dados pessoais
• Operador com conhecimento zero implementado

Capítulo 9: Empresa Processa a Solicitação

João da TechCorp recebe uma notificação sobre a nova solicitação LGPD. Ele faz login em /company-dashboard mas primeiro deve desbloquear o dashboard com sua chave privada.

João insere sua chave privada de seu gerenciador de senhas. O sistema valida o formato da chave e desbloqueia o dashboard, mostrando "Dashboard Desbloqueado".

O dashboard exibe a solicitação de Ana:

  • Tipo de Solicitação: "Acesso aos Dados - 1755288038734-b9kyt20gt"
  • Status: "PENDING"
  • Criada: "15/08/2025 às 20:00"
  • Prazo: "30/08/2025 às 20:00" (15 dias)

João clica na solicitação para descriptografá-la. O sistema usa sua chave privada para descriptografar o sealed box, revelando os dados originais de Ana:

  • Email: ana@email.com
  • CPF: 123.456.789-00
  • Motivo: "Quero verificar meus dados pessoais"
  • Descrição: "Por favor, forneça todos os meus dados..."

Capítulo 10: Processamento e Resposta da Solicitação

João revisa a solicitação descriptografada de Ana e clica em "Processar Solicitação". Ele coleta os dados de Ana dos sistemas da TechCorp:

  • Dados de perfil (nome, email, endereço)
  • Dados comportamentais (histórico de compras, preferências)
  • Dados técnicos (endereços IP, informações do dispositivo)

João compila uma resposta abrangente e clica em "Marcar como Concluída". O sistema atualiza o status da solicitação para 'COMPLETED' com timestamp de conclusão.

Capítulo 11: Titular de Dados Recebe Resposta

Ana faz login novamente na plataforma e visita o dashboard para verificar o status de sua solicitação. Ela vê que sua solicitação agora está marcada como "COMPLETED" com um indicador de status verde.

A TechCorp envia a Ana sua exportação completa de dados através de um canal seguro (separado da plataforma), cumprindo sua solicitação de acesso LGPD dentro do prazo obrigatório de 15 dias.

Capítulo 12: Conformidade Alcançada

O sistema mantém trilha de auditoria completa com metadados e timestamps, garantindo conformidade LGPD:

  • Ana exerceu seu direito de acesso a dados
  • TechCorp respondeu dentro dos prazos legais
  • Plataforma facilitou transferência segura com conhecimento zero
  • Super Admin manteve integridade sem acessar dados pessoais

Isso demonstra o fluxo completo de conformidade LGPD com criptografia ponta a ponta, onde dados sensíveis permanecem acessíveis apenas aos representantes da empresa.

🧪 Estratégia de Testes

Testes Unitários (Jest)

  • Cobrindo lógica de negócio principal
  • Rotas de API, autenticação, criptografia, operações de banco de dados
  • Executar com: npm test
  • Relatórios de cobertura em /coverage/

Testes E2E (Playwright)

  • Cobrindo jornadas do usuário
  • Fluxos de autenticação, fluxos de trabalho de solicitação LGPD, pagamentos PIX
  • Executar com: npx playwright test
  • Requer servidor de desenvolvimento rodando na porta 3000

Arquitetura de Testes

Testes de Navegador (Playwright)
      ↓
Testes de Integração (API + DB)
      ↓  
Testes Unitários (Jest)

📁 Estrutura do Projeto

src/
├── app/                    # Next.js App Router
│   ├── api/auth/          # Rotas de API de autenticação
│   ├── api/lgpd-requests/ # API de solicitações LGPD
│   ├── api/admin/         # API administrativa
│   ├── api/pix/           # API de pagamento PIX
│   ├── dashboard/         # Página do dashboard do usuário
│   ├── company-dashboard/ # Dashboard da empresa
│   ├── company-setup/     # Configuração de empresa
│   ├── admin/             # Painel administrativo
│   ├── login/             # Página de login
│   ├── register/          # Página de registro  
│   ├── create-request/    # Criação de solicitação LGPD
│   └── logout/            # Página de logout
├── lib/                   # Utilitários principais
│   ├── auth-middleware.ts # Autenticação JWT
│   ├── crypto.ts          # Criptografia ponta a ponta
│   ├── database-v2.ts     # Operações de banco de dados
│   ├── jwt.ts             # Gerenciamento de tokens
│   ├── message-constants.ts # Mensagens de erro/sucesso
│   ├── identity-verification.ts # Verificação de identidade
│   ├── auth-client.tsx    # Cliente de autenticação
│   ├── auth-fetch.ts      # Utilitários de fetch autenticado
│   └── user-storage.ts    # Armazenamento de usuário
├── scripts/               # Scripts utilitários
│   └── create-super-admin.ts # Criação de super admin
└── types/                 # Definições de tipos TypeScript

features/                  # Arquivos de especificação de funcionalidades

coverage/                 # Relatórios de cobertura de testes

Abordagem de Desenvolvimento

Este projeto segue práticas de Desenvolvimento Orientado por Testes (TDD):

  1. Teste Primeiro: Escrever testes que falham, fazer passar, então refatorar
  2. Código Limpo: Seguindo princípios SOLID e nomenclatura significativa
  3. Segurança Primeiro: Modelo de segurança zero-trust com configuração baseada em ambiente
  4. Especificação por Funcionalidades: Funcionalidades são definidas usando arquivos de especificação

Funcionalidades de Conformidade LGPD

  • Direitos do Artigo 18: Direito à informação, acesso, correção, anonimização, portabilidade, exclusão
  • Gestão de Consentimento: Rastreamento granular de consentimento e mecanismos de retirada
  • Registros de Processamento de Dados: Documentação de atividades de processamento do Artigo 37
  • Resposta a Incidentes: Fluxos de trabalho de notificação de violação de dados
  • Privacidade por Design: Controles de privacidade embutidos e minimização de dados

🔧 Solução de Problemas

Problemas Comuns

Porta 3000 Já em Uso

# Matar processo usando porta 3000
lsof -ti:3000 | xargs kill -9

# Ou usar porta diferente
npm run dev -- -p 3001

Testes E2E com Timeout

# Garantir que servidor dev está rodando primeiro
npm run dev

# Aguardar mensagem "Ready", então executar testes
npx playwright test

Problemas de Permissão do Banco de Dados

# Garantir que arquivo SQLite é gravável
chmod 644 lgpd_compliance.db

# Ou deletar e recriar
rm lgpd_compliance.db
# Banco de dados será recriado na primeira chamada da API

Problemas de Lançamento do Navegador (Playwright)

# Instalar navegadores Playwright
npx playwright install chromium

# Ou instalar dependências do sistema
npx playwright install-deps

Para solução de problemas mais detalhada, consulte a documentação inline neste README.

🤝 Contribuindo

  1. Especificação Primeiro: Funcionalidades devem começar com arquivos de especificação
  2. Cobertura de Testes: Todo código deve ter testes passando
  3. Padrões de Código: Seguir convenções estabelecidas e regras de linting
  4. Segurança Primeiro: Abordagem zero-trust para todas as implementações

Fluxo de Trabalho de Desenvolvimento

# 1. Criar branch de funcionalidade
git checkout -b feature/nome-da-sua-funcionalidade

# 2. Escrever especificações de funcionalidades
# Editar arquivos em features/

# 3. Implementar com TDD
npm run test:watch

# 4. Verificar testes E2E
npx playwright test

# 5. Executar suite completa de testes
npm test && npx playwright test

📚 Documentação

  • CLAUDE.md - Regras de desenvolvimento de IA específicas do projeto

🔗 Recursos

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •