update esg评价分析

This commit is contained in:
P3ngSaM 2022-04-21 16:26:32 +08:00
parent e62cdbdfa2
commit 4b941f6d93
3 changed files with 178 additions and 99 deletions

View File

@ -7,7 +7,8 @@ from DBHelper.MongoHelper import MongoHelper
from RatingData.scripts.risk_detail import associate_risk_detail, change_log_detail
from Utils.ErrorUtil import LogConditionCheckFailed
from CompanyData.CompanyDataObj import CompanyData, BasicInfo, ShareHolder, MainMember, ComprehensiveCreditAnalysis, \
FinancialElementsAnalysis, BusinessElementsAnalysis, FinancialIndex, BalanceSheet, ProfitSheet, AppendixDataSheet
FinancialElementsAnalysis, BusinessElementsAnalysis, FinancialIndex, BalanceSheet, ProfitSheet, AppendixDataSheet, \
EsgRatingAnalysis, FinancialIndexs
from common.utils import sub_dict, df_iterrows
@ -182,6 +183,7 @@ class CompanyDataImpl(CompanyData):
def update_credit_data(self, rid):
"""更新综信评价相关数据"""
def update_rating_result():
"""更新评价结果"""
rating_result = self.db_tfse.find_single_data(
@ -287,11 +289,11 @@ class CompanyDataImpl(CompanyData):
def update_esg_data(self, rid):
"""更新ESG相关数据"""
rating_result = self.db_tfse.find_single_data(
'ESG评价数据',
'评价结果',
{'评价ID': rid},
['企业ID', '评价等级', '评价年度', 'ESG得分', '环境得分', '社会得分', '公司治理得分', '评价时间']
)
'ESG评价数据',
'评价结果',
{'评价ID': rid},
['企业ID', '评价等级', '评价年度', 'ESG得分', '环境得分', '社会得分', '公司治理得分', '评价时间']
)
cid = rating_result['企业ID']
del rating_result['企业ID']
rating_result['评价ID'] = rid
@ -305,7 +307,6 @@ class CompanyDataImpl(CompanyData):
)
class CreditAnalysisImpl(ComprehensiveCreditAnalysis):
"""综合信用分析类"""
db = MongoHelper("tfse_v0.21")
@ -619,7 +620,7 @@ class FinancialAnalysisImpl(FinancialElementsAnalysis):
def score_actl_script():
"""今年财务得分"""
compare = self.CompareToYears()
score_index = compare.FinancialScoreIndex()
score_index = FinancialIndexs()
score_index.profitability = rating_result['财务评分']['盈利能力']['合计']
score_index.asset_quality = rating_result['财务评分']['资产质量']['合计']
score_index.debt_risk = rating_result['财务评分']['债务风险']['合计']
@ -631,7 +632,7 @@ class FinancialAnalysisImpl(FinancialElementsAnalysis):
def score_last_script():
"""去年财务得分"""
compare = self.CompareToYears()
score_index = compare.FinancialScoreIndex()
score_index = FinancialIndexs()
score_index.profitability = score_last_origin['盈利能力']['合计']
score_index.asset_quality = score_last_origin['资产质量']['合计']
score_index.debt_risk = score_last_origin['债务风险']['合计']
@ -649,7 +650,7 @@ class FinancialAnalysisImpl(FinancialElementsAnalysis):
def company_level():
"""公司水平"""
company = compare_industry.CompanyScore()
company = FinancialIndexs()
company.profitability = rating_result['财务评分']['盈利能力']['合计']
company.asset_quality = rating_result['财务评分']['资产质量']['合计']
company.debt_risk = rating_result['财务评分']['债务风险']['合计']
@ -658,7 +659,7 @@ class FinancialAnalysisImpl(FinancialElementsAnalysis):
def average_level():
"""平均水平"""
average = compare_industry.AverageScore()
average = FinancialIndexs()
average.profitability = 8
average.asset_quality = 9
average.debt_risk = 9
@ -671,8 +672,9 @@ class FinancialAnalysisImpl(FinancialElementsAnalysis):
def delta_to_year():
"""财务得分较去年变化"""
delat_data = json.loads((df['今年值']/df['去年值']-1).apply(lambda x: '{}%'.format(round(x*100, 2))).T.to_json())
delat = self.DeltaToYears()
delat_data = json.loads(
(df['今年值'] / df['去年值'] - 1).apply(lambda x: '{}%'.format(round(x * 100, 2))).T.to_json())
delat = FinancialIndexs()
delat.profitability = delat_data['盈利能力']
delat.asset_quality = delat_data['资产质量']
delat.debt_risk = delat_data['债务风险']
@ -681,8 +683,9 @@ class FinancialAnalysisImpl(FinancialElementsAnalysis):
def delta_to_industry():
"""财务扽分交同行差异"""
delat_data = json.loads((df['今年值']/df['平均值']-1).apply(lambda x: '{}%'.format(round(x * 100, 2))).T.to_json())
delat = self.DeltaToIndustry()
delat_data = json.loads(
(df['今年值'] / df['平均值'] - 1).apply(lambda x: '{}%'.format(round(x * 100, 2))).T.to_json())
delat = FinancialIndexs()
delat.profitability = delat_data['盈利能力']
delat.asset_quality = delat_data['资产质量']
delat.debt_risk = delat_data['债务风险']
@ -732,7 +735,7 @@ class BusinessAnalysisImpl(BusinessElementsAnalysis):
def risk_relative_score():
"""风险分数"""
risk_score = rating_result['风险评分']['合计']
self.risk_score = 100 if risk_score/43 >= 1 else round(risk_score/43*100, 2)
self.risk_score = 100 if risk_score / 43 >= 1 else round(risk_score / 43 * 100, 2)
def risk_level():
"""风险级别"""
@ -759,6 +762,7 @@ class BusinessAnalysisImpl(BusinessElementsAnalysis):
def eligibility_risk():
"""合规风险"""
def degree_of_impact(param):
if param.name in ['失信人', '严重违法']:
impact = '严重'
@ -785,6 +789,7 @@ class BusinessAnalysisImpl(BusinessElementsAnalysis):
def operating_risk():
"""经营风险"""
def degree_of_impact(param):
if param.name in ['开庭公告', '法院公告', '诉讼', '送达公告'] and param.values[0] >= 50:
impact = '异常'
@ -881,5 +886,85 @@ class BusinessAnalysisImpl(BusinessElementsAnalysis):
_main_()
class EsgAnalysisImpl(EsgRatingAnalysis):
"""ESG评价分析类"""
db = MongoHelper("tfse_v0.21")
def egs_analysis_etl(self):
rating_record = self.db.find_single_data(
'ESG评价数据',
'评价结果',
{"评价ID": self.rid},
["企业ID", "评价等级", "ESG得分", "环境得分", "社会得分", "公司治理得分"]
)
rating_input = self.db.find_single_data(
'ESG评价数据',
'填报数据',
{"评价ID": self.rid},
["所属行业"]
)
self.cid = rating_record['企业ID']
self.update_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
def esg_rating():
"""esg评级"""
rating = self.EsgRating()
rating.rating = rating_record['评价等级']
rating.score = rating_record['ESG得分']
rating.industry = rating_input['所属行业'][0]
self.esg_rating = rating
def dimension_rating():
"""维度得分情况"""
self.dimension_score = list()
def e():
"""环境"""
dimension = self.DimensionScore()
dimension.dimension = '环境'
dimension.weights = '35%'
dimension.score = rating_record['环境得分']['合计']
dimension.score_change = '-%'
dimension.industry_average = '-'
self.dimension_score.append(dimension.dict_to_save())
def s():
"""社会"""
dimension = self.DimensionScore()
dimension.dimension = '社会'
dimension.weights = '35%'
dimension.score = rating_record['社会得分']['合计']
dimension.score_change = '-%'
dimension.industry_average = '-'
self.dimension_score.append(dimension.dict_to_save())
def g():
"""治理"""
dimension = self.DimensionScore()
dimension.dimension = '治理'
dimension.weights = '30%'
dimension.score = rating_record['公司治理得分']['合计']
dimension.score_change = '-%'
dimension.industry_average = '-'
self.dimension_score.append(dimension.dict_to_save())
def _main_():
e()
s()
g()
_main_()
def __main__():
esg_rating()
dimension_rating()
result = self.dict_to_save()
self.db.upsert_single_data(
"企业数据",
"ESG评价分析",
{"评价ID": self.rid},
result
)
__main__()

View File

@ -374,28 +374,28 @@ class ComprehensiveCreditAnalysis(SpecObject):
}
class FinancialIndexs(SpecObject):
"""财务指标"""
profitability = ValidateAttr(field='profitability', 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 = {
"profitability": "盈利能力",
"asset_quality": "资产质量",
"debt_risk": "债务风险",
"business_growth": "经营增长"
}
class FinancialElementsAnalysis(SpecObject):
"""财务要素分析"""
class CompareToYears(SpecObject):
"""财务得分年度比较"""
class FinancialScoreIndex(SpecObject):
"""指标"""
profitability = ValidateAttr(field='profitability', type=(int, float))
asset_quality = ValidateAttr(field='asset_quality', type=(int, float))
debt_risk = ValidateAttr(field='debt_risk', type=(int, float))
business_growth = ValidateAttr(field='business_growth', type=(int, float))
fields_map = {
"profitability": "盈利能力",
"asset_quality": "资产质量",
"debt_risk": "债务风险",
"business_growth": "经营增长"
}
year = ValidateAttr(field='year', type=str, func=Validate.date_format)
index = ValidateAttr(field='index', type=FinancialScoreIndex)
index = ValidateAttr(field='index', type=FinancialIndexs)
fields_map = {
"year": "年度",
@ -404,71 +404,14 @@ class FinancialElementsAnalysis(SpecObject):
class CompareToIndustry(SpecObject):
"""财务得分同行比较"""
class CompanyScore(SpecObject):
"""公司水平"""
profitability = ValidateAttr(field='profitability', type=(int, float))
asset_quality = ValidateAttr(field='asset_quality', type=(int, float))
debt_risk = ValidateAttr(field='debt_risk', type=(int, float))
business_growth = ValidateAttr(field='business_growth', type=(int, float))
fields_map = {
"profitability": "盈利能力",
"asset_quality": "资产质量",
"debt_risk": "债务风险",
"business_growth": "经营增长"
}
class AverageScore(SpecObject):
"""平均水平"""
profitability = ValidateAttr(field='profitability', type=(int, float))
asset_quality = ValidateAttr(field='asset_quality', type=(int, float))
debt_risk = ValidateAttr(field='debt_risk', type=(int, float))
business_growth = ValidateAttr(field='business_growth', type=(int, float))
fields_map = {
"profitability": "盈利能力",
"asset_quality": "资产质量",
"debt_risk": "债务风险",
"business_growth": "经营增长"
}
company_score = ValidateAttr(field='company_score', type=CompanyScore)
average_score = ValidateAttr(field='average_score', type=AverageScore)
company_score = ValidateAttr(field='company_score', type=FinancialIndexs)
average_score = ValidateAttr(field='average_score', type=FinancialIndexs)
fields_map = {
"company_score": "公司水平",
"average_score": "平均水平"
}
class DeltaToYears(SpecObject):
"""财务得分较去年变化"""
profitability = ValidateAttr(field='profitability', type=str)
asset_quality = ValidateAttr(field='asset_quality', type=str)
debt_risk = ValidateAttr(field='debt_risk', type=str)
business_growth = ValidateAttr(field='business_growth', type=str)
fields_map = {
"profitability": "盈利能力",
"asset_quality": "资产质量",
"debt_risk": "债务风险",
"business_growth": "经营增长"
}
class DeltaToIndustry(SpecObject):
"""财务得分较同行差异"""
profitability = ValidateAttr(field='profitability', type=str)
asset_quality = ValidateAttr(field='asset_quality', type=str)
debt_risk = ValidateAttr(field='debt_risk', type=str)
business_growth = ValidateAttr(field='business_growth', type=str)
fields_map = {
"profitability": "盈利能力",
"asset_quality": "资产质量",
"debt_risk": "债务风险",
"business_growth": "经营增长"
}
class IndexDetails(SpecObject):
"""指标详情"""
index = ValidateAttr(field='index', type=str)
@ -487,8 +430,8 @@ class FinancialElementsAnalysis(SpecObject):
report_date = ValidateAttr(field='report_date', type=str, func=Validate.date_format)
compare_to_years = ValidateAttr(field='compare_to_years', instance_list=CompareToYears)
compare_to_industry = ValidateAttr(field='compare_to_industry', type=CompareToIndustry)
delta_to_years = ValidateAttr(field='delta_to_years', type=DeltaToYears)
delta_to_industry = ValidateAttr(field='delta_to_industry', type=DeltaToIndustry)
delta_to_years = ValidateAttr(field='delta_to_years', type=FinancialIndexs)
delta_to_industry = ValidateAttr(field='delta_to_industry', type=FinancialIndexs)
index_details = ValidateAttr(field='index_details', instance_list=IndexDetails)
fields_map = {
@ -580,3 +523,48 @@ class BusinessElementsAnalysis(SpecObject):
"change_log": "变更记录"
}
class EsgRatingAnalysis(SpecObject):
"""ESG评价分析"""
class EsgRating(SpecObject):
"""ESG评级"""
rating = ValidateAttr(field='rating', type=str)
score = ValidateAttr(field='score', type=(float, int))
industry = ValidateAttr(field='industry', type=str)
fields_map = {
"rating": "ESG评级",
"score": "ESG综合得分",
"industry": "行业"
}
class DimensionScore(SpecObject):
"""维度得分情况"""
dimension = ValidateAttr(field='dimension', type=str)
weights = ValidateAttr(field='weights', type=str)
score = ValidateAttr(field='score', type=(float, int))
score_change = ValidateAttr(field='score_change', type=str)
industry_average = ValidateAttr(field='industry_average', type=str)
fields_map = {
"dimension": "维度",
"weights": "权重",
"score": "公司得分",
"score_change": "得分变化",
"industry_average": "行业均分"
}
cid = ValidateAttr(field='cid', type=str, length=8, default=None)
rid = ValidateAttr(field='rid', type=str, length=8, default=None)
update_time = ValidateAttr(field='update_time', func=Validate.time_format)
esg_rating = ValidateAttr(field='esg_rating', type=EsgRating)
dimension_score = ValidateAttr(field='dimension_score', instance_list=DimensionScore)
fields_map = {
"cid": "企业ID",
"rid": "评价ID",
"update_time": "更新日期",
"esg_rating": "ESG评级",
"dimension_score": "维度得分情况"
}

View File

@ -1,6 +1,7 @@
from flask import Blueprint, request
from CompanyData.CompanyDataImpl import CompanyDataImpl, CreditAnalysisImpl, FinancialAnalysisImpl, BusinessAnalysisImpl
from CompanyData.CompanyDataImpl import CompanyDataImpl, CreditAnalysisImpl, FinancialAnalysisImpl, \
BusinessAnalysisImpl, EsgAnalysisImpl
from Utils.ErrorUtil import ReturnConditionCheckFailed
from common.utils import verify_token
from CompanyData.job_scripts import update_process_scripts
@ -44,17 +45,18 @@ def general_rating():
-
"""
try:
rid = request.json['rid']
credit_analysis = CreditAnalysisImpl()
credit_analysis.rid = request.json['rid']
credit_analysis.rid = rid
credit_analysis.cc_rating_etl()
financial_analysis = FinancialAnalysisImpl()
financial_analysis.rid = request.json['rid']
financial_analysis.rid = rid
financial_analysis.financial_analysis_etl()
business_analysis = BusinessAnalysisImpl()
business_analysis.rid = request.json['rid']
business_analysis.rid = rid
business_analysis.risk_analysis_etl()
company_data = CompanyDataImpl()
company_data.update_credit_data(request.json['rid'])
company_data.update_credit_data(rid)
return {"info": "数据准备完成"}, 200
except ReturnConditionCheckFailed as e:
e.log_error()
@ -74,8 +76,12 @@ def esg_rating():
Returns:
-
"""
rid = request.json['rid']
esg_analysis = EsgAnalysisImpl()
esg_analysis.rid = rid
esg_analysis.egs_analysis_etl()
company_data = CompanyDataImpl()
company_data.update_esg_data(request.json['rid'])
company_data.update_esg_data(rid)
return {"info": "数据准备完成"}, 200