400c41a9 by 周伟奇

afc ht part2

1 parent 24c2e20c
...@@ -1598,6 +1598,31 @@ HMH_COMPARE_LOGIC = { ...@@ -1598,6 +1598,31 @@ HMH_COMPARE_LOGIC = {
1598 '签字': ('借款人签字/盖章', 'se_common_compare', {}, '抵押登记豁免函签字需人工核查'), 1598 '签字': ('借款人签字/盖章', 'se_common_compare', {}, '抵押登记豁免函签字需人工核查'),
1599 } 1599 }
1600 1600
1601 SE_AFC_CON_FIELD = ['合同编号-每页', '所购车辆价格-小写-重要条款', '车架号-重要条款', '贷款本金金额-重要条款', '贷款期限-重要条款',
1602 '车辆贷款本金金额-重要条款', '附加产品融资贷款本金总额-重要条款', '所购车辆价格', '车架号', '经销商',
1603 '贷款本金金额', '车辆贷款本金金额', '附加产品融资贷款本金总额', '贷款期限', '还款账号', '户名', '开户行',
1604 '还款计划表', '项目1', '用途总金额', '贷款本金', '附加产品融资贷款本金总金额', '购置税校验']
1605
1606 HT_COMPARE_LOGIC = {
1607 '合同编号-每页': ('合同编号-每页', 'se_list_compare', {}, '合同编号与系统不一致'),
1608 '所购车辆价格-小写-重要条款': ('所购车辆价格-小写-重要条款', 'se_amount_str_compare', {}, '合同首页中车辆价格与系统不一致'),
1609 '车架号-重要条款': ('车架号-重要条款', 'se_common_compare', {}, '合同首页中车架号与系统不一致'),
1610 '贷款本金金额-重要条款': ('贷款本金金额-重要条款', 'se_amount_str_compare', {}, '合同首页中贷款本金与系统不一致'),
1611 '贷款期限-重要条款': ('贷款期限-重要条款', 'se_common_compare', {}, '合同首页中贷款期限与系统不一致'),
1612 '车辆贷款本金金额-重要条款': ('车辆贷款本金金额-重要条款', 'se_amount_str_compare', {}, '车辆贷款本金金额-重要条款'),
1613 '附加产品融资贷款本金总额-重要条款': ('附加产品融资贷款本金总额-重要条款', 'se_amount_str_compare', {}, '合同首页中附加产品融资金额与系统不一致'),
1614 '所购车辆价格': ('所购车辆价格', 'se_amount_str_compare', {}, '主合同页中车辆价格与系统不一致'),
1615 '车架号': ('车架号', 'se_common_compare', {}, '主合同页中车架号与系统不一致'),
1616 '经销商': ('经销商', 'se_common_compare', {}, '主合同页中经销商与系统不一致'),
1617 '贷款本金金额': ('贷款本金金额', 'se_amount_str_compare', {}, '主合同页中贷款本金金额与系统不一致'),
1618 '车辆贷款本金金额': ('车辆贷款本金金额', 'se_amount_str_compare', {}, '主合同页中车辆贷款本金金额与系统不一致'),
1619 '附加产品融资贷款本金总额': ('附加产品融资贷款本金总额', 'se_amount_str_compare', {}, '主合同页中附加产品融资贷款本金总额与系统不一致'),
1620 '贷款期限': ('贷款期限', 'se_common_compare', {}, '主合同页中贷款期限与系统不一致'),
1621 '还款账号': ('还款账号', 'se_common_compare', {}, '主合同页中还款账号与系统不一致'),
1622 '户名': ('户名', 'se_common_compare', {}, '主合同页中户名与系统不一致'),
1623 '开户行': ('开户行', 'se_both_contain_compare', {}, '主合同页中开户行与系统不一致'),
1624 }
1625
1601 # MVC_OCR_FIELD = 'mvc_ocr' 1626 # MVC_OCR_FIELD = 'mvc_ocr'
1602 1627
1603 SE_DETECT_CARD = [UCI_EN, JYPZ_EN, HMH_EN, DDA_EN] 1628 SE_DETECT_CARD = [UCI_EN, JYPZ_EN, HMH_EN, DDA_EN]
...@@ -1616,6 +1641,7 @@ SE_COMPARE_FIELD = { ...@@ -1616,6 +1641,7 @@ SE_COMPARE_FIELD = {
1616 DDA_EN: (DDA_OCR_FIELD, DDA_COMPARE_LOGIC, False), 1641 DDA_EN: (DDA_OCR_FIELD, DDA_COMPARE_LOGIC, False),
1617 HMH_EN: (HMH_OCR_FIELD, HMH_COMPARE_LOGIC, False), 1642 HMH_EN: (HMH_OCR_FIELD, HMH_COMPARE_LOGIC, False),
1618 JYPZ_EN: (JYPZ_OCR_FIELD, JYPZ_COMPARE_LOGIC, False), 1643 JYPZ_EN: (JYPZ_OCR_FIELD, JYPZ_COMPARE_LOGIC, False),
1644 AFC_CONTRACT_EN: (HT_FIELD, HT_COMPARE_LOGIC, False)
1619 } 1645 }
1620 1646
1621 1647
......
...@@ -1672,6 +1672,41 @@ def se_compare_license(license_en, ocr_res_dict, field_list): ...@@ -1672,6 +1672,41 @@ def se_compare_license(license_en, ocr_res_dict, field_list):
1672 return result_field_list, no_ocr_result, field_img_path_dict 1672 return result_field_list, no_ocr_result, field_img_path_dict
1673 1673
1674 1674
1675 def se_afc_contract_compare(license_en, ocr_res_dict, strip_list):
1676 ocr_field, compare_logic, _ = consts.SE_COMPARE_FIELD[license_en]
1677 ocr_res_str = ocr_res_dict.get(ocr_field)
1678
1679 result_field_list = []
1680 field_img_path_dict = dict()
1681
1682 if ocr_res_str is not None:
1683 ocr_res_list = json.loads(ocr_res_str)
1684 ocr_res = ocr_res_list.pop()
1685
1686 for name, value in strip_list:
1687 ocr_str_or_list = ocr_res.get(compare_logic[name][0])
1688
1689 if isinstance(ocr_str_or_list, str) or isinstance(ocr_str_or_list, list):
1690 result = getattr(cp, compare_logic[name][1])(value, ocr_str_or_list, **compare_logic[name][2])
1691 if isinstance(ocr_str_or_list, list):
1692 ocr_str = '、'.join(ocr_str_or_list)
1693 else:
1694 ocr_str = ocr_str_or_list
1695 else:
1696 result = consts.RESULT_N
1697 ocr_str = empty_str
1698
1699 img_path = empty_str
1700 error_type = empty_error_type if result == consts.RESULT_Y else ErrorType.OCR.value
1701 result_field_list.append((name, value, result, ocr_str, img_path, error_type, compare_logic[name][3]))
1702 else:
1703 for name, value in strip_list:
1704 result_field_list.append((name, value, consts.RESULT_N, empty_str, empty_str, ErrorType.NF.value,
1705 '{0}未找到'.format(license_en)))
1706
1707 return result_field_list, field_img_path_dict
1708
1709
1675 def se_mvc34_compare(license_en, ocr_res_dict, field_list): 1710 def se_mvc34_compare(license_en, ocr_res_dict, field_list):
1676 ocr_field, compare_logic, _ = consts.SE_COMPARE_FIELD[license_en] 1711 ocr_field, compare_logic, _ = consts.SE_COMPARE_FIELD[license_en]
1677 ocr_res_str = ocr_res_dict.get(ocr_field) 1712 ocr_res_str = ocr_res_dict.get(ocr_field)
...@@ -1850,6 +1885,8 @@ def se_compare_process(compare_info, ocr_res_dict): ...@@ -1850,6 +1885,8 @@ def se_compare_process(compare_info, ocr_res_dict):
1850 failure_field = [] 1885 failure_field = []
1851 if license_en == consts.MVC34_EN: 1886 if license_en == consts.MVC34_EN:
1852 result_field_list, field_img_path_dict = se_mvc34_compare(license_en, ocr_res_dict, strip_list) 1887 result_field_list, field_img_path_dict = se_mvc34_compare(license_en, ocr_res_dict, strip_list)
1888 elif license_en == consts.AFC_CONTRACT_EN:
1889 result_field_list, field_img_path_dict = se_afc_contract_compare(license_en, ocr_res_dict, strip_list)
1853 else: 1890 else:
1854 result_field_list, _, field_img_path_dict = se_compare_license(license_en, ocr_res_dict, strip_list) 1891 result_field_list, _, field_img_path_dict = se_compare_license(license_en, ocr_res_dict, strip_list)
1855 for name, value, result, ocr_str, img_path, error_type, cn_reason in result_field_list: 1892 for name, value, result, ocr_str, img_path, error_type, cn_reason in result_field_list:
......
...@@ -153,6 +153,15 @@ class Comparison: ...@@ -153,6 +153,15 @@ class Comparison:
153 153
154 return self.build_res(input_str == compare_str), compare_str 154 return self.build_res(input_str == compare_str), compare_str
155 155
156 def se_list_compare(self, input_str, ocr_str_or_list, **kwargs):
157 if isinstance(ocr_str_or_list, list):
158 for item in ocr_str_or_list:
159 if item != input_str:
160 return self.RESULT_N
161 return self.RESULT_Y
162 else:
163 return self.RESULT_N
164
156 def se_name_compare(self, input_str, ocr_str, **kwargs): 165 def se_name_compare(self, input_str, ocr_str, **kwargs):
157 if kwargs.get('is_passport'): 166 if kwargs.get('is_passport'):
158 input_tmp = input_str.upper().replace(' ', '') 167 input_tmp = input_str.upper().replace(' ', '')
...@@ -280,6 +289,14 @@ class Comparison: ...@@ -280,6 +289,14 @@ class Comparison:
280 else: 289 else:
281 return self.RESULT_Y 290 return self.RESULT_Y
282 291
292 def se_amount_str_compare(self, input_str, ocr_str, **kwargs):
293 if input_str == ocr_str:
294 return self.RESULT_Y
295 else:
296 ocr_tmp = ocr_str.replace('元', '').replace(',', '')
297 input_tmp = input_str.replace('元', '').replace(',', '')
298 return self.build_res(ocr_tmp == input_tmp)
299
283 def se_amount_compare(self, input_str, ocr_str, **kwargs): 300 def se_amount_compare(self, input_str, ocr_str, **kwargs):
284 if input_str == ocr_str: 301 if input_str == ocr_str:
285 return self.RESULT_Y 302 return self.RESULT_Y
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!