e34beaaf by 周伟奇

Merge branch 'feature/se' into feature/1223

2 parents c3e66f31 8b3fd09a
...@@ -1178,6 +1178,9 @@ DDA_OCR_FIELD = 'bs_ocr' ...@@ -1178,6 +1178,9 @@ DDA_OCR_FIELD = 'bs_ocr'
1178 HMH_OCR_FIELD = 'hmh_ocr' 1178 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'
1182 BS_FIELD = 'bss_ocr'
1183 BS_CLASSIFY = 10087
1181 1184
1182 RESULT_MAPPING = { 1185 RESULT_MAPPING = {
1183 MVI_CLASSIFY: MVI_OCR_FIELD, 1186 MVI_CLASSIFY: MVI_OCR_FIELD,
...@@ -1195,9 +1198,11 @@ RESULT_MAPPING = { ...@@ -1195,9 +1198,11 @@ RESULT_MAPPING = {
1195 HMH_CLASSIFY: HMH_OCR_FIELD, 1198 HMH_CLASSIFY: HMH_OCR_FIELD,
1196 JYPZ_CLASSIFY: JYPZ_OCR_FIELD, 1199 JYPZ_CLASSIFY: JYPZ_OCR_FIELD,
1197 CONTRACT_CLASSIFY: HT_FIELD, 1200 CONTRACT_CLASSIFY: HT_FIELD,
1201 INSURANCE_CLASSIFY: BD_FIELD,
1202 BS_CLASSIFY: BS_FIELD,
1198 } 1203 }
1199 1204
1200 CA_ADD_COMPARE_FIELDS = (IC_OCR_FIELD, BL_OCR_FIELD) 1205 CA_ADD_COMPARE_FIELDS = (IC_OCR_FIELD, BL_OCR_FIELD, BS_FIELD)
1201 1206
1202 COMPARE_FIELDS = (MVI_OCR_FIELD, 1207 COMPARE_FIELDS = (MVI_OCR_FIELD,
1203 IC_OCR_FIELD, 1208 IC_OCR_FIELD,
...@@ -1213,6 +1218,8 @@ COMPARE_FIELDS = (MVI_OCR_FIELD, ...@@ -1213,6 +1218,8 @@ COMPARE_FIELDS = (MVI_OCR_FIELD,
1213 HMH_OCR_FIELD, 1218 HMH_OCR_FIELD,
1214 JYPZ_OCR_FIELD, 1219 JYPZ_OCR_FIELD,
1215 HT_FIELD, 1220 HT_FIELD,
1221 BD_FIELD,
1222 BS_FIELD,
1216 ) 1223 )
1217 1224
1218 # 身份证 1225 # 身份证
...@@ -1393,7 +1400,10 @@ SE_STAMP_VALUE = '有' ...@@ -1393,7 +1400,10 @@ SE_STAMP_VALUE = '有'
1393 SE_LAYOUT_VALUE = '旧版-旧打印、新版-新打印' 1400 SE_LAYOUT_VALUE = '旧版-旧打印、新版-新打印'
1394 SE_GB_NEW_FIELD = ['vinNo'] 1401 SE_GB_NEW_FIELD = ['vinNo']
1395 SE_GB_USED_FIELD = ['customerName', 'idNum', 'date'] 1402 SE_GB_USED_FIELD = ['customerName', 'idNum', 'date']
1403 SE_BS_FIELD = ['户名', '打印日期', '流水日期', '(担保人)户名', '(担保人)打印日期', '(担保人)流水日期']
1396 SE_HMH_FIELD = ['借款人/承租人姓名', '借款人/承租人证件号', '申请号', '渠道', '签字'] 1404 SE_HMH_FIELD = ['借款人/承租人姓名', '借款人/承租人证件号', '申请号', '渠道', '签字']
1405 SE_BD_FIELD = ['被保险人姓名', '被保险人证件号码', '车架号', '机动车损失保险金额', '第三者责任保险金额', '绝对免赔率', '保险起始日期', '保险截止日期', '保单章', '第一受益人', '保险费合计']
1406 JDMPV_VALUE = ['-', '--', '0%', '0.00', '/', '0']
1397 1407
1398 SE_BANK_FIELD = ['accountNo', 'bankName'] 1408 SE_BANK_FIELD = ['accountNo', 'bankName']
1399 SE_DDA_FIELD = ['applicationId(1)', 'applicationId(2)', 'bankName', 'companyName', 'customerName', 'idNum', 'accountHolderName', 'accountNo'] 1409 SE_DDA_FIELD = ['applicationId(1)', 'applicationId(2)', 'bankName', 'companyName', 'customerName', 'idNum', 'accountHolderName', 'accountNo']
...@@ -1502,6 +1512,8 @@ DDA_EN = 'DDA' ...@@ -1502,6 +1512,8 @@ DDA_EN = 'DDA'
1502 HMH_EN = 'Mortgage Waiver Letter' 1512 HMH_EN = 'Mortgage Waiver Letter'
1503 JYPZ_EN = 'Used Car Document' 1513 JYPZ_EN = 'Used Car Document'
1504 AFC_CONTRACT_EN = 'AFC Contract' 1514 AFC_CONTRACT_EN = 'AFC Contract'
1515 BD_EN = 'Insurance'
1516 BS_EN = 'Bank Statement'
1505 1517
1506 SKIP_CARD = {SME_BL_EN} 1518 SKIP_CARD = {SME_BL_EN}
1507 1519
...@@ -1643,6 +1655,31 @@ HMH_COMPARE_LOGIC = { ...@@ -1643,6 +1655,31 @@ HMH_COMPARE_LOGIC = {
1643 '签字': ('借款人签字/盖章', 'se_common_compare', {}, '抵押登记豁免函签字需人工核查'), 1655 '签字': ('借款人签字/盖章', 'se_common_compare', {}, '抵押登记豁免函签字需人工核查'),
1644 } 1656 }
1645 1657
1658 BD_COMPARE_LOGIC = {
1659 '被保险人姓名': ('被保险人姓名', 'se_name_compare', {}, '保单被保险人姓名与系统不一致'),
1660 '被保险人证件号码': ('被保险人证件号码', 'se_common_compare', {}, '保单被保险人证件号码与系统不一致'),
1661 '车架号': ('车架号', 'se_common_compare', {}, '保单车架号与系统不一致'),
1662 '机动车损失保险金额': ('机动车损失保险金额', 'se_amount_lte_compare', {}, '保单车损险异常'),
1663 '第三者责任保险金额': ('机动车第三者责任保险金额', 'se_amount_lte_compare', {}, '保单三者险异常'),
1664 '绝对免赔率': ('机动车损失保险绝对免赔率/绝对免赔额', 'se_one_compare', {}, '保单无绝对免赔项'),
1665 '保险起始日期': ('保险起始日期', 'se_bd_date_compare', {'start': True}, '保单起始时间有误'),
1666 '保险截止日期': ('保险截止日期', 'se_bd_date_compare', {}, '保单截止时间有误'),
1667 '保单章': ('保单章', 'se_common_compare', {}, '保单无保单章'),
1668 '第一受益人': ('特别约定第一受益人', 'se_common_compare', {}, '保单第一受益人有误,需人工核查'),
1669 '保险费合计': ('保险费合计', 'se_amount_compare', {}, '保单保费疑似无法覆盖ASP保险融资'),
1670 }
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
1646 HT_COMPARE_LOGIC = { 1683 HT_COMPARE_LOGIC = {
1647 '合同编号-每页': ('合同编号-每页', 'se_list_compare', {}, '合同编号与系统不一致'), 1684 '合同编号-每页': ('合同编号-每页', 'se_list_compare', {}, '合同编号与系统不一致'),
1648 '所购车辆价格-小写-重要条款': ('所购车辆价格-小写-重要条款', 'se_amount_str_compare', {}, '合同首页中车辆价格与系统不一致'), 1685 '所购车辆价格-小写-重要条款': ('所购车辆价格-小写-重要条款', 'se_amount_str_compare', {}, '合同首页中车辆价格与系统不一致'),
...@@ -1710,7 +1747,9 @@ SE_COMPARE_FIELD = { ...@@ -1710,7 +1747,9 @@ SE_COMPARE_FIELD = {
1710 DDA_EN: (DDA_OCR_FIELD, DDA_COMPARE_LOGIC, False), 1747 DDA_EN: (DDA_OCR_FIELD, DDA_COMPARE_LOGIC, False),
1711 HMH_EN: (HMH_OCR_FIELD, HMH_COMPARE_LOGIC, False), 1748 HMH_EN: (HMH_OCR_FIELD, HMH_COMPARE_LOGIC, False),
1712 JYPZ_EN: (JYPZ_OCR_FIELD, JYPZ_COMPARE_LOGIC, False), 1749 JYPZ_EN: (JYPZ_OCR_FIELD, JYPZ_COMPARE_LOGIC, False),
1713 AFC_CONTRACT_EN: (HT_FIELD, HT_COMPARE_LOGIC, False) 1750 AFC_CONTRACT_EN: (HT_FIELD, HT_COMPARE_LOGIC, False),
1751 BD_EN: (BD_FIELD, BD_COMPARE_LOGIC, False),
1752 BS_EN: (BS_FIELD, BS_COMPARE_LOGIC, False),
1714 } 1753 }
1715 1754
1716 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:
......
...@@ -314,6 +314,8 @@ class AFCOCRResult(models.Model): ...@@ -314,6 +314,8 @@ class AFCOCRResult(models.Model):
314 hmh_ocr = models.TextField(null=True, verbose_name="豁免函") 314 hmh_ocr = models.TextField(null=True, verbose_name="豁免函")
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="保单")
318 bss_ocr = models.TextField(null=True, verbose_name="银行流水")
317 319
318 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') 320 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
319 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') 321 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
...@@ -344,6 +346,8 @@ class HILOCRResult(models.Model): ...@@ -344,6 +346,8 @@ class HILOCRResult(models.Model):
344 hmh_ocr = models.TextField(null=True, verbose_name="豁免函") 346 hmh_ocr = models.TextField(null=True, verbose_name="豁免函")
345 jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证") 347 jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证")
346 ht_ocr = models.TextField(null=True, verbose_name="AFC合同") 348 ht_ocr = models.TextField(null=True, verbose_name="AFC合同")
349 bd_ocr = models.TextField(null=True, verbose_name="保单")
350 bss_ocr = models.TextField(null=True, verbose_name="银行流水")
347 351
348 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') 352 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
349 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') 353 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
...@@ -373,6 +377,8 @@ class AFCSEOCRResult(models.Model): ...@@ -373,6 +377,8 @@ class AFCSEOCRResult(models.Model):
373 hmh_ocr = models.TextField(null=True, verbose_name="豁免函") 377 hmh_ocr = models.TextField(null=True, verbose_name="豁免函")
374 jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证") 378 jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证")
375 ht_ocr = models.TextField(null=True, verbose_name="AFC合同") 379 ht_ocr = models.TextField(null=True, verbose_name="AFC合同")
380 bd_ocr = models.TextField(null=True, verbose_name="保单")
381 bss_ocr = models.TextField(null=True, verbose_name="银行流水")
376 382
377 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') 383 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
378 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') 384 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
...@@ -403,6 +409,8 @@ class HILSEOCRResult(models.Model): ...@@ -403,6 +409,8 @@ class HILSEOCRResult(models.Model):
403 hmh_ocr = models.TextField(null=True, verbose_name="豁免函") 409 hmh_ocr = models.TextField(null=True, verbose_name="豁免函")
404 jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证") 410 jypz_ocr = models.TextField(null=True, verbose_name="二手车交易凭证")
405 ht_ocr = models.TextField(null=True, verbose_name="AFC合同") 411 ht_ocr = models.TextField(null=True, verbose_name="AFC合同")
412 bd_ocr = models.TextField(null=True, verbose_name="保单")
413 bss_ocr = models.TextField(null=True, verbose_name="银行流水")
406 414
407 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') 415 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
408 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') 416 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
......
...@@ -879,8 +879,8 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list): ...@@ -879,8 +879,8 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
879 main_role_info = {} 879 main_role_info = {}
880 company_info_list = [] 880 company_info_list = []
881 881
882 # 个人信息证件---------------------------------------------------------------------------------------------------------
882 province = cms_info.get('province', '') 883 province = cms_info.get('province', '')
883
884 for individual_info in cms_info.get('applicantInformation', []): 884 for individual_info in cms_info.get('applicantInformation', []):
885 all_id_num = [] 885 all_id_num = []
886 886
...@@ -908,6 +908,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list): ...@@ -908,6 +908,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
908 field_input.append(('idExpiryDate', id_info.get('idExpiryDate', ''))) 908 field_input.append(('idExpiryDate', id_info.get('idExpiryDate', '')))
909 license_dict[license_en] = field_input 909 license_dict[license_en] = field_input
910 all_id_num.append(id_num) 910 all_id_num.append(id_num)
911 # 营业执照 --------------------------------------------------------------------------------------------------
911 elif id_info.get('idType') in ['Unified Social Credit Code', 'Tax Number', 'Business License Number']: 912 elif id_info.get('idType') in ['Unified Social Credit Code', 'Tax Number', 'Business License Number']:
912 # ['companyName', 'legalRepName', 'businessLicenseNo', 'organizationCreditCode', 913 # ['companyName', 'legalRepName', 'businessLicenseNo', 'organizationCreditCode',
913 # 'taxRegistrationCertificateNo', 'establishmentDate', 'businessLicenseDueDate'] 914 # 'taxRegistrationCertificateNo', 'establishmentDate', 'businessLicenseDueDate']
...@@ -926,6 +927,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list): ...@@ -926,6 +927,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
926 if individual_info.get('customersubType', '') == 'Corporate': 927 if individual_info.get('customersubType', '') == 'Corporate':
927 company_info_list.append((customer_name, id_num)) 928 company_info_list.append((customer_name, id_num))
928 929
930 # SME营业执照---------------------------------------------------------------------------------------------------
929 if individual_info.get('customersubType', '').startswith('Self Employed'): 931 if individual_info.get('customersubType', '').startswith('Self Employed'):
930 sep_field_input = [ 932 sep_field_input = [
931 ('legalRepName', customer_name), 933 ('legalRepName', customer_name),
...@@ -969,9 +971,10 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list): ...@@ -969,9 +971,10 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
969 vehicle_info = {} 971 vehicle_info = {}
970 vehicle_field_input = [] 972 vehicle_field_input = []
971 vehicle_status = cms_info.get('vehicleStatus', '') 973 vehicle_status = cms_info.get('vehicleStatus', '')
972 first_submmison_date = cms_info.get('submissionDate', '') 974 first_submission_date = cms_info.get('submissionDate', '')
973 vin_no = cms_info.get('vehicleInformation', {}).get('vinNo', '') 975 vin_no = cms_info.get('vehicleInformation', {}).get('vinNo', '')
974 amount = str(cms_info.get('financialInformation', {}).get('vehiclePrice', '0.0')) 976 amount = str(cms_info.get('financialInformation', {}).get('vehiclePrice', '0.0'))
977 # 新车发票----------------------------------------------------------------------------------------------------------
975 if vehicle_status == 'New': 978 if vehicle_status == 'New':
976 vehicle_field_input.append(('vinNo', vin_no)) 979 vehicle_field_input.append(('vinNo', vin_no))
977 vehicle_field_input.append(('dealer', '、'.join([cms_info.get('dealerName', ''), cms_info.get('fapiaoIssuerDealer', '')]))) 980 vehicle_field_input.append(('dealer', '、'.join([cms_info.get('dealerName', ''), cms_info.get('fapiaoIssuerDealer', '')])))
...@@ -983,7 +986,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list): ...@@ -983,7 +986,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
983 else: 986 else:
984 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))
985 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))
986 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))
987 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))
988 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))
989 bhsj = float(amount) / 1.13 992 bhsj = float(amount) / 1.13
...@@ -994,6 +997,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list): ...@@ -994,6 +997,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
994 ]))) 997 ])))
995 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[6], consts.SE_LAYOUT_VALUE)) 998 vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[6], consts.SE_LAYOUT_VALUE))
996 vehicle_info[consts.MVI_EN] = vehicle_field_input 999 vehicle_info[consts.MVI_EN] = vehicle_field_input
1000 # 二手车发票、交易凭证、绿本------------------------------------------------------------------------------------------
997 else: 1001 else:
998 gb_field_input = [ 1002 gb_field_input = [
999 ('vinNo', vin_no), 1003 ('vinNo', vin_no),
...@@ -1016,12 +1020,12 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list): ...@@ -1016,12 +1020,12 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
1016 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))
1017 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))
1018 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))
1019 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))
1020 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))
1021 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))
1022 jypz_field_input.append(('vinNo', vin_no)) 1026 jypz_field_input.append(('vinNo', vin_no))
1023 jypz_field_input.append(('vehicleTransactionAmount', amount)) 1027 jypz_field_input.append(('vehicleTransactionAmount', amount))
1024 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))
1025 1029
1026 vehicle_info[consts.MVC_EN] = gb_field_input 1030 vehicle_info[consts.MVC_EN] = gb_field_input
1027 vehicle_info[consts.MVC34_EN] = gb34_field_input 1031 vehicle_info[consts.MVC34_EN] = gb34_field_input
...@@ -1033,6 +1037,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list): ...@@ -1033,6 +1037,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
1033 vehicle_info[consts.UCI_EN] = vehicle_field_input 1037 vehicle_info[consts.UCI_EN] = vehicle_field_input
1034 compare_info['vehicleInfo'] = vehicle_info 1038 compare_info['vehicleInfo'] = vehicle_info
1035 1039
1040 # 银行卡-------------------------------------------------------------------------------------------------------
1036 bank_info = {} 1041 bank_info = {}
1037 bank_name = cms_info.get('bankAccountDetails', {}).get('bankName', '') 1042 bank_name = cms_info.get('bankAccountDetails', {}).get('bankName', '')
1038 account_no = decode_des(cms_info.get('bankAccountDetails', {}).get('accountNo', ''), des_key) 1043 account_no = decode_des(cms_info.get('bankAccountDetails', {}).get('accountNo', ''), des_key)
...@@ -1044,6 +1049,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list): ...@@ -1044,6 +1049,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
1044 ] 1049 ]
1045 bank_info[consts.BC_EN] = bank_field_input 1050 bank_info[consts.BC_EN] = bank_field_input
1046 1051
1052 # DDA------------------------------------------------------------------------------------------------------------
1047 if is_gsyh or not detect_list[-1]: 1053 if is_gsyh or not detect_list[-1]:
1048 dda_field_input = [ 1054 dda_field_input = [
1049 ('applicationId(1)', last_obj.application_id), 1055 ('applicationId(1)', last_obj.application_id),
...@@ -1058,9 +1064,38 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list): ...@@ -1058,9 +1064,38 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
1058 bank_info[consts.DDA_EN] = dda_field_input 1064 bank_info[consts.DDA_EN] = dda_field_input
1059 compare_info['bankInfo'] = bank_info 1065 compare_info['bankInfo'] = bank_info
1060 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
1095 # 抵押登记豁免函----------------------------------------------------------------------------------------------------
1096 other_info = {}
1061 full_no = cms_info.get('settlemnetVerification', {}).get('applicationNo', '') 1097 full_no = cms_info.get('settlemnetVerification', {}).get('applicationNo', '')
1062 if cms_info.get('mortgageType', '') == 'Mortgage Free' or cms_info.get('mortgageType', '') == 'MortgageFree': 1098 if cms_info.get('mortgageType', '') == 'Mortgage Free' or cms_info.get('mortgageType', '') == 'MortgageFree':
1063 other_info = {}
1064 hmh_field_input = [ 1099 hmh_field_input = [
1065 (consts.SE_HMH_FIELD[0], hmh_name), 1100 (consts.SE_HMH_FIELD[0], hmh_name),
1066 (consts.SE_HMH_FIELD[1], hmh_id), 1101 (consts.SE_HMH_FIELD[1], hmh_id),
...@@ -1069,11 +1104,96 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list): ...@@ -1069,11 +1104,96 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
1069 (consts.SE_HMH_FIELD[4], consts.SE_STAMP_VALUE), 1104 (consts.SE_HMH_FIELD[4], consts.SE_STAMP_VALUE),
1070 ] 1105 ]
1071 other_info[consts.HMH_EN] = hmh_field_input 1106 other_info[consts.HMH_EN] = hmh_field_input
1107
1108 # ASP -------------------------------------------------------------------------------------------------------
1109 asp_list = []
1110 gzs_status = consts.GZS_STATUS[1]
1111 gzs_list = [gzs_status]
1112 gzs_price = '0.00'
1113 is_asp = False
1114 insurance_price = None
1115 if str(cms_info.get('financialInformation', {}).get('associatedServicePrincipal', '0.00')) != '0.00':
1116 is_asp = True
1117 # for asp_info in cms_info.get('associatedServices', []):
1118 for asp_info in cms_info.get('associatedServices', {}).get('SubassociatedServices', []):
1119 tmp_asp_name = asp_info.get('associatedServices')
1120 if isinstance(tmp_asp_name, str) and len(tmp_asp_name) > 0:
1121 if gzs_status == consts.GZS_STATUS[1] and tmp_asp_name.find(consts.GZS_NAME) != -1:
1122 gzs_status = consts.GZS_STATUS[2]
1123 gzs_price = asp_info.get('price', '0.00')
1124 asp_list.append(
1125 (
1126 tmp_asp_name,
1127 asp_info.get('price', '0.00'),
1128 asp_info.get('financed', '0.00')
1129 )
1130 )
1131 # 保单费合计
1132 if tmp_asp_name.find('机动车辆保险') != -1:
1133 insurance_price = asp_info.get('price', '0.00')
1134
1135 # fin_total = 0
1136 fin_total_tmp = cms_info.get('associatedServices', {}).get('financed total', '0.00')
1137 fin_total = '0.00' if fin_total_tmp.strip() == '' else fin_total_tmp
1138 for asp_name, _, asp_fin in asp_list:
1139 if gzs_status == consts.GZS_STATUS[2] and asp_name.find(consts.GZS_NAME) == -1:
1140 gzs_status = consts.GZS_STATUS[0]
1141 # fin_total += float(asp_fin)
1142 asp_list.append(
1143 (
1144 consts.ASP_SUM_NAME,
1145 '',
1146 fin_total,
1147 # format(fin_total, '.2f'),
1148 )
1149 )
1150
1151 # CMS Vehicle Price / 1.13 * 10 %
1152 if gzs_status != consts.GZS_STATUS[1]:
1153 gzs_value = float(amount) * 0.1 / 1.13
1154 gzs_list.append(gzs_value)
1155 gzs_list.append(float(gzs_price))
1156
1157 # 保单 -----------------------------------------------------------------------------------------------------------
1158 is_insurance = 0
1159 insurance_type = cms_info.get('insuranceDetails', {}).get('insuranceType', '')
1160 if insurance_type == 'Waive Insurance' and isinstance(insurance_price, str):
1161 is_insurance = 1
1162 elif insurance_type == 'Comprehensive Insurance':
1163 is_insurance = 2
1164 if is_insurance != 0:
1165 fp_campaign = cms_info.get('fpCampaign', '')
1166 if fp_campaign.find('OCU') == -1:
1167 ssx_amount = amount
1168 else:
1169 ssx_amount = format(float(amount) * 0.8, '.2f')
1170 if fp_campaign.find('Joy_Plus') == -1:
1171 dszx_amount = '200000'
1172 else:
1173 dszx_amount = '500000'
1174 bd_field_input = [
1175 (consts.SE_BD_FIELD[0], hmh_name),
1176 (consts.SE_BD_FIELD[1], hmh_id),
1177 (consts.SE_BD_FIELD[2], vin_no),
1178 (consts.SE_BD_FIELD[3], ssx_amount),
1179 (consts.SE_BD_FIELD[4], dszx_amount),
1180 (consts.SE_BD_FIELD[5], consts.JDMPV_VALUE),
1181 (consts.SE_BD_FIELD[6], cms_info.get('insuranceDetails', {}).get('startDate', '')),
1182 (consts.SE_BD_FIELD[7], cms_info.get('insuranceDetails', {}).get('endDate', '')),
1183 (consts.SE_BD_FIELD[8], consts.SE_STAMP_VALUE),
1184 (consts.SE_BD_FIELD[9], consts.SE_STAMP_VALUE),
1185 ]
1186 if is_insurance == 1:
1187 bd_field_input.append((consts.SE_BD_FIELD[10], insurance_price))
1188 other_info[consts.BD_EN] = bd_field_input
1189
1190 if len(other_info) > 0:
1072 compare_info['other'] = other_info 1191 compare_info['other'] = other_info
1073 1192
1074 if application_entity in consts.HIL_SET: 1193 if application_entity in consts.HIL_SET:
1075 return compare_info, cms_info.get('applicationVersion', 1) 1194 return compare_info, cms_info.get('applicationVersion', 1)
1076 1195
1196 # AFC合同-----------------------------------------------------------------------------------------------------------
1077 contract_info = {} 1197 contract_info = {}
1078 1198
1079 schedule_list = [] 1199 schedule_list = []
...@@ -1105,51 +1225,15 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list): ...@@ -1105,51 +1225,15 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
1105 (consts.SE_AFC_CON_FIELD[17], schedule_list_str), 1225 (consts.SE_AFC_CON_FIELD[17], schedule_list_str),
1106 ] 1226 ]
1107 1227
1108 if str(cms_info.get('financialInformation', {}).get('associatedServicePrincipal', '0.00')) == '0.00': 1228 if is_asp:
1229 afc_contract_input.append((consts.SE_AFC_CON_FIELD[20], asp_list))
1230 afc_contract_input.append((consts.SE_AFC_CON_FIELD[22], asp_list))
1231 afc_contract_input.append((consts.SE_AFC_CON_FIELD[21], gzs_list))
1232 else:
1109 afc_contract_input.pop(5) 1233 afc_contract_input.pop(5)
1110 afc_contract_input.pop(5) 1234 afc_contract_input.pop(5)
1111 afc_contract_input.pop(9) 1235 afc_contract_input.pop(9)
1112 afc_contract_input.pop(9) 1236 afc_contract_input.pop(9)
1113 else:
1114 asp_list = []
1115 gzs_status = consts.GZS_STATUS[1]
1116 gzs_price = '0.00'
1117 for asp_info in cms_info.get('associatedServices', {}).get('SubassociatedServices', []):
1118 tmp_asp_name = asp_info.get('associatedServices')
1119 if isinstance(tmp_asp_name, str) and len(tmp_asp_name) > 0:
1120 if gzs_status == consts.GZS_STATUS[1] and tmp_asp_name.find(consts.GZS_NAME) != -1:
1121 gzs_status = consts.GZS_STATUS[2]
1122 gzs_price = asp_info.get('price', '0.00')
1123 asp_list.append(
1124 (
1125 tmp_asp_name,
1126 asp_info.get('price', '0.00'),
1127 asp_info.get('financed', '0.00')
1128 )
1129 )
1130
1131 fin_total_tmp = cms_info.get('associatedServices', {}).get('financed total', '0.00')
1132 fin_total = '0.00' if fin_total_tmp.strip() == '' else fin_total_tmp
1133 for asp_name, _, asp_fin in asp_list:
1134 if gzs_status == consts.GZS_STATUS[2] and asp_name.find(consts.GZS_NAME) == -1:
1135 gzs_status = consts.GZS_STATUS[0]
1136 asp_list.append(
1137 (
1138 consts.ASP_SUM_NAME,
1139 '',
1140 fin_total,
1141 )
1142 )
1143 afc_contract_input.append((consts.SE_AFC_CON_FIELD[20], asp_list))
1144 afc_contract_input.append((consts.SE_AFC_CON_FIELD[22], asp_list))
1145
1146 # CMS Vehicle Price / 1.13 * 10 %
1147 gzs_list = [gzs_status]
1148 if gzs_status != consts.GZS_STATUS[1]:
1149 gzs_value = float(amount) * 0.1 / 1.13
1150 gzs_list.append(gzs_value)
1151 gzs_list.append(float(gzs_price))
1152 afc_contract_input.append((consts.SE_AFC_CON_FIELD[21], gzs_list))
1153 1237
1154 # '借款人签字及时间', 'Borrower', 0, 0, True 1238 # '借款人签字及时间', 'Borrower', 0, 0, True
1155 online_sign = cms_info.get('contractSource', 'Online Sign') == 'Online Sign' 1239 online_sign = cms_info.get('contractSource', 'Online Sign') == 'Online Sign'
...@@ -1352,6 +1436,124 @@ def get_se_compare_info(last_obj, application_entity, detect_list): ...@@ -1352,6 +1436,124 @@ def get_se_compare_info(last_obj, application_entity, detect_list):
1352 return compare_info 1436 return compare_info
1353 1437
1354 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
1355 def se_compare_license(license_en, ocr_res_dict, field_list): 1557 def se_compare_license(license_en, ocr_res_dict, field_list):
1356 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]
1357 1559
...@@ -1441,6 +1643,8 @@ def se_compare_license(license_en, ocr_res_dict, field_list): ...@@ -1441,6 +1643,8 @@ def se_compare_license(license_en, ocr_res_dict, field_list):
1441 special_expiry_date_slice = True 1643 special_expiry_date_slice = True
1442 else: 1644 else:
1443 img_path = ocr_res_list[res_idx].get(consts.IMG_PATH_KEY, '') if result == consts.RESULT_N else empty_str 1645 img_path = ocr_res_list[res_idx].get(consts.IMG_PATH_KEY, '') if result == consts.RESULT_N else empty_str
1646 if isinstance(value, list):
1647 value = json.dumps(value, ensure_ascii=False)
1444 error_type = empty_error_type if result == consts.RESULT_Y else ErrorType.OCR.value 1648 error_type = empty_error_type if result == consts.RESULT_Y else ErrorType.OCR.value
1445 result_field_list.append((name, value, result, ocr_str, img_path, error_type, compare_logic[name][3])) 1649 result_field_list.append((name, value, result, ocr_str, img_path, error_type, compare_logic[name][3]))
1446 else: 1650 else:
...@@ -1448,6 +1652,8 @@ def se_compare_license(license_en, ocr_res_dict, field_list): ...@@ -1448,6 +1652,8 @@ def se_compare_license(license_en, ocr_res_dict, field_list):
1448 1652
1449 if not is_find: 1653 if not is_find:
1450 for name, value in field_list: 1654 for name, value in field_list:
1655 if isinstance(value, list):
1656 value = json.dumps(value, ensure_ascii=False)
1451 result_field_list.append((name, value, consts.RESULT_N, empty_str, empty_str, ErrorType.NF.value, '{0}未找到'.format(license_en))) 1657 result_field_list.append((name, value, consts.RESULT_N, empty_str, empty_str, ErrorType.NF.value, '{0}未找到'.format(license_en)))
1452 1658
1453 if is_find: 1659 if is_find:
...@@ -1756,6 +1962,8 @@ def se_compare_process(compare_info, ocr_res_dict): ...@@ -1756,6 +1962,8 @@ def se_compare_process(compare_info, ocr_res_dict):
1756 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)
1757 elif license_en == consts.AFC_CONTRACT_EN: 1963 elif license_en == consts.AFC_CONTRACT_EN:
1758 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)
1759 else: 1967 else:
1760 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)
1761 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:
......
...@@ -363,6 +363,15 @@ class Comparison: ...@@ -363,6 +363,15 @@ class Comparison:
363 input_tmp = input_str.replace('元', '').replace(',', '') 363 input_tmp = input_str.replace('元', '').replace(',', '')
364 return self.build_res(ocr_tmp == input_tmp) 364 return self.build_res(ocr_tmp == input_tmp)
365 365
366 def se_amount_lte_compare(self, input_str, ocr_str, **kwargs):
367 try:
368 float_input = float(input_str)
369 float_ocr = float(ocr_str)
370 except Exception as e:
371 return self.RESULT_N
372 else:
373 return self.build_res(float_ocr >= float_input)
374
366 def se_amount_compare(self, input_str, ocr_str, **kwargs): 375 def se_amount_compare(self, input_str, ocr_str, **kwargs):
367 if input_str == ocr_str: 376 if input_str == ocr_str:
368 return self.RESULT_Y 377 return self.RESULT_Y
...@@ -375,6 +384,12 @@ class Comparison: ...@@ -375,6 +384,12 @@ class Comparison:
375 else: 384 else:
376 return self.build_res(float_ocr == float_input) 385 return self.build_res(float_ocr == float_input)
377 386
387 def se_one_compare(self, input_list, ocr_str, **kwargs):
388 if isinstance(input_list, list):
389 if ocr_str in input_list:
390 return self.RESULT_Y
391 return self.RESULT_N
392
378 def se_company_compare(self, input_str, ocr_str, **kwargs): 393 def se_company_compare(self, input_str, ocr_str, **kwargs):
379 input_tmp = re.sub(self.re_obj, '', input_str).strip() 394 input_tmp = re.sub(self.re_obj, '', input_str).strip()
380 ocr_tmp = re.sub(self.re_obj, '', ocr_str).strip() 395 ocr_tmp = re.sub(self.re_obj, '', ocr_str).strip()
...@@ -439,6 +454,46 @@ class Comparison: ...@@ -439,6 +454,46 @@ class Comparison:
439 else: 454 else:
440 return self.build_res(compare_date <= ocr_date) 455 return self.build_res(compare_date <= ocr_date)
441 456
457 def se_bd_date_compare(self, input_str, ocr_str, **kwargs):
458 try:
459 input_date = datetime.strptime(input_str, "%Y-%m-%d").date()
460 ocr_date = datetime.strptime(ocr_str, "%Y-%m-%d").date()
461 if kwargs.get('start', False):
462 if input_date != ocr_date:
463 return self.RESULT_N
464
465 six_month_date = (datetime.today() - relativedelta(months=6)).date()
466 today_date = datetime.today().date()
467 return self.build_res(six_month_date <= ocr_date <= today_date)
468 else:
469 if input_date == ocr_date or ocr_date == input_date + relativedelta(days=1):
470 return self.RESULT_Y
471 return self.RESULT_N
472 except Exception as e:
473 return self.RESULT_N
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
442 497
443 cp = Comparison() 498 cp = Comparison()
444 499
......
1 import pyodbc
2
3 hil_sql = """
4 ALTER TABLE hil_ocr_result ADD bd_ocr nvarchar(max);
5 ALTER TABLE hil_ocr_result ADD bss_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);
8 """
9
10 afc_sql = """
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);
14 ALTER TABLE afc_se_ocr_result ADD bd_ocr nvarchar(max);
15 """
16
17 hil_cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};', autocommit=True)
18
19 hil_cursor = hil_cnxn.cursor()
20 hil_cursor.execute(hil_sql)
21
22 hil_cursor.close()
23 hil_cnxn.close()
24
25 afc_cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};', autocommit=True)
26
27 afc_cursor = afc_cnxn.cursor()
28 afc_cursor.execute(afc_sql)
29
30 afc_cursor.close()
31 afc_cnxn.close()
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!