Recentemente, tive que verificar os cálculos feitos pelos serviços públicos da minha cidade. Houve um problema controverso, que só pode ser resolvido através da realização de cálculos corretos. Olhando para o futuro, direi que os serviços públicos pensam errado. Portanto, consideraremos aqui como calcular corretamente os custos da inflação e 3% ao ano da dívida por obrigações, de acordo com o Código Civil da Ucrânia.
A primeira parte descreve o cálculo dos custos da inflação, isto é específico para a Ucrânia.
A segunda parte (maior) será dedicada à questão do cálculo de 3% ao ano. Também é aplicável à Federação Russa, Bielorrússia e Cazaquistão, mas nesses países a taxa não é fixa, mas depende da taxa de refinanciamento do Banco Central. O resto do país não parecia.
A segunda parte está muito próxima do cálculo de juros sobre transações de crédito comuns (empréstimos, empréstimos, empréstimos etc.).
Primeiro uma teoria, no final, um pequeno código.
Tudo isso sob o corte.
Por isso, entrei nas mãos de um documento dos serviços públicos "Declaração de competência dos custos da inflação e 3% ao ano". Foi verificado por mim e descobri que foi calculado usando o algoritmo errado e é de interesse, pois ele deve implementar os requisitos do artigo do Código Civil da Ucrânia.
O que deve ser considerado está escrito no Código Civil da Ucrânia:
Artigo 625 do Código Civil da Ucrânia. "Responsabilidade pela violação de uma obrigação monetária"
2. Um devedor que atrasou o cumprimento de uma obrigação monetária, a pedido do credor, é obrigado a pagar o valor da dívida, levando em consideração o índice de inflação estabelecido para todo o período de atraso, bem como 3% ao ano do montante vencido ...
Com base nos valores da dívida, os serviços públicos calcularam os custos da inflação e 3% ao ano.
Custos de inflação
Além disso, falarei sobre o algoritmo de cálculo, e não sobre números específicos.
A inflação é um processo caracterizado por uma depreciação da moeda, ou seja, uma diminuição no seu poder de compra e um aumento geral nos preços. Excluindo a inflação, os resultados finais dos cálculos de fluxo de caixa são muito arbitrários.
Índice de Inflação (II) ou Índice de Preços ao Consumidor (IPC), Índice de Preços ao Consumidor (IPC) - um dos tipos de índices de preços criados para medir o nível médio de preços de bens e serviços (cesta de consumidores) durante um determinado período da economia.
A IA é um indicador que caracteriza a dinâmica do nível geral de preços de bens e serviços que a população adquire para consumo não produtivo. Esse é o índice de crescimento, que mostra quantos por cento do aumento médio de preço no período em análise.
Na Ucrânia, AI e CPI são sinônimos
Como o índice de preços é um índice em cadeia, para períodos seguintes um após o outro, é calculado multiplicando os indicadores, por exemplo, 101% * 102% = (1,01 * 1,02) * 100% = 103,02%.
A IA é calculada pelo Comitê Estatal de Estatística da Ucrânia e publicada em periódicos oficiais. Esses índices podem ser usados para recalcular os valores em dinheiro.
O que os trabalhadores comunitários pensam?
A última data de liquidação é 7 de dezembro de 2016.
Vamos ver como os trabalhadores comunitários obtiveram índices de custo da inflação?
Pode ser visto a olho nu que na terceira (e quinta coluna), em vez da parte inteira 1, deve haver a parte inteira 0. Como eles conseguiram a parte fracionária?
Setembro de 2016. Parte fracionária 0,028. O prazo para pagamento é 20 de setembro de 2016. A parte fracionária corresponde ao índice de inflação publicado pelo Comitê de Estatística do Estado, para outubro de 2016 - 102,8%
Agosto de 2016. Parte fracionária 0,0465. O prazo de pagamento para agosto é 20 de setembro de 2016. A parte fracionária corresponde ao índice de inflação para setembro multiplicado por II para outubro: 101,8% * 102,8% = 104,65%, ou em ações, 1,018 * 1,028 = 1,046504. Os serviços públicos são arredondados para 1,0465 e imprimem esse número, embora a unidade deva ser retirada, porque na próxima coluna eles imprimem apenas o valor dos custos de inflação e não o valor acumulado.
Julho de 2016 e anteriores. Realizei esses cálculos e restaurei o algoritmo. Os serviços públicos multiplicam os índices de inflação, começando no mês seguinte ao da prestação dos serviços (mês do vencimento) e terminando em outubro de 2016.
O ponto de partida é apenas parcialmente verdadeiro. Como mostrarei mais adiante, no caso geral, o cálculo realmente precisa começar a partir deste mês, mas no nosso caso particular, o primeiro mês deve ser ignorado (equacione AI a 100%).
O ponto final da multiplicação. Como o último dia de cálculo é em dezembro, e você precisa terminar em dezembro, esse geralmente é o caso. Como mostrarei mais adiante, nesse caso em particular, dezembro também precisa ser ignorado (também equivale a AI a 100%). E em 7 de dezembro, as AIs de dezembro não tiveram tempo de publicar.
Por que novembro não é levado em consideração em lugar algum? Eu acho que eles simplesmente esqueceram de inseri-lo no sistema.
Agora vamos ver como calcular o índice de inflação. Conforme
necessário - descrito na Carta de informações do Supremo Tribunal Econômico da Ucrânia nº 01-06 / 928/2012, de 17.07.2012 [6].
Vou dar parte do parágrafo:
O valor da dívida a ser paga do 1º ao 15º dia do mês é indexado levando em consideração este mês e, se a dívida for paga do 16 ao 31 do dia, o cálculo começa no próximo mês.
Da mesma forma, se uma dívida tiver sido paga de 1 a 15 dias de um mês, os custos de inflação serão calculados sem levar em consideração este mês e, se de 16 a 31 dias de um mês, os custos de inflação serão calculados levando em consideração este mês.
No nosso caso, o prazo de pagamento é o vigésimo dia do mês seguinte ao da prestação dos serviços, ou seja, para a prestação de serviços em setembro, a data de início dos assentamentos é 21 de outubro de 2016 e o prazo final é 7 de dezembro de 2016.
I.e. é correto considerar o seguinte: para a prestação de serviços em setembro de 2016, considere a inflação por três meses (passe o cursor ou o ciclo), de outubro a dezembro, mas no primeiro e no último mês, considere a IA igual a 1 (100%) e leve em consideração apenas novembro.
Em novembro de 2016, a IA atingiu 101,8%, ou seja, o coeficiente deve ser 0,0180, não 0,0280. Eu escrevi sobre a unidade principal antes.
3% ao ano
Vamos ver como os serviços comunitários receberam coeficientes e acumulam montantes de 3% ao ano? Esta é a quinta coluna na tabela acima.
Como escrevi anteriormente, não deve haver uma unidade principal, deve haver 0. Observamos a parte fracionária e percebemos que ela é suspeita de alguma forma redonda - cada mês anterior é 0,0025 mais que o mês atual.
Usando cálculos simples, pode-se determinar que os serviços públicos, sem mais delongas, dividam 3% em 12 meses, recebem 0,0025 ou 0,25% por mês e acumulam esse percentual para cada mês completo e incompleto de atraso. Sim, se você olhar para outubro de 2016, cujo prazo de pagamento chegou em 21 de novembro e os cálculos foram feitos em 7 de dezembro, por um mês incompleto, eles contaram os mesmos 0,25%.
A abordagem admira objetividade brutal, mas, como mostrarei mais adiante, a matemática financeira não conhece esse algoritmo.
A legislação da Ucrânia e a matemática financeira não dão uma resposta clara à questão de como cobrar 3% ao ano? Procurei vários livros sobre esse assunto, mas os livros são antigos, datando de 2002. Portanto, os algoritmos dos livros serão complementados pelo fato de que foi possível pesquisar no Google a partir de artigos mais modernos e ocidentais. [1] foi reimpresso em 2007, e livros mais recentes em russo não foram encontrados. Talvez porque a matemática financeira, como ciência, tenha se originado há muito tempo, muito antes do advento dos computadores, conceitos como "crédito" e "juros sobre crédito" surgiram centenas de anos atrás. E os algoritmos não mudaram muito desde 2002.
Mas a visão ocidental do problema é diferente da descrita nos livros em russo. Citarei informações primeiro de livros em russo e depois de artigos ocidentais, indicando onde eles coincidem.
O que está escrito abaixo refere-se ao caso específico de acumular 3% ao ano dos atrasados, mas pode ser generalizado para o cálculo dos juros de outras relações de crédito se os juros forem acumulados de acordo com o esquema de juros simples e não com juros compostos.
De acordo com o art. 625 O Código Civil da Ucrânia precisa acumular 3% ao ano, de acordo com o esquema de juros simples. Para calcular a quantia de juros, a quantia de dívida (ou o corpo do empréstimo, no caso geral) deve ser multiplicada pela taxa de juros anual normalizada de 3% e multiplicada pela fração do ano (duração em anos) a que o atraso chegou. Esse compartilhamento pode ser maior que 1 se o atraso for superior a um ano.
A duração do atraso é expressa em dias. Em um caso mais geral, o prazo do empréstimo
pode ser expresso em dias (a situação em que o prazo do empréstimo é expresso em meses e anos não é considerada aqui). E a taxa anual de 3% é a taxa normalizada de juros simples para o ano.
Portanto, você precisa conseguir aumentar a duração do atraso (crédito) em dias para a duração em anos. Esta não é uma tarefa trivial, pois a duração do ano depende do seu número.A duração em dias é uma medida definida exclusivamente da duração das lacunas do calendário, em oposição à duração em anos. A definição deste último requer esclarecimentos na forma de uma regra para converter a duração em dias para a duração em anos. Vários métodos padrão para converter a duração em dias para a duração em anos são baseados na divisão do número de dias pelo chamado
"divisor anual" . Os valores mais típicos do divisor anual são 360 e 365 dias. Nos casos mais simples, o divisor é um número constante e independente de intervalo. O número de dias em um período sempre atua como um dividendo (numerador de uma fração).
E você precisa decidir sobre o procedimento para calcular os termos em dias. Vamos considerar dois exemplos absurdos:
- O cliente recebe um empréstimo de curto prazo do banco de 6 de dezembro de 2018 a 7 de dezembro de 2018. Qual é o prazo do contrato e quantos dias eu preciso para acumular juros? Obviamente - 1 dia.
- O assinante pré-encomenda o serviço da operadora de telecomunicações, com um período de validade no futuro de 6 de dezembro de 2018 a 7 de dezembro de 2018. Quais são as linhas de prestação de serviços e por quantos dias tenho que pagar uma taxa de assinatura pelo serviço? Obviamente 2 dias.
Qual a diferença?
O fato é que o dia não é um ponto na linha do tempo, mas um intervalo que pode ser escrito de duas maneiras (lembro que o colchete na borda do intervalo significa que o ponto está no intervalo, o parêntese é o ponto que não está no intervalo):
- [06.12.2018 00.00.00, 07/07/2018 00.00.00) - aqui a borda direita do intervalo não está incluída no intervalo,
- [06/06/2018 00.00.00, 06/06/2018 23.59.59] - aqui a borda direita do intervalo está incluída no intervalo.
No primeiro caso (1), quando o intervalo de tempo não é fornecido explicitamente, mas na forma de um intervalo entre datas, o número exato de dias é geralmente calculado, incluindo o primeiro ou o último dia, mas não os dois. [4] diz o mesmo em outras palavras: "O dia em que o empréstimo é emitido e o dia do reembolso é considerado um dia".
Este método determina o tempo exato chamado. Também pode ser facilmente determinado se as duas datas se referem ao mesmo ano e se um calendário está disponível mostrando o número de série de cada dia do ano. Basta subtrair o número de série da data inicial do número de série da data final e o resultado fornecerá a duração do período. No Oracle Database, você pode simplesmente subtrair datas (tipo DATE) truncadas para um dia (com tempo descartado), uma da outra, a diferença é um número inteiro de dias.
No segundo caso (2) estamos falando de dias, então contamos dois dias.
Além disso, procedo do fato de que o número de dias em que você já foi determinado, por exemplo, no caso de serviços comunitários, quando o prazo de pagamento é 20 de setembro (ou seja, este é o último dia de pagamento aceitável) e foi pago em 21 de setembro, ou seja. é óbvio que o atraso deve ser igual a 1 dia. Caso você se depare com uma indicação do intervalo que não inclui a borda esquerda - basta mover a borda esquerda um dia para a direita.
Como contamos o número de dias e o numerador de uma fração? Há um cálculo exato e um cálculo aproximado.
Contagem precisa de dias
Prática de língua russa
O texto é ainda baseado em [1].
A escolha do número exato de dias em um período como divisor e as duas regras mais comuns fornecem as regras mais comuns como denominador - um divisor anual de 360 ou 365:
Regra (R1) ACT / 365. Para esta regra, a duração em dias é dividida pelo número 365. Observo que a duração de um ano bissexto será 366/365 = 1,00274, que é mais de um. O erro de regra do ACT / 365 será o maior, mais anos bissextos em um período. Portanto, o valor de 3% ao ano acumulado por esta regra será superior a 3%.
Regra (R2) ACT / 360. Essa é a chamada "regra bancária", segundo a qual a duração em dias é dividida em 360. Essa regra aumenta ainda mais a duração anual das lacunas. Para um ano não bissexto, sua duração será 365/360 = 1.01389, e para um ano bissexto 366/360 = 1.01667. Naturalmente, quanto mais longo o período, maior o grau de “alongamento” em anos. Essa regra é mais frequentemente usada em cálculos relacionados ao mercado monetário, ou seja, dívida de curto prazo do mercado, como depósitos em bancos, letras, títulos comerciais, certificados de depósito, etc. O valor de 3% ao ano para o ano será ainda maior do que quando se utiliza a regra anterior.
No caso de o divisor anual ser aceito igual a 360 dias, os juros obtidos com esse divisor são denominados
ordinários ou
comerciais . Se o divisor for considerado igual a 365 ou, como mostrarei mais adiante, 366 dias, o interesse será chamado exato.
Obviamente, porcentagens comuns são mais que exatas.
Embora a primeira regra seja mais precisa que a segunda, ambas não são precisas o suficiente.
Para eliminar o efeito de anos bissextos nos resultados, existem duas outras regras.
Regra (R3) ACT / 365, Japão. O cálculo é realizado da mesma maneira que para a regra ACT / 365, mas ao calcular a duração do intervalo (numerador de frações), as datas dos saltos são excluídas. O divisor anual permanece inalterado.
De acordo com o Wiki:
Em muitos países europeus, até o século 18, o dia 29 de fevereiro era considerado um dia inexistente, uma data que não possui status legal. Muitas vezes, as transações não eram feitas naquele dia, os pagamentos não eram feitos, eles não eram endividados, etc., devido ao fato de haver dificuldades com o lado formal da questão e com a solução de casos em tribunal.
Outra maneira está relacionada à mudança real do divisor.
Regra (R4) ACT / ACT básica. Dividimos o período desejado em três partes:
- a primeira parte, a partir da data de início até o final do ano em que a data de início está localizada,
- a terceira parte - do início do ano em que a data final está localizada, até a data final,
- a segunda parte - 0 ou vários anos civis completos entre a primeira e a terceira partes.
As durações da primeira e terceira partes são obtidas dividindo o número de dias pelo divisor anual 365 ou 366, dependendo de se tratar de um ano bissexto. A duração do segundo período consiste em um número inteiro de anos civis completos, por definição, independentemente de serem saltos ou não. A duração em anos de todo o período é obtida somando-se as durações de três partes, representadas por três números, dos quais o segundo é um todo e o primeiro e o terceiro são fracionários.
Regra (R5) ACT / ACT modificação "curta", por períodos inferiores a um ano. Nesse caso, a duração em dias é dividida pelo divisor anual 365 ou 366, dependendo da existência de uma data em 29 de fevereiro no período de pesquisa? Um recurso da regra curta ACT / ACT é que, se o intervalo não se encaixar no ano civil (seus fins pertencem aos anos vizinhos), a aplicação das regras básicas e breves levará a resultados diferentes.
Prática ocidental
Na prática ocidental, as regras são descritas de maneira diferente. Freqüentemente, as mesmas regras no idioma russo recebem nomes diferentes e, além disso, não uma por vez.
A informação é baseada mais em [2]. Este é Vicki, verifiquei todas as fontes e usei outras informações do google: nas regras com um número exato de dias, tudo está correto, mas nas regras com um número aproximado de dias há outras interpretações das regras e, com frequência, elas mudam com o tempo, portanto, para colocar as regras em prática o número aproximado de dias em que este artigo não é suficiente.
Regra (W1) ISDA real / real. Essa regra fornece o mesmo resultado que (R4) “ACT / ACT main”, mas é formulada de maneira diferente: o intervalo é dividido em anos bissextos e não bissextos, independentemente de serem completos ou incompletos, além disso, a soma dos dias que se seguem anos bissextos, divididos por 365, e a soma dos dias em anos não bissextos é dividida por 366, os dois números são somados.
Outros nomes da regra na prática ocidental: Real / Real, Ato / Ato, Real / 365, Ato / 365. Sim, o sobrenome é igual à regra (R1), embora a essência da regra seja diferente.
Regra (W2) Real / 365 corrigida. Essa regra repete exatamente a regra (R1) ACT / 365 - o número de dias é dividido por 365.
Outros nomes da regra na prática ocidental: Act / 365 Fixo, A / 365 Fixo, A / 365F, Inglês.
Regra (W3) Real / 360. Esta regra repete (R2) ACT / 360 - o número exato de dias é dividido por 360.
Regra (W4) Real / 364. O número de dias é dividido por 364. Não possui análogo na prática de língua russa.
Regra (W5) Real / 365L. Consiste em dois ajustes:
- Para pagamentos anuais. Se a data for 29 de fevereiro no período, o número de dias no período será dividido pelo divisor anual 366, se não, por 365. Nesse sentido, ele coincide com a regra (R5) ACT / ACT “modificação curta”.
- Se a frequência dos pagamentos for diferente da anual. Se a data final estiver em um ano bissexto (e não for necessariamente igual a 29 de fevereiro), o divisor anual será 366, caso contrário - 365. Na prática de língua russa, não há analógico.
Outro nome é ISMA-Year.
Regra (W6) AFB real / real. Consiste em dois ajustes:
- O principal para períodos inferiores a um ano: se a data for 29 de fevereiro no período, o número de dias no período será dividido pelo divisor anual 366, se não, por 365. Nesse sentido, ele também coincide com a regra de “modificação curta” do R / ACT ACT / ACT .
- Estendido, por períodos superiores a um ano: um ano inteiro inteiro é contado da data final até a data inicial. Para um saldo inferior a um ano, a regra principal se aplica. O número de anos completos e a parcela do ano de acordo com a regra básica são resumidos.
Existem nuances associadas à contagem regressiva anos atrás, se a contagem regressiva foi realizada em 28 de fevereiro e, após um número inteiro de anos completos atrás, o ano acabou sendo um ano bissexto. Nesse caso, a data de n anos atrás deve ser adotada em 29 de fevereiro. Acrescentarei que a pergunta também surge se a contagem regressiva foi realizada em 29 de fevereiro e o número de anos completos atrás não é um múltiplo de quatro, e, portanto, o ano anterior não foi um ano bissexto. Não entrei em detalhes aqui. Mas você pode consultar os links de [2].E “cereja no bolo”, Regra (W7) 1/1. O número de dias é dividido pelo divisor anual 365.25. Usado para cálculos relacionados à inflação.Contagem estimada de dias
As regras listadas acima foram baseadas na duração exata em dias de períodos do calendário. No entanto, algumas vezes existem esquemas baseados na chamada contagem simplificada ou aproximada de dias. A idéia desses esquemas é "igualar" a duração de todos os meses a 30 dias. Assim, o ano consistirá em 12 meses de 30 dias, ou seja, de 360 dias. Portanto, o divisor anual (denominador da fração) para essas regras sempre será 360 e o numerador é calculado de maneira especial.Como o número exato de dias de empréstimo na maioria dos casos, mas é claro, nem sempre, é maior que o valor aproximado (que pode ser facilmente verificado através da determinação do número médio anual de dias em um mês, que é 30,44), o método de cálculo de juros com o número exato de dias de empréstimo geralmente fornece maior crescimento que aproximado. [4]A versão mais simples desta regra, a chamada regra básica 30/360 , é descrita a seguir (a seguir, as informações do livro [1] - prática em língua russa):regra básica 30/360. O número aproximado de dias entre as datas é 360 * (y2 - y1) + 30 * (m2 - m1) + (d2 - d1),
onde y, m, d - ano, mês e dia na segunda e na primeira datas.Essa regra apareceu antes da criação dos primeiros dispositivos de computação e economizou significativamente o custo das operações de computação na prática financeira. Embora agora a necessidade de métodos simplificados tenha desaparecido, no entanto, tendo adquirido um ponto de apoio na prática, por tradição eles são às vezes usados no presente momento.A regra se aplica a uma indicação obrigatória de uma modificação que indica como lidar com os últimos dias dos meses:Prática de língua russa
Conduzido por [1].Regra (R6) 30/360 ISDA. Se d1 = 31, então d1 '= 30, caso contrário, d1' = d1. Se d2 = 31 ed1 '= 30, então d2' = 30, caso contrário d2 '= d2.Regra (R7) 30E / 360. Se d1 = 31, então d1 '= 30, caso contrário, d1' = d1. Se d2 = 31, então d2 '= 30, caso contrário d2' = d2.Esta regra é uma variante da regra ISDA 30/360, usada principalmente na Europa, daí o rótulo "E" no nome da regra. Difere da regra ISDA 30/360 somente quando a segunda data também é a 31ª. A versão européia sempre a converte no 30º número, independentemente da primeira data.Regra (R8) 30/360 PSA. Se d1 = 31 ou d1 for o último dia de fevereiro, então d1 '= 30, caso contrário, d1' = d1. Se d2 = 31 ed1 '= 30, então d2' = 30, caso contrário d2 '= d2.A descrição da regra 30/360 SIA em [1] provavelmente é um erro, portanto não a darei aqui.Prática ocidental
Dado de acordo com [2].Regra (W8) 30/360 Base de obrigações. O mesmo que (R6) 30/360 ISDA. Outro nome: 30A / 360.Regra (W9) 30E / 360. O mesmo que (R7) 30E / 360. Outros nomes: 30/360 ICMA, 30S / 360, base Eurobond (ISDA 2006), alemão especial.Regra (W10) 30E / 360 ISDA. Se d1 for o último dia do mês, então d1 '= 30. Se d2 for o último dia de NÃO fevereiro, d2 '= 30.Outros nomes: ISE 30E / 360, base Eurobond (ISDA 2000), alemão.Regra (W11) 30/360 SIA. Se d1 for o último dia de fevereiro e d2 for o último dia de fevereiro, d2 '= 30. Se d1 = 31 ou o último dia de fevereiro, então d1 '= 30, caso contrário, d1' = d1. Se d1 '= 30 ed2 = 31, então d2' = 30, caso contrário, d2 '= d1.As regras (R4) ACT / ACT, (W1) ISDA Real / Real, (W2) Real / 365 Fixo também são chamadas de “Prática de Inglês”.
As regras (R2) ACT / 360 e (W3) Atual / 360 também são chamadas de "prática francesa".
As regras (R7) 30E / 360, (W9) 30E / 360 e (W10) 30E / 360 ISDA também são chamadas de "prática alemã" ou "prática alemã".Portanto, levando em consideração o interesse exato e ordinário, bem como o número exato e aproximado de dias para calcular o interesse, temos quatro métodos para calcular o interesse simples (os nomes das regras são indicados na prática de língua russa):- Juros normais com o número exato de dias (ACT / 360 - regra bancária),
- Porcentagens exatas com o número exato de dias (ACT / 365, ACT / ACT),
- Juros normais com um número aproximado de dias (30/360),
- Porcentagens exatas com um número aproximado de dias.
O primeiro método mais comumente usado é chamado de regra bancária, menos frequentemente o segundo e o terceiro e quase nunca o quarto [1]. E [4] diz: "... uma opção de cálculo com juros exatos e um número aproximado de dias de empréstimo não tem sentido e não se aplica."Os cálculos acima da duração aproximada dos períodos em frações de um ano mostram a não trivialidade e variedade das regras aplicadas. Sua aplicação (assim como a origem) depende do país, moeda, tipo de instrumento financeiro, associação profissional, acordos. [1]CONCLUSÃO:Como conto 3% no meu caso com serviços públicos na Ucrânia?Análise da prática judicial de aplicação do art. 625 do Código Civil da Ucrânia afirma que o método (R1) ACT / 365 [3] é geralmente usado, mas isso não está claramente formulado. Eu acho que você ainda precisa se inscrever (R4) ACT / ACT, e eis o porquê: se você acumular 3% por um ano bissexto completo usando o método ACT / 365, o montante dos juros será igual a 3.008219%, que é para dívida (ou o tamanho do organismo de empréstimo) 1 milhão de unidades monetárias dará um excesso de UM 82,19 acima de 3%, que são estipulados pela taxa de juros padronizada anual nos termos da lei. Isso se tornará especialmente importante com a acumulação progressiva de juros.Eu gostaria de receber comentários, especialmente de funcionários do banco.Fontes utilizadas1) Bocharov, P.P., Kasimov, Yu.F. Matemática financeira. Moscou: Gardariki, 20022) Convenção de contagem de dias,en.wikipedia.org/wiki/Day_count_convention3) Análise da aplicação do art. 625 do Código Civil da Ucrânia em processos civis, zib.com.ua/ua/74602-analiz_praktiki_zastosuvannya_st_625_civilnogo_kodeksu_ukrai.html4) Chetyrkin E.M. Matemática financeira. Moscou: Caso, 20055) Convenções de contagem de dias e fatores de provisão , docs.fincad.com/support/developerfunc/mathref/Daycount.htm6) Carta de informações do Supremo Tribunal Econômico da Ucrânia nº 01-06 / 928/2012, de 17.07.2012, zakon.rada.gov.ua/laws/show/v_928600-12E agora um pequeno código no Oracle Database:Aqui está um pacote que fiz para o meu caso em particular - calcula os custos de inflação e 3% ao ano para a Ucrânia.Não há função agregada no banco de dados Oracle que multiplique os valores da inflação. Portanto, eu uso a soma dos logaritmos.Texto ocultoCREATE OR REPLACE TYPE DEBT_OVERHEAD_T as object (ID number, DEBT_DATE date, OVERHEAD_AMOUNT number); CREATE OR REPLACE TYPE DEBT_WITH_INF_AMOUNT_T as object (ID number, DEBT_DATE date, DEBT_AMOUNT number, PAYMENT_DATE date, INF_MONTH date, INF_RATE number, SKIP_INFLATION char (1), INF_RATE_ACCUMULATED number , INF_COEF_ACCUMULATED number, INF_AMOUNT_ACCUMULATED number, INF_AMOUNT_MONTH number); CREATE OR REPLACE TYPE DEBT_WITH_INF_T as object (ID number, DEBT_DATE date, DEBT_AMOUNT number, PAYMENT_DATE date, INF_MONTH date, INF_RATE number, SKIP_INFLATION char (1)); CREATE OR REPLACE TYPE DEBT_WITH_PCT_AMOUNT_T as object (ID number, DEBT_DATE date, DEBT_AMOUNT number, PAYMENT_DATE date, PCT_YEAR number, PCT_YEAR_DAYS number, PCT_YEAR_PCT_PER_DAY number, PCT_YEAR_BEGIN_DATE date , PCT_YEAR_END_DATE date, PCT_YEAR_DAYS_CALC number, PCT_YEAR_PCT_PER_YEAR number, PCT_AMOUNT_PER_YEAR number); CREATE OR REPLACE TYPE DEBT_OVERHEAD_LIST_T as table of DEBT_OVERHEAD_T; CREATE OR REPLACE TYPE DEBT_WITH_INF_AMOUNT_LIST_T as table of DEBT_WITH_INF_AMOUNT_T; CREATE OR REPLACE TYPE DEBT_WITH_INF_LIST_T as table of DEBT_WITH_INF_T; CREATE OR REPLACE TYPE DEBT_WITH_PCT_AMOUNT_LIST_T as table of DEBT_WITH_PCT_AMOUNT_T; CREATE OR REPLACE PACKAGE CALC_OVERHEADS_P is function GET_DEBT_WITH_INF (p_debt_date_begin date, p_debt_date_end date, p_last_collection_date date) return DEBT_WITH_INF_LIST_T; function GET_DEBT_WITH_INF_AMOUNT (p_debt_date_begin date, p_debt_date_end date, p_last_collection_date date) return DEBT_WITH_INF_AMOUNT_LIST_T; function GET_DEBT_WITH_INF_AMOUNT_TOTAL (p_debt_date_begin date, p_debt_date_end date, p_last_collection_date date) return DEBT_OVERHEAD_LIST_T; function GET_DEBT_WITH_PCT_AMOUNT (p_debt_date_begin date, p_debt_date_end date, p_last_collection_date date) return DEBT_WITH_PCT_AMOUNT_LIST_T; function GET_DEBT_WITH_PCT_AMOUNT_TOTAL (p_debt_date_begin date, p_debt_date_end date, p_last_collection_date date) return DEBT_OVERHEAD_LIST_T; end; / CREATE OR REPLACE PACKAGE BODY CALC_OVERHEADS_P is function GET_DEBT_WITH_INF (p_debt_date_begin date, p_debt_date_end date, p_last_collection_date date) return DEBT_WITH_INF_LIST_T is ret_value DEBT_WITH_INF_LIST_T; begin with T1 as (select a.ID, a.DEBT_DATE, a.DEBT_AMOUNT, a.PAYMENT_DATE, b.INF_MONTH, c.AVAL as INF_RATE from DEBTS a cross apply (select add_months (trunc (a.PAYMENT_DATE, 'month'), rownum - 1) as INF_MONTH from dual connect by level <= months_between (trunc (p_last_collection_date, 'month'), trunc (a.PAYMENT_DATE, 'month')) + 1) b left join INFLATION c on c.ADATE = b.INF_MONTH and c.TYP = 'M' where a.DEBT_DATE between p_debt_date_begin and p_debt_date_end ) , T2 as (select ID, DEBT_DATE, DEBT_AMOUNT, PAYMENT_DATE, INF_MONTH, INF_RATE , case when trunc (PAYMENT_DATE, 'month') = INF_MONTH and extract (day from PAYMENT_DATE) between 16 and 31 then 'Y' when trunc (p_last_collection_date, 'month') = INF_MONTH and extract (day from p_last_collection_date) between 1 and 15 then 'Y' end as SKIP_INFLATION from T1) select DEBT_WITH_INF_T (ID, DEBT_DATE, DEBT_AMOUNT, PAYMENT_DATE, INF_MONTH, INF_RATE, SKIP_INFLATION) bulk collect into ret_value from T2; return ret_value; end; function GET_DEBT_WITH_INF_AMOUNT (p_debt_date_begin date, p_debt_date_end date, p_last_collection_date date) return DEBT_WITH_INF_AMOUNT_LIST_T is ret_value DEBT_WITH_INF_AMOUNT_LIST_T; begin with T1 as (select ID, DEBT_DATE, DEBT_AMOUNT, PAYMENT_DATE, INF_MONTH, INF_RATE, SKIP_INFLATION , exp (sum (ln (case when SKIP_INFLATION = 'Y' or INF_RATE is null then 1 else INF_RATE / 100 end)) over (partition by ID order by INF_MONTH rows between unbounded preceding and current row)) * 100 as INF_RATE_ACCUMULATED from table (CALC_OVERHEADS_P.GET_DEBT_WITH_INF (p_debt_date_begin, p_debt_date_end, p_last_collection_date))) , T2 as (select ID, DEBT_DATE, DEBT_AMOUNT, PAYMENT_DATE, INF_MONTH, INF_RATE, SKIP_INFLATION, INF_RATE_ACCUMULATED , (INF_RATE_ACCUMULATED - 100) / 100 as INF_COEF_ACCUMULATED , round (((INF_RATE_ACCUMULATED - 100) / 100) * DEBT_AMOUNT, 2) as INF_AMOUNT_ACCUMULATED from T1) select DEBT_WITH_INF_AMOUNT_T (ID, DEBT_DATE, DEBT_AMOUNT, PAYMENT_DATE, INF_MONTH, INF_RATE, SKIP_INFLATION, INF_RATE_ACCUMULATED, INF_COEF_ACCUMULATED, INF_AMOUNT_ACCUMULATED , INF_AMOUNT_ACCUMULATED - lag (INF_AMOUNT_ACCUMULATED, 1, 0) over (partition by ID order by INF_MONTH)) bulk collect into ret_value from T2; return ret_value; end; function GET_DEBT_WITH_INF_AMOUNT_TOTAL (p_debt_date_begin date, p_debt_date_end date, p_last_collection_date date) return DEBT_OVERHEAD_LIST_T is ret_value DEBT_OVERHEAD_LIST_T; begin with T1 as (select ID , DEBT_DATE , round ((exp (sum (ln (case when SKIP_INFLATION = 'Y' then 1 else INF_RATE / 100 end))) - 1) * DEBT_AMOUNT, 2) as INF_AMOUNT from table (CALC_OVERHEADS_P.GET_DEBT_WITH_INF (p_debt_date_begin, p_debt_date_end, p_last_collection_date)) group by ID, DEBT_DATE, DEBT_AMOUNT) select DEBT_OVERHEAD_T (ID, DEBT_DATE, INF_AMOUNT) bulk collect into ret_value from T1; return ret_value; end; function GET_DEBT_WITH_PCT_AMOUNT (p_debt_date_begin date, p_debt_date_end date, p_last_collection_date date) return DEBT_WITH_PCT_AMOUNT_LIST_T is ret_value DEBT_WITH_PCT_AMOUNT_LIST_T; begin with T1 as (select * from DEBTS a cross apply (select extract (year from PAYMENT_DATE) + level - 1 as PCT_YEAR from dual connect by level <= extract (year from p_last_collection_date) - extract (year from PAYMENT_DATE) + 1) where DEBT_DATE between p_debt_date_begin and p_debt_date_end ) , T2 as (select ID, DEBT_DATE, DEBT_AMOUNT, PAYMENT_DATE, PCT_YEAR, to_date ('31.12.'||PCT_YEAR, 'DD.MM.YYYY') - to_date ('01.01.'||PCT_YEAR, 'DD.MM.YYYY') + 1 as PCT_YEAR_DAYS from T1) , T3 as (select ID, DEBT_DATE, DEBT_AMOUNT, PAYMENT_DATE, PCT_YEAR, PCT_YEAR_DAYS , 0.03 / PCT_YEAR_DAYS as PCT_YEAR_PCT_PER_DAY from T2) , T4 as (select ID, DEBT_DATE, DEBT_AMOUNT, PAYMENT_DATE, PCT_YEAR, PCT_YEAR_DAYS, PCT_YEAR_PCT_PER_DAY , greatest (PAYMENT_DATE + 1, to_date ('01.01.'||PCT_YEAR, 'DD-MM-YYYY')) as PCT_YEAR_BEGIN_DATE , least (to_date ('31.12.'||PCT_YEAR, 'DD-MM-YYYY'), p_last_collection_date) as PCT_YEAR_END_DATE from T3) , T5 as (select ID, DEBT_DATE, DEBT_AMOUNT, PAYMENT_DATE, PCT_YEAR, PCT_YEAR_DAYS, PCT_YEAR_PCT_PER_DAY, PCT_YEAR_BEGIN_DATE, PCT_YEAR_END_DATE , PCT_YEAR_END_DATE - PCT_YEAR_BEGIN_DATE + 1 as PCT_YEAR_DAYS_CALC , (PCT_YEAR_END_DATE - PCT_YEAR_BEGIN_DATE + 1) * PCT_YEAR_PCT_PER_DAY as PCT_YEAR_PCT_PER_YEAR , round ((PCT_YEAR_END_DATE - PCT_YEAR_BEGIN_DATE + 1) * PCT_YEAR_PCT_PER_DAY * DEBT_AMOUNT, 2) as PCT_AMOUNT_PER_YEAR from T4) select DEBT_WITH_PCT_AMOUNT_T (ID, DEBT_DATE, DEBT_AMOUNT, PAYMENT_DATE, PCT_YEAR, PCT_YEAR_DAYS, PCT_YEAR_PCT_PER_DAY, PCT_YEAR_BEGIN_DATE, PCT_YEAR_END_DATE, PCT_YEAR_DAYS_CALC, PCT_YEAR_PCT_PER_YEAR, PCT_AMOUNT_PER_YEAR) bulk collect into ret_value from T5; return ret_value; end; function GET_DEBT_WITH_PCT_AMOUNT_TOTAL (p_debt_date_begin date, p_debt_date_end date, p_last_collection_date date) return DEBT_OVERHEAD_LIST_T is ret_value DEBT_OVERHEAD_LIST_T; begin select DEBT_OVERHEAD_T (ID, DEBT_DATE, sum (PCT_AMOUNT_PER_YEAR)) bulk collect into ret_value from table (CALC_OVERHEADS_P.GET_DEBT_WITH_PCT_AMOUNT (p_debt_date_begin, p_debt_date_end, p_last_collection_date)) group by ID, DEBT_DATE; return ret_value; end; end;