update ESG打分模型
This commit is contained in:
parent
46eeb3a615
commit
1f97cf33b9
|
@ -1,5 +1,6 @@
|
|||
import copy
|
||||
|
||||
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
|
||||
|
@ -26,6 +27,7 @@ class EsgModel:
|
|||
self.cid = None
|
||||
self.period = None
|
||||
self.esg_score = None
|
||||
self.rating_result = None
|
||||
|
||||
def prepare_params(self, param):
|
||||
"""
|
||||
|
@ -40,6 +42,7 @@ class EsgModel:
|
|||
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):
|
||||
|
@ -73,13 +76,19 @@ class EsgModel:
|
|||
result['评价年度'] = self.period
|
||||
result['评价等级'] = self.score_rank(score['合计'])
|
||||
result['环境得分'] = score['环境得分']
|
||||
result['环境得分'] = score['环境得分']
|
||||
result['社会得分'] = score['环境得分']
|
||||
result['公司治理得分'] = score['环境得分']
|
||||
result['合计'] = score['合计']
|
||||
result['社会得分'] = score['社会得分']
|
||||
result['公司治理得分'] = score['公司治理得分']
|
||||
result['ESG得分'] = score['合计']
|
||||
|
||||
return result
|
||||
|
||||
def save_result(self):
|
||||
"""
|
||||
保存评价结果
|
||||
"""
|
||||
rating_result = self.rating_result
|
||||
update_data('评价', 'ESG评价结果', {"企业ID": self.cid, "评价年度": self.period}, rating_result)
|
||||
|
||||
@staticmethod
|
||||
def score_rank(param):
|
||||
"""
|
||||
|
|
13
Esg/db.py
13
Esg/db.py
|
@ -12,3 +12,16 @@ DB_PORT = 27018
|
|||
client = pymongo.MongoClient('mongodb://{}:{}@{}:{}'.format(DB_USER, DB_PASS, DB_HOST, DB_PORT))
|
||||
|
||||
|
||||
def update_data(db, table, find, data):
|
||||
"""
|
||||
保存数据
|
||||
Parameters:
|
||||
db: str 数据库
|
||||
table: str 表
|
||||
find: dict 查询条件
|
||||
data: dict 更新数据
|
||||
Returns:
|
||||
-
|
||||
"""
|
||||
collection = client[db][table]
|
||||
collection.update_one(find, {"$set": data}, upsert=True)
|
|
@ -1,18 +1,20 @@
|
|||
from flask import Blueprint, request
|
||||
|
||||
from Esg.EsgModel import EsgModel
|
||||
from common.scripts import verify_token
|
||||
|
||||
esg_route = Blueprint('esg', __name__)
|
||||
|
||||
|
||||
@esg_route.route('/questionnaire_data_fill', methods=['POST'])
|
||||
@esg_route.route('/esg_model', methods=['POST'])
|
||||
@verify_token
|
||||
def data_fill():
|
||||
"""
|
||||
ESG问卷填报数据保存
|
||||
Parameters:
|
||||
cid str 企业ID
|
||||
Returns:
|
||||
result: 保存结构
|
||||
"""
|
||||
pass
|
||||
input_data = request.json['input_data']
|
||||
try:
|
||||
model = EsgModel()
|
||||
model.prepare_params(input_data)
|
||||
model.save_result()
|
||||
return {"info": "模型执行成功", "result": model.rating_result['评价等级']}, 200
|
||||
except Exception:
|
||||
return {"info": "模型执行失败"}, 210
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ from Report.scripts.PdfStyle import cover_space, cover_company_style, cover_repo
|
|||
chapter_style, \
|
||||
section_style, adjust_line_width, para_style_single, para_style_bold, table_name, table_unit, table_mark, \
|
||||
adjust_table_widths, adjust_table_style, Seashell4, toc_style_1, table_content_style, toc_style_2, darkGolden, \
|
||||
adjust_table_data, para_bold_style, para_style_esg
|
||||
adjust_table_data, para_bold_style, para_style_esg, para_style_special
|
||||
from Report.scripts.path_tool import gen_pdf_path, get_pic_path
|
||||
from common.scripts import read_json_file
|
||||
# 页码起始设置
|
||||
|
@ -183,7 +183,16 @@ class ReportGenerator:
|
|||
for section in chapter['章节内容']:
|
||||
# 段落
|
||||
if list(section.keys())[0] == '段落':
|
||||
self.story.append(Paragraph(adjust_line_width(section['段落'], 8), para_style_single))
|
||||
factor_01 = True if '绿色业务收入占比(%)' in section['段落'] else False
|
||||
factor_02 = True if '公司在近三年因环境问题受到监管处罚' in section['段落'] else False
|
||||
factor_03 = True if '这影响了公司的社会得分' in section['段落'] else False
|
||||
factor_04 = True if '公司在近三年有过扶贫、捐赠行为' in section['段落'] else False
|
||||
factor_05 = True if '经查,公司存在1项或多项的法律诉讼' in section['段落'] else False
|
||||
factor_06 = True if '这影响了公司在治理方面的得分' in section['段落'] else False
|
||||
if factor_01 or factor_02 or factor_03 or factor_04 or factor_05 or factor_06:
|
||||
self.story.append(Paragraph(adjust_line_width(section['段落'], 8), para_style_special))
|
||||
else:
|
||||
self.story.append(Paragraph(adjust_line_width(section['段落'], 8), para_style_single))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
16
Report/db.py
16
Report/db.py
|
@ -32,6 +32,22 @@ def upload_pdf(name):
|
|||
return False
|
||||
|
||||
|
||||
def upload_esg_pdf(name):
|
||||
"""
|
||||
根据名称保存该企业esg报告
|
||||
"""
|
||||
try:
|
||||
path = get_gen_report_path(name=name)
|
||||
database = '评价'
|
||||
collection = 'esg报告'
|
||||
fs = GridFS(client[database], collection)
|
||||
content = open(path, 'rb').read()
|
||||
pdf_id = fs.put(content, content_type='application/pdf', filename=name)
|
||||
return str(pdf_id)
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
|
||||
def download_pdf(pdf_id):
|
||||
"""
|
||||
根据pdf_id查询pdf文件
|
||||
|
|
|
@ -7,7 +7,8 @@ from flask import Blueprint, request
|
|||
|
||||
from Report.PdfReport import ReportGenerator
|
||||
from Report.ReportModel import ReportModel
|
||||
from Report.db import upload_pdf, update_data
|
||||
from Report.db import upload_pdf, update_data, upload_esg_pdf
|
||||
from Report.scripts.esg_contents import handle_esg_report_data
|
||||
from Report.scripts.path_tool import get_gen_report_path
|
||||
from common.scripts import verify_token, read_json_file
|
||||
|
||||
|
@ -91,6 +92,82 @@ def report_pdf():
|
|||
return {"info": "生成报告失败"}, 210
|
||||
|
||||
|
||||
@report_route.route('/generate_esg_report', methods=['POST'])
|
||||
@verify_token
|
||||
def esg_report_pdf():
|
||||
"""
|
||||
生成ESG报告PDF
|
||||
Parameters:
|
||||
company str 企业名称
|
||||
cid str 企业ID
|
||||
rid str 评价ID
|
||||
Returns:
|
||||
res str 报告FileID
|
||||
"""
|
||||
def get_report_prepare_data(param):
|
||||
"""
|
||||
获取报告准备数据
|
||||
Parameters:
|
||||
param: dict 接口接收的请求数据
|
||||
Returns:
|
||||
res: 请求成功返回报告准备数据;请求失败返回False
|
||||
"""
|
||||
url = 'http://139.9.249.34:51011/etl_tfse/rating/esg_report_data'
|
||||
token = 'dmfd7FshT!5Wng9^gcCcQV7T6FBnVgl4'
|
||||
headers = {'token': token, 'Content-Type': 'application/json;charset=UTF-8'}
|
||||
result = requests.post(url, headers=headers, data=json.dumps(param))
|
||||
return json.loads(result.text) if result.status_code == 200 else False
|
||||
|
||||
def save_report_data(param1, param2, param3):
|
||||
"""
|
||||
保存处理好的报告数据
|
||||
Parameters:
|
||||
param1: dict 查询条件
|
||||
param2: dict 报告数据
|
||||
param3: str 企业名称
|
||||
Returns:
|
||||
res: 处理成功返回报告FileID;处理失败返回False
|
||||
"""
|
||||
# 保存报告数据
|
||||
report_data_result = update_data('评价', 'ESG报告数据', param1, param2)
|
||||
# 保存报告数据失败,返回False
|
||||
if not report_data_result:
|
||||
return False
|
||||
else:
|
||||
# 生成PDF报告文件,以时间戳命名,临时存储
|
||||
report_file_name = '{}_{}.pdf'.format(param3, int(time.time()))
|
||||
pdf_report = ReportGenerator(name=report_file_name, text_model=param2)
|
||||
pdf_report.gen_report()
|
||||
|
||||
# 保存PDF报告文件,删除临时存储的报告
|
||||
file_id = upload_esg_pdf(report_file_name)
|
||||
report_path = get_gen_report_path(name=report_file_name)
|
||||
os.remove(report_path)
|
||||
|
||||
# 保存PDF报告成功,返回FileID;保存PDF报告文件失败,返回False
|
||||
return file_id if file_id else False
|
||||
|
||||
# Parameters
|
||||
req_body = request.json # 接收的json格式请求体
|
||||
prepare_report_data = get_report_prepare_data(req_body)
|
||||
|
||||
# 判断报告准备数据生成情况,若为None则返回错误信息
|
||||
if prepare_report_data is False:
|
||||
return {"info": "报告准备数据生成错误"}, 210
|
||||
|
||||
# 获取报告准备数据
|
||||
report_template = read_json_file('/Report/static/ReportTemplates/{}.json'.format('ESG报告'))
|
||||
|
||||
# 生成报告数据,保存报告数据
|
||||
text_model = handle_esg_report_data(prepare_report_data['data'], report_template)
|
||||
save_report_result = save_report_data({"评价ID": text_model['评价ID']}, text_model, text_model['企业名称'])
|
||||
|
||||
if save_report_result is not False:
|
||||
return {"info": "生成报告成功", "result": {"FileID": save_report_result}}, 200
|
||||
else:
|
||||
return {"info": "生成报告失败"}, 210
|
||||
|
||||
|
||||
@report_route.route('/generate_pdf_report', methods=['POST'])
|
||||
@verify_token
|
||||
def gen_pdf():
|
||||
|
|
|
@ -65,6 +65,8 @@ table_style.add(
|
|||
# para
|
||||
para_style_single = PS(name="para_style_single", fontName="SimHei", fontSize=8, leading=18, alignment=TA_LEFT,
|
||||
spaceBefore=6)
|
||||
para_style_special = PS(name="para_style_single", fontName="SimHei", fontSize=8, leading=18, alignment=TA_LEFT,
|
||||
spaceBefore=6, textColor='red')
|
||||
para_style_normal = PS(name="para_style_normal", fontName="SimHei", fontSize=8, leading=18, alignment=TA_LEFT,
|
||||
spaceBefore=6, firstLineIndent=16)
|
||||
para_style_esg = PS(name="para_style_esg", fontName="SimHei", fontSize=10, leading=18, alignment=TA_LEFT,
|
||||
|
|
|
@ -0,0 +1,469 @@
|
|||
from datetime import datetime
|
||||
|
||||
|
||||
def handle_esg_report_data(param1, param2):
|
||||
"""
|
||||
处理ESG报告模板
|
||||
Parameters:
|
||||
param1 dict 报告数据
|
||||
param2 dict 报告模板
|
||||
Returns:
|
||||
result dict 报告数据
|
||||
"""
|
||||
|
||||
def handle_paragraph_01(param):
|
||||
"""
|
||||
远东资信
|
||||
Parameters:
|
||||
param dict 远东资信段落模板
|
||||
Returns:
|
||||
result dict 处理好的报告模板
|
||||
"""
|
||||
param[2]['段落'] = param[2]['段落'].format(param1['报告模板']['远东资信']['联系电话'])
|
||||
param[3]['段落'] = param[3]['段落'].format(param1['报告模板']['远东资信']['联系人'])
|
||||
return param
|
||||
|
||||
def handle_paragraph_02(param):
|
||||
"""
|
||||
基本信息
|
||||
Parameters:
|
||||
param dict 基本信息段落模板
|
||||
Returns:
|
||||
result dict 处理好的报告模板
|
||||
"""
|
||||
param[0]['段落'] = param[0]['段落'].format(param1['报告模板']['基本信息']['公司名称'])
|
||||
param[1]['段落'] = param[1]['段落'].format(param1['报告模板']['基本信息']['所属行业'])
|
||||
return param
|
||||
|
||||
def handle_paragraph_03(param):
|
||||
"""
|
||||
公司ESG等级
|
||||
Parameters:
|
||||
param dict 公司ESG等级段落模板
|
||||
Returns:
|
||||
result dict 处理好的报告模板
|
||||
"""
|
||||
param[0]['段落'] = param[0]['段落'].format(param1['报告模板']['公司ESG等级']['评价等级'])
|
||||
return param
|
||||
|
||||
def handle_paragraph_04(param):
|
||||
"""
|
||||
环境部分
|
||||
Parameters:
|
||||
param dict 环境部分段落模板
|
||||
Returns:
|
||||
result dict 处理好的报告模板
|
||||
"""
|
||||
|
||||
def handle_part_03():
|
||||
"""
|
||||
段落3
|
||||
Parameters:
|
||||
-
|
||||
Returns:
|
||||
result dict 处理好的报告段落模板
|
||||
"""
|
||||
data = param1['报告模板']['环境部分']['段落3']
|
||||
param[2]['段落'] = param[2]['段落'].format(date_range=data['date_range'], co2_emissions=data['co2_emissions'])
|
||||
|
||||
def handle_part_04():
|
||||
"""
|
||||
段落4
|
||||
Parameters:
|
||||
-
|
||||
Returns:
|
||||
result dict 处理好的报告段落模板
|
||||
"""
|
||||
data = param1['报告模板']['环境部分']['段落4']
|
||||
param[3]['段落'] = param[3]['段落'].format(date_range=data['date_range'], co2_emissions=data['co2_emissions'],
|
||||
year_02=data['year_02'], year_03=data['year_03'],
|
||||
year01_on_year02=data['year01_on_year02'],
|
||||
year02_on_year03=data['year02_on_year03'],
|
||||
industry_indicators=data['industry_indicators'],
|
||||
industry_indicators_average=data['industry_indicators_average'],
|
||||
industry_indicators_median=data['industry_indicators_median'],
|
||||
median_comparison=data['median_comparison'])
|
||||
|
||||
def handle_part_06():
|
||||
"""
|
||||
段落4
|
||||
Parameters:
|
||||
-
|
||||
Returns:
|
||||
result dict 处理好的报告段落模板
|
||||
"""
|
||||
data = param1['报告模板']['环境部分']['段落6']
|
||||
param[5]['段落'] = param[5]['段落'].format(date_range=data['date_range'],
|
||||
energy_consumption=data['energy_consumption'])
|
||||
|
||||
def handle_part_07():
|
||||
"""
|
||||
段落7
|
||||
Parameters:
|
||||
-
|
||||
Returns:
|
||||
result dict 处理好的报告段落模板
|
||||
"""
|
||||
data = param1['报告模板']['环境部分']['段落7']
|
||||
param[6]['段落'] = param[6]['段落'].format(date_range=data['date_range'],
|
||||
energy_consumption=data['energy_consumption'],
|
||||
year_02=data['year_02'], year_03=data['year_03'],
|
||||
year01_on_year02=data['year01_on_year02'],
|
||||
year02_on_year03=data['year02_on_year03'],
|
||||
industry_indicators=data['industry_indicators'],
|
||||
industry_indicators_average=data['industry_indicators_average'],
|
||||
industry_indicators_median=data['industry_indicators_median'],
|
||||
median_comparison=data['median_comparison'])
|
||||
|
||||
def handle_part_08():
|
||||
"""
|
||||
段落8
|
||||
Parameters:
|
||||
-
|
||||
Returns:
|
||||
result dict 处理好的报告段落模板
|
||||
"""
|
||||
data = param1['报告模板']['环境部分']['段落8']
|
||||
param[7]['段落'] = param[7]['段落'].format(date_range=data['date_range'],
|
||||
energy_consumption=data['energy_consumption'])
|
||||
|
||||
def handle_part_09():
|
||||
"""
|
||||
段落9
|
||||
Parameters:
|
||||
-
|
||||
Returns:
|
||||
result dict 处理好的报告段落模板
|
||||
"""
|
||||
data = param1['报告模板']['环境部分']['段落9']
|
||||
param[8]['段落'] = param[8]['段落'].format(date_range=data['date_range'],
|
||||
energy_consumption=data['energy_consumption'])
|
||||
|
||||
def handle_part_10():
|
||||
"""
|
||||
段落10
|
||||
Parameters:
|
||||
-
|
||||
Returns:
|
||||
result dict 处理好的报告段落模板
|
||||
"""
|
||||
data = param1['报告模板']['环境部分']['段落10']
|
||||
param[9]['段落'] = param[9]['段落'].format(date_range=data['date_range'],
|
||||
consume_water=data['consume_water'])
|
||||
|
||||
def handle_part_11():
|
||||
"""
|
||||
段落11
|
||||
Parameters:
|
||||
-
|
||||
Returns:
|
||||
result dict 处理好的报告段落模板
|
||||
"""
|
||||
data = param1['报告模板']['环境部分']['段落11']
|
||||
param[10]['段落'] = param[10]['段落'].format(date_range=data['date_range'],
|
||||
consume_water=data['consume_water'],
|
||||
year_02=data['year_02'], year_03=data['year_03'],
|
||||
year01_on_year02=data['year01_on_year02'],
|
||||
year02_on_year03=data['year02_on_year03'],
|
||||
industry_indicators=data['industry_indicators'],
|
||||
industry_indicators_average=data['industry_indicators_average'],
|
||||
industry_indicators_median=data['industry_indicators_median'],
|
||||
median_comparison=data['median_comparison'])
|
||||
|
||||
def handle_part_12():
|
||||
"""
|
||||
段落12
|
||||
Parameters:
|
||||
-
|
||||
Returns:
|
||||
result dict 处理好的报告段落模板
|
||||
"""
|
||||
data = param1['报告模板']['环境部分']['段落12']
|
||||
param[11]['段落'] = param[11]['段落'].format(describe=data['describe'])
|
||||
|
||||
def hanlde_part_13():
|
||||
"""
|
||||
段落13
|
||||
Parameters:
|
||||
-
|
||||
Returns:
|
||||
result dict 处理好的报告段落模板
|
||||
"""
|
||||
data = param1['报告模板']['环境部分']['段落13']
|
||||
param[12]['段落'] = param[12]['段落'].format(describe=data['describe'])
|
||||
|
||||
def judge_false():
|
||||
"""
|
||||
判断语句描述中是否有false,有则删除
|
||||
Parameters:
|
||||
param type 参数名
|
||||
Returns:
|
||||
result type 返回数据
|
||||
"""
|
||||
new_list = list()
|
||||
for item in param:
|
||||
if item['段落'] != 'False':
|
||||
new_list.append(item)
|
||||
return new_list
|
||||
|
||||
# 调用子方法
|
||||
handle_part_03()
|
||||
handle_part_04()
|
||||
handle_part_06()
|
||||
handle_part_07()
|
||||
handle_part_08()
|
||||
handle_part_09()
|
||||
handle_part_10()
|
||||
handle_part_11()
|
||||
handle_part_12()
|
||||
hanlde_part_13()
|
||||
result = judge_false()
|
||||
return result
|
||||
|
||||
def handle_paragraph_05(param):
|
||||
"""
|
||||
社会部分
|
||||
Parameters:
|
||||
param dict 社会部分段落模板
|
||||
Returns:
|
||||
result dict 处理好的报告模板
|
||||
"""
|
||||
|
||||
def handle_part_02():
|
||||
"""
|
||||
段落2
|
||||
Parameters:
|
||||
-
|
||||
Returns:
|
||||
result dict 处理好的报告段落模板
|
||||
"""
|
||||
data = param1['报告模板']['社会部分']['段落2']
|
||||
param[1]['段落'] = param[1]['段落'].format(date_range=data['date_range'], turnover_ratio=data['turnover_ratio'],
|
||||
year_03=data['year_03'],
|
||||
industry_indicators=data['industry_indicators'],
|
||||
industry_indicators_average=data['industry_indicators_average'],
|
||||
industry_indicators_median=data['industry_indicators_median'],
|
||||
median_comparison=data['median_comparison'])
|
||||
|
||||
def handle_part_03():
|
||||
"""
|
||||
段落3
|
||||
Parameters:
|
||||
-
|
||||
Returns:
|
||||
result dict 处理好的报告段落模板
|
||||
"""
|
||||
data = param1['报告模板']['社会部分']['段落3']
|
||||
param[2]['段落'] = param[2]['段落'].format(date_range=data['date_range'], salary_level=data['salary_level'],
|
||||
year_02=data['year_02'], year_03=data['year_03'],
|
||||
year01_on_year02=data['year01_on_year02'],
|
||||
year02_on_year03=data['year02_on_year03'],
|
||||
industry_indicators=data['industry_indicators'],
|
||||
industry_indicators_average=data['industry_indicators_average'],
|
||||
industry_indicators_median=data['industry_indicators_median'],
|
||||
median_comparison=data['median_comparison'])
|
||||
|
||||
def handle_part_04():
|
||||
"""
|
||||
段落4
|
||||
Parameters:
|
||||
-
|
||||
Returns:
|
||||
result dict 处理好的报告段落模板
|
||||
"""
|
||||
data = param1['报告模板']['社会部分']['段落4']
|
||||
param[3]['段落'] = param[3]['段落'].format(describe=data['describe'])
|
||||
|
||||
def handle_part_05():
|
||||
"""
|
||||
段落5
|
||||
Parameters:
|
||||
-
|
||||
Returns:
|
||||
result dict 处理好的报告段落模板
|
||||
"""
|
||||
data = param1['报告模板']['社会部分']['段落5']
|
||||
param[4]['段落'] = param[4]['段落'].format(describe=data['describe'])
|
||||
|
||||
def handle_part_06():
|
||||
"""
|
||||
段落6
|
||||
Parameters:
|
||||
-
|
||||
Returns:
|
||||
result dict 处理好的报告段落模板
|
||||
"""
|
||||
data = param1['报告模板']['社会部分']['段落6']
|
||||
param[5]['段落'] = param[5]['段落'].format(date_range=data['date_range'],
|
||||
training_number=data['training_number'], year_03=data['year_03'],
|
||||
industry_indicators=data['industry_indicators'])
|
||||
|
||||
def handle_part_07():
|
||||
"""
|
||||
段落7
|
||||
Parameters:
|
||||
-
|
||||
Returns:
|
||||
result dict 处理好的报告段落模板
|
||||
"""
|
||||
data = param1['报告模板']['社会部分']['段落7']
|
||||
param[6]['段落'] = param[6]['段落'].format(date_range=data['date_range'],
|
||||
salary_level=data['salary_level'], year_03=data['year_03'],
|
||||
industry_indicators=data['industry_indicators'])
|
||||
|
||||
def handle_part_08():
|
||||
"""
|
||||
段落8
|
||||
Parameters:
|
||||
-
|
||||
Returns:
|
||||
result dict 处理好的报告段落模板
|
||||
"""
|
||||
data = param1['报告模板']['社会部分']['段落8']
|
||||
param[7]['段落'] = param[7]['段落'].format(describe=data['describe'])
|
||||
|
||||
def handle_part_09():
|
||||
"""
|
||||
段落9
|
||||
Parameters:
|
||||
-
|
||||
Returns:
|
||||
result dict 处理好的报告段落模板
|
||||
"""
|
||||
data = param1['报告模板']['社会部分']['段落9']
|
||||
param[8]['段落'] = param[8]['段落'].format(describe=data['describe'])
|
||||
|
||||
def judge_false():
|
||||
"""
|
||||
判断语句描述中是否有false,有则删除
|
||||
Parameters:
|
||||
param type 参数名
|
||||
Returns:
|
||||
result type 返回数据
|
||||
"""
|
||||
new_list = list()
|
||||
for item in param:
|
||||
if item['段落'] != 'False':
|
||||
new_list.append(item)
|
||||
return new_list
|
||||
|
||||
# 调用子方法
|
||||
handle_part_02()
|
||||
handle_part_03()
|
||||
handle_part_04()
|
||||
handle_part_05()
|
||||
handle_part_06()
|
||||
handle_part_07()
|
||||
handle_part_08()
|
||||
handle_part_09()
|
||||
result = judge_false()
|
||||
return result
|
||||
|
||||
def handle_paragraph_06(param):
|
||||
"""
|
||||
公司治理部分
|
||||
Parameters:
|
||||
param dict 社会部分段落模板
|
||||
Returns:
|
||||
result dict 处理好的报告模板
|
||||
"""
|
||||
|
||||
def handle_part_02():
|
||||
"""
|
||||
段落2
|
||||
Parameters:
|
||||
-
|
||||
Returns:
|
||||
result dict 处理好的报告段落模板
|
||||
"""
|
||||
data = param1['报告模板']['公司治理部分']['段落2']
|
||||
param[1]['段落'] = param[1]['段落'].format(describe=data['describe'])
|
||||
|
||||
def handle_part_03():
|
||||
"""
|
||||
段落3
|
||||
Parameters:
|
||||
-
|
||||
Returns:
|
||||
result dict 处理好的报告段落模板
|
||||
"""
|
||||
data = param1['报告模板']['公司治理部分']['段落3']
|
||||
param[2]['段落'] = param[2]['段落'].format(describe=data['describe'])
|
||||
|
||||
def handle_part_04():
|
||||
"""
|
||||
段落4
|
||||
Parameters:
|
||||
-
|
||||
Returns:
|
||||
result dict 处理好的报告段落模板
|
||||
"""
|
||||
data = param1['报告模板']['公司治理部分']['段落4']
|
||||
param[3]['段落'] = param[3]['段落'].format(experience_year=data['experience_year'],
|
||||
industry_indicators_average=data['industry_indicators_average'])
|
||||
|
||||
def handle_part_05():
|
||||
"""
|
||||
段落5
|
||||
Parameters:
|
||||
-
|
||||
Returns:
|
||||
result dict 处理好的报告段落模板
|
||||
"""
|
||||
data = param1['报告模板']['公司治理部分']['段落5']
|
||||
param[4]['段落'] = param[4]['段落'].format(describe=data['describe'])
|
||||
|
||||
def handle_part_06():
|
||||
"""
|
||||
段落6
|
||||
Parameters:
|
||||
-
|
||||
Returns:
|
||||
result dict 处理好的报告段落模板
|
||||
"""
|
||||
data = param1['报告模板']['公司治理部分']['段落6']
|
||||
param[5]['段落'] = param[5]['段落'].format(board_meetings_number=data['board_meetings_number'],
|
||||
industry_indicators_average=data['industry_indicators_average'])
|
||||
|
||||
def judge_false():
|
||||
"""
|
||||
判断语句描述中是否有false,有则删除
|
||||
Parameters:
|
||||
param type 参数名
|
||||
Returns:
|
||||
result type 返回数据
|
||||
"""
|
||||
new_list = list()
|
||||
for item in param:
|
||||
if item['段落'] != 'False':
|
||||
new_list.append(item)
|
||||
return new_list
|
||||
|
||||
# 调用子方法
|
||||
handle_part_02()
|
||||
handle_part_03()
|
||||
handle_part_04()
|
||||
handle_part_05()
|
||||
handle_part_06()
|
||||
result = judge_false()
|
||||
return result
|
||||
|
||||
param2['评价ID'] = param1['评价ID']
|
||||
param2['企业ID'] = param1['企业ID']
|
||||
param2['评价年度'] = param1['评价年度']
|
||||
param2['生成日期'] = datetime.now().strftime("%Y-%m-%d")
|
||||
for index in range(len(param2['报告内容'])):
|
||||
if param2['报告内容'][index]['章节'] == '远东资信':
|
||||
param2['报告内容'][index]['章节内容'] = handle_paragraph_01(param2['报告内容'][index]['章节内容'])
|
||||
elif param2['报告内容'][index]['章节'] == '基本信息':
|
||||
param2['报告内容'][index]['章节内容'] = handle_paragraph_02(param2['报告内容'][index]['章节内容'])
|
||||
elif param2['报告内容'][index]['章节'] == '公司ESG等级':
|
||||
param2['报告内容'][index]['章节内容'] = handle_paragraph_03(param2['报告内容'][index]['章节内容'])
|
||||
elif param2['报告内容'][index]['章节'] == '环境部分':
|
||||
param2['报告内容'][index]['章节内容'] = handle_paragraph_04(param2['报告内容'][index]['章节内容'])
|
||||
elif param2['报告内容'][index]['章节'] == '社会部分':
|
||||
param2['报告内容'][index]['章节内容'] = handle_paragraph_05(param2['报告内容'][index]['章节内容'])
|
||||
elif param2['报告内容'][index]['章节'] == '公司治理部分':
|
||||
param2['报告内容'][index]['章节内容'] = handle_paragraph_06(param2['报告内容'][index]['章节内容'])
|
||||
|
||||
return param2
|
|
@ -1,6 +1,5 @@
|
|||
{
|
||||
"企业名称": "远东资信评估有限公司",
|
||||
"生成日期": "2022-02-14",
|
||||
"报告类型": "ESG",
|
||||
"报告内容": [
|
||||
{
|
||||
|
@ -100,28 +99,28 @@
|
|||
"段落": "二氧化碳排放——{date_range}年,公司总的二氧化碳排放(单位:千克){co2_emissions}。"
|
||||
},
|
||||
{
|
||||
"段落": "单位二氧化碳排放——{date_range}年,公司每万元收入二氧化碳排放(单位:千克){CO2_year_01}、{CO2_year_02}、{CO2_year_03}。{year_02}年、{year_03}年同比分别为{year01_on_year02}、{year02_on_year03}。{year_03}年,同行业公司该指标区间为{industry_ indicators},该指标均值为{industry_ indicators_average},该指标中位数为{industry_ indicators_median},公司较之行业中位数{median_comparison}。"
|
||||
"段落": "单位二氧化碳排放——{date_range}年,公司每万元收入二氧化碳排放(单位:千克){co2_emissions}。{year_02}年、{year_03}年同比分别为{year01_on_year02}、{year02_on_year03}。{year_03}年,同行业公司该指标区间为{industry_indicators},该指标均值为{industry_indicators_average},该指标中位数为{industry_indicators_median},公司较之行业中位数{median_comparison}。"
|
||||
},
|
||||
{
|
||||
"段落": "能耗——能耗包括企业消耗的电量、汽柴油等。为表述方便,我们将不同能源消耗均转为以兆焦耳做单位。"
|
||||
},
|
||||
{
|
||||
"段落": "能耗——{date_range}年,公司总的能耗(单位:兆焦耳){energy_consumption_year_01}、{energy_consumption_year_02}、{energy_consumption_year_03}。"
|
||||
"段落": "能耗——{date_range}年,公司总的能耗(单位:兆焦耳){energy_consumption}。"
|
||||
},
|
||||
{
|
||||
"段落": "单位能耗——{date_range}年,公司每万元收入能耗(单位:兆焦耳){sec_year_01}、{sec_year_02}、{sec_year_03}。{year_02}年、{year_03}年同比增长分别为{}、{}。{year_03}年,同行业公司该指标区间为{industry_ indicators},该指标均值为{industry_ indicators_average},该指标中位数为{industry_ indicators_median},公司较之行业中位数{median_comparison}。"
|
||||
"段落": "单位能耗——{date_range}年,公司每万元收入能耗(单位:兆焦耳){energy_consumption}。{year_02}年、{year_03}年同比增长分别为{year01_on_year02}、{year02_on_year03}。{year_03}年,同行业公司该指标区间为{industry_indicators},该指标均值为{industry_indicators_average},该指标中位数为{industry_indicators_median},公司较之行业中位数{median_comparison}。"
|
||||
},
|
||||
{
|
||||
"段落": "能耗折算标准煤——{date_range}年,公司总的能耗折算为标准煤(单位:千克){standard_coal_year_01}、{standard_coal_year_02}、{standard_coal_year_03}。。"
|
||||
"段落": "能耗折算标准煤——{date_range}年,公司总的能耗折算为标准煤(单位:千克){energy_consumption}。"
|
||||
},
|
||||
{
|
||||
"段落": "单位能耗折算标准煤——{date_range}年,公司每万元收入能耗折算为标准煤(单位:千克){standard_coal_year_01}、{standard_coal_year_02}、{standard_coal_year_03}。。"
|
||||
"段落": "单位能耗折算标准煤——{date_range}年,公司每万元收入能耗折算为标准煤(单位:千克){energy_consumption}。"
|
||||
},
|
||||
{
|
||||
"段落": "耗水——{date_range}年,公司总耗水(单位:吨){consume water_year_01}、{consume water_year_02}、{consume water_year_03}。"
|
||||
"段落": "耗水——{date_range}年,公司总耗水(单位:吨){consume_water}。"
|
||||
},
|
||||
{
|
||||
"段落": "单位耗水——{date_range}年,公司每万元收入耗水(单位:吨){iwc_year_01}、{iwc_year_01}、{iwc_year_01}。{year_02}年、{year_03}年同比增长分别为{year01_on_year02}、{year02_on_year03}。{year_03}年,同行业公司该指标区间为{industry_ indicators},该指标均值为{industry_ indicators_average},该指标中位数为{industry_ indicators_median},公司较之行业中位数{median_comparison}。"
|
||||
"段落": "单位耗水——{date_range}年,公司每万元收入耗水(单位:吨){consume_water}。{year_02}年、{year_03}年同比增长分别为{year01_on_year02}、{year02_on_year03}。{year_03}年,同行业公司该指标区间为{industry_indicators},该指标均值为{industry_indicators_average},该指标中位数为{industry_indicators_median},公司较之行业中位数{median_comparison}。"
|
||||
},
|
||||
{
|
||||
"段落": "{describe}"
|
||||
|
@ -138,28 +137,28 @@
|
|||
"段落": "我们重点关注的社会因素包括雇佣、供应链、产品、社会贡献等。"
|
||||
},
|
||||
{
|
||||
"段落": "离职率——{date_range}年,公司离职比例为{turnover_ratio_year_01}、{turnover_ratio_year_02}、{turnover_ratio_year_03}。{year_03}年,同行业公司该指标区间为{industry_ indicators},该指标均值为{industry_ indicators_average},该指标中位数为{industry_ indicators_median},公司较之行业中位数{median_comparison}。"
|
||||
"段落": "离职率——{date_range}年,公司离职比例为{turnover_ratio}。{year_03}年,同行业公司该指标区间为{industry_indicators},该指标均值为{industry_indicators_average},该指标中位数为{industry_indicators_median},公司较之行业中位数{median_comparison}。"
|
||||
},
|
||||
{
|
||||
"段落": "人均薪酬水平——{date_range}年,公司人均薪酬水平为{salary_level_year_01}、{salary_level_year_02}、{salary_level_year_03}。{}年、{}年同比增长分别为{}、{}。{}年,同行业公司该指标区间为{},该指标均值为{},该指标中位数为{},公司较之行业中位数{}。"
|
||||
"段落": "人均薪酬水平——{date_range}年,公司人均薪酬水平为{salary_level}。{year_02}年、{year_03}年同比增长分别为{year01_on_year02}、{year02_on_year03}。{year_03}年,同行业公司该指标区间为{industry_indicators},该指标均值为{industry_indicators_average},该指标中位数为{industry_indicators_median},公司较之行业中位数{median_comparison}。"
|
||||
},
|
||||
{
|
||||
"段落": "劳动纠纷——公司在近三年出现了劳动纠纷,这影响了公司的社会得分。"
|
||||
"段落": "{describe}"
|
||||
},
|
||||
{
|
||||
"段落": "安全事故——公司在近三年出现了安全事故,这影响了公司的社会得分。"
|
||||
"段落": "{describe}"
|
||||
},
|
||||
{
|
||||
"段落": "提供培训——{date_range}年,公司培训次数为{}、{}、{}。{year_03}年,同行业公司该指标均值为{}。"
|
||||
"段落": "提供培训——{date_range}年,公司培训次数为{training_number}。{year_03}年,同行业公司该指标均值为{industry_indicators}。"
|
||||
},
|
||||
{
|
||||
"段落": "产品返修、退回、投诉——{date_range}年,公司返修、退回、投诉产品比例(%){rrc_year_01}、{rrc_year_02}、{rrc_year_03}。{year_03}年,同行业公司该指标均值为{industry_ indicators_average}。"
|
||||
"段落": "产品返修、退回、投诉——{date_range}年,公司返修、退回、投诉产品比例(%){salary_level}。{year_03}年,同行业公司该指标均值为{industry_indicators}。"
|
||||
},
|
||||
{
|
||||
"段落": "扶贫和捐赠——公司在近三年有过扶贫、捐赠行为,这提高了公司社会得分。"
|
||||
"段落": "{describe}"
|
||||
},
|
||||
{
|
||||
"段落": "法律诉讼(作为被告)、被执行人、失信人、行政处罚、税收违法、严重违法、经营异常——经查,公司存在1项或多项的法律诉讼(作为被告)、被执行人、失信人、行政处罚、税收违法、严重违法、经营异常情况,这影响了公司社会分数。"
|
||||
"段落": "{describe}"
|
||||
}
|
||||
]
|
||||
|
||||
|
@ -171,19 +170,19 @@
|
|||
"段落": "我们重点关注的公司治理因素包括企业性质、董监高、专业能力、信息披露等。"
|
||||
},
|
||||
{
|
||||
"段落": "董事会——公司未设立董事会,这影响了公司在治理方面的得分。"
|
||||
"段落": "{describe}"
|
||||
},
|
||||
{
|
||||
"段落": "监事会——公司未设立监事会,这影响了公司在治理方面的得分。"
|
||||
"段落": "{describe}"
|
||||
},
|
||||
{
|
||||
"段落": "董监高专业性——公司董监高平均拥有的行业经验年数{experience_year},同行业公司该指标均值为{industry_ indicators_average}。"
|
||||
"段落": "董监高专业性——公司董监高平均拥有的行业经验年数{experience_year},同行业公司该指标均值为{industry_indicators_average}。"
|
||||
},
|
||||
{
|
||||
"段落": "董监高稳定性——公司董监高近3年离职率较高,这影响了公司在治理方面的得分。"
|
||||
"段落": "{describe}"
|
||||
},
|
||||
{
|
||||
"段落": "董事会——公司董事会近三年年均开会次数{},同行业公司该指标均值为{industry_ indicators_average}。"
|
||||
"段落": "董事会——公司董事会近三年年均开会次数{board_meetings_number},同行业公司该指标均值为{industry_indicators_average}。"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
2
app.py
2
app.py
|
@ -3,6 +3,7 @@ from flask_cors import *
|
|||
|
||||
from Rating.routes import rating_route
|
||||
from Report.routes import report_route
|
||||
from Esg.routes import esg_route
|
||||
from Certificate.routes import certificate_route
|
||||
|
||||
app = Flask(__name__)
|
||||
|
@ -12,6 +13,7 @@ CORS(app, supports_credentials=True)
|
|||
|
||||
app.register_blueprint(report_route, url_prefix='/tfse_rating/report')
|
||||
app.register_blueprint(rating_route, url_prefix='/tfse_rating/rating')
|
||||
app.register_blueprint(esg_route, url_prefix='/esg_rating/rating')
|
||||
app.register_blueprint(certificate_route, url_prefix='/tfse_rating/certificate')
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue