Skip to content

Commit

Permalink
Merge pull request #439 from shraddha761/rateReturn
Browse files Browse the repository at this point in the history
Rate of return endpoint is added
  • Loading branch information
ighoshsubho authored Jul 12, 2023
2 parents 1782b0e + 78d3d34 commit a0f69c5
Show file tree
Hide file tree
Showing 6 changed files with 73 additions and 4 deletions.
6 changes: 6 additions & 0 deletions DOCUMENTATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@
| | | - `net_receivables` (float): The amount of net_receivables.|
| | | - `annual_operating_expenses` (float): The amount of annual_operating_expenses.|
| | | - `non_cash_charges` (float): The amount of non cash charges.|
|-----------------------------|----------------------------------------------|-----------------------------------------------------------|
| post /rate_of_return | Calculate Rate of Return | - `initial_investment` (float): Initial amount invested. |
| | | - `final_value` (float): the value of the investment at the end of the investment. |
| | | - `time_period` (float): The number of months. |
| | | - `cash_flows` (float): A list of cash flows over the investment period. |
| | | - `holding_period` (float): The specific holding period of the investment. |
| --------------------------- | ---------------------------------------- | --------------------------------------------------------- |
| GET /financial_assest_ratio | Calculate financial assest ratio | - `current_assets` (float): used up within a short period. |
| | | - `current_liabilities` (float): debts that are due . |
Expand Down
12 changes: 12 additions & 0 deletions ENDPOINTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -2133,6 +2133,14 @@ Sample Output
"Loss Percentage": 6.67,
}
```
**POST** `/rate_return_calculator`

- Request body : `{
"initial_investment": 10000,
"final_value": 12500,
"time_period": 3,
"cash_flows": [500, 800, -200],
"holding_period": 2,
**POST** `/financial_assest_ratio`
Expand All @@ -2148,6 +2156,10 @@ Sample Output
```py
{
"Tag": "Rate of return",
"rate_of_return": 25.0,
"annualized_return": 8.333333333333334,
"holding_period_return": 50.0,
"Tag": "Financial assest ratio",
"current_ratio": 1.5,
"debt_to_equity_ratio": 0.8,
Expand Down
8 changes: 7 additions & 1 deletion helpers/functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -1982,7 +1982,13 @@ def defensive_interval_ratio(cash: float, marketable_securities: float,
ratio = current_assets / daily_operational_expenses
return ratio

## Function to Calculate Financial Assest Ratio
# Function to Calculate Debt Service Coverage Ratio.

def rate_of_return(initial_investment: float, final_value: float ):
rate_of_return = ((final_value - initial_investment) / initial_investment) * 100
return rate_of_return

## Function to Calculate Financial Assest Ratio

def calculate_financial_asset_ratios(current_assets, current_liabilities, total_debt, total_equity, net_income, total_revenue, total_assets):

Expand Down
18 changes: 16 additions & 2 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,8 +131,9 @@
from tasks.profit_percentage import profit_percentage_task
from tasks.loss_percentage import loss_percentage_task
from tasks.defensive_interval_ratio import defensive_interval_ratio_task
from tasks.RateofReturn import calculate_rate_of_return
from tasks.cash_conversion_cycle import cash_conversion_cycle_task
from validators.request_validators import SimpleInterestRateRequest, calculatePension, compoundInterest, futureSip, paybackPeriod, capmRequest, DebtServiceCoverageRatio, futureValueOfAnnuity, futureValueOfAnnuityDue, ProfitPercentage, LossPercentage, DefensiveIntervalRatio, CashConversionCycle, financialAssestRatio
from validators.request_validators import SimpleInterestRateRequest, calculatePension, compoundInterest, futureSip, paybackPeriod, capmRequest, DebtServiceCoverageRatio, futureValueOfAnnuity, futureValueOfAnnuityDue, ProfitPercentage, LossPercentage, DefensiveIntervalRatio, CashConversionCycle, RateofReturn, financialAssestRatio
from tasks.financialAssestRatio import financial_assest_ratio

# Creating the app
Expand Down Expand Up @@ -1881,6 +1882,19 @@ def defensive_interval_ratio(request: DefensiveIntervalRatio):
return defensive_interval_ratio_task(request.cash, request.marketable_securities,
request.net_receivables, request.annual_operating_expenses , request.non_cash_charges)

# Endpoint to calculate Rate of return

@app.post(
"/rate_of_return",
tags=["rate_of_return"],
description="Calculate Rate of return",
)
def rate_of_return(request: RateofReturn):
return calculate_rate_of_return(request.initial_investment,
request.final_value,
request.cash_flows,
request.time_period,
request.holding_period)
# Endpoint to calculate Financial assest Ratio

@app.post(
Expand All @@ -1896,6 +1910,7 @@ def financial_assest_ratio(request: financialAssestRatio):
request.net_income,
request.total_revenue)


# Endpoint to calculate Cash Conversion Cycle

@app.post(
Expand All @@ -1907,4 +1922,3 @@ def cash_conversion_cycle(request: CashConversionCycle):
return cash_conversion_cycle_task(request.beginning_inventory , request.ending_inventory ,
request.beginning_receivables, request.ending_receivables , request.beginning_payable,
request.ending_payable , request.net_credit_sales , request.cost_of_goods_sold)

25 changes: 25 additions & 0 deletions tasks/RateofReturn.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from helpers import functions
from fastapi import HTTPException, status

def calculate_rate_of_return(initial_investment: float, final_value: float, cash_flows: float,
time_period: float, holding_period: float):
try:
net_cash_flows = sum(cash_flows)
final_value += net_cash_flows

if holding_period > 0:
rate_of_return = ((final_value - initial_investment) / (initial_investment + net_cash_flows)) * 100
holding_period_return = ((final_value - initial_investment) / initial_investment) * 100
else:
rate_of_return = ((final_value - initial_investment) / initial_investment) * 100
holding_period_return = rate_of_return

annualized_return = rate_of_return / time_period
return {
"Tag": "Rate of return",
"rate_of_return": rate_of_return,
"annualized_return": annualized_return,
"holding_period_return": holding_period_return
}
except:
return HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR)
8 changes: 7 additions & 1 deletion validators/request_validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -604,6 +604,13 @@ class DefensiveIntervalRatio(BaseModel):
annual_operating_expenses: float
non_cash_charges: float

class RateofReturn(BaseModel):
initial_investment: float
final_value: float
cash_flows: float
time_period: float
holding_period: float

class financialAssestRatio(BaseModel):
current_assets: float
current_liabilities: float
Expand All @@ -621,4 +628,3 @@ class CashConversionCycle(BaseModel):
ending_payable: float
cost_of_goods_sold: float
net_credit_sales: float

0 comments on commit a0f69c5

Please sign in to comment.