indexcalculation/Indicators/Profit/ReturnOnTotalAssets.py

74 lines
2.2 KiB
Python

"""
总资产报酬率
"""
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
from Common.schemas import IndicatorDescription
router = APIRouter()
# 指标描述
ENAME = "return_on_total_assets"
CNAME = "总资产报酬率"
NATURE = "定量"
CATEGORY = "盈利能力"
DESCRIPTION = ""
# 参数描述
PARAM1_ENAME = "the_total_profit"
PARAM1_CNAME = "利润总额"
PARAM1_DESCR = "利润表科目,指息税前利润。"
PARAM2_ENAME = "interest_expense"
PARAM2_CNAME = "利息费用"
PARAM2_DESCR = "利润表科目,营业总成本的子项。指借款的利息支出。"
PARAM3_ENAME = "current_total_assets"
PARAM3_CNAME = "资产合计(期末)"
PARAM3_DESCR = "资产负债表科目,指企业拥有或控制的能以货币计量的经济资源。"
PARAM4_ENAME = "last_total_assets"
PARAM4_CNAME = "资产合计(期初)"
PARAM4_DESCR = "资产负债表科目,指企业拥有或控制的能以货币计量的经济资源。"
class Parameter(BaseModel):
the_total_profit: float = "利润总额"
interest_expense: float = "利息费用"
current_total_assets: float = "资产总计(期末)"
last_total_assets: float = "资产总计(期初)"
# 计算接口
@router.post("/{}/".format(ENAME), tags=[CATEGORY], summary=CNAME, description=DESCRIPTION)
def calculation(parameter: Parameter):
try:
avg_total_assets = (parameter.current_total_assets + parameter.last_total_assets) / 2
result = (parameter.the_total_profit + parameter.interest_expense) / avg_total_assets
return round(result, 6)
except Exception:
raise HTTPException(status_code=400, detail="Calculate Failed")
# 描述接口
@router.get("/{}/description".format(ENAME),
response_model=IndicatorDescription,
tags=[CATEGORY], summary=CNAME, description=DESCRIPTION)
def description():
body = {
"ename": ENAME,
"cname": CNAME,
"nature": NATURE,
"category": CATEGORY,
"description": DESCRIPTION,
"parameters": [
{"ename": PARAM1_ENAME, "cname": PARAM1_CNAME, "description": PARAM1_DESCR},
{"ename": PARAM2_ENAME, "cname": PARAM2_CNAME, "description": PARAM2_DESCR}
],
}
return body