Sugestão de Fórmula para Calcular e Distribuir o Resíduo

A fórmula apresentada abaixo é um resultado do cenário descrito no documento oficial Como Utilizar o Novo Resíduo, onde o usuário do sistema poderá calcular o valor de Correção Monetária (CM) e Juros Contratual deixando de aplicar os valores nos meses correspondentes, ficando assim a aplicação destes valores pendentes para quando desejar, de acordo com o contrato, está pratica é denominada no mercado como resíduo. Caso o seu cenário seja o mesmo fique a vontade para utilizar a fórmula, caso não, poderá utilizar a mesma como base para implementar a fórmula como desejar.

A manutenção da fórmula é de responsabilidade do cliente

Formula para importar: JUROS RESÍDUO

Texto da Fórmula Juros de Resíduo

/*ESTE MODELO DE RESÍDUO CALCULA O VALOR DO RESÍDUO SOBRE O SALDO DEVEDOR TEÓRICO
*PARA A PARCELA QUE TEM O VENCIMENTO NO MÊS/ANO DO REAJUSTE E ARMANEZA NELA
*O VALOR CALCULADO. ESTE CÁLCULO É FEITO ATÉ A DATA DE ANIVERSÁRIO DO REAJUSTE.
*NO ANIVERSÁRIO DO REAJUSTE, O VALOR DE RESÍDUO, CM/JUROS, DAS 12 ULTIMAS PARCELAS SÃO
*DISTRIBUIDOS PARA AS PARCELAS SUPERIORES/IGUAL A DATA DESTE REAJUSTE. FAZ ISSO ATÉ O ÚLTIMO
*ANIVERSÁRIO DO CONTRATO.
***PARA DISTRIBUIR O RESIDUO DO ULTIMO PERIODO DO CONTRATO, A BAIXA DA ULTIMA PARCELA TEM QUE SER FEITA.
*PRE-REQUISTO: 1- TEM QUE TER CADASTRO O PLANO COM O COMPONNETE DO TIPO RESÍDUO- 10
* 2- TER UM COMPONENTE DO TIPO PRINCIPAL COM O TIPO PARCELA DE RESÍDUO-10 PARA RECEBER O ÚLTIMO RESÍDUO*/
DECL INDICEJUROS, VALORJUROSAPLICADO, SALDODEVEDORVENDA, NUMPARCPRIMEIRONIVER;
DECL VALORRESIDUOTOTALULTIMOANIVERSARIO, VALORRESIDUOMES, PRAZODISTIBUICAO;
DECL NUMPARCLIMPAR, DATAGERRES, APENASCOMPILAR, INDEXPARCELARESIDUO, DATABASEVENCIMENTO, VALORRESIDUOANTESVENCIMENTO;
SETVAR(VALORJUROSAPLICADO, TABPARCELA('VRJUROS', 'V'));
SETVAR(VALORRESIDUOTOTALULTIMOANIVERSARIO, 0);
SETVAR(VALORRESIDUOANTESVENCIMENTO, 0 );
SETVAR(DATABASEVENCIMENTO, PRIMEIRODIAMES(REXREGRACOMPONENTEVENDA(2,'DATINICALC')));
SE PRIMEIRODIAMES(DATREAJUSTE) >= PRIMEIRODIAMES(DATBASE) ENTAO /* REAJUSTAR SOMENTE APÓS O DATA BASE*/
/*CÁLCULO DO RESÍDUO SOBRE O SALDO DEVEDOR GERAL - SOMENTE PARA O VENCIMENTO QUE TENHA A MESMA DATA DO REAJUSTE,
OU SE O REAJUSTE FOR ANTES DO PRIMEIRO VENCIMENTO DO PLANO E O DATA BASE ESTIVER DENTRO DO PERÍODO DE REAJUSE (CARÊNCIA)
ANIVERSÁRIO MÊS 7 E O PRIMEIRO VENCIMENTO MÊS 9*/
SE (PRIMEIRODIAMES(DATREAJUSTE) = PRIMEIRODIAMES(DATVCTO)) OU
(DATABASEVENCIMENTO >= PRIMEIRODIAMES(TABREGRA('DATABASE', 'D')) E
PRIMEIRODIAMES(DATREAJUSTE) < DATABASEVENCIMENTO E
DATABASEVENCIMENTO= PRIMEIRODIAMES(DATVCTO)) ENTAO
SETVAR(INDICEJUROS, TABREGRA('VR_TX_PER', 'V')) ;
SETVAR(SALDODEVEDORVENDA, GETSALDODEVEDORTEORICOVENDARESIDUO );
SE DATABASEVENCIMENTO = PRIMEIRODIAMES(DATVCTO) ENTAO
/* SE O DATA BASE DO VENCIMENTO FOR A DATA DE VENCIMENTO, ENTÃO JOGO O VALOR DO RESÍDUO ACUMULADO
DOS PERIODOS QUE NÃO TEM PARCELA DE VENCIMENTO CORRESPONDENTE*/
SETVAR(VALORRESIDUOANTESVENCIMENTO, GETTABPARCELANUMPARCELA(NUMPARC, 'RESIDUOJUROSAPOSBASE', 'V') );
SETVAR(SALDODEVEDORVENDA, SALDODEVEDORVENDA + GETTABPARCELANUMPARCELA(NUMPARC, 'RESIDUOBASE', 'V') )
FIMSE
SETVAR(VALORRESIDUOMES, ARREDONDA(SALDODEVEDORVENDA * INDICEJUROS,2));
SETVALORRESIDUOJUROSAPOS(VALORRESIDUOMES + VALORRESIDUOANTESVENCIMENTO);
SETRESIDUODISTRIBUIDOLIMPA(NUMPARC);
SETVAR(APENASCOMPILAR, 1)
/*FIM DO CÁLCULO DO RESÍDUO SOBRE O SALDO DEVEDOR GERAL*/
SENAO
SE PRIMEIRODIAMES(DATVCTO) > PRIMEIRODIAMES(DATREAJUSTE) ENTAO
/*NO CASO DE VOLTAR O REAJUSTE - NÃO PODE TER BAIXA
LIMPA OS VALORES E A MARCACAO DO RESIDUO PARA DATA DE VENCIMENTO SUPERIOR AO DO REAJUSTE */
SETVAR(VALORRESIDUOMES, 0);
SETVALORRESIDUOJUROSAPOS(VALORRESIDUOMES);
SETRESIDUODISTRIBUIDOLIMPA(NUMPARC);
SETVAR(APENASCOMPILAR, 1)
SENAO
SETVAR(DATAGERRES, TABPARCELA('DATAGERRES', 'D'));
SE (PRIMEIRODIAMES(DATVCTO) < PRIMEIRODIAMES(DATREAJUSTE) E
TABPARCELA('CODGRUPORESIDUO', 'I') > 0 E
PRIMEIRODIAMES(DATVCTO) >= PRIMEIRODIAMES(ADICIONAANOS(DATAGERRES,-1))) ENTAO
/*NO CASO DE VOLTAR O REAJUSTE - NÃO PODE TER BAIXA*/
SETVAR(NUMPARCLIMPAR, GETNUMPARCELAPORDATAVENCIMENTO(DATREAJUSTE, 0));
SE NUMPARCLIMPAR > 0 E
GETTABPARCELANUMPARCELA(NUMPARCLIMPAR,'CODGRUPORESIDUO', 'I') > 0 E
GETTABPARCELANUMPARCELA(NUMPARCLIMPAR,'DATAGERRES', 'D') = DATAGERRES ENTAO
/*LIMPO A MARCACAO DO RESIDUO PARA DATA DE VENCIMENTO ANTERIO AO REAJUSTE E MAIOR QUE A DISTRIBUIÇÃO ANTERIOR DO RESIDUO */
SETRESIDUODISTRIBUIDOLIMPA(NUMPARC);
FIMSE
FIMSE
FIMSE
FIMSE


SE EANIVERSARIOPERIODICIDADE = 1 E PRIMEIRODIAMES(DATVCTO) >= PRIMEIRODIAMES(DATREAJUSTE) ENTAO
/*DISTRIBUI O VALOR DO RESÍDUO PARA AS PARCELAS SUPERIORES DO VENCIMENTO DO ANIVERSÁRIO*/
SETVAR(NUMPARCPRIMEIRONIVER,GETNUMPARCELAMESANIVERSARIOREAJUSTE);
SETVAR(PRAZODISTIBUICAO, GPXREGRACOMPONENTEVENDAPRINCIPAL('QTD_PARC') - (NUMPARCPRIMEIRONIVER-1) ) ;

/*BUSCO O VALOR DO RESIDUO DAS 12 ULTIMAS PARCELAS ANTES DO ANIVERSÁRIO */
SETVAR(VALORRESIDUOTOTALULTIMOANIVERSARIO, 0);
SETVAR(INDEXPARCELARESIDUO, 1);
REPITA
SETVAR(VALORRESIDUOTOTALULTIMOANIVERSARIO, VALORRESIDUOTOTALULTIMOANIVERSARIO +
GETTABPARCELANUMPARCELA(NUMPARCPRIMEIRONIVER-INDEXPARCELARESIDUO, 'RESIDUOJUROSAPOS', 'V'));
SETRESIDUODISTRIBUIDOMARCAR(NUMPARCPRIMEIRONIVER-INDEXPARCELARESIDUO);
SETVAR(INDEXPARCELARESIDUO,INDEXPARCELARESIDUO+1)
ATE INDEXPARCELARESIDUO=13;

/*FAÇO A DISTRIBUIÇÃO PARA AS PARCELAS SUPERIORES AO ANIVERSÁRIO*/
SE VALORRESIDUOTOTALULTIMOANIVERSARIO <> 0 ENTAO
SE PRAZODISTIBUICAO > 0 ENTAO
SETVAR(VALORJUROSAPLICADO, VALORJUROSAPLICADO + ARREDONDA(VALORRESIDUOTOTALULTIMOANIVERSARIO/PRAZODISTIBUICAO,2) );
SENAO
SETVAR(VALORJUROSAPLICADO, VALORJUROSAPLICADO + VALORRESIDUOTOTALULTIMOANIVERSARIO);
FIMSE
FIMSE
FIMSE /* FIM DA DISTRIBUIÇÃO */
SENAO
/*NO CASO DE VOLTAR O REAJUSTE - NÃO PODE TER BAIXA*/
SETVAR(VALORJUROSAPLICADO, 0);
SETVALORRESIDUOJUROSAPOS(0);
SETRESIDUODISTRIBUIDOLIMPA(NUMPARC);
FIMSE /* REAJUSTAR SOMENTE APÓS O DATA BASE*/
VALORJUROSAPLICADO;




  • Sem rótulos