""" 净资产收益率 """ 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) def calculation(parameter: Parameter): 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) 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}, {"ename": PARAM3_ENAME, "cname": PARAM3_CNAME, "description": PARAM3_DESCR}, ], } return body