Merge branch 'feature/CHINARPA-5015' into feature/uat-tmp
Showing
2 changed files
with
53 additions
and
10 deletions
... | @@ -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 | '类型': ('bankStatement_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 | '类型': ('bankStatement_type', 'se_bs_type_compare', {}, '高风险经销商流水类型异常'), | ||
2032 | } | 2034 | } |
2033 | 2035 | ||
2034 | SPECIAL_REASON = '主共借人未提供银行流水,含担保人需人工查看直系亲属关系' | 2036 | SPECIAL_REASON = '主共借人未提供银行流水,含担保人需人工查看直系亲属关系' | ... | ... |
... | @@ -1223,6 +1223,14 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d | ... | @@ -1223,6 +1223,14 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d |
1223 | (consts.SE_BS_FIELD[2], date_timedelta), | 1223 | (consts.SE_BS_FIELD[2], date_timedelta), |
1224 | ] | 1224 | ] |
1225 | 1225 | ||
1226 | #在比对逻辑中添加字段 | ||
1227 | if '不接受支付宝/微信' in cms_info.get('autoApprovedDetails', {}).get('PolicyComments', ''): | ||
1228 | #bs_field_input.append((consts.SE_BS_FIELD[9], '不接受支付宝/微信')) | ||
1229 | allow_bs_type = '不接受支付宝/微信' | ||
1230 | else: | ||
1231 | #bs_field_input.append((consts.SE_BS_FIELD[9], '全部')) | ||
1232 | allow_bs_type = '全部' | ||
1233 | |||
1226 | dbr_bs_role_list = [] | 1234 | dbr_bs_role_list = [] |
1227 | for dbr_bs_role, _, _ in main_role_info.get(consts.APPLICANT_TYPE_ORDER[2], []): | 1235 | for dbr_bs_role, _, _ in main_role_info.get(consts.APPLICANT_TYPE_ORDER[2], []): |
1228 | dbr_bs_role_list.append(dbr_bs_role) | 1236 | dbr_bs_role_list.append(dbr_bs_role) |
... | @@ -1562,7 +1570,7 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d | ... | @@ -1562,7 +1570,7 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d |
1562 | contract_info[consts.AFC_CONTRACT_QRS_EN] = afc_contract_qrs_input | 1570 | contract_info[consts.AFC_CONTRACT_QRS_EN] = afc_contract_qrs_input |
1563 | 1571 | ||
1564 | compare_info['contract'] = contract_info | 1572 | compare_info['contract'] = contract_info |
1565 | return compare_info, cms_info.get('autoApprovedDetails', {}).get('aaType', ''), is_gsyh | 1573 | return compare_info, cms_info.get('autoApprovedDetails', {}).get('aaType', ''), is_gsyh, allow_bs_type |
1566 | 1574 | ||
1567 | 1575 | ||
1568 | def get_se_cms_compare_info(application_id, last_obj, application_entity, detect_list, data_source, auto=False, ignore_bank=False): | 1576 | def get_se_cms_compare_info(application_id, last_obj, application_entity, detect_list, data_source, auto=False, ignore_bank=False): |
... | @@ -1883,6 +1891,14 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect | ... | @@ -1883,6 +1891,14 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect |
1883 | (consts.SE_BS_FIELD[2], date_timedelta), | 1891 | (consts.SE_BS_FIELD[2], date_timedelta), |
1884 | ] | 1892 | ] |
1885 | 1893 | ||
1894 | #在比对逻辑中添加字段 | ||
1895 | if '不接受支付宝/微信' in cms_info.get('autoApprovedDetails', {}).get('PolicyComments', ''): | ||
1896 | #bs_field_input.append((consts.SE_BS_FIELD[9], '不接受支付宝/微信')) | ||
1897 | allow_bs_type = '不接受支付宝/微信' | ||
1898 | else: | ||
1899 | #bs_field_input.append((consts.SE_BS_FIELD[9], '全部')) | ||
1900 | allow_bs_type = '全部' | ||
1901 | |||
1886 | dbr_bs_role_list = [] | 1902 | dbr_bs_role_list = [] |
1887 | for dbr_bs_role, _, _ in main_role_info.get(consts.APPLICANT_TYPE_ORDER[2], []): | 1903 | for dbr_bs_role, _, _ in main_role_info.get(consts.APPLICANT_TYPE_ORDER[2], []): |
1888 | dbr_bs_role_list.append(dbr_bs_role) | 1904 | dbr_bs_role_list.append(dbr_bs_role) |
... | @@ -2187,10 +2203,10 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect | ... | @@ -2187,10 +2203,10 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect |
2187 | afc_contract_qrs_input = [(consts.SE_AFC_CON_QRS_FIELD[0], '{0}{1}{2}'.format(role_count, consts.SPLIT_STR, full_no))] | 2203 | afc_contract_qrs_input = [(consts.SE_AFC_CON_QRS_FIELD[0], '{0}{1}{2}'.format(role_count, consts.SPLIT_STR, full_no))] |
2188 | contract_info[consts.AFC_CONTRACT_QRS_EN] = afc_contract_qrs_input | 2204 | contract_info[consts.AFC_CONTRACT_QRS_EN] = afc_contract_qrs_input |
2189 | compare_info['contract'] = contract_info | 2205 | compare_info['contract'] = contract_info |
2190 | return compare_info, cms_info.get('applicationVersion', 1), cms_info.get('autoApprovedDetails', {}).get('aaType', ''), is_gsyh | 2206 | return compare_info, cms_info.get('applicationVersion', 1), cms_info.get('autoApprovedDetails', {}).get('aaType', ''), is_gsyh, allow_bs_type |
2191 | 2207 | ||
2192 | 2208 | ||
2193 | def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type): | 2209 | def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type, allow_bs_type): |
2194 | # 主共借至少提供一个 | 2210 | # 主共借至少提供一个 |
2195 | # 有担保人,担保人必须提供。主共借没有时,修改comment:人工查看担保人亲属关系 | 2211 | # 有担保人,担保人必须提供。主共借没有时,修改comment:人工查看担保人亲属关系 |
2196 | 2212 | ||
... | @@ -2204,6 +2220,7 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type): | ... | @@ -2204,6 +2220,7 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type): |
2204 | field_img_path_dict = dict() | 2220 | field_img_path_dict = dict() |
2205 | 2221 | ||
2206 | if ocr_res_str is not None: | 2222 | if ocr_res_str is not None: |
2223 | # 字段在比对逻辑中添加的,这个地方不用改,如果要是在get_info时添加,要改这个 | ||
2207 | pre_field_list = strip_list[:3] | 2224 | pre_field_list = strip_list[:3] |
2208 | dbr1_field_list = strip_list[3:6] | 2225 | dbr1_field_list = strip_list[3:6] |
2209 | dbr2_field_list = strip_list[6:] | 2226 | dbr2_field_list = strip_list[6:] |
... | @@ -2222,11 +2239,18 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type): | ... | @@ -2222,11 +2239,18 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type): |
2222 | auto_paper_verify_false_idx_list = [] | 2239 | auto_paper_verify_false_idx_list = [] |
2223 | auto_elec_verify_false_idx_list = [] | 2240 | auto_elec_verify_false_idx_list = [] |
2224 | 2241 | ||
2242 | all_zhifubao_weixin = True | ||
2243 | |||
2225 | for tmp_idx, ocr_res in enumerate(ocr_res_list): | 2244 | for tmp_idx, ocr_res in enumerate(ocr_res_list): |
2226 | correct_count = 0 | 2245 | correct_count = 0 |
2227 | pre_tmp_res_part = {} | 2246 | pre_tmp_res_part = {} |
2228 | verify_bool = ocr_res.get('verify', False) | 2247 | verify_bool = ocr_res.get('verify', False) |
2229 | e_bank = ocr_res.get('e_bank', False) | 2248 | e_bank = ocr_res.get('e_bank', False) |
2249 | bankStatement_type = ocr_res.get('bankStatement_type', '') | ||
2250 | # 如果是高风险经销商,cms信息中包含‘不接受支付宝/微信’,但是识别出的流水是支付宝/微信,直接跳过这个文件,就当不存在 | ||
2251 | if allow_bs_type == '不接受支付宝/微信' and bankStatement_type in [12, 13, 48]: | ||
2252 | continue | ||
2253 | all_zhifubao_weixin = False | ||
2230 | #verify_list.append(verify_bool) | 2254 | #verify_list.append(verify_bool) |
2231 | if not verify_bool: | 2255 | if not verify_bool: |
2232 | verify_false_idx_list.append(str(tmp_idx+1)) | 2256 | verify_false_idx_list.append(str(tmp_idx+1)) |
... | @@ -2311,11 +2335,23 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type): | ... | @@ -2311,11 +2335,23 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type): |
2311 | reason = reason1 + reason2 | 2335 | reason = reason1 + reason2 |
2312 | result_field_list.append((name, empty_str, result, json.dumps(verify_list, ensure_ascii=False), empty_str, empty_error_type, reason)) | 2336 | result_field_list.append((name, empty_str, result, json.dumps(verify_list, ensure_ascii=False), empty_str, empty_error_type, reason)) |
2313 | 2337 | ||
2338 | |||
2339 | if all_zhifubao_weixin: | ||
2340 | # 核查点名称,cms传值,比对结果,ocr结果,图片路径,错误类型,错误描述 | ||
2341 | result_field_list.append(('类型', allow_bs_type, consts.RESULT_N, '全部为支付宝/微信', empty_str, empty_error_type, '高风险经销商流水类型异常')) | ||
2342 | else: | ||
2343 | result_field_list.append(('类型', allow_bs_type, consts.RESULT_Y, '包含支付宝/微信以外流水', empty_str, empty_error_type, '')) | ||
2344 | |||
2314 | # 担保人1 | 2345 | # 担保人1 |
2315 | dbr1_best_res = {} | 2346 | dbr1_best_res = {} |
2316 | if len(dbr1_field_list) > 0: | 2347 | if len(dbr1_field_list) > 0: |
2317 | max_correct_count = 0 | 2348 | max_correct_count = 0 |
2318 | for ocr_res in ocr_res_list: | 2349 | for ocr_res in ocr_res_list: |
2350 | bankStatement_type = ocr_res.get('bankStatement_type', '') | ||
2351 | # 如果是高风险经销商,cms信息中包含‘不接受支付宝/微信’,但是识别出的流水是支付宝/微信,直接跳过这个文件,就当不存在 | ||
2352 | if allow_bs_type == '不接受支付宝/微信' and bankStatement_type in [12, 13, 48]: | ||
2353 | continue | ||
2354 | |||
2319 | correct_count = 0 | 2355 | correct_count = 0 |
2320 | dbr1_tmp_res_part = {} | 2356 | dbr1_tmp_res_part = {} |
2321 | for idx, (name, value) in enumerate(dbr1_field_list): | 2357 | for idx, (name, value) in enumerate(dbr1_field_list): |
... | @@ -2348,6 +2384,10 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type): | ... | @@ -2348,6 +2384,10 @@ def se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type): |
2348 | if len(dbr1_field_list) > 0: | 2384 | if len(dbr1_field_list) > 0: |
2349 | max_correct_count = 0 | 2385 | max_correct_count = 0 |
2350 | for ocr_res in ocr_res_list: | 2386 | for ocr_res in ocr_res_list: |
2387 | bankStatement_type = ocr_res.get('bankStatement_type', '') | ||
2388 | # 如果是高风险经销商,cms信息中包含‘不接受支付宝/微信’,但是识别出的流水是支付宝/微信,直接跳过这个文件,就当不存在 | ||
2389 | if allow_bs_type == '不接受支付宝/微信' and bankStatement_type in [12, 13, 48]: | ||
2390 | continue | ||
2351 | correct_count = 0 | 2391 | correct_count = 0 |
2352 | dbr2_tmp_res_part = {} | 2392 | dbr2_tmp_res_part = {} |
2353 | for idx, (name, value) in enumerate(dbr2_field_list): | 2393 | for idx, (name, value) in enumerate(dbr2_field_list): |
... | @@ -3255,7 +3295,7 @@ def se_mvc34_compare(license_en, ocr_res_dict, field_list): | ... | @@ -3255,7 +3295,7 @@ def se_mvc34_compare(license_en, ocr_res_dict, field_list): |
3255 | return result_field_list, field_img_path_dict | 3295 | return result_field_list, field_img_path_dict |
3256 | 3296 | ||
3257 | 3297 | ||
3258 | def se_compare_process(compare_info, ocr_res_dict, is_gsyh, is_auto, id_res_list, aa_type): | 3298 | def se_compare_process(compare_info, ocr_res_dict, is_gsyh, is_auto, id_res_list, aa_type, allow_bs_type): |
3259 | # individualCusInfo | 3299 | # individualCusInfo |
3260 | # corporateCusInfo | 3300 | # corporateCusInfo |
3261 | # vehicleInfo | 3301 | # vehicleInfo |
... | @@ -3352,7 +3392,8 @@ def se_compare_process(compare_info, ocr_res_dict, is_gsyh, is_auto, id_res_list | ... | @@ -3352,7 +3392,8 @@ def se_compare_process(compare_info, ocr_res_dict, is_gsyh, is_auto, id_res_list |
3352 | elif license_en == consts.AFC_CONTRACT_QRS_EN: | 3392 | elif license_en == consts.AFC_CONTRACT_QRS_EN: |
3353 | result_field_list, field_img_path_dict = se_contract_qrs_compare(license_en, ocr_res_dict, strip_list) | 3393 | result_field_list, field_img_path_dict = se_contract_qrs_compare(license_en, ocr_res_dict, strip_list) |
3354 | elif license_en == consts.BS_EN: | 3394 | elif license_en == consts.BS_EN: |
3355 | result_field_list, field_img_path_dict = se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type) | 3395 | # 银行流水的比对,是只要有正确的就可以,所以没有按照时间顺序,先比最新的,在比最早的,如果以后要改逻辑,切记这个 |
3396 | result_field_list, field_img_path_dict = se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type, allow_bs_type) | ||
3356 | elif license_en == consts.FS_EN: | 3397 | elif license_en == consts.FS_EN: |
3357 | result_field_list, field_img_path_dict = se_fs_compare(license_en, ocr_res_dict, strip_list) | 3398 | result_field_list, field_img_path_dict = se_fs_compare(license_en, ocr_res_dict, strip_list) |
3358 | else: | 3399 | else: |
... | @@ -3441,11 +3482,11 @@ def se_compare_auto(application_id, application_entity, ocr_res_id, last_obj, oc | ... | @@ -3441,11 +3482,11 @@ def se_compare_auto(application_id, application_entity, ocr_res_id, last_obj, oc |
3441 | try: | 3482 | try: |
3442 | # 比对逻辑 | 3483 | # 比对逻辑 |
3443 | # detect_list = se_result_detect(ocr_res_dict) | 3484 | # detect_list = se_result_detect(ocr_res_dict) |
3444 | compare_info, aa_type, is_gsyh = get_se_cms_compare_info_auto( | 3485 | compare_info, aa_type, is_gsyh, allow_bs_type = get_se_cms_compare_info_auto( |
3445 | application_id, last_obj, application_entity, data_source, ignore_bank=ignore_bank) | 3486 | application_id, last_obj, application_entity, data_source, ignore_bank=ignore_bank) |
3446 | compare_result, total_fields, failed_count, successful_at_this_level, failure_reason_str, \ | 3487 | compare_result, total_fields, failed_count, successful_at_this_level, failure_reason_str, \ |
3447 | cn_failure_reason_str, bs_failure_reason_str, _, field_result_dict = se_compare_process( | 3488 | cn_failure_reason_str, bs_failure_reason_str, _, field_result_dict = se_compare_process( |
3448 | compare_info, ocr_res_dict, is_gsyh, True, id_res_list, aa_type) | 3489 | compare_info, ocr_res_dict, is_gsyh, True, id_res_list, aa_type, allow_bs_type) |
3449 | compare_log.info('{0} [Auto SE] [compare success] [entity={1}] [id={2}] [ocr_res_id={3}] [result={4}]'.format( | 3490 | compare_log.info('{0} [Auto SE] [compare success] [entity={1}] [id={2}] [ocr_res_id={3}] [result={4}]'.format( |
3450 | log_base, application_entity, application_id, ocr_res_id, compare_result)) | 3491 | log_base, application_entity, application_id, ocr_res_id, compare_result)) |
3451 | except Exception as e: | 3492 | except Exception as e: |
... | @@ -3508,11 +3549,11 @@ def se_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res | ... | @@ -3508,11 +3549,11 @@ def se_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res |
3508 | # 比对逻辑 | 3549 | # 比对逻辑 |
3509 | start_time = datetime.now() | 3550 | start_time = datetime.now() |
3510 | detect_list = se_result_detect(ocr_res_dict) | 3551 | detect_list = se_result_detect(ocr_res_dict) |
3511 | compare_info, application_version, aa_type, is_gsyh = get_se_cms_compare_info( | 3552 | compare_info, application_version, aa_type, is_gsyh, allow_bs_type = get_se_cms_compare_info( |
3512 | application_id, last_obj, application_entity, detect_list, data_source, ignore_bank=ignore_bank) | 3553 | application_id, last_obj, application_entity, detect_list, data_source, ignore_bank=ignore_bank) |
3513 | compare_result, total_fields, failed_count, successful_at_this_level, failure_reason_str, \ | 3554 | compare_result, total_fields, failed_count, successful_at_this_level, failure_reason_str, \ |
3514 | cn_failure_reason_str, bs_failure_reason_str, rpa_failure_reason, field_result_dict = se_compare_process( | 3555 | cn_failure_reason_str, bs_failure_reason_str, rpa_failure_reason, field_result_dict = se_compare_process( |
3515 | compare_info, ocr_res_dict, is_gsyh, False, id_res_list, aa_type) | 3556 | compare_info, ocr_res_dict, is_gsyh, False, id_res_list, aa_type, allow_bs_type) |
3516 | compare_log.info('{0} [SE] [compare success] [entity={1}] [id={2}] [ocr_res_id={3}] [result={4}]'.format( | 3557 | compare_log.info('{0} [SE] [compare success] [entity={1}] [id={2}] [ocr_res_id={3}] [result={4}]'.format( |
3517 | log_base, application_entity, application_id, ocr_res_id, compare_result)) | 3558 | log_base, application_entity, application_id, ocr_res_id, compare_result)) |
3518 | except Exception as e: | 3559 | except Exception as e: | ... | ... |
-
Please register or sign in to post a comment