a0d6443d by 冯轩

Merge branch 'feature/CHINARPA-4660'

2 parents c811f8ce 62a7558f
...@@ -1248,6 +1248,8 @@ FSM_CONTRACT_WEP_FIELD = 'fsm_wep_ocr' ...@@ -1248,6 +1248,8 @@ FSM_CONTRACT_WEP_FIELD = 'fsm_wep_ocr'
1248 FSM_CONTRACT_MSI_FIELD = 'fsm_msi_ocr' 1248 FSM_CONTRACT_MSI_FIELD = 'fsm_msi_ocr'
1249 FSM_CONTRACT_SC_FIELD = 'fsm_sc_ocr' 1249 FSM_CONTRACT_SC_FIELD = 'fsm_sc_ocr'
1250 FSM_CONTRACT_SC2_FIELD = 'fsm_sc2_ocr' 1250 FSM_CONTRACT_SC2_FIELD = 'fsm_sc2_ocr'
1251 FS_FIELD = 'fs_ocr'
1252 FSS_FIELD = 'fss_ocr'
1251 1253
1252 1254
1253 BS_CLASSIFY = 10089 1255 BS_CLASSIFY = 10089
...@@ -1304,6 +1306,8 @@ COMPARE_FIELDS = ( ...@@ -1304,6 +1306,8 @@ COMPARE_FIELDS = (
1304 HIL_CONTRACT_1_FIELD, 1306 HIL_CONTRACT_1_FIELD,
1305 HIL_CONTRACT_2_FIELD, 1307 HIL_CONTRACT_2_FIELD,
1306 HIL_CONTRACT_3_FIELD, 1308 HIL_CONTRACT_3_FIELD,
1309 FS_FIELD,
1310 FSS_FIELD,
1307 ) 1311 )
1308 1312
1309 PRE_COMPARE_FIELDS = ( 1313 PRE_COMPARE_FIELDS = (
...@@ -1505,6 +1509,8 @@ SE_BD_FIELD = ['被保险人姓名', '被保险人证件号码', '车架号', ' ...@@ -1505,6 +1509,8 @@ SE_BD_FIELD = ['被保险人姓名', '被保险人证件号码', '车架号', '
1505 JDMPV_VALUE = ['-', '--', '0%', '0.00', '/', '0', ''] 1509 JDMPV_VALUE = ['-', '--', '0%', '0.00', '/', '0', '']
1506 JYPZ_TYPE_1 = ['二手车交易凭证'] 1510 JYPZ_TYPE_1 = ['二手车交易凭证']
1507 JYPZ_TYPE_2 = ['BMW官方认证二手车交易凭证', '二手车交易凭证'] 1511 JYPZ_TYPE_2 = ['BMW官方认证二手车交易凭证', '二手车交易凭证']
1512 SE_FS_FIELD = ['Hash值', '公章', '财年', '资产负债表内容', '利润表内容']
1513 SE_FSS_FIELD = ['公司名称', '公章']
1508 1514
1509 SE_BANK_FIELD = ['accountNo', 'bankName'] 1515 SE_BANK_FIELD = ['accountNo', 'bankName']
1510 SE_DDA_FIELD = ['applicationId(1)', 'applicationId(2)', 'bankName', 'companyName', 'customerName', 'idNum', 'accountHolderName', 'accountNo'] 1516 SE_DDA_FIELD = ['applicationId(1)', 'applicationId(2)', 'bankName', 'companyName', 'customerName', 'idNum', 'accountHolderName', 'accountNo']
...@@ -1818,8 +1824,11 @@ BS_EN = 'Bank Statement' ...@@ -1818,8 +1824,11 @@ BS_EN = 'Bank Statement'
1818 HIL_CONTRACT_1_EN = '售后回租合同' 1824 HIL_CONTRACT_1_EN = '售后回租合同'
1819 HIL_CONTRACT_2_EN = '车辆租赁抵押合同' 1825 HIL_CONTRACT_2_EN = '车辆租赁抵押合同'
1820 HIL_CONTRACT_3_EN = '车辆处置协议' 1826 HIL_CONTRACT_3_EN = '车辆处置协议'
1827 FS_EN = 'Financial Statement'
1828 FSS_EN = 'Financial Statement Supplementary'
1821 1829
1822 DDA_NO_FIND = '需人工查看DDA或截图' 1830 DDA_NO_FIND = '需人工查看DDA或截图'
1831 FS_NO_FIND = '未提供财报或财报不完整'
1823 1832
1824 SKIP_CARD = {SME_BL_EN} 1833 SKIP_CARD = {SME_BL_EN}
1825 1834
...@@ -2160,6 +2169,20 @@ HT_COMPARE_LOGIC = { ...@@ -2160,6 +2169,20 @@ HT_COMPARE_LOGIC = {
2160 '无ASP产品': ('无ASP产品', 'se_self_compare_other_asp', {}, GZS_REASON_1), 2169 '无ASP产品': ('无ASP产品', 'se_self_compare_other_asp', {}, GZS_REASON_1),
2161 } 2170 }
2162 2171
2172 # 格式:'xueao给的excel字段名':('数据库字段名','比对逻辑','特殊处理可以忽略','比对不合格时的返回内容')
2173 FS_COMPARE_LOGIC = {
2174 'Hash值': ('code', 'hash_code_compare', {}, '财报Hash值与系统不一致'),
2175 '公章': ('stamp', 'stamp_dict_compare', {}, '财报无公章'),
2176 '财年': ('财年', 'fiscal_year_compare', {}, '财报所属财年错误'),
2177 '资产负债表内容': ('资产负债表内容', 'input_list_not_zero_compare', {}, '财报资产负债表为空'),
2178 '利润表内容': ('利润表内容', 'input_list_not_zero_compare', {}, '财报利润表为空'),
2179 }
2180
2181 FSS_COMPARE_LOGIC = {
2182 '公司名称': ('title', 'se_company_compare', {}, '财报情况说明公司名称错误'),
2183 '公章': ('stamp', 'stamp_str_compare', {}, '财报情况说明无公章'),
2184 }
2185
2163 AFC_HT_DATE_FIELDS = ['主借人日期', '共借人日期', '保证人日期1', '保证人日期2'] 2186 AFC_HT_DATE_FIELDS = ['主借人日期', '共借人日期', '保证人日期1', '保证人日期2']
2164 2187
2165 # MVC_OCR_FIELD = 'mvc_ocr' 2188 # MVC_OCR_FIELD = 'mvc_ocr'
...@@ -2188,6 +2211,8 @@ SE_COMPARE_FIELD = { ...@@ -2188,6 +2211,8 @@ SE_COMPARE_FIELD = {
2188 HIL_CONTRACT_1_EN: (HIL_CONTRACT_1_FIELD, HIL_CONTRACT_1_COMPARE_LOGIC, False), 2211 HIL_CONTRACT_1_EN: (HIL_CONTRACT_1_FIELD, HIL_CONTRACT_1_COMPARE_LOGIC, False),
2189 HIL_CONTRACT_2_EN: (HIL_CONTRACT_2_FIELD, HIL_CONTRACT_2_COMPARE_LOGIC, False), 2212 HIL_CONTRACT_2_EN: (HIL_CONTRACT_2_FIELD, HIL_CONTRACT_2_COMPARE_LOGIC, False),
2190 HIL_CONTRACT_3_EN: (HIL_CONTRACT_3_FIELD, HIL_CONTRACT_3_COMPARE_LOGIC, False), 2213 HIL_CONTRACT_3_EN: (HIL_CONTRACT_3_FIELD, HIL_CONTRACT_3_COMPARE_LOGIC, False),
2214 FS_EN: (FS_FIELD, FS_COMPARE_LOGIC, False),
2215 FSS_EN: (FSS_FIELD, FSS_COMPARE_LOGIC, False),
2191 } 2216 }
2192 2217
2193 SE_COMPARE_FIELD_AUTO = { 2218 SE_COMPARE_FIELD_AUTO = {
......
...@@ -336,6 +336,8 @@ class AFCOCRResult(models.Model): ...@@ -336,6 +336,8 @@ class AFCOCRResult(models.Model):
336 fsm_sc_ocr = models.TextField(null=True, verbose_name="汽车销售合同") 336 fsm_sc_ocr = models.TextField(null=True, verbose_name="汽车销售合同")
337 fsm_sc2_ocr = models.TextField(null=True, verbose_name="汽车销售合同补充合同") 337 fsm_sc2_ocr = models.TextField(null=True, verbose_name="汽车销售合同补充合同")
338 fsm_activited = models.IntegerField(null=False, default=0, verbose_name="fsm激活状态 1:激活") 338 fsm_activited = models.IntegerField(null=False, default=0, verbose_name="fsm激活状态 1:激活")
339 fs_ocr = models.TextField(null=True, verbose_name="财务报表")
340 fss_ocr = models.TextField(null=True, verbose_name="财务情况说明书")
339 341
340 342
341 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') 343 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
...@@ -379,6 +381,8 @@ class HILOCRResult(models.Model): ...@@ -379,6 +381,8 @@ class HILOCRResult(models.Model):
379 fsm_sc_ocr = models.TextField(null=True, verbose_name="汽车销售合同") 381 fsm_sc_ocr = models.TextField(null=True, verbose_name="汽车销售合同")
380 fsm_sc2_ocr = models.TextField(null=True, verbose_name="汽车销售合同补充合同") 382 fsm_sc2_ocr = models.TextField(null=True, verbose_name="汽车销售合同补充合同")
381 fsm_activited = models.IntegerField(null=False, default=0, verbose_name="fsm激活状态 1:激活") 383 fsm_activited = models.IntegerField(null=False, default=0, verbose_name="fsm激活状态 1:激活")
384 fs_ocr = models.TextField(null=True, verbose_name="财务报表")
385 fss_ocr = models.TextField(null=True, verbose_name="财务情况说明书")
382 386
383 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') 387 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
384 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') 388 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
...@@ -420,6 +424,8 @@ class AFCSEOCRResult(models.Model): ...@@ -420,6 +424,8 @@ class AFCSEOCRResult(models.Model):
420 fsm_sc_ocr = models.TextField(null=True, verbose_name="汽车销售合同") 424 fsm_sc_ocr = models.TextField(null=True, verbose_name="汽车销售合同")
421 fsm_sc2_ocr = models.TextField(null=True, verbose_name="汽车销售合同补充合同") 425 fsm_sc2_ocr = models.TextField(null=True, verbose_name="汽车销售合同补充合同")
422 fsm_activited = models.IntegerField(null=False, default=0, verbose_name="fsm激活状态 1:激活") 426 fsm_activited = models.IntegerField(null=False, default=0, verbose_name="fsm激活状态 1:激活")
427 fs_ocr = models.TextField(null=True, verbose_name="财务报表")
428 fss_ocr = models.TextField(null=True, verbose_name="财务情况说明书")
423 429
424 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') 430 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
425 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') 431 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
...@@ -461,6 +467,8 @@ class HILSEOCRResult(models.Model): ...@@ -461,6 +467,8 @@ class HILSEOCRResult(models.Model):
461 fsm_sc_ocr = models.TextField(null=True, verbose_name="汽车销售合同") 467 fsm_sc_ocr = models.TextField(null=True, verbose_name="汽车销售合同")
462 fsm_sc2_ocr = models.TextField(null=True, verbose_name="汽车销售合同补充合同") 468 fsm_sc2_ocr = models.TextField(null=True, verbose_name="汽车销售合同补充合同")
463 fsm_activited = models.IntegerField(null=False, default=0, verbose_name="fsm激活状态 1:激活") 469 fsm_activited = models.IntegerField(null=False, default=0, verbose_name="fsm激活状态 1:激活")
470 fs_ocr = models.TextField(null=True, verbose_name="财务报表")
471 fss_ocr = models.TextField(null=True, verbose_name="财务情况说明书")
464 472
465 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间') 473 update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
466 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') 474 create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
......
1 import json 1 import json
2 from multiprocessing.sharedctypes import Value
2 import os 3 import os
3 import cv2 4 import cv2
4 import time 5 import time
...@@ -934,6 +935,7 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d ...@@ -934,6 +935,7 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d
934 is_cdfl_bo = False # 车贷分离,主借 935 is_cdfl_bo = False # 车贷分离,主借
935 is_cdfl_co = False # 车贷分离,共借 936 is_cdfl_co = False # 车贷分离,共借
936 role_count = 0 937 role_count = 0
938 borrower_name = ''
937 # province = cms_info.get('province', '') 939 # province = cms_info.get('province', '')
938 for individual_info in cms_info.get('applicantInformation', []): 940 for individual_info in cms_info.get('applicantInformation', []):
939 role_count += 1 941 role_count += 1
...@@ -953,6 +955,16 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d ...@@ -953,6 +955,16 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d
953 if individual_info['applicantType'] == consts.APPLICANT_TYPE_ORDER[0] and not is_corporate: 955 if individual_info['applicantType'] == consts.APPLICANT_TYPE_ORDER[0] and not is_corporate:
954 is_cdfl_bo = True 956 is_cdfl_bo = True
955 957
958 # CHINARPA-4660 是否公户判断
959 is_bo_corporate = False
960 customersubType = individual_info.get('customersubType', '')
961 if individual_info['applicantType'] == consts.APPLICANT_TYPE_ORDER[0] and is_corporate:
962 is_bo_corporate = True
963
964 # CHINARPA-4660 财报主借人姓名赋值
965 if individual_info['applicantType'] == consts.APPLICANT_TYPE_ORDER[0]:
966 borrower_name = customer_name
967
956 for id_info in individual_info.get('IDInformation', []): 968 for id_info in individual_info.get('IDInformation', []):
957 if id_info.get('idType') in consts.SE_CMS_FIRST_ID_FIELD_MAPPING: 969 if id_info.get('idType') in consts.SE_CMS_FIRST_ID_FIELD_MAPPING:
958 license_en, is_prc = consts.SE_CMS_FIRST_ID_FIELD_MAPPING[id_info['idType']] 970 license_en, is_prc = consts.SE_CMS_FIRST_ID_FIELD_MAPPING[id_info['idType']]
...@@ -970,21 +982,22 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d ...@@ -970,21 +982,22 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d
970 # ['companyName', 'legalRepName', 'businessLicenseNo', 'organizationCreditCode', 982 # ['companyName', 'legalRepName', 'businessLicenseNo', 'organizationCreditCode',
971 # 'taxRegistrationCertificateNo', 'establishmentDate', 'businessLicenseDueDate'] 983 # 'taxRegistrationCertificateNo', 'establishmentDate', 'businessLicenseDueDate']
972 id_num = decode_des(id_info.get('idNum', ''), des_key) 984 id_num = decode_des(id_info.get('idNum', ''), des_key)
973 # bl_field_input = [ 985 bl_field_input = [
974 # ('companyName', customer_name), 986 ('companyName', customer_name),
975 # ('legalRepName', legal_name), 987 ('legalRepName', legal_name),
976 # ('businessLicenseNo', id_num), 988 ('businessLicenseNo', id_num),
977 # ('organizationCreditCode', id_num), 989 ('organizationCreditCode', id_num),
978 # ('taxRegistrationCertificateNo', id_num), 990 ('taxRegistrationCertificateNo', id_num),
979 # ('businessLicenseDueDate', id_info.get('idExpiryDate', '')), 991 # ('businessLicenseDueDate', id_info.get('idExpiryDate', '')),
980 # ] 992 ]
981 993
982 if is_corporate: 994 if is_corporate:
983 company_info_list.append((customer_name, id_num, legal_name)) 995 company_info_list.append((customer_name, id_num, legal_name))
984 # else: 996 else:
985 # bl_field_input.append(('establishmentDate', establishment_date)) 997 bl_field_input.append(('establishmentDate', establishment_date))
986 998
987 # license_dict[consts.BL_EN] = bl_field_input 999 compare_log.info('{0} [bl_field_input] [{1}]'.format(log_base, bl_field_input))
1000 license_dict[consts.BL_EN] = bl_field_input
988 all_id_num.append(id_num) 1001 all_id_num.append(id_num)
989 1002
990 # SME营业执照--------------------------------------------------------------------------------------------------- 1003 # SME营业执照---------------------------------------------------------------------------------------------------
...@@ -1000,6 +1013,7 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d ...@@ -1000,6 +1013,7 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d
1000 (customer_name, '、'.join(all_id_num), all_id_num[0]) 1013 (customer_name, '、'.join(all_id_num), all_id_num[0])
1001 ) 1014 )
1002 1015
1016 compare_log.info('{0} [license_dict] [{1}]'.format(log_base, license_dict))
1003 if len(license_dict) > 0: 1017 if len(license_dict) > 0:
1004 individual_info_dict.setdefault(individual_info['applicantType'], []).append(license_dict) 1018 individual_info_dict.setdefault(individual_info['applicantType'], []).append(license_dict)
1005 1019
...@@ -1120,6 +1134,39 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d ...@@ -1120,6 +1134,39 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d
1120 # vehicle_info[consts.UCI_EN] = vehicle_field_input 1134 # vehicle_info[consts.UCI_EN] = vehicle_field_input
1121 compare_info['vehicleInfo'] = vehicle_info 1135 compare_info['vehicleInfo'] = vehicle_info
1122 1136
1137 # 公户财务报表-------------------------------------------------------------------------------------------------
1138 financial_statement_info = {}
1139 financial_statement_input = []
1140 corporateFinancialInformation = cms_info.get('corporateFinancialInformation', {})
1141 hashCode = corporateFinancialInformation.get('hashCode', '')
1142 fiscalYear = corporateFinancialInformation.get('fiscalYear', '')
1143 totalAssets = corporateFinancialInformation.get('totaAssets', 0)
1144 totalLiabilitiesAndOwnersEquity = corporateFinancialInformation.get('totalLiabilitiesAndOwnersEquity', 0)
1145 netProfit = corporateFinancialInformation.get('netProfit', 0)
1146 if is_bo_corporate:
1147 financial_statement_input.append((consts.SE_FS_FIELD[0], hashCode))
1148 financial_statement_input.append((consts.SE_FS_FIELD[1], consts.SE_STAMP_VALUE))
1149 financial_statement_input.append((consts.SE_FS_FIELD[2], fiscalYear))
1150 financial_statement_input.append((consts.SE_FS_FIELD[3], [totalAssets, totalLiabilitiesAndOwnersEquity]))
1151 financial_statement_input.append((consts.SE_FS_FIELD[4], [netProfit]))
1152 financial_statement_info[consts.FS_EN] = financial_statement_input
1153 compare_info['financialStatementInfo'] = financial_statement_info
1154
1155 # 财报情况说明
1156 financial_statement_supplementary_info = {}
1157 financial_statement_supplementary_input = []
1158 cashAndCashEquivalentAtEndOfPeriod = corporateFinancialInformation.get('cashAndCashEquivalentAtEndOfPeriod', '')
1159 if cashAndCashEquivalentAtEndOfPeriod == '':
1160 need_fss = False
1161 else:
1162 need_fss = float(cashAndCashEquivalentAtEndOfPeriod) == 0
1163 if is_bo_corporate and need_fss:
1164 financial_statement_supplementary_input.append((consts.SE_FSS_FIELD[0], borrower_name))
1165 financial_statement_supplementary_input.append((consts.SE_FSS_FIELD[1], consts.SE_STAMP_VALUE))
1166 financial_statement_supplementary_info[consts.FSS_EN] = financial_statement_supplementary_input
1167 compare_info['financialStatementSupplementaryInfo'] = financial_statement_supplementary_info
1168
1169
1123 # 银行卡------------------------------------------------------------------------------------------------------- 1170 # 银行卡-------------------------------------------------------------------------------------------------------
1124 bank_info = {} 1171 bank_info = {}
1125 bank_name = cms_info.get('bankAccountDetails', {}).get('bankName', '') 1172 bank_name = cms_info.get('bankAccountDetails', {}).get('bankName', '')
...@@ -1375,7 +1422,10 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d ...@@ -1375,7 +1422,10 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d
1375 if len(main_role_info[app_type]) >= id_idx+1: 1422 if len(main_role_info[app_type]) >= id_idx+1:
1376 is_find = True 1423 is_find = True
1377 if isinstance(field_idx, int): 1424 if isinstance(field_idx, int):
1378 hil_contract_1_input.append((key, main_role_info[app_type][id_idx][field_idx])) 1425 if key == '承租人签字' and is_bo_corporate:
1426 hil_contract_1_input.append((key, legal_name))
1427 else:
1428 hil_contract_1_input.append((key, main_role_info[app_type][id_idx][field_idx]))
1379 else: 1429 else:
1380 hil_contract_1_input.append((key, field_idx)) 1430 hil_contract_1_input.append((key, field_idx))
1381 if not is_find and is_force: 1431 if not is_find and is_force:
...@@ -1417,7 +1467,10 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d ...@@ -1417,7 +1467,10 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d
1417 if len(main_role_info[app_type]) >= id_idx+1: 1467 if len(main_role_info[app_type]) >= id_idx+1:
1418 is_find = True 1468 is_find = True
1419 if isinstance(field_idx, int): 1469 if isinstance(field_idx, int):
1420 hil_contract_2_input.append((key, main_role_info[app_type][id_idx][field_idx])) 1470 if key == '抵押人签字' and is_bo_corporate:
1471 hil_contract_2_input.append((key, legal_name))
1472 else:
1473 hil_contract_2_input.append((key, main_role_info[app_type][id_idx][field_idx]))
1421 else: 1474 else:
1422 hil_contract_2_input.append((key, field_idx)) 1475 hil_contract_2_input.append((key, field_idx))
1423 if not is_find and is_force: 1476 if not is_find and is_force:
...@@ -1484,7 +1537,10 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d ...@@ -1484,7 +1537,10 @@ def get_se_cms_compare_info_auto(application_id, last_obj, application_entity, d
1484 if len(main_role_info[app_type]) >= id_idx+1: 1537 if len(main_role_info[app_type]) >= id_idx+1:
1485 is_find = True 1538 is_find = True
1486 if isinstance(field_idx, int): 1539 if isinstance(field_idx, int):
1487 afc_contract_input.append((key, main_role_info[app_type][id_idx][field_idx])) 1540 if (key == '借款人签字及时间' or key == '主借人签字') and is_bo_corporate:
1541 afc_contract_input.append((key, legal_name))
1542 else:
1543 afc_contract_input.append((key, main_role_info[app_type][id_idx][field_idx]))
1488 else: 1544 else:
1489 afc_contract_input.append((key, field_idx)) 1545 afc_contract_input.append((key, field_idx))
1490 if not is_find and is_force: 1546 if not is_find and is_force:
...@@ -1535,6 +1591,7 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect ...@@ -1535,6 +1591,7 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect
1535 is_cdfl_bo = False # 车贷分离,主借 1591 is_cdfl_bo = False # 车贷分离,主借
1536 is_cdfl_co = False # 车贷分离,共借 1592 is_cdfl_co = False # 车贷分离,共借
1537 role_count = 0 1593 role_count = 0
1594 borrower_name = ''
1538 # province = cms_info.get('province', '') 1595 # province = cms_info.get('province', '')
1539 for individual_info in cms_info.get('applicantInformation', []): 1596 for individual_info in cms_info.get('applicantInformation', []):
1540 role_count += 1 1597 role_count += 1
...@@ -1554,6 +1611,16 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect ...@@ -1554,6 +1611,16 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect
1554 if individual_info['applicantType'] == consts.APPLICANT_TYPE_ORDER[0] and not is_corporate: 1611 if individual_info['applicantType'] == consts.APPLICANT_TYPE_ORDER[0] and not is_corporate:
1555 is_cdfl_bo = True 1612 is_cdfl_bo = True
1556 1613
1614 # CHINARPA-4660 是否公户判断
1615 is_bo_corporate = False
1616 customersubType = individual_info.get('customersubType', '')
1617 if individual_info['applicantType'] == consts.APPLICANT_TYPE_ORDER[0] and is_corporate:
1618 is_bo_corporate = True
1619
1620 # CHINARPA-4660 财报主借人姓名赋值
1621 if individual_info['applicantType'] == consts.APPLICANT_TYPE_ORDER[0]:
1622 borrower_name = customer_name
1623
1557 for id_info in individual_info.get('IDInformation', []): 1624 for id_info in individual_info.get('IDInformation', []):
1558 if id_info.get('idType') in consts.SE_CMS_FIRST_ID_FIELD_MAPPING: 1625 if id_info.get('idType') in consts.SE_CMS_FIRST_ID_FIELD_MAPPING:
1559 license_en, is_prc = consts.SE_CMS_FIRST_ID_FIELD_MAPPING[id_info['idType']] 1626 license_en, is_prc = consts.SE_CMS_FIRST_ID_FIELD_MAPPING[id_info['idType']]
...@@ -1585,6 +1652,7 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect ...@@ -1585,6 +1652,7 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect
1585 else: 1652 else:
1586 bl_field_input.append(('establishmentDate', establishment_date)) 1653 bl_field_input.append(('establishmentDate', establishment_date))
1587 1654
1655 compare_log.info('{0} [bl_field_input] [{1}]'.format(log_base, bl_field_input))
1588 license_dict[consts.BL_EN] = bl_field_input 1656 license_dict[consts.BL_EN] = bl_field_input
1589 all_id_num.append(id_num) 1657 all_id_num.append(id_num)
1590 1658
...@@ -1601,6 +1669,7 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect ...@@ -1601,6 +1669,7 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect
1601 (customer_name, '、'.join(all_id_num), all_id_num[0]) 1669 (customer_name, '、'.join(all_id_num), all_id_num[0])
1602 ) 1670 )
1603 1671
1672 compare_log.info('{0} [license_dict] [{1}]'.format(log_base, license_dict))
1604 if len(license_dict) > 0: 1673 if len(license_dict) > 0:
1605 individual_info_dict.setdefault(individual_info['applicantType'], []).append(license_dict) 1674 individual_info_dict.setdefault(individual_info['applicantType'], []).append(license_dict)
1606 1675
...@@ -1721,6 +1790,39 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect ...@@ -1721,6 +1790,39 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect
1721 vehicle_info[consts.UCI_EN] = vehicle_field_input 1790 vehicle_info[consts.UCI_EN] = vehicle_field_input
1722 compare_info['vehicleInfo'] = vehicle_info 1791 compare_info['vehicleInfo'] = vehicle_info
1723 1792
1793 # 公户财务报表-------------------------------------------------------------------------------------------------
1794 financial_statement_info = {}
1795 financial_statement_input = []
1796 corporateFinancialInformation = cms_info.get('corporateFinancialInformation', {})
1797 hashCode = corporateFinancialInformation.get('hashCode', '')
1798 fiscalYear = corporateFinancialInformation.get('fiscalYear', '')
1799 totalAssets = corporateFinancialInformation.get('totaAssets', 0)
1800 totalLiabilitiesAndOwnersEquity = corporateFinancialInformation.get('totalLiabilitiesAndOwnersEquity', 0)
1801 netProfit = corporateFinancialInformation.get('netProfit', 0)
1802 if is_bo_corporate:
1803 financial_statement_input.append((consts.SE_FS_FIELD[0], hashCode))
1804 financial_statement_input.append((consts.SE_FS_FIELD[1], consts.SE_STAMP_VALUE))
1805 financial_statement_input.append((consts.SE_FS_FIELD[2], fiscalYear))
1806 financial_statement_input.append((consts.SE_FS_FIELD[3], [totalAssets, totalLiabilitiesAndOwnersEquity]))
1807 financial_statement_input.append((consts.SE_FS_FIELD[4], [netProfit]))
1808 financial_statement_info[consts.FS_EN] = financial_statement_input
1809 compare_info['financialStatementInfo'] = financial_statement_info
1810
1811 # 财报情况说明
1812 financial_statement_supplementary_info = {}
1813 financial_statement_supplementary_input = []
1814 cashAndCashEquivalentAtEndOfPeriod = corporateFinancialInformation.get('cashAndCashEquivalentAtEndOfPeriod', '')
1815 if cashAndCashEquivalentAtEndOfPeriod == '':
1816 need_fss = False
1817 else:
1818 need_fss = float(cashAndCashEquivalentAtEndOfPeriod) == 0
1819 if is_bo_corporate and need_fss:
1820 financial_statement_supplementary_input.append((consts.SE_FSS_FIELD[0], borrower_name))
1821 financial_statement_supplementary_input.append((consts.SE_FSS_FIELD[1], consts.SE_STAMP_VALUE))
1822 financial_statement_supplementary_info[consts.FSS_EN] = financial_statement_supplementary_input
1823 compare_info['financialStatementSupplementaryInfo'] = financial_statement_supplementary_info
1824
1825
1724 # 银行卡------------------------------------------------------------------------------------------------------- 1826 # 银行卡-------------------------------------------------------------------------------------------------------
1725 bank_info = {} 1827 bank_info = {}
1726 bank_name = cms_info.get('bankAccountDetails', {}).get('bankName', '') 1828 bank_name = cms_info.get('bankAccountDetails', {}).get('bankName', '')
...@@ -1939,7 +2041,10 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect ...@@ -1939,7 +2041,10 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect
1939 if len(main_role_info[app_type]) >= id_idx+1: 2041 if len(main_role_info[app_type]) >= id_idx+1:
1940 is_find = True 2042 is_find = True
1941 if isinstance(field_idx, int): 2043 if isinstance(field_idx, int):
1942 hil_contract_1_input.append((key, main_role_info[app_type][id_idx][field_idx])) 2044 if key == '承租人签字' and is_bo_corporate:
2045 hil_contract_1_input.append((key, legal_name))
2046 else:
2047 hil_contract_1_input.append((key, main_role_info[app_type][id_idx][field_idx]))
1943 else: 2048 else:
1944 hil_contract_1_input.append((key, field_idx)) 2049 hil_contract_1_input.append((key, field_idx))
1945 if not is_find and is_force: 2050 if not is_find and is_force:
...@@ -1958,7 +2063,10 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect ...@@ -1958,7 +2063,10 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect
1958 (consts.SE_HIL_CON_3_FIELD[6], main_id), 2063 (consts.SE_HIL_CON_3_FIELD[6], main_id),
1959 ] 2064 ]
1960 if online_sign: 2065 if online_sign:
1961 hil_contract_3_input.append((consts.SE_HIL_CON_3_FIELD[7], main_name)) 2066 if is_bo_corporate:
2067 hil_contract_3_input.append((consts.SE_HIL_CON_3_FIELD[7], legal_name))
2068 else:
2069 hil_contract_3_input.append((consts.SE_HIL_CON_3_FIELD[7], main_name))
1962 contract_info[consts.HIL_CONTRACT_3_EN] = hil_contract_3_input 2070 contract_info[consts.HIL_CONTRACT_3_EN] = hil_contract_3_input
1963 2071
1964 # HIL合同 车辆租赁抵押合同 -------------------------------------------------------------------------------------- 2072 # HIL合同 车辆租赁抵押合同 --------------------------------------------------------------------------------------
...@@ -1981,7 +2089,10 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect ...@@ -1981,7 +2089,10 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect
1981 if len(main_role_info[app_type]) >= id_idx+1: 2089 if len(main_role_info[app_type]) >= id_idx+1:
1982 is_find = True 2090 is_find = True
1983 if isinstance(field_idx, int): 2091 if isinstance(field_idx, int):
1984 hil_contract_2_input.append((key, main_role_info[app_type][id_idx][field_idx])) 2092 if key == '抵押人签字' and is_bo_corporate:
2093 hil_contract_2_input.append((key, legal_name))
2094 else:
2095 hil_contract_2_input.append((key, main_role_info[app_type][id_idx][field_idx]))
1985 else: 2096 else:
1986 hil_contract_2_input.append((key, field_idx)) 2097 hil_contract_2_input.append((key, field_idx))
1987 if not is_find and is_force: 2098 if not is_find and is_force:
...@@ -2048,7 +2159,10 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect ...@@ -2048,7 +2159,10 @@ def get_se_cms_compare_info(application_id, last_obj, application_entity, detect
2048 if len(main_role_info[app_type]) >= id_idx+1: 2159 if len(main_role_info[app_type]) >= id_idx+1:
2049 is_find = True 2160 is_find = True
2050 if isinstance(field_idx, int): 2161 if isinstance(field_idx, int):
2051 afc_contract_input.append((key, main_role_info[app_type][id_idx][field_idx])) 2162 if (key == '借款人签字及时间' or key == '主借人签字') and is_bo_corporate:
2163 afc_contract_input.append((key, legal_name))
2164 else:
2165 afc_contract_input.append((key, main_role_info[app_type][id_idx][field_idx]))
2052 else: 2166 else:
2053 afc_contract_input.append((key, field_idx)) 2167 afc_contract_input.append((key, field_idx))
2054 if not is_find and is_force: 2168 if not is_find and is_force:
...@@ -2346,6 +2460,7 @@ def se_compare_license(license_en, ocr_res_dict, field_list): ...@@ -2346,6 +2460,7 @@ def se_compare_license(license_en, ocr_res_dict, field_list):
2346 section_img_info = dict() 2460 section_img_info = dict()
2347 field_img_path_dict = dict() 2461 field_img_path_dict = dict()
2348 ocr_res_str = ocr_res_dict.get(ocr_field) 2462 ocr_res_str = ocr_res_dict.get(ocr_field)
2463 compare_log.info('{0} [{1}_compare] ocr_res:{2}'.format(log_base, license_en, ocr_res_str))
2349 if ocr_res_str is not None: 2464 if ocr_res_str is not None:
2350 ocr_res_list = json.loads(ocr_res_str) 2465 ocr_res_list = json.loads(ocr_res_str)
2351 2466
...@@ -2395,11 +2510,17 @@ def se_compare_license(license_en, ocr_res_dict, field_list): ...@@ -2395,11 +2510,17 @@ def se_compare_license(license_en, ocr_res_dict, field_list):
2395 2510
2396 if isinstance(ocr_str, str): 2511 if isinstance(ocr_str, str):
2397 result = getattr(cp, compare_logic[name][1])(value, ocr_str, **compare_logic[name][2]) 2512 result = getattr(cp, compare_logic[name][1])(value, ocr_str, **compare_logic[name][2])
2513 compare_log.info('{0} [{1}_license] [field:{2}] [input_str:{3}] [ocr_str:{4}] [result:{5}]'.format(log_base, license_en, name, value, ocr_str, result))
2398 no_key = False 2514 no_key = False
2399 # 二手车交易凭证 日期 2515 # 二手车交易凭证 日期
2400 elif ocr_field == consts.JYPZ_OCR_FIELD and name == consts.SE_GB_USED_FIELD[2]: 2516 elif ocr_field == consts.JYPZ_OCR_FIELD and name == consts.SE_GB_USED_FIELD[2]:
2401 result = getattr(cp, compare_logic[name][1])(value, ocr_str, **compare_logic[name][2]) 2517 result = getattr(cp, compare_logic[name][1])(value, ocr_str, **compare_logic[name][2])
2402 no_key = False 2518 no_key = False
2519 elif isinstance(ocr_str, int):
2520 # 目前应该只有财报的公章
2521 result = getattr(cp, compare_logic[name][1])(value, ocr_str, **compare_logic[name][2])
2522 compare_log.info('{0} [{1}_license] [field:{2}] [input_str:{3}] [ocr_str:{4}] [result:{5}]'.format(log_base, license_en, name, value, ocr_str, result))
2523 no_key = False
2403 else: 2524 else:
2404 result = consts.RESULT_N 2525 result = consts.RESULT_N
2405 ocr_str = empty_str 2526 ocr_str = empty_str
...@@ -2523,6 +2644,113 @@ def se_compare_license(license_en, ocr_res_dict, field_list): ...@@ -2523,6 +2644,113 @@ def se_compare_license(license_en, ocr_res_dict, field_list):
2523 2644
2524 return result_field_list, no_ocr_result, field_img_path_dict 2645 return result_field_list, no_ocr_result, field_img_path_dict
2525 2646
2647 def se_fs_compare(license_en, ocr_res_dict, field_list):
2648 compare_log.info('{0} [se_fs_compare] start'.format(log_base))
2649 ocr_field, compare_logic, special_expiry_date = consts.SE_COMPARE_FIELD[license_en]
2650
2651 is_find = False
2652 no_ocr_result = False
2653 special_expiry_date_slice = False
2654 result_field_list = []
2655 section_img_info = dict()
2656 field_img_path_dict = dict()
2657 ocr_res_str = ocr_res_dict.get(ocr_field)
2658 compare_log.info('{0} [se_fs_compare] ocr_res:{1}'.format(log_base, ocr_res_str))
2659 if ocr_res_str is not None:
2660 ocr_res_list = json.loads(ocr_res_str)
2661
2662 length = len(ocr_res_list)
2663
2664 last_ocr_str = ocr_res_list[length-1]
2665 compare_log.info('{0} [se_fs_compare] [code len {1}] [stamp len {2}] ]'.format(log_base, len(last_ocr_str.get('code',{})), len(last_ocr_str.get('stamp',{}))))
2666
2667 if len(last_ocr_str.get('code',{})) != 3 or len(last_ocr_str.get('stamp',{})) != 3:
2668 # 先判断最后一次上传的文件是不是包括3个,如果不是直接返回"未提供财报或财报不完整"
2669 compare_log.info('{0} [se_fs_compare error] last ocr result len < 3'.format(log_base))
2670 else:
2671 for res_idx in range(length-1, -1, -1):
2672 if is_find:
2673 break
2674
2675 for idx, (name, value) in enumerate(field_list):
2676 compare_log.info('{0} [se_fs_compare for ... in] [idx:{1}] [name:{2}] [value:{3}]'.format(log_base, idx, name, value))
2677 ocr_str = ocr_res_list[res_idx].get(compare_logic[name][0])
2678 compare_log.info('{0} [se_fs_compare ocr_str] [ocr_str:{1}]'.format(log_base, ocr_str))
2679 #财年/资产负债表内容/利润表内容 不需要ocr结果,所以即使为空也可以进入比对
2680 if isinstance(ocr_str, str) or isinstance(ocr_str, dict) or compare_logic[name][0] == '财年' or compare_logic[name][0] == '资产负债表内容' or compare_logic[name][0] == '利润表内容':
2681 result = getattr(cp, compare_logic[name][1])(value, ocr_str, **compare_logic[name][2])
2682 compare_log.info('{0} [se_fs_compare result:{1}]'.format(log_base, result))
2683 no_key = False
2684 else:
2685 result = consts.RESULT_N
2686 ocr_str = empty_str
2687 no_key = True
2688
2689 if idx == 0 and result == consts.RESULT_N and length > 1:
2690 break
2691
2692 is_find = True
2693 section_img_info[consts.SECTION_IMG_PATH_KEY] = ocr_res_list[res_idx].get(consts.SECTION_IMG_PATH_KEY, '')
2694 section_img_info[consts.ALL_POSITION_KEY] = ocr_res_list[res_idx].get(consts.ALL_POSITION_KEY, {})
2695 if special_expiry_date:
2696 section_img_info[consts.SECTION_IMG_PATH_KEY_2] = ocr_res_list[res_idx].get(
2697 consts.SECTION_IMG_PATH_KEY_2, '')
2698 section_img_info[consts.ALL_POSITION_KEY_2] = ocr_res_list[res_idx].get(consts.ALL_POSITION_KEY_2, {})
2699
2700 img_path = ocr_res_list[res_idx].get(consts.IMG_PATH_KEY, '') if result == consts.RESULT_N else empty_str
2701 if isinstance(value, list):
2702 value = json.dumps(value, ensure_ascii=False)
2703 error_type = empty_error_type if result == consts.RESULT_Y else ErrorType.OCR.value
2704 result_field_list.append((name, value, result, ocr_str, img_path, error_type, compare_logic[name][3]))
2705 else:
2706 no_ocr_result = True
2707
2708 if not is_find:
2709 for name, value in field_list:
2710 if isinstance(value, list):
2711 value = json.dumps(value, ensure_ascii=False)
2712 no_find_str = consts.FS_NO_FIND
2713 result_field_list.append((name, value, consts.RESULT_N, empty_str, empty_str, ErrorType.NF.value, no_find_str))
2714
2715 if is_find:
2716 section_img_path = section_img_info.get(consts.SECTION_IMG_PATH_KEY, '')
2717 if os.path.exists(section_img_path):
2718 failed_field = []
2719 base_img_path = empty_str
2720 for name, _, result, _, img_path, _, _ in result_field_list:
2721 if result == consts.RESULT_N:
2722 if special_expiry_date_slice and name == 'idExpiryDate':
2723 continue
2724 failed_field.append(name)
2725 if base_img_path == empty_str:
2726 base_img_path = img_path
2727 if len(failed_field) > 0:
2728 info = section_img_info.get(consts.ALL_POSITION_KEY, {})
2729 section_position = info.get(consts.POSITION_KEY, {})
2730 section_angle = info.get(consts.ANGLE_KEY, 0)
2731 try:
2732 last_img = img_process(section_img_path, section_position, section_angle)
2733 except Exception as e:
2734 for field in failed_field:
2735 field_img_path_dict[field] = base_img_path
2736 else:
2737 pre, suf = os.path.splitext(section_img_path)
2738 for field in failed_field:
2739 try:
2740 res_field = compare_logic[field][0]
2741 is_valid, coord_tuple = field_build_coordinates(info.get(res_field, {}))
2742 if is_valid:
2743 save_path = '{0}_{1}{2}'.format(pre, field, suf)
2744 field_img = last_img[coord_tuple[0]:coord_tuple[1], coord_tuple[2]:coord_tuple[3], :]
2745 cv2.imwrite(save_path, field_img)
2746 field_img_path_dict[field] = save_path
2747 else:
2748 field_img_path_dict[field] = base_img_path
2749 except Exception as e:
2750 field_img_path_dict[field] = base_img_path
2751
2752 return result_field_list, field_img_path_dict
2753
2526 2754
2527 def se_compare_license_id(license_en, id_res_list, field_list, is_auto): 2755 def se_compare_license_id(license_en, id_res_list, field_list, is_auto):
2528 if is_auto: 2756 if is_auto:
...@@ -3023,9 +3251,11 @@ def se_compare_process(compare_info, ocr_res_dict, is_gsyh, is_auto, id_res_list ...@@ -3023,9 +3251,11 @@ def se_compare_process(compare_info, ocr_res_dict, is_gsyh, is_auto, id_res_list
3023 rpa_failure_reason = {} 3251 rpa_failure_reason = {}
3024 field_result_dict = {} 3252 field_result_dict = {}
3025 3253
3254 # compare_info 格式: {'financialStatementInfo': {'Financial Statement': [('11', '22'), ('111', '222'), ('1111', '2222')]}}
3026 for info_key, info_value in compare_info.items(): 3255 for info_key, info_value in compare_info.items():
3027 if info_key in ['individualCusInfo', 'applicantInformation']: 3256 if info_key in ['individualCusInfo', 'applicantInformation']:
3028 for idx, license_list in info_value.items(): 3257 for idx, license_list in info_value.items():
3258 compare_log.info('{0} [compare license_list] [entity={1}]'.format(log_base, license_list))
3029 for license_dict in license_list: 3259 for license_dict in license_list:
3030 for license_en, field_list in license_dict.items(): 3260 for license_en, field_list in license_dict.items():
3031 strip_list = [] 3261 strip_list = []
...@@ -3081,6 +3311,7 @@ def se_compare_process(compare_info, ocr_res_dict, is_gsyh, is_auto, id_res_list ...@@ -3081,6 +3311,7 @@ def se_compare_process(compare_info, ocr_res_dict, is_gsyh, is_auto, id_res_list
3081 each_license_failed_count, len(result_field_list))) 3311 each_license_failed_count, len(result_field_list)))
3082 else: 3312 else:
3083 for license_en, field_list in info_value.items(): 3313 for license_en, field_list in info_value.items():
3314 compare_log.info('{0} [compare license_en] [entity={1}]'.format(log_base, license_en))
3084 strip_list = [] 3315 strip_list = []
3085 for a, b in field_list: 3316 for a, b in field_list:
3086 if isinstance(b, str): 3317 if isinstance(b, str):
...@@ -3104,6 +3335,8 @@ def se_compare_process(compare_info, ocr_res_dict, is_gsyh, is_auto, id_res_list ...@@ -3104,6 +3335,8 @@ def se_compare_process(compare_info, ocr_res_dict, is_gsyh, is_auto, id_res_list
3104 result_field_list, field_img_path_dict = se_contract_qrs_compare(license_en, ocr_res_dict, strip_list) 3335 result_field_list, field_img_path_dict = se_contract_qrs_compare(license_en, ocr_res_dict, strip_list)
3105 elif license_en == consts.BS_EN: 3336 elif license_en == consts.BS_EN:
3106 result_field_list, field_img_path_dict = se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type) 3337 result_field_list, field_img_path_dict = se_bs_compare(license_en, ocr_res_dict, strip_list, is_auto, aa_type)
3338 elif license_en == consts.FS_EN:
3339 result_field_list, field_img_path_dict = se_fs_compare(license_en, ocr_res_dict, strip_list)
3107 else: 3340 else:
3108 result_field_list, _, field_img_path_dict = se_compare_license(license_en, ocr_res_dict, strip_list) 3341 result_field_list, _, field_img_path_dict = se_compare_license(license_en, ocr_res_dict, strip_list)
3109 3342
......
...@@ -704,5 +704,58 @@ class Comparison: ...@@ -704,5 +704,58 @@ class Comparison:
704 except Exception as e: 704 except Exception as e:
705 return self.RESULT_N 705 return self.RESULT_N
706 706
707 def hash_code_compare(self, input_str, ocr_dict, **kwargs):
708 try:
709 balance_sheet_hash = ocr_dict.get('balance_sheet','')
710 income_statement_hash = ocr_dict.get('income_statement','')
711 cash_flow_statement_hash = ocr_dict.get('cash_flow_statement','')
712 if balance_sheet_hash != input_str or income_statement_hash != input_str or cash_flow_statement_hash != input_str:
713 return self.RESULT_N
714 else:
715 return self.RESULT_Y
716 except Exception as e:
717 return self.RESULT_N
718
719 def stamp_dict_compare(self, input_str, ocr_dict, **kwargs):
720 try:
721 balance_sheet_stamp = ocr_dict.get('balance_sheet','')
722 income_statement_stamp = ocr_dict.get('income_statement','')
723 cash_flow_statement_stamp = ocr_dict.get('cash_flow_statement','')
724 if balance_sheet_stamp != 1 or income_statement_stamp != 1 or cash_flow_statement_stamp != 1:
725 return self.RESULT_N
726 else:
727 return self.RESULT_Y
728 except Exception as e:
729 return self.RESULT_N
730
731 def stamp_str_compare(self, input_str, ocr_str, **kwargs):
732 try:
733 if ocr_str != 1:
734 return self.RESULT_N
735 else:
736 return self.RESULT_Y
737 except Exception as e:
738 return self.RESULT_N
739
740 def fiscal_year_compare(self, input_str, ocr_list, **kwargs):
741 try:
742 this_year_str = datetime.now().strftime('%Y')
743 this_year = int(this_year_str)
744 last_year = this_year - 1
745 if str(input_str) != str(this_year) and str(input_str) != str(last_year):
746 return self.RESULT_N
747 return self.RESULT_Y
748 except Exception as e:
749 return self.RESULT_N
750
751 def input_list_not_zero_compare(self, input_list, ocr_list, **kwargs):
752 try:
753 for item in input_list:
754 if float(item) == 0:
755 return self.RESULT_N
756 return self.RESULT_Y
757 except Exception as e:
758 return self.RESULT_N
759
707 760
708 cp = Comparison() 761 cp = Comparison()
......
1 import pyodbc
2
3 hil_sql = """
4 ALTER TABLE hil_ocr_result ADD fs_ocr nvarchar(max);
5 ALTER TABLE hil_se_ocr_result ADD fs_ocr nvarchar(max);
6 ALTER TABLE hil_ocr_result ADD fss_ocr nvarchar(max);
7 ALTER TABLE hil_se_ocr_result ADD fss_ocr nvarchar(max);
8 """
9
10 afc_sql = """
11 ALTER TABLE afc_ocr_result ADD fs_ocr nvarchar(max);
12 ALTER TABLE afc_se_ocr_result ADD fs_ocr nvarchar(max);
13 ALTER TABLE afc_ocr_result ADD fss_ocr nvarchar(max);
14 ALTER TABLE afc_se_ocr_result ADD fss_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!