Página 1 de 3

Calculadora Financeira

Enviado: 19 Set 2011 15:53
por Eolo
Não sei se este é o local pra postar isto... Se não for, algum moderador por favor mova pro lugar certo. Obrigado!

Há algum tempo montei uma "CALCULADORA FINANCEIRA" bem simples para um cliente e agora resolvi postar aqui, quem sabe pode ser útil pra alguém. São somente 2 opções de cáculo, as mais usuais: cálculo de prestação e cálculo da taxa de juro embutida em um financiamento, com pagamentos fixos postecipados ou antecipados, ambas com base no modelo de juros decrescentes e prestações fixas.

Exemplos de uso:
a) vc vende $100 pra receber em 3 parcelas fixas, 30/60/90 dias, e quer botar um "jurinho"? Qual o valor a acrescentar nas parcelas fixas, considerando 5% de juros compostos ao mês?
b) vc vai pegar $100 no banco e o gerente diz que são 4 parcelas de $28,20. Que juro mensal efetivo o banco está cobrando?

Neste primeiro post, vou falar do CÁLCULO DA PRESTAÇÃO. O cálculo do JURO embutido fica pra outro.

Primeiro, as variáveis e os conceitos:
- pv = valor financiado
- pmt = valor da prestação fixa
- n = número de prestações
- i = taxa efetiva de juros compostos
- modo = postecipado ou antecipado

MODOS (veja LINHA DO TEMPO, abaixo):
- postecipado (a mais usual): vc financia $100 hoje, pra pagar a primeira prestação dentro de 1 mês ("0 + 4")
- antecipado: vc financia $100 hoje, mas o banco já desconta uma parcela hoje ("1 + 3")

Taxa de JUROS
Quando se fala em %, é preciso transformar a taxa % em decimais para fazer o cálculo.
5% -> 5 "por cento" -> 5 / 100 -> 0,05

JUROS COMPOSTOS
Nas fórmulas abaixo, o TEMPO é considerado em períodos IGUAIS, ou seja, são 4 meses "iguais", não importa se um tem 31 dias e o outro tem 28.

Uma "curiosidade" importante sobre juros: se forem juros compostos (juros sobre juros), 12% ao ano NÃO corresponde a 1% ao mês. Não é só dividir 12% por 12. Pra achar a taxa mensal equivalente a 12% ao ano precisa extrair a raiz 12 da taxa anual (se a taxa for semestral, extrair a raiz 6 da taxa anual e assim por diante).
. divide a taxa % por 100, soma o principal (1), calcula a raiz 12, tira o principal, multiplica por 100 => % mensal
. (((1+(12/100))^(1/12))-1)*100) = 0,9488793% ao mês.
. 0,9488793% efetivo, capitalizado (juro sobre juro) mês a mês, dá 12% efetivo em 12 meses.
. já 1% efetivo ao mês, dá 12,6825% no ano...

Esse negócio de calcular RAIZ 12, como faz? O Clipper não tem nem função pra raiz quadrada! Tem, sim. Fácil: é só elevar ao inverso. Raiz quadrada, é só elevar à potência 1/2. Raíz cúbica? Elevar à potência 1/3. Raiz 12? Potência 1/12. E assim por diante.

. 12 elevado ao quadrado = 12^2 = 144
. raiz quadrada de 144 = 144^(1/2) = 12

. 12 elevado ao cubo = 12^3 = 1728
. raiz cúbica de 1728 = 1728^(1/3) = 12

LINHA DO TEMPO
Por exemplo, vc pega $100 no banco e vai pagar em 4 prestações, com juro composto mensal efetivo de 5% ao mês. Qual o valor da prestação em cada MODO?

Código: Selecionar todos

      POSTECIPADO ("0 + 4")                 ANTECIPADO ("1 + 3")

 100                                   100                       entrada
 |                                     |
 ----------------------------          ----------------------    tempo
 0     1      2      3      4          0      1      2      3
       |      |      |      |          |      |      |      |
       ----------------------          ----------------------
            4 x $28,20                       4 x $26,86          saída = prestações fixas
A mesma coisa, numa planilha, pra conferir:

Código: Selecionar todos

Mês      PV       I       PMT       Saldo

POSTECIPADO
0    100,00    0,00     -0,00      100,00
1      0,00    5,00    -28,20       76,80 //  $5,00 = 5% sobre saldo devedor de $100,00
2      0,00    3,84    -28,20       52,44 //  $3,84 = 5% sobre saldo devedor de $ 76,80
3      0,00    2,62    -28,20       26,86 //  $2,62 = 5% sobre saldo devedor de $ 52,44
4      0,00    1,34    -28,20        0,00 //  $1,34 = 5% sobre saldo devedor de $ 26,86

ANTECIPADO
0    100,00    0,00    -26,86       73,14 //  o banco só credita $73,14
1      0,00    3,66    -26,86       49,94 //  $3,66 = 5% sobre saldo devedor de $ 73,14
2      0,00    2,50    -26,86       25,58 //  $2,50 = 5% sobre saldo devedor de $ 49,95
3      0,00    1,28    -26,86        0,00 //  $1,28 = 5% sobre saldo devedor de $ 25,58
Finalmente, as fórmulas pra calcular as prestações PMT:
(mais abaixo, elas estão transformadas em Clipper/XHarbour)

Código: Selecionar todos

                  n
             (1+i)  * i
  pmt = pv * ----------          // postecipado
                  n
             (1+i)  - 1

                        n
         1         (1+i)  * i
  pmt = --- * pv * ----------    // antecipado
        1+i             n
                   (1+i)  - 1
Agora, é só criar os GETs na tela e mandar rodar, considerando PV, N e I sempre >0:

Código: Selecionar todos

@x,y get pv   pict "@E 999,999.99" vali pv>0
@x,y get n    pict "@E 999"        vali n>0
@x,y get i    pict "@E 99.9999%"   vali i>0
@x,y get modo pict "@!"            vali modo$"01"
read
if modo="0"
  pmt=round(pv*((((1+(i/100))^n)*(i/100))/(((1+(i/100))^n)-1)),2) //postecipado
else
  pmt=(1/(1+(i/100)))*pv*(((i/100)*((1+(i/100))^n))/(((1+(i/100))^n)-1)) //antecipado
endi
? tran(pmt,"@E 999,999.99") -> valor da prestação mensal
OUTRA CURIOSIDADE

Dia destes, um colega me perguntou sobre como fazia pra "estornar" um percentual aplicado, pra voltar o principal ao número original. Ele tinha feito $100 + 10% = $110 (ou seja, $100*1,10), só que, quando tirava 10% de $110 ($110-10%), dava $99...

Simples: é só trocar o sinal (* por /)
. na ida: $100 * 1,10 = $110
. na volta: $110 / 1,10 = $100

Outro exemplo: 100 - 10%
. na ida: $100 * (1-0,10) = $90
. na volta: $90 / (1-0,10) = 100

Calculadora Financeira

Enviado: 19 Set 2011 17:11
por Eolo
Agora, falar do cálculo da TAXA DE JURO efetiva, embutida em um financiamento com pagamentos fixos, postecipados ou antecipados, com base no modelo de juros decrescentes e prestações fixas.

Vc vai pegar $100 no banco e o gerente diz que são 4 parcelas de $28,20. Que juro mensal efetivo o banco está cobrando?

Se vc fizer (4 x 28,20)/100 e dividir a taxa total de 12,8% resultante por 4 meses, dá 3,2% ao mês. Mas, na realidade, a taxa efetiva é 5%.

Como fazer:
. calcula o valor presente (PV) do financiamento usando uma taxa de juro X estimada
. compara o resultado com o valor financiado conhecido
. se o valor calculado for igual ao conhecido, tá feito
. se o valor calculado for maior, aumenta a taxa estimada X e recalcula
. se o valor calculado for menor, diminui a taxa estimada X e recalcula

Em outras palavras, a coisa é feita por tentativa e erro, em um loop. É assim que, por exemplo, a HP 12C funciona.

No meu caso, resolvi partir de uma taxa inicial estimada de 0.00001 (0.001%) e ir aumentando/diminuindo 0,00001 até o valor presente calculado concidir com o conhecido (limitado a 100%, porque usuário adora digitar valores absurdos, só pra ver o que acontece...)

As fórmulas pra calcular o valor presente (PV) de um financiamento:
(mais abaixo, elas estão transformadas em Clipper/XHarbour)

Relembrando:
- pv = valor financiado
- pmt = valor da prestação fixa
- n = número de prestações
- i = taxa efetiva de juros compostos
- modo = postecipado ou antecipado

Código: Selecionar todos

                n
           (1+i)  - 1
pv = pmt * ----------    //postecipado
              n
           (1+i)  * i


                        1
                 1 - --------
                          n-1
                     (1+i)
pv = pmt + pmt * ---------------   // antecipado
                       i

Agora, é só criar os GETs na tela e mandar rodar, considerando PV, N e I sempre >0:

Código: Selecionar todos

@07,23 get pv   pict "@E 999,999.99" vali pv>0
@09,23 get pmt  pict "@E 999,999.99" vali pmt>0
@11,23 get n    pict "@E 999"        vali n>0
@13,23 get modo pict "@!"            vali modo$"01" 
read
if strzero(pmt*n,12,2)==strzero(pv,12,2)
  * soma das prestações é a PV, então o juro é zero. Não precisa calcular
  retu
endi
i=0.00001 // taxa inicial
mov=iif((pmt*n)<pv,-1,1) // incremento negativo ou positivo
priv tenta
do whil .t.
  if modo="0"
    tenta=(pmt*((((1+(i/100))^n)-1)/(((1+(i/100))^n)*(i/100)))) //postecipado
  else
    tenta=pmt+(pmt*((1-(1/((1+(i/100))^(n-1))))/(i/100))) //antecipado
  endi
  if mov=1
    if (tenta-pv)<0.1
      exit
    endi
  else
    if (pv-tenta)<0.1
      exit
    endi
  endi
  if mov=1
    i=i+0.0001
  else // mov=-1
    i=i-0.0001
  endi
  if abs(i)>100
    * aqui, limitei o juro mensal a 100%
    exit
  endi
endd
? tran(i,"@E 999999.9999%")
* o resultado poderá ser positivo ou negativo

Calculadora Financeira

Enviado: 14 Abr 2012 09:19
por Jairo Maia
Caro Eolo,

Primeiro, muito obrigado pela excelente aula sobre cálculos financeiros, me ajudou muito.

Gostaria de fazer duas colocações:

A primeira, se me permite, e apenas para registro, uma vez que com maestria você já deu a solução sobre raiz quadrada:
Eolo escreveu:O Clipper não tem nem função pra raiz quadrada!
A função em Clipper e [x]HB para extrair raiz quadrada: SQrt( nValor ). Tem ainda as funções Exp( nValor ) e Log( nValor ), embora as duas últimas nunca entendi como aplicar.

A segunda questão, é um pedido de ajuda ainda sobre este tema, que acredito que você possa me ajudar, é a seguinte:

1- Um cliente entra na loja, e efetua a compra no valor de 100,00, e sem entrada quer pagar em 4 parcelas.
2- A loja permite que ele escolha a data do vencimento entre os dias 5, 10 e 25 p.e.
3- O cliente escolhe o dia 25, mas a data atual é dia 5 p.e., então temos um adicional de 20 dias a ser considerado.

Você tem alguma dica de como eu posso fazer esse cálculo?

PS: No meu caso, realmente preciso levar estes dias em consideração.

Agradeço qualquer dica.

Calculadora Financeira

Enviado: 14 Abr 2012 11:14
por Eolo
Jairo, vc tem razão, pisei no tomate. A SQRT realmente existe. Por força de hábito, me acostumei a usar sempre o "elevar ao inverso" (valor^(1/x)), pra não ficar limitado à raiz quadrada, e acabei dando a SQRT como extinta.

Quanto à sua pergunta, é o seguinte: se vc cobra 5% de juro ao mês (30 dias), basta achar a taxa equivalente a esses 20 dias adicionais e calcular um novo "valor financiado", ou seja, atualiza o valor, do dia 5 até o dia 25, e depois calcula as 4 parcelas iguais com base no novo valor:

- calcula a raiz 30 de 5% para obter a taxa diária a partir da taxa mensal:
(((1+(5/100))^(1/30))-1)*100) = 0,1627662% ao dia

- eleva a 20 (dias) o resultado anterior:
(((1+(0,1627662/100))^20)-1)*100) = 3,3061554% -> taxa equivalente para 20 dias

- aplica os 3,3061554% sobre o valor inicial: $100,00, no dia 5, se transformam em $103,31 no dia 25.

- aplica sobre os $103,31 a fórmula para as achar as 4 parcelas vencíveis no dia 25 (30/60/90/120): cada parcela vai dar $29,13 (ao invés dos $28,20 calculados sobre $100,00).


Complementando: a idéia é a mesma quando vc precisa indicar no boleto o valor do juro diário por atraso ("após o vencimento, adicionar $$$ ao valor cobrado"):
- 0,1627662% ao dia (ver acima), sobre $29,13 = $0,04 para cada dia de atraso
- se o cliente atrasar 2 dias, o banco cobra $0,08 a mais.



Quanto às duas outras funções, nunca usei em programação. Aliás, a última vez que ouvi falar delas foi em 1976, quando terminei a faculdade...
EXP(X) retorna o valor de "e" ("número de Euler") elevado a X.
LOG(x) é o inverso de EXP() e retorna o logaritmo natural

O Euler não é meu parente e nem sei pra que ele inventou essa joça. hehehe
Sério, logaritmo também é usado para cálculos financeiros, só não lembro mais como. Se conseguir achar meus livros velhos, vou tentar relembrar.

Calculadora Financeira

Enviado: 14 Abr 2012 19:16
por Eolo
Jairo, mais um comentário, pra dar uma clareada na coisa.

Esse negócio de usar POTÊNCIA e RAIZ, por que? É que são juros compostos (juro sobre juro). No mês1, o juro é calculado sobre o principal. No mês2, é calculado sobre principal+juro1. No mês3, principal+juro1+juro2. E assim por diante.

Onde entra então potência e raiz?
Se vc tiver por exemplo a conta (2 * 2 * 2) = 8, vc pode substituir por potência: 2^3 = 8
Na volta, se vc tem o 8 e sabe que são 3 elementos, usa a raiz cúbica: 8^(1/3): raiz cúbica de 8 -> 2

No caso dos juros, igual: se vc tem 5% ao mês, por 3 meses, juro sobre juro, então é (1,05 * 1,05 * 1,05) = 1,157625
Substituindo por potência: (1,05^3) = 1,157625.
Na volta, se vc sabe que 1,157625 é a taxa de 3 meses e quer achar a taxa mensal equivalente, só fazer o inverso (raiz): 1,157625^(1/3) = 1,05


TAXAS EQUIVALENTES
Sempre que um evento se movimenta na LINHA DO TEMPO, o seu valor vai aumentar ou diminuir dependendo da taxa de juro, mas vc tem que usar a taxa equivalente ao movimento (se dia, mês, ano, o que seja), baseando-se numa dada taxa (mensal, anual, diária, o que seja):

- se vc tem 12% ao ano e quer a taxa mensal, raiz 12 nela = 0,9488793%
0,9488793% ao mês vai dar 12% ao ano, juro sobre juro

- se vc tem 12% ao ano e quer a taxa trimestral, raiz 4 nela = 2,8737345%
2,8737345% ao trimestre dá 12% ao ano, juro sobre juro

- se vc tem 5% ao mês e quer a taxa anual, potência 12 nela.
5% ao mês dá 79,58563% ao ano

- se vc tem 12% ao ano e quer a taxa para 127 dias,
raiz 365 nela (acha a taxa diária) e potência 127 no resultado.

Foi o exemplo que vc deu, "mover um valor do dia 5 para o dia 25". O movimento é em dias mas a taxa de juros é mensal, então primeiro acha a taxa equivalente a um dia (dada a taxa mensal) e depois acha a taxa equivalente a 20 dias.

Ah, e é bom trabalhar com bastante casas decimais e ficar de olho no arredondamento. Mesmo assim, principalmente em valores pequenos, sempre dá alguma diferença no final da planilha. Se o seu cliente tem controle/contabilidade séria, é bom vc levantar, antes, que na última parcela vai dar $0,01 de diferença...

Calculadora Financeira

Enviado: 19 Abr 2012 10:18
por Jairo Maia
Olá Eolo,

Obrigado por sua IMENSURÁVEL AJUDA.

Completei a primeira etapa das funções de cálculos, e está funcionando corretamente:
- Cliente configura: taxa de juro mensal, percentual da multa e do juro diário.
PS: O código do consumidor atualmente permite multa máxima de 2% e juro diário máximo de 0,033% ao dia.
- Se sem entrada, permite o cliente escolher o parcelamento antecipado.
- Se prestação for paga com atraso, aplica multa e juros diários.
Esta etapa está funcional.

Agora, estou implementando as funções para pagamentos de PARCELAS antecipados, não sei como resolver algumas situações, Por exemplo:
- Um financiamento é feito em 24 parcelas
- O cliente pagou a 1a, 2a e 3a, e veio pagar a 4a.
- O juro aplicado foi de 5% p.e.
- No momento que ele está pagamento a parcela 4, diz que quer pagar a última, ou seja, a 24a.
- Ocorre que na conta literal, retorna negativo, pois o desconto é maior que o valor da parcela.

Sei que não está correto, e se permite abusar de seu conhecimento, como Você resolve esta situação?

Considerações:
Eolo escreveu:Ah, e é bom trabalhar com bastante casas decimais e ficar de olho no arredondamento.
Obrigado, estou trabalhando com 15 casas decimais para os cálculos.
Eolo escreveu:é bom vc levantar, antes, que na última parcela vai dar $0,01 de diferença...
OK, ciente. Isto poderá sim ocorrer no meu caso, pois haverá parcelamentos com valores inferiores a 100,00.
Eolo escreveu:O Euler não é meu parente e nem sei pra que ele inventou essa joça. hehehe
Foi divertida a forma que se referiu ao Euler, me fez rir. Porém, Euler publicou este trabalho no início do século 18, se não estou enganado, em 1720, com a finalidade de ser aplicado em cáculos financeiros com juros compostos que usam logaritimo. Deve ter sido muito útil na época, pois ganhou seu nome. Exemplo:

Código: Selecionar todos

Function Main()
 nLog := Log ( 10 )
 ? nLog   // retorna 2.30
 ? Exp( nLog )  // retorna 10.00, ou seja, o número natural do logarítmo
Return Nil

Calculadora Financeira

Enviado: 19 Abr 2012 11:17
por alxsts
Olá!

Não testei para ver se calcula certo mas, este tópico é ótimo. Verdadeira aula.

Parabéns ao velho Eolo!

Calculadora Financeira

Enviado: 19 Abr 2012 16:35
por Eolo
Alexandre, funciona sim. Se não funcionar, temos que ligar pro Mr. HP, mandar ele dar uma checada nos circuitos da HP12C... hehehe

Jairo, logaritmo natural, neperiano, binário, além de integral, derivada, limite... Deuzulivre. Acho que foi aí que perdi o rumo. hehehe

Bem, quanto à sua questão, do cliente antecipar o pagamento da última parcela (ou outras) no meio do caminho, é só lembrar que, sempre que vc move um evento na tal linha do tempo, seu valor muda.

Exemplo: $1.000 financiado em 12 parcelas, 3% ao mês, postecipado (0+12), dá 12 x $100,46, vencíveis em 19-mai-12, 19-jun-12... até 19-abr-13. Digamos que, em 19-ago-12, o cliente quer pagar as prestações 4 e 12. A parcela 4 já está no valor certo (vencimento 19-ago-12), mas a parcela 12 não: ela vale $100,46 em 19-abr-13 e se vc a vai deslocar na linha do tempo, até 19-ago-12, tem que descontar o juro desse período.

Aqui, vale a “filosofia” de trabalho do seu cliente, se vai descontar todo o juro ou não. Financeiras, em geral, sempre devolvem um juro bem menor – ou nenhum - no adiantamento de pagamentos.

Aplique sobre essa parcela sendo adiantada (12) a fórmula de valor presente que coloquei no meu segundo post. Valor da parcela: $100,46. Número de parcelas: 1. Taxa de juros: se é 3% ao mês e são 8 meses (de 19-abr-13 a 19-ago-12), calcule a taxa equivalente a 8 meses: 1,03^8 = 26,677%.

O valor presente vai dar $79,30, que é o valor da parcela 12 movida de 19-abr-13 a 19-ago-12. Faça a conta ao contrário, pra conferir: valor hoje (19-ago-12) de $79,30, para ser pago em 1 parcela, vencível em 19-04-13, com juro de 26,677% (taxa de 8 meses, equivalente a 3% ao mês). Resultado? $100,45 (Opa! Olha o arredondamento que eu mencionei: diferença de $0,01).

Dê quitação da parcela 12 no seu sistema e tá pronto.

É semelhante ao outro caso, dos 20 dias de “ajuste” até chegar no dia 25 (seu outro post). Só que lá era taxa pra 20 dias, aqui é pra 8 meses. E era aumento dos juros, aqui é diminuição.

É isso.

Em tempo, uma observação: acho que deu pra perceber que não precisa ser só parcela MENSAL pra usar o esquema de financiamento. Pode ser bimensal, trimestral, semestral, é só aplicar a taxa de juro equivalente: se o seu cliente quer vender em parcelas BIMENSAIS (Super promoção “Pague prestações só de 2 em 2 meses!”), basta pegar a taxa mensal (3%) e achar a taxa equivalente a 2 meses: 1,03^2 = 6,09%. Um financiamento de $1000, pra pagar em 3 parcelas vencíveis a cada 2 meses (19-jun, 19-ago e 19-out-12), vai dar $374,73 por parcela. Óbvio que o cliente final tá pagando juro sobre tudo, mas o efeito comercial da promoção pode fazer ele pensar errado, que alguns meses são pulados...

Ah, dê uma checada nos números. Fiz meio na pressa, de repente coloquei algum valor indevido.

Calculadora Financeira

Enviado: 19 Abr 2012 16:54
por Eolo
Jairo, uma outra coisa que pode acontecer, é o cliente querer pagar várias parcelas em conjunto. Pegando o mesmo exemplo: $1.000 financiado em 12 parcelas, 3% ao mês, postecipado (0+12), dá 12 x $100,46, vencíveis em 19-mai-12, 19-jun-12... até 19-abr-13.

Em 19-ago-12, vencimento da parcela 4, ele quer quitar todas as parcelas em aberto, da 4 até a 12. Bem, é só usar a fórmula do valor presente, agora com 9 parcelas de $100,46 e 3% ao mês. Note que aqui tem que ser no modo ANTECIPADO, porque já estamos no vencimento da primeira parcela, certo? Vc vai achar o valor presente dessas 9 parcelas, em 19-ago-12, descontados os juros.

Se for usar o modo POSTECIPADO, calcule só com 8 parcelas e, ao resultado, some a parcela 4 pelo valor original ($100,46).

Além disso, essas parcelas a quitar têm que ser em seqüência, ok? Se ele quiser antecipar as parcelas 6, 10 e 12 (exemplo exagerado!), não dá pra usar a fórmula, porque o termo (tempo entre as prestações) não é igual. A fórmula só vale pra uma parcela e, se for mais de uma, o termo tem que ser constante entre elas (1 mês, 2 meses, 1 semestre, 207 dias etc), além da taxa de juros ter que ser equivalente.

Bons estudos! hehehe

Em tempo:
Completei a primeira etapa das funções de cálculos, e está funcionando corretamente:
- Cliente configura: taxa de juro mensal, percentual da multa e do juro diário.
Não esquece (se for o caso) que é preciso definir o modo (se postecipado ou antecipado).

Calculadora Financeira

Enviado: 19 Abr 2012 19:11
por Eolo
Jairo, aproveitando que to de folga hoje, vamos complicar a sua vida.

Outra super promoção: “compre agora e só comece a pagar daqui a 90 dias!” Como faz pra não perder juros? Simples, é só mover a BASE na linha do tempo.

Exemplo: $1.000 financiados hoje (19-abr-12) em 6 parcelas (“0+6”), 3% ao mês, só que a primeira parcela não vai vencer em 19-mai-12 (30 dias de hoje, o "padrão postecipado”), mas sim em 19-08-12. Na linha do tempo, os $1.000 estão em 19-abr-12, certo? Só que pra usar a fórmula, eles deveriam estar em 19-jul-12 (considerando o modo postecipado), 3 meses depois.

Fácil: é só mover a base pelos 3 meses, de 19-abr até 19-jul-12.
3% ao mês, 3 meses (1.03^3) -> 9,2727%
$1.000 hoje => $1.092,00 (19-jul-12)

Agora é aplicar a fórmula: $1.092 (“em 19-jul-12”) financiados em 6 parcelas (“0+6”), 3% ao mês, primeiro vencimento em 30 dias (19-ago-12), são 6 x $201,58.

Pro cliente final, são 6 x $201,58, a primeira vencendo em 19-08-12. Não acho que ele vai perceber que os juros estão correndo desde hoje. :-)

Calculadora Financeira

Enviado: 20 Abr 2012 12:39
por Jairo Maia
Olá Eolo,

Obrigado por sua paciência. Sem suas explicações não tenho a menor idéia de como faria para resolver parcelamento.
Eolo escreveu:Não esquece (se for o caso) que é preciso definir o modo (se postecipado ou antecipado).
Ok. Isto já está comtemplado no sistema, que funciona assim:
- Cliente entra na loja e efetua a compra
- Solicita parcelamento. Obviamente, todos sabem que tem que ter o cadastro aprovado
- Solicita ao operador para identificar o cliente (nome, rg ou cpf)
- O sistema faz a leitura da situação dele no cadastro, e se nenhum problema continua
- pode bloquear por limite de crédito pré-estabelecido já usado
- prestações em atraso acima de X dias
- pelo gerente por outros motivos, e exibe a mensagem de quem bloqueou
- Nada errado, segue, mas verifica se valor da compra ultrapassa o de crédito (quando houver limite de crédito), então avisa que deverá haver entrada de X
- Se tudo ok com entrada, não opciona ser antecipado, vale a entrada
- Se tudo ok sem entrada, opciona ser antecipado ou postecipado
- Calcula as prestações.
- Permite recalcular valores e refazer os cálculos, até a aceitação do cliente final (respeitado a quantidade máxima de parcelas estabelecido pela loja)

Pagamentos alternados não vou me preocupar por enquanto, ainda não é o caso, e posso pensar nessa implementação com calma.
Eolo escreveu:aproveitando que to de folga hoje, vamos complicar a sua vida.
E complicou mesmo. Não pensei nessa hipótese, e terá que haver. Mas já analisei, e não será difícil fazer esta adaptação.

Quanto a se movimentar na linha do tempo, acho que agora não tenho mais dificuldade, dá pra fazer sem problemas. Quanto a uma possível quitação total do débito tudo ok, assim como pagamento antecipado de parcela(s) cujo juro acumulado seja inferior a 100% dela. Meu problema está em entender como proceder quando o juro acumulado ultrapasa os 100% conforme exemplo abaixo:

Código: Selecionar todos

Function Main()
 Clear Screen

 nValorParcela := 100.00 // valor da parcela a vencer
 nJuroMensal := 2.7     // juro mensal que foi aplicado
 nQtdMes := 30          // meses a antecipar
 nTaxaDesconto := 85    // descontar 85% do total do juro

 nDecimal := Set( _SET_DECIMALS, 15 )

 nJuroDesconto := (((((1+(nJuroMensal/100))^nQtdMes)-1)*100)*(nTaxaDesconto/100))

 nJuroDesconto :=  Round( nJuroDesconto, 2 )

 ? nJuroDesconto  // retorna 104.03

 nValorParcela -= ( nValorParcela * ( nJuroDesconto / 100 ) )

 ? Round ( nValorParcela, 2 ) // retorna negativo em -4.03

 Set( _SET_DECIMALS, nDecimal )

Return Nil

Calculadora Financeira

Enviado: 20 Abr 2012 14:49
por billy1943
Como a apresentação do Eolo e observações do Jairo, o assunto está ficando bom demais.

Assim, vou dar uma pequena contribuição que poderá ser inserida, ou seja, usando a Tabela Price, e sendo informados:
- capital
- entrada
- prestação
- número de parcelas

obter a taxa mensal praticada.
Isto é, para quem não tem uma HP12C ...

Código: Selecionar todos

***************************************************
* calculo da taxa pela Tabela Price
* sao informados: divida, entrada, valor prestacao
* numero de parcelas
***************************************************
local tela := savescreen()
local p,c,n,h,i,divida,entrada,prest,meses
set escape on
setcolor("w+/b")
@ 0,0 clear to 24,79
@ 0,0 to 24,79 double
@ 2,10 say "[  CALCULOS FINANCEIROS - TABELA PRICE - TAXA %  ]" color "gr+/b"
setcolor("w+/b,g+/n,,,bg+/b")

do while .t.

  divida := entrada := prest := meses := taxa := total := 0
  set decimals to 2
  @ 5,4 clear to 21,76
  @ 5,4 say "Informar o valor da d¡vida original.: "
  @ 7,4 say "Informar o valor da entrada/sinal ..: "
  @ 9,4 say "Informar o valor da prestacao ......: "
  @11,4 say "Informar o numero de meses .........: "
  @ 5,46 get divida pict "@E ##,###,###.##" valid divida > 0
  read

  if (lastkey() == 27)
     restscreen(,,,,tela)
     return nil
  endif

  @  7,46 get entrada pict "@E ##,###,###.##"
  @  9,46 get prest pict "@E ##,###,###.##" valid prest > 0
  @ 11,56 get meses pict "@E ###" valid meses > 0
  read

  set decimal to 9
  p := prest                   // prestacao
  c := divida - entrada        // capital
  n := meses                   // prazo
  h := (((p*n)/c)**(2/(n+1))) - 1
  i := h * (12-((n-1)*h)) / (12 - (2*(n-1)) * h)
  i := i * 100

  @13,4 say "A taxa de juros mensal e de ........:        " + ;
             transform(i,"@E ##.#####") + " %"
  @15,4 say "O total das presta‡äes e de .....R$.:     " + ;
             transform(prest*meses,"@E ##,###,###.##")
  @17,4 say "Os juros correspondem a .........R$.:     " + ;
             transform((prest*meses)-(divida-entrada),"@E ##,###,###.##")
  c_resp := "S"
  @ 20,4 say "Quer outro calculo ? <S/N> " get c_resp pict "@!" ;
              valid c_resp $ "SN"
  read

  if (c_resp == "N")
     restscreen(,,,,tela)
     return nil
  endif

enddo

Calculadora Financeira

Enviado: 20 Abr 2012 16:14
por Eolo
Quanto a se movimentar na linha do tempo, acho que agora não tenho mais dificuldade, dá pra fazer sem problemas. Quanto a uma possível quitação total do débito tudo ok, assim como pagamento antecipado de parcela(s) cujo juro acumulado seja inferior a 100% dela. Meu problema está em entender como proceder quando o juro acumulado ultrapasa os 100% conforme exemplo abaixo:
Jairo, comi bola numa coisa simples. Seguinte, apaga o que falei sobre, numa série de pagamentos uniformes, quitar uma das parcelas pela fórmula.
A fórmula calcula prestações constantes e, dentro delas, os juros são decrescente e as amortizações constantes, então não dá pra simplesmente pegar uma parcela e mover ela na linha do tempo, descontando juro sobre juro. O conjunto, enfim, não pode mexer.

Olhe a PLANILHA no meu primeiro post. Juros decrescentes e prestações constantes.

Eu tinha começado nessa linha, acabei racionando errado e postei o que não devia. Vou ver como faz pra resolver essa sua parada.

Falha minha, fico devendo uma!

Calculadora Financeira

Enviado: 20 Abr 2012 16:39
por Eolo
Moderadores, um problema: vi que o forum não aceita arquivos maiores que 100K, só que o ZIP de um emulador da HP12C, que quero compartilhar, tem 284k. Tentei quebrar em arquivos pequenos, mas o WinZIP 14.5 limita o tamanho de cada arquivo em 108K. Há alguma saída pra isso?

Billy, essa fórmula que vc colocou dá pra calcular a taxa de juro por período em uma dada série? Se eu informar capital, número de parcelas e seu valor, acha a taxa interna sem nenhuma iteração?

Calculadora Financeira

Enviado: 20 Abr 2012 18:18
por Eolo
Pra quem quiser o emulador da HP12C, é só baixar em http://mbf.me/IPfUM. Recebi de um colega e, pelo jeito, é mesmo grátis. Não tem nenhuma informação a respeito.

Não precisa instalar, é só jogar os arquivos em uma pasta qualquer e executar o 12CPP.EXE.

A principal diferença é na notação. Pra fazer
2+2=4 -> 2 ENTER 2 +
4 / 2 -> 4 ENTER 2 /

Ela tem trocentos recursos, financeiros e estatísticos. Os financeiros (objeto deste tópico) são até simples de usar (PV, PMT, I, N, FV). Quem sabe abrimos um outro tópico específico.