Data de elaboração | 07/02/2022 |
Responsável pelo estudo | João Pedro Rocha Brito (Assessor) |
Equipe do estudo | João Pedro Rocha Brito (Assessor)
José Lucas da Silva Costa (Analista de Desenvolvimento Full-Stack) Jônatas Neves Legal (Técnico em Tecnologia da Informação e Comunicação) |
Alvo | Sistema Integrado de Descanso. |
Origem | Melhoria: Avaliação técnica das regras de remarcação de férias. |
Objetivo | Avaliar as regras de remarcação de férias no Sistema Integrado de Descanso. |
Documentação correlata | https://documentos.sistemas.ro.gov.br/books/sid-sistema-integrado-de-descanso/page/solicitacao-de-remarcacao-das-ferias. |
Observações | -/- |
SID: Sistema Integrado de Descanso.
Já foram inclusive abordados as histórias de usuários que são necessárias para atendimento da demanda, vejamos a seguir:
História | Reavaliar fluxo de remarcação de 10 + 10 + 10 dias |
O quê? | Reavaliar fluxo de remarcação de 10 + 10 + 10 dias |
Por quê? | Para que as remarcações esteja de acordo com as regras estabelecidas. |
Regras e Validações | Imagem em anexo. |
Cenários | Dado que o servidor quer remarcar as férias
Quando escolher 10 + 10 + 10 dias Então a regra tem que esta sendo aplicada dentro do sistema SID corretamente. |
História | Reavaliar fluxo de remarcação de 30 dias |
O quê? | Reavaliar fluxo de remarcação de 30 dias |
Por quê? | Para que as remarcações esteja de acordo com as regras estabelecidas. |
Regras e Validações | Imagem em anexo. |
Cenários | Dado que o servidor quer remarcar as férias
Quando escolher 30 dias Então a regra tem que esta sendo aplicada dentro do sistema SID corretamente. |
História | Reavaliar fluxo de remarcação de 15 + 15 dias |
O quê? | Reavaliar fluxo de remarcação de 15 + 15 dias |
Por quê? | Para que as remarcações esteja de acordo com as regras estabelecidas. |
Regras e Validações | Imagem em anexo. |
Cenários | Dado que o servidor quer remarcar as férias
Quando escolher 15 + 15 dias Então a regra tem que esta sendo aplicada dentro do sistema SID corretamente. |
História | Reavaliar fluxo de remarcação de 20 + 10 de abono |
O quê? | Reavaliar fluxo de remarcação de 20 + 10 de abono |
Por quê? | Para que as remarcações esteja de acordo com as regras estabelecidas. |
Regras e Validações | Imagem em anexo. |
Cenários | Dado que o servidor quer remarcar as férias
Quando escolher 20 + 10 dias de abono Então a regra tem que esta sendo aplicada dentro do sistema SID corretamente. |
História | Reavaliar fluxo de remarcação de 20 + 10 dias |
O quê? | Reavaliar fluxo de remarcação de 20 + 10 dias |
Por quê? | Para que as remarcações esteja de acordo com as regras estabelecidas. |
Regras e Validações | Imagem em anexo. |
Cenários | Dado que o servidor quer remarcar as férias
Quando escolher 20 + 10 dias Então a regra tem que esta sendo aplicada dentro do sistema SID corretamente. |
História | Reavaliar fluxo de remarcação de 10 + 10 + 10 de Abono |
O quê? | Reavaliar fluxo de remarcação de 10 + 10 + 10 de Abono |
Por quê? | Para que as remarcações esteja de acordo com as regras estabelecidas. |
Regras e Validações | Imagem em anexo. |
Cenários | Dado que o servidor quer remarcar as férias
Quando escolher 10 + 10 + 10 de Abono Então a regra tem que esta sendo aplicada dentro do sistema SID corretamente. |
Uma das análises iniciais a se fazer é a verificação do período em gozo, vejamos:
private bool VerificarSePeriodoEstaEmGozoOuSeFoiGozado(Solicitacao solicitacaoASerRemarcada, PeriodoOrdem periodoOrdem)
{
return solicitacaoASerRemarcada.PeriodosDeFerias[(int)periodoOrdem].PeriodoEstaEmGozoOuJaFoiGozado;
}
Já a verificação da forma de período modificada é uma validação que possibilita a conversão da formas nas solicitações de remarcação, por exemplo o servidor poderá solicitar uma remarcação mediante saldo de férias disponível e válido para conversão quando for o caso. O código a seguir detalha tecnicamente melhor o método:
private bool VerificarSeFormaDePeriodoFoiAlterada(Solicitacao solicitacaoASerRemarcada, SolicitacaoDeRemarcacaoDeFeriasDto solicitacaoDeRemarcacao)
{
var formaDePeriodoDaSolicitacaoOriginal = solicitacaoASerRemarcada.FormaDoPeriodoDeFerias.ToString();
var formaDePeriodoDaSolicitacaoDeRemarcacao = solicitacaoDeRemarcacao.FormaDoPeriodoDeFerias;
var formasDePeriodosEstaoIguais = formaDePeriodoDaSolicitacaoOriginal == formaDePeriodoDaSolicitacaoDeRemarcacao;
return !formasDePeriodosEstaoIguais;
}
private bool JaGozouTodosOsPeriodos(Solicitacao solicitacaoASerRemarcada)
{
if (solicitacaoASerRemarcada.PeriodosDeFerias.All(x => x.PeriodoEstaEmGozoOuJaFoiGozado))
return true;
else
return false;
}
private bool SolicitacaoPossuiAntecedenciaDeSessentaDias(Solicitacao solicitacaoASerRemarcada)
{
if (!solicitacaoASerRemarcada.Remarcacao)
return true;
var dataMinima = solicitacaoASerRemarcada.DataRegistro.AddDays(60);
var dataHoje = dateTimeProvider.Now();
if (dataHoje.Date >= dataMinima.Date)
return true;
else
return false;
}
private bool RegraTrintaDias(Solicitacao solicitacaoASerRemarcada, SolicitacaoDeRemarcacaoDeFeriasDto solicitacaoDeRemarcacao)
{
bool ExecutarRegras()
{
if (JaGozouTodosOsPeriodos(solicitacaoASerRemarcada))
return GerarFalha((new System.Diagnostics.StackFrame(0, true)).GetFileLineNumber());
else
return NaoIniciouGozoDasFerias(solicitacaoASerRemarcada, solicitacaoDeRemarcacao);
}
return ExecutarRegras();
}
private bool RegraQuinzeMaisQuinzeDias(Solicitacao solicitacaoASerRemarcada, SolicitacaoDeRemarcacaoDeFeriasDto solicitacaoDeRemarcacao)
{
bool ExecutarRegras()
{
var gozouPrimeiroPeriodo = VerificarSePeriodoEstaEmGozoOuSeFoiGozado(solicitacaoASerRemarcada, PeriodoOrdem.Primeiro);
var gozouSegundoPeriodo = VerificarSePeriodoEstaEmGozoOuSeFoiGozado(solicitacaoASerRemarcada, PeriodoOrdem.Segundo);
var gozouTodosOsPeriodos = JaGozouTodosOsPeriodos(solicitacaoASerRemarcada);
if (gozouTodosOsPeriodos)
return GerarFalha((new System.Diagnostics.StackFrame(0, true)).GetFileLineNumber());
if (!gozouPrimeiroPeriodo && !gozouSegundoPeriodo)
return NaoIniciouGozoDasFerias(solicitacaoASerRemarcada, solicitacaoDeRemarcacao);
if (gozouPrimeiroPeriodo && !gozouSegundoPeriodo)
return IniciouGozoDoPeriodo(solicitacaoASerRemarcada, solicitacaoDeRemarcacao, PeriodoOrdem.Primeiro);
else
return false;
}
return ExecutarRegras();
}
private bool RegraVinteMaisDezDias(Solicitacao solicitacaoASerRemarcada, SolicitacaoDeRemarcacaoDeFeriasDto solicitacaoDeRemarcacao)
{
bool ExecutarRegras()
{
var gozouPrimeiroPeriodo = VerificarSePeriodoEstaEmGozoOuSeFoiGozado(solicitacaoASerRemarcada, PeriodoOrdem.Primeiro);
var gozouSegundoPeriodo = VerificarSePeriodoEstaEmGozoOuSeFoiGozado(solicitacaoASerRemarcada, PeriodoOrdem.Segundo);
if (!gozouPrimeiroPeriodo && !gozouSegundoPeriodo)
return NaoIniciouGozoDasFerias(solicitacaoASerRemarcada, solicitacaoDeRemarcacao);
if (gozouPrimeiroPeriodo && !gozouSegundoPeriodo)
return IniciouGozoDoPeriodo(solicitacaoASerRemarcada, solicitacaoDeRemarcacao, PeriodoOrdem.Primeiro);
if (!gozouPrimeiroPeriodo && gozouSegundoPeriodo)
return IniciouGozoDoPeriodo(solicitacaoASerRemarcada, solicitacaoDeRemarcacao, PeriodoOrdem.Segundo);
else
return GerarFalha((new System.Diagnostics.StackFrame(0, true)).GetFileLineNumber());
}
return ExecutarRegras();
}
private bool RegraVinteMaisDezDiasDeAbono(Solicitacao solicitacaoASerRemarcada, SolicitacaoDeRemarcacaoDeFeriasDto solicitacaoDeRemarcacao)
{
bool ExecutarRegras()
{
var gozouPrimeiroPeriodo = VerificarSePeriodoEstaEmGozoOuSeFoiGozado(solicitacaoASerRemarcada, PeriodoOrdem.Primeiro);
var gozouSegundoPeriodo = VerificarSePeriodoEstaEmGozoOuSeFoiGozado(solicitacaoASerRemarcada, PeriodoOrdem.Segundo);
if (!gozouPrimeiroPeriodo && !gozouSegundoPeriodo)
return NaoIniciouGozoDasFerias(solicitacaoASerRemarcada, solicitacaoDeRemarcacao);
if (gozouPrimeiroPeriodo && !gozouSegundoPeriodo)
return GerarFalha((new System.Diagnostics.StackFrame(0, true)).GetFileLineNumber());
if (!gozouPrimeiroPeriodo && gozouSegundoPeriodo)
return IniciouGozoDoPeriodo(solicitacaoASerRemarcada, solicitacaoDeRemarcacao, PeriodoOrdem.Segundo);
else
return GerarFalha((new System.Diagnostics.StackFrame(0, true)).GetFileLineNumber());
}
return ExecutarRegras();
}
private bool RegraDezMaisDezMaisDez(Solicitacao solicitacaoASerRemarcada, SolicitacaoDeRemarcacaoDeFeriasDto solicitacaoDeRemarcacao)
{
bool ExecutarRegras()
{
var gozouPrimeiroPeriodo = VerificarSePeriodoEstaEmGozoOuSeFoiGozado(solicitacaoASerRemarcada, PeriodoOrdem.Primeiro);
var gozouSegundoPeriodo = VerificarSePeriodoEstaEmGozoOuSeFoiGozado(solicitacaoASerRemarcada, PeriodoOrdem.Segundo);
var gozouTerceiroPeriodo = VerificarSePeriodoEstaEmGozoOuSeFoiGozado(solicitacaoASerRemarcada, PeriodoOrdem.Terceiro);
if (!gozouPrimeiroPeriodo && !gozouSegundoPeriodo && !gozouTerceiroPeriodo)
return NaoIniciouGozoDasFerias(solicitacaoASerRemarcada, solicitacaoDeRemarcacao);
if (gozouPrimeiroPeriodo && gozouSegundoPeriodo && gozouTerceiroPeriodo)
return GerarFalha((new System.Diagnostics.StackFrame(0, true)).GetFileLineNumber());
if (gozouPrimeiroPeriodo && !gozouSegundoPeriodo && !gozouTerceiroPeriodo)
return IniciouGozoDoPeriodo(solicitacaoASerRemarcada, solicitacaoDeRemarcacao, PeriodoOrdem.Primeiro);
else
return IniciouGozoDoPeriodo(solicitacaoASerRemarcada, solicitacaoDeRemarcacao, PeriodoOrdem.Segundo);
}
return ExecutarRegras();
}
private bool RegraDezMaisDezMaisAbono(Solicitacao solicitacaoASerRemarcada, SolicitacaoDeRemarcacaoDeFeriasDto solicitacaoDeRemarcacao)
{
bool ExecutarRegras()
{
var gozouPrimeiroPeriodo = VerificarSePeriodoEstaEmGozoOuSeFoiGozado(solicitacaoASerRemarcada, PeriodoOrdem.Primeiro);
var gozouSegundoPeriodo = VerificarSePeriodoEstaEmGozoOuSeFoiGozado(solicitacaoASerRemarcada, PeriodoOrdem.Segundo);
var gozouTerceiroPeriodoComAbono = VerificarSePeriodoEstaEmGozoOuSeFoiGozado(solicitacaoASerRemarcada, PeriodoOrdem.Terceiro);
if (!gozouPrimeiroPeriodo && !gozouSegundoPeriodo && !gozouTerceiroPeriodoComAbono)
return NaoIniciouGozoDasFerias(solicitacaoASerRemarcada, solicitacaoDeRemarcacao);
if (gozouPrimeiroPeriodo && gozouSegundoPeriodo && gozouTerceiroPeriodoComAbono)
return GerarFalha((new System.Diagnostics.StackFrame(0, true)).GetFileLineNumber());
if (gozouPrimeiroPeriodo && !gozouSegundoPeriodo && !gozouTerceiroPeriodoComAbono)
return IniciouGozoDoPeriodo(solicitacaoASerRemarcada, solicitacaoDeRemarcacao, PeriodoOrdem.Primeiro);
else
return IniciouGozoDoPeriodo(solicitacaoASerRemarcada, solicitacaoDeRemarcacao, PeriodoOrdem.Segundo);
}
return ExecutarRegras();
}
public (bool validado, string retorno) ExecutarRegrasDeRemarcaoDaSolicitacao(Solicitacao solicitacaoASerRemarcada, SolicitacaoDeRemarcacaoDeFeriasDto solicitacaoDeRemarcacao)
{
switch (solicitacaoASerRemarcada.FormaDoPeriodoDeFerias)
{
case FormaDoPeriodoDeFerias.UmaDeTrintaDias:
return (RegraTrintaDias(solicitacaoASerRemarcada, solicitacaoDeRemarcacao), $"{FormaDoPeriodoDeFerias.UmaDeTrintaDias}");
case FormaDoPeriodoDeFerias.DoisDeQuinzeDias:
return (RegraQuinzeMaisQuinzeDias(solicitacaoASerRemarcada, solicitacaoDeRemarcacao), $"{FormaDoPeriodoDeFerias.DoisDeQuinzeDias}");
case FormaDoPeriodoDeFerias.TresDeDezDias:
return (RegraDezMaisDezMaisDez(solicitacaoASerRemarcada, solicitacaoDeRemarcacao), $"{FormaDoPeriodoDeFerias.TresDeDezDias}");
case FormaDoPeriodoDeFerias.UmaDeVinteDiasEOutraDezDias:
return (RegraVinteMaisDezDias(solicitacaoASerRemarcada, solicitacaoDeRemarcacao), $"{FormaDoPeriodoDeFerias.UmaDeVinteDiasEOutraDezDias}");
case FormaDoPeriodoDeFerias.UmaDeVinteDiasEDezDiasDeAbono:
return (RegraVinteMaisDezDiasDeAbono(solicitacaoASerRemarcada, solicitacaoDeRemarcacao), $"{FormaDoPeriodoDeFerias.UmaDeVinteDiasEDezDiasDeAbono}");
case FormaDoPeriodoDeFerias.DoisDeDezDiasEUmAbonoDeDezDias:
return (RegraDezMaisDezMaisAbono(solicitacaoASerRemarcada, solicitacaoDeRemarcacao), $"{FormaDoPeriodoDeFerias.DoisDeDezDiasEUmAbonoDeDezDias}");
default:
return (true, string.Empty);
}
}
https://documentos.sistemas.ro.gov.br/books/sid-sistema-integrado-de-descanso/page/solicitacao-de-remarcacao-das-ferias
http://ditel.casacivil.ro.gov.br/COTEL/Livros/detalhes.aspx?coddoc=35757
https://gitlab.setic.ro.gov.br/detic/asp.net-core/sid
https://gitlab.setic.ro.gov.br/detic/asp.net-core/sid-api