09/05/2022 | Trabalhista - MP nº 1.116/2022 - Institui o Programa Emprega + Mulheres e Jovens
- Federal | Trabalhista
- Medida Provisória nº 1.116/2022
- Publicado em 05/05/2022
- Texto alterado em 24/06/2022
A Medida Provisória nº 1.116/2022, do Poder Executivo, institui o Programa Emprega + Mulheres e Jovens, para inserção e manutenção desse público no mercado de trabalho, bem como para flexibilizar o regime de trabalho para apoio à parentalidade. O texto foi publicado no Diário Oficial da União desta quinta-feira (5).
Entre os vários pontos instituídos pela MP, destacamos:
- para apoio à parentalidade na primeira infância: o pagamento de reembolso-creche e liberação de valores do Fundo de Garantia do Tempo de Serviço - FGTS para auxílio no pagamento de despesas com creche;
- para flexibilização do regime de trabalho para apoio à parentalidade: o teletrabalho para mães empregadas e para pais empregados, antecipação de férias individuais e regime de tempo com horário de entrada e de saída flexíveis;
- a criação do “Selo Emprega + Mulher”, com objetivo de estimular nas empresas a adoção de boas práticas para a contratação, a ocupação de postos de liderança e a ascensão profissional das mulheres;
- a instituição do Projeto Nacional de Incentivo à Contratação de Aprendizes. As empresas participantes terão benefícios, e a ideia é estimular a contratação de 250 mil adolescentes e jovens em 2022. O prazo máximo para a permanência na aprendizagem passará dos atuais dois para três anos.
Pagamento do Evento de 1/3 de Férias - MP nº 1.116/2022
O Evento de 1/3 de Férias, conforme a MP 1.116/22, poderá ser pago no mesmo prazo do 13º Salário, ou seja, até a data de 20/12/2022.
- O eSocial não aceita o tipo de incidência da rubrica de férias na Folha tipo 32 - 13º Salário Integral e, por isso, o evento de 1/3 de Férias não poderá ser lançado nessa Folha;
- Para que o pagamento seja realizado na Folha do tipo 11 - Pagamento Mensal, o pagamento deverá ser efetuado até a competência 11/2022.
- Caso a Empresa opte por pagar o valor de 1/3 de Férias após o pagamento da Folha mensal 11/2022, o pagamento deverá ser feito em uma Folha específica com data de pagamento até dia 20/12/2022, e deverá utilizar a Folha de cálculo do tipo 93 - Especiais, exclusiva para esse pagamento.
Artigos em destaque e o Sistema Senior
A seguir destacamos os artigos do Capítulo III - DA FLEXIBILIZAÇÃO DO REGIME DE TRABALHO PARA APOIO À PARENTALIDADE, esclarecendo o que pode ser feito no Gestão de Pessoas | HCM com base nesses artigos, referentes à Antecipação de férias individuais:
A antecipação de férias individuais poderá ser concedida ao empregado que se enquadre nos critérios estabelecidos no § 1º do art. 9º, ainda que não tenha transcorrido o seu período aquisitivo.
Parágrafo único. As férias antecipadas não poderão ser usufruídas em período inferior a cinco dias corridos.
Para as férias concedidas na forma prevista no art. 11, o empregador poderá optar por efetuar o pagamento do adicional de um terço de férias após a sua concessão, até a data em que é devida a gratificação natalina prevista no art. 1º da Lei nº 4.749, de 12 de agosto de 1965.
O que pode ser feito no Gestão de Pessoas | HCM com base no que está estabelecido nos art. 11 e art. 12:
A solução encontrada para atender emergencialmente foi através de regra especial e criação de eventos. Segue detalhamento do processo que deverá ser feito no sistema:
Neste modelo o sistema irá proceder o adiantamento na data do recibo. Para o sistema identificar que o recibo calculado é referente a MP 1046/2021, ou seja, o evento de 1/3 ser pago futuramente, deverá:
- Informar na tela de cálculo do recibo de férias, no campo “% Provisão Desconto” o valor de 0,01.
- IMPORTANTE: Quem utiliza o campo “% Provisão Desconto” no cálculo das férias individual ou coletivas para alguma necessidade específica da empresa, deve entrar em contado com a Senior para mais informações através de chamado.
- Desabilitar os eventos com características 42A, trocando a característica para 49Z.
- Criar evento para descontar o valor do evento de 1/3 (descrição do novo evento).
- IMPORTANTE: Este tratamento se aplica as telas de cálculo:
- Férias Individuais
- Férias Coletivas
- Férias Programadas. Sendo que, na tela de Férias Programadas o campo “Gerar Adiantamento” só pode ser utilizado a opção “S” ou “N”. A opção “P” não habilita o campo “% Provisão Desconto” que inviabiliza esta solução.
- IMPORTANTE: Este tratamento se aplica as telas de cálculo:
Para o sistema identificar que o recibo calculado é referente à MP 1046/2021, sem adiantamento do valor das férias, e que será pago na ficha financeira proporcionalmente aos dias usufruídos em cada competência e o evento de 1/3 ser pago futuramente, deverá:
- Informar no campo “Gerar Adiantamento” a opção N,
- A data de início das férias ser posterior 28/04/2021.
- Criar evento para descontar o valor do evento de 1/3 (descrição do novo evento).
O sistema irá calcular normalmente o evento de 1/3 das férias no recibo de férias e na ficha financeira. Para isto é necessário criar um evento que desconte este valor, com as informações abaixo:
- Característica: 11G
- Regra: 018
- Tipo do Evento: 3 - Desconto
- Valor de Cálculo: 100
- CLC – criar um novo CLC com tipo de lançamento - crédito.
- Base: Somente o Evento de 1/3 de férias original
- Incidências: Inverter as incidências que estão (+) para (–).
- Cálculos: 11
Dica: Você pode duplicar o evento de 1/3 atual alterando os campos conforme orientação acima.
Definir Numero xNumEmp;
Definir Numero xTipCol;
Definir Numero xNumCad;
Definir Numero xCodEve;
Definir Numero xCodTab;
Definir Numero xAchou;
Definir data dIniPer;
Definir data dIniFer;
Definir data dIniCovid20;
Definir data dFimCovid20;
Definir data dIniCovid21;
Definir data dFimCovid21; @ MP 927 - Ano 2020 @
MontaData (22,03,2020,dIniCovid20);
MontaData (19,07,2020,dFimCovid20); @ MP 1046 - Ano 2021 @
MontaData (28,04,2021,dIniCovid21);
MontaData (24,08,2021,dFimCovid21); @ Calculo refere ao recibo de ferias Normal e Coletiva@
Se ((tipCal >= 51) e (tipCal <= 53))
inicio
@ Caso não seja referente a MP COVID19 zera o evento@
Se (((R040FEM.GerAdt = 'S') e (R040FEM.PrvDes <> 0.01)) ou ((R040FEM.GerAdt = 'N') e ((R040FEM.IniFer < dIniCovid20) ou
((R040FEM.IniFer > dFimCovid20) e (R040FEM.IniFer < dIniCovid21)) ou
(R040FEM.IniFer > dFimCovid21))))
valEvt = 0;
fim
senao
Se (tipCal = 54)@ Integração das ferias com a Folha@
inicio
xNumEmp = r034fun.NumEmp;
xTipCol = r034fun.TipCol;
xNumCad = r034fun.NumCad;
xCodEve = codEvt;
dIniPer = r040fem.IniPer;
dIniFer = r040fem.IniFer; @ busca Recibo de ferias Colaborador @
Definir cursor cur_R040Fem;
cur_R040Fem.SQL "select PrvDes, IniFer, GerAdt from R040Fem \
Where NumEmp = :xNumEmp and TipCol = :xTipCol and NumCad = :xNumCad and IniPer = :dIniPer and IniFer = :dIniFer";
cur_R040Fem.AbrirCursor();
Se (cur_R040Fem.Achou)
inicio
@ Caso não seja referente a MP COVID19 zera o evento@
Se (((cur_R040Fem.GerAdt = 'S') e (cur_R040Fem.PrvDes <> 0.01)) ou ((cur_R040Fem.GerAdt = 'N') e ((cur_R040Fem.IniFer < dIniCovid20) ou
((cur_R040Fem.IniFer > dFimCovid20) e (cur_R040Fem.IniFer < dIniCovid21)) ou
(cur_R040Fem.IniFer > dFimCovid21))))
inicio
valEvt = 0;
fim
senao
inicio
@ Se recibo com adiantamtamento e for MP COVID19 @
Se ((cur_R040Fem.GerAdt = 'S') e (cur_R040Fem.PrvDes = 0.01))
inicio
xAchou = 0;
Definir cursor cur_R030Emp;
cur_R030Emp.SQL "select CalDpn, TabEve from R030Emp Where NumEmp = :xNumEmp";
cur_R030Emp.AbrirCursor();
@Busca assinalmento da empresa pra a rotina de Diferenca Positiva/Negativa de Ferias@
Se (cur_R030Emp.Achou)
Inicio
@Caso utilize a rotina mas não tenha evento configurado trata valor no evento normal de diferença @
se (cur_R030Emp.CalDpn = 'S')
inicio
xCodTab = cur_R030Emp.TabEve;
Definir cursor cur_R008Evc;
cur_R008Evc.SQL "select * from R008Evc Where CodTab = :xCodTab and CodEve = :xCodEve and EveDpo > 0";
cur_R008Evc.AbrirCursor();
Se (cur_R008Evc.Achou)
inicio
xAchou = 1;
fim
cur_R008Evc.FecharCursor();
fim
fim
cur_R030Emp.FecharCursor();
@ Caso não use a rotina de Diferenca Positiva/Negativa ou nao tenha o evento calculado, busca o valor original calculado no recibo de ferias@
se (xAchou = 0)
inicio
Definir cursor cur_R040Fev;
cur_R040Fev.SQL "select ValEve from R040Fev \
Where NumEmp = :xNumEmp and TipCol = :xTipCol and NumCad = :xNumCad and IniPer = :dIniPer and IniFer = :dIniFer and CodEve = :xCodEve";
cur_R040Fev.AbrirCursor();
Se (cur_R040Fev.Achou)
inicio
valEvt = cur_R040Fev.ValEve;
fim
cur_R040Fev.FecharCursor();
fim
fim
fim
fim
cur_R040Fem.FecharCursor();
fim
senao
inicio
valEvt = 0;
fim;
Uma vez a data ajustada e iniciado o calculo de férias neste modelo, a data na regra não poderá mais ser ajustada.
CLC a ser cadastrado para este evento:
Nota: O código deve ser um número que estiver livre na sua tabela de CLC.
Evento:
Exemplos de Recibo de Férias e Ficha Financeira com o novo evento de 1/3:
Recibo de férias:
A Ficha Financeira:
Caso haja valores de diferença de férias na folha, o sistema pagará junto o valor da diferença do 1/3 correspondente.
Se a empresa quiser separar o valor do 1/3 do valor total do evento de diferença de férias para pagamento futuro (MP 1046/2021) poderá utilizar a Rotina de diferença Positiva / Negativa de férias e criar um evento para a separação deste valor, indicando o mesmo CLC.
Alteramos o modelo 002 - Aviso de Férias (FPFE002.COL) para possibilitar informar quantos dias antes da data de início das férias foi dado o aviso de férias para o colaborador.
Caminho: Colaborador > Férias > Listar > Doctos Férias > 002 – Aviso de Férias (FPFE002.COL).
Na tela de Provisão (em Colaboradores > Provisões > Férias), o valor do 1/3 de férias + encargos, dos dias de férias que estão sendo concedidos no mês serão baixados do saldo da provisão, e consequentemente serão efetuados estes lançamentos na contabilização da Folha.
A solução para estornar a baixa dos valores do 1/3 de férias nas contas contábeis, se dará através de:
- CLC do evento novo para o desconto do 1/3 de férias no recibo e na Folha
- Novos CLC’s para tratamento dos encargos
- Regra especial para CLC dos encargos
Os novos CLCs lançarão de volta nas contas contábeis o valor do 1/3 férias + encargos, deixando o saldo das contas corretas. O valor do 1/3 será baixado na contabilização no mês em que a empresa o pagar, limite dia 20/12.
Desta forma, o valor demonstrado na tela de Provisão do colaborador estará a menor, tendo em vista que o sistema não terá como ajustar isto agora. Contudo, nos lançamentos para a contabilidade, os valores estarão corretos.
Importante:
Este CLC não precisa ser criado quando no cadastro do evento de 1/3 de férias constar a incidência “N” no campo INSS Mensal.
Importante:
Este CLC não precisa ser criado quando no cadastro do evento de 1/3 de férias constar a incidência “N” no campo INSS Mensal.
Observação
O campo Nível de lançamento pode ser adequado de acordo com o entendimento do contador da empresa.
Importante
- Para os clientes que utilizam Rateio, o nível de lançamento do CLC 63 deve ser por Centro de Custo para que a Contabilização seja realizada corretamente.
- Para as empresas que utilizam Partidas Dobradas, torna-se necessário para as configurações de CLCs, que sejam criados outros CLCs de contrapartida. Ou seja, para todos os CLCs, deverá ser criado no mesmo nível, outro CLC com tipo de lançamento diferente. Sendo que o CLC normal deverá constar na base do CLC criado.
Contabilização por partidas dobradas
Para os CLCs 63 e 71, outro CLC com tipo de lançamento diferente deverá ser criado no mesmo nível. Exemplo:
CLC | Descrição | Tipo do Lançamento | Nível do Lançamento |
---|---|---|---|
Normal: 63 | Desconto 1/3 Férias Covid-19 | "C" | "T" |
Contra-partida: 163 | Desconto 1/3 Férias Covid-19 | "D" | "T" |
Além disso, devem ser criados dois novos CLCs com a mesma configuração que os CLCs 63 e 71. Por exemplo:
CLC 64 com a mesma configuração que o 63, exceto pelo tipo de base que deve ser "C", e vincular o CLC 63 neste CLC 64. No evento de contra-partida criado (163), inserir o CLC 64 na base.
No momento de informar as contas, deixar os CLCs 63 e 71 sem contas e informá-las nos CLCs 64 e 72.
Observação
O campo Nível de lançamento pode ser adequado de acordo com o entendimento do contador da empresa.
/* Regra para reversão dos valores de FGTS sobre 1/3 de férias MP 927 */ /* Compilação: 01/04/2021 */ /* Definição dos Cursores de Pesquisa */ Definir Alfa CurR146Prv; /* Definição da Variaveis globais */ Definir Numero vNumEmp; Definir Numero vTipCol; Definir Numero vNumCad; Definir Numero vTipPrv; Definir Numero vTipVal; Definir Numero vPerVal; Definir Numero vValClc; Definir Data vPerRef; /* Inicialização da Varivies Globais */ vNumEmp = R048Ctb.NumEmp; vTipCol = R048Ctb.TipCol; vNumCad = R048Ctb.NumCad; vTipPrv = 1; @ Defini que é exclusivo para a provisão de férias @ vTipVal = 4; @ Defini que é exclusivo para o FGTS @ vPerVal = 0; vValClc = R048Ctb.ValLan; vPerRef = PerRef; /* Pesquisa o percentual de FGTS aplicado no último calculo realizado da provisão */ SQL_Criar(CurR146Prv); SQL_UsarAbrangencia(CurR146Prv,0); SQL_USARSQLSENIOR2(CurR146Prv,0); SQL_DefinirComando(CurR146Prv,"Select PerVal From R146Prv B \ where B.NumEmp = :vNumEmp \ and B.Tipcol = :vTipCol \ and B.NumCad = :vNumCad \ and B.TipPrv = :vTipPrv \ and B.TipVal = :vTipVal \ and B.MesAno = (Select Max(A.MesAno) From R146Prv A \ Where B.NumEmp = A.NumEmp \ and B.TipCol = A.TipCol \ and B.NumCad = A.NumCad \ and B.TipPrv = A.TipPrv \ and B.TipVal = A.TipVal \ and A.MesAno <= :vPerRef)"); SQL_DefinirInteiro(CurR146Prv,"vNumEmp",vNumEmp); SQL_DefinirInteiro(CurR146Prv,"vTipCol",vTipCol); SQL_DefinirInteiro(CurR146Prv,"vNumCad",vNumCad); SQL_DefinirInteiro(CurR146Prv,"vTipPrv",vTipPrv); SQL_DefinirInteiro(CurR146Prv,"vTipVal",vTipVal); SQL_DefinirData(CurR146Prv,"vPerRef",vPerRef); SQL_AbrirCursor(CurR146Prv); Enquanto (SQL_EOF(CurR146Prv) = 0) Inicio SQL_RetornarFlutuante(CurR146Prv, "PerVal", vPerVal); SQL_Proximo(CurR146Prv); Fim; SQL_FecharCursor(CurR146Prv); SQL_Destruir(CurR146Prv); /* Apura o valor a ser atibuido ao CLC */ vValClc = (vValClc * vPerVal) / 100; ArredondarValor(vValClc, 2); @ Arredonda o valor para duas casas decimais @ R048Ctb.ValLan = vValClc; @ Atribui o valor do lançamento contábil @
/* Regra para reversão dos valores de INSS sobre 1/3 de férias MP 927 */ /* Compilação: 01/04/2021 */ /* Definição dos Cursores de Pesquisa */ Definir Alfa CurR146Prv; /* Definição da Variaveis globais */ Definir Numero vNumEmp; Definir Numero vTipCol; Definir Numero vNumCad; Definir Numero vTipPrv; Definir Numero vTipVal; Definir Numero vPerVal; Definir Numero vValClc; Definir Data vPerRef; /* Inicialização da Varivies Globais */ vNumEmp = R048Ctb.NumEmp; vTipCol = R048Ctb.TipCol; vNumCad = R048Ctb.NumCad; vTipPrv = 1; @ Defini que é exclusivo para a provisão de férias @ vTipVal = 3; @ Defini que é exclusivo para o INSS @ vPerVal = 0; vValClc = R048Ctb.ValLan; vPerRef = PerRef; /* Pesquisa o percentual de INSS aplicado no último calculo realizado da provisão */ SQL_Criar(CurR146Prv); SQL_UsarAbrangencia(CurR146Prv,0); SQL_USARSQLSENIOR2(CurR146Prv,0); SQL_DefinirComando(CurR146Prv,"Select PerVal From R146Prv B \ where B.NumEmp = :vNumEmp \ and B.Tipcol = :vTipCol \ and B.NumCad = :vNumCad \ and B.TipPrv = :vTipPrv \ and B.TipVal = :vTipVal \ and B.MesAno = (Select Max(A.MesAno) From R146Prv A \ Where B.NumEmp = A.NumEmp \ and B.TipCol = A.TipCol \ and B.NumCad = A.NumCad \ and B.TipPrv = A.TipPrv \ and B.TipVal = A.TipVal \ and A.MesAno <= :vPerRef)"); SQL_DefinirInteiro(CurR146Prv,"vNumEmp",vNumEmp); SQL_DefinirInteiro(CurR146Prv,"vTipCol",vTipCol); SQL_DefinirInteiro(CurR146Prv,"vNumCad",vNumCad); SQL_DefinirInteiro(CurR146Prv,"vTipPrv",vTipPrv); SQL_DefinirInteiro(CurR146Prv,"vTipVal",vTipVal); SQL_DefinirData(CurR146Prv,"vPerRef",vPerRef); SQL_AbrirCursor(CurR146Prv); Enquanto (SQL_EOF(CurR146Prv) = 0) Inicio SQL_RetornarFlutuante(CurR146Prv, "PerVal", vPerVal); SQL_Proximo(CurR146Prv); Fim; SQL_FecharCursor(CurR146Prv); SQL_Destruir(CurR146Prv); /* Apura o valor a ser atibuido ao CLC */ vValClc = (vValClc * vPerVal) / 100; ArredondarValor(vValClc, 2); @ Arredonda o valor para duas casas decimais @ R048Ctb.ValLan = vValClc; @ Atribui o valor do lançamento contábil @
/* Regra para reversão dos valores de PIS sobre 1/3 de férias MP 927 */
/* Compilação: 26/03/2021 */ /* Definição dos Cursores de Pesquisa */ Definir Cursor Cur_R146Prv; /* Definição da Variaveis globais */ Definir Numero vNumEmp; Definir Numero vTipCol; Definir Numero vNumCad; Definir Numero vTipPrv; Definir Numero vTipVal; Definir Numero vPerVal; Definir Numero vValClc; Definir Data vPerRef; /* Inicialização da Varivies Globais */ vNumEmp = R048Ctb.NumEmp; vTipCol = R048Ctb.TipCol; vNumCad = R048Ctb.NumCad; vTipPrv = 1; @ Defini que é exclusivo para a provisão de férias @ vTipVal = 5; @ Defini que é exclusivo para o PIS @ vPerVal = 0; vValClc = R048Ctb.ValLan; vPerRef = PerRef; /* Pesquisa o percentual de PIS aplicado no calculo da provisão */ Cur_R146Prv.Sql "Select PerVal From R146Prv \ where NumEmp = :vNumEmp \ and Tipcol = :vTipCol \ and NumCad = :vNumCad \ and TipPrv = :vTipPrv \ and TipVal = :vTipVal \ and MesAno = :vPerRef"; Cur_R146Prv.AbrirCursor(); Se (Cur_R146PRV.Achou) Inicio vPerVal = Cur_R146Prv.PerVal; @ retorna o percentual de encarco aplicado no calculo da provisão @ Fim; Cur_R146Prv.FecharCursor(); /* Apura o valor a ser atibuido ao CLC */ vValClc = (vValClc * vPerVal) / 100; ArredondarValor(vValClc, 2); @ Arredonda o valor para duas casas decimais @ R048Ctb.ValLan = vValClc; @ atribui o valor do lançamento contábil @
Alteramos os relatórios 001 - Provisão por Rateio (FPNR001.PRV), 002 - Provisão por Local (FPNR002.PRV) e 003 - Provisão por Centro de Custo (FPNR003.PRV), adicionando uma coluna para demonstrar o valor do 1/3 e encargos devidos, e um novo saldo da conta, para facilitar o fechamento do confronto com a conta contábil passiva da provisão.
IMPORTANTE:
Se dentro do mês o colaborador tiver mais de um recibo, e em um deles o valor do 1/3 foi pago agora, somente o valor do 1/3 não pago será tratado conforme esta orientação, o valor pago de 1/3 terá a sua baixa mantida normalmente.
O Colaborador teve férias integradas em março e abril:
- Evento 1/3 Férias Compensatório Covid Folha 05/2021 = 30,00 / Coluna COVID no relatório da provisão de 05/2021 = 30,00
- Evento 1/3 Férias Compensatório Covid Folha 06/2021 = 400,00 / Coluna COVID no relatório da provisão de 06/2021 = 430,00
- Evento 1/3 Férias Compensatório Covid Folha 07/2021 = 0,00 / Coluna COVID no relatório da provisão de 07/2021 = 430,00 > esse valor ficará em saldo demonstrado nessa coluna até que ocorra a devida baixa (pagamento 1/3 futuro)
A coluna COVID, adicionada nos relatórios da provisão, tem a finalidade de demonstrar o valor do 1/3 e encargos devidos e um novo saldo da conta, ou seja, este valor permanecerá ali até que ocorra o pagamento no evento criado para quitação futura. Neste momento que ocorrer o pagamento, o valor será baixado nesta coluna, para assim a contabilidade ter o melhor controle deste saldo.
Quando a coluna dos relatórios de provisão apresentarem divergências, com valores de INSS de reversão de Férias, torna-se necessário realizar o ajuste de valores da reversão sobre 1/3 de Férias.
Veja, abaixo, como deverão ser configurados os CLCs para ajustar os valores, ocasionados pela alteração de percentual em período de vigência da MP 1046/2021. Esse procedimento ajustará os valores da contabilização. Para isso, será necessário estabelecer as seguintes configurações:
- Criar regra para CLC de ajuste de reversão de INSS:
/* Regra para ajuste da reversão dos valores de INSS sobre 1/3 de férias MP 927 e MP-1046*/
/* Definição dos cursores de pesquisa */
Definir Alfa CurR146Prv;
Definir Alfa CurR048Ctb;
/* Definição da variáveis globais */
Definir Numero vNumEmp;
Definir Numero vTipCol;
Definir Numero vNumCad;
Definir Numero vTipPrv;
Definir Numero vTipVal;
Definir Numero vPerVal;
Definir Numero vValClc;
Definir Numero vValBas;
Definir Numero vValPro;
Definir Numero vClcRev;
Definir Numero vClcIns;
Definir Numero vClcAju;
Definir Numero vDia;
Definir Numero vMes;
Definir Numero vAno;
Definir Alfa vConGer;
Definir Data vPerRef;
Definir Data vDatLan;
/* Inicialização da variáveis globais */
vNumEmp = R048Ctb.NumEmp;
vTipCol = R048Ctb.TipCol;
vNumCad = R048Ctb.NumCad;
vTipPrv = 1; @ Define que é exclusivo para a provisão de férias @
vTipVal = 3; @ Define que é exclusivo para o INSS @
vPerVal = 0;
vConGer = "0"; @ Define que é exclusivo para registros não gerenciais @
vDia = 0;
vMes = 0;
vAno = 0;
vPerRef = PerRef;
DesMontaData(vPerRef,vDia,vMes,vAno);
Se (vAno = 2021)
MontaData (28, 04, 2021, vDatLan);
Senao
MontaData (22, 03, 2021, vDatLan);
/* O cliente deve informar os códigos dos CLCs criados para reversão e ajuste */
vClcRev = 1; /* Código do CLC de reversão do valor de 1/3 */
vClcIns = 2; /* Código do CLC de reversão do valor de 1/3 sobre INSS*/
vClcAju = 3; /* Código do CLC de ajuste de reversão do valor de 1/3 sobre INSS*/
/* Buscar último lançamento do CLC de ajuste de reversão */
SQL_Criar(CurR048Ctb);
SQL_UsarAbrangencia(CurR048Ctb,0);
SQL_USARSQLSENIOR2(CurR048Ctb,0);
SQL_DefinirComando(CurR048Ctb,"Select MAX(DatLan) DatLan \
From R048ctb B \
where B.NumEmp = :vNumEmp \
and B.Tipcol = :vTipCol \
and B.NumCad = :vNumCad \
and B.CodClc = :vClcAju \
and B.ConGer = :vConGer \
and B.DatLan < :vPerRef");
SQL_DefinirInteiro(CurR048Ctb,"vNumEmp",vNumEmp);
SQL_DefinirInteiro(CurR048Ctb,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR048Ctb,"vNumCad",vNumCad);
SQL_DefinirInteiro(CurR048Ctb,"vClcAju",vClcAju);
SQL_DefinirAlfa(CurR048Ctb,"vConGer",vConGer);
SQL_DefinirData(CurR048Ctb,"vPerRef",vPerRef);
SQL_AbrirCursor(CurR048Ctb);
Se (SQL_EOF(CurR048Ctb) = 0)
SQL_RetornarData(CurR048Ctb, "DatLan", vDatLan);
SQL_FecharCursor(CurR048Ctb);
SQL_Destruir(CurR048Ctb);
/* Buscar o valor do CLC de 1/3 reversão */
SQL_Criar(CurR048Ctb);
SQL_UsarAbrangencia(CurR048Ctb,0);
SQL_USARSQLSENIOR2(CurR048Ctb,0);
SQL_DefinirComando(CurR048Ctb,"Select SUM(ValLan) ValLan \
From R048ctb B \
where B.NumEmp = :vNumEmp \
and B.Tipcol = :vTipCol \
and B.NumCad = :vNumCad \
and B.CodClc = :vClcRev \
and B.ConGer = :vConGer \
and B.DatLan < :vPerRef \
and B.DatLan > :vDatLan");
SQL_DefinirInteiro(CurR048Ctb,"vNumEmp",vNumEmp);
SQL_DefinirInteiro(CurR048Ctb,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR048Ctb,"vNumCad",vNumCad);
SQL_DefinirInteiro(CurR048Ctb,"vClcRev",vClcRev);
SQL_DefinirAlfa(CurR048Ctb,"vConGer",vConGer);
SQL_DefinirData(CurR048Ctb,"vPerRef",vPerRef);
SQL_DefinirData(CurR048Ctb,"vDatLan",vDatLan);
SQL_AbrirCursor(CurR048Ctb);
Se (SQL_EOF(CurR048Ctb) = 0)
SQL_RetornarFlutuante(CurR048Ctb, "ValLan", vValBas);
SQL_FecharCursor(CurR048Ctb);
SQL_Destruir(CurR048Ctb);
/* Buscar o valor do CLC de reversão de 1/3 INSS */
SQL_Criar(CurR048Ctb);
SQL_UsarAbrangencia(CurR048Ctb,0);
SQL_USARSQLSENIOR2(CurR048Ctb,0);
SQL_DefinirComando(CurR048Ctb,"Select SUM(ValLan) ValLan \
From R048ctb B \
where B.NumEmp = :vNumEmp \
and B.Tipcol = :vTipCol \
and B.NumCad = :vNumCad \
and B.CodClc = :vClcIns \
and B.ConGer = :vConGer \
and B.DatLan < :vPerRef \
and B.DatLan > :vDatLan");
SQL_DefinirInteiro(CurR048Ctb,"vNumEmp",vNumEmp);
SQL_DefinirInteiro(CurR048Ctb,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR048Ctb,"vNumCad",vNumCad);
SQL_DefinirInteiro(CurR048Ctb,"vClcIns",vClcIns);
SQL_DefinirAlfa(CurR048Ctb,"vConGer",vConGer);
SQL_DefinirData(CurR048Ctb,"vPerRef",vPerRef);
SQL_DefinirData(CurR048Ctb,"vDatLan",vDatLan);
SQL_AbrirCursor(CurR048Ctb);
Se (SQL_EOF(CurR048Ctb) = 0)
SQL_RetornarFlutuante(CurR048Ctb, "ValLan", vValPro);
SQL_FecharCursor(CurR048Ctb);
SQL_Destruir(CurR048Ctb);
/* Pesquisa o percentual de INSS aplicado no último cálculo realizado da provisão */
SQL_Criar(CurR146Prv);
SQL_UsarAbrangencia(CurR146Prv,0);
SQL_USARSQLSENIOR2(CurR146Prv,0);
SQL_DefinirComando(CurR146Prv,"Select PerVal \
From R146Prv B \
where B.NumEmp = :vNumEmp \
and B.Tipcol = :vTipCol \
and B.NumCad = :vNumCad \
and B.TipPrv = :vTipPrv \
and B.TipVal = :vTipVal \
and B.MesAno = (Select Max(A.MesAno) \
From R146Prv A \
Where B.NumEmp = A.NumEmp \
and B.TipCol = A.TipCol \
and B.NumCad = A.NumCad \
and B.TipPrv = A.TipPrv \
and B.TipVal = A.TipVal \
and A.MesAno <= :vPerRef)");
SQL_DefinirInteiro(CurR146Prv,"vNumEmp",vNumEmp);
SQL_DefinirInteiro(CurR146Prv,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR146Prv,"vNumCad",vNumCad);
SQL_DefinirInteiro(CurR146Prv,"vTipPrv",vTipPrv);
SQL_DefinirInteiro(CurR146Prv,"vTipVal",vTipVal);
SQL_DefinirData(CurR146Prv,"vPerRef",vPerRef);
SQL_AbrirCursor(CurR146Prv);
Enquanto (SQL_EOF(CurR146Prv) = 0)
Inicio
SQL_RetornarFlutuante(CurR146Prv, "PerVal", vPerVal);
SQL_Proximo(CurR146Prv);
Fim;
SQL_FecharCursor(CurR146Prv);
SQL_Destruir(CurR146Prv);
/* Apurar o valor a ser atribuido ao CLC */
vValClc = (vValBas * vPerVal) / 100;
ArredondarValor(vValClc, 2); @ Arredonda o valor para duas casas decimais @
/* Verificar se vai ter Ajuste nos valores provisionados de 1/3 INSS */
/* Definição de variáveis de contabilização. */
Definir Alfa xDebCre;
Definir Alfa xConCre;
Definir Alfa xConDeb;
Definir Alfa xConCrP;
Definir Alfa xConDeP;
Definir Numero xValLan;
Definir Numero xRedCre;
Definir Numero xRedDeb;
Definir Numero xRedCrP;
Definir Numero xRedDeP;
xValLan = vValClc - vValPro;
/* Se o valor do lançamento for negativo. */
Se (xValLan < 0)
Inicio
/* Tornar o valor positivo. */
xValLan = xValLan * -1;
/* Inverter o tipo da conta. */
Se (R048Ctb.DebCre = "C")
Inicio
xDebCre = "D";
Fim;
Senao
Inicio
xDebCre = "C";
Fim;
/* Trocar as contas de crédito e débito. */
xConCre = R048Ctb.ConDeb;
xConDeb = R048Ctb.ConCre;
xConCrP = R048Ctb.ConDeP;
xConDeP = R048Ctb.ConCrP;
xRedCre = R048Ctb.RedDeb;
xRedDeb = R048Ctb.RedCre;
xRedCrP = R048Ctb.RedDeP;
xRedDeP = R048Ctb.RedCrP;
/* Atribuir os valores da contabilização. */
R048Ctb.DebCre = xDebCre;
R048Ctb.ConCre = xConCre;
R048Ctb.ConDeb = xConDeb;
R048Ctb.ConCrP = xConCrP;
R048Ctb.ConDeP = xConDeP;
R048Ctb.RedCre = xRedCre;
R048Ctb.RedDeb = xRedDeb;
R048Ctb.RedCrP = xRedCrP;
R048Ctb.RedDeP = xRedDeP;
Fim;
R048Ctb.ValLan = xValLan; @ Atribuir o valor do lançamento contábil @
- Ajustar as informações da regra:
Alterar os campos mencionados no print pelos códigos dos CLCs correspondentes.
- vClcRev: informa o código do CLC de reversão do valor de 1/3;
- vClcIns: informar o código do CLC de reversão do valor de 1/3 sobre INSS;
- vClcAju: informar o código do CLC de ajuste de reversão do valor de 1/3 sobre INSS.
- Criar novo(s) CLC(s) e informar a nova regra criada no processo anterior, que receberá o valor do ajuste:
Para ajustar valores de férias de colaboradores que possuem um saldo de Covid-19 a receber decorrentes da MP 1046/2021, mas foram transferidos de empresa e/ou filial antes de sua quitação, explicaremos como deverão ser configurados os CLCs:
- Criar dois CLCs (Débito/Crédito) para cada valor vinculado ao Covid-19 que deseja transferir:
- Criar uma regra LSP para cada saldo de Covid-19 a ser contabilizado e vincular ao CLC correspondente, configurado com opção Tipo Base igual R - Regra:
Exemplo: 1/3 Férias precisa de dois CLCs (C/D), o INSS outros dois CLCs, o mesmo ocorre para FGTS, PIS e possíveis valores de ajustes da reversão dos encargos.
Um CLC deverá ser Tipo Base igual Regra, onde será vinculada uma nova regra para transferência de saldo:
Outro CLC deverá conter o Nível Lançamento igual a T – Total Empresa e Tipo Base igual a C – CLCs informando o CLC criado anteriormente no campo Bases.
Observação
Para cada saldo "COVID19" a ser transferido será necessário criar 2 CLCs com essas características.
/*------------------------------------------------------------------*/
/* Versão: 2 */
/* Regra para tranferência de valores para atender MP-927 e MP-1046 */
/*------------------------------------------------------------------*/
/* Definição dos cursores de pesquisa */
Definir Alfa CurR038Hfi;
Definir Alfa CurR048Ctb;
/* Definição das variáveis */
Definir Numero vNumEmp;
Definir Numero vEmpAnt;
Definir Numero vCodFil;
Definir Numero vFilAnt;
Definir Numero vTipCol;
Definir Numero vNumCad;
Definir Numero vCadAnt;
Definir Numero vClcDCV;
Definir Numero vClcQCV;
Definir Numero vClcTCr;
Definir Numero vClcTDe;
Definir Numero vDia;
Definir Numero vMes;
Definir Numero vAno;
Definir Alfa vConGer;
Definir Alfa vConCtC;
Definir Alfa vConCtD;
Definir Data vDatLan;
Definir Data vPerRef;
Definir Data vIniPer;
Definir Data vFimPer;
/* Inicialização das variáveis */
vNumEmp = R048Ctb.NumEmp;
vCodFil = R048Ctb.CodFil;
vTipCol = R048Ctb.TipCol;
vNumCad = R048Ctb.NumCad;
vConGer = R048Ctb.ConGer;
vEmpAnt = 0;
vFilAnt = 0;
vCadAnt = 0;
vDia = 0;
vMes = 0;
vAno = 0;
vPerRef = PerRef;
DesMontaData(vPerRef,vDia,vMes,vAno);
Se (vAno = 2021)
MontaData (28, 04, 2021, vDatLan);
Senao
MontaData (22, 03, 2021, vDatLan);
/* O cliente deve informar os códigos dos CLCs criados para atender MP-927 */
vIniPer = IniCmp; @--- Início do período de transferências ---@
vFimPer = FimCmp; @--- Fim do período de transferências ---@
vClcDCV = nnnn; @--- CLC desconto ---@
vClcQCV = nnnn; @--- CLC quitação ---@
vClcTCr = nnnn; @--- CLC transferência "COVID" - 1º CLC ---@
vClcTDe = nnnn; @--- CLC transferência "COVID" - 2º CLC ---@
vConCtC = "aaaa"; @--- Conta Contábil - 1º CLC de transferência ---@
vConCtD = "aaaa"; @--- Conta Contábil - 2º CLC de transferência ---@
/*------------------ TRANSFERÊNCIA FILIAIS COM MESMO NUMCAD ------------------*/
Se(vCadAnt = 0)
Inicio
/* Retorna registros do colaborador com transferência de filial */
SQL_Criar(CurR038Hfi);
SQL_UsarAbrangencia(CurR038Hfi,0);
SQL_USARSQLSENIOR2(CurR038Hfi,0);
SQL_DefinirComando(CurR038Hfi,"SELECT H.NUMEMP NUMEMP, \
H.CODFIL CODFIL, \
H.NUMCAD NUMCAD \
FROM R038HFI H \
WHERE H.NUMEMP = :vNumEmp \
AND H.EMPATU = :vNumEmp \
AND H.TIPCOL = :vTipCol \
AND H.NUMCAD = :vNumCad \
AND H.CADATU = :vCadAtu \
AND H.CODFIL <> :vCodFil \
AND EXISTS (SELECT * \
FROM R038HFI F \
WHERE F.NUMEMP = H.NUMEMP \
AND F.EMPATU = H.EMPATU \
AND F.TIPCOL = H.TIPCOL \
AND F.NUMCAD = H.NUMCAD \
AND F.CADATU = H.CADATU \
AND F.DATALT >= :vIniPer \
AND F.DATALT <= :vFimPer)");
SQL_DefinirInteiro(CurR038Hfi,"vNumEmp",vNumEmp);
SQL_DefinirInteiro(CurR038Hfi,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR038Hfi,"vNumCad",vNumCad);
SQL_DefinirInteiro(CurR038Hfi,"vCadAtu",vNumCad);
SQL_DefinirInteiro(CurR038Hfi,"vCodFil",vCodFil);
SQL_DefinirData(CurR038Hfi,"vIniPer",vIniPer);
SQL_DefinirData(CurR038Hfi,"vFimPer",vFimPer);
SQL_AbrirCursor(CurR038Hfi);
Se (SQL_EOF(CurR038Hfi) = 0)
Inicio
SQL_RetornarInteiro(CurR038Hfi,"NUMEMP",vEmpAnt);
SQL_RetornarInteiro(CurR038Hfi,"CODFIL",vFilAnt);
SQL_RetornarInteiro(CurR038Hfi,"NUMCAD",vCadAnt);
Fim;
SQL_FecharCursor(CurR038Hfi);
SQL_Destruir(CurR038Hfi);
Fim;
/*------------------ TRANSFERÊNCIA FILIAIS COM TROCA NUMCAD ------------------*/
Se(vCadAnt = 0)
Inicio
/* Retorna registros do colaborador com transferência de filial */
SQL_Criar(CurR038Hfi);
SQL_UsarAbrangencia(CurR038Hfi,0);
SQL_USARSQLSENIOR2(CurR038Hfi,0);
SQL_DefinirComando(CurR038Hfi,"SELECT H.NUMEMP NUMEMP, \
H.NUMCAD NUMCAD \
FROM R038HFI H \
WHERE H.NUMEMP = :vNumEmp \
AND H.EMPATU = :vNumEmp \
AND H.TIPCOL = :vTipCol \
AND H.CADATU = :vCadAtu \
AND H.NUMCAD <> :vNumCad \
AND H.DATALT >= :vIniPer \
AND H.DATALT <= :vFimPer");
SQL_DefinirInteiro(CurR038Hfi,"vNumEmp",vNumEmp);
SQL_DefinirInteiro(CurR038Hfi,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR038Hfi,"vCadAtu",vNumCad);
SQL_DefinirInteiro(CurR038Hfi,"vNumCad",vNumCad);
SQL_DefinirData(CurR038Hfi,"vIniPer",vIniPer);
SQL_DefinirData(CurR038Hfi,"vFimPer",vFimPer);
SQL_AbrirCursor(CurR038Hfi);
Se (SQL_EOF(CurR038Hfi) = 0)
Inicio
SQL_RetornarInteiro(CurR038Hfi,"NUMEMP",vEmpAnt);
SQL_RetornarInteiro(CurR038Hfi,"NUMCAD",vCadAnt);
Fim;
SQL_FecharCursor(CurR038Hfi);
SQL_Destruir(CurR038Hfi);
Se(vCadAnt <> 0)
Inicio
/* Retorna à Filial anterior à transferência */
SQL_Criar(CurR038Hfi);
SQL_UsarAbrangencia(CurR038Hfi,0);
SQL_USARSQLSENIOR2(CurR038Hfi,0);
SQL_DefinirComando(CurR038Hfi,"SELECT H.CODFIL CODFIL \
FROM R038HFI H \
WHERE H.NUMEMP = :vNumEmp \
AND H.EMPATU = :vNumEmp \
AND H.TIPCOL = :vTipCol \
AND H.NUMCAD = :vNumCad \
AND H.CADATU = :vNumCad");
SQL_DefinirInteiro(CurR038Hfi,"vNumEmp",vEmpAnt);
SQL_DefinirInteiro(CurR038Hfi,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR038Hfi,"vNumCad",vCadAnt);
SQL_AbrirCursor(CurR038Hfi);
Se (SQL_EOF(CurR038Hfi) = 0)
Inicio
SQL_RetornarInteiro(CurR038Hfi,"CODFIL",vFilAnt);
Fim;
SQL_FecharCursor(CurR038Hfi);
SQL_Destruir(CurR038Hfi);
Fim;
Fim;
/*------------------ TRANSFERÊNCIA EMPRESA COM MESMO NUMCAD ------------------*/
Se(vCadAnt = 0)
Inicio
/* Retorna registros do colaborador com transferência de empresa */
SQL_Criar(CurR038Hfi);
SQL_UsarAbrangencia(CurR038Hfi,0);
SQL_USARSQLSENIOR2(CurR038Hfi,0);
SQL_DefinirComando(CurR038Hfi,"SELECT H.NUMEMP NUMEMP, \
H.CODFIL CODFIL, \
H.NUMCAD NUMCAD \
FROM R038HFI H \
WHERE H.EMPATU = :vNumEmp \
AND H.TIPCOL = :vTipCol \
AND H.NUMCAD = :vNumCad \
AND H.CADATU = :vCadAtu \
AND H.NUMEMP <> :vNumEmp \
AND H.DATALT >= :vIniPer \
AND H.DATALT <= :vFimPer");
SQL_DefinirInteiro(CurR038Hfi,"vNumEmp",vNumEmp);
SQL_DefinirInteiro(CurR038Hfi,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR038Hfi,"vNumCad",vNumCad);
SQL_DefinirInteiro(CurR038Hfi,"vCadAtu",vNumCad);
SQL_DefinirData(CurR038Hfi,"vIniPer",vIniPer);
SQL_DefinirData(CurR038Hfi,"vFimPer",vFimPer);
SQL_AbrirCursor(CurR038Hfi);
Se (SQL_EOF(CurR038Hfi) = 0)
Inicio
SQL_RetornarInteiro(CurR038Hfi,"NUMEMP",vEmpAnt);
SQL_RetornarInteiro(CurR038Hfi,"NUMCAD",vCadAnt);
Fim;
SQL_FecharCursor(CurR038Hfi);
SQL_Destruir(CurR038Hfi);
Se(vCadAnt <> 0)
Inicio
/* Retorna à Filial anterior à transferência */
SQL_Criar(CurR038Hfi);
SQL_UsarAbrangencia(CurR038Hfi,0);
SQL_USARSQLSENIOR2(CurR038Hfi,0);
SQL_DefinirComando(CurR038Hfi,"SELECT H.CODFIL CODFIL \
FROM R038HFI H \
WHERE H.NUMEMP = :vNumEmp \
AND H.EMPATU = :vNumEmp \
AND H.TIPCOL = :vTipCol \
AND H.NUMCAD = :vNumCad \
AND H.CADATU = :vNumCad");
SQL_DefinirInteiro(CurR038Hfi,"vNumEmp",vEmpAnt);
SQL_DefinirInteiro(CurR038Hfi,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR038Hfi,"vNumCad",vCadAnt);
SQL_AbrirCursor(CurR038Hfi);
Se (SQL_EOF(CurR038Hfi) = 0)
Inicio
SQL_RetornarInteiro(CurR038Hfi,"CODFIL",vFilAnt);
Fim;
SQL_FecharCursor(CurR038Hfi);
SQL_Destruir(CurR038Hfi);
Fim;
Fim;
/*------------------ TRANSFERÊNCIA EMPRESA COM TROCA NUMCAD ------------------*/
Se(vCadAnt = 0)
Inicio
/* Retorna registros do colaborador com transferência de empresa */
SQL_Criar(CurR038Hfi);
SQL_UsarAbrangencia(CurR038Hfi,0);
SQL_USARSQLSENIOR2(CurR038Hfi,0);
SQL_DefinirComando(CurR038Hfi,"SELECT H.NUMEMP NUMEMP, \
H.CODFIL CODFIL, \
H.NUMCAD NUMCAD \
FROM R038HFI H \
WHERE H.EMPATU = :vNumEmp \
AND H.TIPCOL = :vTipCol \
AND H.CADATU = :vCadAtu \
AND H.NUMEMP <> :vNumEmp \
AND H.NUMCAD <> :vNumCad \
AND H.DATALT >= :vIniPer \
AND H.DATALT <= :vFimPer");
SQL_DefinirInteiro(CurR038Hfi,"vNumEmp",vNumEmp);
SQL_DefinirInteiro(CurR038Hfi,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR038Hfi,"vCadAtu",vNumCad);
SQL_DefinirInteiro(CurR038Hfi,"vNumCad",vNumCad);
SQL_DefinirData(CurR038Hfi,"vIniPer",vIniPer);
SQL_DefinirData(CurR038Hfi,"vFimPer",vFimPer);
SQL_AbrirCursor(CurR038Hfi);
Se (SQL_EOF(CurR038Hfi) = 0)
Inicio
SQL_RetornarInteiro(CurR038Hfi,"NUMEMP",vEmpAnt);
SQL_RetornarInteiro(CurR038Hfi,"NUMCAD",vCadAnt);
Fim;
SQL_FecharCursor(CurR038Hfi);
SQL_Destruir(CurR038Hfi);
Se(vCadAnt <> 0)
Inicio
/* Retorna à Filial anterior à transferência */
SQL_Criar(CurR038Hfi);
SQL_UsarAbrangencia(CurR038Hfi,0);
SQL_USARSQLSENIOR2(CurR038Hfi,0);
SQL_DefinirComando(CurR038Hfi,"SELECT H.CODFIL CODFIL \
FROM R038HFI H \
WHERE H.NUMEMP = :vNumEmp \
AND H.EMPATU = :vNumEmp \
AND H.TIPCOL = :vTipCol \
AND H.NUMCAD = :vNumCad \
AND H.CADATU = :vNumCad");
SQL_DefinirInteiro(CurR038Hfi,"vNumEmp",vEmpAnt);
SQL_DefinirInteiro(CurR038Hfi,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR038Hfi,"vNumCad",vCadAnt);
SQL_AbrirCursor(CurR038Hfi);
Se (SQL_EOF(CurR038Hfi) = 0)
Inicio
SQL_RetornarInteiro(CurR038Hfi,"CODFIL",vFilAnt);
Fim;
SQL_FecharCursor(CurR038Hfi);
SQL_Destruir(CurR038Hfi);
Fim;
Fim;
/*---------------- CONSISTÊNCIA DE DADOS PARA CONTABILIZAÇÃO -----------------*/
Se(vCadAnt <> 0)
Inicio
Definir Numero xValDCV;
Definir Numero xValQCV;
Definir Numero xValLan;
Definir Alfa xExiste;
Definir Data xDatLan;
xValDCV = 0;
xValQCV = 0;
xValLan = 0;
xExiste = "N";
xDatLan = R048Ctb.DatLan;
/* Verifica se CLC de transferência existe na base de dados */
SQL_Criar(CurR048Ctb);
SQL_UsarAbrangencia(CurR048Ctb,0);
SQL_USARSQLSENIOR2(CurR048Ctb,0);
SQL_DefinirComando(CurR048Ctb,"SELECT * FROM R048CTB C \
WHERE C.NUMEMP = :vNumEmp \
AND C.CODFIL = :vCodFil \
AND C.TIPCOL = :vTipCol \
AND C.NUMCAD = :vNumCad \
AND C.CODCLC = :vCodClc \
AND C.CONGER = :vConGer \
AND C.DATLAN = :vDatLan");
SQL_DefinirInteiro(CurR048Ctb,"vNumEmp",vEmpAnt);
SQL_DefinirInteiro(CurR048Ctb,"vCodFil",vFilAnt);
SQL_DefinirInteiro(CurR048Ctb,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR048Ctb,"vNumCad",vCadAnt);
SQL_DefinirInteiro(CurR048Ctb,"vCodClc",vClcTCr);
SQL_DefinirAlfa(CurR048Ctb,"vConGer",vConGer);
SQL_DefinirData(CurR048Ctb,"vDatLan",xDatLan);
SQL_AbrirCursor(CurR048Ctb);
Se(SQL_EOF(CurR048Ctb) = 0)
Inicio
xExiste = "S";
Fim;
SQL_FecharCursor(CurR048Ctb);
SQL_Destruir(CurR048Ctb);
/* Exclui o registro do CLC Crédito de transferência, caso exista */
Se (xExiste = "S")
Inicio
SQL_Criar(CurR048Ctb);
SQL_UsarAbrangencia(CurR048Ctb,0);
SQL_USARSQLSENIOR2(CurR048Ctb,0);
SQL_DefinirComando(CurR048Ctb,"DELETE FROM R048CTB \
WHERE NUMEMP = :vNumEmp \
AND CODFIL = :vCodFil \
AND TIPCOL = :vTipCol \
AND NUMCAD = :vNumCad \
AND CODCLC = :vCodClc \
AND CONGER = :vConGer \
AND DATLAN = :vDatLan");
SQL_DefinirInteiro(CurR048Ctb,"vNumEmp",vEmpAnt);
SQL_DefinirInteiro(CurR048Ctb,"vCodFil",vFilAnt);
SQL_DefinirInteiro(CurR048Ctb,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR048Ctb,"vNumCad",vCadAnt);
SQL_DefinirInteiro(CurR048Ctb,"vCodClc",vClcTCr);
SQL_DefinirAlfa(CurR048Ctb,"vConGer",vConGer);
SQL_DefinirData(CurR048Ctb,"vDatLan",xDatLan);
SQL_AbrirCursor(CurR048Ctb);
SQL_FecharCursor(CurR048Ctb);
SQL_Destruir(CurR048Ctb);
Fim;
xExiste = "N";
/* Verifica se CLC de transferência existe na base de dados */
SQL_Criar(CurR048Ctb);
SQL_UsarAbrangencia(CurR048Ctb,0);
SQL_USARSQLSENIOR2(CurR048Ctb,0);
SQL_DefinirComando(CurR048Ctb,"SELECT * FROM R048CTB C \
WHERE C.NUMEMP = :vNumEmp \
AND C.CODFIL = :vCodFil \
AND C.TIPCOL = :vTipCol \
AND C.NUMCAD = :vNumCad \
AND C.CODCLC = :vCodClc \
AND C.CONGER = :vConGer \
AND C.DATLAN = :vDatLan");
SQL_DefinirInteiro(CurR048Ctb,"vNumEmp",vEmpAnt);
SQL_DefinirInteiro(CurR048Ctb,"vCodFil",vFilAnt);
SQL_DefinirInteiro(CurR048Ctb,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR048Ctb,"vNumCad",vCadAnt);
SQL_DefinirInteiro(CurR048Ctb,"vCodClc",vClcTDe);
SQL_DefinirAlfa(CurR048Ctb,"vConGer",vConGer);
SQL_DefinirData(CurR048Ctb,"vDatLan",xDatLan);
SQL_AbrirCursor(CurR048Ctb);
Se(SQL_EOF(CurR048Ctb) = 0)
Inicio
xExiste = "S";
Fim;
SQL_FecharCursor(CurR048Ctb);
SQL_Destruir(CurR048Ctb);
/* Exclui o registro do CLC Débito de transferência, caso exista */
Se (xExiste = "S")
Inicio
SQL_Criar(CurR048Ctb);
SQL_UsarAbrangencia(CurR048Ctb,0);
SQL_USARSQLSENIOR2(CurR048Ctb,0);
SQL_DefinirComando(CurR048Ctb,"DELETE FROM R048CTB \
WHERE NUMEMP = :vNumEmp \
AND CODFIL = :vCodFil \
AND TIPCOL = :vTipCol \
AND NUMCAD = :vNumCad \
AND CODCLC = :vCodClc \
AND CONGER = :vConGer \
AND DATLAN = :vDatLan");
SQL_DefinirInteiro(CurR048Ctb,"vNumEmp",vEmpAnt);
SQL_DefinirInteiro(CurR048Ctb,"vCodFil",vFilAnt);
SQL_DefinirInteiro(CurR048Ctb,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR048Ctb,"vNumCad",vCadAnt);
SQL_DefinirInteiro(CurR048Ctb,"vCodClc",vClcTDe);
SQL_DefinirAlfa(CurR048Ctb,"vConGer",vConGer);
SQL_DefinirData(CurR048Ctb,"vDatLan",xDatLan);
SQL_AbrirCursor(CurR048Ctb);
SQL_FecharCursor(CurR048Ctb);
SQL_Destruir(CurR048Ctb);
Fim;
/* Retorna valor(es) do CLC Desconto para atender MP-927 */
SQL_Criar(CurR048Ctb);
SQL_UsarAbrangencia(CurR048Ctb,0);
SQL_USARSQLSENIOR2(CurR048Ctb,0);
SQL_DefinirComando(CurR048Ctb,"SELECT SUM(C.VALLAN) VALLAN \
FROM R048CTB C \
WHERE C.NUMEMP = :vNumEmp \
AND C.TIPCOL = :vTipCol \
AND C.NUMCAD = :vNumCad \
AND C.CODCLC = :vClcDCV \
AND C.CONGER = :vConGer \
AND C.DATLAN < :vPerRef \
AND C.DATLAN > :vDatLan \
AND NOT EXISTS (SELECT B.CODCLC CODCLC \
FROM R048CTB B \
WHERE B.NUMEMP = C.NUMEMP \
AND B.TIPCOL = C.TIPCOL \
AND B.NUMCAD = C.NUMCAD \
AND B.CODCLC = :vClcTCr \
AND B.CONGER = C.CONGER \
AND B.DATLAN >= :vIniPer \
AND B.DATLAN <= :vFimPer)");
SQL_DefinirInteiro(CurR048Ctb,"vNumEmp",vEmpAnt);
SQL_DefinirInteiro(CurR048Ctb,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR048Ctb,"vNumCad",vCadAnt);
SQL_DefinirInteiro(CurR048Ctb,"vClcDCV",vClcDCV);
SQL_DefinirInteiro(CurR048Ctb,"vClcTCr",vClcTCr);
SQL_DefinirAlfa(CurR048Ctb,"vConGer",vConGer);
SQL_DefinirData(CurR048Ctb,"vPerRef",vPerRef);
SQL_DefinirData(CurR048Ctb,"vDatLan",vDatLan);
SQL_DefinirData(CurR048Ctb,"vIniPer",vIniPer);
SQL_DefinirData(CurR048Ctb,"vFimPer",vFimPer);
SQL_AbrirCursor(CurR048Ctb);
Se (SQL_EOF(CurR048Ctb) = 0)
Inicio
SQL_RetornarFlutuante(CurR048Ctb, "ValLan", xValDCV);
Fim;
SQL_FecharCursor(CurR048Ctb);
SQL_Destruir(CurR048Ctb);
/* Retorna valor(es) do CLC Quitação para atender MP-927 */
SQL_Criar(CurR048Ctb);
SQL_UsarAbrangencia(CurR048Ctb,0);
SQL_USARSQLSENIOR2(CurR048Ctb,0);
SQL_DefinirComando(CurR048Ctb,"SELECT SUM(C.VALLAN) VALLAN \
FROM R048CTB C \
WHERE C.NUMEMP = :vNumEmp \
AND C.TIPCOL = :vTipCol \
AND C.NUMCAD = :vNumCad \
AND C.CODCLC = :vClcQCV \
AND C.CONGER = :vConGer \
AND C.DATLAN < :vPerRef \
AND C.DATLAN > :vDatLan \
AND NOT EXISTS (SELECT B.CODCLC CODCLC \
FROM R048CTB B \
WHERE B.NUMEMP = C.NUMEMP \
AND B.TIPCOL = C.TIPCOL \
AND B.NUMCAD = C.NUMCAD \
AND B.CODCLC = :vClcTDe \
AND B.CONGER = C.CONGER \
AND B.DATLAN >= :vIniPer \
AND B.DATLAN <= :vFimPer)");
SQL_DefinirInteiro(CurR048Ctb,"vNumEmp",vEmpAnt);
SQL_DefinirInteiro(CurR048Ctb,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR048Ctb,"vNumCad",vCadAnt);
SQL_DefinirInteiro(CurR048Ctb,"vClcQCV",vClcQCV);
SQL_DefinirInteiro(CurR048Ctb,"vClcTDe",vClcTDe);
SQL_DefinirAlfa(CurR048Ctb,"vConGer",vConGer);
SQL_DefinirData(CurR048Ctb,"vPerRef",vPerRef);
SQL_DefinirData(CurR048Ctb,"vDatLan",vDatLan);
SQL_DefinirData(CurR048Ctb,"vIniPer",vIniPer);
SQL_DefinirData(CurR048Ctb,"vFimPer",vFimPer);
SQL_AbrirCursor(CurR048Ctb);
Se (SQL_EOF(CurR048Ctb) = 0)
Inicio
SQL_RetornarFlutuante(CurR048Ctb, "VALLAN", xValQCV);
Fim;
SQL_FecharCursor(CurR048Ctb);
SQL_Destruir(CurR048Ctb);
/* Atribui o valor do lançamento do CLC de transferência */
xValLan = xValDCV - xValQCV;
/*---------------- Ajustes de dados a serem contabilizados -----------------*/
Se(xValLan <> 0)
Inicio
Definir Numero tNumEmp;
Definir Numero tTipCol;
Definir Numero tNumCad;
Definir Numero tCodFil;
Definir Numero tCodOem;
Definir Numero tSeqPag;
Definir Numero tTabOrg;
Definir Numero tTabEve;
Definir Numero tCodClc;
Definir Data tDatLan;
Definir Numero tOpcCtb;
Definir Numero tCodCal;
Definir Numero tCodLot;
Definir Numero tSeqLot;
Definir Alfa tDebCre;
Definir Numero tHisPad;
Definir Alfa tCplHis;
Definir Numero tNatDes;
Definir Numero tConFin;
Definir Numero tCodAux;
Definir Alfa tConGer;
Definir Numero tPerRat;
Definir Numero tCodFor;
Definir Numero tClcPdb;
Definir Alfa tNumDoc;
Definir Alfa tNomCon;
Definir Alfa tOriCtb;
Definir Numero tLotSap;
Definir Numero tValLan;
Definir Numero tFilCtb;
Definir Alfa tCcuRat;
Definir Numero tLocRat;
Definir Numero tCodRat;
Definir Alfa tConDeb;
Definir Alfa tConCre;
Definir Numero tRedDeb;
Definir Numero tRedCre;
Definir Numero tFilCtp;
Definir Alfa tCodCcu;
Definir Numero tNumLoc;
Definir Numero tRatPad;
Definir Alfa tConDep;
Definir Alfa tConCrp;
Definir Numero tRedDep;
Definir Numero tRedCrp;
Definir Numero tDefCon;
SQL_Criar(CurR048Ctb);
SQL_UsarAbrangencia(CurR048Ctb,0);
SQL_USARSQLSENIOR2(CurR048Ctb,0);
SQL_DefinirComando(CurR048Ctb, "SELECT C.NUMEMP, \
C.TIPCOL, \
C.NUMCAD, \
C.CODFIL, \
C.CODOEM, \
C.SEQPAG, \
C.TABORG, \
C.TABEVE, \
C.CODCLC, \
C.DATLAN, \
C.OPCCTB, \
C.CODCAL, \
C.CODLOT, \
C.SEQLOT, \
C.DEBCRE, \
C.HISPAD, \
C.CPLHIS, \
C.NATDES, \
C.CONFIN, \
C.CODAUX, \
C.CONGER, \
C.PERRAT, \
C.CODFOR, \
C.CLCPDB, \
C.NUMDOC, \
C.NOMCON, \
C.ORICTB, \
C.LOTSAP, \
C.VALLAN, \
C.FILCTB, \
C.CCURAT, \
C.LOCRAT, \
C.CODRAT, \
C.CONDEB, \
C.CONCRE, \
C.REDDEB, \
C.REDCRE, \
C.FILCTP, \
C.CODCCU, \
C.NUMLOC, \
C.RATPAD, \
C.CONDEP, \
C.CONCRP, \
C.REDDEP, \
C.REDCRP, \
C.DEFCON \
FROM R048CTB C \
WHERE C.NUMEMP = :vNumEmp \
AND C.TIPCOL = :vTipCol \
AND C.NUMCAD = :vNumCad \
AND C.CODCLC = :vCodClc \
AND C.CONGER = :vConGer \
AND C.DATLAN = (SELECT MAX(B.DATLAN) \
FROM R048CTB B \
WHERE B.NUMEMP = C.NUMEMP \
AND B.TIPCOL = C.TIPCOL \
AND B.NUMCAD = C.NUMCAD \
AND B.CODCLC = C.CODCLC \
AND B.CONGER = C.CONGER \
AND B.DATLAN < :vPerRef)");
SQL_DefinirInteiro(CurR048Ctb,"vNumEmp",vEmpAnt);
SQL_DefinirInteiro(CurR048Ctb,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR048Ctb,"vNumCad",vCadAnt);
SQL_DefinirInteiro(CurR048Ctb,"vCodClc",vClcDCV);
SQL_DefinirAlfa(CurR048Ctb,"vConGer",vConGer);
SQL_DefinirData(CurR048Ctb,"vPerRef",vPerRef);
SQL_AbrirCursor(CurR048Ctb);
Se (SQL_EOF(CurR048Ctb) = 0)
Inicio
SQL_RetornarInteiro(CurR048Ctb,"NUMEMP",tNumEmp);
SQL_RetornarInteiro(CurR048Ctb,"TIPCOL",tTipCol);
SQL_RetornarInteiro(CurR048Ctb,"NUMCAD",tNumCad);
SQL_RetornarInteiro(CurR048Ctb,"CODFIL",tCodFil);
SQL_RetornarInteiro(CurR048Ctb,"CODOEM",tCodOem);
SQL_RetornarInteiro(CurR048Ctb,"SEQPAG",tSeqPag);
SQL_RetornarInteiro(CurR048Ctb,"TABORG",tTabOrg);
SQL_RetornarInteiro(CurR048Ctb,"TABEVE",tTabEve);
SQL_RetornarInteiro(CurR048Ctb,"CODCLC",tCodClc);
SQL_RetornarData(CurR048Ctb,"DATLAN",tDatLan);
SQL_RetornarInteiro(CurR048Ctb,"OPCCTB",tOpcCtb);
SQL_RetornarInteiro(CurR048Ctb,"CODCAL",tCodCal);
SQL_RetornarInteiro(CurR048Ctb,"CODLOT",tCodLot);
SQL_RetornarInteiro(CurR048Ctb,"SEQLOT",tSeqLot);
SQL_RetornarAlfa(CurR048Ctb,"DEBCRE",tDebCre);
SQL_RetornarInteiro(CurR048Ctb,"HISPAD",tHisPad);
SQL_RetornarAlfa(CurR048Ctb,"CPLHIS",tCplHis);
SQL_RetornarInteiro(CurR048Ctb,"NATDES",tNatDes);
SQL_RetornarInteiro(CurR048Ctb,"CONFIN",tConFin);
SQL_RetornarInteiro(CurR048Ctb,"CODAUX",tCodAux);
SQL_RetornarAlfa(CurR048Ctb,"CONGER",tConGer);
SQL_RetornarFlutuante(CurR048Ctb,"PERRAT",tPerRat);
SQL_RetornarInteiro(CurR048Ctb,"CODFOR",tCodFor);
SQL_RetornarInteiro(CurR048Ctb,"CLCPDB",tClcPdb);
SQL_RetornarAlfa(CurR048Ctb,"NUMDOC",tNumDoc);
SQL_RetornarAlfa(CurR048Ctb,"NOMCON",tNomCon);
SQL_RetornarAlfa(CurR048Ctb,"ORICTB",tOriCtb);
SQL_RetornarInteiro(CurR048Ctb,"LOTSAP",tLotSap);
SQL_RetornarFlutuante(CurR048Ctb,"VALLAN",tValLan);
SQL_RetornarInteiro(CurR048Ctb,"FILCTB",tFilCtb);
SQL_RetornarAlfa(CurR048Ctb,"CCURAT",tCcuRat);
SQL_RetornarInteiro(CurR048Ctb,"LOCRAT",tLocRat);
SQL_RetornarInteiro(CurR048Ctb,"CODRAT",tCodRat);
SQL_RetornarAlfa(CurR048Ctb,"CONDEB",tConDeb);
SQL_RetornarAlfa(CurR048Ctb,"CONCRE",tConCre);
SQL_RetornarInteiro(CurR048Ctb,"REDDEB",tRedDeb);
SQL_RetornarInteiro(CurR048Ctb,"REDCRE",tRedCre);
SQL_RetornarInteiro(CurR048Ctb,"FILCTP",tFilCtp);
SQL_RetornarAlfa(CurR048Ctb,"CODCCU",tCodCcu);
SQL_RetornarInteiro(CurR048Ctb,"NUMLOC",tNumLoc);
SQL_RetornarInteiro(CurR048Ctb,"RATPAD",tRatPad);
SQL_RetornarAlfa(CurR048Ctb,"CONDEP",tConDep);
SQL_RetornarAlfa(CurR048Ctb,"CONCRP",tConCrp);
SQL_RetornarInteiro(CurR048Ctb,"REDDEP",tRedDep);
SQL_RetornarInteiro(CurR048Ctb,"REDCRP",tRedCrp);
SQL_RetornarInteiro(CurR048Ctb,"DEFCON",tDefCon);
Fim;
SQL_FecharCursor(CurR048Ctb);
SQL_Destruir(CurR048Ctb);
/*---------------------- INVERTER CONTAS CONTÁBEIS -----------------------*/
Definir Alfa xDebCre;
Definir Alfa xConCre;
Definir Alfa xConDeb;
Definir Alfa xConCrP;
Definir Alfa xConDeP;
Definir Numero xRedCre;
Definir Numero xRedDeb;
Definir Numero xRedCrP;
Definir Numero xRedDeP;
Definir Numero xDefCon;
/* Inverte dados do lançamentos contábeis */
Se (xValLan < 0)
Inicio
xValLan = xValLan * -1;
Se(R048Ctb.DebCre = "C")
Inicio
xDebCre = "D";
Fim;
Senao
Inicio
xDebCre = "C";
Fim;
/* Trocar as contas de crédito e débito. */
xConCre = R048Ctb.ConDeb;
xConDeb = R048Ctb.ConCre;
xConCrP = R048Ctb.ConDeP;
xConDeP = R048Ctb.ConCrP;
xRedCre = R048Ctb.RedDeb;
xRedDeb = R048Ctb.RedCre;
xRedCrP = R048Ctb.RedDeP;
xRedDeP = R048Ctb.RedCrP;
/* Atribuir os valores da contabilização. */
R048Ctb.DebCre = xDebCre;
R048Ctb.ConCre = xConCre;
R048Ctb.ConDeb = xConDeb;
R048Ctb.ConCrP = xConCrP;
R048Ctb.ConDeP = xConDeP;
R048Ctb.RedCre = xRedCre;
R048Ctb.RedDeb = xRedDeb;
R048Ctb.RedCrP = xRedCrP;
R048Ctb.RedDeP = xRedDeP;
Fim;
R048Ctb.ValLan = xValLan;
/*---------------------- INSERIR REGISTROS CONTÁBEIS -----------------------*/
/* Inverte o Tipo Lançamento */
Se (R048Ctb.DebCre = "C")
Inicio
xDebCre = "D";
Fim;
Senao
Inicio
xDebCre = "C";
Fim;
/* Insere dados do CLC de tranferência saída */
SQL_Criar(CurR048Ctb);
SQL_UsarAbrangencia(CurR048Ctb,0);
SQL_USARSQLSENIOR2(CurR048Ctb,0);
SQL_DefinirComando(CurR048Ctb,"INSERT INTO R048CTB (NUMEMP, TIPCOL, NUMCAD, CODFIL, CODOEM, SEQPAG, TABORG, TABEVE, CODCLC, \
DATLAN, OPCCTB, CODCAL, CODLOT, SEQLOT, DEBCRE, HISPAD, CPLHIS, NATDES, \
CONFIN, CODAUX, CONGER, PERRAT, CODFOR, CLCPDB, NUMDOC, NOMCON, ORICTB, \
LOTSAP, VALLAN, FILCTB, CCURAT, LOCRAT, CODRAT, CONDEB, CONCRE, REDDEB, \
REDCRE, FILCTP, CODCCU, NUMLOC, RATPAD, CONDEP, CONCRP, REDDEP, REDCRP, DEFCON) \
VALUES (:vNumEmp, :vTipCol, :vNumCad, :vCodFil, :vCodOem, :vSeqPag, :vTabOrg, :vTabEve, \
:vCodClc, :vDatLan, :vOpcCtb, :vCodCal, :vCodLot, :vSeqLot, :vDebCre, :vHisPad, \
:vCplHis, :vNatDes, :vConFin, :vCodAux, :vConGer, :vPerRat, :vCodFor, :vClcPdb, \
:vNumDoc, :vNomCon, :vOriCtb, :vLotSap, :vValLan, :vFilCtb, :vCcuRat, :vLocRat, \
:vCodRat, :vConDeb, :vConCre, :vRedDeb, :vRedCre, :vFilCtp, :vCodCcu, :vNumLoc, \
:vRatPad, :vConDep, :vConCrp, :vRedDep, :vRedCrp, :vDefCon)");
SQL_DefinirInteiro(CurR048Ctb,"vNumEmp",vEmpAnt);
SQL_DefinirInteiro(CurR048Ctb,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR048Ctb,"vNumCad",vCadAnt);
SQL_DefinirInteiro(CurR048Ctb,"vCodFil",vFilAnt);
SQL_DefinirInteiro(CurR048Ctb,"vCodOem",tCodOem);
SQL_DefinirInteiro(CurR048Ctb,"vSeqPag",R048Ctb.SeqPag);
SQL_DefinirInteiro(CurR048Ctb,"vTabOrg",tTabOrg);
SQL_DefinirInteiro(CurR048Ctb,"vTabEve",tTabEve);
SQL_DefinirInteiro(CurR048Ctb,"vCodClc",R048Ctb.CodClc);
SQL_DefinirData(CurR048Ctb,"vDatLan",R048Ctb.DatLan);
SQL_DefinirInteiro(CurR048Ctb,"vOpcCtb",R048Ctb.OpcCtb);
SQL_DefinirInteiro(CurR048Ctb,"vCodCal",R048Ctb.CodCal);
SQL_DefinirInteiro(CurR048Ctb,"vCodLot",R048Ctb.CodLot);
SQL_DefinirInteiro(CurR048Ctb,"vSeqLot",R048Ctb.SeqLot);
SQL_DefinirAlfa(CurR048Ctb,"vDebCre",xDebCre);
SQL_DefinirInteiro(CurR048Ctb,"vHisPad",R048Ctb.HisPad);
SQL_DefinirAlfa(CurR048Ctb,"vCplHis",R048Ctb.CplHis);
SQL_DefinirInteiro(CurR048Ctb,"vNatDes",R048Ctb.NatDes);
SQL_DefinirInteiro(CurR048Ctb,"vConFin",tConFin);
SQL_DefinirInteiro(CurR048Ctb,"vCodAux",tCodAux);
SQL_DefinirAlfa(CurR048Ctb,"vConGer",vConGer);
SQL_DefinirFlutuante(CurR048Ctb,"vPerRat",tPerRat);
SQL_DefinirInteiro(CurR048Ctb,"vCodFor",tCodFor);
SQL_DefinirInteiro(CurR048Ctb,"vClcPdb",R048Ctb.ClcPDb);
SQL_DefinirAlfa(CurR048Ctb,"vNumDoc",R048Ctb.NumDoc);
SQL_DefinirAlfa(CurR048Ctb,"vNomCon",R048Ctb.NomCon);
SQL_DefinirAlfa(CurR048Ctb,"vOriCtb",R048Ctb.OriCtb);
SQL_DefinirInteiro(CurR048Ctb,"vLotSap",R048Ctb.LotSAP);
SQL_DefinirFlutuante(CurR048Ctb,"vValLan",R048Ctb.ValLan);
SQL_DefinirInteiro(CurR048Ctb,"vFilCtb",vFilAnt);
SQL_DefinirAlfa(CurR048Ctb,"vCcuRat",tCcuRat);
SQL_DefinirInteiro(CurR048Ctb,"vLocRat",tLocRat);
SQL_DefinirInteiro(CurR048Ctb,"vCodRat",tCodRat);
SQL_DefinirAlfa(CurR048Ctb,"vConDeb",R048Ctb.ConCre);
SQL_DefinirAlfa(CurR048Ctb,"vConCre",R048Ctb.ConDeb);
SQL_DefinirInteiro(CurR048Ctb,"vRedDeb",R048Ctb.RedCre);
SQL_DefinirInteiro(CurR048Ctb,"vRedCre",R048Ctb.RedDeb);
SQL_DefinirInteiro(CurR048Ctb,"vFilCtP",vFilAnt);
SQL_DefinirAlfa(CurR048Ctb,"vCodCcu",tCodCcu);
SQL_DefinirInteiro(CurR048Ctb,"vNumLoc",tNumLoc);
SQL_DefinirInteiro(CurR048Ctb,"vRatPad",tRatPad);
SQL_DefinirAlfa(CurR048Ctb,"vConDeP",R048Ctb.ConCrP);
SQL_DefinirAlfa(CurR048Ctb,"vConCrP",R048Ctb.ConDeP);
SQL_DefinirInteiro(CurR048Ctb,"vRedDeP",R048Ctb.RedCrP);
SQL_DefinirInteiro(CurR048Ctb,"vRedCrP",R048Ctb.RedDeP);
SQL_DefinirInteiro(CurR048Ctb,"vDefCon",R048Ctb.DefCon);
SQL_AbrirCursor(CurR048Ctb);
SQL_FecharCursor(CurR048Ctb);
SQL_Destruir(CurR048Ctb);
/* Alterar Contas Contábeis */
Se (R048Ctb.DebCre = "C")
Inicio
xDebCre = "C";
xConCre = vConCtD;
xConDeb = R048Ctb.ConDeb;
xConCrP = vConCtD;
xConDeP = R048Ctb.ConDeP;
xRedCre = R048Ctb.RedCre;
xRedDeb = R048Ctb.RedDeb;
xRedCrP = R048Ctb.RedCrP;
xRedDeP = R048Ctb.RedDeP;
xDefCon = 6;
Fim;
Senao
Inicio
xDebCre = "D";
xConCre = R048Ctb.ConCre;
xConDeb = vConCtD;
xConCrP = R048Ctb.ConCrP;
xConDeP = vConCtD;
xRedCre = R048Ctb.RedCre;
xRedDeb = R048Ctb.RedDeb;
xRedCrP = R048Ctb.RedCrP;
xRedDeP = R048Ctb.RedDeP;
xDefCon = 6;
Fim;
/* Insere dados CLC de tranferência saída */
SQL_Criar(CurR048Ctb);
SQL_UsarAbrangencia(CurR048Ctb,0);
SQL_USARSQLSENIOR2(CurR048Ctb,0);
SQL_DefinirComando(CurR048Ctb,"INSERT INTO R048CTB (NUMEMP, TIPCOL, NUMCAD, CODFIL, CODOEM, SEQPAG, TABORG, TABEVE, CODCLC, \
DATLAN, OPCCTB, CODCAL, CODLOT, SEQLOT, DEBCRE, HISPAD, CPLHIS, NATDES, \
CONFIN, CODAUX, CONGER, PERRAT, CODFOR, CLCPDB, NUMDOC, NOMCON, ORICTB, \
LOTSAP, VALLAN, FILCTB, CCURAT, LOCRAT, CODRAT, CONDEB, CONCRE, REDDEB, \
REDCRE, FILCTP, CODCCU, NUMLOC, RATPAD, CONDEP, CONCRP, REDDEP, REDCRP, DEFCON) \
VALUES (:vNumEmp, :vTipCol, :vNumCad, :vCodFil, :vCodOem, :vSeqPag, :vTabOrg, :vTabEve, \
:vCodClc, :vDatLan, :vOpcCtb, :vCodCal, :vCodLot, :vSeqLot, :vDebCre, :vHisPad, \
:vCplHis, :vNatDes, :vConFin, :vCodAux, :vConGer, :vPerRat, :vCodFor, :vClcPdb, \
:vNumDoc, :vNomCon, :vOriCtb, :vLotSap, :vValLan, :vFilCtb, :vCcuRat, :vLocRat, \
:vCodRat, :vConDeb, :vConCre, :vRedDeb, :vRedCre, :vFilCtp, :vCodCcu, :vNumLoc, \
:vRatPad, :vConDep, :vConCrp, :vRedDep, :vRedCrp, :vDefCon)");
SQL_DefinirInteiro(CurR048Ctb,"vNumEmp",vEmpAnt);
SQL_DefinirInteiro(CurR048Ctb,"vTipCol",vTipCol);
SQL_DefinirInteiro(CurR048Ctb,"vNumCad",vCadAnt);
SQL_DefinirInteiro(CurR048Ctb,"vCodFil",vFilAnt);
SQL_DefinirInteiro(CurR048Ctb,"vCodOem",tCodOem);
SQL_DefinirInteiro(CurR048Ctb,"vSeqPag",R048Ctb.SeqPag);
SQL_DefinirInteiro(CurR048Ctb,"vTabOrg",tTabOrg);
SQL_DefinirInteiro(CurR048Ctb,"vTabEve",tTabEve);
SQL_DefinirInteiro(CurR048Ctb,"vCodClc",vClcTDe);
SQL_DefinirData(CurR048Ctb,"vDatLan",R048Ctb.DatLan);
SQL_DefinirInteiro(CurR048Ctb,"vOpcCtb",R048Ctb.OpcCtb);
SQL_DefinirInteiro(CurR048Ctb,"vCodCal",R048Ctb.CodCal);
SQL_DefinirInteiro(CurR048Ctb,"vCodLot",R048Ctb.CodLot);
SQL_DefinirInteiro(CurR048Ctb,"vSeqLot",R048Ctb.SeqLot);
SQL_DefinirAlfa(CurR048Ctb,"vDebCre",xDebCre);
SQL_DefinirInteiro(CurR048Ctb,"vHisPad",R048Ctb.HisPad);
SQL_DefinirAlfa(CurR048Ctb,"vCplHis",R048Ctb.CplHis);
SQL_DefinirInteiro(CurR048Ctb,"vNatDes",R048Ctb.NatDes);
SQL_DefinirInteiro(CurR048Ctb,"vConFin",tConFin);
SQL_DefinirInteiro(CurR048Ctb,"vCodAux",tCodAux);
SQL_DefinirAlfa(CurR048Ctb,"vConGer",vConGer);
SQL_DefinirFlutuante(CurR048Ctb,"vPerRat",tPerRat);
SQL_DefinirInteiro(CurR048Ctb,"vCodFor",tCodFor);
SQL_DefinirInteiro(CurR048Ctb,"vClcPdb",R048Ctb.ClcPdb);
SQL_DefinirAlfa(CurR048Ctb,"vNumDoc",R048Ctb.NumDoc);
SQL_DefinirAlfa(CurR048Ctb,"vNomCon",R048Ctb.NomCon);
SQL_DefinirAlfa(CurR048Ctb,"vOriCtb",R048Ctb.OriCtb);
SQL_DefinirInteiro(CurR048Ctb,"vLotSap",R048Ctb.LotSap);
SQL_DefinirFlutuante(CurR048Ctb,"vValLan",R048Ctb.ValLan);
SQL_DefinirInteiro(CurR048Ctb,"vFilCtb",vFilAnt);
SQL_DefinirAlfa(CurR048Ctb,"vCcuRat",tCcuRat);
SQL_DefinirInteiro(CurR048Ctb,"vLocRat",tLocRat);
SQL_DefinirInteiro(CurR048Ctb,"vCodRat",tCodRat);
SQL_DefinirAlfa(CurR048Ctb,"vConDeb",xConDeb);
SQL_DefinirAlfa(CurR048Ctb,"vConCre",xConCre);
SQL_DefinirInteiro(CurR048Ctb,"vRedDeb",xRedDeb);
SQL_DefinirInteiro(CurR048Ctb,"vRedCre",xRedCre);
SQL_DefinirInteiro(CurR048Ctb,"vFilCtp",vFilAnt);
SQL_DefinirAlfa(CurR048Ctb,"vCodCcu",tCodCcu);
SQL_DefinirInteiro(CurR048Ctb,"vNumLoc",tNumLoc);
SQL_DefinirInteiro(CurR048Ctb,"vRatPad",tRatPad);
SQL_DefinirAlfa(CurR048Ctb,"vConDep",xConDeP);
SQL_DefinirAlfa(CurR048Ctb,"vConCrp",xConCrP);
SQL_DefinirInteiro(CurR048Ctb,"vRedDep",xRedDeP);
SQL_DefinirInteiro(CurR048Ctb,"vRedCrp",xRedCrP);
SQL_DefinirInteiro(CurR048Ctb,"vDefCon",xDefCon);
SQL_AbrirCursor(CurR048Ctb);
SQL_FecharCursor(CurR048Ctb);
SQL_Destruir(CurR048Ctb);
Fim;
Fim;
- Ajustar as informações da regra, alterando os campos mencionados a seguir, conforme indicado na imagem:
- vIniPer: data de início do período de transferências. Pode-se utilizar o IniCmp (Data de início da contabilização) ou vDatLan (28/04/2021, data de início da MP 1046/2021);
- vFimPer: data de fim do período de transferências. Pode-se utilizar FimCmp (Data de fim contabilização) ou PerRef (1º dia do período de referência da contabilização);
- vClcDCV: CLC desconto correspondente ao saldo que deseja transferir, configurado conforme documentação MP 1046/2021;
- vClcQCV: CLC quitação correspondente ao saldo que deseja transferir, configurado conforme documentação MP 1046/2021;
- vClcTCr: CLC novo criado para crédito de transferência correspondente ao saldo que deseja transferir;
- vClcTDe: CLC novo criado para débito transferência correspondente ao saldo que deseja transferir;
- vConCtC: código da Conta Contábil configurado com Nível Lançamento igual a C - Centro de Custo ou I - Individual e Tipo Base igual Regra;
- vConCtD: código da Conta Contábil configurado com Nível Lançamento igual T - Total Empresa e Tipo Base igual CLC's, correspondente ao saldo que deseja transferir.
Ajustes para transferências realizadas no período de competência da contabilização:
Ajustes para transferências realizadas desde o início da MP 1046/2021:
Observação
Quando realizar a contabilização, serão gerados os CLCs na empresa e/ou filial de origem e destino da transferência do colaborador, para representar saída e entrada de valores transferidos.
Para quitar o evento de 1/3 de férias que não foi pago na data da competência do recibo ou da ficha financeira, deverão ser criados:
Para o pagamento do evento de 1/3 de férias não quitado na concessão das férias, foi criado o relatório modelo 002 – Lançamentos Pagamento 1/3 Férias Covid-19 (FPLV002.LAN).
Caminho: Cálculos / Lançamentos / Variáveis / Listar.
O relatório irá lançar um evento de quitação na tela: Manutenção Lançamentos p/ Colaborador (Caminho: Cálculos / Lançamentos / Variáveis / Manutenção).
Observação
O campo Nível de lançamento pode ser adequado de acordo com o entendimento do contador da empresa.
Importante
Para os clientes que utilizam Rateio, o nível de lançamento do CLC 71 deve ser por Centro de Custo para que a Contabilização seja realizada corretamente.
O Evento de 1/3 de Férias Covid-19 poderá ser pago no mesmo prazo do 13º Salário, conforme a MP 1046/2021, ou seja, 20/12/2021.
Como tratar no Sistema Senior:
- Este evento Não poderá ser lançado na Folha de 13º Salário do tipo 32 - 13º Salário Integral, porque o eSocial não aceita o tipo de incidência dessa rubrica.
- Para pagar em Folha mensal, tipo 11 - Pagamento Mensal, deverá ser efetuado até a competência 11/2021.
Caso a empresa opte por pagar o valor de 1/3 de Férias do Covid-19 após o pagamento da Folha mensal 11/2021, o pagamento deverá ser feito em uma Folha específica com data de pagamento até dia 20/12/2021, e deverá utilizar a Folha de cálculo do tipo 93 - Especiais, exclusiva para esse pagamento.
Verifique o cálculo de INSS e IRRF:
INSS Férias
- Ao calcular a Folha 93 - Especiais, os valores de recibo de férias com data de pagamento anterior à data de pagamento dessa Folha, deverão ser considerados para a base de cálculo;
- Ao realizar o cálculo do recibo de férias com data de pagamento após a data de pagamento da Folha 93 - Especiais, os valores de base de cálculo e limitação do teto do mês deverão ser considerados.
IR de Férias
- Ao calcular o recibo de férias com data de pagamento igual ou após a data do pagamento do cálculo 93 - Especiais, o recibo apresentará os valores de IR da Folha 93 - Especiais;
- Ao calcular a Folha 93 - Especiais, os valores de recibo de férias com data de pagamento anterior ao da data de pagamento dessa folha deverão ser considerados.
Importante
O lançamento do evento deve seguir o mesmo processo já documentado no tópico referente à MP 1046/2021, item Pagamento evento 1/3 de férias Covid-19.
Acompanhe o calendário de liberações.
Recibo com adiantamento e pagamento do evento de 1/3 futuro:
O sistema identificava que o recibo calculado era referente à MP 1046/2021 através do valor 0,01 informado no campo % Provisão Desconto. Portanto, para assumir o cálculo de recibo de férias padrão, basta não informar o valor 0,01 neste campo.
Novo evento de 1/3 Covid-19:
A regra especial do novo evento de 1/3 Covid-19 precisa ser alterada para considerar a data de vigência da MP 1046/2021.
Regra ajustada:
Definir Numero xNumEmp; Definir Numero xTipCol; Definir Numero xNumCad; Definir Numero xCodEve; Definir Numero xCodTab; Definir Numero xAchou; Definir data dIniPer; Definir data dIniFer; Definir data dIniCovid; Definir data dFimCovid; MontaData (22,03,2020,dIniCovid); MontaData (19,07,2020,dFimCovid); @ Calculo refere ao recibo de ferias Normal e Coletiva@ Se ((tipCal >= 51) e (tipCal <= 53)) inicio @ Caso não seja referente a MP COVID19 zera o evento@ Se (((R040FEM.GerAdt = 'S') e (R040FEM.PrvDes <> 0.01)) ou ((R040FEM.GerAdt = 'N') e ((R040FEM.IniFer < dIniCovid) ou (R040FEM.IniFer > dFimCovid)))) valEvt = 0; fim senao Se (tipCal = 54)@ Integração das ferias com a Folha@ inicio xNumEmp = r034fun.NumEmp; xTipCol = r034fun.TipCol; xNumCad = r034fun.NumCad; xCodEve = codEvt; dIniPer = r040fem.IniPer; dIniFer = r040fem.IniFer; @ busca Recibo de ferias Colaborador @ Definir cursor cur_R040Fem; cur_R040Fem.SQL "select PrvDes, IniFer, GerAdt from R040Fem \ Where NumEmp = :xNumEmp and TipCol = :xTipCol and NumCad = :xNumCad and IniPer = :dIniPer and IniFer = :dIniFer"; cur_R040Fem.AbrirCursor(); Se (cur_R040Fem.Achou) inicio @ Caso não seja referente a MP COVID19 zera o evento@ Se (((cur_R040Fem.GerAdt = 'S') e (cur_R040Fem.PrvDes <> 0.01)) ou ((cur_R040Fem.GerAdt = 'N') e ((cur_R040Fem.IniFer < dIniCovid) ou (cur_R040Fem.IniFer > dFimCovid)))) inicio valEvt = 0; fim senao inicio @ Se recibo com adiantamtamento e for MP COVID19 @ Se ((cur_R040Fem.GerAdt = 'S') e (cur_R040Fem.PrvDes = 0.01)) inicio xAchou = 0; Definir cursor cur_R030Emp; cur_R030Emp.SQL "select CalDpn, TabEve from R030Emp Where NumEmp = :xNumEmp"; cur_R030Emp.AbrirCursor(); @Busca assinalmento da empresa pra a rotina de Diferenca Positiva/Negativa de Ferias@ Se (cur_R030Emp.Achou) Inicio @Caso utilize a rotina mas não tenha evento configurado trata valor no evento normal de diferença @ se (cur_R030Emp.CalDpn = 'S') inicio xCodTab = cur_R030Emp.TabEve; Definir cursor cur_R008Evc; cur_R008Evc.SQL "select * from R008Evc Where CodTab = :xCodTab and CodEve = :xCodEve and EveDpo > 0"; cur_R008Evc.AbrirCursor(); Se (cur_R008Evc.Achou) inicio xAchou = 1; fim cur_R008Evc.FecharCursor(); fim fim cur_R030Emp.FecharCursor(); @ Caso não use a rotina de Diferenca Positiva/Negativa ou nao tenha o evento calculado, busca o valor original calculado no recibo de ferias@ se (xAchou = 0) inicio Definir cursor cur_R040Fev; cur_R040Fev.SQL "select ValEve from R040Fev \ Where NumEmp = :xNumEmp and TipCol = :xTipCol and NumCad = :xNumCad and IniPer = :dIniPer and IniFer = :dIniFer and CodEve = :xCodEve"; cur_R040Fev.AbrirCursor(); Se (cur_R040Fev.Achou) inicio valEvt = cur_R040Fev.ValEve; fim cur_R040Fev.FecharCursor(); fim fim fim fim cur_R040Fem.FecharCursor(); fim senao inicio valEvt = 0; fim;
A MEDIDA PROVISÓRIA Nº 1.046, DE 27 DE ABRIL DE 2021, além contemplar o que dispôs a MP 927/2020, ou seja, antecipação das férias mesmo que um colaborador ainda não tenha completado o período de 12 (doze) meses, a contar da data de sua admissão, regulamentou que as férias antecipadas em sua vigência (28/04/21 a 25/08/21) possam ser descontadas das verbas rescisórias devidas ao colaborador em caso de pedido de demissão. Sendo assim, criamos o campo Descontar Férias Antecipadas, na tela Causas Demissão, que considera esses dias como férias indenizadas sem tributação de INSS e IR. Também criamos a documentação referente à Regra de sistema 75 - Desconto de Férias Antecipadas Covid-19 e à característica 42H - Desconto de Férias Antecipadas Covid-19.
Importante
- Caso o empregador entenda que este desconto é passível de compensação da tributação percebida na concessão do recibo de férias, este deverá ajustar as incidências do evento. É imprescindível que na rescisão tenha base positiva de INSS e IR para compensar este valor, pois no eSocial não é possível enviar bases com incidência negativa.
- Se acaso o desligamento do colaborador for em 2021 e a empresa ainda não tenha quitado o 1/3 de férias, como permitido pela MP 1046/2021, o cliente deverá lançar o valor do 1/3 conforme o evento do recibo de férias, seguindo a documentação da MP 1046/2021. Assim, a Regra de sistema 75 - Desconto de Férias Antecipadas deverá lançar o evento de desconto dos dias ainda não adquiridos proporcionalmente.
O pagamento da remuneração da antecipação das férias na forma do art. 11 poderá ser efetuado até o quinto dia útil do mês subsequente ao início do gozo das férias, hipótese em que não se aplica o disposto no art. 145 da Consolidação das Leis do Trabalho, aprovada pelo Decreto-Lei nº 5.452, de 1943.
O que pode ser feito no Gestão de Pessoas | HCM:
O usuário deverá informar a data de pagamento na tela de cálculo do recibo. Dessa forma, o sistema irá calcular os dias de férias e o desconto de adiantamento de férias em cada folha, conforme os dias de cada competência. Já o IRRF será gerado conforme a data de pagamento informado no momento da geração.
Na hipótese de rescisão do contrato de trabalho, os valores das férias ainda não usufruídas serão pagos juntamente com as verbas rescisórias devidas.
Parágrafo único. Na hipótese de período aquisitivo não adquirido, as férias antecipadas e usufruídas serão descontadas das verbas rescisórias devidas ao empregado no caso de pedido de demissão.
O que pode ser feito no Gestão de Pessoas | HCM:
A MEDIDA PROVISÓRIA Nº 1.046, DE 27 DE ABRIL DE 2021, além contemplar o que dispôs a MP 927/2020, ou seja, antecipação das férias mesmo que um colaborador ainda não tenha completado o período de 12 (doze) meses, a contar da data de sua admissão, regulamentou que as férias antecipadas em sua vigência (28/04/21 a 25/08/21) possam ser descontadas das verbas rescisórias devidas ao colaborador em caso de pedido de demissão. Sendo assim, criamos o campo Descontar Férias Antecipadas, na tela Causas Demissão, que considera esses dias como férias indenizadas sem tributação de INSS e IR. Também criamos a documentação referente à Regra de sistema 75 - Desconto de Férias Antecipadas Covid-19 e à característica 42H - Desconto de Férias Antecipadas Covid-19.
Importante
- Caso o empregador entenda que este desconto é passível de compensação da tributação percebida na concessão do recibo de férias, este deverá ajustar as incidências do evento. É imprescindível que na rescisão tenha base positiva de INSS e IR para compensar este valor, pois no eSocial não é possível enviar bases com incidência negativa.
- Se acaso o desligamento do colaborador for em 2021 e a empresa ainda não tenha quitado o 1/3 de férias, como permitido pela MP 1046/2021, o cliente deverá lançar o valor do 1/3 conforme o evento do recibo de férias, seguindo a documentação da MP 1046/2021. Assim, a Regra de sistema 75 - Desconto de Férias Antecipadas deverá lançar o evento de desconto dos dias ainda não adquiridos proporcionalmente.
A Nota Técnica nº 5/2022 e o Sistema Senior
Com a publicação da Nota Técnica nº 5/2022, foram criados na Tabela 18 - Motivos de Afastamento do eSocial, dois novos códigos para o tratamento dos afastamentos previstos pela MP nº 1.116/2022:
- "41 - Qualificação - Afastamento por suspensão do contrato de acordo com o art. 17 da MP 1.116/2022"; e
- "42 - Qualificação - Afastamento por suspensão do contrato de acordo com o art. 19 da MP 1.116/2022".
Para esses afastamentos, serão incluídos os novos códigos no sistema e deverá ser cadastrada uma situação para cada código do eSocial que o cliente vier a utilizar.
O tipo da situação deverá ser "99", indicando uma característica de horas disponíveis, que obrigará também o cadastro dos eventos na tabela de eventos para estas características. Para os outros campos do cadastro de situação e dos novos eventos, deverá ser preenchido conforme o entendimento e processo do cliente.
Ajuda Compensatória (MP nº 1.116/2022) e o Sistema Senior
A Medida Provisória nº 1.116/2022 prevê que, além da bolsa de qualificação profissional, durante o período de suspensão do contrato de trabalho, o empregador poderá conceder à empregada/empregado ajuda compensatória mensal, sem natureza salarial.
Para o pagamento desta ajuda compensatória, deverá ser criado um novo evento com característica "39Y". Esse evento poderá ser cadastrado nos lançamentos (fixo ou variável) com o valor definido pelo empregador.
Nota
Para mais informações, acesse a MP nº 1.116/2022 completa.
Fonte: DOU e Agência Câmara de Notícias