dc82ee71 by 冯轩

init 5015

1 parent 75d18a3c
...@@ -1503,7 +1503,7 @@ SE_DYSYR_VALUE = '无' ...@@ -1503,7 +1503,7 @@ SE_DYSYR_VALUE = '无'
1503 SE_LAYOUT_VALUE = '旧版-旧打印、新版-新打印' 1503 SE_LAYOUT_VALUE = '旧版-旧打印、新版-新打印'
1504 SE_GB_NEW_FIELD = ['vinNo'] 1504 SE_GB_NEW_FIELD = ['vinNo']
1505 SE_GB_USED_FIELD = ['customerName', 'idNum', 'date'] 1505 SE_GB_USED_FIELD = ['customerName', 'idNum', 'date']
1506 SE_BS_FIELD = ['户名', '打印日期', '流水日期', '(担保人1)户名', '(担保人1)打印日期', '(担保人1)流水日期', '(担保人2)户名', '(担保人2)打印日期', '(担保人2)流水日期'] 1506 SE_BS_FIELD = ['户名', '打印日期', '流水日期', '(担保人1)户名', '(担保人1)打印日期', '(担保人1)流水日期', '(担保人2)户名', '(担保人2)打印日期', '(担保人2)流水日期', '类型']
1507 SE_HMH_FIELD = ['借款人/承租人姓名', '借款人/承租人证件号', '申请号', '渠道', '签字'] 1507 SE_HMH_FIELD = ['借款人/承租人姓名', '借款人/承租人证件号', '申请号', '渠道', '签字']
1508 SE_BD_FIELD = ['被保险人姓名', '被保险人证件号码', '车架号', '机动车损失保险金额', '第三者责任保险金额', '绝对免赔率', '保险起始日期', '保险截止日期', '保单章', '第一受益人', '保险费合计'] 1508 SE_BD_FIELD = ['被保险人姓名', '被保险人证件号码', '车架号', '机动车损失保险金额', '第三者责任保险金额', '绝对免赔率', '保险起始日期', '保险截止日期', '保单章', '第一受益人', '保险费合计']
1509 JDMPV_VALUE = ['-', '--', '0%', '0.00', '/', '0', ''] 1509 JDMPV_VALUE = ['-', '--', '0%', '0.00', '/', '0', '']
...@@ -2017,6 +2017,7 @@ BS_COMPARE_LOGIC = { ...@@ -2017,6 +2017,7 @@ BS_COMPARE_LOGIC = {
2017 '流水日期': ('timedelta', 'se_bs_date_compare', {}, '主共借人银行流水日期不满足3个月'), 2017 '流水日期': ('timedelta', 'se_bs_date_compare', {}, '主共借人银行流水日期不满足3个月'),
2018 '(担保人1)流水日期': ('timedelta', 'se_bs_date_compare', {}, '担保人1银行流水日期不满足3个月'), 2018 '(担保人1)流水日期': ('timedelta', 'se_bs_date_compare', {}, '担保人1银行流水日期不满足3个月'),
2019 '(担保人2)流水日期': ('timedelta', 'se_bs_date_compare', {}, '担保人2银行流水日期不满足3个月'), 2019 '(担保人2)流水日期': ('timedelta', 'se_bs_date_compare', {}, '担保人2银行流水日期不满足3个月'),
2020 '类型': ('bank_statement_type', 'se_bs_type_compare', {}, '高风险经销商流水类型异常'),
2020 } 2021 }
2021 2022
2022 BS_COMPARE_LOGIC_AUTO = { 2023 BS_COMPARE_LOGIC_AUTO = {
...@@ -2029,6 +2030,7 @@ BS_COMPARE_LOGIC_AUTO = { ...@@ -2029,6 +2030,7 @@ BS_COMPARE_LOGIC_AUTO = {
2029 '流水日期': ('timedelta', 'se_bs_date_compare', {}, '主共借人银行流水日期不满足2个月'), 2030 '流水日期': ('timedelta', 'se_bs_date_compare', {}, '主共借人银行流水日期不满足2个月'),
2030 '(担保人1)流水日期': ('timedelta', 'se_bs_date_compare', {}, '担保人1银行流水日期不满足2个月'), 2031 '(担保人1)流水日期': ('timedelta', 'se_bs_date_compare', {}, '担保人1银行流水日期不满足2个月'),
2031 '(担保人2)流水日期': ('timedelta', 'se_bs_date_compare', {}, '担保人2银行流水日期不满足2个月'), 2032 '(担保人2)流水日期': ('timedelta', 'se_bs_date_compare', {}, '担保人2银行流水日期不满足2个月'),
2033 '类型': ('bank_statement_type', 'se_bs_type_compare', {}, '高风险经销商流水类型异常'),
2032 } 2034 }
2033 2035
2034 SPECIAL_REASON = '主共借人未提供银行流水,含担保人需人工查看直系亲属关系' 2036 SPECIAL_REASON = '主共借人未提供银行流水,含担保人需人工查看直系亲属关系'
......
...@@ -1221,6 +1221,14 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d ...@@ -1221,6 +1221,14 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d
1221 (consts.SE_BS_FIELD[2], date_timedelta), 1221 (consts.SE_BS_FIELD[2], date_timedelta),
1222 ] 1222 ]
1223 1223
1224 #在比对逻辑中添加字段
1225 if '不接受支付宝/微信' in cms_info.get('autoApprovedDetails', {}).get('PolicyComments', ''):
1226 #bs_field_input.append((consts.SE_BS_FIELD[9], '不接受支付宝/微信'))
1227 allow_bs_type = '不接受支付宝/微信'
1228 else:
1229 #bs_field_input.append((consts.SE_BS_FIELD[9], '全部'))
1230 allow_bs_type = '全部'
1231
1224 dbr_bs_role_list = [] 1232 dbr_bs_role_list = []
1225 for dbr_bs_role, _, _ in main_role_info.get(consts.APPLICANT_TYPE_ORDER[2], []): 1233 for dbr_bs_role, _, _ in main_role_info.get(consts.APPLICANT_TYPE_ORDER[2], []):
1226 dbr_bs_role_list.append(dbr_bs_role) 1234 dbr_bs_role_list.append(dbr_bs_role)
...@@ -1560,7 +1568,7 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d ...@@ -1560,7 +1568,7 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d
1560 contract_info[consts.AFC_CONTRACT_QRS_EN] = afc_contract_qrs_input 1568 contract_info[consts.AFC_CONTRACT_QRS_EN] = afc_contract_qrs_input
1561 1569
1562 compare_info['contract'] = contract_info 1570 compare_info['contract'] = contract_info
1563 return compare_info, cms_info.get('autoApprovedDetails', {}).get('aaType', ''), is_gsyh 1571 return compare_info, cms_info.get('autoApprovedDetails', {}).get('aaType', ''), is_gsyh, allow_bs_type
1564 1572
1565 1573
1566 def get_se_cms_compare_info(application_id, last_obj, application_entity, detect_list, data_source, auto=False, ignore_bank=False): 1574 def get_se_cms_compare_info(application_id, last_obj, application_entity, detect_list, data_source, auto=False, ignore_bank=False):
...@@ -1881,6 +1889,14 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect ...@@ -1881,6 +1889,14 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect
1881 (consts.SE_BS_FIELD[2], date_timedelta), 1889 (consts.SE_BS_FIELD[2], date_timedelta),
1882 ] 1890 ]
1883 1891
1892 #在比对逻辑中添加字段
1893 if '不接受支付宝/微信' in cms_info.get('autoApprovedDetails', {}).get('PolicyComments', ''):
1894 #bs_field_input.append((consts.SE_BS_FIELD[9], '不接受支付宝/微信'))
1895 allow_bs_type = '不接受支付宝/微信'
1896 else:
1897 #bs_field_input.append((consts.SE_BS_FIELD[9], '全部'))
1898 allow_bs_type = '全部'
1899
1884 dbr_bs_role_list = [] 1900 dbr_bs_role_list = []
1885 for dbr_bs_role, _, _ in main_role_info.get(consts.APPLICANT_TYPE_ORDER[2], []): 1901 for dbr_bs_role, _, _ in main_role_info.get(consts.APPLICANT_TYPE_ORDER[2], []):
1886 dbr_bs_role_list.append(dbr_bs_role) 1902 dbr_bs_role_list.append(dbr_bs_role)
...@@ -2185,10 +2201,10 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect ...@@ -2185,10 +2201,10 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect
2185 afc_contract_qrs_input = [(consts.SE_AFC_CON_QRS_FIELD[0], '{0}{1}{2}'.format(role_count, consts.SPLIT_STR, full_no))] 2201 afc_contract_qrs_input = [(consts.SE_AFC_CON_QRS_FIELD[0], '{0}{1}{2}'.format(role_count, consts.SPLIT_STR, full_no))]
2186 contract_info[consts.AFC_CONTRACT_QRS_EN] = afc_contract_qrs_input 2202 contract_info[consts.AFC_CONTRACT_QRS_EN] = afc_contract_qrs_input
2187 compare_info['contract'] = contract_info 2203 compare_info['contract'] = contract_info
2188 return compare_info, cms_info.get('applicationVersion', 1), cms_info.get('autoApprovedDetails', {}).get('aaType', ''), is_gsyh 2204 return compare_info, cms_info.get('applicationVersion', 1), cms_info.get('autoApprovedDetails', {}).get('aaType', ''), is_gsyh, allow_bs_type
2189 2205
2190 2206
2191 def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type): 2207 def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type, allow_bs_type):
2192 # 主共借至少提供一个 2208 # 主共借至少提供一个
2193 # 有担保人,担保人必须提供。主共借没有时,修改comment:人工查看担保人亲属关系 2209 # 有担保人,担保人必须提供。主共借没有时,修改comment:人工查看担保人亲属关系
2194 2210
...@@ -2202,6 +2218,7 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type): ...@@ -2202,6 +2218,7 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type):
2202 field_img_path_dict = dict() 2218 field_img_path_dict = dict()
2203 2219
2204 if ocr_res_str is not None: 2220 if ocr_res_str is not None:
2221 # 字段在比对逻辑中添加的,这个地方不用改,如果要是在get_info时添加,要改这个
2205 pre_field_list = strip_list[:3] 2222 pre_field_list = strip_list[:3]
2206 dbr1_field_list = strip_list[3:6] 2223 dbr1_field_list = strip_list[3:6]
2207 dbr2_field_list = strip_list[6:] 2224 dbr2_field_list = strip_list[6:]
...@@ -2220,11 +2237,18 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type): ...@@ -2220,11 +2237,18 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type):
2220 auto_paper_verify_false_idx_list = [] 2237 auto_paper_verify_false_idx_list = []
2221 auto_elec_verify_false_idx_list = [] 2238 auto_elec_verify_false_idx_list = []
2222 2239
2240 all_zhifubao_weixin = True
2241
2223 for tmp_idx, ocr_res in enumerate(ocr_res_list): 2242 for tmp_idx, ocr_res in enumerate(ocr_res_list):
2224 correct_count = 0 2243 correct_count = 0
2225 pre_tmp_res_part = {} 2244 pre_tmp_res_part = {}
2226 verify_bool = ocr_res.get('verify', False) 2245 verify_bool = ocr_res.get('verify', False)
2227 e_bank = ocr_res.get('e_bank', False) 2246 e_bank = ocr_res.get('e_bank', False)
2247 bs_type = ocr_res.get('bs_type', '')
2248 # 如果是高风险经销商,cms信息中包含‘不接受支付宝/微信’,但是识别出的流水是支付宝/微信,直接跳过这个文件,就当不存在
2249 if allow_bs_type == '不接受支付宝/微信' and bs_type in [12, 13, 48]:
2250 continue
2251 all_zhifubao_weixin = False
2228 #verify_list.append(verify_bool) 2252 #verify_list.append(verify_bool)
2229 if not verify_bool: 2253 if not verify_bool:
2230 verify_false_idx_list.append(str(tmp_idx+1)) 2254 verify_false_idx_list.append(str(tmp_idx+1))
...@@ -2308,6 +2332,13 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type): ...@@ -2308,6 +2332,13 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type):
2308 reason2 = '第{0}份银行流水为纸质版,请核查流水真伪。'.format('、'.join(auto_paper_verify_false_idx_list)) 2332 reason2 = '第{0}份银行流水为纸质版,请核查流水真伪。'.format('、'.join(auto_paper_verify_false_idx_list))
2309 reason = reason1 + reason2 2333 reason = reason1 + reason2
2310 result_field_list.append((name, empty_str, result, json.dumps(verify_list, ensure_ascii=False), empty_str, empty_error_type, reason)) 2334 result_field_list.append((name, empty_str, result, json.dumps(verify_list, ensure_ascii=False), empty_str, empty_error_type, reason))
2335
2336
2337 if all_zhifubao_weixin:
2338 # 核查点名称,cms传值,比对结果,ocr结果,图片路径,错误类型,错误描述
2339 result_field_list.append(('类型', allow_bs_type, consts.RESULT_N, '全部为支付宝/微信', empty_str, empty_error_type, '高风险经销商流水类型异常'))
2340 else:
2341 result_field_list.append(('类型', allow_bs_type, consts.RESULT_Y, '包含支付宝/微信以外流水', empty_str, empty_error_type, ''))
2311 2342
2312 # 担保人1 2343 # 担保人1
2313 dbr1_best_res = {} 2344 dbr1_best_res = {}
...@@ -3253,7 +3284,7 @@ def se_mvc34_compare(license_en, ocr_res_dict, field_list): ...@@ -3253,7 +3284,7 @@ def se_mvc34_compare(license_en, ocr_res_dict, field_list):
3253 return result_field_list, field_img_path_dict 3284 return result_field_list, field_img_path_dict
3254 3285
3255 3286
3256 def se_compare_process(compare_info, ocr_res_dict, is_gsyh, is_auto, id_res_list, aa_type): 3287 def se_compare_process(compare_info, ocr_res_dict, is_gsyh, is_auto, id_res_list, aa_type, allow_bs_type):
3257 # individualCusInfo 3288 # individualCusInfo
3258 # corporateCusInfo 3289 # corporateCusInfo
3259 # vehicleInfo 3290 # vehicleInfo
...@@ -3350,7 +3381,8 @@ def se_compare_process(compare_info, ocr_res_dict, is_gsyh, is_auto, id_res_list ...@@ -3350,7 +3381,8 @@ def se_compare_process(compare_info, ocr_res_dict, is_gsyh, is_auto, id_res_list
3350 elif license_en == consts.AFC_CONTRACT_QRS_EN: 3381 elif license_en == consts.AFC_CONTRACT_QRS_EN:
3351 result_field_list, field_img_path_dict = se_contract_qrs_compare(license_en, ocr_res_dict, strip_list) 3382 result_field_list, field_img_path_dict = se_contract_qrs_compare(license_en, ocr_res_dict, strip_list)
3352 elif license_en == consts.BS_EN: 3383 elif license_en == consts.BS_EN:
3353 result_field_list, field_img_path_dict = se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type) 3384 # 银行流水的比对,是只要有正确的就可以,所以没有按照时间顺序,先比最新的,在比最早的,如果以后要改逻辑,切记这个
3385 result_field_list, field_img_path_dict = se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type, allow_bs_type)
3354 elif license_en == consts.FS_EN: 3386 elif license_en == consts.FS_EN:
3355 result_field_list, field_img_path_dict = se_fs_compare(license_en, ocr_res_dict, strip_list) 3387 result_field_list, field_img_path_dict = se_fs_compare(license_en, ocr_res_dict, strip_list)
3356 else: 3388 else:
...@@ -3439,11 +3471,11 @@ def se_compare_auto(application_id, application_entity, ocr_res_id, last_obj, oc ...@@ -3439,11 +3471,11 @@ def se_compare_auto(application_id, application_entity, ocr_res_id, last_obj, oc
3439 try: 3471 try:
3440 # 比对逻辑 3472 # 比对逻辑
3441 # detect_list = se_result_detect(ocr_res_dict) 3473 # detect_list = se_result_detect(ocr_res_dict)
3442 compare_info, aa_type, is_gsyh = get_se_cms_compare_info_auto( 3474 compare_info, aa_type, is_gsyh, allow_bs_type = get_se_cms_compare_info_auto(
3443 application_id, last_obj, application_entity, data_source, ignore_bank=ignore_bank) 3475 application_id, last_obj, application_entity, data_source, ignore_bank=ignore_bank)
3444 compare_result, total_fields, failed_count, successful_at_this_level, failure_reason_str, \ 3476 compare_result, total_fields, failed_count, successful_at_this_level, failure_reason_str, \
3445 cn_failure_reason_str, bs_failure_reason_str, _, field_result_dict = se_compare_process( 3477 cn_failure_reason_str, bs_failure_reason_str, _, field_result_dict = se_compare_process(
3446 compare_info, ocr_res_dict, is_gsyh, True, id_res_list, aa_type) 3478 compare_info, ocr_res_dict, is_gsyh, True, id_res_list, aa_type, allow_bs_type)
3447 compare_log.info('{0} [Auto SE] [compare success] [entity={1}] [id={2}] [ocr_res_id={3}] [result={4}]'.format( 3479 compare_log.info('{0} [Auto SE] [compare success] [entity={1}] [id={2}] [ocr_res_id={3}] [result={4}]'.format(
3448 log_base, application_entity, application_id, ocr_res_id, compare_result)) 3480 log_base, application_entity, application_id, ocr_res_id, compare_result))
3449 except Exception as e: 3481 except Exception as e:
...@@ -3506,11 +3538,11 @@ def se_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res ...@@ -3506,11 +3538,11 @@ def se_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res
3506 # 比对逻辑 3538 # 比对逻辑
3507 start_time = datetime.now() 3539 start_time = datetime.now()
3508 detect_list = se_result_detect(ocr_res_dict) 3540 detect_list = se_result_detect(ocr_res_dict)
3509 compare_info, application_version, aa_type, is_gsyh = get_se_cms_compare_info( 3541 compare_info, application_version, aa_type, is_gsyh, allow_bs_type = get_se_cms_compare_info(
3510 application_id, last_obj, application_entity, detect_list, data_source, ignore_bank=ignore_bank) 3542 application_id, last_obj, application_entity, detect_list, data_source, ignore_bank=ignore_bank)
3511 compare_result, total_fields, failed_count, successful_at_this_level, failure_reason_str, \ 3543 compare_result, total_fields, failed_count, successful_at_this_level, failure_reason_str, \
3512 cn_failure_reason_str, bs_failure_reason_str, rpa_failure_reason, field_result_dict = se_compare_process( 3544 cn_failure_reason_str, bs_failure_reason_str, rpa_failure_reason, field_result_dict = se_compare_process(
3513 compare_info, ocr_res_dict, is_gsyh, False, id_res_list, aa_type) 3545 compare_info, ocr_res_dict, is_gsyh, False, id_res_list, aa_type, allow_bs_type)
3514 compare_log.info('{0} [SE] [compare success] [entity={1}] [id={2}] [ocr_res_id={3}] [result={4}]'.format( 3546 compare_log.info('{0} [SE] [compare success] [entity={1}] [id={2}] [ocr_res_id={3}] [result={4}]'.format(
3515 log_base, application_entity, application_id, ocr_res_id, compare_result)) 3547 log_base, application_entity, application_id, ocr_res_id, compare_result))
3516 except Exception as e: 3548 except Exception as e:
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!