Parcelas e reajuste java

Boa tarde, galera. Estou desenvolvendo um sistema de vendas, porém, diferente dos que tem na internet, esse sistema tem parcelamento de vendas. No entanto estou tendo dificuldades com a geração das datas dos reajustes.

Fiz um while que pega uma data digitada e incrementa o numero de parcelas. Até aí tudo bem. Fica assim
qntdParcela = 12
então ele pega a data digitada e gera 12 datas. Porém o que não to conseguindo e fazer as datas do reajuste com base nessas datas.

o Reajuste seria a cada 12 parcelas, ele teria que colocar uma data para reajuste.

    if(variavelIncremental % 12 == 0){
//Data de reajuste aqui....
}
1 curtida

Uma parte do problema está resolvido, Obrigado até aqui. Agora o que falta é ele colocar essa data para os meses subsequentes. Pois desse jeito, ele apenas está marcando as parcelas de numero 12,24,48 etc.

Nº Parcela 12 Data 15/9/2020
Nº Parcela 24 Data 15/9/2021
Nº Parcela 36 Data 15/9/2022
Nº Parcela 48 Data 15/9/2023
Nº Parcela 60 Data 15/9/2024
Nº Parcela 72 Data 15/9/2025
Nº Parcela 84 Data 15/9/2026
Nº Parcela 96 Data 15/9/2027
Nº Parcela 108 Data 15/9/2028
Nº Parcela 120 Data 15/9/2029
Nº Parcela 132 Data 15/9/2030
Nº Parcela 144 Data 15/9/2031

Com o código que você me sugeriu, consegui fazer isso. Ele marca a data inicial do reajuste, ou seja quando fizer 12 parcelas, tem que reajusta, 24 tem que reajustar,36 tem, etc. Agora o que falta.

Ele pegar após a data do reajuste e adicionar as posteriores. Por exemplo

Nº Parcela 12 Data 15/9/2020 //APOS ESSA DATA INSERIR AS 11 SUBSEQUENTES
Nº Parcela 13 Data 15/9/2020
Nº Parcela 14 Data 15/9/2020
Nº Parcela 15 Data 15/9/2020
Nº Parcela 16 Data 15/9/2020
Nº Parcela 17 Data 15/9/2020
Nº Parcela 18 Data 15/9/2020
Nº Parcela 19 Data 15/9/2020
Nº Parcela 20 Data 15/9/2020
Nº Parcela 21 Data 15/9/2020
Nº Parcela 22 Data 15/9/2020
Nº Parcela 23 Data 15/9/2020
Nº Parcela 24 Data 15/9/2021 // APOS ESSA INSERIR AS SUBSEQUENTES

O que devo fazer?

dexa eu ver se entendi. vc quer que a cada 12 quando ele por a data de reajuste ele incremente de mês em mês ou q ele repita esse mês para todos os meses até dar mais(+) 12?

Repetindo datas:

if(variavelIncremental % 12 == 0){
//Data de reajuste aqui....
}else{
System.out.println(dataReajuste);
}
1 curtida

Eu acho que consegui fazer o que queria. Tem que ser asssim.

      if (i % 12 == 0) {
            System.out.println("Nº Parcela " + i + " Data " + dia + mesInt + "/" + anoInt + " INICIO REAJUSTE");

        }

        if (i > 12 && i % 12 != 0) {
            System.out.println("Nº Parcela " + i + " Data " + dia + mesInt + "/" + anoInt + " REAJUSTAR");

        }

Vou fazer uns teste pra ver se vai dá tudo certo msm.

Pessoal, olha eu aqui novamente. Consegui evoluir o sistema, porém me vejo preso em outro dilema.
Eu já consegui gerar as datas de inicio de reajuste de parcela, porém agora não consigo repetir a data para os meses seguinte.reajuste.zip (20,7,KB)

Vejam como tá. Onde tem o “repetir data do reajuste”, o sistema tem que pegar a data do reajuste e repetir até chegar na proxima data de reajuste

Explique melhor a regra de negócio que pretender aplicar ao cálculo para que possamos entender o que deseja.
Pelo que vi o seu sistema já calcula as parcelas com as datas de cada parcela e na última coluna já apresenta da data do eventual reajuste a cada 12 meses. Não há necessidade de colocar as datas intermediárias repetidas.

A regra é essa, a cada 12 parcelas, as próximas vem com a data de reajuste. Não vejo outra solução a não ser colocar a data do reajuste para se repetir nas outras parcelas, pois futuramente quero fazer um search por data de reajuste. Se eu deixar desse jeito, como conseguiria filtrar depois as parcelas para serem reajustadas em uma determinada data?

O filtro seria pelos números das parcelas. A data de reajuste é um indicativo de que precisa reajustar a partir daquela data.

Como eu iria saber que tenho que reajustar a parcela n 150 dia tal? e outra sendo que ele tem q atualizar 12 parcelas. Pq sempre vai ser assim.
1 REAJUSTE AÍ A DATA 10/10/2010 EX
2 10/10/2010
3 10/10/2010
4 10/10/2010
5 10/10/2010
6 10/10/2010
7 10/10/2010
8 10/10/2010
9 10/10/2010
10 10/10/2010
11 10/10/2010
12 10/10/2010

(Todo o bloco acima vai ser reajustado de uma vez)

Se eu filtrar pelo numero de parcela. Saberia uma apenas e as posteriores?

Depois vou fazer um menu com Reajuste de parcelas. Aí nesse reajuste vou colocar por exemplo uma data 10/10/2010 aí filtraria todas as parcelas do sistema que serão reajustada nessa data e faria um update no valor delas

É uma forma de construção do sistema.
Porém, analise o seguinte:
Você tem 12 parcelas de R$ 1.000,00, a partir da 13ª (inclusive) o valor passará para 1.010,00 para as próximas 12 e na parcela 25ª o valor será R$ 1.020,00. A data será somente um indicativo para aplicar o percentual para as próximas parcelas. Claro se estes valores forem fixos mensalmente.

O ajuste é variável. É por isso que quero deixar pro usuário definir o valor do ajuste. Ele pode pagar 1000 na 13º e na 25 pagar 1500 por exemplo. Depende da taxa do reajuste.

Fica a critério do usuário indicar a data inicial de cada bloco selecionado e o percentual de reajuste para as próximas 12.
Veja que a data é um indicativo de que a partir daquela data deveria ocorrer um reajuste.
Estes campos e seleção não estão no seu sistema ainda.

Como te falei a única coisa que vai mudar é a taxa do reajuste. A data do reajuste é sempre assim. Tu consegue me ajudar nessa questão de colocar as parcelas lá? Consegue implementar algo la?

Já tem um tempo que to batendo cabeça, hoje que consegui gerar as datas de reajuste só.

Seguindo o seu jeito de programar, veja se serve. Há forma melhor de resolver isto. Não quis mexer muito no seu código.

    String reajuste = null;
    int i = 1;
    while (i <= qntParcela) {
        valorTotal = valorTotal + valorAtualizadoParcela;

        if (mesInt < 10 && i % 12 == 1 & i > 1) {
            dados.add(new Object[]{i, dia + "0" + mesInt + "/" + anoInt, df.format(valorAtualizadoParcela), dia + "0" + mesInt + "/" + anoInt});

        } else if (mesInt < 10 && i % 12 != 1 & i > 12) {
            dados.add(new Object[]{i, dia + "0" + mesInt + "/" + anoInt, df.format(valorAtualizadoParcela), reajuste});

        } else if (mesInt >= 10 && i % 12 == 1 & i > 1) {
            dados.add(new Object[]{i, dia + mesInt + "/" + anoInt, df.format(valorAtualizadoParcela), dia + mesInt + "/" + anoInt});

        } else if (mesInt >= 10 && i % 12 != 1 & i > 12) {
            dados.add(new Object[]{i, dia + mesInt + "/" + anoInt, df.format(valorAtualizadoParcela), reajuste});

        } else if (mesInt < 10) {
            dados.add(new Object[]{i, dia + "0" + mesInt + "/" + anoInt, df.format(valorAtualizadoParcela), "-"});

        } else {
            dados.add(new Object[]{i, dia + mesInt + "/" + anoInt, df.format(valorAtualizadoParcela), "-"});

        }

        mesInt++;

        if (mesInt > 12) {
            anoInt++;//incrementa o ano
            mesInt = 1;
            if (mesInt < 10) {
                reajuste = dia + "0" + mesInt + "/" + anoInt;
            } else {
                reajuste = dia + mesInt + "/" + anoInt;
            }
        }
        i++;
        cont++;

    }

Para contribuir.
Pelo que entendi você quer um reajuste anual dos valores de parcelas.
Isso geralmente acontece em imóveis, sendo considerado neste caso o CUB (imóveis em construção) ou IGP-M (já construídos), mas alguns banco usam TR.
A construção da regra de negócio deveria ser diferente, ao meu ponto de vista.
Você deveria ter um local para cadastrar/armazenar as variações mensais/anuais dos índices utilizados.
Então você cadastraria por exemplo:
INDICE | MES | ANO | % MES | % ACUMULADO | VALOR
IGP-M | MAI | 2019 | 0,45 | 7.5
IGP-M | JUN | 2019 | 0,80 | 6.5
CUB | ABR | 2019 | NULL | NULL | R$ 1.655,17

Com isso você poderia por parametrização, no momento de “faturar” indicar nestas parcelas, qual índice ou índices, ela irá utilizar.
Então a lógica é: A parcela é de MAIO de 2019, tem índice para MAIO cadastrado? Sim, calcula com base no cadastro. Não? Busca o ultimo válido. Neste caso você teria um índice em JAN/2019, JAN/2020, etc.
Tua regra de programação ficaria mais “lúcida”, do que esse monte de IF.

Para forçar, vale lembrar que a parcela em um momento pode ser por CUB, e por força de contrato ser alterada para IGP-M. E você precisará “refaturar” as parcelas. Neste caso como ficaria?

Enfim… apenas uma contribuição.

Entendi, então o reajuste seria só no momento do pagamento certo?
as parcelas seriam cadastradas normalmente e na hora de pegar e ele verificaria se tem reajuste pra aquela data e atualizava o valor, é isso?

Eu não sei como no teu apareceu, mas no meu deu assim


ele sempre coloca 13/01 como data de reajuste.

A intenção é que ele repita a data em verde nas que estão em vermelho

Obrigado até aqui.

Depende, mas a principio não,
Faturar que digo, é no momento de “geração” das parcelas.

“Depende” pois o que vigora neste caso é o contrato.
No contrato a variação do índice é anual ou mensal? Se anual então as parcelas devem ser calculadas de 12 em 12 messes.
No contrato prevê reajuste anual? Sim? Então precisa recalcular todos os anos, conforme o índice descrito em contrato e com valores do ano em que será ajustado (ano corrente de pagamento das parcelas).
Se é mensal, então acontece o que você falou.
Se é valor já calculado (pagamento fixo, tabela price de amortização, etc) então você tem que calcular 1 vezes até o fim do contrato. Neste caso considera-se (geralmente) os índices atuais do mercado.

Ou seja, “quem manda” é o contrato. Como ocorre o contrato de compra/venda?

Para alimentar um pouco mais, não sei se vai acontecer este caso em seu sistema, mas já pensou no pagamento antecipado dos valores?
Neste caso precisa ao meu ver, amortizar ou calcular a divida com base nos indicies.