63e0b4a3 by 周伟奇

fix merge

2 parents d56c5dd6 da278df8
......@@ -1209,6 +1209,7 @@ COMPARE_FIELDS = (MVI_OCR_FIELD,
DDA_OCR_FIELD,
HMH_OCR_FIELD,
JYPZ_OCR_FIELD,
HT_FIELD,
)
# 身份证
......@@ -1411,36 +1412,62 @@ SE_AFC_CON_MAP = {
'还款账号': (2, '还款账号', '账号'),
'户名': (2, '还款账号', '户名'),
'开户行': (2, '还款账号', '开户行'),
'借款人签字及时间': (1, '借款人签字及时间', None),
'借款人姓名': (2, '借款人及抵押人', 'name'),
'借款人证件号': (2, '借款人及抵押人', 'id'),
'共借人姓名': (2, '共同借款人及共同抵押人', 'name'),
'共借人证件号': (2, '共同借款人及共同抵押人', 'id'),
'保证人姓名1': (2, '保证人1', 'name'),
'保证人证件号1': (2, '保证人1', 'id'),
'保证人姓名2': (2, '保证人2', 'name'),
'保证人证件号2': (2, '保证人2', 'id'),
'主借人签字': (8, '主借人签字', '签字'),
'主借人日期': (8, '主借人签字', '日期'),
'共借人签字': (8, '共借人签字', '签字'),
'共借人日期': (8, '共借人签字', '日期'),
'保证人签字1': (8, '保证人1签字', '签字'),
'保证人日期1': (8, '保证人1签字', '日期'),
'保证人签字2': (8, '保证人2签字', '签字'),
'保证人日期2': (8, '保证人2签字', '日期'),
'见证人签字': (8, '见证人签字', '签字'),
'见证人日期': (8, '见证人签字', '日期'),
'还款计划表': (3, '还款计划表', None),
}
SE_AFC_CON_FIELD = ['合同编号-每页', '所购车辆价格-小写-重要条款', '车架号-重要条款', '贷款本金金额-重要条款', '贷款期限-重要条款',
'车辆贷款本金金额-重要条款', '附加产品融资贷款本金总额-重要条款', '所购车辆价格', '车架号', '经销商',
'贷款本金金额', '车辆贷款本金金额', '附加产品融资贷款本金总额', '贷款期限', '还款账号', '户名', '开户行',
'还款计划表', '项目1', '用途总金额', '贷款本金', '附加产品融资贷款本金总金额', '购置税校验']
#
# '借款人签字-重要条款'
# '借款人姓名'
# '借款人证件号'
# '主借人签字'
# '主借人日期'
#
# '共借人姓名'
# '共借人证件号'
# '共借人签字'
# '共借人日期'
#
# '保证人姓名1'
# '保证人证件号1'
# '保证人签字1'
# '保证人日期'
#
# '保证人姓名2'
# '保证人证件号2'
# '保证人签字2'
# '保证人日期'
#
# '见证人签字'
# '见证人日期'
'还款计划表', '见证人签字', '见证人日期']
# '项目1', '用途总金额', '贷款本金', '附加产品融资贷款本金总金额', '购置税校验'
ROLE_LIST = [
('借款人签字及时间', 'Borrower', 0, 0, True),
('借款人姓名', 'Borrower', 0, 0, True),
('借款人证件号', 'Borrower', 0, 2, True),
('主借人签字', 'Borrower', 0, 0, True),
('主借人日期', 'Borrower', 0, '有', True),
('共借人姓名', 'Co-Borrower', 0, 0, False),
('共借人证件号', 'Co-Borrower', 0, 2, False),
('共借人签字', 'Co-Borrower', 0, 0, False),
('共借人日期', 'Co-Borrower', 0, '有', False),
('保证人姓名1', 'Guarantor', 0, 0, False),
('保证人证件号1', 'Guarantor', 0, 2, False),
('保证人签字1', 'Guarantor', 0, 0, False),
('保证人日期1', 'Guarantor', 0, '有', False),
('保证人姓名2', 'Guarantor', 1, 0, False),
('保证人证件号2', 'Guarantor', 1, 2, False),
('保证人签字2', 'Guarantor', 1, 0, False),
('保证人日期2', 'Guarantor', 1, '有', False),
]
GZS_NAME = '车辆购置税'
GZS_STATUS = ['Y', 'N', 'O']
......@@ -1598,11 +1625,6 @@ HMH_COMPARE_LOGIC = {
'签字': ('借款人签字/盖章', 'se_common_compare', {}, '抵押登记豁免函签字需人工核查'),
}
SE_AFC_CON_FIELD = ['合同编号-每页', '所购车辆价格-小写-重要条款', '车架号-重要条款', '贷款本金金额-重要条款', '贷款期限-重要条款',
'车辆贷款本金金额-重要条款', '附加产品融资贷款本金总额-重要条款', '所购车辆价格', '车架号', '经销商',
'贷款本金金额', '车辆贷款本金金额', '附加产品融资贷款本金总额', '贷款期限', '还款账号', '户名', '开户行',
'还款计划表', '项目1', '用途总金额', '贷款本金', '附加产品融资贷款本金总金额', '购置税校验']
HT_COMPARE_LOGIC = {
'合同编号-每页': ('合同编号-每页', 'se_list_compare', {}, '合同编号与系统不一致'),
'所购车辆价格-小写-重要条款': ('所购车辆价格-小写-重要条款', 'se_amount_str_compare', {}, '合同首页中车辆价格与系统不一致'),
......@@ -1621,8 +1643,33 @@ HT_COMPARE_LOGIC = {
'还款账号': ('还款账号', 'se_common_compare', {}, '主合同页中还款账号与系统不一致'),
'户名': ('户名', 'se_common_compare', {}, '主合同页中户名与系统不一致'),
'开户行': ('开户行', 'se_both_contain_compare', {}, '主合同页中开户行与系统不一致'),
'借款人签字及时间': ('借款人签字及时间', 'se_common_compare', {}, '合同首页签字项与系统不一致'),
'借款人姓名': ('借款人姓名', 'se_common_compare', {}, '主合同主借人姓名与系统不一致'),
'借款人证件号': ('借款人证件号', 'se_common_compare', {}, '主合同主借人证件号码与系统不一致'),
'共借人姓名': ('共借人姓名', 'se_common_compare', {}, '主合同共借人姓名与系统不一致'),
'共借人证件号': ('共借人证件号', 'se_common_compare', {}, '主合同共借人证件号码与系统不一致'),
'保证人姓名1': ('保证人姓名1', 'se_common_compare', {}, '主合同担保人1姓名与系统不一致'),
'保证人证件号1': ('保证人证件号1', 'se_common_compare', {}, '主合同担保人1证件号码与系统不一致'),
'保证人姓名2': ('保证人姓名2', 'se_common_compare', {}, '主合同担保人2姓名与系统不一致'),
'保证人证件号2': ('保证人证件号2', 'se_common_compare', {}, '主合同担保人2证件号码与系统不一致'),
'主借人签字': ('主借人签字', 'se_common_compare', {}, '合同主借款人签字与系统不一致'),
'主借人日期': ('主借人日期', 'se_have_compare', {}, '合同主借款人签字日期无'),
'共借人签字': ('共借人签字', 'se_common_compare', {}, '合同共借人签字与系统不一致'),
'共借人日期': ('共借人日期', 'se_have_compare', {}, '合同共借人签字日期无'),
'保证人签字1': ('保证人签字1', 'se_common_compare', {}, '合同担保人1签字与系统不一致'),
'保证人日期1': ('保证人日期1', 'se_have_compare', {}, '合同担保人1签字日期无'),
'保证人签字2': ('保证人签字2', 'se_common_compare', {}, '合同担保人2签字与系统不一致'),
'保证人日期2': ('保证人日期2', 'se_have_compare', {}, '合同担保人2签字日期无'),
'见证人签字': ('见证人签字', 'se_have_compare', {}, '合同见证人无'),
'见证人日期': ('见证人日期', 'se_date_contain_compare', {}, '合同见证人签字日期不符合逻辑'),
'还款计划表': ('见证人日期', 'se_schedule_compare', {}, '还款计划表与系统不一致'),
}
# MVC_OCR_FIELD = 'mvc_ocr'
SE_DETECT_CARD = [UCI_EN, JYPZ_EN, HMH_EN, DDA_EN]
......
......@@ -1121,44 +1121,58 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
(consts.SE_AFC_CON_FIELD[17], schedule_list_str),
]
asp_list = []
for asp_info in cms_info.get('associatedServices', []):
asp_list.append(
(
asp_info.get('associatedServices', ''),
asp_info.get('price', 0.0),
asp_info.get('financed', 0.0)
)
)
if len(asp_list) > 0:
fin_total = 0
gzs_status = consts.GZS_STATUS[1]
for asp_name, asp_price, asp_fin in asp_list:
if gzs_status == consts.GZS_STATUS[1]:
if consts.GZS_NAME in asp_name:
gzs_status = consts.GZS_STATUS[0]
if gzs_status == consts.GZS_STATUS[0]:
if consts.GZS_NAME not in asp_name:
gzs_status = consts.GZS_STATUS[2]
afc_contract_input.extend(
[
(consts.SE_AFC_CON_FIELD[18], asp_name),
(consts.SE_AFC_CON_FIELD[19], str(asp_price)),
(consts.SE_AFC_CON_FIELD[20], str(asp_fin)),
]
)
fin_total += asp_fin
afc_contract_input.append((consts.SE_AFC_CON_FIELD[21], str(fin_total)))
# asp_list = []
# for asp_info in cms_info.get('associatedServices', []):
# asp_list.append(
# (
# asp_info.get('associatedServices', ''),
# asp_info.get('price', 0.0),
# asp_info.get('financed', 0.0)
# )
# )
# CMS Vehicle Price / 1.13 * 10 %
gzs_list = [gzs_status]
if gzs_status != consts.GZS_STATUS[1]:
gzs_value = str(cms_info.get('financialInformation', {}).get('vehiclePrincipal', 0.0) * 0.1 / 1.13)
gzs_list.append(gzs_value)
afc_contract_input.append((consts.SE_AFC_CON_FIELD[22], consts.SPLIT_STR.join(gzs_list)))
# if len(asp_list) > 0:
# fin_total = 0
# gzs_status = consts.GZS_STATUS[1]
# for asp_name, asp_price, asp_fin in asp_list:
# if gzs_status == consts.GZS_STATUS[1]:
# if consts.GZS_NAME in asp_name:
# gzs_status = consts.GZS_STATUS[0]
# if gzs_status == consts.GZS_STATUS[0]:
# if consts.GZS_NAME not in asp_name:
# gzs_status = consts.GZS_STATUS[2]
# afc_contract_input.extend(
# [
# (consts.SE_AFC_CON_FIELD[18], asp_name),
# (consts.SE_AFC_CON_FIELD[19], str(asp_price)),
# (consts.SE_AFC_CON_FIELD[20], str(asp_fin)),
# ]
# )
# fin_total += asp_fin
# afc_contract_input.append((consts.SE_AFC_CON_FIELD[21], str(fin_total)))
#
# # CMS Vehicle Price / 1.13 * 10 %
# gzs_list = [gzs_status]
# if gzs_status != consts.GZS_STATUS[1]:
# gzs_value = str(cms_info.get('financialInformation', {}).get('vehiclePrincipal', 0.0) * 0.1 / 1.13)
# gzs_list.append(gzs_value)
# afc_contract_input.append((consts.SE_AFC_CON_FIELD[22], consts.SPLIT_STR.join(gzs_list)))
# '借款人签字及时间', 'Borrower', 0, 0, True
for key, app_type, id_idx, field_idx, is_force in consts.ROLE_LIST:
is_find = False
if app_type in main_role_info:
if len(main_role_info[app_type]) >= id_idx+1:
is_find = True
if isinstance(field_idx, int):
afc_contract_input.append((key, main_role_info[app_type][id_idx][field_idx]))
else:
afc_contract_input.append((key, field_idx))
if not is_find and is_force:
afc_contract_input.append((key, empty_str))
# role_name, _, role_id = main_role_info[applicant_type][0]
afc_contract_input.append((consts.SE_AFC_CON_FIELD[18], consts.SE_STAMP_VALUE))
afc_contract_input.append((consts.SE_AFC_CON_FIELD[19], empty_str))
contract_info[consts.AFC_CONTRACT_EN] = afc_contract_input
compare_info['contract'] = contract_info
......@@ -1689,7 +1703,7 @@ def se_afc_contract_compare(license_en, ocr_res_dict, strip_list):
if isinstance(ocr_str_or_list, str) or isinstance(ocr_str_or_list, list):
result = getattr(cp, compare_logic[name][1])(value, ocr_str_or_list, **compare_logic[name][2])
if isinstance(ocr_str_or_list, list):
ocr_str = '、'.join(ocr_str_or_list)
ocr_str = json.dumps(ocr_str_or_list)
else:
ocr_str = ocr_str_or_list
else:
......@@ -1922,7 +1936,15 @@ def se_compare_process(compare_info, ocr_res_dict):
value_str = json.dumps(value)
reason_list.append('{0}: {1}'.format(key, value_str))
failure_reason_str = '、'.join(reason_list)
cn_failure_reason_str = '\n'.join(set(cn_reason_list))
tmp_set = set()
last_cn_reason_list = []
for i in cn_reason_list:
if i in tmp_set:
continue
else:
tmp_set.add(i)
last_cn_reason_list.append(i)
cn_failure_reason_str = '\n'.join(last_cn_reason_list)
return compare_result, total_fields, failed_count, successful_at_this_level, failure_reason_str, cn_failure_reason_str
......
......@@ -17,6 +17,7 @@ class Comparison:
self.CSSME = 'CSSME'
self.CSOTH = 'CSOTH'
self.SPLIT_STR = '_'
self.SCHEDULE_SPLIT_STR = '、'
self.TYPE_MAPPING = (
(r'个体工商户', self.CSIBM),
......@@ -167,6 +168,23 @@ class Comparison:
else:
return self.RESULT_N
def se_date_contain_compare(self, input_str, ocr_str_or_list, **kwargs):
return self.RESULT_Y
def se_schedule_compare(self, input_str, ocr_str_or_list, **kwargs):
if isinstance(ocr_str_or_list, list):
if len(ocr_str_or_list) > 0:
ocr_str_or_list.pop(0)
schedule_list = []
for row_list in ocr_str_or_list:
tmp_str = "{1}{0}{2}".format(self.SPLIT_STR, row_list[0], row_list[1])
schedule_list.append(tmp_str)
return self.build_res(self.SCHEDULE_SPLIT_STR.join(schedule_list) == input_str)
else:
return self.RESULT_N
else:
return self.RESULT_N
def se_name_compare(self, input_str, ocr_str, **kwargs):
if kwargs.get('is_passport'):
input_tmp = input_str.upper().replace(' ', '')
......@@ -285,6 +303,11 @@ class Comparison:
else:
return self.RESULT_Y
def se_have_compare(self, input_str, ocr_str, **kwargs):
if ocr_str == '' or ocr_str == '无':
return self.RESULT_N
return self.RESULT_Y
def se_both_contain_compare(self, input_str, ocr_str, **kwargs):
if ocr_str.find(input_str) == -1 and input_str.find(ocr_str) == -1:
return self.RESULT_N
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!