diff --git a/CompanyData/CompanyDataImpl.py b/CompanyData/CompanyDataImpl.py index d636916..b080895 100644 --- a/CompanyData/CompanyDataImpl.py +++ b/CompanyData/CompanyDataImpl.py @@ -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__() \ No newline at end of file diff --git a/CompanyData/CompanyDataObj.py b/CompanyData/CompanyDataObj.py index 4fad2ca..48a23bc 100644 --- a/CompanyData/CompanyDataObj.py +++ b/CompanyData/CompanyDataObj.py @@ -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": "维度得分情况" + } + diff --git a/CompanyData/CompanyDataRoutes.py b/CompanyData/CompanyDataRoutes.py index 1b31335..b28b84d 100644 --- a/CompanyData/CompanyDataRoutes.py +++ b/CompanyData/CompanyDataRoutes.py @@ -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