69 lines
2.3 KiB
Python
69 lines
2.3 KiB
Python
|
"""
|
||
|
利息保障倍数
|
||
|
"""
|
||
|
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 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
|