diff --git a/src/apps/doc/consts.py b/src/apps/doc/consts.py
index 47cece7..9d3653a 100644
--- a/src/apps/doc/consts.py
+++ b/src/apps/doc/consts.py
@@ -1477,6 +1477,9 @@ SE_HIL_CON_1_MAP = {
     '融资成本总额': (5, 4, 7, '融资成本总额', None),
     '租期': (5, 4, 7, '租期', None),
     '还款计划表': (5, 5, 7, '付款计划表', None),
+    '还款账号': (5, 5, 7, '银行账户-银行账号', None),
+    '户名': (5, 5, 7, '银行账户-户名', None),
+    '开户行': (5, 5, 7, '银行账户-开户行', None),
     'ASP项目详情': (5, 4, 7, '车辆附加产品明细表', None),
     '承租人法定代表人或授权代表': (1, 1, 7, '承租人-法定代表人或授权代表', None),
 
@@ -1532,11 +1535,11 @@ SE_AFC_CON_FIELD = ['合同编号-每页', '所购车辆价格-小写-重要条�
                     '车辆贷款本金金额-重要条款', '附加产品融资贷款本金总额-重要条款', '所购车辆价格', '车架号', '经销商',
                     '贷款本金金额', '车辆贷款本金金额', '附加产品融资贷款本金总额', '贷款期限', '还款账号', '户名', '开户行',
                     '还款计划表', '见证人签字', '见证人日期', 'ASP项目详情-重要条款', '购置税校验', 'ASP项目详情']
-AFC_CON_BANK_FIELD = ['还款账号', '户名', '开户行']
+CON_BANK_FIELD = ['还款账号', '户名', '开户行']
 
 # '承租人姓名', '承租人证件号码', '承租人法定代表人或授权代表'
 SE_HIL_CON_1_FIELD = ['合同编号-每页', '合同编号-正文', '车辆识别代码', '车辆卖方', '车辆原始销售价格', '融资成本总额', '租期',
-                      '还款计划表', 'ASP项目详情', '购置税校验', '承租人法定代表人或授权代表']
+                      '还款计划表', 'ASP项目详情', '购置税校验', '承租人法定代表人或授权代表', '还款账号', '户名', '开户行']
 SE_HIL_CON_2_FIELD = ['合同编号', '合同编号-正文', '车辆识别代码', '租金总额', '融资租赁期限']
 SE_HIL_CON_3_FIELD = ['合同编号-每页', '承租人姓名', '承租人证件号码', '销售经销商', '合同编号-正文', '姓名/名称',
                       '自然人身份证件号码/法人执照号码', '承租人签字']
@@ -1820,6 +1823,9 @@ HIL_CONTRACT_1_COMPARE_LOGIC = {
     '还款计划表': ('还款计划表', 'se_schedule_compare', {"value_idx": 1}, '售后回租合同还款计划表与系统不一致'),
     'ASP项目详情': ('ASP项目详情', 'se_asp_compare', {}, '售后回租合同ASP名称或者金额与系统不一致'),
     '承租人法定代表人或授权代表': ('承租人法定代表人或授权代表', 'se_name_compare', {}, '售后回租合同承租人法定代表人或授权代表与系统不一致'),
+    '还款账号': ('还款账号', 'se_common_compare', {'remove_space': True}, '售后回租合同还款账号与系统不一致'),
+    '户名': ('户名', 'se_common_compare', {}, '售后回租合同户名与系统不一致'),
+    '开户行': ('开户行', 'se_both_contain_compare', {}, '售后回租合同开户行与系统不一致'),
 
     '承租人姓名': ('承租人姓名', 'se_name_compare', {}, '售后回租合同承租人姓名与系统不一致'),
     '承租人证件号': ('承租人证件号', 'se_common_compare', {}, '售后回租合同承租人证件号与系统不一致'),
diff --git a/src/apps/doc/models.py b/src/apps/doc/models.py
index 637f8a2..bd2782d 100644
--- a/src/apps/doc/models.py
+++ b/src/apps/doc/models.py
@@ -806,31 +806,69 @@ class HILCACompareResultRecord(models.Model):
     reason10_count = models.SmallIntegerField(default=0, verbose_name="原因10数目")
     result = models.TextField(null=True, verbose_name="比对结果")
     comments = models.TextField(null=True, verbose_name="备注")
-    create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') # 索引
+    create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')  # 索引
 
     class Meta:
         managed = False
         db_table = 'hil_ca_compare_result_record'
 
 
-# class HILContract(models.Model):
-#     id = models.AutoField(primary_key=True, verbose_name="id")  # 主键
-#     application_id = models.CharField(max_length=64, verbose_name="申请id")  # 索引
-#     create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
+class HILAutoSettlement(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name="id")  # 主键
+    application_id = models.CharField(max_length=64, verbose_name="申请id")  # 索引
+    aa_type = models.CharField(null=True, max_length=64, verbose_name="aa_type")
+
+    rpa_result = models.SmallIntegerField(null=True, verbose_name="原因10数目")
+    rpa_1st_eye_tat = models.DecimalField(null=True, verbose_name='rpa_1st_eye_tat')
+    rpa_2nd_eye_tat = models.DecimalField(null=True, verbose_name='rpa_2nd_eye_tat')
+    rpa_3rd_eye_tat = models.DecimalField(null=True, verbose_name='rpa_3rd_eye_tat')
+    rpa_total_tat = models.DecimalField(null=True, verbose_name='rpa_total_tat')
+    rpa_activated_time = models.DateTimeField(null=True, verbose_name='rpa_activated_time')
+    rpa_get_case_from_ocr_time = models.DateTimeField(null=True, verbose_name='rpa_get_case_from_ocr_time')
+    rpa_get_case_from_oc_time = models.DateTimeField(null=True, verbose_name='rpa_get_case_from_oc_time')
+    rpa_payment_authorize_time = models.DateTimeField(null=True, verbose_name='rpa_payment_authorize_time')
+    rpa_second_eye_time = models.DateTimeField(null=True, verbose_name='rpa_second_eye_time')
+
+    on_off = models.BooleanField(default=True, verbose_name="是否有效")
+    ocr_auto_result_pass = models.BooleanField(default=False, verbose_name="整体结果")
+    ocr_auto_result = models.TextField(null=True, verbose_name="auto比对结果")
+    ocr_latest_comparison_time = models.DateTimeField(auto_now=True, null=True, verbose_name='最新比对时间')
 
-#     class Meta:
-#         managed = False
-#         db_table = 'hil_contract'
+    update_time = models.DateTimeField(auto_now=False, verbose_name='修改时间')
+    create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
 
+    class Meta:
+        managed = False
+        db_table = 'hil_auto_settlement'
 
-# class AFCContract(models.Model):
-#     id = models.AutoField(primary_key=True, verbose_name="id")  # 主键
-#     application_id = models.CharField(max_length=64, verbose_name="申请id")  # 索引
-#     create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
 
-#     class Meta:
-#         managed = False
-#         db_table = 'afc_contract'
-#         situ_db_label = 'afc'
+class AFCAutoSettlement(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name="id")  # 主键
+    application_id = models.CharField(max_length=64, verbose_name="申请id")  # 索引
+    aa_type = models.CharField(null=True, max_length=64, verbose_name="aa_type")
+
+    rpa_result = models.SmallIntegerField(null=True, verbose_name="原因10数目")
+    rpa_1st_eye_tat = models.DecimalField(null=True, verbose_name='rpa_1st_eye_tat')
+    rpa_2nd_eye_tat = models.DecimalField(null=True, verbose_name='rpa_2nd_eye_tat')
+    rpa_3rd_eye_tat = models.DecimalField(null=True, verbose_name='rpa_3rd_eye_tat')
+    rpa_total_tat = models.DecimalField(null=True, verbose_name='rpa_total_tat')
+    rpa_activated_time = models.DateTimeField(null=True, verbose_name='rpa_activated_time')
+    rpa_get_case_from_ocr_time = models.DateTimeField(null=True, verbose_name='rpa_get_case_from_ocr_time')
+    rpa_get_case_from_oc_time = models.DateTimeField(null=True, verbose_name='rpa_get_case_from_oc_time')
+    rpa_payment_authorize_time = models.DateTimeField(null=True, verbose_name='rpa_payment_authorize_time')
+    rpa_second_eye_time = models.DateTimeField(null=True, verbose_name='rpa_second_eye_time')
+
+    on_off = models.BooleanField(default=True, verbose_name="是否有效")
+    ocr_auto_result_pass = models.BooleanField(default=False, verbose_name="整体结果")
+    ocr_auto_result = models.TextField(verbose_name="auto比对结果")
+    ocr_latest_comparison_time = models.DateTimeField(auto_now=True, null=True, verbose_name='最新比对时间')
+
+    update_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
+    create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
+
+    class Meta:
+        managed = False
+        db_table = 'afc_auto_settlement'
+        situ_db_label = 'afc'
 
 
diff --git a/src/apps/doc/views.py b/src/apps/doc/views.py
index 50d4d76..7ae6a1e 100644
--- a/src/apps/doc/views.py
+++ b/src/apps/doc/views.py
@@ -6,7 +6,7 @@ import datetime
 import fitz
 import shutil
 from django.utils import timezone
-from django.http import HttpResponse
+# from django.http import HttpResponse
 from django.db.models import Q
 from rest_framework.permissions import IsAuthenticated
 from webargs import fields, validate
@@ -17,14 +17,15 @@ from common.mixins import GenericView
 from common.tools.file_tools import file_write
 from common.redis_cache import redis_handler as rh
 from .models import (
+    # UploadDocRecords,
     DocStatus,
     PriorityApplication,
     GCAPRecords,
     AFCComparisonInfo,
-    AFCSEComparisonInfo,
+    # AFCSEComparisonInfo,
     AFCSECMSInfo,
     HILComparisonInfo,
-    HILSEComparisonInfo,
+    # HILSEComparisonInfo,
     HILSECMSInfo,
     AFCCompareOfflineReport,
     HILCompareOfflineReport,
@@ -36,6 +37,8 @@ from .models import (
     AFCSECompareResultRecord,
     HILCACompareResultRecord,
     HILSECompareResultRecord,
+    HILAutoSettlement,
+    AFCAutoSettlement,
 )
 from .named_enum import ErrorType
 from .mixins import DocHandler
@@ -213,6 +216,7 @@ se_compare_content = {
     'customerType': fields.Str(required=True, validate=validate.OneOf(consts.CUSTOMER_TYPE)),
     "firstSubmmisonDate": CustomDate(required=True),
     'propertyDocumentPolicy': fields.Str(required=False, validate=validate.Length(max=16)),
+    'isAutoSettlement': fields.Boolean(required=False),
 
     'individualCusInfo': fields.List(fields.Nested(se_individual_args),
                                      required=True, validate=validate.Length(min=1, max=4)),
@@ -283,6 +287,7 @@ compare_result_args = {
     'scheme': fields.Str(required=True, validate=validate.OneOf(consts.COMPARE_DOC_SCHEME_LIST)),
     'id': fields.Int(required=False, validate=lambda val: val >= 1),
     'case_id': fields.Str(required=True, validate=validate.Length(max=64)),
+    'auto': fields.Int(required=False),
 }
 
 upload_pdf_args = {
@@ -500,27 +505,29 @@ class UploadDocView(GenericView, DocHandler):
         # co_name = self.get_name(applicant_data, 'coApplicantName', 16)
         # g1_name = self.get_name(applicant_data, 'guarantor1Name', 16)
         # g2_name = self.get_name(applicant_data, 'guarantor2Name', 16)
+
         # try:
         #     # 1. 上传信息记录
         #     UploadDocRecords.objects.create(
         #         metadata_version_id=document.get('metadataVersionId'),
         #         application_id=application_id,
-        #         main_applicant=main_name,
-        #         co_applicant=co_name,
-        #         guarantor_1=g1_name,
-        #         guarantor_2=g2_name,
+        #         main_applicant='main_name',
+        #         co_applicant='co_name',
+        #         guarantor_1='g1_name',
+        #         guarantor_2='g2_name',
         #         document_name=document_name,
         #         document_scheme=document_scheme,
         #         business_type=business_type,
         #         data_source=data_source,
         #         upload_finish_time=document.get('uploadFinishTime'),
         #     )
-        # except IntegrityError as e:
-        #     self.running_log.info('[doc upload fail] [args={0}] [err={1}]'.format(args, e))
-        #     self.invalid_params(msg='metadataVersionId repeat')
-        # else:
+        # except Exception as e:
+        #     self.running_log.info('[doc upload success] [same file skip] [args={0}]'.format(args))
+        #     # self.invalid_params(msg='metadataVersionId repeat')
+        #     return response.ok()
+
         data_source = self.fix_data_source(data_source)
-        document_scheme=self.fix_scheme(document_scheme)
+        document_scheme = self.fix_scheme(document_scheme)
 
         if document_name.endswith('.zip'):
             self.running_log.info('[doc upload success] [zip file skip] [args={0}]'.format(args))
@@ -531,6 +538,7 @@ class UploadDocView(GenericView, DocHandler):
                 if document_name.endswith('-证书.pdf') or document_name.endswith('-证书'):
                     self.running_log.info('[doc upload success] [eapp license skip] [args={0}]'.format(args))
                     return response.ok()
+
         # 2. 根据业务类型分库存储
         doc_class, prefix = self.get_doc_class(business_type)
         doc = doc_class.objects.create(
@@ -707,37 +715,52 @@ class SECompareView(GenericView):
     def post(self, request, args):
         # 存库
         content = args.get('content', {})
-        uniq_seq = content.get('uniqSeq')
         business_type = content.get('applicationEntity')
         application_id = content.get('applicationId')
+        is_auto = content.get('isAutoSettlement', False)
+        if is_auto:
+            # 加入优先级队列
+            PriorityApplication.objects.update_or_create(
+                application_id=application_id, defaults={'on_off': True})
+            # 加入auto表
+            auto_class = HILAutoSettlement if business_type in consts.HIL_SET else AFCAutoSettlement
+            is_auto = auto_class.objects.filter(application_id=application_id, on_off=True).exists()
+            if not is_auto:
+                auto_class.objects.create(
+                    application_id=application_id,
+                )
+        return response.ok()
 
-        individual_cus_info = json.dumps(content.get('individualCusInfo'))
-        vehicle_info = json.dumps(content.get('vehicleInfo'))
-        insurance_info = json.dumps(content.get('insuranceInfo'))
-        bank_info = json.dumps(content.get('bankInfo'))
-        quotationt_info = json.dumps(content.get('quotationtInfo'))
-        corporate_cus_info = json.dumps(content.get('corporateCusInfo')) if isinstance(
-            content.get('corporateCusInfo'), dict) else None
-
-        comparison_class = HILSEComparisonInfo if business_type in consts.HIL_SET else AFCSEComparisonInfo
-        comparison_class.objects.create(
-            uniq_seq=uniq_seq,
-            application_id=application_id,
-            application_version=content.get('applicationVersion'),
-            customer_type=content.get('customerType'),
-            first_submmison_date=content.get('firstSubmmisonDate'),
-            property_doc_policy=content.get('propertyDocumentPolicy', None),
-            individual_cus_info=individual_cus_info,
-            corporate_cus_info=corporate_cus_info,
-            vehicle_info=vehicle_info,
-            insurance_info=insurance_info,
-            bank_info=bank_info,
-            quotationt_info=quotationt_info
-        )
+        # uniq_seq = content.get('uniqSeq')
+        # business_type = content.get('applicationEntity')
+        # application_id = content.get('applicationId')
+        #
+        # individual_cus_info = json.dumps(content.get('individualCusInfo'))
+        # vehicle_info = json.dumps(content.get('vehicleInfo'))
+        # insurance_info = json.dumps(content.get('insuranceInfo'))
+        # bank_info = json.dumps(content.get('bankInfo'))
+        # quotationt_info = json.dumps(content.get('quotationtInfo'))
+        # corporate_cus_info = json.dumps(content.get('corporateCusInfo')) if isinstance(
+        #     content.get('corporateCusInfo'), dict) else None
+
+        # comparison_class = HILSEComparisonInfo if business_type in consts.HIL_SET else AFCSEComparisonInfo
+        # comparison_class.objects.create(
+        #     uniq_seq=uniq_seq,
+        #     application_id=application_id,
+        #     application_version=content.get('applicationVersion'),
+        #     customer_type=content.get('customerType'),
+        #     first_submmison_date=content.get('firstSubmmisonDate'),
+        #     property_doc_policy=content.get('propertyDocumentPolicy', None),
+        #     individual_cus_info=individual_cus_info,
+        #     corporate_cus_info=corporate_cus_info,
+        #     vehicle_info=vehicle_info,
+        #     insurance_info=insurance_info,
+        #     bank_info=bank_info,
+        #     quotationt_info=quotationt_info
+        # )
         # 触发比对
         # compare.apply_async((application_id, business_type, uniq_seq, None, False, False),
         #                     queue='queue_compare')
-        return response.ok()
 
     post.openapi_doc = '''
         tags: [info]
@@ -944,6 +967,38 @@ class CompareResultView(GenericView):
         entity = args.get('entity')
         scheme = args.get('scheme')
         case_id = args.get('case_id')
+        is_auto = args.get('auto')
+        if is_auto == 1:
+            result_table = HILAutoSettlement if entity == consts.HIL_PREFIX else AFCAutoSettlement
+
+            if result_id is not None:
+                result_obj = result_table.objects.filter(id=result_id).first()
+            else:
+                result_obj = result_table.objects.filter(application_id=case_id).first()
+
+            if result_obj is None:
+                whole_result = ''
+            else:
+                whole_result = consts.RESULT_Y if result_obj.ocr_auto_result_pass else consts.RESULT_N
+
+            source = consts.INFO_SOURCE[1]
+            version = comments = ''
+
+            compare_result = {
+                'id': 0 if result_obj is None else result_obj.id,
+                'application_id': case_id,
+                'entity': entity,
+                'scheme': consts.DOC_SCHEME_LIST[0] if scheme == consts.COMPARE_DOC_SCHEME_LIST[0] else
+                consts.DOC_SCHEME_LIST[1],
+                'whole_result': whole_result,
+                'latest_compared_time': '' if result_obj is None else result_obj.ocr_latest_comparison_time.strftime('%Y-%m-%d %H:%M'),
+                'source': source,
+                'version': version,
+                'comments': comments,
+                'result': [] if result_obj is None else json.loads(result_obj.ocr_auto_result)
+            }
+
+            return response.ok(data=compare_result)
 
         if entity == consts.HIL_PREFIX:
             result_table = HILCACompareResult if scheme == consts.COMPARE_DOC_SCHEME_LIST[0] else HILSECompareResult
@@ -1132,7 +1187,7 @@ class SECMSView(GenericView):
     permission_classes = [IsAuthenticated]
     authentication_classes = [OAuth2AuthenticationWithUser]
 
-    # pos上传比对信息接口 SE
+    # CMS上传比对信息接口 SE
     # @use_args(se_cms_args, location='data')
     def post(self, request):
         args = request.data
diff --git a/src/celery_compare/tasks.py b/src/celery_compare/tasks.py
index 05b3611..57dce1f 100644
--- a/src/celery_compare/tasks.py
+++ b/src/celery_compare/tasks.py
@@ -27,6 +27,8 @@ from apps.doc.models import (
     AFCCACompareResult,
     HILSECompareResult,
     HILCACompareResult,
+    HILAutoSettlement,
+    AFCAutoSettlement,
 )
 from apps.doc import consts
 from apps.doc.ocr.gcap import gcap
@@ -870,6 +872,481 @@ def ca_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res
                                                    traceback.format_exc()))
 
 
+def get_se_cms_compare_info_auto(last_obj, application_entity):
+    cms_info = json.loads(last_obj.content)
+
+    compare_info = {}
+
+    individual_info_dict = {}
+    main_role_info = {}
+    company_info_list = []
+
+    # 个人信息证件---------------------------------------------------------------------------------------------------------
+    # province = cms_info.get('province', '')
+    for individual_info in cms_info.get('applicantInformation', []):
+        all_id_num = []
+
+        license_dict = {}
+
+        customer_name = individual_info.get('name', '')
+        legal_name = individual_info.get('legalRepName', '')
+        # establishment_date = individual_info.get('establishmentDate', '')
+        # date_of_birth = individual_info.get('dateOfBirth', '')
+
+        for id_info in individual_info.get('IDInformation', []):
+            if id_info.get('idType') in consts.SE_CMS_FIRST_ID_FIELD_MAPPING:
+                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', '')))
+                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']:
+                # ['companyName', 'legalRepName', 'businessLicenseNo', 'organizationCreditCode',
+                #  'taxRegistrationCertificateNo', 'establishmentDate', 'businessLicenseDueDate']
+                id_num = decode_des(id_info.get('idNum', ''), des_key)
+                # bl_field_input = [
+                #     ('companyName', customer_name),
+                #     ('legalRepName', legal_name),
+                #     ('businessLicenseNo', id_num),
+                #     ('organizationCreditCode', id_num),
+                #     ('taxRegistrationCertificateNo', id_num),
+                #     ('establishmentDate', establishment_date),
+                #     ('businessLicenseDueDate', id_info.get('idExpiryDate', '')),
+                # ]
+                # license_dict[consts.BL_EN] = bl_field_input
+                all_id_num.append(id_num)
+                if individual_info.get('customersubType', '') == 'Corporate':
+                    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 len(all_id_num) > 0:
+            main_role_info.setdefault(individual_info['applicantType'], []).append(
+                (customer_name, '、'.join(all_id_num), all_id_num[0])
+            )
+
+        if len(license_dict) > 0:
+            individual_info_dict.setdefault(individual_info['applicantType'], []).append(license_dict)
+
+    compare_info['applicantInformation'] = individual_info_dict
+
+    main_name = main_num = hmh_name = hmh_id = ''
+    for applicant_type in consts.APPLICANT_TYPE_ORDER:
+        if applicant_type in main_role_info:
+            # main_name, main_num, _ = main_role_info[applicant_type][0]
+            hmh_name, _, hmh_id = main_role_info[applicant_type][0]
+            break
+
+    # dda_name_list = []
+    # dda_num_list = []
+    # for applicant_type in consts.APPLICANT_TYPE_ORDER[:2]:
+    #     if applicant_type in main_role_info:
+    #         for dda_name_part, _, dda_num_part in main_role_info[applicant_type]:
+    #             dda_name_list.append(dda_name_part)
+    #             dda_num_list.append(dda_num_part)
+    # dda_name = '、'.join(dda_name_list)
+    # dda_num = '、'.join(dda_num_list)
+    # del main_role_info
+
+    if len(company_info_list) > 0:
+        company_info = company_info_list[0]
+    else:
+        company_info = None
+
+    vehicle_info = {}
+    vehicle_field_input = []
+    vehicle_status = cms_info.get('vehicleStatus', '')
+    first_submission_date = cms_info.get('submissionDate', '')
+    vin_no = cms_info.get('vehicleInformation', {}).get('vinNo', '')
+    amount = str(cms_info.get('financialInformation', {}).get('vehiclePrice', '0.0'))
+    # 新车发票----------------------------------------------------------------------------------------------------------
+    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(('vehicleTransactionAmount', amount))
+
+        if isinstance(company_info, tuple):
+            vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[0], company_info[0]))
+            vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[1], company_info[1]))
+        else:
+            vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[0], hmh_name))
+            vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[1], hmh_id))
+        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[4], consts.SE_FPL_VALUE))
+        bhsj = float(amount) / 1.13
+        vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[5], consts.SPLIT_STR.join([
+            format(bhsj, '.2f'),
+            format(float(amount) - bhsj, '.2f'),
+            consts.RESULT_Y
+        ])))
+        vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[6], consts.SE_LAYOUT_VALUE))
+        vehicle_info[consts.MVI_EN] = vehicle_field_input
+        compare_info['vehicleInfo'] = vehicle_info
+    # 二手车发票、交易凭证、绿本------------------------------------------------------------------------------------------
+    # else:
+    #     gb_field_input = [
+    #         ('vinNo', vin_no),
+    #     ]
+    #     gb34_field_input = []
+    #     jypz_field_input = []
+    #     vehicle_field_input.append(('vinNo', vin_no))
+    #     vehicle_field_input.append(('vehicleTransactionAmount', amount))
+    #     if isinstance(company_info, tuple):
+    #         vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[0], company_info[0]))
+    #         vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[1], company_info[1]))
+    #         jypz_field_input.append((consts.SE_NEW_ADD_FIELD[0], company_info[0]))
+    #         jypz_field_input.append((consts.SE_NEW_ADD_FIELD[1], company_info[1]))
+    #         gb34_field_input.append((consts.SE_GB_USED_FIELD[0], company_info[0]))
+    #         gb34_field_input.append((consts.SE_GB_USED_FIELD[1], company_info[1]))
+    #     else:
+    #         vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[0], main_name))
+    #         vehicle_field_input.append((consts.SE_NEW_ADD_FIELD[1], main_num))
+    #         jypz_field_input.append((consts.SE_NEW_ADD_FIELD[0], main_name))
+    #         jypz_field_input.append((consts.SE_NEW_ADD_FIELD[1], main_num))
+    #         gb34_field_input.append((consts.SE_GB_USED_FIELD[0], main_name))
+    #         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))
+    #     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))
+    #
+    #     vehicle_info[consts.MVC_EN] = gb_field_input
+    #     vehicle_info[consts.MVC34_EN] = gb34_field_input
+    #     if not detect_list[0]:
+    #         vehicle_info[consts.UCI_EN] = vehicle_field_input
+    #     if not detect_list[1]:
+    #         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
+
+    # 银行卡-------------------------------------------------------------------------------------------------------
+    bank_info = {}
+    bank_name = cms_info.get('bankAccountDetails', {}).get('bankName', '')
+    account_no = decode_des(cms_info.get('bankAccountDetails', {}).get('accountNo', ''), des_key)
+    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
+
+    # DDA------------------------------------------------------------------------------------------------------------
+    # if is_gsyh or not detect_list[-1]:
+    #     dda_field_input = [
+    #         ('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),
+    #         ('customerName', dda_name),
+    #         ('idNum', dda_num),
+    #         ('accountHolderName', cms_info.get('bankAccountDetails', {}).get('accountHolderName', '')),
+    #         ('accountNo', account_no),
+    #     ]
+    #     bank_info[consts.DDA_EN] = dda_field_input
+    compare_info['bankInfo'] = bank_info
+
+    # 银行流水 --------------------------------------------------------------------
+    if cms_info.get('autoApprovedDetails', {}).get('aaType', '') in ['CAA1', 'CAA2']:
+        bs_role_list = []
+        for applicant_type in consts.APPLICANT_TYPE_ORDER[:2]:
+            if applicant_type in main_role_info:
+                for bs_role, _, _ in main_role_info[applicant_type]:
+                    bs_role_list.append(bs_role)
+
+        bs_info = dict()
+        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天'),
+        ]
+
+        dbr_bs_role_list = []
+        for dbr_bs_role, _, _ in main_role_info.get(consts.APPLICANT_TYPE_ORDER[2], []):
+            dbr_bs_role_list.append(dbr_bs_role)
+
+        if len(dbr_bs_role_list) >= 1:
+            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天'),
+            ])
+            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天'),
+                ])
+        bs_info[consts.BS_EN] = bs_field_input
+        compare_info['Bank Statement'] = bs_info
+
+    # 抵押登记豁免函----------------------------------------------------------------------------------------------------
+    other_info = {}
+    full_no = cms_info.get('settlemnetVerification', {}).get('applicationNo', '')
+    if cms_info.get('mortgageType', '') == 'Mortgage Free' or cms_info.get('mortgageType', '') == 'MortgageFree':
+        hmh_field_input = [
+            (consts.SE_HMH_FIELD[0], hmh_name),
+            (consts.SE_HMH_FIELD[1], hmh_id),
+            (consts.SE_HMH_FIELD[2], full_no),
+            (consts.SE_HMH_FIELD[3], cms_info.get('financeCompany', '')),
+            (consts.SE_HMH_FIELD[4], consts.SE_STAMP_VALUE),
+        ]
+        other_info[consts.HMH_EN] = hmh_field_input
+
+    # ASP -------------------------------------------------------------------------------------------------------
+    asp_list = []
+    gzs_status = consts.GZS_STATUS[1]
+    gzs_list = [gzs_status]
+    gzs_price = '0.00'
+    is_asp = False
+    # insurance_price = None
+    if str(cms_info.get('financialInformation', {}).get('associatedServicePrincipal', '0.00')) != '0.00':
+        is_asp = True
+        # for asp_info in cms_info.get('associatedServices', []):
+        for asp_info in cms_info.get('associatedServices', {}).get('SubassociatedServices', []):
+            tmp_asp_name = asp_info.get('associatedServices')
+            if isinstance(tmp_asp_name, str) and len(tmp_asp_name) > 0:
+                if gzs_status == consts.GZS_STATUS[1] and tmp_asp_name.find(consts.GZS_NAME) != -1:
+                    gzs_status = consts.GZS_STATUS[2]
+                    gzs_price = asp_info.get('price', '0.00')
+                asp_list.append(
+                    (
+                        tmp_asp_name,
+                        asp_info.get('price', '0.00'),
+                        asp_info.get('financed', '0.00')
+                    )
+                )
+                # 保单费合计
+                # if tmp_asp_name.find('机动车辆保险') != -1:
+                #     insurance_price = asp_info.get('price', '0.00')
+
+        # fin_total = 0
+        fin_total_tmp = cms_info.get('associatedServices', {}).get('financed total', '0.00')
+        fin_total = '0.00' if fin_total_tmp.strip() == '' else fin_total_tmp
+        for asp_name, _, asp_fin in asp_list:
+            if gzs_status == consts.GZS_STATUS[2] and asp_name.find(consts.GZS_NAME) == -1:
+                gzs_status = consts.GZS_STATUS[0]
+            # fin_total += float(asp_fin)
+        asp_list.append(
+            (
+                consts.ASP_SUM_NAME,
+                '',
+                fin_total,
+                # format(fin_total, '.2f'),
+            )
+        )
+
+        # CMS Vehicle Price / 1.13 * 10 %
+        if gzs_status != consts.GZS_STATUS[1]:
+            gzs_value = float(amount) * 0.1 / 1.13
+            gzs_list.append(gzs_value)
+            gzs_list.append(float(gzs_price))
+
+    # 保单 -----------------------------------------------------------------------------------------------------------
+    # is_insurance = 0
+    fp_campaign = cms_info.get('fpCampaign', '')
+    # insurance_type = cms_info.get('insuranceDetails', {}).get('insuranceType', '')
+    # if insurance_type == 'Waive Insurance' and isinstance(insurance_price, str):
+    #     is_insurance = 1
+    # elif insurance_type == 'Comprehensive Insurance':
+    #     is_insurance = 2
+    # if is_insurance != 0:
+    #     if fp_campaign.find('OCU') == -1:
+    #         ssx_amount = amount
+    #     else:
+    #         ssx_amount = format(float(amount) * 0.8, '.2f')
+    #     if fp_campaign.find('Joy_Plus') == -1 or fp_campaign.find('JoyPlus') == -1:
+    #         dszx_amount = '200000'
+    #     else:
+    #         dszx_amount = '500000'
+    #     bd_field_input = [
+    #         (consts.SE_BD_FIELD[0], hmh_name),
+    #         (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),
+    #         (consts.SE_BD_FIELD[5], consts.JDMPV_VALUE),
+    #         (consts.SE_BD_FIELD[6], cms_info.get('insuranceDetails', {}).get('startDate', '')),
+    #         (consts.SE_BD_FIELD[7], cms_info.get('insuranceDetails', {}).get('endDate', '')),
+    #         (consts.SE_BD_FIELD[8], consts.SE_STAMP_VALUE),
+    #         (consts.SE_BD_FIELD[9], consts.SE_STAMP_VALUE),
+    #     ]
+    #     if is_insurance == 1:
+    #         bd_field_input.append((consts.SE_BD_FIELD[10], insurance_price))
+    #     other_info[consts.BD_EN] = bd_field_input
+
+    if len(other_info) > 0:
+        compare_info['other'] = other_info
+
+    schedule_list = []
+    total_amount = 0
+    for schedule_dict in cms_info.get('paymentSchedule', []):
+        tmp_str = "{1}{0}{2}".format(consts.SPLIT_STR, str(schedule_dict.get('no', '')),
+                                     str(schedule_dict.get('grossRentalAmount', '')))
+        schedule_list.append(tmp_str)
+        total_amount += float(schedule_dict.get('grossRentalAmount', '0.0'))
+    schedule_list_str = consts.SCHEDULE_SPLIT_STR.join(schedule_list)
+
+    online_sign = cms_info.get('contractSource', 'Online Sign') == 'Online Sign'
+
+    contract_info = {}
+    if application_entity in consts.HIL_SET:
+        # HIL合同  售后回租合同 --------------------------------------------------------------------------------------
+        hil_contract_1_input = [
+            (consts.SE_HIL_CON_1_FIELD[0], [full_no] if online_sign else full_no),
+            (consts.SE_HIL_CON_1_FIELD[1], full_no),
+            (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[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[13], bank_name),
+        ]
+
+        if is_asp:
+            hil_contract_1_input.append((consts.SE_HIL_CON_1_FIELD[8], asp_list))
+            hil_contract_1_input.append((consts.SE_HIL_CON_1_FIELD[9], gzs_list))
+
+        if isinstance(company_info, tuple):
+            hil_contract_1_input.append((consts.SE_HIL_CON_1_FIELD[10], company_info[2]))
+
+        for key, app_type, id_idx, field_idx, is_force, e_write in consts.ROLE_LIST_1:
+            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:
+                    is_find = True
+                    if isinstance(field_idx, int):
+                        hil_contract_1_input.append((key, main_role_info[app_type][id_idx][field_idx]))
+                    else:
+                        hil_contract_1_input.append((key, field_idx))
+            if not is_find and is_force:
+                hil_contract_1_input.append((key, empty_str))
+        contract_info[consts.HIL_CONTRACT_1_EN] = hil_contract_1_input
+
+        # HIL合同  车辆处置协议 --------------------------------------------------------------------------------------
+        if fp_campaign.find('Joy_Select') != -1 or fp_campaign.find('JoySelect') != -1:
+            hil_contract_3_input = [
+                (consts.SE_HIL_CON_3_FIELD[0], [full_no] if online_sign else full_no),
+                (consts.SE_HIL_CON_3_FIELD[1], hmh_name),
+                (consts.SE_HIL_CON_3_FIELD[2], hmh_id),
+                (consts.SE_HIL_CON_3_FIELD[3], cms_info.get('dealerName', '')),
+                (consts.SE_HIL_CON_3_FIELD[4], full_no),
+                (consts.SE_HIL_CON_3_FIELD[5], hmh_name),
+                (consts.SE_HIL_CON_3_FIELD[6], hmh_id),
+            ]
+            if online_sign:
+                hil_contract_3_input.append((consts.SE_HIL_CON_3_FIELD[7], hmh_name))
+            contract_info[consts.HIL_CONTRACT_3_EN] = hil_contract_3_input
+
+        # HIL合同  车辆租赁抵押合同 --------------------------------------------------------------------------------------
+        hil_contract_2_input = [
+            (consts.SE_HIL_CON_2_FIELD[0], full_no),
+            (consts.SE_HIL_CON_2_FIELD[1], full_no),
+            (consts.SE_HIL_CON_2_FIELD[2], vin_no),
+            (consts.SE_HIL_CON_2_FIELD[3], format(total_amount, '.2f')),
+            (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:
+            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:
+                    is_find = True
+                    if isinstance(field_idx, int):
+                        hil_contract_2_input.append((key, main_role_info[app_type][id_idx][field_idx]))
+                    else:
+                        hil_contract_2_input.append((key, field_idx))
+            if not is_find and is_force:
+                hil_contract_2_input.append((key, empty_str))
+        contract_info[consts.HIL_CONTRACT_2_EN] = hil_contract_2_input
+        compare_info['contract'] = contract_info
+        return compare_info, cms_info.get('autoApprovedDetails', {}).get('aaType', ''), is_gsyh
+    else:
+        # 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[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[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[11], vehicle_principal_str),
+            (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[16], bank_name),
+            (consts.SE_AFC_CON_FIELD[17], schedule_list_str),
+        ]
+
+        if is_asp:
+            afc_contract_input.append((consts.SE_AFC_CON_FIELD[20], asp_list))
+            afc_contract_input.append((consts.SE_AFC_CON_FIELD[22], asp_list))
+            afc_contract_input.append((consts.SE_AFC_CON_FIELD[21], gzs_list))
+        else:
+            afc_contract_input.pop(5)
+            afc_contract_input.pop(5)
+            afc_contract_input.pop(9)
+            afc_contract_input.pop(9)
+
+        # '借款人签字及时间', 'Borrower', 0, 0, True
+        for key, app_type, id_idx, field_idx, is_force, e_write in consts.ROLE_LIST:
+            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:
+                    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))
+
+        if online_sign:
+            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
+        return compare_info, cms_info.get('autoApprovedDetails', {}).get('aaType', ''), is_gsyh
+
+
 def get_se_cms_compare_info(last_obj, application_entity, detect_list):
     cms_info = json.loads(last_obj.content)
 
@@ -1173,7 +1650,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
             ssx_amount = amount
         else:
             ssx_amount = format(float(amount) * 0.8, '.2f')
-        if fp_campaign.find('Joy_Plus') == -1:
+        if fp_campaign.find('Joy_Plus') == -1 or fp_campaign.find('JoyPlus') == -1:
             dszx_amount = '200000'
         else:
             dszx_amount = '500000'
@@ -1219,6 +1696,9 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
             (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[13], bank_name),
         ]
 
         if is_asp:
@@ -1244,7 +1724,7 @@ def get_se_cms_compare_info(last_obj, application_entity, detect_list):
         contract_info[consts.HIL_CONTRACT_1_EN] = hil_contract_1_input
 
         # HIL合同  车辆处置协议 --------------------------------------------------------------------------------------
-        if fp_campaign.find('Joy_Select') != -1:
+        if fp_campaign.find('Joy_Select') != -1 or fp_campaign.find('JoySelect') != -1:
             hil_contract_3_input = [
                 (consts.SE_HIL_CON_3_FIELD[0], [full_no] if online_sign else full_no),
                 (consts.SE_HIL_CON_3_FIELD[1], hmh_name),
@@ -1917,12 +2397,12 @@ def se_contract_compare(license_en, ocr_res_dict, strip_list, is_gsyh):
             else:
                 ocr_str_or_list = ocr_res.get(compare_logic[name][0])
                 if ocr_str_or_list is None and license_en == consts.AFC_CONTRACT_EN \
-                        and is_gsyh is True and name in consts.AFC_CON_BANK_FIELD:
+                        and is_gsyh is True and name in consts.CON_BANK_FIELD:
                     result = consts.RESULT_Y
                     ocr_str = empty_str
                     reason = compare_logic[name][3]
                 elif isinstance(ocr_str_or_list, str) or isinstance(ocr_str_or_list, list):
-                    if license_en == consts.AFC_CONTRACT_EN and is_gsyh is True and name in consts.AFC_CON_BANK_FIELD:
+                    if is_gsyh is True and name in consts.CON_BANK_FIELD:
                         update_args = {'is_gsyh': is_gsyh}
                         for k, v in compare_logic[name][2].items():
                             update_args[k] = v
@@ -2223,6 +2703,35 @@ def se_result_detect(ocr_res_dict):
     return detect_list
 
 
+def se_compare_auto(application_id, application_entity, ocr_res_id, last_obj, ocr_res_dict, auto_obj):
+    try:
+        # 比对逻辑
+        # detect_list = se_result_detect(ocr_res_dict)
+        compare_info, aa_type, is_gsyh = get_se_cms_compare_info_auto(
+            last_obj, application_entity)
+        compare_result, total_fields, failed_count, successful_at_this_level, failure_reason_str, cn_failure_reason_str, bs_failure_reason_str = se_compare_process(compare_info, ocr_res_dict, is_gsyh)
+        compare_log.info('{0} [Auto SE] [compare success] [entity={1}] [id={2}] [ocr_res_id={3}] [result={4}]'.format(
+            log_base, application_entity, application_id, ocr_res_id, compare_result))
+    except Exception as e:
+        compare_log.error('{0} [Auto SE] [compare error] [entity={1}] [id={2}] [ocr_res_id={3}] '
+                          '[error={4}]'.format(log_base, application_entity, application_id, ocr_res_id,
+                                               traceback.format_exc()))
+    else:
+        # 将比对结果写入数据库 auto settlement
+        try:
+            auto_obj.aa_type = aa_type
+            auto_obj.ocr_auto_result_pass = successful_at_this_level
+            auto_obj.ocr_auto_result = json.dumps(compare_result)
+            auto_obj.ocr_latest_comparison_time = datetime.now()
+            auto_obj.save()
+            compare_log.info('{0} [Auto SE] [result save success] [entity={1}] [id={2}] [ocr_res_id={3}]'.format(
+                log_base, application_entity, application_id, ocr_res_id))
+        except Exception as e:
+            compare_log.error('{0} [Auto SE] [result save error] [entity={1}] [id={2}] [ocr_res_id={3}] '
+                              '[error={4}]'.format(log_base, application_entity, application_id, ocr_res_id,
+                                                   traceback.format_exc()))
+
+
 def se_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res_dict, is_cms):
     try:
         # 比对逻辑
@@ -2317,6 +2826,7 @@ def se_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res
             compare_log.info('{0} [SE] [cms success] [entity={1}] [id={2}] [ocr_res_id={3}] [response={4}]'.format(
                 log_base, application_entity, application_id, ocr_res_id, response))
 
+
 @app.task
 def compare(application_id, application_entity, uniq_seq, ocr_res_id, is_ca=True, is_cms=False):
     # POS: application_id, application_entity, uniq_seq, None
@@ -2348,12 +2858,12 @@ def compare(application_id, application_entity, uniq_seq, ocr_res_id, is_ca=True
     else:
         result_class = HILSEOCRResult if application_entity == consts.HIL_PREFIX else AFCSEOCRResult
         ca_result_class = HILOCRResult if application_entity == consts.HIL_PREFIX else AFCOCRResult
-        if ocr_res_id is None:
-            ca_ocr_res_dict = ca_result_class.objects.filter(application_id=application_id).values(
-                *consts.CA_ADD_COMPARE_FIELDS).first()
-        else:
-            ca_ocr_res_dict = ca_result_class.objects.filter(id=ocr_res_id).values(
-                *consts.CA_ADD_COMPARE_FIELDS).first()
+        # if ocr_res_id is None:
+        ca_ocr_res_dict = ca_result_class.objects.filter(application_id=application_id).values(
+            *consts.CA_ADD_COMPARE_FIELDS).first()
+        # else:
+        #     ca_ocr_res_dict = ca_result_class.objects.filter(id=ocr_res_id).values(
+        #         *consts.CA_ADD_COMPARE_FIELDS).first()
     if ocr_res_id is None:
         ocr_res_dict = result_class.objects.filter(application_id=application_id).values(*consts.COMPARE_FIELDS).first()
     else:
@@ -2374,4 +2884,10 @@ def compare(application_id, application_entity, uniq_seq, ocr_res_id, is_ca=True
                     tmp_se_result = json.loads(ocr_res_dict.get(field_name))
                     tmp_ca_result.extend(tmp_se_result)
                 ocr_res_dict[field_name] = json.dumps(tmp_ca_result)
+        # auto settlement
+        auto_class = HILAutoSettlement if application_entity == consts.HIL_PREFIX else AFCAutoSettlement
+        auto_obj = auto_class.objects.filter(application_id=application_id, on_off=True).first()
+        if auto_obj is not None:
+            se_compare_auto(application_id, application_entity, ocr_res_id, last_obj, ocr_res_dict, auto_obj)
         se_compare(application_id, application_entity, ocr_res_id, last_obj, ocr_res_dict, is_cms)
+
diff --git a/src/common/tools/mssql_script13.py b/src/common/tools/mssql_script13.py
new file mode 100644
index 0000000..e69551e
--- /dev/null
+++ b/src/common/tools/mssql_script13.py
@@ -0,0 +1,79 @@
+import pyodbc
+
+hil_sql = """
+    create table hil_auto_settlement
+    (
+       id bigint identity primary key,
+       application_id nvarchar(64) not null,
+       aa_type nvarchar(64),
+       
+       rpa_result smallint,
+       rpa_1st_eye_tat decimal(18,0),
+       rpa_2nd_eye_tat decimal(18,0),
+       rpa_3rd_eye_tat decimal(18,0),
+       rpa_total_tat decimal(18,0),
+       rpa_activated_time datetime,
+       rpa_get_case_from_ocr_time datetime,
+       rpa_get_case_from_oc_time datetime,
+       rpa_payment_authorize_time datetime,
+       rpa_second_eye_time datetime,
+       
+       on_off bit default 1 not null,
+       ocr_auto_result_pass bit default 0 not null,
+       ocr_auto_result nvarchar(max),
+       ocr_latest_comparison_time datetime,
+       
+       update_time datetime not null,
+       create_time datetime not null
+    );
+    
+    create index hil_auto_settlement_application_id_index
+       on hil_auto_settlement (application_id);
+"""
+
+afc_sql = """
+    create table afc_auto_settlement
+    (
+       id bigint identity primary key,
+       application_id nvarchar(64) not null,
+       aa_type nvarchar(64),
+       
+       rpa_result smallint,
+       rpa_1st_eye_tat decimal(18,0),
+       rpa_2nd_eye_tat decimal(18,0),
+       rpa_3rd_eye_tat decimal(18,0),
+       rpa_total_tat decimal(18,0),
+       rpa_activated_time datetime,
+       rpa_get_case_from_ocr_time datetime,
+       rpa_get_case_from_oc_time datetime,
+       rpa_payment_authorize_time datetime,
+       rpa_second_eye_time datetime,
+       
+       on_off bit default 1 not null,
+       ocr_auto_result_pass bit default 0 not null,
+       ocr_auto_result nvarchar(max),
+       ocr_latest_comparison_time datetime,
+       
+       update_time datetime not null,
+       create_time datetime not null
+    );
+    
+    create index afc_auto_settlement_application_id_index
+       on afc_auto_settlement (application_id);
+"""
+
+hil_cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};', autocommit=True)
+
+hil_cursor = hil_cnxn.cursor()
+hil_cursor.execute(hil_sql)
+
+hil_cursor.close()
+hil_cnxn.close()
+
+afc_cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};', autocommit=True)
+
+afc_cursor = afc_cnxn.cursor()
+afc_cursor.execute(afc_sql)
+
+afc_cursor.close()
+afc_cnxn.close()