Merge branch 'OG' into 'master'

update ESG打分模型

See merge request root/tfse_rating!34
This commit is contained in:
王思川 2022-02-23 11:14:10 +00:00
commit c69047938d
10 changed files with 635 additions and 37 deletions

View File

@ -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):
"""

View File

@ -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)

View File

@ -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

View File

@ -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__':

View File

@ -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文件

View File

@ -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():

View File

@ -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,

View File

@ -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

View File

@ -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
View File

@ -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')