财务要素分析
This commit is contained in:
parent
9bc3865bba
commit
d2b60763c3
|
@ -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
|
|
@ -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):
|
||||
"""财务要素分析"""
|
||||
|
|
|
@ -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'])
|
||||
|
|
Loading…
Reference in New Issue