add bs compare
Showing
6 changed files
with
243 additions
and
6 deletions
... | @@ -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 | ... | ... |
-
Please register or sign in to post a comment