Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
周伟奇
/
bmw-ocr
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Graphs
Network
Create a new issue
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
90b2c2a2
authored
2022-10-10 17:03:46 +0800
by
周伟奇
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
add pre contract
1 parent
a52dd7ca
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
191 additions
and
7 deletions
src/prese/compare.py
src/prese/consts.py
src/prese/compare.py
View file @
90b2c2a
...
...
@@ -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,
...
...
src/prese/consts.py
View file @
90b2c2a
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
,
'请确认是否提供发票'
),
...
...
Write
Preview
Styling with
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment