init 5015
Showing
2 changed files
with
44 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 | '类型': ('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: | ... | ... |
-
Please register or sign in to post a comment