6662b486 by 周伟奇

Merge branch 'feature/qrs' into feature/uat-tmp

2 parents 02dfaa1f ec60949a
......@@ -1042,6 +1042,10 @@ JYPZ_FIELD_ORDER = (("type", "标题"),
CONTRACT_CN_NAME = '合同'
CONTRACT_CLASSIFY = 41
# 合同-送达地址确认书
CONTRACT_QRS_CN_NAME = '送达地址确认书'
CONTRACT_QRS_CLASSIFY = 49
# 合同编号: 每页
HIL_CONTRACT_1_CN_NAME = '售后回租合同'
......@@ -1053,13 +1057,14 @@ HIL_CONTRACT_2_CLASSIFY = 44
HIL_CONTRACT_3_CN_NAME = '车辆处置协议'
HIL_CONTRACT_3_CLASSIFY = 45
CONTRACT_SET = {CONTRACT_CLASSIFY, HIL_CONTRACT_1_CLASSIFY, HIL_CONTRACT_2_CLASSIFY, HIL_CONTRACT_3_CLASSIFY}
CONTRACT_SET = {CONTRACT_QRS_CLASSIFY, CONTRACT_CLASSIFY, HIL_CONTRACT_1_CLASSIFY, HIL_CONTRACT_2_CLASSIFY, HIL_CONTRACT_3_CLASSIFY}
CONTRACT_MAP = {
HIL_CONTRACT_1_CLASSIFY: HIL_CONTRACT_1_CN_NAME,
HIL_CONTRACT_2_CLASSIFY: HIL_CONTRACT_2_CN_NAME,
HIL_CONTRACT_3_CLASSIFY: HIL_CONTRACT_3_CN_NAME,
CONTRACT_CLASSIFY: CONTRACT_CN_NAME,
CONTRACT_QRS_CLASSIFY: CONTRACT_QRS_CN_NAME,
}
# 保单
......@@ -1203,6 +1208,7 @@ DDA_OCR_FIELD = 'bs_ocr'
HMH_OCR_FIELD = 'hmh_ocr'
JYPZ_OCR_FIELD = 'jypz_ocr'
HT_FIELD = 'ht_ocr'
QRS_FIELD = 'qrs_ocr'
BD_FIELD = 'bd_ocr'
BS_FIELD = 'bss_ocr'
HIL_CONTRACT_1_FIELD = 'hil_contract_1_ocr'
......@@ -1226,6 +1232,7 @@ RESULT_MAPPING = {
HMH_CLASSIFY: HMH_OCR_FIELD,
JYPZ_CLASSIFY: JYPZ_OCR_FIELD,
CONTRACT_CLASSIFY: HT_FIELD,
CONTRACT_QRS_CLASSIFY: QRS_FIELD,
INSURANCE_CLASSIFY: BD_FIELD,
BS_CLASSIFY: BS_FIELD,
HIL_CONTRACT_1_CLASSIFY: HIL_CONTRACT_1_FIELD,
......@@ -1251,6 +1258,7 @@ COMPARE_FIELDS = (
HMH_OCR_FIELD,
JYPZ_OCR_FIELD,
HT_FIELD,
QRS_FIELD,
BD_FIELD,
BS_FIELD,
HIL_CONTRACT_1_FIELD,
......@@ -1264,6 +1272,7 @@ PRE_COMPARE_FIELDS = (
BC_OCR_FIELD,
HMH_OCR_FIELD,
HT_FIELD,
QRS_FIELD,
BD_FIELD,
HIL_CONTRACT_1_FIELD,
HIL_CONTRACT_2_FIELD,
......@@ -1479,6 +1488,10 @@ AFC_CON_FIELD_ORDER_LTGT = (
('标准利率', '标准利率'),
)
SE_AFC_CON_QRS_MAP = {
'合同编号': (1, '合同编号'),
}
SE_AFC_CON_MAP = {
'合同编号-每页': (None, None, '合同编号', None),
'所购车辆价格-小写-重要条款': (1, 1, '所购车辆价格', None),
......@@ -1594,6 +1607,7 @@ SE_HIL_CON_MAP = {
HIL_CONTRACT_3_CLASSIFY: SE_HIL_CON_3_MAP,
}
SE_AFC_CON_QRS_FIELD = ['合同编号']
SE_AFC_CON_FIELD = ['合同编号-每页', '所购车辆价格-小写-重要条款', '车架号-重要条款', '贷款本金金额-重要条款', '贷款期限-重要条款',
'车辆贷款本金金额-重要条款', '附加产品融资贷款本金总额-重要条款', '所购车辆价格', '车架号', '经销商',
'贷款本金金额', '车辆贷款本金金额', '附加产品融资贷款本金总额', '贷款期限', '还款账号', '户名', '开户行',
......@@ -1689,6 +1703,7 @@ DDA_EN = 'DDA'
HMH_EN = 'Mortgage Waiver Letter'
JYPZ_EN = 'Used Car Document'
AFC_CONTRACT_EN = 'AFC Contract'
AFC_CONTRACT_QRS_EN = '送达地址确认书'
BD_EN = 'Insurance'
BS_EN = 'Bank Statement'
HIL_CONTRACT_1_EN = '售后回租合同'
......@@ -1978,6 +1993,10 @@ HIL_CONTRACT_3_COMPARE_LOGIC = {
'承租人签字': ('承租人签字', 'se_contain_compare', {}, '车辆处置协议承租人签字与系统承租人姓名不一致'),
}
HT_QRS_COMPARE_LOGIC = {
'合同编号': ('合同编号', 'se_qrs_compare', {}, '请确认是否提供合格的送达地址确认书'),
}
HT_COMPARE_LOGIC = {
'合同编号-每页': ('合同编号-每页', 'se_list_compare', {}, '合同编号与系统不一致'),
# '合同编号-每页(no-asp)': ('合同编号-每页', 'se_list_compare', {'pop_last': True}, '合同编号与系统不一致'),
......@@ -2054,6 +2073,7 @@ SE_COMPARE_FIELD = {
HMH_EN: (HMH_OCR_FIELD, HMH_COMPARE_LOGIC, False),
JYPZ_EN: (JYPZ_OCR_FIELD, JYPZ_COMPARE_LOGIC, False),
AFC_CONTRACT_EN: (HT_FIELD, HT_COMPARE_LOGIC, False),
AFC_CONTRACT_QRS_EN: (QRS_FIELD, HT_QRS_COMPARE_LOGIC, False),
BD_EN: (BD_FIELD, BD_COMPARE_LOGIC, False),
BS_EN: (BS_FIELD, BS_COMPARE_LOGIC, False),
HIL_CONTRACT_1_EN: (HIL_CONTRACT_1_FIELD, HIL_CONTRACT_1_COMPARE_LOGIC, False),
......@@ -2063,7 +2083,7 @@ SE_COMPARE_FIELD = {
SE_COMPARE_FIELD_AUTO = {
BS_EN: (BS_FIELD, BS_COMPARE_LOGIC_AUTO, False),
ID_EN: (IC_OCR_FIELD, ID_COMPARE_LOGIC, True),
ID_EN: (IC_OCR_FIELD, ID_COMPARE_LOGIC_AUTO, True),
}
......@@ -2308,6 +2328,7 @@ FILE_NAME_PREFIX_MAP = {
ECONTRACT_KEYWORDS_MAP = {
AFC_PREFIX: [
('抵押贷款合同', CONTRACT_CLASSIFY),
('送达地址确认书', CONTRACT_QRS_CLASSIFY),
# ('电子签署-抵押登记豁免函', HMH_CLASSIFY, 0),
],
HIL_PREFIX: [
......
......@@ -987,6 +987,15 @@ class Command(BaseCommand, LoggerMixin):
# }
# }
license_summary[classify] = [res]
elif classify == consts.CONTRACT_QRS_CLASSIFY:
res = {}
for key, (pno, key1) in consts.SE_AFC_CON_QRS_MAP.items():
res[key] = page_info_dict.get(str(pno), {}).get(key1, '')
res.setdefault(consts.IMG_PATH_KEY, dict())[key] = page_info_dict.get(str(pno), {}).get(
consts.IMG_PATH_KEY, '')
res.setdefault(consts.ALL_POSITION_KEY, dict())[key] = page_info_dict.get(str(pno), {}).get(
consts.ALL_POSITION_KEY, {}).get(key1, [])
license_summary[classify] = [res]
else:
res = {}
for key, (pno1, pno2, end_idx, key1, key2) in consts.SE_HIL_CON_MAP[classify].items():
......@@ -1474,6 +1483,16 @@ class Command(BaseCommand, LoggerMixin):
'page_num': page_num,
'page_info': page_info
}
elif classify_1_str == str(consts.CONTRACT_QRS_CLASSIFY):
ocr_result = afc_predict(pdf_handler.pdf_info, is_qrs=True)
page_num = 'page_1'
page_res = {
page_num: {
'classify': int(classify_1_str),
'page_num': page_num,
'page_info': ocr_result.pop(page_num, {})
}
}
else:
file_type_1 = consts.HIL_CONTRACT_TYPE_MAP.get(classify_1_str)
ocr_result_1 = hil_predict(pdf_handler.pdf_info, file_type_1)
......
......@@ -328,6 +328,7 @@ class AFCOCRResult(models.Model):
hil_contract_1_ocr = models.TextField(null=True, verbose_name="HIL合同1")
hil_contract_2_ocr = models.TextField(null=True, verbose_name="HIL合同2")
hil_contract_3_ocr = models.TextField(null=True, verbose_name="HIL合同3")
qrs_ocr = models.TextField(null=True, verbose_name="AFC合同确认书")
update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
......@@ -363,6 +364,7 @@ class HILOCRResult(models.Model):
hil_contract_1_ocr = models.TextField(null=True, verbose_name="HIL合同1")
hil_contract_2_ocr = models.TextField(null=True, verbose_name="HIL合同2")
hil_contract_3_ocr = models.TextField(null=True, verbose_name="HIL合同3")
qrs_ocr = models.TextField(null=True, verbose_name="AFC合同确认书")
update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
......@@ -397,6 +399,7 @@ class AFCSEOCRResult(models.Model):
hil_contract_1_ocr = models.TextField(null=True, verbose_name="HIL合同1")
hil_contract_2_ocr = models.TextField(null=True, verbose_name="HIL合同2")
hil_contract_3_ocr = models.TextField(null=True, verbose_name="HIL合同3")
qrs_ocr = models.TextField(null=True, verbose_name="AFC合同确认书")
update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
......@@ -432,6 +435,7 @@ class HILSEOCRResult(models.Model):
hil_contract_1_ocr = models.TextField(null=True, verbose_name="HIL合同1")
hil_contract_2_ocr = models.TextField(null=True, verbose_name="HIL合同2")
hil_contract_3_ocr = models.TextField(null=True, verbose_name="HIL合同3")
qrs_ocr = models.TextField(null=True, verbose_name="AFC合同确认书")
update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
......
......@@ -914,8 +914,10 @@ def get_se_cms_compare_info_auto(last_obj, application_entity, auto=True, ignore
# is_cdfl = True # 车贷分离
is_cdfl_bo = False # 车贷分离,主借
is_cdfl_co = False # 车贷分离,共借
role_count = 0
# province = cms_info.get('province', '')
for individual_info in cms_info.get('applicantInformation', []):
role_count += 1
all_id_num = []
license_dict = {}
......@@ -1440,6 +1442,10 @@ def get_se_cms_compare_info_auto(last_obj, application_entity, auto=True, ignore
afc_contract_input.append((consts.SE_AFC_CON_FIELD[19], empty_str))
contract_info[consts.AFC_CONTRACT_EN] = afc_contract_input
afc_contract_qrs_input = [(consts.SE_AFC_CON_QRS_FIELD[0], '{0}{1}{2}'.format(role_count, consts.SPLIT_STR, full_no))]
contract_info[consts.AFC_CONTRACT_QRS_EN] = afc_contract_qrs_input
compare_info['contract'] = contract_info
return compare_info, cms_info.get('autoApprovedDetails', {}).get('aaType', ''), is_gsyh
......@@ -1460,8 +1466,10 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list, auto=Fals
# 个人信息证件------------------------------------------------------------------------------------------------------
is_cdfl_bo = False # 车贷分离,主借
is_cdfl_co = False # 车贷分离,共借
role_count = 0
# province = cms_info.get('province', '')
for individual_info in cms_info.get('applicantInformation', []):
role_count += 1
all_id_num = []
license_dict = {}
......@@ -1983,6 +1991,9 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list, auto=Fals
afc_contract_input.append((consts.SE_AFC_CON_FIELD[19], empty_str))
contract_info[consts.AFC_CONTRACT_EN] = afc_contract_input
afc_contract_qrs_input = [(consts.SE_AFC_CON_QRS_FIELD[0], '{0}{1}{2}'.format(role_count, consts.SPLIT_STR, full_no))]
contract_info[consts.AFC_CONTRACT_QRS_EN] = afc_contract_qrs_input
compare_info['contract'] = contract_info
return compare_info, cms_info.get('applicationVersion', 1), is_gsyh
......@@ -2718,6 +2729,46 @@ def se_contract_compare(license_en, ocr_res_dict, strip_list, is_gsyh):
return result_field_list, field_img_path_dict
def se_contract_qrs_compare(license_en, ocr_res_dict, strip_list):
ocr_field, compare_logic, _ = consts.SE_COMPARE_FIELD[license_en]
ocr_res_str = ocr_res_dict.get(ocr_field)
result_field_list = []
field_img_path_dict = dict()
if ocr_res_str is not None:
ocr_res_list = json.loads(ocr_res_str)
contract_num_list = []
for qrs_res in ocr_res_list:
contract_num_list.append(qrs_res.get('合同编号', ''))
ocr_res = {
'合同编号': contract_num_list
}
for name, value in strip_list:
ocr_str_or_list = ocr_res.get(compare_logic[name][0])
if isinstance(ocr_str_or_list, list):
ocr_str = json.dumps(ocr_str_or_list, ensure_ascii=False)
else:
ocr_str_or_list = ocr_str_or_list.strip()
ocr_str = ocr_str_or_list
result = getattr(cp, compare_logic[name][1])(value, ocr_str_or_list, **compare_logic[name][2])
reason = compare_logic[name][3]
img_path = empty_str
error_type = empty_error_type if result == consts.RESULT_Y else ErrorType.OCR.value
result_field_list.append((name, value, result, ocr_str, img_path, error_type, reason))
else:
for name, value in strip_list:
result_field_list.append((name, value, consts.RESULT_N, empty_str, empty_str, ErrorType.NF.value,
'{0}未找到'.format(license_en)))
return result_field_list, field_img_path_dict
def se_mvc34_compare(license_en, ocr_res_dict, field_list):
ocr_field, compare_logic, _ = consts.SE_COMPARE_FIELD[license_en]
ocr_res_str = ocr_res_dict.get(ocr_field)
......@@ -2927,6 +2978,8 @@ def se_compare_process(compare_info, ocr_res_dict, is_gsyh, is_auto, id_res_list
result_field_list, field_img_path_dict = se_mvc34_compare(license_en, ocr_res_dict, strip_list)
elif license_en in [consts.HIL_CONTRACT_1_EN, consts.HIL_CONTRACT_2_EN, consts.HIL_CONTRACT_3_EN, consts.AFC_CONTRACT_EN]:
result_field_list, field_img_path_dict = se_contract_compare(license_en, ocr_res_dict, strip_list, is_gsyh)
elif license_en == consts.AFC_CONTRACT_QRS_EN:
result_field_list, field_img_path_dict = se_contract_qrs_compare(license_en, ocr_res_dict, strip_list)
elif license_en == consts.BS_EN:
result_field_list, field_img_path_dict = se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto)
else:
......@@ -2936,8 +2989,11 @@ def se_compare_process(compare_info, ocr_res_dict, is_gsyh, is_auto, id_res_list
for name, value, result, ocr_str, img_path, error_type, cn_reason in result_field_list:
total_fields += 1
if result == consts.RESULT_N:
# if license_en != consts.MVI_EN or name != consts.SE_NEW_ADD_FIELD[9]:
successful_at_this_level = False
# 确认书N2
if license_en == consts.AFC_CONTRACT_QRS_EN and name == consts.SE_AFC_CON_QRS_FIELD[0] and ocr_str == empty_str:
pass
else:
successful_at_this_level = False
failed_count += 1
each_license_failed_count += 1
failure_field.append(name)
......
......@@ -9,7 +9,21 @@ from .get_char import Finder
import numpy as np
def predict(pdf_info):
def extract_info(ocr_results):
contract_no = {
"words": None,
"position": None
}
for bbox, text in ocr_results.get('0', {}).values():
if text.startswith('CH-B'):
contract_no['words'] = text
contract_no['position'] = [bbox[0], bbox[1], bbox[2], bbox[-1]]
break
return {'page_1': {'合同编号': contract_no}}
def predict(pdf_info, is_qrs=False):
ocr_results = {}
for pno in pdf_info:
ocr_results[pno] = {}
......@@ -32,9 +46,12 @@ def predict(pdf_info):
keys = list(range(len(ocr_result)))
ocr_result = dict(zip(keys, ocr_result))
ocr_results[pno] = ocr_result
# 输入是整个 PDF 中的信息
f = Finder(pdf_info, ocr_results=ocr_results)
results = f.get_info()
if is_qrs:
results = extract_info(ocr_results)
else:
# 输入是整个 PDF 中的信息
f = Finder(pdf_info, ocr_results=ocr_results)
results = f.get_info()
return results
......
......@@ -646,6 +646,20 @@ class Comparison:
# input_str = input_str.replace('-', '')
return self.is_after_today_pre(ocr_str)
def se_qrs_compare(self, input_str, ocr_str_or_list, **kwargs):
try:
target_count_str, application_id = input_str.split('_')
search_count = 0
for item_str in ocr_str_or_list:
if item_str == application_id:
search_count += 1
if search_count >= int(target_count_str):
return self.RESULT_Y
else:
return self.RESULT_N
except Exception as e:
return self.RESULT_N
cp = Comparison()
......
import pyodbc
hil_sql = """
ALTER TABLE hil_ocr_result ADD qrs_ocr nvarchar(max);
ALTER TABLE hil_se_ocr_result ADD qrs_ocr nvarchar(max);
"""
afc_sql = """
ALTER TABLE afc_ocr_result ADD qrs_ocr nvarchar(max);
ALTER TABLE afc_se_ocr_result ADD qrs_ocr nvarchar(max);
"""
hil_cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};', autocommit=True)
hil_cursor = hil_cnxn.cursor()
hil_cursor.execute(hil_sql)
hil_cursor.close()
hil_cnxn.close()
afc_cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};', autocommit=True)
afc_cursor = afc_cnxn.cursor()
afc_cursor.execute(afc_sql)
afc_cursor.close()
afc_cnxn.close()
......@@ -19,8 +19,10 @@ def get_pos_compare_info(pos_info):
custr_name = custr_id = ''
# 身份证
role_count = 0
individual_cus_info_list = pos_info.get('individualCusInfo', [])
for individual_cus_info in individual_cus_info_list:
role_count += 1
customer_name = individual_cus_info.get('customerName', '').strip()
id_num = individual_cus_info.get('idNum', '')
applicant_type = individual_cus_info.get('applicantType', '')
......@@ -177,6 +179,9 @@ def get_pos_compare_info(pos_info):
afc_contract_input.append((consts.AFC_CON_FIELDS[11], empty_str))
compare_info.setdefault(consts.AFC_CONTRACT_EN, []).append(afc_contract_input)
afc_contract_qrs_input = [(consts.AFC_CON_QRS_FIELDS[0], '{0}{1}{2}'.format(role_count, consts.SPLIT_STR, application_id_version))]
compare_info.setdefault(consts.AFC_CONTRACT_QRS_EN, []).append(afc_contract_qrs_input)
return compare_info
......@@ -191,6 +196,10 @@ def pre_compare_process(compare_info, ocr_res_dict, id_res_list):
for field_list in items_list:
result_list = pre_compare_license_contract(license_en, ocr_res_dict, field_list)
compare_result.setdefault(license_en, []).append(result_list)
elif license_en == consts.AFC_CONTRACT_QRS_EN:
for field_list in items_list:
result_list = pre_compare_license_contract_qrs(license_en, ocr_res_dict, field_list)
compare_result.setdefault(license_en, []).append(result_list)
else:
for field_list in items_list:
result_list = pre_compare_license(license_en, ocr_res_dict, field_list)
......@@ -376,6 +385,42 @@ def pre_compare_license_contract(license_en, ocr_res_dict, field_list):
return result_field_list
def pre_compare_license_contract_qrs(license_en, ocr_res_dict, field_list):
ocr_field, compare_logic, no_find_comment = consts.PRE_COMPARE_LOGIC_MAP[license_en]
ocr_res_str = ocr_res_dict.get(ocr_field)
result_field_list = []
if ocr_res_str is not None:
ocr_res_list = json.loads(ocr_res_str)
contract_num_list = []
for qrs_res in ocr_res_list:
contract_num_list.append(qrs_res.get('合同编号', ''))
ocr_res = {
'合同编号': contract_num_list
}
for name, value in field_list:
ocr_str_or_list = ocr_res.get(compare_logic[name][0])
if isinstance(ocr_str_or_list, list):
ocr_str = json.dumps(ocr_str_or_list, ensure_ascii=False)
else:
ocr_str_or_list = ocr_str_or_list.strip()
ocr_str = ocr_str_or_list
result = getattr(cp, compare_logic[name][1])(value, ocr_str_or_list, **compare_logic[name][2])
comments = compare_logic[name][3]
result_field_list.append((value, ocr_str, result, comments))
else:
result_field_list.append((empty_str, empty_str, consts.RESULT_N, no_find_comment))
return result_field_list
def rebuild_result(compare_result):
# compare_result = {
# "is_pass": True,
......@@ -434,7 +479,7 @@ def get_empty_result():
"input": "",
"ocr": "",
"field_is_pass": False,
"comments": "未查找到OCR识别结果"
"comments": "预放款结果超时未返回,请直接提交放款"
}]
}]
}
......
......@@ -26,6 +26,7 @@ ASP_SUM_NAME = '附加产品融资贷款本金总金额'
HIL_CON_2_FIELDS = ['合同编号', '合同编号-正文', '车辆识别代码']
AFC_CON_QRS_FIELDS = ['合同编号']
AFC_CON_FIELDS = ['合同编号-每页', '合同编号-每页(no-asp)', '车架号-重要条款', '车架号', '还款账号', '户名', '开户行',
'还款计划表', 'ASP项目详情-重要条款', 'ASP项目详情', '见证人签字', '见证人日期']
AFC_HT_DATE_FIELDS = ['主借人日期', '共借人日期', '保证人日期1', '保证人日期2']
......@@ -38,6 +39,7 @@ BD_EN = 'Insurance'
HIL_CONTRACT_1_EN = '售后回租合同'
HIL_CONTRACT_2_EN = '车辆租赁抵押合同'
AFC_CONTRACT_EN = '合同'
AFC_CONTRACT_QRS_EN = '送达地址确认书'
ID_OCR_FIELD = 'ic_ocr'
MVI_OCR_FIELD = 'mvi_ocr'
......@@ -47,6 +49,7 @@ BD_FIELD = 'bd_ocr'
HIL_CONTRACT_1_FIELD = 'hil_contract_1_ocr'
HIL_CONTRACT_2_FIELD = 'hil_contract_2_ocr'
HT_FIELD = 'ht_ocr'
QRS_FIELD = 'qrs_ocr'
MVI_COMPARE_LOGIC = {
MVI_FIELDS[0]: ('车辆识别代码', 'se_common_compare', {}, '发票车架号与系统不一致'),
......@@ -93,6 +96,10 @@ HIL_CONTRACT_2_COMPARE_LOGIC = {
HIL_CON_2_FIELDS[2]: ('车辆识别代码', 'se_common_compare', {}, '车辆租赁抵押合同车辆识别代码与系统车架号不一致'),
}
QRS_COMPARE_LOGIC = {
AFC_CON_QRS_FIELDS[0]: ('合同编号', 'se_qrs_compare', {}, '请确认是否提供合格的送达地址确认书'),
}
HT_COMPARE_LOGIC = {
AFC_CON_FIELDS[0]: ('合同编号-每页', 'se_list_compare', {}, '合同编号与系统不一致'),
# '合同编号-每页(no-asp)': ('合同编号-每页', 'se_list_compare', {'pop_last': True}, '合同编号与系统不一致'),
......@@ -131,6 +138,7 @@ PRE_COMPARE_LOGIC_MAP = {
HMH_EN: (HMH_OCR_FIELD, HMH_COMPARE_LOGIC, '请确认是否已完成抵押登记豁免函签署'),
BD_EN: (BD_FIELD, BD_COMPARE_LOGIC, '请确认是否提供保单'),
AFC_CONTRACT_EN: (HT_FIELD, HT_COMPARE_LOGIC, '请确认是否已完成车辆抵押贷款合同签署'),
AFC_CONTRACT_QRS_EN: (QRS_FIELD, QRS_COMPARE_LOGIC, '请确认是否提供合格的送达地址确认书'),
HIL_CONTRACT_1_EN: (HIL_CONTRACT_1_FIELD, HIL_CONTRACT_1_COMPARE_LOGIC, '请确认是否已完成售后回租合同签署'),
HIL_CONTRACT_2_EN: (HIL_CONTRACT_2_FIELD, HIL_CONTRACT_2_COMPARE_LOGIC, '请确认是否已完成车辆租赁抵押合同签署'),
}
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!