财务数据

This commit is contained in:
王思川 2022-04-19 11:14:37 +08:00
parent 3494d0afc0
commit 1b1ddda833
4 changed files with 147 additions and 3 deletions

View File

@ -72,7 +72,7 @@ class CompanyIndexApiImpl(CompanyIndexApi):
head_info = CompanyIndexApi.HeadInfo()
update_time = CompanyIndexApi.UpdateTime()
basic_info = CompanyIndexApi.BasicInfo()
financial_data = CompanyIndexApi
financial_data = CompanyIndexApi.FinancialData()
operating_risk = CompanyIndexApi
financial_analysis = CompanyIndexApi
cc_rating = CompanyIndexApi
@ -131,3 +131,21 @@ class CompanyIndexApiImpl(CompanyIndexApi):
self.basic_info.business_info = self.dict_to_set(instance=self.basic_info.BusinessInfo, data=result['工商信息'])
self.basic_info.share_holder = self.instance_list_to_set(instance_list_type=self.basic_info.ShareHolder, data=result['股东信息'])
self.basic_info.main_member = self.instance_list_to_set(instance_list_type=self.basic_info.MainMember, data=result['主要成员'])
def get_financial_data(self):
"""获取财务数据"""
result = self.db.find_single_data(
"企业数据",
"基本财务数据",
{"企业ID": self.financial_data.cid, "报告期": self.financial_data.report_date},
["报告期", "资产负债表", "利润表", "补充数据表", "财务指标"]
)
if not result:
result = {'报告期': None, "资产负债表": {}, "利润表": {}, "补充数据表": {}, "财务指标": {}}
self.financial_data.report_date = result['报告期']
self.financial_data.balance_sheet = self.dict_to_set(instance=self.financial_data.BalanceSheet, data=result['资产负债表'])
self.financial_data.profit_sheet = self.dict_to_set(instance=self.financial_data.ProfitSheet, data=result['利润表'])
self.financial_data.appendix_data = self.dict_to_set(instance=self.financial_data.AppendixDataSheet, data=result['补充数据表'])
self.financial_data.financial_index = self.dict_to_set(instance=self.financial_data.FinancialIndex, data=result['财务指标'])

View File

@ -224,6 +224,105 @@ class CompanyIndexApi(SpecObject):
"main_member": "主要成员"
}
class FinancialData(SpecObject):
"""财务数据"""
class BalanceSheet(SpecObject):
"""资产负债表"""
accounts_receivable = ValidateAttr(field='accounts_receivable', type=[int, float])
stock = ValidateAttr(field='stock', type=[int, float])
total_current_assets = ValidateAttr(field='total_current_assets', type=[int, float])
total_assets = ValidateAttr(field='total_assets', type=[int, float])
short_loan = ValidateAttr(field='short_loan', type=[int, float])
one_year_liabilities = ValidateAttr(field='one_year_liabilities', type=[int, float])
total_current_liabilities = ValidateAttr(field='total_current_liabilities', type=[int, float])
long_term_loan = ValidateAttr(field='long_term_loan', type=[int, float])
total_liabilities = ValidateAttr(field='total_liabilities', type=[int, float])
total_owners_equity = ValidateAttr(field='total_owners_equity', type=[int, float])
fields_map = {
'accounts_receivable': '应收账款',
'stock': '存货',
'total_current_assets': '流动资产合计',
'total_assets': '资产总计',
'short_loan': '短期借款',
'one_year_liabilities': '一年内到期非流动负债',
'total_current_liabilities': '流动负债合计',
'long_term_loan': '长期借款',
'total_liabilities': '负债合计',
'total_owners_equity': '所有者权益合计'
}
class ProfitSheet(SpecObject):
"""利润表"""
operating_income = ValidateAttr(field='operating_income', type=[int, float])
operating_cost = ValidateAttr(field='operating_cost', type=[int, float])
total_profit = ValidateAttr(field='total_profit', type=[int, float])
net_profit = ValidateAttr(field='net_profit', type=[int, float])
fields_map = {
'operating_income': '营业收入',
'operating_cost': '营业成本',
'total_profit': '利润总额',
'net_profit': '净利润'
}
class AppendixDataSheet(SpecObject):
"""补充数据表"""
rd_expenses = ValidateAttr(field='rd_expenses', type=[int, float])
interest_disbursement = ValidateAttr(field='interest_disbursement', type=[int, float])
interest_expense = ValidateAttr(field='interest_expense', type=[int, float])
fields_map = {
'rd_expenses': '研发费用',
'interest_disbursement': '计入财务费的利息支出',
'interest_expense': '资本化利息支出'
}
class FinancialIndex(SpecObject):
"""财务指标"""
roe = ValidateAttr(field="roe", type=[int, float])
inventory_turnover = ValidateAttr(field="inventory_turnover", type=[int, float])
interest_multiple = ValidateAttr(field="interest_multiple", type=[int, float])
accounts_receivable_turnover = ValidateAttr(field="accounts_receivable_turnover", type=[int, float])
total_asset_turnover = ValidateAttr(field="total_asset_turnover", type=[int, float])
total_asset_growth_rate = ValidateAttr(field="total_asset_growth_rate", type=[int, float])
roa = ValidateAttr(field="roa", type=[int, float])
technology_investment_ratio = ValidateAttr(field="technology_investment_ratio", type=[int, float])
operating_growth_rate = ValidateAttr(field="operating_growth_rate", type=[int, float])
assets_and_liabilities = ValidateAttr(field="assets_and_liabilities", type=[int, float])
quick_ratio = ValidateAttr(field="quick_ratio", type=[int, float])
fields_map = {
"roe": "净资产收益率",
"inventory_turnover": "存货周转率",
"interest_multiple": "已获利息倍数",
"accounts_receivable_turnover": "应收账款周转率",
"total_asset_turnover": "总资产周转率",
"total_asset_growth_rate": "总资产增长率",
"roa": "总资产报酬率",
"technology_investment_ratio": "技术投入比率",
"operating_growth_rate": "营业增长率",
"assets_and_liabilities": "资产负债率",
"quick_ratio": "速动比率"
}
cid = ValidateAttr(field='cid', type=str, length=8)
report_date = ValidateAttr(field='report_date', func=Validate.date_format, default='')
balance_sheet = ValidateAttr(field="balance_sheet", type=BalanceSheet)
profit_sheet = ValidateAttr(field="profit_sheet", type=ProfitSheet)
appendix_data = ValidateAttr(field="appendix_data", type=AppendixDataSheet)
financial_index = ValidateAttr(field="financial_index", type=FinancialIndex)
fields_map = {
"cid": "企业ID",
"report_date": "报告期",
"balance_sheet": "资产负债表",
"profit_sheet": "利润表",
"appendix_data": "补充数据表",
"financial_index": "财务指标"
}
def get_head_info(self):
"""头部信息"""

View File

@ -100,6 +100,22 @@ def basic_info_route(**kwargs):
return {"info": e.failed_info}, e.status_code
@company_route.route('/financial_data', methods=['POST'])
@verify_token
def financial_data_route(**kwargs):
""""""
try:
req = request.json
impl = CompanyIndexApiImpl()
impl.financial_data.cid = req['cid']
impl.financial_data.report_date = req['report_date']
impl.get_financial_data()
result = impl.financial_data.dict_to_show(columns=["报告期", "资产负债表", "利润表", "补充数据表", "财务指标"])
return result, 200
except ReturnConditionCheckFailed as e:
return {"info": e.failed_info}, e.status_code
@company_route.route('/index', methods=['POST'])
@verify_token
def index_route(**kwargs):

View File

@ -20,6 +20,13 @@ class Validate(object):
case = (len(param) >= 8) and (re.match(regex, param) is not None)
return True if case else False
@staticmethod
def date_format(param):
"""yyyy-mm-dd"""
regex = "\d{4}-\d{1,2}-\d{1,2}"
case = re.match(regex, param) is not None
return True if case else False
@staticmethod
def time_format(param):
"""yyyy-mm-dd hh:mm:ss"""
@ -58,8 +65,12 @@ class ValidateAttr(object):
if 'type' in self.kwargs:
"""检查实例的属性类型"""
if not isinstance(value, self.kwargs['type']):
raise ReturnConditionCheckFailed(self.error_info, self.error_code)
if type(self.kwargs['type']) is list:
if type(value) not in self.kwargs['type']:
raise ReturnConditionCheckFailed(self.error_info, self.error_code)
else:
if not isinstance(value, self.kwargs['type']):
raise ReturnConditionCheckFailed(self.error_info, self.error_code)
if 'length' in self.kwargs:
"""检查实例的属性值长度(一般是str类型)"""