c64686f8 by 周伟奇

add qrs compare

1 parent 573f28d7
......@@ -1258,6 +1258,7 @@ COMPARE_FIELDS = (
HMH_OCR_FIELD,
JYPZ_OCR_FIELD,
HT_FIELD,
QRS_FIELD,
BD_FIELD,
BS_FIELD,
HIL_CONTRACT_1_FIELD,
......@@ -1271,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,
......@@ -1605,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 = ['合同编号-每页', '所购车辆价格-小写-重要条款', '车架号-重要条款', '贷款本金金额-重要条款', '贷款期限-重要条款',
'车辆贷款本金金额-重要条款', '附加产品融资贷款本金总额-重要条款', '所购车辆价格', '车架号', '经销商',
'贷款本金金额', '车辆贷款本金金额', '附加产品融资贷款本金总额', '贷款期限', '还款账号', '户名', '开户行',
......@@ -1700,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 = '售后回租合同'
......@@ -1989,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}, '合同编号与系统不一致'),
......@@ -2065,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),
......@@ -2074,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),
}
......
......@@ -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)
......
......@@ -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()
......
......@@ -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,
......
......@@ -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!