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
63e0b4a3
authored
2021-11-17 18:10:46 +0800
by
周伟奇
Browse Files
Options
Browse Files
Tag
Download
Plain Diff
fix merge
2 parents
d56c5dd6
da278df8
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
160 additions
and
68 deletions
src/apps/doc/consts.py
src/celery_compare/tasks.py
src/common/tools/comparison.py
src/apps/doc/consts.py
View file @
63e0b4a
...
...
@@ -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
]
...
...
src/celery_compare/tasks.py
View file @
63e0b4a
...
...
@@ -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
...
...
src/common/tools/comparison.py
View file @
63e0b4a
...
...
@@ -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
...
...
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