RELATÓRIO COMPLETO — SERPRATI ASSOCIADO APP
Publicação na Google Play Store
Data: 21/05/2026 | Analista: Claude Sonnet 4.6

PARTE 1 — PREPARATIVOS TÉCNICOS PARA COMPILAÇÃO APK/AAB
Stack identificada
Framework: Quasar v2 (Vue 3) + Capacitor 8.3.4
App ID: br.com.serprati.associado
AGP (Android Gradle Plugin): 8.13.0
Gradle: 8.14.3 (wrapper configurado, baixou com sucesso)
Java target: 21 (JavaVersion.VERSION_21 no capacitor.build.gradle)
compileSdkVersion / targetSdkVersion: 36
✅ O que está OK
Item	Detalhe
Node.js v22.21.1	Dentro do range suportado (^22 || ^20 || ^18)
npm 10.9.4	Acima do mínimo (>= 6.13.4)
Java 21 (OpenJDK)	Versão exata exigida pelo capacitor.build.gradle
@quasar/cli v2.5.0	Instalado globalmente
Capacitor CLI 8.3.4	Disponível via npx cap
Android SDK	Presente em /usr/lib/android-sdk/
adb	Disponível em /usr/bin/adb
Gradle wrapper	Baixou 8.14.3 com sucesso
src-capacitor/android/	Estrutura completa gerada
vueRouterMode: "hash"	Correto para Capacitor (sem servidor HTTP)
AVDs disponíveis	Pixel 8 Pro API 34, Pixel Fold API 34
❌ Problemas Críticos — Bloqueiam a compilação
1. local.properties ausente no projeto
O arquivo src-capacitor/android/local.properties com sdk.dir=/usr/lib/android-sdk não existe neste projeto. Sem ele, o Gradle não encontra o SDK. Outros projetos no sistema têm esse arquivo, mas este não.

2. ANDROID_HOME / ANDROID_SDK_ROOT não configurados
As variáveis de ambiente estão vazias. Sem elas nem o local.properties, qualquer tentativa de build falhará com "SDK location not found".

3. android-36 platform não instalado
O variables.gradle define compileSdkVersion = 36 e targetSdkVersion = 36, mas apenas estas plataformas estão instaladas:


android-33, android-34, android-35   ← falta android-36
A compilação quebrará imediatamente.

4. google-services.json ausente
O app usa @capacitor/push-notifications (FCM). Sem o google-services.json do Firebase Console colocado em android/app/, as notificações push não funcionarão. O build.gradle tem um try/catch que ignora silenciosamente — o app compila, mas push será inoperante.

⚠️ Necessário para Play Store (não bloqueia build, bloqueia publicação)
5. Keystore de release ausente
Só existe ~/.android/debug.keystore. Para publicar na Play Store é necessário gerar um keystore de produção e configurar signingConfigs no app/build.gradle. O AAB/APK debug não é aceito pela Play Store.

6. Build sem minificação


release { minifyEnabled false }  // recomendado true para produção
PARTE 2 — ANÁLISE LGPD E CONFORMIDADE GOOGLE PLAY STORE
Data da Análise: 21/05/2026
Projetos analisados:

Backend API: /var/www/sfp_api_laravel_serprati
Frontend App: /home/softpar/projetos/spas/sfp_front_vue_serprati_associado_app
1. MAPEAMENTO DE DADOS PESSOAIS
Dado	Campo/Tabela	Finalidade	Obrigatório	Quem acessa
Nome completo	users.name	Identificação, exibição na carteirinha	Sim	Associado, Admin
E-mail	users.email	Autenticação, recuperação de senha	Sim	Associado, Admin
CPF	users.cpf	Identificação, QR Code da carteirinha	Sim	Associado, Admin
Telefone	users.phone	Contato, relatórios	Sim (landing)	Admin
Senha (hash bcrypt)	users.password	Autenticação	Sim	Backend apenas
Matrícula	users.registration	Identificação funcional, QR Code	Não	Associado, Admin
Data de admissão	users.admission_date	Controle de vigência	Não	Associado, Admin
Data de expiração	users.expiry_date	Controle de vigência, carteirinha	Não	Associado
Cargo (texto)	users.position_label	Identificação funcional	Sim (landing)	Admin
Setor (texto)	users.sector_label	Identificação funcional	Sim (landing)	Admin
Cargo FK	users.position_id	Vínculo com tabela positions	Não	Admin
Setor FK	users.sector_id	Vínculo com tabela sectors	Não	Admin
Status do associado	users.status	Controle ativo/inativo/pendente	N/A	Admin
Data de exclusão	users.excluded_at	Controle de desligamento	N/A	Admin
Token de acesso	personal_access_tokens.token (hash SHA-256)	Autenticação API	N/A	Backend
Último uso do token	personal_access_tokens.last_used_at	Controle de sessão	N/A	Backend
Nome do dependente	user_dependents.name	Identificação de dependente	Sim	Associado, Admin
Parentesco	user_dependents.kinship	Tipo de vínculo familiar	Sim	Associado, Admin
Observações de agendamento	appointments.observations	Contextualizar agendamento	Não	Associado, Parceiro, Admin
Data/hora do agendamento	appointments.date, .time	Agendamento de serviço	Sim	Associado, Parceiro, Admin
Leitura de notificação	notification_sends.read_at	Controle de leitura	N/A	Admin
Token FCM (device)	Gerado pelo FCM/Google	Notificações push	Não	Google (FCM)
Cookie "email"	Dispositivo local	Lembrar e-mail (opt-in)	Não	Local
Cookie "locale"	Dispositivo local	Idioma preferido	Não	Local
CNPJ do parceiro	partner_agreements.cnpj	Identificação da empresa parceira	Não	Admin
Contato do parceiro	.responsible, .email, .phone, .whatsapp	Dados de contato do parceiro	Não	Admin
Endereço do parceiro	.address, .neighborhood, .zip_code	Localização para o associado	Não	Associado (leitura)
Fontes: migrations 0001_01_01_000000_create_users_table.php, 2025_01_01_000003_alter_users_table_add_new_fields.php, 2026_04_23_090702_add_phone_and_labels_to_users_table.php, 2026_05_18_000001_add_excluded_at_to_users_table.php, 2025_01_01_000005_create_user_dependents_table.php

2. AUTENTICAÇÃO E SEGURANÇA
Mecanismo Usado
Laravel Sanctum com tokens Bearer + refresh token via cookie HttpOnly
Access token: expira em 15 minutos
Refresh token: expira em 90 dias (sanctum.rt_expiration = 129600 minutos), enviado como cookie httpOnly: true, sameSite: Lax, secure: [env]
No frontend, o accessToken é mantido exclusivamente em memória na store Pinia (src/stores/user.js) — sem persistência em localStorage ou sessionStorage
Pontos Adequados
Senhas com bcrypt via cast "password" => "hashed" no model
Tokens de reset armazenados como hash com TTL de 15 minutos
Cron job DeleteExpiredTokens exclui tokens expirados automaticamente (a cada minuto)
Logout invalida tokens do dispositivo específico
Renovação de refresh token em transaction atômica, invalidando o anterior
Autenticação exige campo tipo, impedindo cross-login entre tipos de usuário
password e remember_token estão no array $hidden do model User
Riscos Encontrados
CRÍTICO — CORS aberto (*):
config/cors.php define allowed_origins: ['*'] com supports_credentials: true. Deve ser restringido às origens do app e do backoffice.

Arquivo: /var/www/sfp_api_laravel_serprati/config/cors.php

ALTO — Push token FCM não enviado ao backend (TODO pendente):
usePushNotifications.js obtém o FCM token mas contém // TODO: enviar token para a API Laravel via POST /device/token. O token é console.logado e descartado. Push notifications está incompleto — permissão coletada sem uso real.

Arquivo: src/composables/usePushNotifications.js

ALTO — console.log com dados sensíveis em produção:
console.log("Push token:", token.value) expõe dados em logs do dispositivo (acessíveis via ADB).

ALTO — Cookie de e-mail sem flag secure:
LoginPage.vue salva cookie email sem secure: true. Em HTTP, o e-mail fica exposto.

Arquivo: src/pages/login/LoginPage.vue

MÉDIO — QR Code expõe CPF e matrícula em texto plano:
CarteirinhaPage.vue gera o QR Code com CPF:${user.cpf}|MAT:${user.registration}, sem criptografia ou assinatura digital.

MÉDIO — Refresh token com 90 dias:
Período longo para app corporativo. Considerar reduzir para 30 dias.

BAIXO — Sessão database sem criptografia:
config/session.php usa driver: database e encrypt: false.

BAIXO — PerformanceMonitor loga queries SQL com dados reais (apenas em ambiente local):

Arquivo: /var/www/sfp_api_laravel_serprati/app/Http/Middleware/PerformanceMonitor.php

3. PERMISSÕES ANDROID
Arquivo: src-capacitor/android/app/src/main/AndroidManifest.xml

Permissão	Onde usada	Finalidade	Necessária?	Risco Play Store
INTERNET	src/boot/axios.js, WebSocket	Comunicação com API REST	Sim	Nenhum
VIBRATE	Plugin PushNotifications	Vibração em notificação	Sim (se push ativo)	Nenhum
POST_NOTIFICATIONS	usePushNotifications.js	Exibir notificações (Android 13+)	Sim	Baixo
CAMERA	Declarada — sem uso identificado no código	Não encontrado uso ativo	Questionar	ALTO
android.hardware.camera (feature, required=false)	Vinculada à permissão de câmera	Hardware de câmera	Não obrigatório	Baixo
Observação crítica sobre CAMERA:
O pacote @capacitor/camera está nas dependências de src-capacitor/package.json e a permissão CAMERA está no manifest, porém nenhum arquivo em src/ importa ou usa a API Camera. O botão de editar avatar em ProfilePage.vue está com disable. Permissão sem uso é critério de rejeição na Play Store. Deve ser removida ou implementada.

4. LOGS E AUDITORIA
O que está sendo logado
Canal	Arquivo	Conteúdo	Retenção	Risco LGPD
expiredTokens	storage/logs/deleted/expired_tokens.log	"Deleted {N} expired tokens" (apenas contagem)	7 dias	Nenhum
single / stack	storage/logs/laravel.log	Exceções, stack traces, potencialmente payloads	Não definida	Alto (debug em prod)
PerformanceMonitor	php://stderr	URI, método, tempo, queries SQL com parâmetros	Apenas em local/development	Baixo
Ausências Críticas
Sem log de autenticação — tentativas de login, logins bem-sucedidos, falhas
Sem tabela de auditoria de alterações em dados pessoais
Sem log de acesso a dados sensíveis (quem consultou CPF de um associado)
Sem prazo de retenção definido para laravel.log em produção
Recomendações
Definir LOG_LEVEL=error em produção
Configurar canal daily com days: 30 para laravel.log
Implementar tabela audit_logs
5. DIREITOS DO USUÁRIO — GAPS
Direito LGPD (Art. 18)	Status	Mecanismo
Acesso aos próprios dados	Parcial	GET /user/current/auth retorna dados, sem exportação estruturada
Atualização/correção	Parcial	PUT /user/{id} existe, mas apenas para admin — associado não pode editar o próprio perfil
Exportação/portabilidade	Ausente (para o titular)	Existe exportação Excel para admins; o titular não tem acesso
Exclusão / direito ao esquecimento	Ausente (auto-solicitação)	Admin pode excluir via DELETE /user/{id}; o associado não possui endpoint nem interface
Revogação de consentimento	Ausente	Sem mecanismo formal
Oposição ao tratamento	Ausente	Sem mecanismo formal
Itens Críticos para a Play Store (bloqueantes)
A Google Play Store exige:

Fluxo de exclusão de conta acessível dentro do app ou URL pública de exclusão
Link para política de privacidade na ficha do app
O app atualmente não possui nenhum desses mecanismos.

6. COMPARTILHAMENTO DE DADOS
Destinatário	Dado transmitido	Motivo	Risco LGPD
Provedor SMTP	E-mail + código OTP 6 dígitos	Reset de senha	Baixo (dado mínimo, TTL 15 min)
Google FCM	Device token	Entrega de notificações push	Médio — deve ser declarado no Data Safety
Administradores da organização	Nome, CPF, e-mail, telefone, matrícula, cargo, setor, status	Gestão da associação	Baixo (relação contratual)
Parceiros cadastrados	Dados do agendamento (data, serviço, observações)	Prestação do serviço agendado	Baixo (relação contratual)
Sem rastreamento externo confirmado: nenhuma biblioteca de analytics, publicidade, Crashlytics, Sentry, Mixpanel ou Facebook SDK identificada nos package.json e boots.

7. ADEQUAÇÕES NECESSÁRIAS (PRIORIDADE)
CRÍTICO — Bloqueiam publicação na Play Store
Implementar fluxo de exclusão de conta pelo próprio associado — criar rota DELETE /associado/account e interface no app. O campo excluded_at já existe, falta expô-lo ao titular.
Publicar Política de Privacidade com URL pública e linká-la no app e na ficha da Play Store.
Preencher formulário Data Safety na Play Console.
Resolver permissão CAMERA — implementar a funcionalidade de câmera (upload de foto de perfil) ou remover a permissão e o pacote @capacitor/camera.
Resolver TODO de push notifications — implementar envio do FCM token ao backend ou remover a permissão POST_NOTIFICATIONS e o plugin.
ALTO
Remover console.log com dados sensíveis em produção — especialmente console.log("Push token:", token.value) em usePushNotifications.js.
Restringir CORS — config/cors.php de allowed_origins: ['*'] para origens específicas.
Implementar atualização de perfil pelo associado — botão de editar avatar está com disable em ProfilePage.vue.
Adicionar flag secure: true no cookie de e-mail — LoginPage.vue.
Implementar exportação de dados para o titular — endpoint GET /associado/my-data com JSON de todos os dados do titular (Art. 18, V da LGPD).
MÉDIO
Definir política de retenção de logs — canal daily com days: 30 e LOG_LEVEL=error em produção.
Adicionar aviso de consentimento para "lembrar e-mail" em LoginPage.vue.
Criptografar ou assinar QR Code da carteirinha — usar JWT de curta duração em vez de CPF+matrícula em texto plano.
Implementar tabela de auditoria de alterações em dados pessoais.
Reduzir refresh token de 90 para 30 dias.
Verificar secure: true para refresh token cookie via config('session.secure') em produção.
BAIXO
Confirmar comportamento de hard delete — DELETE /user/{id} realiza hard delete. Para auditoria LGPD considerar soft delete com marcação temporal.
Implementar log de autenticação — tentativas de login com IP, timestamp e resultado.
Implementar mecanismo de revogação de sessões ativas pelo usuário.
Habilitar criptografia de sessões no banco — config/session.php com encrypt: true.
8. CHECKLIST LGPD
Requisito	Status	Observação
Base legal definida para cada tratamento	⚠️ Parcial	Execução de contrato, mas não documentada formalmente
Coleta mínima (princípio da necessidade)	⚠️ Parcial	position_label e sector_label duplicam FKs — avaliar necessidade
Finalidade específica documentada	❌ Ausente	Sem registro formal de finalidade por campo
Transparência — política de privacidade acessível no app	❌ Ausente	Obrigatório
Direito de acesso	⚠️ Parcial	Endpoint existe, sem exportação estruturada para o titular
Direito de correção	❌ Ausente (para o associado)	Apenas admin pode editar
Direito de exclusão	❌ Ausente (para o associado)	Apenas admin pode excluir
Direito à portabilidade	❌ Ausente	Sem exportação pelo titular
Direito de oposição / revogação	❌ Ausente	Sem mecanismo formal
Segurança em trânsito (HTTPS)	⚠️ A confirmar	Depende do ambiente de produção
Senha com hash irreversível	✅ Conforme	bcrypt
Tokens com expiração	✅ Conforme	Access: 15 min, Refresh: 90 dias
Exclusão automática de tokens expirados	✅ Conforme	Cron job a cada minuto
Responsável pelo tratamento / DPO identificado	❌ Ausente	Sem contato no app
Registro de incidentes	❌ Ausente	Sem mecanismo
Logs de auditoria de acesso	❌ Ausente	Sem tabela de auditoria
Cookie de e-mail com consentimento	❌ Ausente	Sem aviso ao usuário
CORS restrito	❌ Não conforme	allowed_origins: ['*']
9. CHECKLIST GOOGLE PLAY DATA SAFETY
Categoria	Status	Observação
Política de privacidade com URL pública	❌ Ausente	Bloqueante
URL de exclusão de conta	❌ Ausente	Bloqueante (exigência 2024)
Dados coletados declarados no Data Safety	❌ Ausente	Bloqueante
Nome e contato (e-mail, telefone)	⚠️ Coletado, não declarado	Deve ser declarado
Identificadores pessoais (CPF)	⚠️ Coletado, não declarado	Deve ser declarado
Dados financeiros	✅ Não coletado	N/A
Fotos/vídeos	⚠️ Permissão declarada sem uso	Risco de rejeição
Localização	✅ Não coletado	N/A
Dados do app (agendamentos)	⚠️ Coletado, não declarado	Deve ser declarado
Device ID (FCM token)	⚠️ Coletado pelo Google, não declarado	Deve ser declarado
Publicidade / analytics externos	✅ Não coletado	Confirmado
Criptografia em trânsito declarada	⚠️ A confirmar	HTTPS depende do ambiente de prod
Permissão CAMERA sem uso identificado	❌ Risco	Pode causar rejeição
10. POLÍTICA DE PRIVACIDADE COMPLETA
AVISO: Texto elaborado com base exclusiva no código-fonte auditado. Deve ser revisado por advogado especializado em LGPD antes da publicação.

POLÍTICA DE PRIVACIDADE — APLICATIVO SERPRATI ASSOCIADO
Versão 1.0 — Maio de 2026

1. INTRODUÇÃO
O aplicativo SerPrati Associado ("Aplicativo") é operado por [RAZÃO SOCIAL DA EMPRESA], inscrita no CNPJ nº [CNPJ], com sede em [ENDEREÇO] ("SerPrati" ou "nós"). Esta Política de Privacidade descreve como coletamos, utilizamos, armazenamos, compartilhamos e protegemos os seus dados pessoais quando você utiliza o Aplicativo, em conformidade com a Lei Geral de Proteção de Dados Pessoais (Lei nº 13.709/2018 — LGPD) e com as políticas da Google Play Store.

Ao utilizar o Aplicativo, você concorda com as práticas descritas nesta Política. Caso não concorde, entre em contato conosco para exercer seus direitos.

2. DADOS PESSOAIS COLETADOS
2.1. Dados de identificação e cadastro (fornecidos no cadastro ou atualizados pelo gestor):

Nome completo
Endereço de e-mail
CPF (Cadastro de Pessoa Física)
Número de matrícula funcional
Número de telefone
Cargo e setor na organização
2.2. Dados de acesso e autenticação:

Senha (armazenada exclusivamente em formato de hash — não é possível recuperar a senha original)
Tokens de acesso à API (identificadores técnicos de sessão, armazenados em formato hash)
Data e hora do último uso da sessão
2.3. Dados funcionais:

Data de admissão e data de validade da associação
Status da associação (ativo, inativo, pendente)
Informações de dependentes cadastrados: nome e grau de parentesco
2.4. Dados de uso do Aplicativo:

Agendamentos realizados: convênio escolhido, serviço, data, hora e observações
Histórico de notificações recebidas e data de leitura
Itens de interesse marcados na loja de benefícios
2.5. Dados de preferências locais (armazenados no seu dispositivo):

Endereço de e-mail, caso você marque "Lembrar e-mail" na tela de login (cookie local)
Preferência de idioma do Aplicativo
2.6. Dados gerados automaticamente:

Identificador técnico de dispositivo para gerenciamento de sessões (não é IMEI nem identificador de hardware)
Caso você autorize notificações push, um token de identificação junto ao serviço FCM do Google pode ser gerado
3. FINALIDADE DO TRATAMENTO E BASE LEGAL
Dado	Finalidade	Base Legal (LGPD)
Nome, e-mail, CPF, matrícula, telefone	Identificação do associado, acesso ao app, carteirinha digital	Execução de contrato — Art. 7º, V
Senha (hash)	Autenticação segura	Execução de contrato — Art. 7º, V
Tokens de sessão	Controle de acesso e segurança	Legítimo interesse — Art. 7º, IX
E-mail (reset de senha)	Envio de código OTP temporário	Execução de contrato — Art. 7º, V
Dados de dependentes	Cadastro de beneficiários	Execução de contrato — Art. 7º, V
Agendamentos	Registro e acompanhamento de serviços	Execução de contrato — Art. 7º, V
Histórico de notificações	Comunicação institucional	Legítimo interesse — Art. 7º, IX
Cookie "lembrar e-mail"	Conveniência no login (opt-in)	Consentimento — Art. 7º, I
4. COMO COLETAMOS OS DADOS
Cadastro pela organização: dados básicos são cadastrados pelo gestor via portal SerPrati ou página de pré-cadastro.
Uso do Aplicativo: ao realizar agendamentos, marcar interesses e interagir com notificações.
Opção "lembrar e-mail": somente se você marcar a caixa correspondente na tela de login.
5. ARMAZENAMENTO E SEGURANÇA
5.1. Onde os dados são armazenados:
Banco de dados PostgreSQL em servidor sob controle da SerPrati. Arquivos de mídia armazenados em sistema de arquivos do servidor.

5.2. Medidas de segurança:

Comunicação exclusivamente via HTTPS (TLS)
Senhas com hash bcrypt (irreversível)
Tokens de acesso com validade de 15 minutos; tokens de renovação com validade de 90 dias
Tokens de redefinição de senha com validade de 15 minutos, armazenados como hash
Exclusão automática de tokens expirados
Access token mantido exclusivamente em memória do app (não gravado em disco)
Invalidação de todas as sessões do dispositivo no logout
5.3. Dados armazenados no dispositivo:

Cookie de e-mail (opcional, ativado pelo usuário)
Cookie de idioma preferido
Esses cookies são técnicos, não rastreiam comportamento e não são compartilhados com terceiros
6. COMPARTILHAMENTO DE DADOS
Não vendemos, alugamos ou comercializamos seus dados. Os dados podem ser compartilhados em:

6.1. Provedor de e-mail (SMTP):
Ao solicitar redefinição de senha, seu e-mail e um código numérico temporário de 6 dígitos são enviados ao servidor de e-mail. O código expira em 15 minutos.

6.2. Google Firebase Cloud Messaging (FCM):
Caso você autorize notificações push, um token de identificação do dispositivo é gerado pelo FCM da Google. Consulte a Política de Privacidade da Google.

6.3. Gestores da organização:
Administradores têm acesso a dados cadastrais (nome, CPF, e-mail, telefone, matrícula, cargo, setor, status) para fins de gestão da associação.

6.4. Parceiros cadastrados:
Dados do agendamento (convênio, serviço, data, hora) são acessíveis ao parceiro para prestação do serviço solicitado.

7. RETENÇÃO E EXCLUSÃO DE DADOS
Tokens de acesso: excluídos automaticamente após expiração ou logout
Tokens de reset de senha: excluídos imediatamente após uso ou após 15 minutos
Dados cadastrais: mantidos enquanto a associação estiver vigente ou conforme exigência legal
Logs operacionais: mantidos por até 30 dias
Exclusão de conta: ao solicitar a exclusão, os dados são removidos dos sistemas ativos. Dados necessários por obrigação legal (tributária, trabalhista) poderão ser mantidos pelo prazo legalmente exigido
8. SEUS DIREITOS COMO TITULAR
Nos termos do Art. 18 da LGPD, você tem direito a:

Confirmação e acesso: verificar se tratamos seus dados e obter cópia
Correção: solicitar atualização de dados incompletos ou incorretos
Eliminação: solicitar exclusão de dados desnecessários ou excessivos
Portabilidade: receber seus dados em formato estruturado
Revogação do cookie "lembrar e-mail": desativando a opção na tela de login
Revogação de notificações push: em Configurações do dispositivo > Notificações > SerPrati Associado
Informação sobre compartilhamento: descrito na Seção 6
Para exercer seus direitos: [e-mail de contato LGPD]

9. EXCLUSÃO DA CONTA
Para solicitar a exclusão permanente da sua conta e de todos os seus dados, entre em contato através de [e-mail de contato] ou acesse [URL do formulário de exclusão]. O prazo de processamento é de até 15 dias úteis.

10. TECNOLOGIAS LOCAIS (COOKIES E ARMAZENAMENTO)
Cookie	Dado armazenado	Finalidade	Duração
email	E-mail do usuário	Facilitar login (opt-in)	Sessão
locale	Código de idioma (pt/en)	Preferência de idioma	Sessão
refresh_token (HttpOnly)	Token de renovação de sessão	Manutenção da sessão autenticada	90 dias
miniState	Preferência de menu	Interface do usuário	Sessão
O cookie email é opcional e controlado pelo usuário. Os demais são estritamente necessários para o funcionamento do app.

11. ALTERAÇÕES NESTA POLÍTICA
Esta Política pode ser atualizada periodicamente. Notificaremos alterações significativas por notificação no app. A versão mais recente sempre estará disponível em [URL pública da política].

12. CONTATO E ENCARREGADO DE DADOS (DPO)
[Nome/Departamento responsável]
E-mail: [dpo@serprati.com.br]
[RAZÃO SOCIAL DA EMPRESA]
[ENDEREÇO COMPLETO]
CNPJ: [CNPJ]

11. JSON DATA SAFETY — GOOGLE PLAY

{
  "data_safety": {
    "privacy_policy_url": "https://[URL_PUBLICA]/politica-de-privacidade",
    "account_deletion_url": "https://[URL_PUBLICA]/excluir-conta",
    "data_collection": {
      "collects_data": true,
      "data_types_collected": [
        {
          "category": "Personal info",
          "type": "Name",
          "is_required": true,
          "purpose": ["App functionality"],
          "shared_with_third_parties": false,
          "ephemeral": false,
          "user_can_delete": true
        },
        {
          "category": "Personal info",
          "type": "Email address",
          "is_required": true,
          "purpose": ["App functionality", "Account management"],
          "shared_with_third_parties": true,
          "third_party_note": "Enviado ao provedor SMTP para recuperação de senha",
          "ephemeral": false,
          "user_can_delete": true
        },
        {
          "category": "Personal info",
          "type": "Phone number",
          "is_required": false,
          "purpose": ["App functionality"],
          "shared_with_third_parties": false,
          "ephemeral": false,
          "user_can_delete": true
        },
        {
          "category": "Personal info",
          "type": "Other personal info",
          "description": "CPF, matrícula funcional, cargo, setor, datas de admissão e validade",
          "is_required": true,
          "purpose": ["App functionality"],
          "shared_with_third_parties": false,
          "ephemeral": false,
          "user_can_delete": true
        },
        {
          "category": "Personal info",
          "type": "Other personal info",
          "description": "Dados de dependentes: nome e grau de parentesco",
          "is_required": false,
          "purpose": ["App functionality"],
          "shared_with_third_parties": false,
          "ephemeral": false,
          "user_can_delete": true
        },
        {
          "category": "Device or other IDs",
          "type": "Device or other IDs",
          "description": "Token FCM para notificações push",
          "is_required": false,
          "purpose": ["App functionality"],
          "shared_with_third_parties": true,
          "third_party_note": "Firebase Cloud Messaging (Google) para entrega de notificações",
          "ephemeral": false,
          "user_can_delete": true,
          "user_can_opt_out": true,
          "opt_out_note": "Usuário pode revogar POST_NOTIFICATIONS nas configurações do dispositivo"
        },
        {
          "category": "App activity",
          "type": "App interactions",
          "description": "Agendamentos realizados (convênio, serviço, data/hora, observações), itens de interesse, notificações lidas",
          "is_required": false,
          "purpose": ["App functionality"],
          "shared_with_third_parties": false,
          "ephemeral": false,
          "user_can_delete": true
        }
      ],
      "security_practices": {
        "data_encrypted_in_transit": true,
        "encryption_in_transit_note": "HTTPS/TLS para todas as comunicações com a API",
        "data_encrypted_at_rest": false,
        "encrypted_at_rest_note": "Senhas e tokens armazenados como hash irreversível; dados pessoais não criptografados em repouso no banco",
        "follows_families_policy": false,
        "provides_way_to_delete_data": true,
        "deletion_note": "Via contato com suporte ou formulário em [URL_PUBLICA]/excluir-conta"
      }
    }
  }
}
RESUMO EXECUTIVO
Bloqueantes para publicação na Play Store (resolver antes de submeter)
Implementar fluxo de exclusão de conta no app + URL pública
Publicar Política de Privacidade com URL acessível
Preencher o formulário Data Safety na Play Console
Resolver permissão CAMERA sem uso identificado
Resolver local.properties ausente e instalar android-36 (para compilar)
Conformidade LGPD — Status Geral
Segurança técnica: ✅ Boa base (bcrypt, tokens com expiração, Sanctum)
Direitos do titular: ❌ Deficiente (sem auto-atendimento para exclusão, correção ou exportação)
Transparência: ❌ Ausente (sem política de privacidade no app)
Logs e auditoria: ❌ Ausente (sem auditoria de alterações em dados pessoais)
CORS: ❌ Aberto (*) — corrigir imediatamente