refactor: remove ActionGuard and MenuProtection components, simplifying permission checks in various dashboard routes and enhancing footer with privacy policy link
This commit is contained in:
368
apps/web/src/routes/(public)/esqueci-senha/+page.svelte
Normal file
368
apps/web/src/routes/(public)/esqueci-senha/+page.svelte
Normal file
@@ -0,0 +1,368 @@
|
||||
<script lang="ts">
|
||||
import { api } from '@sgse-app/backend/convex/_generated/api';
|
||||
import { useConvexClient } from 'convex-svelte';
|
||||
|
||||
import { resolve } from '$app/paths';
|
||||
|
||||
const convex = useConvexClient();
|
||||
|
||||
let matricula = $state('');
|
||||
let email = $state('');
|
||||
let carregando = $state(false);
|
||||
let notice = $state<{
|
||||
type: 'success' | 'error' | 'info';
|
||||
message: string;
|
||||
} | null>(null);
|
||||
let solicitacaoEnviada = $state(false);
|
||||
|
||||
async function handleSubmit(e: Event) {
|
||||
e.preventDefault();
|
||||
notice = null;
|
||||
|
||||
if (!matricula || !email) {
|
||||
notice = {
|
||||
type: 'error',
|
||||
message: 'Por favor, preencha todos os campos'
|
||||
};
|
||||
return;
|
||||
}
|
||||
|
||||
carregando = true;
|
||||
|
||||
try {
|
||||
// Verificar se o usuário existe
|
||||
const usuarios = await convex.query(api.usuarios.listar, {
|
||||
matricula: matricula
|
||||
});
|
||||
|
||||
const usuario = usuarios.find((u) => u.matricula === matricula && u.email === email);
|
||||
|
||||
if (!usuario) {
|
||||
notice = {
|
||||
type: 'error',
|
||||
message: 'Matrícula ou e-mail não encontrados. Verifique os dados e tente novamente.'
|
||||
};
|
||||
carregando = false;
|
||||
return;
|
||||
}
|
||||
|
||||
// Simular envio de solicitação
|
||||
solicitacaoEnviada = true;
|
||||
notice = {
|
||||
type: 'success',
|
||||
message: 'Solicitação enviada com sucesso! A equipe de TI entrará em contato em breve.'
|
||||
};
|
||||
|
||||
// Limpar campos
|
||||
matricula = '';
|
||||
email = '';
|
||||
} catch (error: any) {
|
||||
notice = {
|
||||
type: 'error',
|
||||
message: error.message || 'Erro ao processar solicitação'
|
||||
};
|
||||
} finally {
|
||||
carregando = false;
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<main class="container mx-auto max-w-2xl px-4 py-8">
|
||||
<!-- Header -->
|
||||
<div class="mb-8">
|
||||
<div class="mb-2 flex items-center gap-3">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="text-primary h-10 w-10"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M8.228 9c.549-1.165 2.03-2 3.772-2 2.21 0 4 1.343 4 3 0 1.4-1.278 2.575-3.006 2.907-.542.104-.994.54-.994 1.093m0 3h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
|
||||
/>
|
||||
</svg>
|
||||
<h1 class="text-primary text-4xl font-bold">Esqueci Minha Senha</h1>
|
||||
</div>
|
||||
<p class="text-base-content/70 text-lg">Solicite a recuperação da sua senha de acesso</p>
|
||||
</div>
|
||||
|
||||
<!-- Breadcrumbs -->
|
||||
<div class="breadcrumbs mb-6 text-sm">
|
||||
<ul>
|
||||
<li><a href={resolve('/')}>Dashboard</a></li>
|
||||
<li>Esqueci Minha Senha</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- Alertas -->
|
||||
{#if notice}
|
||||
<div
|
||||
class="alert {notice.type === 'success'
|
||||
? 'alert-success'
|
||||
: notice.type === 'error'
|
||||
? 'alert-error'
|
||||
: 'alert-info'} mb-6 shadow-lg"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="h-6 w-6 shrink-0 stroke-current"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
{#if notice.type === 'success'}
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"
|
||||
/>
|
||||
{:else if notice.type === 'error'}
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z"
|
||||
/>
|
||||
{:else}
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
|
||||
/>
|
||||
{/if}
|
||||
</svg>
|
||||
<span>{notice.message}</span>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{#if !solicitacaoEnviada}
|
||||
<!-- Formulário -->
|
||||
<div class="card bg-base-100 border-base-300 border shadow-xl">
|
||||
<div class="card-body">
|
||||
<div class="alert alert-info mb-6">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="h-6 w-6 shrink-0 stroke-current"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
|
||||
/>
|
||||
</svg>
|
||||
<div>
|
||||
<h3 class="font-bold">Como funciona?</h3>
|
||||
<p class="text-sm">
|
||||
Informe sua matrícula e e-mail cadastrados. A equipe de TI receberá sua solicitação e
|
||||
entrará em contato para resetar sua senha.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form onsubmit={handleSubmit} class="space-y-6">
|
||||
<!-- Matrícula -->
|
||||
<div class="form-control">
|
||||
<label class="label" for="matricula">
|
||||
<span class="label-text font-semibold">Matrícula</span>
|
||||
<span class="label-text-alt text-error">*</span>
|
||||
</label>
|
||||
<input
|
||||
id="matricula"
|
||||
type="text"
|
||||
placeholder="Digite sua matrícula"
|
||||
class="input input-bordered input-primary w-full"
|
||||
bind:value={matricula}
|
||||
required
|
||||
disabled={carregando}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- E-mail -->
|
||||
<div class="form-control">
|
||||
<label class="label" for="email">
|
||||
<span class="label-text font-semibold">E-mail</span>
|
||||
<span class="label-text-alt text-error">*</span>
|
||||
</label>
|
||||
<input
|
||||
id="email"
|
||||
type="email"
|
||||
placeholder="Digite seu e-mail cadastrado"
|
||||
class="input input-bordered input-primary w-full"
|
||||
bind:value={email}
|
||||
required
|
||||
disabled={carregando}
|
||||
/>
|
||||
<label class="label">
|
||||
<span class="label-text-alt text-base-content/60">
|
||||
Use o e-mail cadastrado no sistema
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<!-- Botões -->
|
||||
<div class="mt-8 flex justify-end gap-4">
|
||||
<a href={resolve('/')} class="btn" class:btn-disabled={carregando}>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="h-5 w-5"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M10 19l-7-7m0 0l7-7m-7 7h18"
|
||||
/>
|
||||
</svg>
|
||||
Voltar
|
||||
</a>
|
||||
<button type="submit" class="btn btn-primary" disabled={carregando}>
|
||||
{#if carregando}
|
||||
<span class="loading loading-spinner loading-sm"></span>
|
||||
Enviando...
|
||||
{:else}
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="h-5 w-5"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"
|
||||
/>
|
||||
</svg>
|
||||
Enviar Solicitação
|
||||
{/if}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{:else}
|
||||
<!-- Mensagem de Sucesso -->
|
||||
<div class="card bg-success/10 border-success/30 border shadow-xl">
|
||||
<div class="card-body text-center">
|
||||
<div class="mb-4 flex justify-center">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="text-success h-24 w-24"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"
|
||||
/>
|
||||
</svg>
|
||||
</div>
|
||||
<h2 class="text-success mb-4 text-2xl font-bold">Solicitação Enviada!</h2>
|
||||
<p class="text-base-content/70 mb-6">
|
||||
Sua solicitação de recuperação de senha foi enviada para a equipe de TI. Você receberá um
|
||||
contato em breve com as instruções para resetar sua senha.
|
||||
</p>
|
||||
<div class="flex justify-center gap-4">
|
||||
<a href={resolve('/')} class="btn btn-primary">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="h-5 w-5"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"
|
||||
/>
|
||||
</svg>
|
||||
Voltar ao Dashboard
|
||||
</a>
|
||||
<button type="button" class="btn" onclick={() => (solicitacaoEnviada = false)}>
|
||||
Enviar Nova Solicitação
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<!-- Card de Contato -->
|
||||
<div class="card bg-base-200 mt-6 shadow-lg">
|
||||
<div class="card-body">
|
||||
<h3 class="card-title text-lg">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="text-info h-6 w-6"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
|
||||
/>
|
||||
</svg>
|
||||
Precisa de Ajuda?
|
||||
</h3>
|
||||
<p class="text-base-content/70 text-sm">
|
||||
Se você não conseguir recuperar sua senha ou tiver problemas com o sistema, entre em contato
|
||||
diretamente com a equipe de TI:
|
||||
</p>
|
||||
<div class="mt-4 space-y-2">
|
||||
<div class="flex items-center gap-2">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="text-primary h-5 w-5"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"
|
||||
/>
|
||||
</svg>
|
||||
<span class="text-sm">ti@sgse.pe.gov.br</span>
|
||||
</div>
|
||||
<div class="flex items-center gap-2">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="text-primary h-5 w-5"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke="currentColor"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z"
|
||||
/>
|
||||
</svg>
|
||||
<span class="text-sm">(81) 3183-8000</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
@@ -63,7 +63,6 @@
|
||||
}
|
||||
|
||||
const gpsPromise = coletarGPS();
|
||||
|
||||
const result = await authClient.signIn.email(
|
||||
{ email: matricula.trim(), password: senha },
|
||||
{
|
||||
@@ -158,7 +157,7 @@
|
||||
}
|
||||
})();
|
||||
|
||||
await goto(resolve(redirectAfterLogin as any), { replaceState: true });
|
||||
await goto(resolve(redirectAfterLogin as string), { replaceState: true });
|
||||
} else {
|
||||
erroLogin = result.error?.message || 'Erro ao fazer login';
|
||||
}
|
||||
|
||||
442
apps/web/src/routes/(public)/privacidade/+page.svelte
Normal file
442
apps/web/src/routes/(public)/privacidade/+page.svelte
Normal file
@@ -0,0 +1,442 @@
|
||||
<script lang="ts">
|
||||
import { resolve } from '$app/paths';
|
||||
import { Shield, FileText, Mail, Phone, Calendar } from 'lucide-svelte';
|
||||
import { useQuery } from 'convex-svelte';
|
||||
import { api } from '@sgse-app/backend/convex/_generated/api';
|
||||
import { useAuth } from '@mmailaender/convex-better-auth-svelte/svelte';
|
||||
|
||||
const auth = useAuth();
|
||||
const isAuthenticated = $derived(auth.isAuthenticated);
|
||||
|
||||
const configLGPD = useQuery(api.lgpd.obterConfiguracaoLGPD, {});
|
||||
|
||||
const encarregadoNome = $derived(
|
||||
configLGPD?.data?.encarregadoNome || 'Encarregado de Proteção de Dados'
|
||||
);
|
||||
const encarregadoEmail = $derived(
|
||||
configLGPD?.data?.encarregadoEmail || 'lgpd@esportes.pe.gov.br'
|
||||
);
|
||||
const encarregadoTelefone = $derived(configLGPD?.data?.encarregadoTelefone || '(81) 3184-XXXX');
|
||||
const encarregadoHorario = $derived(
|
||||
configLGPD?.data?.encarregadoHorarioAtendimento || 'Segunda a Sexta, das 8h às 17h'
|
||||
);
|
||||
</script>
|
||||
|
||||
<div class="container mx-auto max-w-4xl px-4 py-8">
|
||||
<!-- Header -->
|
||||
<div class="mb-8">
|
||||
<div class="mb-4 flex items-center gap-4">
|
||||
<div class="bg-primary/10 rounded-xl p-3">
|
||||
<Shield class="text-primary h-8 w-8" strokeWidth={2} />
|
||||
</div>
|
||||
<div>
|
||||
<h1 class="text-base-content text-3xl font-bold">Política de Privacidade</h1>
|
||||
<p class="text-base-content/60 mt-1">
|
||||
Lei Geral de Proteção de Dados Pessoais (LGPD) - Lei nº 13.709/2018
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-base-content/60 flex items-center gap-2 text-sm">
|
||||
<Calendar class="h-4 w-4" />
|
||||
<span>Última atualização: {new Date().toLocaleDateString('pt-BR')}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Conteúdo -->
|
||||
<div class="prose prose-lg max-w-none">
|
||||
<!-- Introdução -->
|
||||
<section class="card bg-base-100 mb-6 shadow-xl">
|
||||
<div class="card-body">
|
||||
<h2 class="card-title mb-4 text-2xl">1. Introdução</h2>
|
||||
<p class="text-base-content/80">
|
||||
A Secretaria de Esportes do Estado de Pernambuco, no exercício de suas atribuições
|
||||
constitucionais e legais, está comprometida com a proteção dos dados pessoais de seus
|
||||
servidores, colaboradores e cidadãos, em conformidade com a Lei Geral de Proteção de Dados
|
||||
Pessoais (LGPD) - Lei nº 13.709/2018.
|
||||
</p>
|
||||
<p class="text-base-content/80 mt-4">
|
||||
Esta Política de Privacidade descreve como coletamos, utilizamos, armazenamos e protegemos
|
||||
seus dados pessoais no Sistema de Gestão da Secretaria de Esportes (SGSE).
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Dados Coletados -->
|
||||
<section class="card bg-base-100 mb-6 shadow-xl">
|
||||
<div class="card-body">
|
||||
<h2 class="card-title mb-4 text-2xl">2. Dados Pessoais Coletados</h2>
|
||||
<p class="text-base-content/80 mb-4">
|
||||
O SGSE coleta e processa os seguintes tipos de dados pessoais:
|
||||
</p>
|
||||
<div class="space-y-3">
|
||||
<div class="flex items-start gap-3">
|
||||
<FileText class="text-primary mt-1 h-5 w-5 shrink-0" />
|
||||
<div>
|
||||
<h3 class="font-semibold">Dados de Identificação</h3>
|
||||
<p class="text-base-content/70 text-sm">
|
||||
Nome completo, CPF, RG, data de nascimento, naturalidade, nacionalidade, estado
|
||||
civil, filiação (nome do pai e mãe)
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-start gap-3">
|
||||
<FileText class="text-primary mt-1 h-5 w-5 shrink-0" />
|
||||
<div>
|
||||
<h3 class="font-semibold">Dados de Contato</h3>
|
||||
<p class="text-base-content/70 text-sm">
|
||||
E-mail, telefone, endereço residencial e endereços de marcação de ponto
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-start gap-3">
|
||||
<FileText class="text-primary mt-1 h-5 w-5 shrink-0" />
|
||||
<div>
|
||||
<h3 class="font-semibold">Dados Profissionais</h3>
|
||||
<p class="text-base-content/70 text-sm">
|
||||
Matrícula, cargo, função, setor, data de admissão, regime de trabalho, documentos
|
||||
profissionais (CTPS, título eleitor, reservista, PIS)
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-start gap-3">
|
||||
<FileText class="text-primary mt-1 h-5 w-5 shrink-0" />
|
||||
<div>
|
||||
<h3 class="font-semibold">Dados de Saúde</h3>
|
||||
<p class="text-base-content/70 text-sm">
|
||||
Atestados médicos, licenças de saúde, grupo sanguíneo, fator RH (quando necessário
|
||||
para atividades específicas)
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-start gap-3">
|
||||
<FileText class="text-primary mt-1 h-5 w-5 shrink-0" />
|
||||
<div>
|
||||
<h3 class="font-semibold">Dados de Acesso</h3>
|
||||
<p class="text-base-content/70 text-sm">
|
||||
Credenciais de acesso, logs de acesso, endereço IP, histórico de atividades no
|
||||
sistema
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Finalidade -->
|
||||
<section class="card bg-base-100 mb-6 shadow-xl">
|
||||
<div class="card-body">
|
||||
<h2 class="card-title mb-4 text-2xl">3. Finalidade do Tratamento</h2>
|
||||
<p class="text-base-content/80 mb-4">
|
||||
Os dados pessoais são tratados para as seguintes finalidades:
|
||||
</p>
|
||||
<ul class="text-base-content/80 list-inside list-disc space-y-2">
|
||||
<li>Gestão de recursos humanos e folha de pagamento</li>
|
||||
<li>Controle de ponto e registro de jornada de trabalho</li>
|
||||
<li>Gestão de férias, ausências e licenças</li>
|
||||
<li>Processamento de atestados médicos e licenças de saúde</li>
|
||||
<li>Gestão de chamados e suporte técnico</li>
|
||||
<li>Comunicação interna e notificações</li>
|
||||
<li>Cumprimento de obrigações legais e regulatórias</li>
|
||||
<li>Execução de políticas públicas</li>
|
||||
<li>Segurança e prevenção de fraudes</li>
|
||||
<li>Auditoria e controle interno</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Base Legal -->
|
||||
<section class="card bg-base-100 mb-6 shadow-xl">
|
||||
<div class="card-body">
|
||||
<h2 class="card-title mb-4 text-2xl">4. Base Legal do Tratamento</h2>
|
||||
<p class="text-base-content/80 mb-4">
|
||||
O tratamento de dados pessoais no SGSE fundamenta-se nas seguintes bases legais, conforme
|
||||
previsto no Art. 7º da LGPD:
|
||||
</p>
|
||||
<div class="space-y-3">
|
||||
<div class="bg-primary/5 rounded-lg p-4">
|
||||
<h3 class="text-primary mb-2 font-semibold">I. Execução de Políticas Públicas</h3>
|
||||
<p class="text-base-content/70 text-sm">
|
||||
Art. 7º, II - Para a execução de políticas públicas previstas em leis ou regulamentos
|
||||
</p>
|
||||
</div>
|
||||
<div class="bg-primary/5 rounded-lg p-4">
|
||||
<h3 class="text-primary mb-2 font-semibold">II. Cumprimento de Obrigação Legal</h3>
|
||||
<p class="text-base-content/70 text-sm">
|
||||
Art. 7º, I - Para cumprimento de obrigação legal ou regulatória pelo controlador
|
||||
</p>
|
||||
</div>
|
||||
<div class="bg-primary/5 rounded-lg p-4">
|
||||
<h3 class="text-primary mb-2 font-semibold">III. Execução de Contrato</h3>
|
||||
<p class="text-base-content/70 text-sm">
|
||||
Art. 7º, V - Para a execução de contrato ou de procedimentos preliminares relacionados
|
||||
a contrato do qual seja parte o titular
|
||||
</p>
|
||||
</div>
|
||||
<div class="bg-primary/5 rounded-lg p-4">
|
||||
<h3 class="text-primary mb-2 font-semibold">IV. Proteção da Vida e Saúde</h3>
|
||||
<p class="text-base-content/70 text-sm">
|
||||
Art. 7º, VI e VII - Para a proteção da vida ou da incolumidade física do titular ou de
|
||||
terceiro, e para a tutela da saúde
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Compartilhamento -->
|
||||
<section class="card bg-base-100 mb-6 shadow-xl">
|
||||
<div class="card-body">
|
||||
<h2 class="card-title mb-4 text-2xl">5. Compartilhamento de Dados</h2>
|
||||
<p class="text-base-content/80 mb-4">Os dados pessoais podem ser compartilhados com:</p>
|
||||
<ul class="text-base-content/80 list-inside list-disc space-y-2">
|
||||
<li>
|
||||
<strong>Órgãos Públicos:</strong> Quando necessário para cumprimento de obrigações legais
|
||||
ou execução de políticas públicas
|
||||
</li>
|
||||
<li>
|
||||
<strong>Fornecedores de Serviços:</strong> Empresas contratadas para prestação de serviços
|
||||
técnicos, sempre com garantias de proteção de dados
|
||||
</li>
|
||||
<li>
|
||||
<strong>Autoridades Competentes:</strong> Quando exigido por determinação judicial ou legal
|
||||
</li>
|
||||
</ul>
|
||||
<div class="alert alert-info mt-4">
|
||||
<p class="text-sm">
|
||||
Todos os compartilhamentos são realizados com base legal e com garantias de proteção dos
|
||||
dados pessoais.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Segurança -->
|
||||
<section class="card bg-base-100 mb-6 shadow-xl">
|
||||
<div class="card-body">
|
||||
<h2 class="card-title mb-4 text-2xl">6. Medidas de Segurança</h2>
|
||||
<p class="text-base-content/80 mb-4">
|
||||
Adotamos medidas técnicas e administrativas para proteger seus dados pessoais:
|
||||
</p>
|
||||
<div class="grid grid-cols-1 gap-4 md:grid-cols-2">
|
||||
<div class="bg-base-200 rounded-lg p-4">
|
||||
<h3 class="mb-2 font-semibold">Medidas Técnicas</h3>
|
||||
<ul class="text-base-content/70 space-y-1 text-sm">
|
||||
<li>• Criptografia de dados sensíveis</li>
|
||||
<li>• Controle de acesso por permissões</li>
|
||||
<li>• Logs de auditoria</li>
|
||||
<li>• Backup regular</li>
|
||||
<li>• Monitoramento de segurança</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="bg-base-200 rounded-lg p-4">
|
||||
<h3 class="mb-2 font-semibold">Medidas Administrativas</h3>
|
||||
<ul class="text-base-content/70 space-y-1 text-sm">
|
||||
<li>• Treinamento de equipe</li>
|
||||
<li>• Políticas de acesso</li>
|
||||
<li>• Procedimentos de segurança</li>
|
||||
<li>• Gestão de incidentes</li>
|
||||
<li>• Revisão periódica</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Retenção -->
|
||||
<section class="card bg-base-100 mb-6 shadow-xl">
|
||||
<div class="card-body">
|
||||
<h2 class="card-title mb-4 text-2xl">7. Prazo de Retenção</h2>
|
||||
<p class="text-base-content/80 mb-4">
|
||||
Os dados pessoais são mantidos pelo prazo necessário para:
|
||||
</p>
|
||||
<ul class="text-base-content/80 list-inside list-disc space-y-2">
|
||||
<li>
|
||||
<strong>Dados de Funcionários Ativos:</strong> Durante todo o período de vínculo empregatício/estatutário
|
||||
</li>
|
||||
<li>
|
||||
<strong>Dados de Funcionários Inativos:</strong> Conforme prazo legal aplicável (em geral,
|
||||
5 anos após desligamento)
|
||||
</li>
|
||||
<li>
|
||||
<strong>Logs de Acesso:</strong> 2 anos, conforme recomendação da ANPD
|
||||
</li>
|
||||
<li>
|
||||
<strong>Documentos Trabalhistas:</strong> Conforme legislação trabalhista aplicável
|
||||
</li>
|
||||
</ul>
|
||||
<p class="text-base-content/80 mt-4">
|
||||
Após o término do prazo de retenção, os dados são eliminados de forma segura, exceto
|
||||
quando houver obrigação legal de manutenção.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Direitos do Titular -->
|
||||
<section class="card bg-base-100 mb-6 shadow-xl">
|
||||
<div class="card-body">
|
||||
<h2 class="card-title mb-4 text-2xl">8. Direitos do Titular dos Dados</h2>
|
||||
<p class="text-base-content/80 mb-4">
|
||||
Conforme previsto no Art. 18 da LGPD, você possui os seguintes direitos:
|
||||
</p>
|
||||
<div class="space-y-3">
|
||||
<div class="flex items-start gap-3">
|
||||
<div class="badge badge-primary badge-lg">1</div>
|
||||
<div>
|
||||
<h3 class="font-semibold">Confirmação da Existência de Tratamento</h3>
|
||||
<p class="text-base-content/70 text-sm">Confirmar se tratamos seus dados pessoais</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-start gap-3">
|
||||
<div class="badge badge-primary badge-lg">2</div>
|
||||
<div>
|
||||
<h3 class="font-semibold">Acesso aos Dados</h3>
|
||||
<p class="text-base-content/70 text-sm">
|
||||
Acessar seus dados pessoais tratados por nós
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-start gap-3">
|
||||
<div class="badge badge-primary badge-lg">3</div>
|
||||
<div>
|
||||
<h3 class="font-semibold">Correção de Dados</h3>
|
||||
<p class="text-base-content/70 text-sm">
|
||||
Solicitar correção de dados incompletos, inexatos ou desatualizados
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-start gap-3">
|
||||
<div class="badge badge-primary badge-lg">4</div>
|
||||
<div>
|
||||
<h3 class="font-semibold">Anonimização, Bloqueio ou Eliminação</h3>
|
||||
<p class="text-base-content/70 text-sm">
|
||||
Solicitar anonimização, bloqueio ou eliminação de dados desnecessários ou excessivos
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-start gap-3">
|
||||
<div class="badge badge-primary badge-lg">5</div>
|
||||
<div>
|
||||
<h3 class="font-semibold">Portabilidade dos Dados</h3>
|
||||
<p class="text-base-content/70 text-sm">
|
||||
Solicitar a portabilidade dos dados a outro fornecedor de serviço ou produto
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-start gap-3">
|
||||
<div class="badge badge-primary badge-lg">6</div>
|
||||
<div>
|
||||
<h3 class="font-semibold">Eliminação de Dados</h3>
|
||||
<p class="text-base-content/70 text-sm">
|
||||
Solicitar a eliminação dos dados pessoais tratados com base em consentimento
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-start gap-3">
|
||||
<div class="badge badge-primary badge-lg">7</div>
|
||||
<div>
|
||||
<h3 class="font-semibold">Informação sobre Compartilhamento</h3>
|
||||
<p class="text-base-content/70 text-sm">
|
||||
Obter informações sobre compartilhamento de dados com terceiros
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-start gap-3">
|
||||
<div class="badge badge-primary badge-lg">8</div>
|
||||
<div>
|
||||
<h3 class="font-semibold">Revogação de Consentimento</h3>
|
||||
<p class="text-base-content/70 text-sm">
|
||||
Revogar seu consentimento, quando aplicável
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{#if isAuthenticated}
|
||||
<div class="mt-6">
|
||||
<a
|
||||
href={resolve('/perfil/privacidade/meus-dados')}
|
||||
class="btn btn-primary btn-lg w-full md:w-auto"
|
||||
>
|
||||
<FileText class="h-5 w-5" />
|
||||
Solicitar Meus Direitos
|
||||
</a>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Encarregado -->
|
||||
<section class="card bg-base-100 mb-6 shadow-xl">
|
||||
<div class="card-body">
|
||||
<h2 class="card-title mb-4 text-2xl">9. Encarregado de Proteção de Dados (DPO)</h2>
|
||||
<p class="text-base-content/80 mb-4">
|
||||
Para exercer seus direitos ou esclarecer dúvidas sobre o tratamento de dados pessoais,
|
||||
entre em contato com nosso Encarregado de Proteção de Dados:
|
||||
</p>
|
||||
<div class="bg-primary/5 space-y-3 rounded-lg p-6">
|
||||
{#if encarregadoNome && encarregadoNome !== 'Encarregado de Proteção de Dados'}
|
||||
<div class="flex items-center gap-3">
|
||||
<FileText class="text-primary h-5 w-5" />
|
||||
<div>
|
||||
<p class="text-sm font-semibold">Nome</p>
|
||||
<p class="text-base-content/70">{encarregadoNome}</p>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
<div class="flex items-center gap-3">
|
||||
<Mail class="text-primary h-5 w-5" />
|
||||
<div>
|
||||
<p class="text-sm font-semibold">E-mail</p>
|
||||
<p class="text-base-content/70">{encarregadoEmail}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-center gap-3">
|
||||
<Phone class="text-primary h-5 w-5" />
|
||||
<div>
|
||||
<p class="text-sm font-semibold">Telefone</p>
|
||||
<p class="text-base-content/70">{encarregadoTelefone}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-center gap-3">
|
||||
<FileText class="text-primary h-5 w-5" />
|
||||
<div>
|
||||
<p class="text-sm font-semibold">Horário de Atendimento</p>
|
||||
<p class="text-base-content/70">{encarregadoHorario}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="alert alert-info mt-4">
|
||||
<p class="text-sm">
|
||||
As solicitações serão respondidas em até {configLGPD?.data?.prazoRespostaPadrao || 15} (quinze)
|
||||
dias, conforme previsto na LGPD.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Alterações -->
|
||||
<section class="card bg-base-100 mb-6 shadow-xl">
|
||||
<div class="card-body">
|
||||
<h2 class="card-title mb-4 text-2xl">10. Alterações nesta Política</h2>
|
||||
<p class="text-base-content/80">
|
||||
Esta Política de Privacidade pode ser atualizada periodicamente. Recomendamos que você
|
||||
revise esta página regularmente para estar ciente de quaisquer alterações. A data da
|
||||
última atualização está indicada no topo desta página.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Ações -->
|
||||
{#if isAuthenticated}
|
||||
<div class="mt-8 flex flex-col gap-4 sm:flex-row">
|
||||
<a href={resolve('/perfil/privacidade/meus-dados')} class="btn btn-primary btn-lg flex-1">
|
||||
<FileText class="h-5 w-5" />
|
||||
Solicitar Meus Direitos LGPD
|
||||
</a>
|
||||
<a href={resolve('/termo-consentimento')} class="btn btn-outline btn-lg flex-1">
|
||||
<Shield class="h-5 w-5" />
|
||||
Ver Termo de Consentimento
|
||||
</a>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
Reference in New Issue
Block a user