Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Abaixo exemplificaremos sugestão de fórmulas que calcula a indenização conforme regras de MP 936. 

Consulta SQL necessária para executar a Fórmula de Indenização por redução de jornada:

Bloco de código
languagesql
titleConsulta SQL - Retornar o Histórico do BEM
SELECT
DTACORDOBEM,DURACAOBEM,VALORREDUZIDOBEM,DTCANCELAMENTOBEM,DTANTECIPACAOBEM,DIASPRORROGACAOBEM,PERCENTUALREDUCAOBEM
FROM PFHSTBEM (NOLOCK)
WHERE codcoligada =:FRM_COLIGADA and chapa =:FRM_CHAPA
and TIPOADESAOBEM = '1'
ORDER BY DTMUDANCA ASC

Fórmula para calcular a indenização quando devida para funcionário que teve redução de salário. Esta fórmula foi utilizada os campo complementares sugeridos aqui:

Bloco de código
titleFórmula - Indenização por dispensa sem justa causa - redução de Jornada
DECL DTREDUZIDADECL DataInicioAcordo;
DECL DataInicioAcordoAnt;
DECL DiasDuracao;
DECL DiasProrrog;
DECL DiasProrrogAnt;
DECL DataCancelamento;
DECL DataAntecipacao;
DECL DataFimAcordo;
DECL DataFimAcordoAnt;
DECL DTRETPercAcodr;
DECL QUANTDIASSalMensal;
DECL SALValorInd;
DECL PERCENTUALValorTotal;
DECL TPDEMISSAODuracaoTotal;
DECL QUANTMESDiasAbatidos;
DECL DIASDIREITODiasDireito;
DEClDECL DIASABTIDOSTpDemissao;
 
SETVAR (DTREDUZIDATpDemissao, TABFUNC ('DTACORDOBEMTIPODEMISSAO', 'D'));   
SETVAR (QUANTMES SalMensal, TABFUNC('DURACAOBEMSALARIO', 'I'));
SETVAR (DiasDireito, 1);
SETVAR (DataInicioAcordoAnt, DATANULA);
SETVAR (DiasProrrogAnt, 0);
SETVAR (DTRET, (TABFUNC('DTACORDOBEM','D')+ (QUANTMES)DataFimAcordoAnt, DATANULA);

SE TpDemissao <> 2;
ENTAO 0;
SENAO

SE (EXECSQL ('BEM') = FALSO)
ENTAO 0;
SENAO

/* Retorna o valor de indenização devido considerando todos acordos*/
SE (EXECSQL ('BEM') = Verdade)
ENTAO
REPITA
SETVAR (DataInicioAcordo,resultsql('BEM','DTACORDOBEM'));
SETVAR (DiasDuracao,resultsql('BEM','DURACAOBEM'));
SETVAR (DiasProrrog,resultsql('BEM','DIASPRORROGACAOBEM'));
SETVAR (SALDataCancelamento, TABFUNCresultsql('SALARIOBEM', 'IDTCANCELAMENTOBEM'));
SETVAR (PERCENTUALDataAntecipacao, TABFUNCresultsql('PERCENTUALREDUCAOBEMBEM', 'IDTANTECIPACAOBEM'));
SETVAR (TPDEMISSAOPercAcodr, TABFUNC resultsql('TIPODEMISSAOBEM','PERCENTUALREDUCAOBEM'));

SE DTRETDataInicioAcordoAnt = '01/01/0001' E DTREDUZIDA = '01/01/0001'
ENTAO
0
SENAO
SE DTRET = '01/01/0001' E DTREDUZIDA <> '01/01/0001'
ENTAO
0
SENAO
SE DTRET <> '01/01/0001' E DTREDUZIDA <> '01/01/0001' E TPDEMISSAO = 2
ENTAO
SETVAR (QUANTDIAS, SUBTRAIDATAS(DTRET, DTREDUZIDA));
SETVAR (DIASABTIDOS, SUBTRAIDATAS (DTD, DTRET));
SE DIASABTIDOS > 0
ENTAO
SETVAR (DIASDIREITO, (QUANTDIAS - DIASABTIDOS));
SENAO
SETVAR (DIASDIREITO, SUBTRAIDATAS(DTD, DTREDUZIDA));
FIMSE;
SE (DTRET+QUANTDIAS) > DTD E PERCENTUAL < 50
ENTAO
SAL * (DIASDIREITO/30) * 0.50
SENAO
SE (DTRET+QUANTDIAS) > DTD E PERCENTUAL < 70
ENTAO
SAL * (DIASDIREITO/30) * 0.70
SENAO
SE (DTRET+QUANTDIAS) > DTD E PERCENTUAL >= 70
ENTAO
SAL * (DIASDIREITO/30) DataInicioAcordo
ENTAO SETVAR (DiasDuracao, 0);
FIMSE; 
SE DiasProrrogAnt = DiasProrrog
ENTAO SETVAR (DiasProrrog, 0);
FIMSE;
SE DataFimAcordoAnt <> DATANULA
ENTAO SETVAR (DataFimAcordo, (DataFimAcordoAnt + DiasDuracao+ DiasProrrog));
SENAO
SETVAR (DataFimAcordo, DataInicioAcordo + DiasDuracao + DiasProrrog)
FIMSE;

SE DataAntecipacao <> DATANULA
ENTAO SETVAR (DiasDuracao, (SUBTRAIDATAS ((DataAntecipacao+1),DataFimAcordo)));
FIMSE;
SE DataCancelamento <> DATANULA
ENTAO SETVAR (DiasDuracao, (SUBTRAIDATAS ((DataCancelamento+1), DataFimAcordo)));
FIMSE;

SETVAR (DiasDuracao, (DiasDuracao+DiasProrrog));

SE PercAcodr < 50
ENTAO SETVAR (ValorInd, (SalMensal * (DiasDuracao/30) * 0.50));
SENAO
SE PercAcodr < 70
ENTAO SETVAR (ValorInd, (SalMensal * (DiasDuracao/30) * 0.75));
SENAO
SE PercAcodr >= 70
ENTAO SETVAR (ValorInd, (SalMensal * (DiasDuracao/30)));
FIMSE;
FIMSE;
FIMSE;
 
SETVAR (ValorTotal, ValorTotal+ValorInd);
SETVAR (DuracaoTotal, DuracaoTotal+DiasDuracao);
SETVAR (DataInicioAcordoAnt, DataInicioAcordo);
SETVAR (DiasProrrogAnt, DiasProrrog);
SETVAR (DataFimAcordoAnt, DataFimAcordo);
 
ATE ProxRegSQL('BEM' ) = Falso
FIMSE;

/* Abate os dias de Estabilidade que não entra no cálculo da indenização*/
SE  SUBTRAIDATAS (DTD, DataFimAcordo) = DiasDuracao
ENTAO SETVAR (DiasAbatidos, 0);
SENAO
SETVAR (DiasAbatidos, SUBTRAIDATAS (DTD, DataFimAcordo));
FIMSE;

SE DiasAbatidos > 0 E (DuracaoTotal - DiasAbatidos ) > 0;
ENTAO SETVAR (DiasDireito, DuracaoTotal - DiasAbatidos); 
SETVAR (ValorTotal, (ValorTotal/DuracaoTotal)*DiasDireito);
SENAO
ValorTotal;
FIMSE;
FIMSE;


Fórmula para calcular para calcular a indenização quando devida para funcionário que teve Suspensão temporário de trabalho. Para esta fórmula usaremos a consulta SQL sugerida aqui.abaixo:

Bloco de código
languagesql
titleConsulta SQL - AFASTAMENTO
SELECT CHAPA, TIPO, DTINICIO, DTFINAL
FROM PFHSTAFT (NOLOCK)
WHERE TIPO IN ('C') AND MOTIVO = 'CV' AND PFHSTAFT.CHAPA=:FRM_CHAPA 
AND PFHSTAFT.CODCOLIGADA=:FRM_COLIGADA
Bloco de código
titleFórmula - Indenização por demissão sem justa causa - Contrato Suspenso
DECL DATAINICIO;
DECL DATAFIM;
DECL QUANTDIAS;
DECL CH;
DECL TPDEMISSAO;
SE EXECSQL('AFASTAMENTO') = 1;
ENTAO
REPITA
SE RESULTSQL('AFASTAMENTO','CHAPA') = CHAPA;
ENTAO 
SETVAR (DATAINICIO, RESULTSQL('AFASTAMENTO','DTINICIO'));
SETVAR (DATAFIM, RESULTSQL('AFASTAMENTO','DTFINAL'));
SETVAR (CH, RESULTSQL('AFASTAMENTO', 'CHAPA'));
SETVAR (TPDEMISSAO, TABFUNC ('TIPODEMISSAO',''));
FIMSE
ATE PROXREGSQL('AFASTAMENTO') = FALSO;
SE CH = 0
ENTAO
0
SENAO
SE DATAFIM = '01/01/0001'
ENTAO 
0
SENAO
SE DATAFIM <> '01/01/0001' E  TPDEMISSAO = 2
ENTAO
SETVAR (QUANTDIAS, SUBTRAIDATAS(DATAFIM, DATAINICIO));
SE (DATAFIM+QUANTDIAS) > DTD
ENTAO
RC
SENAO
0

...