8b3fd09a by 周伟奇

add bs compare

1 parent 44e363a2
...@@ -1179,6 +1179,8 @@ HMH_OCR_FIELD = 'hmh_ocr' ...@@ -1179,6 +1179,8 @@ HMH_OCR_FIELD = 'hmh_ocr'
1179 JYPZ_OCR_FIELD = 'jypz_ocr' 1179 JYPZ_OCR_FIELD = 'jypz_ocr'
1180 HT_FIELD = 'ht_ocr' 1180 HT_FIELD = 'ht_ocr'
1181 BD_FIELD = 'bd_ocr' 1181 BD_FIELD = 'bd_ocr'
1182 BS_FIELD = 'bss_ocr'
1183 BS_CLASSIFY = 10087
1182 1184
1183 RESULT_MAPPING = { 1185 RESULT_MAPPING = {
1184 MVI_CLASSIFY: MVI_OCR_FIELD, 1186 MVI_CLASSIFY: MVI_OCR_FIELD,
...@@ -1197,9 +1199,10 @@ RESULT_MAPPING = { ...@@ -1197,9 +1199,10 @@ RESULT_MAPPING = {
1197 JYPZ_CLASSIFY: JYPZ_OCR_FIELD, 1199 JYPZ_CLASSIFY: JYPZ_OCR_FIELD,
1198 CONTRACT_CLASSIFY: HT_FIELD, 1200 CONTRACT_CLASSIFY: HT_FIELD,
1199 INSURANCE_CLASSIFY: BD_FIELD, 1201 INSURANCE_CLASSIFY: BD_FIELD,
1202 BS_CLASSIFY: BS_FIELD,
1200 } 1203 }
1201 1204
1202 CA_ADD_COMPARE_FIELDS = (IC_OCR_FIELD, BL_OCR_FIELD) 1205 CA_ADD_COMPARE_FIELDS = (IC_OCR_FIELD, BL_OCR_FIELD, BS_FIELD)
1203 1206
1204 COMPARE_FIELDS = (MVI_OCR_FIELD, 1207 COMPARE_FIELDS = (MVI_OCR_FIELD,
1205 IC_OCR_FIELD, 1208 IC_OCR_FIELD,
...@@ -1216,6 +1219,7 @@ COMPARE_FIELDS = (MVI_OCR_FIELD, ...@@ -1216,6 +1219,7 @@ COMPARE_FIELDS = (MVI_OCR_FIELD,
1216 JYPZ_OCR_FIELD, 1219 JYPZ_OCR_FIELD,
1217 HT_FIELD, 1220 HT_FIELD,
1218 BD_FIELD, 1221 BD_FIELD,
1222 BS_FIELD,
1219 ) 1223 )
1220 1224
1221 # 身份证 1225 # 身份证
...@@ -1396,6 +1400,7 @@ SE_STAMP_VALUE = '有' ...@@ -1396,6 +1400,7 @@ SE_STAMP_VALUE = '有'
1396 SE_LAYOUT_VALUE = '旧版-旧打印、新版-新打印' 1400 SE_LAYOUT_VALUE = '旧版-旧打印、新版-新打印'
1397 SE_GB_NEW_FIELD = ['vinNo'] 1401 SE_GB_NEW_FIELD = ['vinNo']
1398 SE_GB_USED_FIELD = ['customerName', 'idNum', 'date'] 1402 SE_GB_USED_FIELD = ['customerName', 'idNum', 'date']
1403 SE_BS_FIELD = ['户名', '打印日期', '流水日期', '(担保人)户名', '(担保人)打印日期', '(担保人)流水日期']
1399 SE_HMH_FIELD = ['借款人/承租人姓名', '借款人/承租人证件号', '申请号', '渠道', '签字'] 1404 SE_HMH_FIELD = ['借款人/承租人姓名', '借款人/承租人证件号', '申请号', '渠道', '签字']
1400 SE_BD_FIELD = ['被保险人姓名', '被保险人证件号码', '车架号', '机动车损失保险金额', '第三者责任保险金额', '绝对免赔率', '保险起始日期', '保险截止日期', '保单章', '第一受益人', '保险费合计'] 1405 SE_BD_FIELD = ['被保险人姓名', '被保险人证件号码', '车架号', '机动车损失保险金额', '第三者责任保险金额', '绝对免赔率', '保险起始日期', '保险截止日期', '保单章', '第一受益人', '保险费合计']
1401 JDMPV_VALUE = ['-', '--', '0%', '0.00', '/', '0'] 1406 JDMPV_VALUE = ['-', '--', '0%', '0.00', '/', '0']
...@@ -1508,6 +1513,7 @@ HMH_EN = 'Mortgage Waiver Letter' ...@@ -1508,6 +1513,7 @@ HMH_EN = 'Mortgage Waiver Letter'
1508 JYPZ_EN = 'Used Car Document' 1513 JYPZ_EN = 'Used Car Document'
1509 AFC_CONTRACT_EN = 'AFC Contract' 1514 AFC_CONTRACT_EN = 'AFC Contract'
1510 BD_EN = 'Insurance' 1515 BD_EN = 'Insurance'
1516 BS_EN = 'Bank Statement'
1511 1517
1512 SKIP_CARD = {SME_BL_EN} 1518 SKIP_CARD = {SME_BL_EN}
1513 1519
...@@ -1663,6 +1669,17 @@ BD_COMPARE_LOGIC = { ...@@ -1663,6 +1669,17 @@ BD_COMPARE_LOGIC = {
1663 '保险费合计': ('保险费合计', 'se_amount_compare', {}, '保单保费疑似无法覆盖ASP保险融资'), 1669 '保险费合计': ('保险费合计', 'se_amount_compare', {}, '保单保费疑似无法覆盖ASP保险融资'),
1664 } 1670 }
1665 1671
1672 BS_COMPARE_LOGIC = {
1673 '户名': ('role', 'se_one_compare', {}, '主共借人未提供银行流水'),
1674 '(担保人)户名': ('role', 'se_one_compare', {}, '担保人未提供银行流水,需人工查看直系亲属关系'),
1675 '打印日期': ('print_time', 'se_bs_print_date_compare', {}, '主共借人银行流水打印日期异常'),
1676 '(担保人)打印日期': ('print_time', 'se_bs_print_date_compare', {}, '担保人银行流水打印日期异常'),
1677 '流水日期': ('date', 'se_bs_date_compare', {}, '主共借人银行流水日期异常'),
1678 '(担保人)流水日期': ('date', 'se_bs_date_compare', {}, '担保人银行流水日期异常'),
1679 }
1680
1681 SPECIAL_REASON = '主共借人未提供银行流水,含担保人需人工查看直系亲属关系'
1682
1666 HT_COMPARE_LOGIC = { 1683 HT_COMPARE_LOGIC = {
1667 '合同编号-每页': ('合同编号-每页', 'se_list_compare', {}, '合同编号与系统不一致'), 1684 '合同编号-每页': ('合同编号-每页', 'se_list_compare', {}, '合同编号与系统不一致'),
1668 '所购车辆价格-小写-重要条款': ('所购车辆价格-小写-重要条款', 'se_amount_str_compare', {}, '合同首页中车辆价格与系统不一致'), 1685 '所购车辆价格-小写-重要条款': ('所购车辆价格-小写-重要条款', 'se_amount_str_compare', {}, '合同首页中车辆价格与系统不一致'),
...@@ -1732,6 +1749,7 @@ SE_COMPARE_FIELD = { ...@@ -1732,6 +1749,7 @@ SE_COMPARE_FIELD = {
1732 JYPZ_EN: (JYPZ_OCR_FIELD, JYPZ_COMPARE_LOGIC, False), 1749 JYPZ_EN: (JYPZ_OCR_FIELD, JYPZ_COMPARE_LOGIC, False),
1733 AFC_CONTRACT_EN: (HT_FIELD, HT_COMPARE_LOGIC, False), 1750 AFC_CONTRACT_EN: (HT_FIELD, HT_COMPARE_LOGIC, False),
1734 BD_EN: (BD_FIELD, BD_COMPARE_LOGIC, False), 1751 BD_EN: (BD_FIELD, BD_COMPARE_LOGIC, False),
1752 BS_EN: (BS_FIELD, BS_COMPARE_LOGIC, False),
1735 } 1753 }
1736 1754
1737 1755
......
...@@ -872,6 +872,43 @@ class Command(BaseCommand, LoggerMixin): ...@@ -872,6 +872,43 @@ class Command(BaseCommand, LoggerMixin):
872 summary['role'] = self.get_most(summary['role']) 872 summary['role'] = self.get_most(summary['role'])
873 return bs_summary 873 return bs_summary
874 874
875 def rebuild_bs(self, bs_summary):
876 # bs_summary = {
877 # '卡号': {
878 # 'classify': 0,
879 # 'confidence': 0.9,
880 # 'role': '柳雪',
881 # 'code': [('page', 'code'), ],
882 # 'verify': [(pno, ino, reason_str), ]
883 # 'print_time': 'datetime',
884 # 'start_date': 'datetime',
885 # 'end_date': 'datetime',
886 # 'sheet': ['sheet_name']
887 # }
888 # }
889 res = []
890 for bs_info in bs_summary.values():
891 try:
892 print_date = bs_info.get('print_time', '').strftime("%Y-%m-%d")
893 except Exception as e:
894 print_date = ''
895 try:
896 start_date = bs_info.get('start_date', '').strftime("%Y-%m-%d")
897 except Exception as e:
898 start_date = ''
899 try:
900 end_date = bs_info.get('end_date', '').strftime("%Y-%m-%d")
901 except Exception as e:
902 end_date = ''
903 res.append(
904 {
905 'role': bs_info.get('role', ''),
906 'print_time': print_date,
907 'date': [start_date, end_date],
908 }
909 )
910 return res
911
875 def rebuild_contract(self, contract_result_compare): 912 def rebuild_contract(self, contract_result_compare):
876 res_list = [] 913 res_list = []
877 for classify, page_info_dict in contract_result_compare.items(): 914 for classify, page_info_dict in contract_result_compare.items():
...@@ -1626,6 +1663,10 @@ class Command(BaseCommand, LoggerMixin): ...@@ -1626,6 +1663,10 @@ class Command(BaseCommand, LoggerMixin):
1626 if len(contract_result_compare_rebuild) > 0: 1663 if len(contract_result_compare_rebuild) > 0:
1627 license_summary[consts.CONTRACT_CLASSIFY] = contract_result_compare_rebuild 1664 license_summary[consts.CONTRACT_CLASSIFY] = contract_result_compare_rebuild
1628 1665
1666 bs_rebuild = self.rebuild_bs(merged_bs_summary)
1667 if len(bs_rebuild) > 0:
1668 license_summary[consts.BS_CLASSIFY] = bs_rebuild
1669
1629 # 比对 1670 # 比对
1630 if len(license_summary) > 0 and doc.document_scheme != consts.DOC_SCHEME_LIST[2]: 1671 if len(license_summary) > 0 and doc.document_scheme != consts.DOC_SCHEME_LIST[2]:
1631 try: 1672 try:
......
...@@ -315,6 +315,7 @@ class AFCOCRResult(models.Model): ...@@ -315,6 +315,7 @@ class AFCOCRResult(models.Model):
315 jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证") 315 jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证")
316 ht_ocr = models.TextField(null=True, verbose_name="AFC合同") 316 ht_ocr = models.TextField(null=True, verbose_name="AFC合同")
317 bd_ocr = models.TextField(null=True, verbose_name="保单") 317 bd_ocr = models.TextField(null=True, verbose_name="保单")
318 bss_ocr = models.TextField(null=True, verbose_name="银行流水")
318 319
319 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') 320 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
320 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') 321 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
...@@ -346,6 +347,7 @@ class HILOCRResult(models.Model): ...@@ -346,6 +347,7 @@ class HILOCRResult(models.Model):
346 jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证") 347 jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证")
347 ht_ocr = models.TextField(null=True, verbose_name="AFC合同") 348 ht_ocr = models.TextField(null=True, verbose_name="AFC合同")
348 bd_ocr = models.TextField(null=True, verbose_name="保单") 349 bd_ocr = models.TextField(null=True, verbose_name="保单")
350 bss_ocr = models.TextField(null=True, verbose_name="银行流水")
349 351
350 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') 352 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
351 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') 353 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
...@@ -376,6 +378,7 @@ class AFCSEOCRResult(models.Model): ...@@ -376,6 +378,7 @@ class AFCSEOCRResult(models.Model):
376 jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证") 378 jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证")
377 ht_ocr = models.TextField(null=True, verbose_name="AFC合同") 379 ht_ocr = models.TextField(null=True, verbose_name="AFC合同")
378 bd_ocr = models.TextField(null=True, verbose_name="保单") 380 bd_ocr = models.TextField(null=True, verbose_name="保单")
381 bss_ocr = models.TextField(null=True, verbose_name="银行流水")
379 382
380 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') 383 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
381 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') 384 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
...@@ -407,6 +410,7 @@ class HILSEOCRResult(models.Model): ...@@ -407,6 +410,7 @@ class HILSEOCRResult(models.Model):
407 jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证") 410 jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证")
408 ht_ocr = models.TextField(null=True, verbose_name="AFC合同") 411 ht_ocr = models.TextField(null=True, verbose_name="AFC合同")
409 bd_ocr = models.TextField(null=True, verbose_name="保单") 412 bd_ocr = models.TextField(null=True, verbose_name="保单")
413 bss_ocr = models.TextField(null=True, verbose_name="银行流水")
410 414
411 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') 415 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
412 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') 416 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
......
...@@ -971,7 +971,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list): ...@@ -971,7 +971,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
971 vehicle_info = {} 971 vehicle_info = {}
972 vehicle_field_input = [] 972 vehicle_field_input = []
973 vehicle_status = cms_info.get('vehicleStatus', '') 973 vehicle_status = cms_info.get('vehicleStatus', '')
974 first_submmison_date = cms_info.get('submissionDate', '') 974 first_submission_date = cms_info.get('submissionDate', '')
975 vin_no = cms_info.get('vehicleInformation', {}).get('vinNo', '') 975 vin_no = cms_info.get('vehicleInformation', {}).get('vinNo', '')
976 amount = str(cms_info.get('financialInformation', {}).get('vehiclePrice', '0.0')) 976 amount = str(cms_info.get('financialInformation', {}).get('vehiclePrice', '0.0'))
977 # 新车发票---------------------------------------------------------------------------------------------------------- 977 # 新车发票----------------------------------------------------------------------------------------------------------
...@@ -986,7 +986,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list): ...@@ -986,7 +986,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
986 else: 986 else:
987 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[0], hmh_name)) 987 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[0], hmh_name))
988 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[1], hmh_id)) 988 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[1], hmh_id))
989 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[2], first_submmison_date)) 989 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[2], first_submission_date))
990 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[3], consts.SE_STAMP_VALUE)) 990 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[3], consts.SE_STAMP_VALUE))
991 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[4], consts.SE_FPL_VALUE)) 991 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[4], consts.SE_FPL_VALUE))
992 bhsj = float(amount) / 1.13 992 bhsj = float(amount) / 1.13
...@@ -1020,12 +1020,12 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list): ...@@ -1020,12 +1020,12 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
1020 jypz_field_input.append((consts.SE_NEW_ADD_FIELD[1], main_num)) 1020 jypz_field_input.append((consts.SE_NEW_ADD_FIELD[1], main_num))
1021 gb34_field_input.append((consts.SE_GB_USED_FIELD[0], main_name)) 1021 gb34_field_input.append((consts.SE_GB_USED_FIELD[0], main_name))
1022 gb34_field_input.append((consts.SE_GB_USED_FIELD[1], main_num)) 1022 gb34_field_input.append((consts.SE_GB_USED_FIELD[1], main_num))
1023 gb34_field_input.append((consts.SE_GB_USED_FIELD[2], first_submmison_date)) 1023 gb34_field_input.append((consts.SE_GB_USED_FIELD[2], first_submission_date))
1024 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[2], first_submmison_date)) 1024 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[2], first_submission_date))
1025 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[3], consts.SE_STAMP_VALUE)) 1025 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[3], consts.SE_STAMP_VALUE))
1026 jypz_field_input.append(('vinNo', vin_no)) 1026 jypz_field_input.append(('vinNo', vin_no))
1027 jypz_field_input.append(('vehicleTransactionAmount', amount)) 1027 jypz_field_input.append(('vehicleTransactionAmount', amount))
1028 jypz_field_input.append((consts.SE_GB_USED_FIELD[-1], first_submmison_date)) 1028 jypz_field_input.append((consts.SE_GB_USED_FIELD[-1], first_submission_date))
1029 1029
1030 vehicle_info[consts.MVC_EN] = gb_field_input 1030 vehicle_info[consts.MVC_EN] = gb_field_input
1031 vehicle_info[consts.MVC34_EN] = gb34_field_input 1031 vehicle_info[consts.MVC34_EN] = gb34_field_input
...@@ -1064,6 +1064,34 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list): ...@@ -1064,6 +1064,34 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
1064 bank_info[consts.DDA_EN] = dda_field_input 1064 bank_info[consts.DDA_EN] = dda_field_input
1065 compare_info['bankInfo'] = bank_info 1065 compare_info['bankInfo'] = bank_info
1066 1066
1067 # 银行流水 --------------------------------------------------------------------
1068 if cms_info.get('autoApprovedDetails', {}).get('aaType', '') in ['CAA1', 'CAA2']:
1069 bs_role_list = []
1070 for applicant_type in consts.APPLICANT_TYPE_ORDER[:2]:
1071 if applicant_type in main_role_info:
1072 for bs_role, _, _ in main_role_info[applicant_type]:
1073 bs_role_list.append(bs_role)
1074
1075 bs_info = dict()
1076 bs_field_input = [
1077 (consts.SE_BS_FIELD[0], bs_role_list),
1078 (consts.SE_BS_FIELD[1], first_submission_date),
1079 (consts.SE_BS_FIELD[2], '90天'),
1080 ]
1081
1082 dbr_bs_role_list = []
1083 for dbr_bs_role, _, _ in main_role_info.get(consts.APPLICANT_TYPE_ORDER[2], []):
1084 dbr_bs_role_list.append(dbr_bs_role)
1085 if len(dbr_bs_role_list) > 0:
1086 bs_field_input.extend([
1087 (consts.SE_BS_FIELD[3], dbr_bs_role_list),
1088 (consts.SE_BS_FIELD[4], first_submission_date),
1089 (consts.SE_BS_FIELD[5], '90天'),
1090 ])
1091 bs_info[consts.BS_EN] = bs_field_input
1092 compare_info['Bank Statement'] = bs_info
1093
1094
1067 # 抵押登记豁免函---------------------------------------------------------------------------------------------------- 1095 # 抵押登记豁免函----------------------------------------------------------------------------------------------------
1068 other_info = {} 1096 other_info = {}
1069 full_no = cms_info.get('settlemnetVerification', {}).get('applicationNo', '') 1097 full_no = cms_info.get('settlemnetVerification', {}).get('applicationNo', '')
...@@ -1408,6 +1436,124 @@ def get_se_compare_info(last_obj, application_entity, detect_list): ...@@ -1408,6 +1436,124 @@ def get_se_compare_info(last_obj, application_entity, detect_list):
1408 return compare_info 1436 return compare_info
1409 1437
1410 1438
1439 def se_bs_compare(license_en, ocr_res_dict, strip_list):
1440 # 主共借至少提供一个
1441 # 有担保人,担保人必须提供。主共借没有时,修改comment:人工查看担保人亲属关系
1442
1443 ocr_field, compare_logic, _ = consts.SE_COMPARE_FIELD[license_en]
1444 ocr_res_str = ocr_res_dict.get(ocr_field)
1445
1446 result_field_list = []
1447 field_img_path_dict = dict()
1448
1449 if ocr_res_str is not None:
1450 pre_field_list = strip_list[:3]
1451 suf_field_list = strip_list[3:]
1452
1453 ocr_res_list = json.loads(ocr_res_str)
1454 # length = len(ocr_res_list)
1455
1456 # 主共借人
1457 pre_best_res = {}
1458 max_correct_count = 0
1459 for ocr_res in ocr_res_list:
1460 correct_count = 0
1461 pre_tmp_res_part = {}
1462 for idx, (name, value) in enumerate(pre_field_list):
1463 ocr_str_or_list = ocr_res.get(compare_logic[name][0])
1464 if isinstance(ocr_str_or_list, str) or isinstance(ocr_str_or_list, list):
1465 result = getattr(cp, compare_logic[name][1])(value, ocr_str_or_list, **compare_logic[name][2])
1466 if isinstance(ocr_str_or_list, list):
1467 ocr_str = json.dumps(ocr_str_or_list, ensure_ascii=False)
1468 else:
1469 ocr_str = ocr_str_or_list
1470 reason = compare_logic[name][3]
1471 else:
1472 result = consts.RESULT_N
1473 ocr_str = empty_str
1474 reason = compare_logic[name][3]
1475
1476 if idx == 0 and result == consts.RESULT_N:
1477 break
1478
1479 if result == consts.RESULT_Y:
1480 correct_count += 1
1481 pre_tmp_res_part[name] = (result, ocr_str, reason)
1482
1483 if correct_count > 0 and correct_count >= max_correct_count:
1484 max_correct_count = correct_count
1485 pre_best_res = pre_tmp_res_part
1486
1487 for name, value in pre_field_list:
1488 if len(pre_best_res) > 0:
1489 result, ocr_str, reason = pre_best_res[name]
1490 else:
1491 result = consts.RESULT_N
1492 ocr_str = empty_str
1493 if len(suf_field_list) > 0:
1494 reason = consts.SPECIAL_REASON
1495 else:
1496 reason = compare_logic[pre_field_list[0][0]][3]
1497 img_path = empty_str
1498 error_type = empty_error_type if result == consts.RESULT_Y else ErrorType.OCR.value
1499 if isinstance(value, list):
1500 value = json.dumps(value, ensure_ascii=False)
1501 result_field_list.append((name, value, result, ocr_str, img_path, error_type, reason))
1502
1503 # 担保人
1504 if len(suf_field_list) > 0:
1505 suf_best_res = {}
1506 max_correct_count = 0
1507 for ocr_res in ocr_res_list:
1508 correct_count = 0
1509 suf_tmp_res_part = {}
1510 for idx, (name, value) in enumerate(suf_field_list):
1511 ocr_str_or_list = ocr_res.get(compare_logic[name][0])
1512 if isinstance(ocr_str_or_list, str) or isinstance(ocr_str_or_list, list):
1513 result = getattr(cp, compare_logic[name][1])(value, ocr_str_or_list, **compare_logic[name][2])
1514 if isinstance(ocr_str_or_list, list):
1515 ocr_str = json.dumps(ocr_str_or_list, ensure_ascii=False)
1516 else:
1517 ocr_str = ocr_str_or_list
1518 reason = compare_logic[name][3]
1519 else:
1520 result = consts.RESULT_N
1521 ocr_str = empty_str
1522 reason = compare_logic[name][3]
1523
1524 if idx == 0 and result == consts.RESULT_N:
1525 break
1526
1527 if result == consts.RESULT_Y:
1528 correct_count += 1
1529 suf_tmp_res_part[name] = (result, ocr_str, reason)
1530
1531 if correct_count > 0 and correct_count >= max_correct_count:
1532 max_correct_count = correct_count
1533 suf_best_res = suf_tmp_res_part
1534
1535 for name, value in suf_field_list:
1536 if len(suf_best_res) > 0:
1537 result, ocr_str, reason = suf_best_res[name]
1538 else:
1539 result = consts.RESULT_N
1540 ocr_str = empty_str
1541 reason = compare_logic[suf_field_list[0][0]][3]
1542 img_path = empty_str
1543 error_type = empty_error_type if result == consts.RESULT_Y else ErrorType.OCR.value
1544 if isinstance(value, list):
1545 value = json.dumps(value, ensure_ascii=False)
1546 result_field_list.append((name, value, result, ocr_str, img_path, error_type, reason))
1547 else:
1548 for name, value in strip_list:
1549 if isinstance(value, list):
1550 value = json.dumps(value, ensure_ascii=False)
1551 result_field_list.append((name, value, consts.RESULT_N, empty_str, empty_str, ErrorType.NF.value,
1552 '未提供银行流水'))
1553
1554 return result_field_list, field_img_path_dict
1555
1556
1411 def se_compare_license(license_en, ocr_res_dict, field_list): 1557 def se_compare_license(license_en, ocr_res_dict, field_list):
1412 ocr_field, compare_logic, special_expiry_date = consts.SE_COMPARE_FIELD[license_en] 1558 ocr_field, compare_logic, special_expiry_date = consts.SE_COMPARE_FIELD[license_en]
1413 1559
...@@ -1816,6 +1962,8 @@ def se_compare_process(compare_info, ocr_res_dict): ...@@ -1816,6 +1962,8 @@ def se_compare_process(compare_info, ocr_res_dict):
1816 result_field_list, field_img_path_dict = se_mvc34_compare(license_en, ocr_res_dict, strip_list) 1962 result_field_list, field_img_path_dict = se_mvc34_compare(license_en, ocr_res_dict, strip_list)
1817 elif license_en == consts.AFC_CONTRACT_EN: 1963 elif license_en == consts.AFC_CONTRACT_EN:
1818 result_field_list, field_img_path_dict = se_afc_contract_compare(license_en, ocr_res_dict, strip_list) 1964 result_field_list, field_img_path_dict = se_afc_contract_compare(license_en, ocr_res_dict, strip_list)
1965 elif license_en == consts.BS_EN:
1966 result_field_list, field_img_path_dict = se_bs_compare(license_en, ocr_res_dict, strip_list)
1819 else: 1967 else:
1820 result_field_list, _, field_img_path_dict = se_compare_license(license_en, ocr_res_dict, strip_list) 1968 result_field_list, _, field_img_path_dict = se_compare_license(license_en, ocr_res_dict, strip_list)
1821 for name, value, result, ocr_str, img_path, error_type, cn_reason in result_field_list: 1969 for name, value, result, ocr_str, img_path, error_type, cn_reason in result_field_list:
......
...@@ -472,6 +472,28 @@ class Comparison: ...@@ -472,6 +472,28 @@ class Comparison:
472 except Exception as e: 472 except Exception as e:
473 return self.RESULT_N 473 return self.RESULT_N
474 474
475 def se_bs_print_date_compare(self, input_str, ocr_str, **kwargs):
476 try:
477 input_date = datetime.strptime(input_str, "%Y-%m-%d")
478 ocr_date = datetime.strptime(ocr_str, "%Y-%m-%d")
479 if ocr_date >= input_date - relativedelta(days=15):
480 return self.RESULT_Y
481 return self.RESULT_N
482 except Exception as e:
483 return self.RESULT_N
484
485 def se_bs_date_compare(self, input_str, ocr_str_list, **kwargs):
486 if isinstance(ocr_str_list, list) and len(ocr_str_list) == 2:
487 try:
488 start_date = datetime.strptime(ocr_str_list[0], "%Y-%m-%d")
489 end_date = datetime.strptime(ocr_str_list[1], "%Y-%m-%d")
490 if end_date >= start_date + relativedelta(months=3):
491 return self.RESULT_Y
492 return self.RESULT_N
493 except Exception as e:
494 return self.RESULT_N
495 return self.RESULT_N
496
475 497
476 cp = Comparison() 498 cp = Comparison()
477 499
......
...@@ -2,11 +2,15 @@ import pyodbc ...@@ -2,11 +2,15 @@ import pyodbc
2 2
3 hil_sql = """ 3 hil_sql = """
4 ALTER TABLE hil_ocr_result ADD bd_ocr nvarchar(max); 4 ALTER TABLE hil_ocr_result ADD bd_ocr nvarchar(max);
5 ALTER TABLE hil_ocr_result ADD bss_ocr nvarchar(max);
5 ALTER TABLE hil_se_ocr_result ADD bd_ocr nvarchar(max); 6 ALTER TABLE hil_se_ocr_result ADD bd_ocr nvarchar(max);
7 ALTER TABLE hil_se_ocr_result ADD bss_ocr nvarchar(max);
6 """ 8 """
7 9
8 afc_sql = """ 10 afc_sql = """
9 ALTER TABLE afc_ocr_result ADD bd_ocr nvarchar(max); 11 ALTER TABLE afc_ocr_result ADD bd_ocr nvarchar(max);
12 ALTER TABLE afc_ocr_result ADD bss_ocr nvarchar(max);
13 ALTER TABLE afc_se_ocr_result ADD bss_ocr nvarchar(max);
10 ALTER TABLE afc_se_ocr_result ADD bd_ocr nvarchar(max); 14 ALTER TABLE afc_se_ocr_result ADD bd_ocr nvarchar(max);
11 """ 15 """
12 16
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!