tfse-etl-api-v0.2/rating/scripts/risk_count.py

591 lines
19 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import time
import datetime
from rating.db import conserve_data, find_tyc_db, UPSERT_SINGLE_DATA
def risk_data_etl(param1, param2, param3):
"""
根据企业名称,查询天眼查数据库
将数据按规定格式存储到股交企业数据库中(评价-风险数据)
Parameters:
param1: 企业名称
param2: 企业ID
param3: 评价ID
Returns:
res: 保存结果
"""
# 合规风险
compliance_risk = dict()
compliance_risk['失信人'] = dishonest_person(param1)
compliance_risk['严重违法'] = serious_illegal(param1)
compliance_risk['经营异常'] = abnormal_operation(param1)
compliance_risk['欠税公告'] = owing_taxes(param1)
compliance_risk['税收违法'] = tax_violation(param1)
compliance_risk['行政处罚'] = administrative_punish(param1)
compliance_risk['环保处罚'] = environmental_punish(param1)
# 经营风险
business_risk = dict()
business_risk['立案信息'] = filing_info(param1)
business_risk['开庭公告'] = opening_announcement(param1)
business_risk['被执行人'] = executed_person(param1)
business_risk['法院公告'] = court_announcement(param1)
business_risk['诉讼'] = lawsuit(param1)
business_risk['送达公告'] = service_notice(param1)
business_risk['股权出质'] = equity_pledge(param1)
business_risk['法人变更'] = change_record(param1, '法人变更')
business_risk['主要成员变更'] = change_record(param1, '主要成员变更')
# 关联风险
relation_risk = dict()
relation_risk['周边风险'] = dict()
relation_risk['周边风险']['高风险'] = periphery_risk(param1, '高风险')
relation_risk['周边风险']['警示'] = periphery_risk(param1, '警示')
# 合并数据
insert_data = dict()
insert_data['评价ID'] = param3
insert_data['企业ID'] = param2
insert_data['合规风险'] = compliance_risk
insert_data['经营风险'] = business_risk
insert_data['关联风险'] = relation_risk
UPSERT_SINGLE_DATA('综信评价数据', '风险数据', {"评价ID": param3}, insert_data)
def esg_risk_data_etl(param1, param2, param3):
"""
根据企业名称,查询天眼查数据库
将数据按规定格式存储到esg相关数据库中评价-ESG风险数据
Parameters:
param1: 企业名称
param2: 企业ID
param3: 评价ID
Returns:
res: 保存结果
"""
insert_data = dict()
insert_data['评价ID'] = param3
insert_data['企业ID'] = param2
insert_data['更新日期'] = time.strftime("%Y-%m-%d", time.localtime())
insert_data['法律诉讼'] = lawsuit(param1)
insert_data['被执行人'] = executed_person(param1)
insert_data['失信人'] = dishonest_person(param1)
insert_data['行政处罚'] = administrative_punish(param1)
insert_data['税收违法'] = tax_violation(param1)
insert_data['严重违法'] = serious_illegal(param1)
insert_data['经营异常'] = abnormal_operation(param1)
info = conserve_data(db='评价', col='ESG风险数据', cid=param2, insert_data=insert_data)
return info
def dishonest_person(param):
"""
失信人
根据企业名称,查询天眼查数据库,根据条件筛选数据
Parameters:
param: 企业名称
Returns:
res: 满足条件总数
"""
total = 0
res = find_tyc_db(db='司法风险', col='失信人', query={'企业名称': param})
if len(res):
data = res[0]
try:
quantity = len(data['失信人'])
if quantity:
for num in range(quantity):
try:
date = int(data['失信人'][num]['publishdate'][:4])
current_year = datetime.date.today().year
if current_year - date <= 3:
total += 1
except Exception:
total += 1
return total
except KeyError:
return total
else:
return total
def serious_illegal(param):
"""
严重违法
根据企业名称,查询天眼查数据库,根据条件筛选数据
Parameters:
param: 企业名称
Returns:
res: 满足条件总数
"""
total = 0
res = find_tyc_db(db='经营风险', col='严重违法', query={'企业名称': param})
if len(res):
data = res[0]
try:
quantity = len(data['严重违法']['result'])
if quantity:
for num in range(quantity):
try:
timestamp = data['严重违法']['result'][num]['putDate'] / 1000
put_date = time.localtime(timestamp)
date = int(time.strftime("%Y", put_date))
current_year = datetime.date.today().year
if current_year - date <= 3:
total += 1
except Exception:
total += 1
return total
except KeyError:
return total
else:
return total
def abnormal_operation(param):
"""
经营异常
根据企业名称,查询天眼查数据库,根据条件筛选数据
Parameters:
param: 企业名称
Returns:
res: 满足条件总数
"""
total = 0
res = find_tyc_db(db='经营风险', col='经营异常', query={'企业名称': param})
if len(res):
data = res[0]
try:
quantity = len(data['经营异常']['result'])
if quantity:
for num in range(quantity):
try:
date = int(data['经营异常']['result'][num]['putDate'][:4])
current_year = datetime.date.today().year
if current_year - date <= 3:
total += 1
except Exception:
total += 1
return total
except KeyError:
return total
else:
return total
def owing_taxes(param):
"""
欠税公告
根据企业名称,查询天眼查数据库,根据条件筛选数据
Parameters:
param: 企业名称
Returns:
res: 满足条件总数
"""
total = 0
res = find_tyc_db(db='经营风险', col='欠税公告', query={'企业名称': param})
if len(res):
data = res[0]
try:
quantity = len(data['欠税公告']['result'])
if quantity:
for num in range(quantity):
try:
date = int(data['经营异常']['result'][num]['publishDate'][:4])
current_year = datetime.date.today().year
if current_year - date <= 3:
total += 1
except Exception:
total += 1
return total
except KeyError:
return total
else:
return total
def tax_violation(param):
"""
税收违法
根据企业名称,查询天眼查数据库,根据条件筛选数据
Parameters:
param: 企业名称
Returns:
res: 满足条件总数
"""
total = 0
res = find_tyc_db(db='经营风险', col='税收违法', query={'企业名称': param})
if len(res):
data = res[0]
try:
quantity = len(data['税收违法']['result'])
if quantity:
for num in range(quantity):
try:
date = int(data['税收违法']['result'][num]['publish_time'][:4])
current_year = datetime.date.today().year
if current_year - date <= 3:
total += 1
except Exception:
total += 1
return total
except KeyError:
return total
else:
return total
def filing_info(param):
"""
立案信息
根据企业名称,查询天眼查数据库,根据条件筛选数据
Parameters:
param: 企业名称
Returns:
res: 满足条件总数
"""
total = 0
res = find_tyc_db(db='司法风险', col='立案信息', query={'企业名称': param})
if len(res):
data = res[0]
try:
quantity = len(data['立案信息'])
if quantity:
for num in range(quantity):
try:
date = int(data['立案信息'][num]['filingDate'][:4])
current_year = datetime.date.today().year
if current_year - date <= 3:
total += 1
except Exception:
total += 1
return total
except KeyError:
return total
else:
return total
def administrative_punish(param):
"""
行政处罚
根据企业名称,查询天眼查数据库,根据条件筛选数据
Parameters:
param: 企业名称
Returns:
res: 满足条件总数
"""
total = 0
res = find_tyc_db(db='经营风险', col='行政处罚', query={'企业名称': param})
if len(res):
data = res[0]
try:
quantity = len(data['行政处罚']['result'])
if quantity:
for num in range(quantity):
try:
date = int(data['行政处罚']['result'][num]['decisionDate'][:4])
current_year = datetime.date.today().year
if current_year - date <= 3:
total += 1
except Exception:
total += 1
return total
except KeyError:
return total
else:
return total
def environmental_punish(param):
"""
环保处罚
根据企业名称,查询天眼查数据库,根据条件筛选数据
Parameters:
param: 企业名称
Returns:
res: 满足条件总数
"""
total = 0
res = find_tyc_db(db='经营风险', col='环保处罚', query={'企业名称': param})
if len(res):
data = res[0]
try:
quantity = len(data['环保处罚']['result'])
if quantity:
for num in range(quantity):
try:
date = int(data['环保处罚']['result'][num]['publish_time'][:4])
current_year = datetime.date.today().year
if current_year - date <= 3:
total += 1
except Exception:
total += 1
return total
except KeyError:
return total
else:
return total
def opening_announcement(param):
"""
开庭公告
根据企业名称,查询天眼查数据库,根据条件筛选数据
Parameters:
param: 企业名称
Returns:
res: 满足条件总数
"""
total = 0
res = find_tyc_db(db='司法风险', col='开庭公告', query={'企业名称': param})
if len(res):
data = res[0]
try:
quantity = len(data['开庭公告'])
if quantity:
for num in range(quantity):
try:
date = int(data['开庭公告'][num]['startDate'][:4])
current_year = datetime.date.today().year
if current_year - date <= 3:
defendant = data['开庭公告'][num]['defendant']
if len(defendant) > 0:
for item in defendant:
if param == item['name']:
total += 1
except Exception:
total += 1
return total
except KeyError:
return total
else:
return total
def executed_person(param):
"""
被执行人
根据企业名称,查询天眼查数据库,根据条件筛选数据
Parameters:
param: 企业名称
Returns:
res: 满足条件总数
"""
total = 0
res = find_tyc_db(db='司法风险', col='被执行人', query={'企业名称': param})
if len(res):
data = res[0]
try:
quantity = len(data['被执行人'])
if quantity:
for num in range(quantity):
try:
date = int(data['被执行人'][num]['caseCreateTime'][:4])
current_year = datetime.date.today().year
if current_year - date <= 3:
total += 1
except Exception:
total += 1
return total
except KeyError:
return total
else:
return total
def court_announcement(param):
"""
法院公告
根据企业名称,查询天眼查数据库,根据条件筛选数据
Parameters:
param: 企业名称
Returns:
res: 满足条件总数
"""
total = 0
res = find_tyc_db(db='司法风险', col='法院公告', query={'企业名称': param})
if len(res):
data = res[0]
try:
quantity = len(data['法院公告'])
if quantity:
for num in range(quantity):
try:
date = int(data['法院公告'][num]['publishdate'][:4])
current_year = datetime.date.today().year
party = data['法院公告'][num]['party2']
if current_year - date <= 3 and param in party:
total += 1
except Exception:
total += 1
return total
except KeyError:
return total
else:
return total
def lawsuit(param):
"""
诉讼
根据企业名称,查询天眼查数据库,根据条件筛选数据
Parameters:
param: 企业名称
Returns:
res: 满足条件总数
"""
total = 0
res = find_tyc_db(db='司法风险', col='诉讼', query={'企业名称': param})
if len(res):
data = res[0]
try:
quantity = len(data['诉讼'])
if quantity:
for num in range(quantity):
try:
date = int(data['诉讼'][num]['submittime'][:4])
current_year = datetime.date.today().year
defendants = data['诉讼'][num]['defendants']
if current_year - date <= 3 and param in defendants:
total += 1
except Exception:
total += 1
return total
except KeyError:
return total
else:
return total
def service_notice(param):
"""
送达公告
根据企业名称,查询天眼查数据库,根据条件筛选数据
Parameters:
param: 企业名称
Returns:
res: 满足条件总数
"""
total = 0
res = find_tyc_db(db='司法风险', col='送达公告', query={'企业名称': param})
if len(res):
data = res[0]
try:
quantity = len(data['送达公告'])
if quantity:
for num in range(quantity):
try:
date = int(data['送达公告'][num]['startDate'][:4])
current_year = datetime.date.today().year
if current_year - date <= 3:
total += 1
except Exception:
total += 1
return total
except KeyError:
return total
else:
return total
def equity_pledge(param):
"""
股权出质
根据企业名称,查询天眼查数据库,根据条件筛选数据
Parameters:
param: 企业名称
Returns:
res: 满足条件总数
"""
total = 0
res = find_tyc_db(db='经营风险', col='股权出质', query={'企业名称': param})
if len(res):
data = res[0]
try:
quantity = len(data['股权出质']['result'])
if quantity:
for num in range(quantity):
try:
timestamp = data['股权出质']['result'][num]['putDate'] / 1000
put_date = time.localtime(timestamp)
date = int(time.strftime("%Y", put_date))
current_year = datetime.date.today().year
if current_year - date <= 3:
total += 1
except Exception:
total += 1
return total
except KeyError:
return total
else:
return total
def periphery_risk(param1, param2):
"""
股权出质
根据企业名称,查询天眼查数据库,根据条件筛选数据
Parameters:
param1: 企业名称
param2: 风险类型
Returns:
res: 满足条件总数
"""
total = 0
res = find_tyc_db(db='天眼风险', col='周边风险', query={'企业名称': param1})
if len(res):
data = res[0]
try:
quantity = len(data['周边风险']['list'])
if quantity:
for num in range(quantity):
try:
if data['周边风险']['list'][num]['tag'] == param2:
total += data['周边风险']['list'][num]['total']
except Exception:
total += 0
return total
except KeyError:
return total
else:
return total
def change_record(param1, param2):
"""
变更记录
根据企业名称,查询天眼查数据库,根据条件筛选数据
Parameters:
param1: 企业名称
param2: 变更事项
Returns:
res: 满足条件总数
"""
total = 0
res = find_tyc_db(db='公司背景', col='变更记录', query={'企业名称': param1})
if len(res):
data = res[0]
try:
quantity = len(data['变更记录']['result'])
if quantity:
for num in range(quantity):
try:
date = int(data['变更记录']['result'][num]['createTime'][:4])
current_year = datetime.date.today().year
if current_year - date <= 3:
if param2 == '法人变更' and '法定代表人' in data['变更记录']['result'][num]['changeItem']:
total += 1
elif param2 == '主要成员变更' and '董事(理事)、经理、监事' in data['变更记录']['result'][num]['changeItem']:
total += 1
except Exception:
total += 0
return total
except KeyError:
return total
else:
return total