{"version":3,"file":"growth-for-investment-DqHoa_C-.js","sources":["../../../app/javascript/app/calculators/growth-for-investment.js"],"sourcesContent":["import * as d3 from '~/app/custom-d3'\nimport Finance from 'financejs'\nconst finance = new Finance()\n\nexport default function growthForInvestment({\n amount, years=30, growthRate=0.07,\n callback = null,\n yearlyFee=0, additionalDeposit=0, depositFrequency=1,\n feeFrontLoad=0, feeBackLoad=0, feeAdvisor=0, feeExpense=0}) {\n var yearRange = d3.range(0, years+1),\n growthRateWithFees = growthRate - feeAdvisor -feeExpense,\n lastYearAmount = amount,\n additionalDepositAmountPerYear = additionalDeposit * depositFrequency,\n options, staticFeeTotal = 0\n\n return yearRange.map((year, index) => {\n if(callback) {\n options = callback({\n amount: lastYearAmount,\n years: year\n })\n\n feeAdvisor = options.feeAdvisor || 0\n feeExpense = options.feeExpense || 0\n growthRateWithFees = growthRate - feeAdvisor - feeExpense;\n yearlyFee = options.yearlyFee || 0\n additionalDepositAmountPerYear = (options.additionalDeposit || 0) * (options.depositFrequency || 1) - yearlyFee\n\n feeFrontLoad = options.feeFrontLoad || 0\n feeBackLoad = options.feeBackLoad || 0\n }\n\n\n var returns = {\n year: year,\n startingAmount: lastYearAmount,\n amount: lastYearAmount,\n feeAdvisor: 0,\n feeExpense: 0,\n feeBackLoad: 0,\n feeFrontLoad: 0,\n yearlyFee: 0,\n properties: {\n feeAdvisor: feeAdvisor,\n feeExpense: feeExpense,\n yearlyFee: yearlyFee,\n growthRateWithFees: growthRateWithFees,\n additionalDeposit: additionalDeposit,\n feeFrontLoad: feeFrontLoad,\n feeBackLoad: feeBackLoad\n }\n }\n\n // Fee: Front Load\n if((index === 0) && (feeFrontLoad > 0)) {\n returns.feeFrontLoad = returns.startingAmount * feeFrontLoad\n returns.amount = lastYearAmount - returns.feeFrontLoad\n }\n\n if((index > 0)) {\n // Amount at the end of the year\n var growthForAdditionalDeposit = finance.FV(growthRateWithFees * 100, additionalDepositAmountPerYear, 1)\n var growthForStartingAmount = finance.FV(growthRateWithFees * 100, returns.startingAmount, 1)\n returns.amount = growthForAdditionalDeposit + growthForStartingAmount\n returns.yearlyGrowth = returns.amount - returns.startingAmount\n\n // Fee: feeAdvisor\n if(feeAdvisor > 0) {\n returns.feeAdvisor = finance.FV(feeAdvisor * 100, returns.startingAmount, 1)\n }\n // Fee: feeExpense\n if(feeExpense > 0) {\n returns.feeExpense = finance.FV(feeExpense * 100, returns.startingAmount, 1)\n }\n if(yearlyFee > 0) {\n returns.yearlyFee = +(yearlyFee + finance.FV(growthRate * 100, staticFeeTotal, 1) - staticFeeTotal).toFixed(2)\n staticFeeTotal = +(yearlyFee + finance.FV(growthRate * 100, staticFeeTotal, 1))\n }\n }\n\n // Fee: Back Load\n if((index === years) && (feeBackLoad > 0)) {\n returns.feeBackLoad = returns.amount * feeBackLoad\n returns.amount = returns.amount - returns['feeBackLoad']\n }\n // Sum of all fees\n returns.feeTotal = returns.feeAdvisor + returns.feeExpense + returns.feeBackLoad + returns.feeFrontLoad + returns.yearlyFee\n\n lastYearAmount = returns.amount\n return returns\n })\n}\n"],"names":["finance","Finance","growthForInvestment","amount","years","growthRate","callback","yearlyFee","additionalDeposit","depositFrequency","feeFrontLoad","feeBackLoad","feeAdvisor","feeExpense","yearRange","d3.range","growthRateWithFees","lastYearAmount","additionalDepositAmountPerYear","options","staticFeeTotal","year","index","returns","growthForAdditionalDeposit","growthForStartingAmount"],"mappings":"iFAEA,MAAMA,EAAU,IAAIC,EAEL,SAASC,EAAoB,CAClB,OAAAC,EAAQ,MAAAC,EAAM,GAAI,WAAAC,EAAW,IAC7B,SAAAC,EAAW,KACX,UAAAC,EAAU,EAAG,kBAAAC,EAAkB,EAAG,iBAAAC,EAAiB,EACnD,aAAAC,EAAa,EAAG,YAAAC,EAAY,EAAG,WAAAC,EAAW,EAAG,WAAAC,EAAW,CAAC,EAAG,CACpF,IAAIC,EAAYC,EAAS,EAAGX,EAAM,CAAC,EAC/BY,EAAqBX,EAAaO,EAAYC,EAC9CI,EAAiBd,EACjBe,EAAiCV,EAAoBC,EACrDU,EAASC,EAAiB,EAE9B,OAAON,EAAU,IAAI,CAACO,EAAMC,IAAU,CACjChB,IACDa,EAAUb,EAAS,CACjB,OAAQW,EACR,MAAOI,CACR,CAAA,EAEDT,EAAaO,EAAQ,YAAc,EACnCN,EAAaM,EAAQ,YAAc,EACnCH,EAAqBX,EAAaO,EAAaC,EAC/CN,EAAYY,EAAQ,WAAa,EACjCD,GAAkCC,EAAQ,mBAAqB,IAAMA,EAAQ,kBAAoB,GAAKZ,EAEtGG,EAAeS,EAAQ,cAAgB,EACvCR,EAAcQ,EAAQ,aAAe,GAIvC,IAAII,EAAU,CACZ,KAAMF,EACN,eAAgBJ,EAChB,OAAQA,EACR,WAAY,EACZ,WAAY,EACZ,YAAa,EACb,aAAc,EACd,UAAW,EACX,WAAY,CACV,WAAYL,EACZ,WAAYC,EACZ,UAAWN,EACX,mBAAoBS,EACpB,kBAAmBR,EACnB,aAAcE,EACd,YAAaC,CACrB,CACA,EAQI,GALIW,IAAU,GAAOZ,EAAe,IAClCa,EAAQ,aAAeA,EAAQ,eAAiBb,EAChDa,EAAQ,OAASN,EAAiBM,EAAQ,cAGxCD,EAAQ,EAAI,CAEd,IAAIE,EAA6BxB,EAAQ,GAAGgB,EAAqB,IAAKE,EAAgC,CAAC,EACnGO,EAA0BzB,EAAQ,GAAGgB,EAAqB,IAAKO,EAAQ,eAAgB,CAAC,EAC5FA,EAAQ,OAASC,EAA6BC,EAC9CF,EAAQ,aAAeA,EAAQ,OAASA,EAAQ,eAG7CX,EAAa,IACdW,EAAQ,WAAavB,EAAQ,GAAGY,EAAa,IAAKW,EAAQ,eAAgB,CAAC,GAG1EV,EAAa,IACdU,EAAQ,WAAavB,EAAQ,GAAGa,EAAa,IAAKU,EAAQ,eAAgB,CAAC,GAE1EhB,EAAY,IACbgB,EAAQ,UAAY,EAAEhB,EAAYP,EAAQ,GAAGK,EAAa,IAAKe,EAAgB,CAAC,EAAIA,GAAgB,QAAQ,CAAC,EAC7GA,EAAiB,EAAEb,EAAYP,EAAQ,GAAGK,EAAa,IAAKe,EAAgB,CAAC,GAErF,CAGI,OAAIE,IAAUlB,GAAWO,EAAc,IACrCY,EAAQ,YAAcA,EAAQ,OAASZ,EACvCY,EAAQ,OAASA,EAAQ,OAASA,EAAQ,aAG5CA,EAAQ,SAAWA,EAAQ,WAAaA,EAAQ,WAAaA,EAAQ,YAAcA,EAAQ,aAAeA,EAAQ,UAElHN,EAAiBM,EAAQ,OAClBA,CACR,CAAA,CACH"}