""" 利息保障倍数 """ from fastapi import APIRouter, HTTPException from pydantic import BaseModel from Common.schemas import IndicatorDescription router = APIRouter() # 指标描述 ENAME = "interest_protection_multiples" CNAME = "利息保障倍数" NATURE = "定量" CATEGORY = "偿债能力" DESCRIPTION = "利息保障倍数 = (利润总额 + 计入财务费用的利息支出) / (计入财务费用的利息支出 + 资本化利息支出)" # 参数描述 PARAM1_ENAME = "total_profit" PARAM1_CNAME = "利润总额" PARAM1_DESCR = "利润表-利润总额" PARAM2_ENAME = "interest_expense_included_in_finance_expenses" PARAM2_CNAME = "计入财务费用的利息支出" PARAM2_DESCR = "利润表-营业总成本-财务费用-利息费用" PARAM3_ENAME = "capitalized_interest_expense" PARAM3_CNAME = "资本化利息支出" PARAM3_DESCR = "利润表-营业总成本-其他业务成本-利息支出" # 输入参数 class Parameter(BaseModel): total_profit: float = "利润总额" interest_expense_included_in_finance_expenses: float = "计入财务费用的利息支出" capitalized_interest_expense: float = "资本化利息支出" # 计算接口 @router.post("/{}/".format(ENAME), tags=[CATEGORY], summary=CNAME, description=DESCRIPTION) def calculation(parameter: Parameter): try: result = (parameter.total_profit + parameter.interest_expense_included_in_finance_expenses) / (parameter.interest_expense_included_in_finance_expenses + parameter.capitalized_interest_expense) return round(result, 6) except ZeroDivisionError: return "+inf" 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": PARAM2_ENAME, "cname": PARAM2_CNAME, "description": PARAM2_DESCR} ], } return body