财务要素分析

This commit is contained in:
王思川 2022-04-22 16:55:44 +08:00
parent 9bc3865bba
commit d2b60763c3
3 changed files with 154 additions and 3 deletions

View File

@ -158,3 +158,35 @@ class CompanyImpl(Company):
esg_rating.factors_score = self.instance_list_to_set(instance=ESGRating.FactorsScore, data=result['维度得分情况'])
self.esg_rating_result = esg_rating
def get_financial_analysis(self):
"""财务要素分析"""
result = self.db.find_single_data_with_single_sort(
"企业数据",
"财务要素分析",
{"企业ID": self.cid},
["评价ID", '更新日期', "财报期", "财务得分年度比较", "财务得分同行比较", "财务得分较去年变化", "财务得分较同行差异", "指标详情"],
{"更新日期": -1}
)
if result:
financial_analysis = FinancialAnalysis()
financial_analysis.rid = result['评价ID']
financial_analysis.report_date = result['财报期']
financial_analysis.update_time = result['更新日期']
for item in result['财务得分年度比较']:
item["指标"] = self.dict_to_set(instance=FinancialAnalysis.CompareToYears.FinancialIndex, data=item['指标'])
financial_analysis.compare_to_years = self.instance_list_to_set(instance=FinancialAnalysis.CompareToYears, data=result['财务得分年度比较'])
result['财务得分同行比较']['公司水平'] = self.dict_to_set(instance=FinancialAnalysis.CompareToIndustry.FinancialIndex, data=result['财务得分同行比较']['公司水平'])
result['财务得分同行比较']['平均水平'] = self.dict_to_set(instance=FinancialAnalysis.CompareToIndustry.FinancialIndex, data=result['财务得分同行比较']['平均水平'])
financial_analysis.compare_to_industry = self.dict_to_set(instance=FinancialAnalysis.CompareToIndustry, data=result['财务得分同行比较'])
financial_analysis.delta_to_years = self.dict_to_set(instance=FinancialAnalysis.CompareToYears.FinancialIndex, data=result['财务得分较去年变化'])
financial_analysis.delta_to_industry = self.dict_to_set(instance=FinancialAnalysis.CompareToIndustry.FinancialIndex, data=result['财务得分较同行差异'])
financial_analysis.index_details = self.instance_list_to_set(instance=FinancialAnalysis.CompareToIndustry.FinancialAnalysisDetails, data=result['指标详情'])
self.financial_analysis = financial_analysis

View File

@ -315,6 +315,106 @@ class ESGRating(SpecObject):
}
class FinancialAnalysis(SpecObject):
"""财务分析"""
class CompareToYears(SpecObject):
"""财务得分年度比较"""
class FinancialIndex(SpecObject):
"""财务指标"""
profit_ability = ValidateAttr(field='profit_ability', type=[int, float, str])
asset_quality = ValidateAttr(field='asset_quality', type=[int, float, str])
debt_risk = ValidateAttr(field='debt_risk', type=[int, float, str])
business_growth = ValidateAttr(field='business_growth', type=[int, float, str])
fields_map = {
"profit_ability": "盈利能力",
"asset_quality": "资产质量",
"debt_risk": "债务风险",
"business_growth": "经营增长"
}
year = ValidateAttr(field='year', type=str, func=Validate.date_format)
index = ValidateAttr(field='index', type=FinancialIndex)
fields_map = {
"year": "年度",
"index": "指标"
}
class CompareToIndustry(SpecObject):
"""财务得分同行比较"""
class FinancialIndex(SpecObject):
"""财务指标"""
profit_ability = ValidateAttr(field='profit_ability', type=[int, float, str])
asset_quality = ValidateAttr(field='asset_quality', type=[int, float, str])
debt_risk = ValidateAttr(field='debt_risk', type=[int, float, str])
business_growth = ValidateAttr(field='business_growth', type=[int, float, str])
fields_map = {
"profit_ability": "盈利能力",
"asset_quality": "资产质量",
"debt_risk": "债务风险",
"business_growth": "经营增长"
}
class FinancialAnalysisDetails(SpecObject):
"""指标详情"""
name = ValidateAttr(field='name', type=str)
value = ValidateAttr(field='value', type=[str, float, type(None)])
quality = ValidateAttr(field='quality', type=str)
fields_map = {
"name": "指标",
"value": "数值",
"quality": "水平"
}
company_score = ValidateAttr(field='company_score', type=FinancialIndex)
average_score = ValidateAttr(field='average_score', type=FinancialIndex)
fields_map = {
"company_score": "公司水平",
"average_score": "平均水平"
}
cid = ValidateAttr(field='cid', type=str, length=8, default=None)
update_time = ValidateAttr(field='update_time', func=Validate.time_format)
rid = ValidateAttr(field='rid', type=str, length=8, default='')
report_date = ValidateAttr(field='report_date', type=str, func=Validate.date_format, default='')
compare_to_years = ValidateAttr(field='compare_to_years', length=2, instance_list=CompareToYears, default=[{}, {}])
compare_to_industry = ValidateAttr(field='compare_to_industry', type=CompareToIndustry, default={})
delta_to_years = ValidateAttr(field='delta_to_years', type=CompareToYears.FinancialIndex, default={})
delta_to_industry = ValidateAttr(field='delta_to_industry', type=CompareToIndustry.FinancialIndex, default={})
index_details = ValidateAttr(field='index_details', instance_list=CompareToIndustry.FinancialAnalysisDetails, default=[{}]*11)
fields_map = {
"cid": "企业ID",
"update_time": "更新时间",
"rid": "评价ID",
"report_date": "财报期",
"compare_to_years": "财务得分年度比较",
"compare_to_industry": "财务得分同行比较",
"delta_to_years": "财务得分较去年变化",
"delta_to_industry": "财务得分较同行差异",
"index_details": "指标详情"
}
def dict_to_return(self, **kwargs):
_dict_ = self.dict_to_show(columns=["更新时间", "财报期", "财务得分年度比较", "财务得分同行比较", "财务得分较去年变化", "财务得分较同行差异", "指标详情"])
_dict_['财务得分年度比较'] = [{list(item.values())[0]: list(item.values())[1]} for item in _dict_['财务得分年度比较']]
_dict_['财务得分年度比较'] = {**_dict_['财务得分年度比较'][0], **_dict_['财务得分年度比较'][1]}
_dict_['指标详情'] = [list(item.values()) for item in _dict_['指标详情']]
_dict_["同行对比图"] = _dict_.pop('财务得分同行比较')
_dict_["去年对比图"] = _dict_.pop('财务得分年度比较')
_dict_["去年对比表"] = _dict_.pop('财务得分较去年变化')
_dict_["同行对比表"] = _dict_.pop('财务得分较同行差异')
_dict_['更新日期'] = _dict_.pop('更新时间')
return _dict_
class Company(SpecObject):
"""企业"""
@ -327,6 +427,7 @@ class Company(SpecObject):
main_members = ValidateAttr(field="main_members", instance_list=MainMember)
cc_rating_result = ValidateAttr(field='cc_rating_result', type=CCRating)
esg_rating_result = ValidateAttr(field='esg_rating_result', type=ESGRating)
financial_analysis = ValidateAttr(field="financial_analysis", type=FinancialAnalysis)
update_time = ValidateAttr(field='update_time', type=dict)
fields_map = {
@ -339,6 +440,7 @@ class Company(SpecObject):
"main_members": "主要成员",
"cc_rating_result": "综信评价结果",
"esg_rating_result": "ESG评价结果",
"financial_analysis": "财务要素分析",
"update_time": "更新时间"
}
@ -356,3 +458,6 @@ class Company(SpecObject):
def get_esg_rating_result(self):
"""ESG评价分析"""
def get_financial_analysis(self):
"""财务要素分析"""

View File

@ -86,14 +86,28 @@ def esg_rating_route(**kwargs):
except ReturnConditionCheckFailed as e:
e.log_error()
return {"info": e.failed_info}, e.status_code
# except KeyError:
# return {"info": "参数异常"}, 400
except KeyError:
return {"info": "参数异常"}, 400
@company_route.route('/financial_elements', methods=['GET'])
@verify_token
def financial_elements_route(**kwargs):
return {"info": "查询结果", "result": {}}, 200
"""财务要素分析"""
try:
impl = CompanyImpl()
impl.cid = kwargs['cid']
impl.get_financial_analysis()
if impl.financial_analysis:
result = impl.financial_analysis.dict_to_return()
return {"info": "查询结果", "result": result}, 200
else:
return {"info": "查询结果", "result": {}}, 200
except ReturnConditionCheckFailed as e:
e.log_error()
return {"info": e.failed_info}, e.status_code
except KeyError:
return {"info": "参数异常"}, 400
@company_route.route('/operating_risk', methods=['GET'])