feat: enhance LGPD compliance features by adding configurable data protection officer details, consent term settings, and improved error handling across various components
This commit is contained in:
@@ -23,7 +23,9 @@ export const verificarConsentimento = query({
|
||||
v.object({
|
||||
aceito: v.boolean(),
|
||||
versao: v.string(),
|
||||
aceitoEm: v.number()
|
||||
aceitoEm: v.number(),
|
||||
termoObrigatorio: v.boolean(),
|
||||
versaoTermoAtual: v.string()
|
||||
}),
|
||||
v.null()
|
||||
),
|
||||
@@ -35,6 +37,15 @@ export const verificarConsentimento = query({
|
||||
|
||||
const tipo = args.tipo || 'termo_uso';
|
||||
|
||||
// Buscar configuração para verificar se termo é obrigatório
|
||||
const config = await ctx.db
|
||||
.query('configuracaoLGPD')
|
||||
.withIndex('by_ativo', (q) => q.eq('ativo', true))
|
||||
.first();
|
||||
|
||||
const termoObrigatorio = config?.termoObrigatorio ?? false;
|
||||
const versaoTermoAtual = config?.versaoTermoAtual ?? '1.0';
|
||||
|
||||
const consentimento = await ctx.db
|
||||
.query('consentimentos')
|
||||
.withIndex('by_usuario_tipo', (q) => q.eq('usuarioId', usuario._id).eq('tipo', tipo))
|
||||
@@ -42,13 +53,21 @@ export const verificarConsentimento = query({
|
||||
.first();
|
||||
|
||||
if (!consentimento || !consentimento.aceito || consentimento.revogadoEm) {
|
||||
return null;
|
||||
return {
|
||||
aceito: false,
|
||||
versao: '',
|
||||
aceitoEm: 0,
|
||||
termoObrigatorio,
|
||||
versaoTermoAtual
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
aceito: consentimento.aceito,
|
||||
versao: consentimento.versao,
|
||||
aceitoEm: consentimento.aceitoEm
|
||||
aceitoEm: consentimento.aceitoEm,
|
||||
termoObrigatorio,
|
||||
versaoTermoAtual
|
||||
};
|
||||
}
|
||||
});
|
||||
@@ -476,15 +495,43 @@ export const exportarDadosUsuario = query({
|
||||
}
|
||||
|
||||
// Buscar todos os dados do usuário
|
||||
const dadosUsuario: any = {
|
||||
type DadosUsuario = {
|
||||
usuario: {
|
||||
nome: string;
|
||||
email: string;
|
||||
setor?: string;
|
||||
};
|
||||
consentimentos: Array<{
|
||||
tipo: string;
|
||||
aceito: boolean;
|
||||
versao: string;
|
||||
aceitoEm: number;
|
||||
revogadoEm?: number;
|
||||
}>;
|
||||
solicitacoes: Array<{
|
||||
tipo: string;
|
||||
status: string;
|
||||
criadoEm: number;
|
||||
respondidoEm?: number;
|
||||
}>;
|
||||
funcionario?: {
|
||||
nome: string;
|
||||
matricula?: string;
|
||||
cpf: string;
|
||||
email: string;
|
||||
telefone: string;
|
||||
descricaoCargo?: string;
|
||||
};
|
||||
};
|
||||
|
||||
const dadosUsuario: DadosUsuario = {
|
||||
usuario: {
|
||||
nome: usuario.nome,
|
||||
email: usuario.email,
|
||||
setor: usuario.setor
|
||||
},
|
||||
consentimentos: [],
|
||||
solicitacoes: [],
|
||||
atividades: []
|
||||
solicitacoes: []
|
||||
};
|
||||
|
||||
// Consentimentos
|
||||
@@ -522,8 +569,7 @@ export const exportarDadosUsuario = query({
|
||||
cpf: funcionario.cpf,
|
||||
email: funcionario.email,
|
||||
telefone: funcionario.telefone,
|
||||
cargo: funcionario.cargo,
|
||||
setor: funcionario.setor
|
||||
descricaoCargo: funcionario.descricaoCargo
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -655,8 +701,11 @@ export const obterConfiguracaoLGPD = query({
|
||||
encarregadoNome: v.union(v.string(), v.null()),
|
||||
encarregadoEmail: v.union(v.string(), v.null()),
|
||||
encarregadoTelefone: v.union(v.string(), v.null()),
|
||||
encarregadoHorarioAtendimento: v.union(v.string(), v.null()),
|
||||
prazoRespostaPadrao: v.number(),
|
||||
diasAlertaVencimento: v.number()
|
||||
diasAlertaVencimento: v.number(),
|
||||
termoObrigatorio: v.boolean(),
|
||||
versaoTermoAtual: v.string()
|
||||
}),
|
||||
v.null()
|
||||
),
|
||||
@@ -672,8 +721,11 @@ export const obterConfiguracaoLGPD = query({
|
||||
encarregadoNome: null,
|
||||
encarregadoEmail: null,
|
||||
encarregadoTelefone: null,
|
||||
encarregadoHorarioAtendimento: null,
|
||||
prazoRespostaPadrao: 15,
|
||||
diasAlertaVencimento: 3
|
||||
diasAlertaVencimento: 3,
|
||||
termoObrigatorio: false,
|
||||
versaoTermoAtual: '1.0'
|
||||
};
|
||||
}
|
||||
|
||||
@@ -681,8 +733,11 @@ export const obterConfiguracaoLGPD = query({
|
||||
encarregadoNome: config.encarregadoNome ?? null,
|
||||
encarregadoEmail: config.encarregadoEmail ?? null,
|
||||
encarregadoTelefone: config.encarregadoTelefone ?? null,
|
||||
encarregadoHorarioAtendimento: config.encarregadoHorarioAtendimento ?? null,
|
||||
prazoRespostaPadrao: config.prazoRespostaPadrao,
|
||||
diasAlertaVencimento: config.diasAlertaVencimento
|
||||
diasAlertaVencimento: config.diasAlertaVencimento,
|
||||
termoObrigatorio: config.termoObrigatorio,
|
||||
versaoTermoAtual: config.versaoTermoAtual
|
||||
};
|
||||
}
|
||||
});
|
||||
@@ -695,8 +750,11 @@ export const atualizarConfiguracaoLGPD = mutation({
|
||||
encarregadoNome: v.optional(v.string()),
|
||||
encarregadoEmail: v.optional(v.string()),
|
||||
encarregadoTelefone: v.optional(v.string()),
|
||||
encarregadoHorarioAtendimento: v.optional(v.string()),
|
||||
prazoRespostaPadrao: v.optional(v.number()),
|
||||
diasAlertaVencimento: v.optional(v.number())
|
||||
diasAlertaVencimento: v.optional(v.number()),
|
||||
termoObrigatorio: v.optional(v.boolean()),
|
||||
versaoTermoAtual: v.optional(v.string())
|
||||
},
|
||||
returns: v.object({ sucesso: v.boolean() }),
|
||||
handler: async (ctx, args) => {
|
||||
@@ -716,13 +774,29 @@ export const atualizarConfiguracaoLGPD = mutation({
|
||||
await ctx.db.patch(config._id, { ativo: false });
|
||||
}
|
||||
|
||||
// Buscar valores atuais para manter os que não foram atualizados
|
||||
const valoresAtuais = config || {
|
||||
encarregadoNome: undefined,
|
||||
encarregadoEmail: undefined,
|
||||
encarregadoTelefone: undefined,
|
||||
encarregadoHorarioAtendimento: undefined,
|
||||
prazoRespostaPadrao: 15,
|
||||
diasAlertaVencimento: 3,
|
||||
termoObrigatorio: false,
|
||||
versaoTermoAtual: '1.0'
|
||||
};
|
||||
|
||||
// Criar nova configuração
|
||||
await ctx.db.insert('configuracaoLGPD', {
|
||||
encarregadoNome: args.encarregadoNome,
|
||||
encarregadoEmail: args.encarregadoEmail,
|
||||
encarregadoTelefone: args.encarregadoTelefone,
|
||||
prazoRespostaPadrao: args.prazoRespostaPadrao ?? 15,
|
||||
diasAlertaVencimento: args.diasAlertaVencimento ?? 3,
|
||||
encarregadoNome: args.encarregadoNome ?? valoresAtuais.encarregadoNome ?? undefined,
|
||||
encarregadoEmail: args.encarregadoEmail ?? valoresAtuais.encarregadoEmail ?? undefined,
|
||||
encarregadoTelefone: args.encarregadoTelefone ?? valoresAtuais.encarregadoTelefone ?? undefined,
|
||||
encarregadoHorarioAtendimento:
|
||||
args.encarregadoHorarioAtendimento ?? valoresAtuais.encarregadoHorarioAtendimento ?? undefined,
|
||||
prazoRespostaPadrao: args.prazoRespostaPadrao ?? valoresAtuais.prazoRespostaPadrao,
|
||||
diasAlertaVencimento: args.diasAlertaVencimento ?? valoresAtuais.diasAlertaVencimento,
|
||||
termoObrigatorio: args.termoObrigatorio ?? valoresAtuais.termoObrigatorio ?? false,
|
||||
versaoTermoAtual: args.versaoTermoAtual ?? valoresAtuais.versaoTermoAtual ?? '1.0',
|
||||
ativo: true,
|
||||
atualizadoPor: usuario._id,
|
||||
atualizadoEm: Date.now()
|
||||
|
||||
Reference in New Issue
Block a user