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
baf48dff
authored
2022-01-05 19:03:29 +0800
by
周伟奇
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
fix se bug
1 parent
4c33a6e1
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
139 additions
and
120 deletions
src/apps/doc/consts.py
src/apps/doc/management/commands/ocr_process.py
src/apps/doc/ocr/wb.py
src/celery_compare/tasks.py
src/common/tools/comparison.py
src/apps/doc/consts.py
View file @
baf48df
...
...
@@ -1413,7 +1413,7 @@ SE_GB_USED_FIELD = ['customerName', 'idNum', 'date']
SE_BS_FIELD
=
[
'户名'
,
'打印日期'
,
'流水日期'
,
'(担保人1)户名'
,
'(担保人1)打印日期'
,
'(担保人1)流水日期'
,
'(担保人2)户名'
,
'(担保人2)打印日期'
,
'(担保人2)流水日期'
]
SE_HMH_FIELD
=
[
'借款人/承租人姓名'
,
'借款人/承租人证件号'
,
'申请号'
,
'渠道'
,
'签字'
]
SE_BD_FIELD
=
[
'被保险人姓名'
,
'被保险人证件号码'
,
'车架号'
,
'机动车损失保险金额'
,
'第三者责任保险金额'
,
'绝对免赔率'
,
'保险起始日期'
,
'保险截止日期'
,
'保单章'
,
'第一受益人'
,
'保险费合计'
]
JDMPV_VALUE
=
[
'-'
,
'--'
,
'0
%
'
,
'0.00'
,
'/'
,
'0'
]
JDMPV_VALUE
=
[
'-'
,
'--'
,
'0
%
'
,
'0.00'
,
'/'
,
'0'
,
''
]
SE_BANK_FIELD
=
[
'accountNo'
,
'bankName'
]
SE_DDA_FIELD
=
[
'applicationId(1)'
,
'applicationId(2)'
,
'bankName'
,
'companyName'
,
'customerName'
,
'idNum'
,
'accountHolderName'
,
'accountNo'
]
...
...
@@ -1568,15 +1568,15 @@ ROLE_LIST = [
(
'保证人日期2'
,
'Guarantor'
,
1
,
'有'
,
False
,
False
),
]
# key, app_type, id_idx, field_idx, is_force, e_write
# key, app_type, id_idx, field_idx, is_force, e_write
, 公户跳过
ROLE_LIST_2
=
[
(
'抵押人'
,
'Borrower'
,
0
,
0
,
True
,
True
),
(
'抵押人证件号码'
,
'Borrower'
,
0
,
2
,
True
,
True
),
(
'抵押人签字'
,
'Borrower'
,
0
,
0
,
True
,
False
),
(
'抵押人'
,
'Borrower'
,
0
,
0
,
True
,
True
,
False
),
(
'抵押人证件号码'
,
'Borrower'
,
0
,
2
,
True
,
True
,
False
),
(
'抵押人签字'
,
'Borrower'
,
0
,
0
,
True
,
False
,
False
),
(
'抵押人配偶'
,
'Co-Borrower'
,
0
,
0
,
False
,
True
),
(
'抵押人配偶证件号码'
,
'Co-Borrower'
,
0
,
2
,
False
,
True
),
(
'抵押人配偶签字'
,
'Co-Borrower'
,
0
,
0
,
False
,
False
),
(
'抵押人配偶'
,
'Co-Borrower'
,
0
,
0
,
False
,
True
,
True
),
(
'抵押人配偶证件号码'
,
'Co-Borrower'
,
0
,
2
,
False
,
True
,
True
),
(
'抵押人配偶签字'
,
'Co-Borrower'
,
0
,
0
,
False
,
False
,
True
),
]
ROLE_LIST_1
=
[
...
...
@@ -1770,7 +1770,7 @@ HMH_COMPARE_LOGIC = {
BD_COMPARE_LOGIC
=
{
'被保险人姓名'
:
(
'被保险人姓名'
,
'se_name_compare'
,
{},
'保单被保险人姓名与系统不一致'
),
'被保险人证件号码'
:
(
'被保险人证件号码'
,
'se_common_compare'
,
{},
'保单身份证号需人工核查'
),
'被保险人证件号码'
:
(
'被保险人证件号码'
,
'se_common_compare'
,
{
'is_bd_id'
:
True
},
'保单身份证号需人工核查'
),
'车架号'
:
(
'车架号'
,
'se_common_compare'
,
{},
'保单车架号与系统不一致'
),
'机动车损失保险金额'
:
(
'机动车损失保险金额'
,
'se_amount_lte_compare'
,
{},
'保单车损险异常'
),
'第三者责任保险金额'
:
(
'机动车第三者责任保险金额'
,
'se_amount_lte_compare'
,
{},
'保单三者险异常'
),
...
...
@@ -1789,9 +1789,9 @@ BS_COMPARE_LOGIC = {
'打印日期'
:
(
'print_time'
,
'se_bs_print_date_compare'
,
{},
'主共借人银行流水打印日期超过15天'
),
'(担保人1)打印日期'
:
(
'print_time'
,
'se_bs_print_date_compare'
,
{},
'担保人1银行流水打印日期超过15天'
),
'(担保人2)打印日期'
:
(
'print_time'
,
'se_bs_print_date_compare'
,
{},
'担保人2银行流水打印日期超过15天'
),
'流水日期'
:
(
'
date
'
,
'se_bs_date_compare'
,
{},
'主共借人银行流水日期不满足3个月'
),
'(担保人1)流水日期'
:
(
'
date
'
,
'se_bs_date_compare'
,
{},
'担保人1银行流水日期不满足3个月'
),
'(担保人2)流水日期'
:
(
'
date
'
,
'se_bs_date_compare'
,
{},
'担保人2银行流水日期不满足3个月'
),
'流水日期'
:
(
'
timedelta
'
,
'se_bs_date_compare'
,
{},
'主共借人银行流水日期不满足3个月'
),
'(担保人1)流水日期'
:
(
'
timedelta
'
,
'se_bs_date_compare'
,
{},
'担保人1银行流水日期不满足3个月'
),
'(担保人2)流水日期'
:
(
'
timedelta
'
,
'se_bs_date_compare'
,
{},
'担保人2银行流水日期不满足3个月'
),
}
SPECIAL_REASON
=
'主共借人未提供银行流水,含担保人需人工查看直系亲属关系'
...
...
src/apps/doc/management/commands/ocr_process.py
View file @
baf48df
...
...
@@ -329,13 +329,19 @@ class Command(BaseCommand, LoggerMixin):
# 保单
if
classify
==
consts
.
INSURANCE_CLASSIFY
:
product_result
=
[
''
,
''
,
''
]
min_char_count_1
=
1000
min_char_count_2
=
1000
for
product
in
license_data
.
get
(
'result'
,
{})
.
get
(
'productList'
,
[]):
name
=
product
.
get
(
'name'
,
{})
.
get
(
'words'
,
''
)
if
name
.
find
(
'机动车损失'
)
!=
-
1
:
product_result
[
0
]
=
product
.
get
(
'coverage'
,
{})
.
get
(
'words'
,
''
)
product_result
[
2
]
=
product
.
get
(
'deductible_franchise'
,
{})
.
get
(
'words'
,
''
)
if
name
.
find
(
'机动车损失'
)
!=
-
1
or
name
.
find
(
'汽车损失'
)
!=
-
1
:
if
len
(
name
)
<
min_char_count_1
:
min_char_count_1
=
len
(
name
)
product_result
[
0
]
=
product
.
get
(
'coverage'
,
{})
.
get
(
'words'
,
''
)
product_result
[
2
]
=
product
.
get
(
'deductible_franchise'
,
{})
.
get
(
'words'
,
''
)
elif
name
.
find
(
'第三者责任'
)
!=
-
1
:
product_result
[
1
]
=
product
.
get
(
'coverage'
,
{})
.
get
(
'words'
,
''
)
if
len
(
name
)
<
min_char_count_2
:
min_char_count_2
=
len
(
name
)
product_result
[
1
]
=
product
.
get
(
'coverage'
,
{})
.
get
(
'words'
,
''
)
special_str
=
license_data
.
get
(
'result'
,
{})
.
get
(
'1stBeneficiary'
,
{})
.
get
(
'words'
,
''
)
special
=
'无'
...
...
@@ -840,19 +846,11 @@ class Command(BaseCommand, LoggerMixin):
print_date
=
bs_info
.
get
(
'print_time'
,
''
)
.
strftime
(
"
%
Y-
%
m-
%
d"
)
except
Exception
as
e
:
print_date
=
''
try
:
start_date
=
bs_info
.
get
(
'start_date'
,
''
)
.
strftime
(
"
%
Y-
%
m-
%
d"
)
except
Exception
as
e
:
start_date
=
''
try
:
end_date
=
bs_info
.
get
(
'end_date'
,
''
)
.
strftime
(
"
%
Y-
%
m-
%
d"
)
except
Exception
as
e
:
end_date
=
''
res
.
append
(
{
'role'
:
bs_info
.
get
(
'role'
,
''
),
'print_time'
:
print_date
,
'
date'
:
[
start_date
,
end_date
]
,
'
timedelta'
:
bs_info
.
get
(
'timedelta'
,
''
)
,
}
)
return
res
...
...
src/apps/doc/ocr/wb.py
View file @
baf48df
...
...
@@ -334,7 +334,7 @@ class BSWorkbook(Workbook):
metadata_rows
.
extend
(
code
)
if
start_date
is
None
or
end_date
is
None
:
timedelta
=
None
timedelta
=
''
else
:
timedelta
=
(
end_date
-
start_date
)
.
days
metadata_rows
.
extend
(
...
...
@@ -344,11 +344,11 @@ class BSWorkbook(Workbook):
self
.
blank_row
,
self
.
interest_keyword_header
]
)
return
metadata_rows
,
verify_highlight_row
return
metadata_rows
,
verify_highlight_row
,
timedelta
def
build_meta_sheet
(
self
,
role_name
,
card
,
confidence
,
code
,
verify_list
,
print_time
,
start_date
,
end_date
,
res_count_tuple
,
is_verify_classify
):
metadata_rows
,
verify_highlight_row
=
self
.
build_metadata_rows
(
metadata_rows
,
verify_highlight_row
,
timedelta
=
self
.
build_metadata_rows
(
confidence
,
code
,
verify_list
,
print_time
,
start_date
,
end_date
,
res_count_tuple
,
is_verify_classify
)
if
not
isinstance
(
role_name
,
str
):
role_name
=
consts
.
UNKNOWN_ROLE
...
...
@@ -367,7 +367,7 @@ class BSWorkbook(Workbook):
cell
.
fill
=
self
.
amount_fill
for
cell
in
ms
[
4
]:
cell
.
fill
=
self
.
amount_fill
return
ms
return
ms
,
timedelta
@staticmethod
def
amount_format
(
amount_str
):
...
...
@@ -682,16 +682,18 @@ class BSWorkbook(Workbook):
# 2.元信息提取表
confidence
=
self
.
get_confidence
(
max_find_count
)
is_verify_classify
=
classify
in
consts
.
BS_VERIFY_CLASSIFY
ms
=
self
.
build_meta_sheet
(
role_name
,
new_card
,
confidence
,
summary
.
get
(
'code'
),
summary
.
get
(
'verify'
),
summary
.
get
(
'print_time'
),
start_date
,
end_date
,
res_count_tuple
,
is_verify_classify
)
ms
,
timedelta
=
self
.
build_meta_sheet
(
role_name
,
new_card
,
confidence
,
summary
.
get
(
'code'
),
summary
.
get
(
'verify'
),
summary
.
get
(
'print_time'
),
start_date
,
end_date
,
res_count_tuple
,
is_verify_classify
)
summary
[
'timedelta'
]
=
timedelta
# 3.创建月份表、提取/高亮关键行
# 倒序处理
...
...
src/celery_compare/tasks.py
View file @
baf48df
...
...
@@ -898,17 +898,12 @@ def get_se_cms_compare_info_auto(last_obj, application_entity):
license_en
,
is_prc
=
consts
.
SE_CMS_FIRST_ID_FIELD_MAPPING
[
id_info
[
'idType'
]]
# ['customerName', 'idNum', 'dateOfBirth', 'idExpiryDate', 'hukouProvince']
id_num
=
decode_des
(
id_info
.
get
(
'idNum'
,
''
),
des_key
)
field_input
=
[
(
'customerName'
,
customer_name
),
(
'idNum'
,
id_num
),
# ('dateOfBirth', date_of_birth),
# ('idExpiryDate', id_info.get('idExpiryDate', '')),
]
field_input
=
[(
'customerName'
,
customer_name
),
(
'idNum'
,
id_num
),
(
'idExpiryDate'
,
id_info
.
get
(
'idExpiryDate'
,
''
))]
if
is_prc
:
# field_input.append(('hukouProvince', province))
field_input
.
append
((
'真伪'
,
consts
.
IC_RES_MAPPING
.
get
(
1
)))
field_input
.
append
((
'idExpiryDate'
,
id_info
.
get
(
'idExpiryDate'
,
''
)))
license_dict
[
license_en
]
=
field_input
# field_input.append(('hukouProvince', province))
# field_input.append(('真伪', consts.IC_RES_MAPPING.get(1)))
license_dict
[
license_en
]
=
field_input
all_id_num
.
append
(
id_num
)
# 营业执照 --------------------------------------------------------------------------------------------------
elif
id_info
.
get
(
'idType'
)
in
[
'Unified Social Credit Code'
,
'Tax Number'
,
'Business License Number'
]:
...
...
@@ -979,7 +974,8 @@ def get_se_cms_compare_info_auto(last_obj, application_entity):
# 新车发票----------------------------------------------------------------------------------------------------------
if
vehicle_status
==
'New'
:
vehicle_field_input
.
append
((
'vinNo'
,
vin_no
))
vehicle_field_input
.
append
((
'dealer'
,
'、'
.
join
([
cms_info
.
get
(
'dealerName'
,
''
),
cms_info
.
get
(
'fapiaoIssuerDealer'
,
''
)])))
vehicle_field_input
.
append
(
(
'dealer'
,
'、'
.
join
([
cms_info
.
get
(
'dealerName'
,
''
),
cms_info
.
get
(
'fapiaoIssuerDealer'
,
''
)])))
vehicle_field_input
.
append
((
'vehicleTransactionAmount'
,
amount
))
if
isinstance
(
company_info
,
tuple
):
...
...
@@ -1025,7 +1021,7 @@ def get_se_cms_compare_info_auto(last_obj, application_entity):
# gb34_field_input.append((consts.SE_GB_USED_FIELD[1], main_num))
# gb34_field_input.append((consts.SE_GB_USED_FIELD[2], first_submission_date))
# vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[2], first_submission_date))
# vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[3], consts.SE_STAMP_VALUE))
#
#
vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[3], consts.SE_STAMP_VALUE))
# jypz_field_input.append(('vinNo', vin_no))
# jypz_field_input.append(('vehicleTransactionAmount', amount))
# jypz_field_input.append((consts.SE_GB_USED_FIELD[-1], first_submission_date))
...
...
@@ -1038,19 +1034,24 @@ def get_se_cms_compare_info_auto(last_obj, application_entity):
# vehicle_info[consts.JYPZ_EN] = jypz_field_input
# if detect_list[0] and detect_list[1]:
# vehicle_info[consts.UCI_EN] = vehicle_field_input
#
compare_info['vehicleInfo'] = vehicle_info
# compare_info['vehicleInfo'] = vehicle_info
# 银行卡-------------------------------------------------------------------------------------------------------
bank_info
=
{}
bank_name
=
cms_info
.
get
(
'bankAccountDetails'
,
{})
.
get
(
'bankName'
,
''
)
account_no
=
decode_des
(
cms_info
.
get
(
'bankAccountDetails'
,
{})
.
get
(
'accountNo'
,
''
),
des_key
)
account_holder_name
=
cms_info
.
get
(
'bankAccountDetails'
,
{})
.
get
(
'accountHolderName'
,
''
)
is_gsyh
=
True
if
'工商'
in
bank_name
else
False
bank_field_input
=
[
(
'accountNo'
,
account_no
),
(
'bankName'
,
bank_name
),
(
'type'
,
consts
.
BC_TYPE_VALUE
),
]
bank_info
[
consts
.
BC_EN
]
=
bank_field_input
if
isinstance
(
company_info
,
tuple
)
and
company_info
[
0
]
==
account_holder_name
:
pass
else
:
bank_field_input
=
[
(
'accountNo'
,
account_no
),
(
'bankName'
,
bank_name
),
(
'type'
,
consts
.
BC_TYPE_VALUE
),
]
bank_info
[
consts
.
BC_EN
]
=
bank_field_input
# DDA------------------------------------------------------------------------------------------------------------
# if is_gsyh or not detect_list[-1]:
...
...
@@ -1058,14 +1059,16 @@ def get_se_cms_compare_info_auto(last_obj, application_entity):
# ('applicationId(1)', last_obj.application_id),
# ('applicationId(2)', last_obj.application_id),
# ('bankName', bank_name),
# ('companyName', consts.HIL_COMPANY_NAME if application_entity in consts.HIL_SET else consts.AFC_COMPANY_NAME),
# ('companyName',
# consts.HIL_COMPANY_NAME if application_entity in consts.HIL_SET else consts.AFC_COMPANY_NAME),
# ('customerName', dda_name),
# ('idNum', dda_num),
# ('accountHolderName',
cms_info.get('bankAccountDetails', {}).get('accountHolderName', '')
),
# ('accountHolderName',
account_holder_name
),
# ('accountNo', account_no),
# ]
# bank_info[consts.DDA_EN] = dda_field_input
compare_info
[
'bankInfo'
]
=
bank_info
# if len(bank_info) > 0:
# compare_info['bankInfo'] = bank_info
# 银行流水 --------------------------------------------------------------------
if
cms_info
.
get
(
'autoApprovedDetails'
,
{})
.
get
(
'aaType'
,
''
)
in
[
'CAA1'
,
'CAA2'
]:
...
...
@@ -1079,7 +1082,7 @@ def get_se_cms_compare_info_auto(last_obj, application_entity):
bs_field_input
=
[
(
consts
.
SE_BS_FIELD
[
0
],
bs_role_list
),
(
consts
.
SE_BS_FIELD
[
1
],
first_submission_date
),
(
consts
.
SE_BS_FIELD
[
2
],
'90天'
),
(
consts
.
SE_BS_FIELD
[
2
],
90
),
]
dbr_bs_role_list
=
[]
...
...
@@ -1090,13 +1093,13 @@ def get_se_cms_compare_info_auto(last_obj, application_entity):
bs_field_input
.
extend
([
(
consts
.
SE_BS_FIELD
[
3
],
dbr_bs_role_list
[
0
]),
(
consts
.
SE_BS_FIELD
[
4
],
first_submission_date
),
(
consts
.
SE_BS_FIELD
[
5
],
'90天'
),
(
consts
.
SE_BS_FIELD
[
5
],
90
),
])
if
len
(
dbr_bs_role_list
)
>=
2
:
bs_field_input
.
extend
([
(
consts
.
SE_BS_FIELD
[
6
],
dbr_bs_role_list
[
1
]),
(
consts
.
SE_BS_FIELD
[
7
],
first_submission_date
),
(
consts
.
SE_BS_FIELD
[
8
],
'90天'
),
(
consts
.
SE_BS_FIELD
[
8
],
90
),
])
bs_info
[
consts
.
BS_EN
]
=
bs_field_input
compare_info
[
'Bank Statement'
]
=
bs_info
...
...
@@ -1158,6 +1161,7 @@ def get_se_cms_compare_info_auto(last_obj, application_entity):
)
# CMS Vehicle Price / 1.13 * 10 %
gzs_list
=
[
gzs_status
]
if
gzs_status
!=
consts
.
GZS_STATUS
[
1
]:
gzs_value
=
float
(
amount
)
*
0.1
/
1.13
gzs_list
.
append
(
gzs_value
)
...
...
@@ -1219,11 +1223,12 @@ def get_se_cms_compare_info_auto(last_obj, application_entity):
(
consts
.
SE_HIL_CON_1_FIELD
[
2
],
vin_no
),
(
consts
.
SE_HIL_CON_1_FIELD
[
3
],
cms_info
.
get
(
'dealerName'
,
''
)),
(
consts
.
SE_HIL_CON_1_FIELD
[
4
],
amount
),
(
consts
.
SE_HIL_CON_1_FIELD
[
5
],
str
(
cms_info
.
get
(
'financialInformation'
,
{})
.
get
(
'originationPrincipal'
,
'0.0'
))),
(
consts
.
SE_HIL_CON_1_FIELD
[
5
],
str
(
cms_info
.
get
(
'financialInformation'
,
{})
.
get
(
'originationPrincipal'
,
'0.0'
))),
(
consts
.
SE_HIL_CON_1_FIELD
[
6
],
str
(
cms_info
.
get
(
'terms'
,
'0'
))),
(
consts
.
SE_HIL_CON_1_FIELD
[
7
],
schedule_list_str
),
(
consts
.
SE_HIL_CON_1_FIELD
[
11
],
account_no
),
(
consts
.
SE_HIL_CON_1_FIELD
[
12
],
cms_info
.
get
(
'bankAccountDetails'
,
{})
.
get
(
'accountHolderName'
,
''
)
),
(
consts
.
SE_HIL_CON_1_FIELD
[
12
],
account_holder_name
),
(
consts
.
SE_HIL_CON_1_FIELD
[
13
],
bank_name
),
]
...
...
@@ -1239,7 +1244,7 @@ def get_se_cms_compare_info_auto(last_obj, application_entity):
continue
is_find
=
False
if
app_type
in
main_role_info
:
if
len
(
main_role_info
[
app_type
])
>=
id_idx
+
1
:
if
len
(
main_role_info
[
app_type
])
>=
id_idx
+
1
:
is_find
=
True
if
isinstance
(
field_idx
,
int
):
hil_contract_1_input
.
append
((
key
,
main_role_info
[
app_type
][
id_idx
][
field_idx
]))
...
...
@@ -1273,12 +1278,14 @@ def get_se_cms_compare_info_auto(last_obj, application_entity):
(
consts
.
SE_HIL_CON_2_FIELD
[
4
],
str
(
cms_info
.
get
(
'terms'
,
'0'
))),
]
for
key
,
app_type
,
id_idx
,
field_idx
,
is_force
,
e_write
in
consts
.
ROLE_LIST_2
:
for
key
,
app_type
,
id_idx
,
field_idx
,
is_force
,
e_write
,
co_skip
in
consts
.
ROLE_LIST_2
:
if
co_skip
and
isinstance
(
company_info
,
tuple
):
continue
if
not
e_write
and
not
online_sign
:
continue
is_find
=
False
if
app_type
in
main_role_info
:
if
len
(
main_role_info
[
app_type
])
>=
id_idx
+
1
:
if
len
(
main_role_info
[
app_type
])
>=
id_idx
+
1
:
is_find
=
True
if
isinstance
(
field_idx
,
int
):
hil_contract_2_input
.
append
((
key
,
main_role_info
[
app_type
][
id_idx
][
field_idx
]))
...
...
@@ -1290,25 +1297,29 @@ def get_se_cms_compare_info_auto(last_obj, application_entity):
compare_info
[
'contract'
]
=
contract_info
return
compare_info
,
cms_info
.
get
(
'autoApprovedDetails'
,
{})
.
get
(
'aaType'
,
''
),
is_gsyh
else
:
# AFC合同------------------------------------------------------------------------------------------------------
-----
# AFC合同------------------------------------------------------------------------------------------------------
vehicle_principal_str
=
str
(
cms_info
.
get
(
'financialInformation'
,
{})
.
get
(
'vehiclePrincipal'
,
'0.0'
))
afc_contract_input
=
[
(
consts
.
SE_AFC_CON_FIELD
[
0
],
full_no
),
(
consts
.
SE_AFC_CON_FIELD
[
1
],
amount
),
(
consts
.
SE_AFC_CON_FIELD
[
2
],
vin_no
),
(
consts
.
SE_AFC_CON_FIELD
[
3
],
str
(
cms_info
.
get
(
'financialInformation'
,
{})
.
get
(
'originationPrincipal'
,
'0.0'
))),
(
consts
.
SE_AFC_CON_FIELD
[
3
],
str
(
cms_info
.
get
(
'financialInformation'
,
{})
.
get
(
'originationPrincipal'
,
'0.0'
))),
(
consts
.
SE_AFC_CON_FIELD
[
4
],
str
(
cms_info
.
get
(
'terms'
,
'0'
))),
(
consts
.
SE_AFC_CON_FIELD
[
5
],
vehicle_principal_str
),
(
consts
.
SE_AFC_CON_FIELD
[
6
],
str
(
cms_info
.
get
(
'financialInformation'
,
{})
.
get
(
'associatedServicePrincipal'
,
'0.0'
))),
(
consts
.
SE_AFC_CON_FIELD
[
6
],
str
(
cms_info
.
get
(
'financialInformation'
,
{})
.
get
(
'associatedServicePrincipal'
,
'0.0'
))),
(
consts
.
SE_AFC_CON_FIELD
[
7
],
amount
),
(
consts
.
SE_AFC_CON_FIELD
[
8
],
vin_no
),
(
consts
.
SE_AFC_CON_FIELD
[
9
],
cms_info
.
get
(
'dealerName'
,
''
)),
(
consts
.
SE_AFC_CON_FIELD
[
10
],
str
(
cms_info
.
get
(
'financialInformation'
,
{})
.
get
(
'originationPrincipal'
,
'0.0'
))),
(
consts
.
SE_AFC_CON_FIELD
[
10
],
str
(
cms_info
.
get
(
'financialInformation'
,
{})
.
get
(
'originationPrincipal'
,
'0.0'
))),
(
consts
.
SE_AFC_CON_FIELD
[
11
],
vehicle_principal_str
),
(
consts
.
SE_AFC_CON_FIELD
[
12
],
str
(
cms_info
.
get
(
'financialInformation'
,
{})
.
get
(
'associatedServicePrincipal'
,
'0.0'
))),
(
consts
.
SE_AFC_CON_FIELD
[
12
],
str
(
cms_info
.
get
(
'financialInformation'
,
{})
.
get
(
'associatedServicePrincipal'
,
'0.0'
))),
(
consts
.
SE_AFC_CON_FIELD
[
13
],
str
(
cms_info
.
get
(
'terms'
,
'0'
))),
(
consts
.
SE_AFC_CON_FIELD
[
14
],
account_no
),
(
consts
.
SE_AFC_CON_FIELD
[
15
],
cms_info
.
get
(
'bankAccountDetails'
,
{})
.
get
(
'accountHolderName'
,
''
)
),
(
consts
.
SE_AFC_CON_FIELD
[
15
],
account_holder_name
),
(
consts
.
SE_AFC_CON_FIELD
[
16
],
bank_name
),
(
consts
.
SE_AFC_CON_FIELD
[
17
],
schedule_list_str
),
]
...
...
@@ -1329,7 +1340,7 @@ def get_se_cms_compare_info_auto(last_obj, application_entity):
continue
is_find
=
False
if
app_type
in
main_role_info
:
if
len
(
main_role_info
[
app_type
])
>=
id_idx
+
1
:
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
]))
...
...
@@ -1373,16 +1384,11 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
license_en
,
is_prc
=
consts
.
SE_CMS_FIRST_ID_FIELD_MAPPING
[
id_info
[
'idType'
]]
# ['customerName', 'idNum', 'dateOfBirth', 'idExpiryDate', 'hukouProvince']
id_num
=
decode_des
(
id_info
.
get
(
'idNum'
,
''
),
des_key
)
field_input
=
[
(
'customerName'
,
customer_name
),
(
'idNum'
,
id_num
),
# ('dateOfBirth', date_of_birth),
# ('idExpiryDate', id_info.get('idExpiryDate', '')),
]
if
is_prc
:
# field_input.append(('hukouProvince', province))
field_input
.
append
((
'真伪'
,
consts
.
IC_RES_MAPPING
.
get
(
1
)))
field_input
.
append
((
'idExpiryDate'
,
id_info
.
get
(
'idExpiryDate'
,
''
)))
field_input
=
[(
'customerName'
,
customer_name
),
(
'idNum'
,
id_num
),
(
'idExpiryDate'
,
id_info
.
get
(
'idExpiryDate'
,
''
))]
# if is_prc:
# field_input.append(('hukouProvince', province))
# field_input.append(('真伪', consts.IC_RES_MAPPING.get(1)))
license_dict
[
license_en
]
=
field_input
all_id_num
.
append
(
id_num
)
# 营业执照 --------------------------------------------------------------------------------------------------
...
...
@@ -1405,12 +1411,12 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
company_info_list
.
append
((
customer_name
,
id_num
,
legal_name
))
# SME营业执照---------------------------------------------------------------------------------------------------
if
individual_info
.
get
(
'customersubType'
,
''
)
.
startswith
(
'Self Employed'
):
sep_field_input
=
[
(
'legalRepName'
,
customer_name
),
(
'businessLicenseDueDate'
,
''
),
]
license_dict
[
consts
.
SME_BL_EN
]
=
sep_field_input
#
if individual_info.get('customersubType', '').startswith('Self Employed'):
#
sep_field_input = [
#
('legalRepName', customer_name),
#
('businessLicenseDueDate', ''),
#
]
#
license_dict[consts.SME_BL_EN] = sep_field_input
if
len
(
all_id_num
)
>
0
:
main_role_info
.
setdefault
(
individual_info
[
'applicantType'
],
[])
.
append
(
...
...
@@ -1518,13 +1524,18 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
bank_info
=
{}
bank_name
=
cms_info
.
get
(
'bankAccountDetails'
,
{})
.
get
(
'bankName'
,
''
)
account_no
=
decode_des
(
cms_info
.
get
(
'bankAccountDetails'
,
{})
.
get
(
'accountNo'
,
''
),
des_key
)
account_holder_name
=
cms_info
.
get
(
'bankAccountDetails'
,
{})
.
get
(
'accountHolderName'
,
''
)
is_gsyh
=
True
if
'工商'
in
bank_name
else
False
bank_field_input
=
[
(
'accountNo'
,
account_no
),
(
'bankName'
,
bank_name
),
(
'type'
,
consts
.
BC_TYPE_VALUE
),
]
bank_info
[
consts
.
BC_EN
]
=
bank_field_input
if
isinstance
(
company_info
,
tuple
)
and
company_info
[
0
]
==
account_holder_name
:
pass
else
:
bank_field_input
=
[
(
'accountNo'
,
account_no
),
(
'bankName'
,
bank_name
),
(
'type'
,
consts
.
BC_TYPE_VALUE
),
]
bank_info
[
consts
.
BC_EN
]
=
bank_field_input
# DDA------------------------------------------------------------------------------------------------------------
if
is_gsyh
or
not
detect_list
[
-
1
]:
...
...
@@ -1535,11 +1546,12 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
(
'companyName'
,
consts
.
HIL_COMPANY_NAME
if
application_entity
in
consts
.
HIL_SET
else
consts
.
AFC_COMPANY_NAME
),
(
'customerName'
,
dda_name
),
(
'idNum'
,
dda_num
),
(
'accountHolderName'
,
cms_info
.
get
(
'bankAccountDetails'
,
{})
.
get
(
'accountHolderName'
,
''
)
),
(
'accountHolderName'
,
account_holder_name
),
(
'accountNo'
,
account_no
),
]
bank_info
[
consts
.
DDA_EN
]
=
dda_field_input
compare_info
[
'bankInfo'
]
=
bank_info
if
len
(
bank_info
)
>
0
:
compare_info
[
'bankInfo'
]
=
bank_info
# 银行流水 --------------------------------------------------------------------
if
cms_info
.
get
(
'autoApprovedDetails'
,
{})
.
get
(
'aaType'
,
''
)
in
[
'CAA1'
,
'CAA2'
]:
...
...
@@ -1553,7 +1565,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
bs_field_input
=
[
(
consts
.
SE_BS_FIELD
[
0
],
bs_role_list
),
(
consts
.
SE_BS_FIELD
[
1
],
first_submission_date
),
(
consts
.
SE_BS_FIELD
[
2
],
'90天'
),
(
consts
.
SE_BS_FIELD
[
2
],
90
),
]
dbr_bs_role_list
=
[]
...
...
@@ -1564,13 +1576,13 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
bs_field_input
.
extend
([
(
consts
.
SE_BS_FIELD
[
3
],
dbr_bs_role_list
[
0
]),
(
consts
.
SE_BS_FIELD
[
4
],
first_submission_date
),
(
consts
.
SE_BS_FIELD
[
5
],
'90天'
),
(
consts
.
SE_BS_FIELD
[
5
],
90
),
])
if
len
(
dbr_bs_role_list
)
>=
2
:
bs_field_input
.
extend
([
(
consts
.
SE_BS_FIELD
[
6
],
dbr_bs_role_list
[
1
]),
(
consts
.
SE_BS_FIELD
[
7
],
first_submission_date
),
(
consts
.
SE_BS_FIELD
[
8
],
'90天'
),
(
consts
.
SE_BS_FIELD
[
8
],
90
),
])
bs_info
[
consts
.
BS_EN
]
=
bs_field_input
compare_info
[
'Bank Statement'
]
=
bs_info
...
...
@@ -1632,6 +1644,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
)
# CMS Vehicle Price / 1.13 * 10 %
gzs_list
=
[
gzs_status
]
if
gzs_status
!=
consts
.
GZS_STATUS
[
1
]:
gzs_value
=
float
(
amount
)
*
0.1
/
1.13
gzs_list
.
append
(
gzs_value
)
...
...
@@ -1656,7 +1669,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
dszx_amount
=
'500000'
bd_field_input
=
[
(
consts
.
SE_BD_FIELD
[
0
],
hmh_name
),
#
(consts.SE_BD_FIELD[1], hmh_id),
(
consts
.
SE_BD_FIELD
[
1
],
hmh_id
),
(
consts
.
SE_BD_FIELD
[
2
],
vin_no
),
(
consts
.
SE_BD_FIELD
[
3
],
ssx_amount
),
(
consts
.
SE_BD_FIELD
[
4
],
dszx_amount
),
...
...
@@ -1697,7 +1710,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
(
consts
.
SE_HIL_CON_1_FIELD
[
6
],
str
(
cms_info
.
get
(
'terms'
,
'0'
))),
(
consts
.
SE_HIL_CON_1_FIELD
[
7
],
schedule_list_str
),
(
consts
.
SE_HIL_CON_1_FIELD
[
11
],
account_no
),
(
consts
.
SE_HIL_CON_1_FIELD
[
12
],
cms_info
.
get
(
'bankAccountDetails'
,
{})
.
get
(
'accountHolderName'
,
''
)
),
(
consts
.
SE_HIL_CON_1_FIELD
[
12
],
account_holder_name
),
(
consts
.
SE_HIL_CON_1_FIELD
[
13
],
bank_name
),
]
...
...
@@ -1747,7 +1760,9 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
(
consts
.
SE_HIL_CON_2_FIELD
[
4
],
str
(
cms_info
.
get
(
'terms'
,
'0'
))),
]
for
key
,
app_type
,
id_idx
,
field_idx
,
is_force
,
e_write
in
consts
.
ROLE_LIST_2
:
for
key
,
app_type
,
id_idx
,
field_idx
,
is_force
,
e_write
,
co_skip
in
consts
.
ROLE_LIST_2
:
if
co_skip
and
isinstance
(
company_info
,
tuple
):
continue
if
not
e_write
and
not
online_sign
:
continue
is_find
=
False
...
...
@@ -1764,7 +1779,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
compare_info
[
'contract'
]
=
contract_info
return
compare_info
,
cms_info
.
get
(
'applicationVersion'
,
1
),
is_gsyh
else
:
# AFC合同------------------------------------------------------------------------------------------------------
-----
# AFC合同------------------------------------------------------------------------------------------------------
vehicle_principal_str
=
str
(
cms_info
.
get
(
'financialInformation'
,
{})
.
get
(
'vehiclePrincipal'
,
'0.0'
))
afc_contract_input
=
[
(
consts
.
SE_AFC_CON_FIELD
[
0
],
full_no
),
...
...
@@ -1782,7 +1797,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
(
consts
.
SE_AFC_CON_FIELD
[
12
],
str
(
cms_info
.
get
(
'financialInformation'
,
{})
.
get
(
'associatedServicePrincipal'
,
'0.0'
))),
(
consts
.
SE_AFC_CON_FIELD
[
13
],
str
(
cms_info
.
get
(
'terms'
,
'0'
))),
(
consts
.
SE_AFC_CON_FIELD
[
14
],
account_no
),
(
consts
.
SE_AFC_CON_FIELD
[
15
],
cms_info
.
get
(
'bankAccountDetails'
,
{})
.
get
(
'accountHolderName'
,
''
)
),
(
consts
.
SE_AFC_CON_FIELD
[
15
],
account_holder_name
),
(
consts
.
SE_AFC_CON_FIELD
[
16
],
bank_name
),
(
consts
.
SE_AFC_CON_FIELD
[
17
],
schedule_list_str
),
]
...
...
@@ -2485,7 +2500,7 @@ def se_mvc34_compare(license_en, ocr_res_dict, field_list):
consts
.
TRANSFER_NUM
:
transfer_num
,
consts
.
TRANSFER_DATE
:
transfer_date
,
consts
.
IMG_PATH_KEY_2
:
img_path
,
consts
.
SECTION_IMG_PATH_KEY_2
:
section_img_path
,
consts
.
SECTION_IMG_PATH_KEY_2
:
section_img_path
,
consts
.
ALL_POSITION_KEY
:
{
consts
.
TRANSFER_NAME
:
position_info_name
,
consts
.
TRANSFER_NUM
:
position_info_num
,
...
...
@@ -2521,10 +2536,10 @@ def se_mvc34_compare(license_en, ocr_res_dict, field_list):
img_path
=
base_img_path
if
result
==
consts
.
RESULT_N
else
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
,
compare_logic
[
name
][
3
]))
if
result
==
consts
.
RESULT_N
:
failed_field
.
append
(
name
)
section_img_path
=
ocr_res
.
get
(
consts
.
SECTION_IMG_PATH_KEY_2
,
''
)
if
len
(
failed_field
)
>
0
and
os
.
path
.
exists
(
section_img_path
):
info
=
ocr_res
.
get
(
consts
.
ALL_POSITION_KEY
,
{})
...
...
@@ -2548,7 +2563,7 @@ def se_mvc34_compare(license_en, ocr_res_dict, field_list):
field_img_path_dict
[
field
]
=
base_img_path
except
Exception
as
e
:
field_img_path_dict
[
field
]
=
base_img_path
if
not
is_find
:
for
name
,
value
in
field_list
:
result_field_list
.
append
((
name
,
value
,
consts
.
RESULT_N
,
empty_str
,
empty_str
,
ErrorType
.
NF
.
value
,
'{0}未找到'
.
format
(
license_en
)))
...
...
src/common/tools/comparison.py
View file @
baf48df
...
...
@@ -258,6 +258,9 @@ class Comparison:
return
self
.
build_res
(
input_s
==
ocr_s
)
def
se_common_compare
(
self
,
input_str
,
ocr_str
,
**
kwargs
):
if
kwargs
.
get
(
'is_bd_id'
,
False
):
if
ocr_str
==
''
:
return
self
.
RESULT_Y
if
kwargs
.
get
(
'is_gsyh'
,
False
):
if
ocr_str
==
''
or
ocr_str
is
None
:
return
self
.
RESULT_Y
...
...
@@ -517,17 +520,18 @@ class Comparison:
except
Exception
as
e
:
return
self
.
RESULT_N
def
se_bs_date_compare
(
self
,
input_str
,
ocr_str
_list
,
**
kwargs
):
if
isinstance
(
ocr_str_list
,
list
)
and
len
(
ocr_str_list
)
==
2
:
def
se_bs_date_compare
(
self
,
input_str
,
ocr_str
,
**
kwargs
):
if
not
isinstance
(
ocr_str
,
int
)
:
try
:
start_date
=
datetime
.
strptime
(
ocr_str_list
[
0
],
"
%
Y-
%
m-
%
d"
)
end_date
=
datetime
.
strptime
(
ocr_str_list
[
1
],
"
%
Y-
%
m-
%
d"
)
if
end_date
>=
start_date
+
relativedelta
(
months
=
3
):
return
self
.
RESULT_Y
return
self
.
RESULT_N
ocr_int
=
int
(
ocr_str
)
except
Exception
as
e
:
return
self
.
RESULT_N
return
self
.
RESULT_N
else
:
ocr_int
=
ocr_str
if
ocr_int
>=
input_str
:
return
self
.
RESULT_Y
else
:
return
self
.
RESULT_N
cp
=
Comparison
()
...
...
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