90b2c2a2 by 周伟奇

add pre contract

1 parent a52dd7ca
......@@ -51,11 +51,11 @@ def get_pos_compare_info(pos_info):
# 银行卡
bank_info = pos_info.get('bankInfo', {})
bank_status = bank_info.get('bankVerificationStatus', '')
if bank_status != 'PASS':
account_no = bank_info.get('accountNo', '')
bank_name = bank_info.get('bankName', '')
account_holder_name = bank_info.get('accountHolderName', '')
if bank_status != 'PASS':
field_input = [
(consts.BC_FIELDS[0], account_no),
(consts.BC_FIELDS[1], bank_name),
......@@ -86,12 +86,91 @@ def get_pos_compare_info(pos_info):
]
compare_info.setdefault(consts.BD_EN, []).append(field_input)
# 合同准备项
# 还款计划表
schedule_list = []
for schedule_dict in quotationt_info.get('monthlyPaymentInfo', []):
tmp_str = "{1}{0}{2}".format(consts.SPLIT_STR, str(schedule_dict.get('term', '')),
str(schedule_dict.get('amount', '')))
schedule_list.append(tmp_str)
schedule_list_str = consts.SCHEDULE_SPLIT_STR.join(schedule_list)
# asp
asp_list = []
for asp_info in quotationt_info.get('associatedServiceInfo', []):
asp_list.append(
(
asp_info.get('service', ''),
str(asp_info.get('amount', '0.00')),
str(asp_info.get('financedAmount', '0.00')),
)
)
if len(asp_list) > 0:
asp_list.append(
(
consts.ASP_SUM_NAME,
'',
format(quotationt_info.get('associatedServicePrincipal', 0), '.2f'),
)
)
# HIL合同
if application_entity in consts.HIL_SET:
pass
# HIL合同 售后回租合同 --------------------------------------------------------------------------------------
# ['合同编号-每页', '车辆识别代码', '还款计划表', '还款账号', '户名', '开户行', 'ASP项目详情']
hil_contract_1_input = [
(consts.HIL_CON_1_FIELDS[0], [application_id_version]),
(consts.HIL_CON_1_FIELDS[1], vin_no),
(consts.HIL_CON_1_FIELDS[2], schedule_list_str),
(consts.HIL_CON_1_FIELDS[3], account_no),
(consts.HIL_CON_1_FIELDS[4], account_holder_name),
(consts.HIL_CON_1_FIELDS[5], bank_name),
]
# asp各项
if len(asp_list) > 0:
hil_contract_1_input.append((consts.HIL_CON_1_FIELDS[6], asp_list))
compare_info.setdefault(consts.HIL_CONTRACT_1_EN, []).append(hil_contract_1_input)
# HIL合同 车辆租赁抵押合同 --------------------------------------------------------------------------------------
# ['合同编号', '合同编号-正文', '车辆识别代码']
hil_contract_2_input = [
(consts.HIL_CON_2_FIELDS[0], application_id_version),
(consts.HIL_CON_2_FIELDS[1], application_id_version),
(consts.HIL_CON_2_FIELDS[2], vin_no),
]
compare_info.setdefault(consts.HIL_CONTRACT_2_EN, []).append(hil_contract_2_input)
# AFC合同
else:
pass
# ['合同编号-每页', '合同编号-每页(no-asp)', '车架号-重要条款', '车架号', '还款账号', '户名', '开户行', '还款计划表',
# 'ASP项目详情-重要条款', 'ASP项目详情', '见证人签字', '见证人日期']
if len(asp_list) > 0:
afc_contract_input = [
(consts.AFC_CON_FIELDS[0], application_id_version),
]
else:
afc_contract_input = [
(consts.AFC_CON_FIELDS[1], application_id_version),
]
afc_contract_input.extend([
(consts.AFC_CON_FIELDS[2], vin_no),
(consts.AFC_CON_FIELDS[3], vin_no),
(consts.AFC_CON_FIELDS[4], account_no),
(consts.AFC_CON_FIELDS[5], account_holder_name),
(consts.AFC_CON_FIELDS[6], bank_name),
(consts.AFC_CON_FIELDS[7], schedule_list_str),
])
if len(asp_list) > 0:
# asp各项
afc_contract_input.append((consts.AFC_CON_FIELDS[8], asp_list))
afc_contract_input.append((consts.AFC_CON_FIELDS[9], asp_list))
afc_contract_input.append((consts.AFC_CON_FIELDS[10], consts.HAVE_CN))
afc_contract_input.append((consts.AFC_CON_FIELDS[11], empty_str))
compare_info.setdefault(consts.AFC_CONTRACT_EN, []).append(afc_contract_input)
return compare_info
......@@ -103,9 +182,10 @@ def pre_compare_process(compare_info, ocr_res_dict, id_res_list):
for field_list in items_list:
result_list = pre_compare_license_id(license_en, id_res_list, field_list)
compare_result.setdefault(license_en, []).append(result_list)
elif license_en in [consts.HIL_CONTRACT_1_EN, consts.HIL_CONTRACT_2_EN,
consts.HIL_CONTRACT_3_EN, consts.AFC_CONTRACT_EN]:
pass
elif license_en in [consts.HIL_CONTRACT_1_EN, consts.HIL_CONTRACT_2_EN, consts.AFC_CONTRACT_EN]:
for field_list in items_list:
result_list = pre_compare_license_contract(license_en, ocr_res_dict, field_list)
compare_result.setdefault(license_en, []).append(result_list)
else:
for field_list in items_list:
result_list = pre_compare_license(license_en, ocr_res_dict, field_list)
......@@ -227,6 +307,57 @@ def pre_compare_license_id(license_en, id_res_list, field_list):
return result_field_list
def pre_compare_license_contract(license_en, ocr_res_dict, field_list):
ocr_field, compare_logic, no_find_comment = consts.PRE_COMPARE_LOGIC_MAP[license_en]
result_field_list = []
ocr_res_str = ocr_res_dict.get(ocr_field)
if ocr_res_str is not None:
ocr_res_list = json.loads(ocr_res_str)
ocr_res = ocr_res_list.pop()
for name, value in field_list:
ocr_str_or_list = ocr_res.get(compare_logic[name][0])
# 见证人日期
if name == consts.AFC_CON_FIELDS[11]:
if not isinstance(ocr_str_or_list, str) or len(ocr_str_or_list) == 0:
result = consts.RESULT_N
ocr_str = empty_str
else:
is_find_date = False
all_date_list = [ocr_str_or_list]
for date_name in consts.AFC_HT_DATE_FIELDS:
all_date_list.append(ocr_res.get(compare_logic[date_name][0], ''))
if not is_find_date and ocr_str_or_list == ocr_res.get(compare_logic[date_name][0], ''):
is_find_date = True
result = consts.RESULT_Y if is_find_date else consts.RESULT_N
ocr_str = json.dumps(all_date_list, ensure_ascii=False)
elif isinstance(ocr_str_or_list, str) or isinstance(ocr_str_or_list, list):
if isinstance(ocr_str_or_list, list):
# no-asp 合同编号-每页(no-asp)
if name == consts.AFC_CON_FIELDS[1]:
ocr_str_or_list.pop()
ocr_str = json.dumps(ocr_str_or_list, ensure_ascii=False)
else:
ocr_str_or_list = ocr_str_or_list.strip()
ocr_str = ocr_str_or_list
result = getattr(cp, compare_logic[name][1])(value, ocr_str_or_list, **compare_logic[name][2])
else:
result = consts.RESULT_N
ocr_str = empty_str
comments = compare_logic[name][3]
if isinstance(value, list):
value = json.dumps(value, ensure_ascii=False)
result_field_list.append((value, ocr_str, result, comments))
else:
result_field_list.append((empty_str, empty_str, consts.RESULT_N, no_find_comment))
return result_field_list
def rebuild_result(compare_result):
# compare_result = {
# "is_pass": True,
......
SPLIT_STR = '_'
SCHEDULE_SPLIT_STR = '、'
HIL_SET = {'HIL', 'HIl', 'HiL', 'Hil', 'hIL', 'hIl', 'hiL', 'hil', 'CO00002', 'SF5_CL'}
ID_TYPE = 'ITPRC'
......@@ -18,17 +21,32 @@ HAVE_CN = '有'
BD_FIELDS = ['被保险人姓名', '被保险人证件号码', '车架号']
HIL_CON_1_FIELDS = ['合同编号-每页', '车辆识别代码', '还款计划表', '还款账号', '户名', '开户行', 'ASP项目详情']
ASP_SUM_NAME = '附加产品融资贷款本金总金额'
HIL_CON_2_FIELDS = ['合同编号', '合同编号-正文', '车辆识别代码']
AFC_CON_FIELDS = ['合同编号-每页', '合同编号-每页(no-asp)', '车架号-重要条款', '车架号', '还款账号', '户名', '开户行',
'还款计划表', 'ASP项目详情-重要条款', 'ASP项目详情', '见证人签字', '见证人日期']
AFC_HT_DATE_FIELDS = ['主借人日期', '共借人日期', '保证人日期1', '保证人日期2']
ID_EN = 'idCard'
MVI_EN = 'newCar Invoice'
BC_EN = 'Bank Card'
HMH_EN = 'Mortgage Waiver Letter'
BD_EN = 'Insurance'
HIL_CONTRACT_1_EN = '售后回租合同'
HIL_CONTRACT_2_EN = '车辆租赁抵押合同'
AFC_CONTRACT_EN = '合同'
ID_OCR_FIELD = 'ic_ocr'
MVI_OCR_FIELD = 'mvi_ocr'
BC_OCR_FIELD = 'bc_ocr'
HMH_OCR_FIELD = 'hmh_ocr'
BD_FIELD = 'bd_ocr'
HIL_CONTRACT_1_FIELD = 'hil_contract_1_ocr'
HIL_CONTRACT_2_FIELD = 'hil_contract_2_ocr'
HT_FIELD = 'ht_ocr'
MVI_COMPARE_LOGIC = {
MVI_FIELDS[0]: ('车辆识别代码', 'se_common_compare', {}, '发票车架号与系统不一致'),
......@@ -59,6 +77,41 @@ BD_COMPARE_LOGIC = {
BD_FIELDS[2]: ('车架号', 'se_common_compare', {}, '保单车架号与系统不一致'),
}
HIL_CONTRACT_1_COMPARE_LOGIC = {
HIL_CON_1_FIELDS[0]: ('合同编号-每页', 'se_list_compare', {}, '售后回租合同中合同编号系统不一致'),
HIL_CON_1_FIELDS[1]: ('车辆识别代码', 'se_common_compare', {}, '售后回租合同车辆识别代码与系统车架号不一致'),
HIL_CON_1_FIELDS[2]: ('还款计划表', 'se_schedule_compare', {"value_idx": 1}, '售后回租合同还款计划表与系统不一致'),
HIL_CON_1_FIELDS[6]: ('ASP项目详情', 'se_asp_compare', {}, '售后回租合同ASP名称或者金额与系统不一致'),
HIL_CON_1_FIELDS[3]: ('还款账号', 'se_common_compare', {'remove_space': True}, '售后回租合同还款账号与系统不一致'),
HIL_CON_1_FIELDS[4]: ('户名', 'se_common_compare', {}, '售后回租合同户名与系统不一致'),
HIL_CON_1_FIELDS[5]: ('开户行', 'se_both_contain_compare', {}, '售后回租合同开户行与系统不一致'),
}
HIL_CONTRACT_2_COMPARE_LOGIC = {
HIL_CON_2_FIELDS[0]: ('合同编号', 'se_common_compare', {}, '车辆租赁抵押合同合同编号与系统合同编号不一致'),
HIL_CON_2_FIELDS[1]: ('合同编号-正文', 'se_common_compare', {}, '车辆租赁抵押合同正文合同编号与系统合同编号不一致'),
HIL_CON_2_FIELDS[2]: ('车辆识别代码', 'se_common_compare', {}, '车辆租赁抵押合同车辆识别代码与系统车架号不一致'),
}
HT_COMPARE_LOGIC = {
AFC_CON_FIELDS[0]: ('合同编号-每页', 'se_list_compare', {}, '合同编号与系统不一致'),
# '合同编号-每页(no-asp)': ('合同编号-每页', 'se_list_compare', {'pop_last': True}, '合同编号与系统不一致'),
AFC_CON_FIELDS[1]: ('合同编号-每页', 'se_list_compare', {}, '合同编号与系统不一致'),
AFC_CON_FIELDS[2]: ('车架号-重要条款', 'se_common_compare', {}, '合同首页中车架号与系统不一致'),
AFC_CON_FIELDS[3]: ('车架号', 'se_common_compare', {}, '主合同页中车架号与系统不一致'),
AFC_CON_FIELDS[4]: ('还款账号', 'se_common_compare', {'remove_space': True}, '主合同页中还款账号与系统不一致'),
AFC_CON_FIELDS[5]: ('户名', 'se_common_compare', {}, '主合同页中户名与系统不一致'),
AFC_CON_FIELDS[6]: ('开户行', 'se_both_contain_compare', {}, '主合同页中开户行与系统不一致'),
AFC_CON_FIELDS[10]: ('见证人签字', 'se_have_compare', {}, '合同见证人无'),
AFC_CON_FIELDS[11]: ('见证人日期', 'se_date_contain_compare', {}, '合同见证人签字日期不符合逻辑'),
AFC_CON_FIELDS[7]: ('还款计划表', 'se_schedule_compare', {"value_idx": 1}, '合同还款计划表与系统不一致'),
AFC_CON_FIELDS[8]: ('ASP项目详情-重要条款', 'se_asp_compare', {}, '合同(重要条款)ASP名称或者金额与系统不一致'),
AFC_CON_FIELDS[9]: ('ASP项目详情', 'se_asp_compare', {}, '合同ASP名称或者金额与系统不一致'),
}
PRE_COMPARE_LOGIC_MAP = {
ID_EN: (ID_OCR_FIELD, ID_COMPARE_LOGIC, '请确认是否提供身份证件'),
MVI_EN: (MVI_OCR_FIELD, MVI_COMPARE_LOGIC, '请确认是否提供发票'),
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!