2022-10-13 17:07:52 +08:00
|
|
|
"""
|
|
|
|
净资产收益率
|
|
|
|
"""
|
|
|
|
from fastapi import APIRouter, HTTPException
|
|
|
|
from pydantic import BaseModel
|
|
|
|
|
|
|
|
from Common.schemas import IndicatorDescription
|
|
|
|
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
|
|
# 指标描述
|
|
|
|
ENAME = "return_on_net_assets"
|
|
|
|
CNAME = "净资产收益率"
|
|
|
|
NATURE = "定量"
|
|
|
|
CATEGORY = "盈利能力"
|
|
|
|
DESCRIPTION = "净资产收益率 = 净利润 / [(期初所有者权益合计 + 期末所有者权益合计) / 2]"
|
|
|
|
|
|
|
|
# 参数描述
|
|
|
|
PARAM1_ENAME = "net_profit"
|
|
|
|
PARAM1_CNAME = "净利润"
|
|
|
|
PARAM1_DESCR = "利润表科目,即税后利润。"
|
|
|
|
|
|
|
|
PARAM2_ENAME = "current_total_owner_equity"
|
|
|
|
PARAM2_CNAME = "所有者权益合计(期末)"
|
|
|
|
PARAM2_DESCR = "资产负债表科目,指投资人对企业净资产的所有权。"
|
|
|
|
|
|
|
|
PARAM3_ENAME = "last_total_owner_equity"
|
|
|
|
PARAM3_CNAME = "所有者权益合计(期初)"
|
|
|
|
PARAM3_DESCR = "资产负债表科目,指投资人对企业净资产的所有权。"
|
|
|
|
|
|
|
|
|
|
|
|
# 输入参数
|
|
|
|
class Parameter(BaseModel):
|
|
|
|
net_profit: float = "净利润"
|
|
|
|
current_total_owner_equity: float = "所有者权益合计(期末)"
|
|
|
|
last_total_owner_equity: float = "所有者权益合计(期初)"
|
|
|
|
|
|
|
|
|
|
|
|
# 计算接口
|
|
|
|
@router.post("/{}/".format(ENAME), tags=[CATEGORY], summary=CNAME, description=DESCRIPTION)
|
2022-10-13 17:32:41 +08:00
|
|
|
def calculation(parameter: Parameter):
|
2022-10-13 17:07:52 +08:00
|
|
|
try:
|
|
|
|
avg_total_owner_equity = (parameter.current_total_owner_equity + parameter.last_total_owner_equity) / 2
|
|
|
|
result = parameter.net_profit / avg_total_owner_equity
|
|
|
|
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)
|
2022-10-13 17:32:41 +08:00
|
|
|
def description():
|
2022-10-13 17:07:52 +08:00
|
|
|
|
|
|
|
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},
|
|
|
|
{"ename": PARAM3_ENAME, "cname": PARAM3_CNAME, "description": PARAM3_DESCR},
|
|
|
|
],
|
|
|
|
}
|
|
|
|
|
|
|
|
return body
|