update ESG打分模型
This commit is contained in:
parent
f22d77882b
commit
db53296975
|
@ -1,3 +1,7 @@
|
|||
from Esg.scripts.environmental import environmental_rating
|
||||
from Esg.scripts.governance import governance_rating
|
||||
from Esg.scripts.social import social_rating
|
||||
|
||||
|
||||
class EsgModel:
|
||||
"""
|
||||
|
@ -6,5 +10,46 @@ class EsgModel:
|
|||
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
|
||||
|
||||
def prepare_params(self, param):
|
||||
"""
|
||||
准备模型数据
|
||||
Parameters:
|
||||
param dict 数据模板
|
||||
Returns:
|
||||
-
|
||||
"""
|
||||
self.rid = param['评价ID']
|
||||
self.cid = param['企业ID']
|
||||
self.company = param['企业名称']
|
||||
self.period = param['评价年度']
|
||||
self.questionnaire = param['填报问卷']
|
||||
self.esg_score = self.esg_rating_scripts()
|
||||
|
||||
def esg_rating_scripts(self):
|
||||
"""
|
||||
esg打分方法
|
||||
Parameters:
|
||||
-
|
||||
Returns:
|
||||
score dict 分数
|
||||
"""
|
||||
score = dict()
|
||||
score['环境'] = environmental_rating(self.questionnaire)
|
||||
score['社会责任'] = social_rating(self.questionnaire)
|
||||
score['公司治理'] = governance_rating(self.questionnaire)
|
||||
score['合计'] = sum(score.values())
|
||||
return score
|
||||
|
|
|
@ -0,0 +1,343 @@
|
|||
from common.scripts import read_json_file
|
||||
|
||||
|
||||
def environmental_rating(param):
|
||||
"""
|
||||
环境部分打分
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score float 环境部分得分
|
||||
"""
|
||||
fraction = list()
|
||||
|
||||
if calculation_09(param) == 'E=0':
|
||||
score = 0
|
||||
else:
|
||||
fraction.append(calculation_01(param))
|
||||
fraction.append(calculation_02(param))
|
||||
fraction.append(calculation_03(param))
|
||||
fraction.append(calculation_04(param))
|
||||
fraction.append(calculation_05(param))
|
||||
fraction.append(calculation_06(param))
|
||||
fraction.append(calculation_07(param))
|
||||
fraction.append(calculation_08(param))
|
||||
fraction.append(calculation_10(param))
|
||||
fraction.append(calculation_11(param))
|
||||
fraction.append(calculation_12(param))
|
||||
score = sum(fraction)
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_01(param):
|
||||
"""
|
||||
单位收入二氧化碳排放
|
||||
Parameters:
|
||||
param dict 环境问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
|
||||
def calculation_co2(data):
|
||||
"""
|
||||
计算每年碳排放
|
||||
Parameters:
|
||||
data dict 当前年公司能耗数据
|
||||
Returns:
|
||||
result float 当年碳排放量
|
||||
"""
|
||||
total = list()
|
||||
total.append(round(data['原煤(千克)'] * 1.9003, 2))
|
||||
total.append(round(data['焦炭(千克)'] * 2.8604, 2))
|
||||
total.append(round(data['原油(升)'] * 0.86 * 3.0202, 2))
|
||||
total.append(round(data['燃料油(升)'] * 0.86 * 3.1705, 2))
|
||||
total.append(round(data['汽油(升)'] * 0.73 * 2.9251, 2))
|
||||
total.append(round(data['煤油(升)'] * 0.82 * 3.0179, 2))
|
||||
total.append(round(data['柴油(升)'] * 0.85 * 3.0959, 2))
|
||||
total.append(round(data['液化石油气(千克)'] * 3.1013, 2))
|
||||
total.append(round(data['天然气(立方米)'] * 2.1622, 2))
|
||||
total.append(round(data['煤气(立方米)'] * 0.7100, 2))
|
||||
total.append(round(data['电(千瓦时)'] * 0.6101, 2))
|
||||
amount = sum(total)
|
||||
return amount
|
||||
|
||||
year_2020 = calculation_co2(param['环境问卷']['近三年公司数据'][0])
|
||||
year_2019 = calculation_co2(param['环境问卷']['近三年公司数据'][1])
|
||||
year_2018 = calculation_co2(param['环境问卷']['近三年公司数据'][2])
|
||||
|
||||
factor_01 = ((year_2020/year_2018)**(1/2)-1) <= -0.04 and year_2018 >= year_2019 >= year_2020
|
||||
factor_02 = -0.04 < ((year_2020/year_2018)**(1/2)-1) <= -0.03 and year_2018 >= year_2019 >= year_2020
|
||||
factor_03 = -0.03 < ((year_2020/year_2018)**(1/2)-1) <= -0.02 and year_2018 >= year_2019 >= year_2020
|
||||
factor_04 = -0.02 < ((year_2020/year_2018)**(1/2)-1) <= 0.01 and year_2018 >= year_2019 >= year_2020
|
||||
factor_05 = -0.01 < ((year_2020/year_2018)**(1/2)-1) <= 0 and year_2018 >= year_2019 >= year_2020
|
||||
|
||||
if factor_01:
|
||||
score = 15
|
||||
elif factor_02:
|
||||
score = 12
|
||||
elif factor_03:
|
||||
score = 9
|
||||
elif factor_04:
|
||||
score = 6
|
||||
elif factor_05:
|
||||
score = 3
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_02(param):
|
||||
"""
|
||||
单位收入的能耗
|
||||
Parameters:
|
||||
param dict 环境问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
def calculation_co2(data):
|
||||
"""
|
||||
计算每年能耗
|
||||
Parameters:
|
||||
data dict 当前年公司能耗数据
|
||||
Returns:
|
||||
result float 当年碳排放量
|
||||
"""
|
||||
total = list()
|
||||
total.append(round(data['原煤(千克)'] * 20.9080, 2))
|
||||
total.append(round(data['焦炭(千克)'] * 28.4350, 2))
|
||||
total.append(round(data['原油(升)'] * 0.86 * 41.8160, 2))
|
||||
total.append(round(data['燃料油(升)'] * 0.86 * 41.8160, 2))
|
||||
total.append(round(data['汽油(升)'] * 0.73 * 43.0700, 2))
|
||||
total.append(round(data['煤油(升)'] * 0.82 * 43.0700, 2))
|
||||
total.append(round(data['柴油(升)'] * 0.85 * 42.6520, 2))
|
||||
total.append(round(data['液化石油气(千克)'] * 50.1790, 2))
|
||||
total.append(round(data['天然气(立方米)'] * 38.9310, 2))
|
||||
total.append(round(data['煤气(立方米)'] * 17.0000, 2))
|
||||
total.append(round(data['电(千瓦时)'] * 11.8400, 2))
|
||||
amount = sum(total)
|
||||
return amount
|
||||
|
||||
year_2020 = calculation_co2(param['环境问卷']['近三年公司数据'][0])
|
||||
year_2019 = calculation_co2(param['环境问卷']['近三年公司数据'][1])
|
||||
year_2018 = calculation_co2(param['环境问卷']['近三年公司数据'][2])
|
||||
|
||||
factor_01 = ((year_2020/year_2018)**(1/2)-1) <= -0.028 and year_2018 >= year_2019 >= year_2020
|
||||
factor_02 = -0.028 < ((year_2020/year_2018)**(1/2)-1) <= -0.02 and year_2018 >= year_2019 >= year_2020
|
||||
factor_03 = -0.02 < ((year_2020/year_2018)**(1/2)-1) <= -0.01 and year_2018 >= year_2019 >= year_2020
|
||||
factor_04 = -0.01 < ((year_2020/year_2018)**(1/2)-1) <= 0 and year_2018 >= year_2019 >= year_2020
|
||||
|
||||
if factor_01:
|
||||
score = 11
|
||||
elif factor_02:
|
||||
score = 8
|
||||
elif factor_03:
|
||||
score = 5
|
||||
elif factor_04:
|
||||
score = 2
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_03(param):
|
||||
"""
|
||||
单位收入的耗水
|
||||
Parameters:
|
||||
param dict 环境问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
year_2020 = param['环境问卷']['近三年公司数据'][0]['水(吨)']
|
||||
year_2019 = param['环境问卷']['近三年公司数据'][1]['水(吨)']
|
||||
year_2018 = param['环境问卷']['近三年公司数据'][2]['水(吨)']
|
||||
|
||||
factor_01 = ((year_2020/year_2018)**(1/2)-1) <= -0.01 and year_2018 >= year_2019 >= year_2020
|
||||
factor_02 = -0.01 < ((year_2020/year_2018)**(1/2)-1) <= 0 and year_2018 >= year_2019 >= year_2020
|
||||
|
||||
if factor_01:
|
||||
score = 6
|
||||
elif factor_02:
|
||||
score = 3
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_04(param):
|
||||
"""
|
||||
绿色业务收入占比(加分项)
|
||||
Parameters:
|
||||
param dict 环境问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
income = param['公司收入'][0]
|
||||
green_income = param['环境问卷']['近三年公司数据'][0]['绿色业务收入(万元)']
|
||||
prop = round(green_income / income, 2)
|
||||
|
||||
if prop >= 50:
|
||||
score = 10
|
||||
elif prop >= 30:
|
||||
score = 6
|
||||
elif prop >= 10:
|
||||
score = 3
|
||||
elif prop > 0:
|
||||
score = 1
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_05(param):
|
||||
"""
|
||||
公司是否有温室气体减排目标
|
||||
Parameters:
|
||||
param dict 环境问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
answer = param['环境问卷']['其他类型问卷'][0]
|
||||
|
||||
if answer[0] == '是' and answer[1] is not None:
|
||||
score = 1
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_06(param):
|
||||
"""
|
||||
企业是否有节能目标
|
||||
Parameters:
|
||||
param dict 环境问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
answer = param['环境问卷']['其他类型问卷'][1]
|
||||
|
||||
if answer[0] == '是' and answer[1] is not None:
|
||||
score = 1
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_07(param):
|
||||
"""
|
||||
企业是否有节约用水目标
|
||||
Parameters:
|
||||
param dict 环境问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
answer = param['环境问卷']['其他类型问卷'][2]
|
||||
|
||||
if answer[0] == '是' and answer[1] is not None:
|
||||
score = 1
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_08(param):
|
||||
"""
|
||||
是否有绿色业务(加分项)
|
||||
Parameters:
|
||||
param dict 环境问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
answer = param['环境问卷']['其他类型问卷'][3]
|
||||
|
||||
if answer[0] == '是' and answer[1] is not None:
|
||||
score = 2
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_09(param):
|
||||
"""
|
||||
近三年是否被环境或水务等监管部门处罚
|
||||
Parameters:
|
||||
param dict 环境问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
answer = param['环境问卷']['其他类型问卷'][4]
|
||||
|
||||
if answer[0] == '是':
|
||||
score = 'E=0'
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_10(param):
|
||||
"""
|
||||
国家双碳目标对企业业务是否有不利影响(减分项)
|
||||
Parameters:
|
||||
param dict 环境问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
answer = param['环境问卷']['其他类型问卷'][5]
|
||||
|
||||
if answer[0] == '否':
|
||||
score = -2
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_11(param):
|
||||
"""
|
||||
国家双碳目标对企业业务是否有有利影响(加分项)
|
||||
Parameters:
|
||||
param dict 环境问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
answer = param['环境问卷']['其他类型问卷'][6]
|
||||
|
||||
if answer[0] == '是' and answer[1] is not None:
|
||||
score = 2
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_12(param):
|
||||
"""
|
||||
企业是否使用风电、光电、水电等清洁能源,是否使用清洁交通工具(加分项)
|
||||
Parameters:
|
||||
param dict 环境问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
answer = param['环境问卷']['其他类型问卷'][7]
|
||||
|
||||
if answer[0] == '是' and answer[1] is not None:
|
||||
score = 3
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
data = read_json_file('/Esg/static/template_data.json')
|
||||
E_score = environmental_rating(data)
|
||||
print(E_score)
|
|
@ -0,0 +1,211 @@
|
|||
from common.scripts import read_json_file
|
||||
|
||||
|
||||
def governance_rating(param):
|
||||
"""
|
||||
治理部分打分
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score float 治理部分得分
|
||||
"""
|
||||
fraction = list()
|
||||
|
||||
fraction.append(calculation_01(param))
|
||||
fraction.append(calculation_02(param))
|
||||
fraction.append(calculation_03(param))
|
||||
fraction.append(calculation_04(param))
|
||||
fraction.append(calculation_05(param))
|
||||
fraction.append(calculation_06(param))
|
||||
fraction.append(calculation_07(param))
|
||||
fraction.append(calculation_08(param))
|
||||
fraction.append(calculation_09(param))
|
||||
score = sum(fraction)
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_01(param):
|
||||
"""
|
||||
企业性质
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
answer = param['治理问卷']['其他类型问卷'][0]
|
||||
|
||||
if answer == 'A':
|
||||
score = 8
|
||||
elif answer == 'B':
|
||||
score = 3
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_02(param):
|
||||
"""
|
||||
公司是否设有董事会
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
answer = param['治理问卷']['其他类型问卷'][5]
|
||||
|
||||
if answer == '是':
|
||||
score = 1
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_03(param):
|
||||
"""
|
||||
公司是否设有监事会
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
answer = param['治理问卷']['其他类型问卷'][6]
|
||||
|
||||
if answer == '是':
|
||||
score = 1
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_04(param):
|
||||
"""
|
||||
董监高平均拥有的行业经验年数
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
answer = param['治理问卷']['其他类型问卷'][1]
|
||||
|
||||
if answer == 'A':
|
||||
score = 4
|
||||
elif answer == 'B':
|
||||
score = 2
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_05(param):
|
||||
"""
|
||||
董监高近三年离职率
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
answer = param['治理问卷']['其他类型问卷'][2] / param['治理问卷']['其他类型问卷'][3] * 100
|
||||
|
||||
if answer < 35:
|
||||
score = 4
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_06(param):
|
||||
"""
|
||||
公司近三年信息披露及时、可靠、完备、审计质量
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
answer = param['治理问卷']['其他类型问卷'][7]
|
||||
|
||||
if answer == '是':
|
||||
score = 1
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_07(param):
|
||||
"""
|
||||
公司董事会近三年年均开会次数
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
answer = param['治理问卷']['其他类型问卷'][4]
|
||||
|
||||
if answer == 'A':
|
||||
score = 3
|
||||
elif answer == 'B':
|
||||
score = 1
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_08(param):
|
||||
"""
|
||||
净资产收益率
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
data = param['治理问卷']['近三年公司数据']
|
||||
year_2020 = data[0]['公司净利润(万元)'] / data[0]['公司净资产(万元)'] * 100
|
||||
year_2019 = data[1]['公司净利润(万元)'] / data[1]['公司净资产(万元)'] * 100
|
||||
year_2018 = data[2]['公司净利润(万元)'] / data[2]['公司净资产(万元)'] * 100
|
||||
|
||||
average = (year_2020 + year_2019 + year_2018)/3
|
||||
|
||||
if average >= 15:
|
||||
score = 6
|
||||
elif average >= 10:
|
||||
score = 4
|
||||
elif average >= 8:
|
||||
score = 2
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_09(param):
|
||||
"""
|
||||
公司是否有审计报告
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
data = param['治理问卷']['近三年公司数据']
|
||||
year_2020 = data[0]['公司是否有审计报告']
|
||||
year_2019 = data[1]['公司是否有审计报告']
|
||||
year_2018 = data[2]['公司是否有审计报告']
|
||||
|
||||
if year_2020 == year_2019 == year_2018 == '是':
|
||||
score = 2
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
data = read_json_file('/Esg/static/template_data.json')
|
||||
S_score = governance_rating(data)
|
||||
print(S_score)
|
|
@ -0,0 +1,354 @@
|
|||
from common.scripts import read_json_file
|
||||
|
||||
|
||||
def social_rating(param):
|
||||
"""
|
||||
社会部分打分
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score float 社会部分得分
|
||||
"""
|
||||
fraction = list()
|
||||
|
||||
if calculation_15(param) == 'S=0':
|
||||
score = 0
|
||||
else:
|
||||
fraction.append(calculation_01(param))
|
||||
fraction.append(calculation_02(param))
|
||||
fraction.append(calculation_03(param))
|
||||
fraction.append(calculation_04(param))
|
||||
fraction.append(calculation_05(param))
|
||||
fraction.append(calculation_06(param))
|
||||
fraction.append(calculation_07(param))
|
||||
fraction.append(calculation_08(param))
|
||||
fraction.append(calculation_09(param))
|
||||
fraction.append(calculation_10(param))
|
||||
fraction.append(calculation_11(param))
|
||||
fraction.append(calculation_12(param))
|
||||
fraction.append(calculation_13(param))
|
||||
fraction.append(calculation_14(param))
|
||||
score = sum(fraction)
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_01(param):
|
||||
"""
|
||||
离职人数占比
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
social_data = param['社会问卷']['近三年公司数据']
|
||||
year_2020 = round(social_data[0]['当年离职人数'] / social_data[0]['员工总数'], 2)
|
||||
year_2019 = round(social_data[1]['当年离职人数'] / social_data[1]['员工总数'], 2)
|
||||
year_2018 = round(social_data[2]['当年离职人数'] / social_data[2]['员工总数'], 2)
|
||||
|
||||
factor_01 = (year_2018 + year_2019 + year_2020)/3*100 <= 20
|
||||
factor_02 = 20 < (year_2018 + year_2019 + year_2020)/3*100 <= 30
|
||||
|
||||
if factor_01:
|
||||
score = 5
|
||||
elif factor_02:
|
||||
score = 2
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_02(param):
|
||||
"""
|
||||
人均薪酬涨幅
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
year_2020 = param['社会问卷']['近三年公司数据'][0]['人均薪酬水平(元/月)']
|
||||
year_2018 = param['社会问卷']['近三年公司数据'][2]['人均薪酬水平(元/月)']
|
||||
|
||||
factor = (year_2020/year_2018)**(1/2) - 1 >= 0.03
|
||||
|
||||
if factor:
|
||||
score = 2
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_03(param):
|
||||
"""
|
||||
劳动合同中的工作时长(周)
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
year_2020 = param['社会问卷']['近三年公司数据'][0]['劳动合同要求工作时长(每周小时数)']
|
||||
year_2019 = param['社会问卷']['近三年公司数据'][1]['劳动合同要求工作时长(每周小时数)']
|
||||
year_2018 = param['社会问卷']['近三年公司数据'][2]['劳动合同要求工作时长(每周小时数)']
|
||||
|
||||
factor = (year_2020 + year_2019 + year_2018) / 3 <= 45
|
||||
|
||||
if factor:
|
||||
score = 4
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_04(param):
|
||||
"""
|
||||
劳动纠纷
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
year_2020 = param['社会问卷']['近三年公司数据'][0]['劳资纠纷次数']
|
||||
year_2019 = param['社会问卷']['近三年公司数据'][1]['劳资纠纷次数']
|
||||
year_2018 = param['社会问卷']['近三年公司数据'][2]['劳资纠纷次数']
|
||||
|
||||
factor = (year_2020 + year_2019 + year_2018) <= 0
|
||||
|
||||
if factor:
|
||||
score = 3
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_05(param):
|
||||
"""
|
||||
安全事故
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
year_2020 = param['社会问卷']['近三年公司数据'][0]['安全事故发生次数']
|
||||
year_2019 = param['社会问卷']['近三年公司数据'][1]['安全事故发生次数']
|
||||
year_2018 = param['社会问卷']['近三年公司数据'][2]['安全事故发生次数']
|
||||
|
||||
factor = (year_2020 + year_2019 + year_2018) <= 0
|
||||
|
||||
if factor:
|
||||
score = 3
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_06(param):
|
||||
"""
|
||||
提供培训
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
year_2020 = param['社会问卷']['近三年公司数据'][0]['组织培训次数']
|
||||
year_2019 = param['社会问卷']['近三年公司数据'][1]['组织培训次数']
|
||||
year_2018 = param['社会问卷']['近三年公司数据'][2]['组织培训次数']
|
||||
|
||||
factor_01 = (year_2020 + year_2019 + year_2018) >= 4
|
||||
factor_02 = (year_2020 + year_2019 + year_2018) >= 1
|
||||
|
||||
if factor_01:
|
||||
score = 5
|
||||
elif factor_02:
|
||||
score = 2
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_07(param):
|
||||
"""
|
||||
社保缴纳是否符合当地标准
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
anwser = param['社会问卷']['其他类型问卷'][0]
|
||||
|
||||
if anwser == '是':
|
||||
score = 1
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_08(param):
|
||||
"""
|
||||
公积金缴纳是否符合当地标准
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
anwser = param['社会问卷']['其他类型问卷'][1]
|
||||
|
||||
if anwser == '是':
|
||||
score = 1
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_09(param):
|
||||
"""
|
||||
是否提供员工体检
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
anwser = param['社会问卷']['其他类型问卷'][2]
|
||||
|
||||
if anwser == '是':
|
||||
score = 1
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_10(param):
|
||||
"""
|
||||
是否提供带薪假期
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
anwser = param['社会问卷']['其他类型问卷'][3]
|
||||
|
||||
if anwser == '是':
|
||||
score = 1
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_11(param):
|
||||
"""
|
||||
公司从前三大供货商拿货占比
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
year_2020 = param['社会问卷']['近三年公司数据'][0]['公司从前3大供应商拿货占全部供应商比例(%)']
|
||||
year_2018 = param['社会问卷']['近三年公司数据'][2]['公司从前3大供应商拿货占全部供应商比例(%)']
|
||||
|
||||
factor = year_2018 >= year_2020
|
||||
|
||||
if factor:
|
||||
score = 1
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_12(param):
|
||||
"""
|
||||
公司前3大客户销量占比
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
year_2020 = param['社会问卷']['近三年公司数据'][0]['公司前3大客户销售额占全部销售比例(%)']
|
||||
year_2018 = param['社会问卷']['近三年公司数据'][2]['公司前3大客户销售额占全部销售比例(%)']
|
||||
|
||||
factor = year_2018 >= year_2020
|
||||
|
||||
if factor:
|
||||
score = 1
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_13(param):
|
||||
"""
|
||||
公司返修、退回、投诉产品比例(%)
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
year_2020 = param['社会问卷']['近三年公司数据'][0]['返修、退回、投诉产品对应销售额占全部销售比例(%)']
|
||||
year_2018 = param['社会问卷']['近三年公司数据'][2]['返修、退回、投诉产品对应销售额占全部销售比例(%)']
|
||||
|
||||
factor = year_2018 >= year_2020
|
||||
|
||||
if factor:
|
||||
score = 1
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_14(param):
|
||||
"""
|
||||
扶贫+捐赠规模(万元)
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
year_2020 = param['社会问卷']['近三年公司数据'][0]['扶贫+捐赠规模(万元)']
|
||||
year_2019 = param['社会问卷']['近三年公司数据'][1]['扶贫+捐赠规模(万元)']
|
||||
year_2018 = param['社会问卷']['近三年公司数据'][2]['扶贫+捐赠规模(万元)']
|
||||
|
||||
factor_01 = (year_2020 + year_2019 + year_2018) > 0
|
||||
|
||||
if factor_01:
|
||||
score = 5
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
def calculation_15(param):
|
||||
"""
|
||||
司法风险
|
||||
Parameters:
|
||||
param dict 填报问卷
|
||||
Returns:
|
||||
score int 得分
|
||||
"""
|
||||
risk = param['风险数据']
|
||||
score = None
|
||||
for value in risk.values():
|
||||
if value > 0:
|
||||
score = 'S=0'
|
||||
break
|
||||
else:
|
||||
score = 0
|
||||
|
||||
return score
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
data = read_json_file('/Esg/static/template_data.json')
|
||||
S_score = social_rating(data)
|
||||
print(S_score)
|
|
@ -0,0 +1,153 @@
|
|||
{
|
||||
"评价ID": "EsfsSg02",
|
||||
"企业ID": "Z1tfsw6r",
|
||||
"企业名称": "远东资信评估有限公司",
|
||||
"所属行业": ["制造业", "化学工业"],
|
||||
"公司收入": [200232, 253014, 190123],
|
||||
"环境问卷": {
|
||||
"近三年公司数据": [
|
||||
{
|
||||
"年份": "2020年",
|
||||
"原煤(千克)": 1402.3,
|
||||
"焦炭(千克)": 1402.3,
|
||||
"原油(升)": 1402.3,
|
||||
"燃料油(升)": 1402.3,
|
||||
"汽油(升)": 1402.3,
|
||||
"煤油(升)": 1402.3,
|
||||
"柴油(升)": 1402.3,
|
||||
"液化石油气(千克)": 1402.3,
|
||||
"天然气(立方米)": 1402.3,
|
||||
"煤气(立方米)": 1402.3,
|
||||
"电(千瓦时)": 1402.3,
|
||||
"水(吨)": 1402.3,
|
||||
"绿色业务收入(万元)": 1402.3
|
||||
},
|
||||
{
|
||||
"年份": "2019年",
|
||||
"原煤(千克)": 1402.3,
|
||||
"焦炭(千克)": 1402.3,
|
||||
"原油(升)": 1402.3,
|
||||
"燃料油(升)": 1402.3,
|
||||
"汽油(升)": 1402.3,
|
||||
"煤油(升)": 1402.3,
|
||||
"柴油(升)": 1402.3,
|
||||
"液化石油气(千克)": 1402.3,
|
||||
"天然气(立方米)": 1402.3,
|
||||
"煤气(立方米)": 1402.3,
|
||||
"电(千瓦时)": 1402.3,
|
||||
"水(吨)": 1402.3,
|
||||
"绿色业务收入(万元)": 1402.3
|
||||
},
|
||||
{
|
||||
"年份": "2018年",
|
||||
"原煤(千克)": 1402.3,
|
||||
"焦炭(千克)": 1402.3,
|
||||
"原油(升)": 1402.3,
|
||||
"燃料油(升)": 1402.3,
|
||||
"汽油(升)": 1402.3,
|
||||
"煤油(升)": 1402.3,
|
||||
"柴油(升)": 1402.3,
|
||||
"液化石油气(千克)": 1402.3,
|
||||
"天然气(立方米)": 1402.3,
|
||||
"煤气(立方米)": 1402.3,
|
||||
"电(千瓦时)": 1402.3,
|
||||
"水(吨)": 1402.3,
|
||||
"绿色业务收入(万元)": 1402.3
|
||||
}
|
||||
],
|
||||
"其他类型问卷": [
|
||||
["是", "以2021年为基准,未来5年减少10%"],
|
||||
["是", "以2021年为基准,未来5年减少10%"],
|
||||
["是", "以2021年为基准,未来5年减少10%"],
|
||||
["否"],
|
||||
["否"],
|
||||
["是", "以2021年为基准,未来5年减少10%"],
|
||||
["是", "以2021年为基准,未来5年减少10%"],
|
||||
["否"]
|
||||
]
|
||||
},
|
||||
"社会问卷": {
|
||||
"近三年公司数据": [
|
||||
{
|
||||
"年份": "2020年",
|
||||
"员工总数": 152,
|
||||
"当年离职人数": 23,
|
||||
"人均薪酬水平(元/月)": 8140,
|
||||
"劳动合同要求工作时长(每周小时数)": 40,
|
||||
"劳资纠纷次数": 15,
|
||||
"安全事故发生次数": 0,
|
||||
"组织培训次数": 14,
|
||||
"公司从前3大供应商拿货占全部供应商比例(%)": 10.1,
|
||||
"公司前3大客户销售额占全部销售比例(%)": 152,
|
||||
"返修、退回、投诉产品对应销售额占全部销售比例(%)": 0.98,
|
||||
"扶贫+捐赠规模(万元)": 50
|
||||
},
|
||||
{
|
||||
"年份": "2019年",
|
||||
"员工总数": 152,
|
||||
"当年离职人数": 23,
|
||||
"人均薪酬水平(元/月)": 8140,
|
||||
"劳动合同要求工作时长(每周小时数)": 40,
|
||||
"劳资纠纷次数": 15,
|
||||
"安全事故发生次数": 0,
|
||||
"组织培训次数": 14,
|
||||
"公司从前3大供应商拿货占全部供应商比例(%)": 10.1,
|
||||
"公司前3大客户销售额占全部销售比例(%)": 152,
|
||||
"返修、退回、投诉产品对应销售额占全部销售比例(%)": 0.98,
|
||||
"扶贫+捐赠规模(万元)": 50
|
||||
},
|
||||
{
|
||||
"年份": "2018年",
|
||||
"员工总数": 152,
|
||||
"当年离职人数": 23,
|
||||
"人均薪酬水平(元/月)": 8140,
|
||||
"劳动合同要求工作时长(每周小时数)": 40,
|
||||
"劳资纠纷次数": 15,
|
||||
"安全事故发生次数": 0,
|
||||
"组织培训次数": 14,
|
||||
"公司从前3大供应商拿货占全部供应商比例(%)": 10.1,
|
||||
"公司前3大客户销售额占全部销售比例(%)": 152,
|
||||
"返修、退回、投诉产品对应销售额占全部销售比例(%)": 0.98,
|
||||
"扶贫+捐赠规模(万元)": 50
|
||||
}
|
||||
],
|
||||
"其他类型问卷": [
|
||||
["是"],
|
||||
["是"],
|
||||
["是"],
|
||||
["是"]
|
||||
]
|
||||
},
|
||||
"治理问卷": {
|
||||
"近三年公司数据": [
|
||||
{
|
||||
"年份": "2020年",
|
||||
"公司是否有审计报告": "是",
|
||||
"公司净资产(万元)": 260242,
|
||||
"公司净利润(万元)": 10230
|
||||
},
|
||||
{
|
||||
"年份": "2019年",
|
||||
"公司是否有审计报告": "是",
|
||||
"公司净资产(万元)": 260242,
|
||||
"公司净利润(万元)": 10230
|
||||
},
|
||||
{
|
||||
"年份": "2018年",
|
||||
"公司是否有审计报告": "是",
|
||||
"公司净资产(万元)": 260242,
|
||||
"公司净利润(万元)": 10230
|
||||
}
|
||||
],
|
||||
"其他类型问卷": ["A", "B", 20, 6, "B", "是", "否", "是"]
|
||||
},
|
||||
"风险数据": {
|
||||
"法律诉讼": 0,
|
||||
"被执行人": 0,
|
||||
"失信人": 0,
|
||||
"行政处罚": 0,
|
||||
"税收违法": 0,
|
||||
"严重违法": 0,
|
||||
"经营异常": 0
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue