financial-calc-br
Version:
Calculadora financeira brasileira com suporte a financiamentos, investimentos e cartão de crédito
89 lines (88 loc) • 2.82 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.formatMoney = formatMoney;
exports.parseMoney = parseMoney;
exports.convertRate = convertRate;
exports.calcIRRate = calcIRRate;
exports.isValidNumber = isValidNumber;
exports.validateFinancialParams = validateFinancialParams;
exports.formatPeriod = formatPeriod;
exports.calcPercentDifference = calcPercentDifference;
exports.compoundInterest = compoundInterest;
function formatMoney(valor) {
return new Intl.NumberFormat("pt-BR", {
style: "currency",
currency: "BRL",
}).format(valor);
}
function parseMoney(valor) {
if (typeof valor === "number")
return valor;
return parseFloat(valor.replace(/[R$\.\s]/g, "").replace(",", "."));
}
function convertRate(taxa, de, para) {
if (de === "anual" && para === "mensal") {
return (Math.pow(1 + taxa / 100, 1 / 12) - 1) * 100;
}
if (de === "mensal" && para === "anual") {
return (Math.pow(1 + taxa / 100, 12) - 1) * 100;
}
return taxa;
}
function calcIRRate(dias) {
if (dias <= 180)
return 22.5;
if (dias <= 360)
return 20;
if (dias <= 720)
return 17.5;
return 15;
}
function isValidNumber(valor) {
return typeof valor === "number" && !isNaN(valor) && isFinite(valor);
}
function validateFinancialParams(valor, taxa, tempo) {
const errors = [];
if (!isValidNumber(valor) || valor <= 0) {
errors.push("Valor deve ser um número positivo");
}
if (!isValidNumber(taxa) || taxa < 0) {
errors.push("Taxa deve ser um número positivo ou zero");
}
if (!isValidNumber(tempo) || tempo <= 0) {
errors.push("Tempo deve ser um número positivo");
}
return {
isValid: errors.length === 0,
errors: errors,
};
}
function formatPeriod(meses) {
if (meses < 12) {
return `${meses} ${meses === 1 ? "mês" : "meses"}`;
}
const anos = Math.floor(meses / 12);
const mesesRestantes = meses % 12;
let resultado = `${anos} ${anos === 1 ? "ano" : "anos"}`;
if (mesesRestantes > 0) {
resultado += ` e ${mesesRestantes} ${mesesRestantes === 1 ? "mês" : "meses"}`;
}
return resultado;
}
function calcPercentDifference(valor1, valor2) {
if (valor2 === 0)
return 0;
return ((valor1 - valor2) / valor2) * 100;
}
function compoundInterest(capital, taxaAnual, anos) {
const parcelas = anos * 12;
const taxaMensal = convertRate(taxaAnual, "anual", "mensal");
const montante = capital * Math.pow(1 + taxaMensal / 100, parcelas);
return {
capital: capital,
taxa: taxaMensal,
periodo: formatPeriod(anos),
montante: Math.round(montante * 100) / 100,
juros: Math.round((montante - capital) * 100) / 100,
};
}