121 lines
3.5 KiB
Python
121 lines
3.5 KiB
Python
import copy
|
|
import datetime
|
|
|
|
from Esg.db import update_data
|
|
from Esg.scripts.environmental import environmental_rating
|
|
from Esg.scripts.governance import governance_rating
|
|
from Esg.scripts.social import social_rating
|
|
from common.scripts import read_json_file, update_process_status
|
|
|
|
|
|
class EsgModel:
|
|
"""
|
|
ESG评价模型
|
|
"""
|
|
def __init__(self):
|
|
"""
|
|
初始化数据
|
|
Parameters
|
|
param dict 数据模板
|
|
questionnaire dict 填报问卷
|
|
rid str 评价ID
|
|
cid str 企业ID
|
|
period str 评价年度
|
|
"""
|
|
self.questionnaire = None
|
|
self.company = None
|
|
self.rid = None
|
|
self.cid = None
|
|
self.period = None
|
|
self.esg_score = None
|
|
self.rating_result = None
|
|
|
|
def prepare_params(self, param):
|
|
"""
|
|
准备模型数据
|
|
Parameters:
|
|
param dict 数据模板
|
|
Returns:
|
|
-
|
|
"""
|
|
self.rid = param['评价ID']
|
|
self.cid = param['企业ID']
|
|
self.company = param['企业名称']
|
|
self.period = param['评价年度']
|
|
self.esg_score = self.esg_rating_scripts(param)
|
|
self.rating_result = self.esg_rating_result()
|
|
|
|
@staticmethod
|
|
def esg_rating_scripts(param):
|
|
"""
|
|
esg打分方法
|
|
Parameters:
|
|
param dict 数据模板
|
|
Returns:
|
|
score dict 分数
|
|
"""
|
|
score = dict()
|
|
score['环境得分'] = environmental_rating(param)
|
|
score['社会得分'] = social_rating(param)
|
|
score['公司治理得分'] = governance_rating(param)
|
|
score['合计'] = score['环境得分']['合计'] + score['社会得分']['合计'] + score['公司治理得分']['合计']
|
|
return score
|
|
|
|
def esg_rating_result(self):
|
|
"""
|
|
整合打分结果
|
|
Parameters:
|
|
score dict 打分结果
|
|
Returns:
|
|
result dict esg得分
|
|
"""
|
|
score = copy.deepcopy(self.esg_score)
|
|
result = dict()
|
|
result['企业名称'] = self.company
|
|
result['企业ID'] = self.cid
|
|
result['评价ID'] = self.rid
|
|
result['评价年度'] = self.period
|
|
result['评价等级'] = self.score_rank(score['合计'])
|
|
result['环境得分'] = score['环境得分']
|
|
result['社会得分'] = score['社会得分']
|
|
result['公司治理得分'] = score['公司治理得分']
|
|
result['ESG得分'] = score['合计']
|
|
result['评价时间'] = datetime.datetime.now().strftime('%Y-%m-%d')
|
|
|
|
return result
|
|
|
|
def save_result(self):
|
|
"""
|
|
保存评价结果
|
|
"""
|
|
rating_result = self.rating_result
|
|
update_data('ESG评价数据', '评价结果', {"企业ID": self.cid, "评价年度": self.period}, rating_result)
|
|
update_process_status(self.rid, 'ESG评价流程', {"评价流程.评价结果": 1})
|
|
|
|
@staticmethod
|
|
def score_rank(param):
|
|
"""
|
|
描述
|
|
Parameters:
|
|
param float esg分数合计
|
|
Returns:
|
|
result str 评价等级
|
|
"""
|
|
if param >= 80:
|
|
level = 'A'
|
|
elif param >= 50:
|
|
level = 'B'
|
|
elif param >= 30:
|
|
level = 'C'
|
|
else:
|
|
level = 'D'
|
|
|
|
return level
|
|
|
|
|
|
if __name__ == '__main__':
|
|
m = EsgModel()
|
|
data = read_json_file('/Esg/static/template_data.json')
|
|
m.prepare_params(data)
|
|
r = m.esg_rating_result()
|