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
c64686f8
authored
2022-11-10 18:30:18 +0800
by
周伟奇
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
add qrs compare
1 parent
573f28d7
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
135 additions
and
3 deletions
src/apps/doc/consts.py
src/celery_compare/tasks.py
src/common/tools/comparison.py
src/prese/compare.py
src/prese/consts.py
src/apps/doc/consts.py
View file @
c64686f
...
...
@@ -1258,6 +1258,7 @@ COMPARE_FIELDS = (
HMH_OCR_FIELD
,
JYPZ_OCR_FIELD
,
HT_FIELD
,
QRS_FIELD
,
BD_FIELD
,
BS_FIELD
,
HIL_CONTRACT_1_FIELD
,
...
...
@@ -1271,6 +1272,7 @@ PRE_COMPARE_FIELDS = (
BC_OCR_FIELD
,
HMH_OCR_FIELD
,
HT_FIELD
,
QRS_FIELD
,
BD_FIELD
,
HIL_CONTRACT_1_FIELD
,
HIL_CONTRACT_2_FIELD
,
...
...
@@ -1605,6 +1607,7 @@ SE_HIL_CON_MAP = {
HIL_CONTRACT_3_CLASSIFY
:
SE_HIL_CON_3_MAP
,
}
SE_AFC_CON_QRS_FIELD
=
[
'合同编号'
]
SE_AFC_CON_FIELD
=
[
'合同编号-每页'
,
'所购车辆价格-小写-重要条款'
,
'车架号-重要条款'
,
'贷款本金金额-重要条款'
,
'贷款期限-重要条款'
,
'车辆贷款本金金额-重要条款'
,
'附加产品融资贷款本金总额-重要条款'
,
'所购车辆价格'
,
'车架号'
,
'经销商'
,
'贷款本金金额'
,
'车辆贷款本金金额'
,
'附加产品融资贷款本金总额'
,
'贷款期限'
,
'还款账号'
,
'户名'
,
'开户行'
,
...
...
@@ -1700,6 +1703,7 @@ DDA_EN = 'DDA'
HMH_EN
=
'Mortgage Waiver Letter'
JYPZ_EN
=
'Used Car Document'
AFC_CONTRACT_EN
=
'AFC Contract'
AFC_CONTRACT_QRS_EN
=
'送达地址确认书'
BD_EN
=
'Insurance'
BS_EN
=
'Bank Statement'
HIL_CONTRACT_1_EN
=
'售后回租合同'
...
...
@@ -1989,6 +1993,10 @@ HIL_CONTRACT_3_COMPARE_LOGIC = {
'承租人签字'
:
(
'承租人签字'
,
'se_contain_compare'
,
{},
'车辆处置协议承租人签字与系统承租人姓名不一致'
),
}
HT_QRS_COMPARE_LOGIC
=
{
'合同编号'
:
(
'合同编号'
,
'se_qrs_compare'
,
{},
'请确认是否提供合格的送达地址确认书'
),
}
HT_COMPARE_LOGIC
=
{
'合同编号-每页'
:
(
'合同编号-每页'
,
'se_list_compare'
,
{},
'合同编号与系统不一致'
),
# '合同编号-每页(no-asp)': ('合同编号-每页', 'se_list_compare', {'pop_last': True}, '合同编号与系统不一致'),
...
...
@@ -2065,6 +2073,7 @@ SE_COMPARE_FIELD = {
HMH_EN
:
(
HMH_OCR_FIELD
,
HMH_COMPARE_LOGIC
,
False
),
JYPZ_EN
:
(
JYPZ_OCR_FIELD
,
JYPZ_COMPARE_LOGIC
,
False
),
AFC_CONTRACT_EN
:
(
HT_FIELD
,
HT_COMPARE_LOGIC
,
False
),
AFC_CONTRACT_QRS_EN
:
(
QRS_FIELD
,
HT_QRS_COMPARE_LOGIC
,
False
),
BD_EN
:
(
BD_FIELD
,
BD_COMPARE_LOGIC
,
False
),
BS_EN
:
(
BS_FIELD
,
BS_COMPARE_LOGIC
,
False
),
HIL_CONTRACT_1_EN
:
(
HIL_CONTRACT_1_FIELD
,
HIL_CONTRACT_1_COMPARE_LOGIC
,
False
),
...
...
@@ -2074,7 +2083,7 @@ SE_COMPARE_FIELD = {
SE_COMPARE_FIELD_AUTO
=
{
BS_EN
:
(
BS_FIELD
,
BS_COMPARE_LOGIC_AUTO
,
False
),
ID_EN
:
(
IC_OCR_FIELD
,
ID_COMPARE_LOGIC
,
True
),
ID_EN
:
(
IC_OCR_FIELD
,
ID_COMPARE_LOGIC
_AUTO
,
True
),
}
...
...
src/celery_compare/tasks.py
View file @
c64686f
...
...
@@ -914,8 +914,10 @@ def get_se_cms_compare_info_auto(last_obj, application_entity, auto=True, ignore
# is_cdfl = True # 车贷分离
is_cdfl_bo
=
False
# 车贷分离,主借
is_cdfl_co
=
False
# 车贷分离,共借
role_count
=
0
# province = cms_info.get('province', '')
for
individual_info
in
cms_info
.
get
(
'applicantInformation'
,
[]):
role_count
+=
1
all_id_num
=
[]
license_dict
=
{}
...
...
@@ -1440,6 +1442,10 @@ def get_se_cms_compare_info_auto(last_obj, application_entity, auto=True, ignore
afc_contract_input
.
append
((
consts
.
SE_AFC_CON_FIELD
[
19
],
empty_str
))
contract_info
[
consts
.
AFC_CONTRACT_EN
]
=
afc_contract_input
afc_contract_qrs_input
=
[(
consts
.
SE_AFC_CON_QRS_FIELD
[
0
],
'{0}{1}{2}'
.
format
(
role_count
,
consts
.
SPLIT_STR
,
full_no
))]
contract_info
[
consts
.
AFC_CONTRACT_QRS_EN
]
=
afc_contract_qrs_input
compare_info
[
'contract'
]
=
contract_info
return
compare_info
,
cms_info
.
get
(
'autoApprovedDetails'
,
{})
.
get
(
'aaType'
,
''
),
is_gsyh
...
...
@@ -1460,8 +1466,10 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list, auto=Fals
# 个人信息证件------------------------------------------------------------------------------------------------------
is_cdfl_bo
=
False
# 车贷分离,主借
is_cdfl_co
=
False
# 车贷分离,共借
role_count
=
0
# province = cms_info.get('province', '')
for
individual_info
in
cms_info
.
get
(
'applicantInformation'
,
[]):
role_count
+=
1
all_id_num
=
[]
license_dict
=
{}
...
...
@@ -1983,6 +1991,9 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list, auto=Fals
afc_contract_input
.
append
((
consts
.
SE_AFC_CON_FIELD
[
19
],
empty_str
))
contract_info
[
consts
.
AFC_CONTRACT_EN
]
=
afc_contract_input
afc_contract_qrs_input
=
[(
consts
.
SE_AFC_CON_QRS_FIELD
[
0
],
'{0}{1}{2}'
.
format
(
role_count
,
consts
.
SPLIT_STR
,
full_no
))]
contract_info
[
consts
.
AFC_CONTRACT_QRS_EN
]
=
afc_contract_qrs_input
compare_info
[
'contract'
]
=
contract_info
return
compare_info
,
cms_info
.
get
(
'applicationVersion'
,
1
),
is_gsyh
...
...
@@ -2718,6 +2729,46 @@ def se_contract_compare(license_en, ocr_res_dict, strip_list, is_gsyh):
return
result_field_list
,
field_img_path_dict
def
se_contract_qrs_compare
(
license_en
,
ocr_res_dict
,
strip_list
):
ocr_field
,
compare_logic
,
_
=
consts
.
SE_COMPARE_FIELD
[
license_en
]
ocr_res_str
=
ocr_res_dict
.
get
(
ocr_field
)
result_field_list
=
[]
field_img_path_dict
=
dict
()
if
ocr_res_str
is
not
None
:
ocr_res_list
=
json
.
loads
(
ocr_res_str
)
contract_num_list
=
[]
for
qrs_res
in
ocr_res_list
:
contract_num_list
.
append
(
qrs_res
.
get
(
'合同编号'
,
''
))
ocr_res
=
{
'合同编号'
:
contract_num_list
}
for
name
,
value
in
strip_list
:
ocr_str_or_list
=
ocr_res
.
get
(
compare_logic
[
name
][
0
])
if
isinstance
(
ocr_str_or_list
,
list
):
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
])
reason
=
compare_logic
[
name
][
3
]
img_path
=
empty_str
error_type
=
empty_error_type
if
result
==
consts
.
RESULT_Y
else
ErrorType
.
OCR
.
value
result_field_list
.
append
((
name
,
value
,
result
,
ocr_str
,
img_path
,
error_type
,
reason
))
else
:
for
name
,
value
in
strip_list
:
result_field_list
.
append
((
name
,
value
,
consts
.
RESULT_N
,
empty_str
,
empty_str
,
ErrorType
.
NF
.
value
,
'{0}未找到'
.
format
(
license_en
)))
return
result_field_list
,
field_img_path_dict
def
se_mvc34_compare
(
license_en
,
ocr_res_dict
,
field_list
):
ocr_field
,
compare_logic
,
_
=
consts
.
SE_COMPARE_FIELD
[
license_en
]
ocr_res_str
=
ocr_res_dict
.
get
(
ocr_field
)
...
...
@@ -2927,6 +2978,8 @@ def se_compare_process(compare_info, ocr_res_dict, is_gsyh, is_auto, id_res_list
result_field_list
,
field_img_path_dict
=
se_mvc34_compare
(
license_en
,
ocr_res_dict
,
strip_list
)
elif
license_en
in
[
consts
.
HIL_CONTRACT_1_EN
,
consts
.
HIL_CONTRACT_2_EN
,
consts
.
HIL_CONTRACT_3_EN
,
consts
.
AFC_CONTRACT_EN
]:
result_field_list
,
field_img_path_dict
=
se_contract_compare
(
license_en
,
ocr_res_dict
,
strip_list
,
is_gsyh
)
elif
license_en
==
consts
.
AFC_CONTRACT_QRS_EN
:
result_field_list
,
field_img_path_dict
=
se_contract_qrs_compare
(
license_en
,
ocr_res_dict
,
strip_list
)
elif
license_en
==
consts
.
BS_EN
:
result_field_list
,
field_img_path_dict
=
se_bs_compare
(
license_en
,
ocr_res_dict
,
strip_list
,
is_auto
)
else
:
...
...
@@ -2936,8 +2989,11 @@ def se_compare_process(compare_info, ocr_res_dict, is_gsyh, is_auto, id_res_list
for
name
,
value
,
result
,
ocr_str
,
img_path
,
error_type
,
cn_reason
in
result_field_list
:
total_fields
+=
1
if
result
==
consts
.
RESULT_N
:
# if license_en != consts.MVI_EN or name != consts.SE_NEW_ADD_FIELD[9]:
successful_at_this_level
=
False
# 确认书N2
if
license_en
==
consts
.
AFC_CONTRACT_QRS_EN
and
name
==
consts
.
SE_AFC_CON_QRS_FIELD
[
0
]
and
ocr_str
==
empty_str
:
pass
else
:
successful_at_this_level
=
False
failed_count
+=
1
each_license_failed_count
+=
1
failure_field
.
append
(
name
)
...
...
src/common/tools/comparison.py
View file @
c64686f
...
...
@@ -646,6 +646,20 @@ class Comparison:
# input_str = input_str.replace('-', '')
return
self
.
is_after_today_pre
(
ocr_str
)
def
se_qrs_compare
(
self
,
input_str
,
ocr_str_or_list
,
**
kwargs
):
try
:
target_count_str
,
application_id
=
input_str
.
split
(
'_'
)
search_count
=
0
for
item_str
in
ocr_str_or_list
:
if
item_str
==
application_id
:
search_count
+=
1
if
search_count
>=
int
(
target_count_str
):
return
self
.
RESULT_Y
else
:
return
self
.
RESULT_N
except
Exception
as
e
:
return
self
.
RESULT_N
cp
=
Comparison
()
...
...
src/prese/compare.py
View file @
c64686f
...
...
@@ -19,8 +19,10 @@ def get_pos_compare_info(pos_info):
custr_name
=
custr_id
=
''
# 身份证
role_count
=
0
individual_cus_info_list
=
pos_info
.
get
(
'individualCusInfo'
,
[])
for
individual_cus_info
in
individual_cus_info_list
:
role_count
+=
1
customer_name
=
individual_cus_info
.
get
(
'customerName'
,
''
)
.
strip
()
id_num
=
individual_cus_info
.
get
(
'idNum'
,
''
)
applicant_type
=
individual_cus_info
.
get
(
'applicantType'
,
''
)
...
...
@@ -177,6 +179,9 @@ def get_pos_compare_info(pos_info):
afc_contract_input
.
append
((
consts
.
AFC_CON_FIELDS
[
11
],
empty_str
))
compare_info
.
setdefault
(
consts
.
AFC_CONTRACT_EN
,
[])
.
append
(
afc_contract_input
)
afc_contract_qrs_input
=
[(
consts
.
AFC_CON_QRS_FIELDS
[
0
],
'{0}{1}{2}'
.
format
(
role_count
,
consts
.
SPLIT_STR
,
application_id_version
))]
compare_info
.
setdefault
(
consts
.
AFC_CONTRACT_QRS_EN
,
[])
.
append
(
afc_contract_qrs_input
)
return
compare_info
...
...
@@ -191,6 +196,10 @@ def pre_compare_process(compare_info, ocr_res_dict, id_res_list):
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
)
elif
license_en
==
consts
.
AFC_CONTRACT_QRS_EN
:
for
field_list
in
items_list
:
result_list
=
pre_compare_license_contract_qrs
(
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
)
...
...
@@ -376,6 +385,42 @@ def pre_compare_license_contract(license_en, ocr_res_dict, field_list):
return
result_field_list
def
pre_compare_license_contract_qrs
(
license_en
,
ocr_res_dict
,
field_list
):
ocr_field
,
compare_logic
,
no_find_comment
=
consts
.
PRE_COMPARE_LOGIC_MAP
[
license_en
]
ocr_res_str
=
ocr_res_dict
.
get
(
ocr_field
)
result_field_list
=
[]
if
ocr_res_str
is
not
None
:
ocr_res_list
=
json
.
loads
(
ocr_res_str
)
contract_num_list
=
[]
for
qrs_res
in
ocr_res_list
:
contract_num_list
.
append
(
qrs_res
.
get
(
'合同编号'
,
''
))
ocr_res
=
{
'合同编号'
:
contract_num_list
}
for
name
,
value
in
field_list
:
ocr_str_or_list
=
ocr_res
.
get
(
compare_logic
[
name
][
0
])
if
isinstance
(
ocr_str_or_list
,
list
):
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
])
comments
=
compare_logic
[
name
][
3
]
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 @
c64686f
...
...
@@ -26,6 +26,7 @@ ASP_SUM_NAME = '附加产品融资贷款本金总金额'
HIL_CON_2_FIELDS
=
[
'合同编号'
,
'合同编号-正文'
,
'车辆识别代码'
]
AFC_CON_QRS_FIELDS
=
[
'合同编号'
]
AFC_CON_FIELDS
=
[
'合同编号-每页'
,
'合同编号-每页(no-asp)'
,
'车架号-重要条款'
,
'车架号'
,
'还款账号'
,
'户名'
,
'开户行'
,
'还款计划表'
,
'ASP项目详情-重要条款'
,
'ASP项目详情'
,
'见证人签字'
,
'见证人日期'
]
AFC_HT_DATE_FIELDS
=
[
'主借人日期'
,
'共借人日期'
,
'保证人日期1'
,
'保证人日期2'
]
...
...
@@ -38,6 +39,7 @@ BD_EN = 'Insurance'
HIL_CONTRACT_1_EN
=
'售后回租合同'
HIL_CONTRACT_2_EN
=
'车辆租赁抵押合同'
AFC_CONTRACT_EN
=
'合同'
AFC_CONTRACT_QRS_EN
=
'送达地址确认书'
ID_OCR_FIELD
=
'ic_ocr'
MVI_OCR_FIELD
=
'mvi_ocr'
...
...
@@ -47,6 +49,7 @@ BD_FIELD = 'bd_ocr'
HIL_CONTRACT_1_FIELD
=
'hil_contract_1_ocr'
HIL_CONTRACT_2_FIELD
=
'hil_contract_2_ocr'
HT_FIELD
=
'ht_ocr'
QRS_FIELD
=
'qrs_ocr'
MVI_COMPARE_LOGIC
=
{
MVI_FIELDS
[
0
]:
(
'车辆识别代码'
,
'se_common_compare'
,
{},
'发票车架号与系统不一致'
),
...
...
@@ -93,6 +96,10 @@ HIL_CONTRACT_2_COMPARE_LOGIC = {
HIL_CON_2_FIELDS
[
2
]:
(
'车辆识别代码'
,
'se_common_compare'
,
{},
'车辆租赁抵押合同车辆识别代码与系统车架号不一致'
),
}
QRS_COMPARE_LOGIC
=
{
AFC_CON_QRS_FIELDS
[
0
]:
(
'合同编号'
,
'se_qrs_compare'
,
{},
'请确认是否提供合格的送达地址确认书'
),
}
HT_COMPARE_LOGIC
=
{
AFC_CON_FIELDS
[
0
]:
(
'合同编号-每页'
,
'se_list_compare'
,
{},
'合同编号与系统不一致'
),
# '合同编号-每页(no-asp)': ('合同编号-每页', 'se_list_compare', {'pop_last': True}, '合同编号与系统不一致'),
...
...
@@ -131,6 +138,7 @@ PRE_COMPARE_LOGIC_MAP = {
HMH_EN
:
(
HMH_OCR_FIELD
,
HMH_COMPARE_LOGIC
,
'请确认是否已完成抵押登记豁免函签署'
),
BD_EN
:
(
BD_FIELD
,
BD_COMPARE_LOGIC
,
'请确认是否提供保单'
),
AFC_CONTRACT_EN
:
(
HT_FIELD
,
HT_COMPARE_LOGIC
,
'请确认是否已完成车辆抵押贷款合同签署'
),
AFC_CONTRACT_QRS_EN
:
(
QRS_FIELD
,
QRS_COMPARE_LOGIC
,
'请确认是否提供合格的送达地址确认书'
),
HIL_CONTRACT_1_EN
:
(
HIL_CONTRACT_1_FIELD
,
HIL_CONTRACT_1_COMPARE_LOGIC
,
'请确认是否已完成售后回租合同签署'
),
HIL_CONTRACT_2_EN
:
(
HIL_CONTRACT_2_FIELD
,
HIL_CONTRACT_2_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