From 91c2a075ffaf5891da9fc2e72659480b87587828 Mon Sep 17 00:00:00 2001 From: P3ngSaM <61768364+P3ngSaM@users.noreply.github.com> Date: Thu, 13 Oct 2022 19:04:16 +0800 Subject: [PATCH] =?UTF-8?q?changes=20=E6=8C=87=E6=A0=87=E6=9E=84=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Indicators/Business/BusinessCommonweal.py | 0 Indicators/Business/BusinessStability.py | 0 Indicators/Capital/OwnersEquity.py | 0 .../TotalDebtCapitalizationRatio.py | 2 +- Indicators/Capital/__init__.py | 10 ++- .../Debt/InterestProtectionMultiples.py | 69 +++++++++++++++++++ Indicators/Debt/__init__.py | 4 +- Indicators/Operating/FinancingChannels.py | 0 main.py | 6 ++ 9 files changed, 87 insertions(+), 4 deletions(-) create mode 100644 Indicators/Business/BusinessCommonweal.py create mode 100644 Indicators/Business/BusinessStability.py create mode 100644 Indicators/Capital/OwnersEquity.py rename Indicators/{Debt => Capital}/TotalDebtCapitalizationRatio.py (98%) create mode 100644 Indicators/Debt/InterestProtectionMultiples.py create mode 100644 Indicators/Operating/FinancingChannels.py diff --git a/Indicators/Business/BusinessCommonweal.py b/Indicators/Business/BusinessCommonweal.py new file mode 100644 index 0000000..e69de29 diff --git a/Indicators/Business/BusinessStability.py b/Indicators/Business/BusinessStability.py new file mode 100644 index 0000000..e69de29 diff --git a/Indicators/Capital/OwnersEquity.py b/Indicators/Capital/OwnersEquity.py new file mode 100644 index 0000000..e69de29 diff --git a/Indicators/Debt/TotalDebtCapitalizationRatio.py b/Indicators/Capital/TotalDebtCapitalizationRatio.py similarity index 98% rename from Indicators/Debt/TotalDebtCapitalizationRatio.py rename to Indicators/Capital/TotalDebtCapitalizationRatio.py index 9e6b4a8..6fa85b0 100644 --- a/Indicators/Debt/TotalDebtCapitalizationRatio.py +++ b/Indicators/Capital/TotalDebtCapitalizationRatio.py @@ -12,7 +12,7 @@ router = APIRouter() ENAME = "total_debt_capitalization_ratio" CNAME = "总债务资本化比率" NATURE = "定量" -CATEGORY = "偿债能力" +CATEGORY = "资本结构" DESCRIPTION = "总债务资本化比率 = 负债合计 / (负债合计 + 归属于母公司所有者权益合计)" # 参数描述 diff --git a/Indicators/Capital/__init__.py b/Indicators/Capital/__init__.py index 89df935..76d26b9 100644 --- a/Indicators/Capital/__init__.py +++ b/Indicators/Capital/__init__.py @@ -1,3 +1,11 @@ """ 资本结构 -""" \ No newline at end of file +""" + +from fastapi import APIRouter + +from Indicators.Capital import TotalDebtCapitalizationRatio + +capital_router = APIRouter() + +capital_router.include_router(TotalDebtCapitalizationRatio.router) \ No newline at end of file diff --git a/Indicators/Debt/InterestProtectionMultiples.py b/Indicators/Debt/InterestProtectionMultiples.py new file mode 100644 index 0000000..d65fb5a --- /dev/null +++ b/Indicators/Debt/InterestProtectionMultiples.py @@ -0,0 +1,69 @@ +""" +利息保障倍数 +""" +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 \ No newline at end of file diff --git a/Indicators/Debt/__init__.py b/Indicators/Debt/__init__.py index 37bf615..6360448 100644 --- a/Indicators/Debt/__init__.py +++ b/Indicators/Debt/__init__.py @@ -4,8 +4,8 @@ from fastapi import APIRouter -from Indicators.Debt import TotalDebtCapitalizationRatio +from Indicators.Debt import InterestProtectionMultiples debt_router = APIRouter() -debt_router.include_router(TotalDebtCapitalizationRatio.router) +debt_router.include_router(InterestProtectionMultiples.router) diff --git a/Indicators/Operating/FinancingChannels.py b/Indicators/Operating/FinancingChannels.py new file mode 100644 index 0000000..e69de29 diff --git a/main.py b/main.py index b787a0c..72d7c3a 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,8 @@ +import uvicorn from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware +from Indicators.Capital import capital_router from Indicators.Profit import profit_router from Indicators.Debt import debt_router @@ -35,6 +37,7 @@ app.add_middleware( PREFIX = "/api/index_store" app.include_router(profit_router, prefix=PREFIX) app.include_router(debt_router, prefix=PREFIX) +app.include_router(capital_router, prefix=PREFIX) # Income.router, # Flows.router, @@ -50,3 +53,6 @@ app.include_router(debt_router, prefix=PREFIX) # Compliance.router, # PublicOpinion.router, # Other.router, + +if __name__ == "__main__": + uvicorn.run(app, host="127.0.0.1", port=8001)