diff --git a/Rating/RatingModel.py b/Rating/RatingModel.py new file mode 100644 index 0000000..71e873d --- /dev/null +++ b/Rating/RatingModel.py @@ -0,0 +1,95 @@ +from Rating.financial_scoring import financial_score +from Rating.opearting_element import * +from Rating.risk_scoring import * +from common.Indicators import * + + +class RatingModel: + """ + 打分模型 + """ + + def __init__(self, param): + # 所属行业 + self.industry = param['行业'] + # 评价年度 + self.period = param['评价年度'] + # 经营问卷 + self.business_questionnaire = param['经营问卷'] + # 财务填报 + self.financial_reporting = param['财务填报'] + # 风险数据 + self.risk_data = param['风险数据'] + + def business_elements(self): + """ + 经营要素 + """ + score = dict() + dm = self.business_questionnaire + score['环境'] = ea(dm['环境部分']) + score['社会责任'] = sre(dm['社会责任']) + score['公司治理'] = cge(dm['公司治理']) + score['合计'] = score['环境'] + score['社会责任'] + score['公司治理'] + return score + + def financial_elements(self): + """ + 财务要素 + """ + ele = dict() + ind = self.industry + dm = self.financial_reporting + bs = dm['资产负债表'] + ps = dm['利润表'] + sds = dm['补充数据表'] + + ele['净资产收益率'] = roe(ps[0]['净利润'], bs[0]['所有者权益合计'], bs[1]['所有者权益合计']) + ele['总资产报酬率'] = roa(ps[0]['利润总额'], sds[0]['计入财务费的利息支出'], bs[0]['资产总计'], bs[1]['资产总计']) + ele['总资产周转率'] = tat(ps[0]['营业收入'], bs[0]['资产总计'], bs[1]['资产总计']) + ele['应收账款周转率'] = acrt(ps[0]['营业收入'], bs[0]['应收账款']) + ele['存货周转率'] = ivtt(ps[0]['营业成本'], bs[0]['存货'], bs[1]['存货']) + ele['资产负债率'] = dbar(bs[0]['负债合计'], bs[0]['资产总计']) + ele['已获利息倍数'] = icm(ps[0]['利润总额'], sds[0]['计入财务费的利息支出'], sds[0]['资本化利息支出'], bs[0]['短期借款'], bs[0]['长期借款']) + ele['速动比率'] = qkr(bs[0]['流动资产合计'], bs[0]['存货'], bs[0]['流动负债合计']) + ele['营业增长率'] = bgr(ps[0]['营业收入'], ps[1]['营业收入']) + ele['总资产增长率'] = tagr(bs[0]['资产总计'], bs[1]['资产总计']) + ele['技术投入比率'] = tio(sds[0]['研发费用'], ps[0]['营业收入']) + + score = financial_score(ind, ele) + return score + + def risk_elements(self): + """ + 风险要素 + """ + score = dict() + finance_score = self.financial_elements()['合计'] + self.business_elements()['合计'] + dm = self.risk_data + score['合规风险'] = compliance_risk(finance_score, dm['合规风险']) + score['经营风险'] = management_risk(dm['经营风险']) + score['关联风险'] = peripheral_risk(dm['关联风险']) + score['合计'] = score['合规风险'] - score['经营风险']['合计'] - score['关联风险']['合计'] + return score + + def req_rating(self): + """ + 计算评级结果 + """ + result = dict() + result['评价年度'] = self.period + result['信用评分'] = self.risk_elements()['合计'] + result['信用等级'] = score_rank(result['信用评分']) + result['经营评分'] = self.business_elements() + result['财务评分'] = self.financial_elements() + result['风险评分'] = self.risk_elements() + + return result + + +if __name__ == '__main__': + import json + with open("../static/test_data/demo01.json", "r", encoding="utf-8") as f: + data = json.load(f) + res = RatingModel(data) + res.req_rating() \ No newline at end of file diff --git a/apps/Report/__init__.py b/Rating/__init__.py similarity index 100% rename from apps/Report/__init__.py rename to Rating/__init__.py diff --git a/Rating/db.py b/Rating/db.py new file mode 100644 index 0000000..6c0f75d --- /dev/null +++ b/Rating/db.py @@ -0,0 +1,27 @@ +""" +Mongo_tfse +""" + +import pymongo + +DB_HOST = '116.63.130.34' +DB_USER = 'root' +DB_PASS = 'sromitdTW569kC#M' +DB_PORT = 27018 + +client = pymongo.MongoClient('mongodb://{}:{}@{}:{}'.format(DB_USER, DB_PASS, DB_HOST, DB_PORT)) + + +def find_threshold(param): + """ + 根据行业查询阈值 + Parameters: + param: + Returns: + threshold + """ + collection = client['模型']['财务指标阈值'] + data = collection.find({"二级行业": param}, {'_id': False}) + return list(data) + + diff --git a/Rating/financial_scoring.py b/Rating/financial_scoring.py new file mode 100644 index 0000000..f43b681 --- /dev/null +++ b/Rating/financial_scoring.py @@ -0,0 +1,88 @@ +import re + +from Rating.db import find_threshold + + +def financial_score(param1, param2): + """ + 财务要素进行打分 + """ + score_weight = { + "净资产收益率": 8, + "总资产报酬率": 8, + "总资产周转率": 6, + "应收账款周转率": 6, + "存货周转率": 6, + "资产负债率": 8, + "已获利息倍数": 5, + "速动比率": 5, + "营业增长率": 8, + "总资产增长率": 5, + "技术投入比率": 5 + } + industry = re.findall(r'\w+', param1) + temp = find_threshold(industry[1]) + if len(temp) > 0: + score_temp = temp[0] + score_dict = dict() + for key, value in param2.items(): + temp_interval = list(map(float, score_temp[key])) + weight = score_weight[key] + score = 0 + if value > temp_interval[0]: + score = weight + elif value > temp_interval[1]: + standard_score = round(weight * 1, 2) + score = judge_positive_negative(value, standard_score, temp_interval[0], temp_interval[1]) + elif value > temp_interval[2]: + standard_score = round(weight * 0.8, 2) + score = judge_positive_negative(value, standard_score, temp_interval[1], temp_interval[2]) + elif value > temp_interval[3]: + standard_score = round(weight * 0.6, 2) + score = judge_positive_negative(value, standard_score, temp_interval[2], temp_interval[3]) + elif value > temp_interval[4]: + standard_score = round(weight * 0.4, 2) + score = judge_positive_negative(value, standard_score, temp_interval[3], temp_interval[4]) + score_dict[key] = round(score, 2) + score_dict['合计'] = sum(score_dict.values()) + + return score_dict + + +# 判断正反相关 +def judge_positive_negative(input_value, standard_score, max_value, min_value): + if max_value > min_value: + score = score_positive(input_value, standard_score, max_value, min_value) + else: + score = score_negative(input_value, standard_score, max_value, min_value) + return score + + +# 正相关打分 +def score_positive(input_value, standard_score, max_value, min_value): + """ + 正相关打分 + :param input_value: 输入值 + :param standard_score: 参考得分 + :param max_value: 最小参考值 + :param min_value: 最大参考值 + :return: + """ + if input_value <= min_value: + output_score = 0 + elif input_value >= max_value: + output_score = standard_score + else: + output_score = standard_score * (1 - (max_value - input_value) / (max_value - min_value)) + return output_score + + +# 反相关打分 +def score_negative(input_value, standard_score, max_value, min_value): + if input_value <= min_value: + output_score = standard_score + elif input_value >= max_value: + output_score = 0 + else: + output_score = standard_score * (1 - (input_value - min_value) / (max_value - min_value)) + return output_score diff --git a/Rating/opearting_element.py b/Rating/opearting_element.py new file mode 100644 index 0000000..f63c35d --- /dev/null +++ b/Rating/opearting_element.py @@ -0,0 +1,523 @@ +def calculation_01(param): + """ + A得1分,B得0.5分,C不得分 + """ + if param == 'A': + score = 1 + elif param == 'B': + score = 0.5 + else: + score = 0 + + return score + + +def calculation_02(param): + """ + C得1分,B得0.5分,A不得分 + """ + if param == 'C': + score = 1 + elif param == 'B': + score = 0.5 + else: + score = 0 + + return score + + +def calculation_03(param): + """ + D得1分,C得0.5分,B得0.25分,A不得分 + """ + if param == 'D': + score = 1 + elif param == 'C': + score = 0.5 + elif param == 'B': + score = 0.25 + else: + score = 0 + + return score + + +def calculation_04(param): + """ + 2019年、2020年平均单位产值电力消耗同比增长18%以上得1分, + 13.5%~18%得0.75分,8%~13.5%得0.5分,0%~8%得0.25分,0及以下不得分 + """ + param = float(param) + if param > 18: + score = 1 + elif param > 13.5: + score = 0.75 + elif param > 8: + score = 0.5 + elif param > 0: + score = 0.25 + else: + score = 0 + + return score + + +def calculation_05(param): + """ + 2019年、2020年平均每吨水产值同比增长15%以上得1分, + 10%~15%得0.75分,5%~10%得0. 5分,0%~5%得0.2 5分,0及以下不得分 + """ + param = float(param) + if param > 15: + score = 1 + elif param > 10: + score = 0.75 + elif param > 5: + score = 0.5 + elif param > 0: + score = 0.25 + else: + score = 0 + + return score + + +def calculation_06(param): + """ + 2019年、2020年二氧化碳排放同比降低25%以上得1分, + 18%~25%得0.75分,10%~18%得0.5分,0%~10%得0.25分,0%和同比增长不得分 + """ + param = float(param) + if param > 25: + score = 1 + elif param > 18: + score = 0.75 + elif param > 10: + score = 0.5 + elif param > 0: + score = 0.25 + else: + score = 0 + + return score + + +def calculation_07(param): + """ + A得1分,B得0.75分,C得0.5分,D不得分 + """ + if param == 'A': + score = 1 + elif param == 'B': + score = 0.75 + elif param == 'C': + score = 0.5 + else: + score = 0 + + return score + + +def calculation_08(param): + """ + A得1分,B不得分 + """ + if param == 'A': + score = 1 + else: + score = 0 + + return score + + +def calculation_09(param): + """ + A得1分,B得0.75分,C得0.5分,D不得分 + """ + if param == 'A': + score = 1 + elif param == 'B': + score = 0.75 + elif param == 'C': + score = 0.5 + else: + score = 0 + + return score + + +def calculation_10(param): + """ + B得1分,A不得分 + """ + if param == 'B': + score = 1 + else: + score = 0 + + return score + + +def calculation_11(param): + """ + E得1分,D得0.75分,C得0.5分,B得0.25分,A不得分 + """ + if param == 'E': + score = 1 + elif param == 'D': + score = 0.75 + elif param == 'C': + score = 0.5 + elif param == 'B': + score = 0.25 + else: + score = 0 + + return score + + +def calculation_12(param): + """ + 小于3%得1分,否则不得分 + """ + param = float(param) + if param < 3: + score = 1 + else: + score = 0 + + return score + + +def calculation_13(param): + """ + A得1分,B得0.5分,C不得分 + """ + if param == 'A': + score = 1 + elif param == 'B': + score = 0.5 + else: + score = 0 + + return score + + +def calculation_14(param): + """ + A得1分,B得0.5分,C不得分 + """ + if param == 'A': + score = 1 + elif param == 'B': + score = 0.5 + else: + score = 0 + + return score + + +def calculation_15(param): + """ + A得1分,B得0.75分,C得0.5分,D得0.25分,E不得分 + """ + if param == 'A': + score = 1 + elif param == 'B': + score = 0.75 + elif param == 'C': + score = 0.5 + elif param == 'D': + score = 0.25 + else: + score = 0 + + return score + + +def calculation_16(param): + """ + B得1分,A不得分 + """ + if param == 'B': + score = 1 + else: + score = 0 + + return score + + +def calculation_17(param): + """ + 捐赠金额大于1000万元,得1分,500~1000万元得0.75分, + 100~500万元得0.5分,0~100万元得0.25分,否则不得分 + """ + param = float(param) + if param > 1000: + score = 1 + elif param > 500: + score = 0.75 + elif param > 100: + score = 0.5 + elif param > 0: + score = 0.25 + else: + score = 0 + + return score + + +def calculation_18(param): + """ + B得1分,A不得分 + """ + if param == 'B': + score = 1 + else: + score = 0 + + return score + + +def calculation_19(param): + """ + A~E选择2项及以上得1分,选择1项得0.5分,选F项不得分,选G得1分 + """ + param_list = list(param) + + if 'F' in param_list: + score = 0 + elif 'G' in param_list: + score = 1 + elif len(param_list) >= 2: + score = 1 + else: + score = 0.5 + + return score + + +def calculation_20(param): + """ + A得0.25分,B得0.5分,C得0.75分,D得1分,E不得分 + """ + if param == 'A': + score = 0.25 + elif param == 'B': + score = 0.5 + elif param == 'C': + score = 0.75 + elif param == 'D': + score = 1 + else: + score = 0 + + return score + + +def calculation_21(param): + """ + A得1分,B得0.5分,C不得分 + """ + if param == 'A': + score = 1 + elif param == 'B': + score = 0.5 + else: + score = 0 + + return score + + +def calculation_22(param): + """ + A得1分,B得0.5分,C不得分 + """ + if param == 'A': + score = 1 + elif param == 'B': + score = 0.5 + else: + score = 0 + + return score + + +def calculation_23(param): + """ + A得1分,B得0.5分,C不得分 + """ + if param == 'A': + score = 1 + elif param == 'B': + score = 0.5 + else: + score = 0 + + return score + + +def calculation_24(param): + """ + A得1分,B得0.5分,C得0.25分,D不得分 + """ + if param == 'A': + score = 1 + elif param == 'B': + score = 0.5 + elif param == 'C': + score = 0.25 + else: + score = 0 + + return score + + +def calculation_25(param): + """ + A得1分,B得0.75分,C得0.5分,D得0.25分,E不得分 + """ + if param == 'A': + score = 1 + elif param == 'B': + score = 0.75 + elif param == 'C': + score = 0.5 + elif param == 'D': + score = 0.25 + else: + score = 0 + + return score + + +def calculation_26(param): + """ + A得0.5分,B得0.75分,C得1分,D不得分 + """ + if param == 'A': + score = 0.5 + elif param == 'B': + score = 0.75 + elif param == 'C': + score = 1 + else: + score = 0 + + return score + + +def calculation_27(param): + """ + 捐赠金额大于1000万元,得1分,500~1000万元得0.75分, + 100~500万元得0.5分,0~100万元得0.25分,否则不得分 + """ + param = float(param) + if param > 15: + score = 1 + elif param > 10: + score = 0.75 + elif param > 5: + score = 0.5 + elif param > 0: + score = 0.25 + else: + score = 0 + + return score + + +def calculation_28(param): + """ + B得1分,A不得分 + """ + if param == 'B': + score = 1 + else: + score = 0 + + return score + + +def calculation_29(param): + """ + B得1分,A不得分 + """ + if param == 'B': + score = 1 + else: + score = 0 + + return score + + +def calculation_30(param): + """ + B得1分,A不得分 + """ + if param == 'B': + score = 1 + else: + score = 0 + + return score + + +def ea(param): + """ + 环境评价得分 + """ + fraction = list() + fraction.append(calculation_01(param[0])) + fraction.append(calculation_02(param[1])) + fraction.append(calculation_03(param[2])) + fraction.append(calculation_04(param[3])) + fraction.append(calculation_05(param[4])) + fraction.append(calculation_06(param[5])) + fraction.append(calculation_07(param[6])) + fraction.append(calculation_08(param[7])) + fraction.append(calculation_09(param[8])) + fraction.append(calculation_10(param[9])) + + value = sum(fraction) + return value + + +def sre(param): + """ + 社会责任评价得分 + """ + fraction = list() + fraction.append(calculation_11(param[0])) + fraction.append(calculation_12(param[1])) + fraction.append(calculation_13(param[2])) + fraction.append(calculation_14(param[3])) + fraction.append(calculation_15(param[4])) + fraction.append(calculation_16(param[5])) + fraction.append(calculation_17(param[6])) + fraction.append(calculation_18(param[7])) + fraction.append(calculation_19(param[8])) + fraction.append(calculation_20(param[9])) + + value = sum(fraction) + return value + + +def cge(param): + """ + 公司治理评价得分 + """ + fraction = list() + fraction.append(calculation_21(param[0])) + fraction.append(calculation_22(param[1])) + fraction.append(calculation_23(param[2])) + fraction.append(calculation_24(param[3])) + fraction.append(calculation_25(param[4])) + fraction.append(calculation_26(param[5])) + fraction.append(calculation_27(param[6])) + fraction.append(calculation_28(param[7])) + fraction.append(calculation_29(param[8])) + fraction.append(calculation_30(param[9])) + + value = sum(fraction) + return value diff --git a/Rating/risk_scoring.py b/Rating/risk_scoring.py new file mode 100644 index 0000000..21cbd2a --- /dev/null +++ b/Rating/risk_scoring.py @@ -0,0 +1,85 @@ +def compliance_risk(param1, param2): + """ + 合规风险打分 + """ + score = param1 + if param2['失信人']: + if param1 < 57: + score = param1 + else: + score = 57 + elif param2['严重违法'] or param2['经营异常'] or param2['欠税公告'] or param2['税收违法']: + if param1 < 67: + score = param1 + else: + score = 67 + elif param2['立案信息'] or param2['行政处罚'] or param2['环保处罚']: + if param1 < 77: + score = param1 + else: + score = 77 + + return score + + +def management_risk(param): + """ + 经营风险打分 + """ + score = dict() + score['开庭公告'] = 10 if param['开庭公告'] >= 50 else round(param['开庭公告'] * 0.2, 2) + score['被执行人'] = 10 if param['被执行人'] >= 30 else round(param['被执行人'] * 0.33, 2) + score['法院公告'] = 5 if param['法院公告'] >= 50 else round(param['法院公告'] * 0.1, 2) + score['诉讼'] = 10 if param['诉讼'] >= 50 else round(param['诉讼'] * 0.2, 2) + score['送达公告'] = 5 if param['送达公告'] >= 50 else round(param['送达公告'] * 0.1, 2) + score['股权出质'] = 5 if param['股权出质'] >= 10 else round(param['股权出质'] * 0.5, 2) + score['合计'] = round(sum(score.values()), 2) + return score + + +def peripheral_risk(param): + """ + 关联风险 + """ + score = dict() + score['周边风险'] = dict() + score['变更记录'] = dict() + score['周边风险']['高风险'] = 5 if param['周边风险']['高风险'] >= 25 else round(param['周边风险']['高风险'] * 0.2, 2) + score['周边风险']['警示'] = 5 if param['周边风险']['警示'] >= 50 else round(param['周边风险']['警示'] * 0.1, 2) + score['周边风险']['合计'] = sum(score['周边风险'].values()) + score['变更记录']['法人变更'] = 1.5 if param['变更记录']['法人变更'] >= 10 else round(param['变更记录']['法人变更'] * 0.15, 2) + score['变更记录']['主要成员变更'] = 1.5 if param['变更记录']['主要成员变更'] >= 10 else round(param['变更记录']['主要成员变更'] * 0.15,2) + score['变更记录']['合计'] = sum(score['变更记录'].values()) + score['合计'] = score['周边风险']['合计'] + score['变更记录']['合计'] + + return score + + +# 级别 +def score_rank(args): + ref = { + "AAA": 90, + "AA+": 87, + "AA": 83, + "AA-": 80, + "A+": 77, + "A": 73, + "A-": 70, + "BBB+": 67, + "BBB": 63, + "BBB-": 60, + "BB+": 57, + "BB": 53, + "BB-": 50, + "B+": 47, + "B": 43, + "B-": 40, + "CCC": 30, + "CC": 20, + } + level = "C" + for k in ref.keys(): + if args >= ref[k]: + level = k + break + return level diff --git a/apps/Report/PdfReport.py b/Report/PdfReport.py similarity index 98% rename from apps/Report/PdfReport.py rename to Report/PdfReport.py index 1bb542b..2b4ae2a 100644 --- a/apps/Report/PdfReport.py +++ b/Report/PdfReport.py @@ -7,8 +7,7 @@ from reportlab.platypus.doctemplate import PageTemplate, BaseDocTemplate from reportlab.platypus.tableofcontents import TableOfContents from reportlab.pdfgen import canvas -from apps.Report.PdfStyle import * -from apps.Report.path_tool import gen_pdf_path, get_pic_path +from Report.path_tool import gen_pdf_path, get_pic_path # 页码起始设置 offset = 3 diff --git a/apps/Report/PdfStyle.py b/Report/PdfStyle.py similarity index 99% rename from apps/Report/PdfStyle.py rename to Report/PdfStyle.py index 9842df0..0965171 100644 --- a/apps/Report/PdfStyle.py +++ b/Report/PdfStyle.py @@ -9,7 +9,7 @@ from reportlab.lib import colors import pandas as pd import numpy as np -from apps.Report.path_tool import get_font_path +from Report.path_tool import get_font_path # rgb diff --git a/apps/Report/ReportModel.py b/Report/ReportModel.py similarity index 100% rename from apps/Report/ReportModel.py rename to Report/ReportModel.py diff --git a/apps/__init__.py b/Report/__init__.py similarity index 100% rename from apps/__init__.py rename to Report/__init__.py diff --git a/db/tfse.py b/Report/db.py similarity index 55% rename from db/tfse.py rename to Report/db.py index 318ec0c..941596b 100644 --- a/db/tfse.py +++ b/Report/db.py @@ -1,28 +1,19 @@ """ -天府股交项目数据库 +Mongo_tfse """ -from datetime import datetime import pymongo from bson import ObjectId from gridfs import GridFS -from apps.Report.path_tool import get_gen_report_path +from Report.path_tool import get_gen_report_path -client = pymongo.MongoClient('mongodb://{}:{}@{}:{}'.format('admin', 'fecr1105', '116.63.159.166', 27017)) +DB_HOST = '116.63.130.34' +DB_USER = 'root' +DB_PASS = 'sromitdTW569kC#M' +DB_PORT = 27018 - -def find_threshold(param): - """ - 根据行业查询阈值 - Parameters: - param: - Returns: - threshold - """ - collection = client['database']['collection'] - data = collection.find({}, {'_id': False}) - return list(data) +client = pymongo.MongoClient('mongodb://{}:{}@{}:{}'.format(DB_USER, DB_PASS, DB_HOST, DB_PORT)) def upload_pdf(name): @@ -30,7 +21,7 @@ def upload_pdf(name): 根据名称保存该企业报告 """ path = get_gen_report_path(name=name) - database = '报告数据库' + database = '企业' collection = 'PDF' fs = GridFS(client[database], collection) content = open(path, 'rb').read() @@ -43,7 +34,7 @@ def download_pdf(pdf_id): """ 根据pdf_id查询pdf文件 """ - database = '报告数据库' + database = '企业' collection = 'PDF' fs = GridFS(client[database], collection) data = fs.get(ObjectId(pdf_id)).read() @@ -53,4 +44,4 @@ def download_pdf(pdf_id): if __name__ == '__main__': pid = upload_pdf('远东资信评估有限公司') - file = download_pdf(pid) \ No newline at end of file + file = download_pdf(pid) diff --git a/apps/Report/path_tool.py b/Report/path_tool.py similarity index 100% rename from apps/Report/path_tool.py rename to Report/path_tool.py diff --git a/apps/RatingModel.py b/apps/RatingModel.py deleted file mode 100644 index 25f14aa..0000000 --- a/apps/RatingModel.py +++ /dev/null @@ -1,76 +0,0 @@ -import copy -import pandas as pd - -from lib.Indicators import * - - -class RatingModel: - """ - - """ - - def __init__(self, param): - # 所属行业 - self.industry = param['行业'] - # 评价期间 - self.period = param['评价期间'] - # 数据模板 data_model - self.data_model = param['数据模板'] - # 指标结果(财务) - self.indicators = self.financial_elements() - # 指标百分比 - self.percentages = '' - # 指标评分结果 - self.ratings = '' - - def business_elements(self): - """ - 经营要素 - """ - pass - - def financial_elements(self): - """ - 财务要素 - """ - ele = dict() - dm = self.data_model['财务数据'] - b, e = self.period['上期'], self.period['当期'] - ele['净资产收益率'] = roe(dm[e]['净利润'], dm[e]['所有者权益合计'], dm[b]['所有者权益合计']) - ele['总资产报酬率'] = roa(dm[e]['利润总额'], dm[e]['计入财务费的利息支出'], dm[e]['资产总计'], dm[b]['资产总计']) - ele['总资产周转率'] = tat(dm[e]['营业收入'], dm[e]['资产总计'], dm[b]['资产总计']) - ele['应收账款周速度'] = acrt(dm[e]['营业收入'], dm[e]['应收账款']) - ele['存货周转率'] = ivtt(dm[e]['营业成本'], dm[e]['存货'], dm[b]['存货']) - ele['资产负债率'] = dbar(dm[e]['负债合计'], dm[e]['资产总计']) - ele['已获利息倍数'] = icm(dm[e]['利润总额'], dm[e]['计入财务费的利息支出'], dm[e]['资本化利息支出'], dm[e]['短期借款'], dm[e]['长期借款']) - ele['速动比率'] = qkr(dm[e]['流动资产合计'], dm[e]['存货'], dm[e]['流动负债合计']) - ele['营业增长率'] = bgr(dm[e]['营业收入'], dm[b]['营业收入']) - ele['总资产增长率'] = tagr(dm[e]['资产总计'], dm[b]['资产总计']) - ele['技术投入比率'] = tio(dm[e]['研发费用'], dm[e]['营业收入']) - return ele - - def risk_elements(self): - """ - 风险要素 - """ - pass - - def req_percent(self): - """ - 计算指标百分比 - """ - self.business_elements() - self.risk_elements() - - def req_rating(self): - """ - 计算评级结果 - """ - pass - - -if __name__ == '__main__': - import json - with open("../static/test_data/demo01.json", "r", encoding="utf-8") as f: - data = json.load(f) - RatingModel(data) diff --git a/lib/Indicators.py b/common/Indicators.py similarity index 100% rename from lib/Indicators.py rename to common/Indicators.py diff --git a/db/__init__.py b/common/__init__.py similarity index 100% rename from db/__init__.py rename to common/__init__.py diff --git a/db/tyc.py b/db/tyc.py deleted file mode 100644 index e5963b1..0000000 --- a/db/tyc.py +++ /dev/null @@ -1,10 +0,0 @@ -""" -天眼查数据库 -""" -import pymongo - -client = pymongo.MongoClient('mongodb://{}:{}@{}:{}'.format('admin', 'fecr1105', '116.63.159.166', 27017)) - - -def find_data(**kwargs): - pass diff --git a/lib/__init__.py b/lib/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/routes.py b/routes.py index a12f90e..7c097c3 100644 --- a/routes.py +++ b/routes.py @@ -1,12 +1,12 @@ import json import os -from flask import Blueprint, request, make_response, send_file, Response +from flask import Blueprint, request, Response -from apps.Report.PdfReport import ReportGenerator -from apps.Report.ReportModel import ReportModel -from apps.Report.path_tool import get_gen_report_path -from db.tfse import upload_pdf, download_pdf +from Report.PdfReport import ReportGenerator +from Report.ReportModel import ReportModel +from Report.db import upload_pdf, download_pdf +from Report.path_tool import get_gen_report_path report_route = Blueprint('result', __name__) diff --git a/static/test_data/demo01.json b/static/test_data/demo01.json index 5f1178f..eee1fee 100644 --- a/static/test_data/demo01.json +++ b/static/test_data/demo01.json @@ -1,62 +1,130 @@ { - "行业": "制造业-电子工业", - "评价期间": { - "上期": "2020-12-31", - "当期": "2021-09-30" + "行业": "制造业-电子工业", + "评价年度": "2021年", + "经营问卷": { + "环境部分": [ + "A", + "C", + "C", + "15.9", + "7.3", + "14.3", + "A", + "A", + "B", + "B" + ], + "社会责任": [ + "E", + "1.25", + "C", + "B", + "B", + "A", + "612", + "B", + "G", + "B" + ], + "公司治理": [ + "B", + "A", + "A", + "B", + "C", + "B", + "12.7", + "B", + "B", + "B" + ] + }, + "财务填报": { + "资产负债表": [ + { + "报告期": "2021-12-31", + "应收账款": 14340032235.16, + "存货": 34961665056.94, + "流动资产合计": 149294839099.23, + "资产总计": 249151796229.37, + "短期借款": 8648141083.60, + "长期借款": 17159358715.27, + "流动负债合计": 114496862624.12, + "负债合计": 168969358306.53, + "所有者权益合计": 80182437922.84 + }, + { + "报告期": "2020-12-31", + "应收账款": 11293523722.88, + "存货": 13224640950.39, + "流动资产合计": 112864989321.68, + "资产总计": 156618426940.59, + "短期借款": 6335080182.17, + "长期借款": 6068163254.20, + "流动负债合计": 54977189803.22, + "负债合计": 87423710523.70, + "所有者权益合计": 69194716416.89 + } + ], + "利润表": [ + { + "报告期": "2021-12-31", + "营业收入": 73361545522.20, + "营业成本": 53179031934.71, + "利润总额": 10873688199.30, + "净利润": 9144981503.45 + }, + { + "报告期": "2020-12-31", + "营业收入": 50319487697.20, + "营业成本": 36349153592.22, + "利润总额": 6982553409.24, + "净利润": 6103918052.46 + } + ], + "补充数据表": [ + { + "报告期": "2021-12-31", + "研发费用": 4594923266.82, + "计入财务费的利息支出": 0, + "资本化利息支出": 0 + }, + { + "报告期": "2020-12-31", + "研发费用": 3569377694.03, + "计入财务费的利息支出": 0, + "资本化利息支出": 0 + } + ] + }, + "风险数据": { + "合规风险": { + "失信人": 0, + "严重违法": 1, + "经营异常": 0, + "欠税公告": 0, + "税收违法": 0, + "立案信息": 0, + "行政处罚": 0, + "环保处罚": 0 }, - "数据模板": { - "经营数据": { - - }, - "财务数据": { - "2020-12-31": { - "应收账款": 11293523722.88, - "存货": 13224640950.39, - "流动资产合计": 112864989321.68, - "资产总计": 156618426940.59, - "短期借款": 6335080182.17, - "长期借款": 6068163254.20, - "流动负债合计": 54977189803.22, - "负债合计": 87423710523.70, - "所有者权益合计": 69194716416.89, - "营业收入": 50319487697.20, - "营业成本": 36349153592.22, - "利润总额": 6982553409.24, - "净利润": 6103918052.46, - "研发费用": 3569377694.03, - "计入财务费的利息支出": 0, - "资本化利息支出": 0 - }, - "2021-09-30": { - "应收账款": 14340032235.16, - "存货": 34961665056.94, - "流动资产合计": 149294839099.23, - "资产总计": 249151796229.37, - "短期借款": 8648141083.60, - "长期借款": 17159358715.27, - "流动负债合计": 114496862624.12 , - "负债合计": 168969358306.53, - "所有者权益合计": 80182437922.84, - "营业收入": 73361545522.20, - "营业成本": 53179031934.71, - "利润总额": 10873688199.30, - "净利润": 9144981503.45, - "研发费用": 4594923266.82, - "计入财务费的利息支出": 0, - "资本化利息支出": 0 - } - }, - "风险数据": { - "司法风险": { - - }, - "经营风险": { - - }, - "周边风险": { - - } - } + "经营风险": { + "开庭公告": 14, + "被执行人": 0, + "法院公告": 5, + "诉讼": 9, + "送达公告": 3, + "股权出质": 1 + }, + "关联风险": { + "周边风险": { + "高风险": 2, + "警示": 1 + }, + "变更记录": { + "法人变更": 1, + "主要成员变更": 0 + } } - + } } \ No newline at end of file diff --git a/static/test_data/manufacturing_report.json b/static/test_data/manufacturing_report.json new file mode 100644 index 0000000..4ea3bea --- /dev/null +++ b/static/test_data/manufacturing_report.json @@ -0,0 +1,357 @@ +{ + "企业名称": "{company}", + "生成日期": "{rank_date}", + "报告内容": [ + { + "章节": "摘要", + "章节内容": [ + { + "小节": "评价结果", + "小节内容": [ + {"段落": "综合信用等级:{credit_date}"}, + {"段落": "评价时间:{rank_date}"} + ] + }, + { + "小节": "主要财务数据", + "小节内容": [ + {"表名": "表1 主要财务数据"}, + {"单位": "单位: 万元"}, + { + "表格": [ + ["", "{year_01}", "{year_02}", "{year_03}"], + ["资产总额", "", "", ""], + ["所有者权益", "", "", ""], + ["营业收入", "", "", ""], + ["净利润", "", "", ""], + ["货币资金", "", "", ""], + ["应收账款", "", "", ""], + ["存货", "", "", ""], + ["在建工程", "", "", ""], + ["固定资产", "", "", ""], + ["短期借款", "", "", ""], + ["一年内到期的非流动负债", "", "", ""], + ["长期借款", "", "", ""], + ["净资产收益率(%)", "", "", ""], + ["总资产报酬率(%)", "", "", ""], + ["总资产周转率", "", "", ""], + ["资产负债率", "", "", ""], + ["已获利息倍数", "", "", ""], + ["速动比率", "", "", ""], + ["营业增长率", "", "", ""], + ["总资产增长率", "", "", ""], + ["技术投入比率", "", "", ""] + ] + }, + {"注释": "数据来源:公司提供"} + ] + }, + { + "小节": "评价观点", + "小节内容": [ + {"段落": "{company}(以下简称“公司”)为{province}区域内{scale}制造业企业,在{advantage_area}方面具有竞争优势。"}, + {"段落": "{esg_desc}"}, + {"段落": "公司盈利能力{profitability},资产运营效率{operational_efficiency},债务风险{debt_risk},成长能力{growth_ability},整体信用风险{overall_credit_risk}。"}, + {"段落": "综上,远东资信评定{company}综合信用等级为{credit_rank}。"} + ] + }, + { + "小节": "关注", + "小节内容": [ + {"段落": "{attention_01}"}, + {"段落": "{attention_02}"}, + {"段落": "{attention_03}"} + ] + } + ] + }, + { + "章节": "一、公司概况", + "章节内容": [ + { + "小节": "公司背景", + "小节内容": [ + {"段落": "{company}创建于{found_date}。截至{year03}末,公司注册资本{register_assets}亿元,实收资本{paid_assets}亿元。{share_holders}持有公司{share_rates}的股份。公司实际控制人为{real_boss}。公司主要经营范围系{business_scope}。"}, + {"段落": "截至{year03}年末,公司总资产为{total_assets}万元,同比增长{ year_03_total_assets_variety }%,净资产为{net_assets }万元,同比增长{ year_03_ net_assets _variety }%;营业收入为{income}万元,同比增长{ year_03_ income _variety }%,实现净利润{profit}万元,同比增长{ year_03_profit_variety }%。"} + ] + }, + { + "小节": "股东实力", + "小节内容": [ + {"段落": "公司大股东{company}成立于{found_date},注册资本{registered capital}亿元。{share_holders}持有{share_rates}的股份。公司控股股东主要经营范围系{business_scope}。"}, + {"段落": "公司控股股东成立年限{establish_time},资本实力{capital_strength},{support_strength}"}, + {"段落": "公司大股东为自然人{name},旗下拥有{enterprise_amount}家资本实力较强的子公司,(持股比例超过50%的企业数量,且注册资本超过3000万元),可为公司经营提供一定支持。/旗下无资本实力较强的子公司,对公司支持力度偏弱。"} + ] + }, + { + "小节": "对外投资", + "小节内容": [ + {"段落": "截至{year03}末,公司对外投资{subsidiary_number}家子公司,投资金额{investment_amount}万元。其中,持股比例为50%以上的子公司为{subsidiary_number}家,投资金额合计为{investment_amount}万元。公司对外投资主要集中于{top_3_industry}行业,行业集中度{Industry_concentration}。公司对外投资地域主要集中于{top_3_region}省市,地域集中度{Regional_concentration}。"}, + {"表名": "表2 公司对外投资"}, + {"单位": "单位:-"}, + { + "表格": [ + ["被投资企业名称", "注册资本", "投资比例", "投资金额", "成立日期", "所属行业", "所属省份"], + ["", "", "", "", "", "", ""] + ] + }, + {"注释": "数据来源:公司提供"} + ] + }, + { + "小节": "进出口权", + "小节内容": [ + {"段落": "公司{import_export_power}进出口权,业务开展受全球经济波动、地缘政治风险影响较{influence}。"} + ] + }, + { + "小节": "知识产权", + "小节内容": [ + {"段落": "截至{date},公司共拥有{patent_number}个专利,其中,实用新型、外观设计、发明专利分别为{patent_number}个。近三年,公司获得{patent_number}个专利,其中,实用新型、外观设计、发明专利分别为{patent_number}个。"}, + {"段落": "截至{date},公司共拥有{copyrights_number}个软件著作权,其中,操作系统、行业应用软件、金融软件数量分别为{copyrights_number}个。近三年,公司获得{copyrights_number}个专利,其中,实用新型、外观设计、发明专利分别为{copyrights_number}个。"}, + {"段落": "公司专利和软件著作权数量{patented_software},技术研发能力较{RD_capability}。"} + ] + }, + { + "小节": "资质荣誉", + "小节内容": [ + {"段落": "公司为高新技术企业,被评为{Qualification}(AAA级中国科技创新优秀企业、高新技术企业、科技型中小企业、全国科技创新示范企业、AAA级中国自主创新产品),两化融合程度较高(两化融合管理体系评定证书),属于先进制造业。"}, + {"段落": "公司重视产品品质,拥有{ Qualification_number}(GMP认证,医疗器械质量管理体系认证,中国质量认证中心_CQC自愿性产品认证,gmp认证,gsp认证,GSP认证,安全生产标准化三级企业,安全生产标准化证书,质量合格、国家标准合格产品,质量管理体系认证证书,食品安全管理体系认证,食品安全管理体系认证证书,CE认证,日本PSE认证,CE认证证书)项产品安全认证,尤其拥有{ Qualification }(CE认证,日本PSE认证,CE认证证书)等国际通行产品质量认证,对于开拓海外市场有积极意义。公司品牌知名度较高,被评为{Qualification}(中国著名品牌、中国驰名品牌、中国行业最具影响力品牌),市场形象较好,有利于业务开展。"}, + {"段落": "经查询,公司无技术、产品品质或品牌等方面的荣誉资质。"}, + {"表名": "表1 公司资质和荣誉"}, + {"单位": "单位:-"}, + { + "表格": [ + ["资质或荣誉名称", "类型", "级别", "数量", "获得年度"], + ["", "", "", "", ""] + ] + }, + {"注释": "数据来源:公司提供"} + ] + }, + { + "小节": "融资信息", + "小节内容": [ + {"段落": "股权融资方面,从公开渠道获取的融资信息看,公司自成立以来,经过{number}轮风投融资,融资轮次包括{ Financing round },融资金额合计为{ Financing amount}万元,投资方包括{top_3_investor}等。"}, + {"段落": "债权融资方面,公司主要融资渠道为{fin_channel}(银行贷款、供应链融资,如果“已使用首先额度”大于“应付账款+应付票据+预收账款”,显示银行贷款,反之,为供应链融资)。"}, + {"段落": "截至{year_04}末,公司获得了{bank_num}家银行授信,授信总额度为{credit_amount}万元,已使用授信额度为{used_credit_amount}万元。"}, + {"段落": "供应链融资方面,公司商业信用{Commercial_credit_level},对供应商和客户议价能力{Bargaining_power},{year03}年公司供应链融资规模{Financing_scale},为{Financing_amount}万元。"}, + {"表名": "表3 公司股权融资信息"}, + {"单位": "单位:万元"}, + { + "表格": [ + ["日期", "融资方式", "融资金额", "融资轮次", "投资方"], + ["", "", "", "", ""] + ] + }, + {"注释": "资料来源:公司提供,远东资信整理"}, + {"表名": "表4 公司债券融资信息"}, + {"单位": "单位:万元"}, + { + "表格": [ + ["日期", "贷款渠道", "贷款金额", "贷款方", "授信额度", "已用额度"], + ["", "", "", "", "", ""] + ] + }, + {"注释": "资料来源:公司提供,远东资信整理"}, + {"表名": "表5 公司供应链融资信息"}, + {"单位": "单位:万元"}, + { + "表格": [ + ["", "year_01", "year_02", "year_03"], + ["应付账款", "", "", ""], + ["应付票据", "", "", ""], + ["预收账款", "", "", ""], + ["合计", "", "", ""] + ] + }, + {"注释": "资料来源:公司提供,远东资信整理"} + ] + } + ] + }, + { + "章节": "二、ESG评价", + "章节内容": [ + { + "小节": "环境治理", + "小节内容": [ + {"段落": "公司为环境友好型企业(如环境部分得分超过50%或有以下资质)。/公司绿色发展理念相对薄弱(如环境部分得分不足50%)。公司较为重视环境保护,实行绿色低碳发展理念,包括制定绿色发展战略、完善绿色组织架构、保障产品安全、合理安排节能减排和污染处理措施、提高资源利用效率、制定污染缓解措施等应对环境事件(如环境部分得分超过50%或有以下资质)。/公司绿色发展战略和绿色组织架构亦有待完善,生产过程对环境造成一定污染(有资质中的排污许可证、环保部_限制类固体废物进口、排污登记信息、环保部_国家重点监控企业名单、环保部_自动类固体废物进口),尚未有污染缓解措施或污染缓解措施效果欠佳,环境问题或对公司正常经营造成负面影响。"}, + {"段落": "截至{year03}末,公司获得{ Qualification_number}项环保领域相关认证资质。(公司有以下资质:低碳产品认证、中国节能环保产品、低碳产品认证-铝合金建筑型材、FSC认证、环保产品认证、环境标志产品、环境管理体系认证、绿色产品(认证活动一)、绿色食品生产资料--食品添加剂类、节能产品认证(不含建筑节能)、低碳产品认证-通用硅酸盐水泥、电子信息产品污染控制自愿性认证、中国环保产品认证证书、中国环保标志产品认证证书、商品和服务在生命周期内的温室气体排放评价规范认证、中国绿色环保企业、绿色食品生产资料--饲料及饲料添加剂类、中国优秀节能减排绿色环保企业、工业固废处置及资源化工程专业甲级证书、有机产品认证、绿色产品(认证活动二)、环保部_实施清洁生产审核并通过评估验收、环境管理体系认证证书、温室气体核查声明、环保部_环境保护科学技术奖获奖项目名单、环保部_环境标志、绿色食品生产资料--肥料类、低碳产品认证-中小型三相异步电动机、节水产品认证、中国环境标志产品认证证书、HSE管理体系评价证书)。/公司未获得环保领域相关认证资质。"}, + {"段落": "{year03}年公司绿色业务收入占营业收入的比重较大/小/无绿色业务收入(占比50%以上为较大,不足50%为较小),为{proportion_of _income}%。"}, + ] + }, + { + "小节": "社会责任", + "小节内容": [ + {"段落": "公司积极履行社会责任(如社会责任部分得分超过50%或拥有以下资质),拥有{ Qualification_number}项社会责任领域相关认证资质,包括{ Qualification }。(企业社会责任管理体系认证、社会责任管理、社会责任管理体系认证、社会责任管理体系、优秀供应商、供应链安全管理体系认证证书、HACCP认证证书、BSCI认证)。公司以公平、公正、自愿、市场化的原则开展业务,承担对于客户、员工、社区、供应链相关方的责任,企业形象较好,无社会负面事件,为公司业务拓展奠定较好基础。/公司社会责任履行能力有待进一步提升(如社会责任部分得分不足50%)。公司客户满意率偏低,供应链管理能力较弱,对员工提供的福利未达到行业平均水平,对区域经济发展贡献力度不大,有一定社会负面事件。"} + ] + }, + { + "小节": "公司治理", + "小节内容": [ + {"段落": "公司治理水平较高。(如治理部分得分超过50%)公司股权清晰,组织结构较完善,可满足业务发展需要;公司各类信息披露透明、公开、及时,信息披露质量较高。公司重视风险管理,包括信用风险在内的各类风险水平较低,未发生重大风险事件(风险信息中没有高风险信息)。/公司规模较小,组织架构尚不完善,股权结构有待进一步明晰,信息披露透明度和质量欠佳,风险控制能力有待加强。整体来看,公司治理水平有待进一步提升。(如治理部分得分不足50%)"} + ] + } + ] + }, + { + "章节": "三、财务分析", + "章节内容": [ + { + "小节": "盈利能力", + "小节内容": [ + {"段落": "制造业细分行业较多,通常来说,包括创新型企业、智能制造企业在内的先进制造业企业产品技术含量较高,处于成长期或成熟期的先进制造业企业盈利能力较好;处于初创期的先进制造业企业正处于拓展市场阶段,收入规模较小,而研发支出和固定资产投资支出规模较大,导致盈利能力偏弱,多处于亏损状态。传统制造业多为低端制造业,或存在产能过剩,行业竞争激烈,处于微笑曲线下端,大型企业尚可通过规模效应获得一定利润,中小企业盈利能力较弱。"}, + {"段落": "公司收入规模{income_scale},产品技术含量{technology level},成本控制能力{Cost control capability},2020年公司净资产收益率、总资产报酬率分别为{return_on_net_assets _analysis}%和{return_on_total_assets_analysis}%,盈利能力{profitability_analysis})。"} + ] + }, + { + "小节": "资产质量", + "小节内容": [ + {"段落": "先进制造业企业受到国家政策支持,成长期和成熟期企业正在快速获得市场份额或已占有较大市场份额,对上下游议价能力强,融资渠道多样化,抗风险能力强,整体资产质量较好。处于初创期的先进制造业企业仍处于设计研发阶段,产品尚未市场化,无经营收入或收入规模很小,有较大风险,资产价值尚未显现。"}, + {"段落": "受益于供给侧改革,部分传统制造业已从行业洗牌和行业出清阶段恢复,实现供需紧平衡,大型龙头企业经营建立良性循环,在规模效应下,资产利用效率较高,资产质量较好。但部分供大于求的传统制造业、部分民营中小企业、低端制造业企业经营状况欠佳,应收账款、存货、固定资产投资对企业资金占用较大,加之融资环境收紧,资产质量下降,信用风险上升。"}, + {"段落": "2020年公司应收账款周转率、存货周转率、总资产周转率分别为{account_turnover_analysis}次、{inventory_turnover_analysis}次、{total_assets_turnover_analysis}次,公司资产利用效率处于行业{Industry level}水平,资产质量{asset_quality}。"} + ] + }, + { + "小节": "债务风险", + "小节内容": [ + {"段落": "企业高债务风险的原因通常包括宏观因素和微观因素。宏观因素方面,制造业下游行业众多,经济周期性波动通过产业链传导至制造业,产业政策、监管政策、信贷政策变化均会导致制造业周期性波动,其中,传统制造业企业周期性波动较强,先进制造业通过较快的成长性、更高的行业准入门槛平滑周期性波动影响。微观层面,制造业企业的债务规模、经营状况、融资能力、资产流动性均影响企业现金流和债务偿还能力。通常来说,高债务风险是多种原因共同作用的结果,杠杆水平越高、盈利能力越差、融资渠道较少、资产流动性较弱的制造业企业债务风险较高;债务规模适度、盈利能力较好、融资渠道多元化和财务弹性较高的企业违约风险较小。"}, + {"段落": "公司债务风险{debt_risk}。近三年,公司资产负债率处于{min_asset_liability_ratio}~{max_asset_liability_ratio}的区间,财务结构{fin_structure_analysis}(稳健、较稳健、稳健性有待进一步加强、欠稳健,对应小于40%,40%~55%,55%~70%,70%以上);经营性现金流对利息的保障程度{operating_cash_flow_to_debt},已获利息倍数为{interest_cover}倍;资产流动性{Assets_liquidity}(好、较好、一般、较差、差),速动比率为{ quick_ratio}。"} + ] + }, + { + "小节": "成长能力", + "小节内容": [ + {"段落": "先进制造业多具有经济带动性、创新驱动性、多领域融合、质量品牌和绿色集约特征,市场认可度高,处于初创期和成长期的先进制造业企业市场份额拓展较快,成长速度很快;处于成熟期的先进制造业企业已占有较大市场份额,且通过产品多元化或地域多元化等方式拓展市场,成长性受到公司战略和决策能力、研发能力、研发速度、技术先进性、潜在市场空间、资金等因素影响。传统制造业多处于成熟期或衰退期,企业成长能力较弱,各项资源向行业内龙头企业聚集,中小企业发展空间较小。"}, + {"段落": "公司{degree_of_imprtance},2020年公司技术投入比为{technology_input_ratio}。技术创新对公司业务拓展的贡献{contribution},2020年公司营业收入增长率、总资产增长率分别为{growth rate of operating revenue}和{growth rate of total assets},整体成长能力{growth_ability})。"} + ] + } + ] + }, + { + "章节": "四、企业风险", + "章节内容": [ + { + "小节": "合规风险", + "小节内容": [ + {"段落": "经过查询与整理,公司有/无失信人信息、有/无严重违法、有/无经营异常、有/无欠税公告、有/无税收违法、有/无立案信息、有/无行政处罚、有/无环保处罚,整体来看,公司的合规风险水平{risk_level}(高/低,如果3年内上述方面内容有相关信息显示“高”,如果3年内上述方面内容无相关信息显示“低”)。"} + ] + }, + { + "小节": "经营风险", + "小节内容": [ + {"段落": "经过查询与整理,收集到企业开庭公告、被执行人、法院公告、诉讼、送达公告、股权出质等经营相关风险合计{risk_num}条,公司的经营风险水平{risk_level}。"} + ] + }, + { + "小节": "关联风险", + "小节内容": [ + {"段落": "经过查询与整理,收集到企业关联方风险合计{risk_num}条,包括/不包括失信被执行人、司法拍卖、限制消费令(公司)、强制清算、涉金融黑名单、破产案件等重大事件,关联企业相关风险或通过经营链条、资金链条、担保链条等方式传导至公司(包括或数量超过50条)/不会对公司经营产生实质性影响(不包括且数量低于50条),公司的关联风险水平{risk_level}。"}, + {"段落": "注:重大事件范围为1-严重违法,3-失信被执行人(公司),7-经营异常,11-欠税公告,24-环保处罚,27-立案信息,28-税收违法,29-司法拍卖,32-限制消费令(公司),45-强制清算,62-涉金融黑名单,38-破产案件,42-违规处理,上述事件需在近三年内发生,如果出现53-严重违法(已移出)或55-经营异常(已移出),则不将相关事件计算在内。"} + ] + } + ] + }, + { + "章节": "五、评级结论", + "章节内容": [ + {"段落": "公司为环境友好型企业(如环境部分得分超过50%)/公司绿色发展理念相对薄弱(如环境部分得分不足50%),积极履行社会责任(如社会责任部分得分超过50%)/社会责任履行能力有待进一步提升(如社会责任部分得分不足50%),内部治理水平较高(如治理部分得分超过50%)/治理水平有待进一步提升(如治理部分得分不足50%),企业整体素质{enterprise quality}。"}, + {"段落": "公司盈利能力{Profitability},资产质量{asset_quality},债务风险{debt_risk},成长空间{growth ability},企业风险{enterprise_risk}。"}, + {"段落": "综合分析,远东资信评定{company}综合信用等级为{credit_rank}。"} + ] + }, + { + "章节": "附录", + "章节内容": [ + { + "小节": "附录1 主要数据及指标", + "小节内容": [ + {"单位": "单位:万元、%、倍、次"}, + {"表格": [ + ["科目", "{year_01}", "{year_02}", "{year_03}"], + ["主要数据", "", "", "", ""], + ["资产总额", "", "", "", ""], + ["货币资金", "", "", "", ""], + ["应收账款", "", "", "", ""], + ["存货", "", "", "", ""], + ["固定资产", "", "", "", ""], + ["其他非流动资产", "", "", "", ""], + ["负债总额", "", "", "", ""], + ["短期借款", "", "", "", ""], + ["应付账款", "", "", "", ""], + ["一年内到期的非流动负债", "", "", "", ""], + ["长期借款", "", "", "", ""], + ["应付债券", "", "", "", ""], + ["所有者权益", "", "", "", ""], + ["实收资本", "", "", "", ""], + ["资本公积", "", "", "", ""], + ["未分配利润", "", "", "", ""], + ["营业收入", "", "", "", ""], + ["销售费用", "", "", "", ""], + ["管理费用", "", "", "", ""], + ["研发费用", "", "", "", ""], + ["利息收入", "", "", "", ""], + ["业务及管理费", "", "", "", ""], + ["净利润", "", "", "", ""], + ["净资产收益率", "", "", "", ""], + ["总资产报酬率", "", "", "", ""], + ["应收账款周转率", "", "", "", ""], + ["存货周转率", "", "", "", ""], + ["总资产周转率", "", "", "", ""], + ["资产负债率", "", "", "", ""], + ["已获利息倍数", "", "", "", ""], + ["速动比率", "", "", "", ""], + ["技术投入比", "", "", "", ""], + ["营业收入增长率", "", "", "", ""] + ]}, + {"注释": "数据来源:数据由公司提供,指标由远东资信的计算所得"} + ] + }, + { + "小节": "附录2 有关指标的计算公式", + "小节内容": [ + { + "表格": [ + ["科目", "计算公式"], + ["净资产收益率", "税后利润 / ( (期初净资产余额 + 期末净资产余额) /2)"], + ["总资产报酬率", "( 利润总额 + 利息支出 )/(( 期初总资产余额 + 期末总资产余额 ) / 2 )"], + ["应收帐款周转速度", "营业总收入 / ( (期初应收帐款余额 + 期末应收帐款余额) / 2 + (期初应收票据余额 + 期末应收票余额) /2 )"], + ["存货周转速度", "营业总收入/((期初存货余额 + 期末存货余额) / 2)"], + ["总资产周转速度", "营业总收入/( (期初总资产余额 + 期末总资产余额) / 2 )"], + ["资产负债率", "负债总额/资产总额"], + ["已获利息倍数", "税前利润+列入财务费用的利息支出)/(列入财务费用的利息支出+资本化利息支出)"], + ["速动比率", "(流动资产-存货)/流动负债"], + ["技术投入比", "本年研发经费投入/营业总收入"], + ["营业收入增长率", "(本年营业总收入-上年营业总收入)/上年营业总收入"], + ["总资产增长率", "(期末资产总额-期初资产总额)/期初资产总额"] + ] + } + ] + }, + { + "小节": "附录3 数字化综合信用等级评价级别释义", + "小节内容": [ + {"段落": "远东资信数字化综合信用等级评价是对电子行业公司在未来时期是否具有足够的信用管理能力以及其所采取的风险控制措施是否足以支持其规避信用风险并且保持良好的偿债能力的综合评价。"}, + {"段落": "远东资信将数字化综合信用等级划分成三等九级,分别用AAA、AA、A、BBB、BB、B、CCC、CC和C表示,其中,除AAA级,CCC级(含)以下等级外,每一个信用等级可用“+”、“-”符号进行微调,表示略高或略低于本等级。各主体等级含义如下:"}, + { + "表格": [ + ["等级", "含义"], + ["AAA", "信用管理能力极强,偿还债务能力极强,基本不受不利经济环境影响,违约风险极低。"], + ["AA", "信用管理能力很强,偿还债务能力很强,受不利经济环境的影响不大,违约风险很低。"], + ["A", "信用管理能力较强,偿还债务能力较强,较易受不利经济环境影响,违约风险较低。"], + ["BBB", "信用管理能力一般,偿还债务能力一般,不利经济环境影响较大,违约风险一般。"], + ["BB", "信用管理能力较弱,偿还债务能力较弱,不利经济环境影响很大,违约风险较高。"], + ["B", "信用管理能力以及偿还债务能力较大的依赖于良好的经济环境影响,违约风险很高。"], + ["CCC", "信用管理能力以及偿还债务能力较大的依赖于良好的经济环境影响,违约风险极高。"], + ["CC", "在破产或重组时能获得的保护较小,基本丧失信用管理能力以及偿还债务能力"], + ["C", "没有偿还债务能力"] + ] + } + ] + } + ] + } + ] + +} \ No newline at end of file