import copy
import re

LONG_NAME = 'long_name'

TIME_NUM = 600000000

PAGE_DEFAULT = 1
PAGE_SIZE_DEFAULT = 10

FIXED_APPLICATION_ID_PREFIX = 'CH-S'

DOC_SCHEME_LIST = ['ACCEPTANCE', 'SETTLEMENT', 'CONTRACTMANAGEMENT']
DATA_SOURCE_LIST = ['POS', 'EAPP', 'ECONTRACT']
COMPARE_DOC_SCHEME_LIST = ['CA', 'SE']

HIL_PREFIX = 'HIL'
AFC_PREFIX = 'AFC'
SPLIT_STR = '_'
BUSINESS_TYPE_LIST = [HIL_PREFIX, AFC_PREFIX]
HIL_SET = {'HIL', 'HIl', 'HiL', 'Hil', 'hIL', 'hIl', 'hiL', 'hil', 'CO00002'}

PRIORITY_WORDS = {'muw', 'MUW', '42', 42}
TMP_DIR_NAME = 'OCR_Files'

# -------EDMS相关---------------------------------------------------------------------------------------------------

SESSION_PREFIX = 'FHLSID'
CUSTOM_CLIENT = 'CustomClient'
FIXED_TOKEN = '00000000-0000-0000-0000-000000000000'
FIXED_FILE_SIZE = 0
DOWNLOAD_ACTION_TYPE = 'Downloaded'

DOC_SCHEMA_ID_FILL = {
    'ACCEPTANCE': (1, 'DFE-AutoFilingScript'),
    'SETTLEMENT': (20, 'DFE-AutoFilingScript'),
    'CONTRACTMANAGEMENT': (86, 'Schema-Based')
}
BUSINESS_TYPE_DICT = {
    HIL_PREFIX: 'CO00002',
    AFC_PREFIX: 'CO00001'
}
DOC_SCHEMA_TYPE = 'ElectronicRecord'
APPLICATION_ID_META_FIELD_id = 1
DEALER_CODE_META_FIELD_id = 13
BUSINESS_TYPE_META_FIELD_id = 93

RETRY_TIMES = 2

# ---------银行流水模板相关--------------------------------------------------------------------------------------------

TRANS_MAP = {
    'C': "0",
    'c': "0",
    '(': "0",
    'o': "0",
    'O': "0",
    'D': "0",
    'U': "0",
    'n': "0",

    '[': "1",
    ']': "1",
    'l': "1",
    'L': "1",

    'z': "2",
    'Z': "2",

    'A': "4",

    's': "5",
    'S': "5",

    'b': "6",

    'g': "9",
    'E': "9",

    'B': "13",
}
TRANS = str.maketrans(TRANS_MAP)
SHEET_TITLE_TRANS_MAP = {
    '/': "",
    '\\': "",
    '?': "",
    '*': "",
    '[': "",
    ']': "",
    ':': "",
    ':': "",
}
SHEET_TITLE_TRANS = str.maketrans(SHEET_TITLE_TRANS_MAP)
ERROR_CARD = '异常卡号'
ERROR_CHARS = {'.', '。', ':', ':', '•', '·', ',', ','}
RES_SHEET_NAME = '结果统计'
RES_SHEET_HEADER = ('页码', '图片序号', '检测图片序号', '结果')
RES_SUCCESS = '识别成功'
RES_SUCCESS_OTHER = '识别成功(其他类)'
RES_SUCCESS_EMPTY = '识别成功(空数据)'
RES_FAILED = '识别失败'
RES_FAILED_1 = '识别失败(阶段1)'
RES_FAILED_2 = '识别失败(阶段2)'
RES_FAILED_3 = '识别失败(阶段1数据格式错误)'
RES_FAILED_SET = {RES_FAILED, RES_FAILED_1, RES_FAILED_2, RES_FAILED_3}

CARD_RATIO = 0.9
UNKNOWN_CARD = '未知卡号'
UNKNOWN_ROLE = '未知户名'
DATE_FORMAT = ['%Y年%m月%d日', '%Y/%m/%d', '%Y-%m-%d', '%Y%m%d']

PROOF_COL_TITLE = '核对结果'
PROOF_RES = ('对', '错')
META_SHEET_TITLE = '关键信息提取和展示'

SUMMARY_KEY = 'summary_col'
DATE_KEY = 'date_col'
AMOUNT_KEY = 'amount_col'
OVER_KEY = 'over_col'
IMCOME_KEY = 'income_col'
OUTLAY_KEY = 'outlay_col'
BORROW_KEY = 'borrow_col'
MIN_ROW_KEY = 'min_row'
FIND_COUNT_KEY = 'find_count'
FIND_COL_KEY = 'find_col'
HEADER_KEY = 'header'

KEY_LIST = [SUMMARY_KEY, DATE_KEY, OVER_KEY, BORROW_KEY, AMOUNT_KEY, IMCOME_KEY, OUTLAY_KEY]

CLASSIFY_MAP = {
    SUMMARY_KEY: 5,
    DATE_KEY: 0,
    AMOUNT_KEY: 2,
    OVER_KEY: 3,
    IMCOME_KEY: 11,
    OUTLAY_KEY: 12,
    BORROW_KEY: 10,
}

FIXED_HEADERS = ('记账日期', '记账时间', '金额', '余额', '交易名称', '附言', '对方账户名', '对方卡号/账号',
                 '对方开户行', '核对结果', '借贷', '收入', '支出')
FIXED_COL_AMOUNT = len(FIXED_HEADERS)
BASE_HEADERS_MAPPING = {label: idx + 1 for idx, label in enumerate(FIXED_HEADERS)}
BORROW_HEADER_COL = BASE_HEADERS_MAPPING['借贷']
INCOME_HEADER_COL = BASE_HEADERS_MAPPING['收入']
OUTLAY_HEADER_COL = BASE_HEADERS_MAPPING['支出']
RESULT_HEADER_COL = BASE_HEADERS_MAPPING['核对结果']
BORROW_IDX = BORROW_HEADER_COL - 1
INCOME_IDX = INCOME_HEADER_COL - 1
OUTLAY_IDX = OUTLAY_HEADER_COL - 1
SUMMARY_IDX = FIXED_HEADERS.index('附言')
DATE_IDX = FIXED_HEADERS.index('记账日期')
AMOUNT_IDX = FIXED_HEADERS.index('金额')
OVER_IDX = FIXED_HEADERS.index('余额')
RESULT_IDX = FIXED_HEADERS.index('核对结果')
# '借贷': ('贷', '借'),  # 竖版-无表格-广发银行
# '借贷状态': ('贷', '借'),  # 竖版-特殊-交通银行
# '收/支': ('收入', '支出'),  # 横版-表格-北京银行
BORROW_HEADERS_SET = {'借贷', '借\n贷', '借贷状态', '收/支', '收支标志'}
BORROW_INCOME_SET = {'贷', '收入', '收', '收(Cr)'}
BORROW_OUTLAY_SET = {'借', '支出', '支', '付(Dr)'}
INCOME_HEADERS_SET = {'收入金额', '收入', '存入', '存入金额(贷)', '存入金额(贷)'}
OUTLAY_HEADERS_SET = {'支出金额', '支出', '支取金额(借)', '支取金额(借)'}

# ------------------普通打印-全格线--------------------------------------------------------------------------------------
HEADERS_MAPPING = {}

# 借贷
HEADERS_MAPPING.update(
    {
        '借贷': BORROW_KEY,
        '借\n贷': BORROW_KEY,
        '借贷状态': BORROW_KEY,
        '收支标志': BORROW_KEY,
        '收/支': BORROW_KEY,
    }
)

# 收入
HEADERS_MAPPING.update(
    {
        '收入金额': IMCOME_KEY,
        '收入': IMCOME_KEY,
        '存入': IMCOME_KEY,
        '存入金额(贷)': IMCOME_KEY,
        '存入金额(贷)': IMCOME_KEY,
    }
)

# 支出
HEADERS_MAPPING.update(
    {
        '支出金额': OUTLAY_KEY,
        '支出': OUTLAY_KEY,
        '支取': OUTLAY_KEY,
        '支取金额(借)': OUTLAY_KEY,
        '支取金额(借)': OUTLAY_KEY,
    }
)


# 横版-表格-中国银行(不规则)
HEADERS_MAPPING.update(
    {
        '记账日期': DATE_KEY,
        '金额': AMOUNT_KEY,
        '余额': OVER_KEY,
        # '附言': SUMMARY_KEY,
        '交易名称': SUMMARY_KEY,
    }
)
# 横版-表格-农业银行-中国农业银行个人账户明细
HEADERS_MAPPING.update(
    {
        '交易日期': DATE_KEY,
        # '存入': AMOUNT_KEY,
        '摘要': SUMMARY_KEY,
    }
)
# 横版-表格-北京银行
HEADERS_MAPPING.update(
    {
        '业务摘要': SUMMARY_KEY,
        '发生额': AMOUNT_KEY,
    }
)
# 横版-表格-工商银行 借记卡账户历史明细清单
# 横版-表格-工商银行-机打验证码 借记卡账户历史明细清单
# 横版-表格-工商银行CH-B008802400
# 横版-表格-工商银行 工资明细清单
# 工商银行历史明细(申请单号:20042501303039397888)
HEADERS_MAPPING.update(
    {
        '收入/支出金额': AMOUNT_KEY,
        '工作日期': DATE_KEY,
    }
)

# 横版-表格-建设银行-个人活期账户交易明细
# 竖版-表格-建设银行-个人活期账户交易明细 CH-B005832604
# 竖版-表格-建设银行-工资账单CH-B008786812
# 竖版-表格-建设银行-个人活期账户交易明细 CH-B005832604 (2)
HEADERS_MAPPING.update(
    {
        '交易金额': AMOUNT_KEY,
        '账户余额': OVER_KEY,
    }
)
# 微信
HEADERS_MAPPING.update(
    {
        '交易类型': SUMMARY_KEY,
        '金额(元)': AMOUNT_KEY,
        '金额(元)': AMOUNT_KEY,
    }
)
# 支付宝
HEADERS_MAPPING.update(
    {
        '时间': DATE_KEY,
        '名称/备注': SUMMARY_KEY,
    }
)

# ------------普通打印-部分格线-------------------------------------------------------------------------------------------

# 竖版-无表格-农业银行
# 竖版-无表格-农业银行CH-B008805428
HEADERS_MAPPING.update(
    {
        '摘要/附言': SUMMARY_KEY,
    }
)
# 农业银行-窄页

# 竖版-特殊-农商行
HEADERS_MAPPING.update(
    {
        '交易发生额': AMOUNT_KEY,
    }
)
# 横版-特殊-中信银行-账户交易明细
HEADERS_MAPPING.update(
    {
        '交易摘要': SUMMARY_KEY,
    }
)
# 平安电子账单
HEADERS_MAPPING.update(
    {
        '借贷发生额(借:-贷:+)': AMOUNT_KEY,
        '借贷发生额(借:-贷:+)': AMOUNT_KEY,
    }
)

# ------------普通打印-无格线--------------------------------------------------------------------------------------------

# 竖版-无表格-招商银行(略歪)
# 竖版-无表格-招商银行账户历史交易明细表
HEADERS_MAPPING.update(
    {
        '联机余额': OVER_KEY,
        '联机金额': OVER_KEY,
    }
)
# 竖版-无表格-邮储银行-账户对账单 含有对手方户名 对手方账户
# 竖版-无表格-邮储银行 账户对账单
# 竖版-无表格-邮储银行-电子章 邮储银行 账户对账单
HEADERS_MAPPING.update(
    {
        '交易金额(元)': AMOUNT_KEY,
        '交易金额(元)': AMOUNT_KEY,
        '账户余额(元)': OVER_KEY,
        '账户余额(元)': OVER_KEY,
    }
)
# 横版-无表格-广发银行-账户交易历史  --> 已废弃
# 竖版-无表格-广发银行-账户交易历史  --> 已废弃
HEADERS_MAPPING.update(
    {
        '会计日期': DATE_KEY,
    }
)
# 招行电子账单 TODO 有英文,需测试
HEADERS_MAPPING.update(
    {
        '摘要代码': SUMMARY_KEY,
    }
)
# 横版-无表格-民生银行-中国民生银行个人账户对账单(客户卡号)
# 横版-无表格-民生银行-无标题(客户账户)
# 横版-无表格-民生银行
HEADERS_MAPPING.update(
    {
        '摘要信息': SUMMARY_KEY,
    }
)
# 竖版-无表格-农业银行整数
# 竖版-无表格-农业银行-中国农业银行银行卡交易明细清单

# 竖版-无表格-农业银行-中国农业银行银行卡活期存折交易明细清单.pdf
# 竖版-无表格-农业银行-扩张.pdf
# 竖版-无表格-农业银行-缩进.pdf
HEADERS_MAPPING.update(
    {
        '日期': DATE_KEY,
        '短摘要': SUMMARY_KEY,
        '本次余额': OVER_KEY,
    }
)
# 竖版-无表格-农业银行-无标题(对手帐号)
HEADERS_MAPPING.update(
    {
        '交易后余额': OVER_KEY,
    }
)
# 竖版-无表格-农商行(非常规)
HEADERS_MAPPING.update(
    {
        '交易说明': SUMMARY_KEY,
    }
)
# 竖版-无表格-工商银行 抬头三行 活期历史明细清单


# -----------针式打印-全格线--------------------------------------------------------------------------------------------
# 竖版-表格-建设银行-中国建设银行活期账户交易明细
# 竖版-表格-建设银行-中国建设银行活期账户明细清单
# 竖版-表格-建设银行-对私活期账户明细- (1).pdf
HEADERS_MAPPING.update(
    {
        '帐户余额': OVER_KEY,
    }
)
# 竖版-特殊-交通银行 零售客户交易清单 5000以上交易记录
HEADERS_MAPPING.update(
    {
        '交易日期 记账日期': DATE_KEY,
    }
)

# ----------针式打印-部分格线------------------------------------------------------------------------------------------
# 竖版-特殊-邮储银行-一本通绿卡通交易明细(客户)
# 竖版-特殊-邮储银行-账户交易明细(客户)

# --------------------------------------------------------------------------------------------------------------------

# ('记账日期', '记账时间', '金额', '余额', '交易名称', '附言', '对方账户名', '对方卡号/账号', '对方开户行', '核对结果', '借贷', '收入', '支出')
# CLASSIFY_LIST = [
#     # --------------普通打印:全格线---------------------------------
#     # 中国银行:记账日期 记账时间 币别 金额 余额 交易名称 渠道 网点名称 附言 对方账户名 对方卡号/账号 对方开户行
#     ('中国银行', (1, 2, 4, 5, 6, 6, 10, 11, 12, None, None, None, None)),        # 横版-表格-中国银行(不规则)
#
#     # 农业银行:交易日期 交易网点 存入 支出 余额 对方账号 对方名称 摘要 渠道 附言
#     ('农业银行-10', (1, None, None, 5, None, 8, 7, 6, None, None, None, 3, 4)),  # 横版-表格-农业银行-中国农业银行个人账户明细
#
#     # 农业银行:序号 日期 摘要 交易金额 余额 对方账号 对方名称 交易地点 渠道 附言
#     ('农业银行-10-1', (2, None, 4, 5, None, 3, 7, 6, None, None, None, None, None)),
#
#     # 农业银行:交易日期 摘要 交易金额 余额 交易渠道 交易网点 对方账号 对方名称 附言
#     ('农业银行-9', (1, None, 3, 4, None, 2, 8, 7, None, None, None, None, None)),
#
#     # 北京银行:交易日期 业务摘要 收/支 发生额 余额 对方户名 对方账号 交易渠道
#     ('北京银行', (1, None, 4, 5, None, 2, 6, 7, None, None, 3, None, None)),  # 横版-表格-北京银行
#
#     # 工商银行:交易日期 账号 储种 序号 币种 钞汇 摘要 地区 收入/支出金额 余额 渠道
#     ('工商银行', (1, None, 9, 10, None, 7, None, None, None, None, None, None, None)),
#
#     # 工商银行:交易日期 账号 储种 序号 币种 钞汇 摘要 地区 收入/支出金额 余额 对方户名 对方账号 渠道
#     ('工商银行-电子账单', (1, None, 9, 10, None, 7, 11, 12, None, None, None, None, None)),
#
#     # 建设银行:空  摘要 交易日期 交易金额 账户余额 商户/网点号及其名称 对方账号与户名                             --> 竖版-表格-建设银行
#     #         序号 摘要 币别     钞汇   交易日期     交易金额        账户余额     交易地点附言   对方账号与户名   --> 横版-表格-建设银行
#     ('建设银行-竖版', (3, None, 4, 5, None, 2, None, 7, None, None, None, None, None)),
#     ('建设银行-横版', (5, None, 6, 7, None, 2, None, 9, None, None, None, None, None)),
#
#     # 微信:交易单号 交易时间 交易类型 收/支/其他 交易方式 金额(元) 交易对方 商户单号
#     ('微信', (2, None, 6, None, None, 3, 7, None, None, None, None, None, None)),
#
#     # 支付宝:流水号 时间 名称/备注 收入 支出 账户余额 资金渠道
#     ('支付宝', (2, None, None, 6, None, 3, None, None, None, None, None, 4, 5)),
#
#     # -----------------普通打印:部分格线--------------------------------
#
#     # 农业银行:交易日期 摘要/附言 交易金额 余额 交易地点/对方账号和户名
#     ('农业银行-5', (1, None, 3, 4, None, 2, None, 5, None, None, None, None, None)),
#
#     # 农业银行:日期 地点 摘要 存入 支出 余额 对方账号 对方户名
#     ('农业银行-8', (1, None, None, 6, None, 3, 8, 7, None, None, None, 4, 5)),

#     # 农业银行:日期 摘要 交易金额 余额 地点 交易对手账号 对方户名
#     ('农业银行-窄页', (1, None, 3, 4, None, 2, 7, 6, None, None, None, None, None)),
#
#     # 农商行:交易日期 交易发生额 账户余额 对方账号 对方户名 摘要 备注
#     ('农商行', (1, None, 2, 3, None, 6, 5, 4, None, None, None, None, None)),
#
#     # 中信银行:交易日期 交易摘要 收入金额 支出金额 账户余额 对方户名 对方账号 对方银行 交易流水号
#     ('中信银行', (1, None, None, 5, None, 2, 6, 7, 8, None, None, 3, 4)),
#
#     # 平安电子账单:序号 交易日期 交易网点 摘要 借贷发生额(借:-贷:+) 账户余额
#     ('平安电子账单', (2, None, 5, 6, None, 4, None, None, None, None, None, None, None)),

#     # 建设银行:序号 摘要 币别 钞汇 交易日期 交易金额 账户余额 交易地点附言 对方账号与户名
#     ('建设银行-电子账单', (5, None, 6, 7, None, 2, None, 9, None, None, None, None, None)),
#
#     # -----------------普通打印:无格线-------------------------------------
#
#     # 招商银行:记账日期 货币 交易金额 联机余额 冲补账 交易摘要
#     ('招商银行', (1, None, 3, 4, None, 6, None, None, None, None, None, None, None)),
#
#     # 邮储银行:交易日期、交易类型 交易币种     交易金额(元) 账户余额(元) [对手方户名 对手方账户 收支类型]  --> 竖版-无表格-邮储银行-账户对账单 含有对手方户名 对手方账户
#     #         交易日期、交易类型 交易金额(元) 账户余额(元) 操作柜员                              --> 竖版-无表格-邮储银行 账户对账单
#     ('邮储银行-8', (1, None, 4, 5, None, 2, 6, 7, None, None, None, None, None)),
#     ('邮储银行-5', (1, None, 3, 4, None, 2, None, None, None, None, None, None, None)),
#
#     # 工商银行电子版:交易日期 账号 储种 序号 币种 妙汇 摘要 地区 收入/支出金额 余额 [对方户名 对方账号] 渠道
#     ('工商银行电子版', (1, None, 9, 10, None, 7, None, None, None, None, None, None, None)),
#
#     # 招商银行电子版:记账日期 货币 交易金额 联机余额 交易摘要 对手信息
#     ('招商银行电子版', (1, None, 3, 4, None, 5, 6, None, None, None, None, None, None)),
#
#     # 民生银行:凭证类型 凭证号码 摘要信息 交易时间 交易金额 账户余额 现转标志 交易渠道 交易机构 对方户名 对方行名  --> 横版-无表格-民生银行-中国民生银行个人账户对账单(客户卡号)
#     #         凭证类型 凭证号码 交易时间   摘要  交易金额 账户余额 现转标志 交易渠道 交易机构 对方户名 对方行名     --> 横版-无表格-民生银行
#     ('民生银行', (None, None, 5, 6, None, None, 7, None, 8, None, None, None, None)),
#
#     # 农业银行:交易日期 摘要/附言 交易金额 对方账号和户名
#     ('农业银行-整数', (1, None, 3, None, None, 2, None, 4, None, None, None, None, None)),
#
#     # 农业银行:交易日期 摘要/附言 交易金额 余额 交易地点/对方账号和户名
#     ('农业银行', (1, None, 3, 4, None, 2, None, 5, None, None, None, None, None)),
#
#     # 农业银行:日期、时间、短摘要、交易金额、本次余额、交易网点、渠道、附言
#     # 农业银行:日期、时间、日志号、短摘要、交易金额、本次余额、交易网点、渠道、附言
#     ('农业银行', (1, 2, 4, 5, None, 3, None, None, None, None, None, None, None)),
#     ('农业银行-扩张缩进', (1, 2, 5, 6, None, 4, None, None, None, None, None, None, None)),
#
#     # 交通银行:交易日期 记账日期、交易地点、交易类型、借贷状态、交易金额、余额
#     ('交通银行', (1, None, 6, 7, None, 4, None, None, None, None, 5, None, None)),
#
#
#     # ================针式打印:有格线===================
#
#     # 建设银行:  摘要、交易日期、交易金额、账户余额、商户/网点号及其名称、对方账号、对方户名                    --> 竖版-表格-建设银行-中国建设银行活期账户明细清单
#     #         交易日期、摘要、    币种、   钞汇、      交易金额、     帐户余额、对方账号、 对方帐户名称       --> 竖版-表格-建设银行-对私活期账户明细- (1)
#     ('建设银行', (None, None, None, None, None, None, None, None, None, None, None, None, None)),
#
#
#     # ================针式打印:无格线===================
#
#     # 邮储银行:序号、交易日期、交易渠道、摘要、交易金额、账户余额、对方账号/卡号/汇票号、原子账号、交易机构名称
#     ('邮储银行', (2, None, 5, 6, None, 4, None, 7, None, None, None, None, None)),
# ]

OTHER_TUPLE = (None, None, None, None, None, None, None, None, None, None, None, None, None)

#     "4":"普通打印-全表格-中国银行",
#     "5":"普通打印-全表格-农业银行-10列",
#     "6":"普通打印-全表格-农业银行-10列-1",
#     "7":"普通打印-全表格-农业银行-9列",
#     "8":"普通打印-全表格-北京银行",
#     "9":"普通打印-全表格-工商银行",
#     "10":"普通打印-全表格-工商银行-电子账单",
#     "11":"普通打印-全表格-建设银行",
#     "12":"普通打印-全表格-微信账单",
#     "13":"普通打印-全表格-支付宝账单",

#     "14":"普通打印-无格线-交通银行",
#     "15":"普通打印-无格线-储蓄银行-5列",
#     "16":"普通打印-无格线-储蓄银行-8列",
#     "17":"普通打印-无格线-农业银行-扩张缩进",
#     "18":"普通打印-无格线-农业银行-整数",
#     "19":"普通打印-无格线-招商银行",
#     "20":"普通打印-无格线-招商银行-电子账单",
#     "21":"普通打印-无格线-民生银行",

#     "22":"普通打印-部分格线-横版-中信银行",
#     "23":"普通打印-部分格线-竖版-农业银行-5列",
#     "24":"普通打印-部分格线-竖版-农业银行-8列",
#     "25":"普通打印-部分格线-竖版-农业银行-窄页",
#     "26":"普通打印-部分格线-竖版-平安电子账单",
#     "27":"普通打印-部分格线-竖版-建设银行-电子账单",

#     "34":"针式打印-全格线-建设银行",
#     "35":"针式打印-部分格线-竖版-邮储银行",
#     "36":"针式打印-部分格线-竖版-邮储银行-绿卡",

#     "50":"普通打印-无格线-农业银行-整数-特殊",

CLASSIFY_LIST = [
    ('其他', OTHER_TUPLE),
    ('其他', OTHER_TUPLE),
    ('其他', OTHER_TUPLE),
    ('其他', OTHER_TUPLE),
    ('普通打印-全表格-中国银行', (1, 2, 4, 5, 6, 6, 10, 11, 12, None, None, None, None)),
    ('普通打印-全表格-农业银行-10列', (1, None, None, 5, None, 8, 7, 6, None, None, None, 3, 4)),
    ('普通打印-全表格-农业银行-10列-1', (2, None, 4, 5, None, 3, 7, 6, None, None, None, None, None)),
    ('普通打印-全表格-农业银行-9列', (1, None, 3, 4, None, 2, 8, 7, None, None, None, None, None)),
    ('普通打印-全表格-北京银行', (1, None, 4, 5, None, 2, 6, 7, None, None, 3, None, None)),
    ('普通打印-全表格-工商银行', (1, None, 9, 10, None, 7, None, None, None, None, None, None, None)),
    ('普通打印-全表格-工商银行-电子账单', (1, None, 9, 10, None, 7, 11, 12, None, None, None, None, None)),
    ('普通打印-全表格-建设银行', (3, None, 4, 5, None, 2, None, 7, None, None, None, None, None)),
    ('普通打印-全表格-微信账单', (2, None, 6, None, None, 3, 7, None, None, None, None, None, None)),
    ('普通打印-全表格-支付宝账单', (2, None, None, 6, None, 3, None, None, None, None, None, 4, 5)),

    ('普通打印-无格线-交通银行', (1, None, 6, 7, None, 4, None, None, None, None, 5, None, None)),
    ('普通打印-无格线-储蓄银行-5列', (1, None, 3, 4, None, 2, None, None, None, None, None, None, None)),
    ('普通打印-无格线-储蓄银行-8列', (1, None, 4, 5, None, 2, 6, 7, None, None, None, None, None)),
    ('普通打印-无格线-农业银行-扩张缩进', (1, 2, 5, 6, None, 4, None, None, None, None, None, None, None)),
    ('普通打印-无格线-农业银行-整数', (1, None, 3, None, None, 2, None, 4, None, None, None, None, None)),
    ('普通打印-无格线-招商银行', (1, None, 3, 4, None, 6, None, None, None, None, None, None, None)),
    ('普通打印-无格线-招商银行-电子账单', (1, None, 3, 4, None, 5, 6, None, None, None, None, None, None)),
    ('普通打印-无格线-民生银行', (None, None, 5, 6, None, None, 7, None, 8, None, None, None, None)),

    ('普通打印-部分格线-横版-中信银行', (1, None, None, 5, None, 2, 6, 7, 8, None, None, 3, 4)),
    ('普通打印-部分格线-竖版-农业银行-5列', (1, None, 3, 4, None, 2, None, 5, None, None, None, None, None)),
    ('普通打印-部分格线-竖版-农业银行-8列', (1, None, None, 6, None, 3, 8, 7, None, None, None, 4, 5)),
    ('普通打印-部分格线-竖版-农业银行-窄页', (1, None, 3, 4, None, 2, 7, 6, None, None, None, None, None)),
    ('普通打印-部分格线-竖版-平安电子账单', (2, None, 5, 6, None, 4, None, None, None, None, None, None, None)),
    ('普通打印-部分格线-竖版-建设银行-电子账单', (5, None, 6, 7, None, 2, None, 9, None, None, None, None, None)),
    ('其他', OTHER_TUPLE),
    ('其他', OTHER_TUPLE),
    ('其他', OTHER_TUPLE),
    ('其他', OTHER_TUPLE),
    ('其他', OTHER_TUPLE),
    ('其他', OTHER_TUPLE),
    ('针式打印-全格线-建设银行', OTHER_TUPLE),
    ('针式打印-部分格线-竖版-邮储银行', (2, None, 5, 6, None, 4, None, 7, None, None, None, None, None)),
    ('针式打印-部分格线-竖版-邮储银行-绿卡', (2, None, 5, 6, None, 4, None, 7, None, None, None, None, None)),
    ('其他', OTHER_TUPLE),
    ('其他', OTHER_TUPLE),
    ('其他', OTHER_TUPLE),
    ('其他', OTHER_TUPLE),
    ('其他', OTHER_TUPLE),
    ('其他', OTHER_TUPLE),
    ('其他', OTHER_TUPLE),
    ('其他', OTHER_TUPLE),
    ('其他', OTHER_TUPLE),
    ('其他', OTHER_TUPLE),
    ('其他', OTHER_TUPLE),
    ('其他', OTHER_TUPLE),
    ('其他', OTHER_TUPLE),

    ('普通打印-无格线-农业银行-整数-特殊', (1, None, 3, 4, None, 2, None, 5, None, None, None, None, None)),
]

CLASSIFY_HEADER_LIST = [
    OTHER_TUPLE,
    OTHER_TUPLE,
    OTHER_TUPLE,
    OTHER_TUPLE,
    ('记账日期', '记账时间', '币别', '金额', '余额', '交易名称', '渠道', '网点名称', '附言', '对方账户名', '对方卡号/账号', '对方开户行'),
    ('交易日期', '交易网点', '存入', '支出', '余额', '对方账号', '对方名称', '摘要', '渠道', '附言'),
    ('序号', '日期', '摘要', '交易金额', '余额', '对方账号', '对方名称', '交易地点', '渠道', '附言'),
    ('交易日期', '摘要', '交易金额', '余额', '交易渠道', '交易网点', '对方账号', '对方名称', '附言'),
    ('交易日期', '业务摘要', '收/支', '发生额', '余额', '对方户名', '对方账号', '交易渠道'),
    ('交易日期', '账号', '储种', '序号', '币种', '钞汇', '摘要', '地区', '收入/支出金额', '余额', '渠道'),
    ('交易日期', '账号', '储种', '序号', '币种', '钞汇', '摘要', '地区', '收入/支出金额', '余额', '对方户名', '对方账号', '渠道'),
    (None, '摘要', '交易日期', '交易金额', '账户余额', '商户/网点号及其名称', '对方账号与户名'),
    ('交易单号', '交易时间', '交易类型', '收/支/其他', '交易方式', '金额(元)', '交易对方', '商户单号'),
    ('流水号', '时间', '名称/备注', '收入', '支出', '账户余额', '资金渠道'),

    ('交易日期', '记账日期', '交易地点', '交易类型', '借贷状态', '交易金额', '余额'),
    ('交易日期', '交易类型', '交易金额(元)', '账户余额(元)', '操作柜员'),
    ('交易日期', '交易类型', '交易币种', '交易金额(元)', '账户余额(元)', '对手方户名', '对手方账户', '收支类型'),
    ('日期', '时间', '日志号', '短摘要', '交易金额', '本次余额', '交易网点', '渠道', '附言'),
    ('交易日期', '摘要/附言', '交易金额', '对方账号和户名'),
    ('记账日期', '货币', '交易金额', '联机余额', '冲补账', '交易摘要'),
    ('记账日期', '货币', '交易金额', '联机余额', '交易摘要', '对手信息'),
    ('凭证类型', '凭证号码', '交易时间', '摘要', '交易金额', '账户余额', '现转标志', '交易渠道', '交易机构', '对方户名', '对方行名'),

    ('交易日期', '交易摘要', '收入金额', '支出金额', '账户余额', '对方户名', '对方账号', '对方银行', '交易流水号'),
    ('交易日期', '摘要/附言', '交易金额', '余额', '交易地点/对方账号和户名'),
    ('日期', '地点', '摘要', '存入', '支出', '余额', '对方账号', '对方户名'),
    ('日期', '摘要', '交易金额', '余额', '地点', '交易对手账号', '对方户名'),
    ('序号', '交易日期', '交易网点', '摘要', '借贷发生额(借:-贷:+)', '账户余额'),
    ('序号', '摘要', '币别', '钞汇', '交易日期', '交易金额', '账户余额', '交易地点附言', '对方账号与户名'),
    OTHER_TUPLE,
    OTHER_TUPLE,
    OTHER_TUPLE,
    OTHER_TUPLE,
    OTHER_TUPLE,
    OTHER_TUPLE,
    OTHER_TUPLE,
    ('序号', '交易日期', '交易渠道', '摘要', '交易金额', '账户余额', '对方账号/卡号/汇票号', '原子账号', '交易机构名称'),
    ('序号', '交易日期', '交易渠道', '摘要', '交易金额', '账户余额', '对方账号/卡号/汇票号', '原子账号', '交易机构名称'),
    OTHER_TUPLE,
    OTHER_TUPLE,
    OTHER_TUPLE,
    OTHER_TUPLE,
    OTHER_TUPLE,
    OTHER_TUPLE,
    OTHER_TUPLE,
    OTHER_TUPLE,
    OTHER_TUPLE,
    OTHER_TUPLE,
    OTHER_TUPLE,
    OTHER_TUPLE,
    OTHER_TUPLE,

    ('交易日期', '摘要/附言', '交易金额', '账户余额', '对方账号和户名'),
]

# ----------license相关------------------------------------------------------------------------------------------------

#     "0":"AVT Invioce",
#     "1":"二手车发票",
#     "2":"其他",
#     "3":"护照",
#     "28":"机动车登记证",
#     "29":"机动车销售统一发票",
#     "30":"港澳通行证",
#     "31":"营业执照",
#     "32":"行驶证",
#     "33":"身份证",
#     "37":"银行卡"

# 其他
OTHER_CLASSIFY = 2

# 身份证
IC_CN_NAME = '身份证'
IC_CLASSIFY = 33
IC_TURE_OR_FALSE = '真伪'
IC_FIELD_ORDER_0 = ((IC_TURE_OR_FALSE, '身份证'),
                    ('姓名', '姓名'),
                    ('公民身份号码', '公民身份号码'),
                    ('出生年月', '出生年月'),
                    ('住址', '住址'),
                    ('性别', '性别'),
                    ('民族', '民族'),)
IC_FIELD_ORDER_1 = ((IC_TURE_OR_FALSE, '身份证'), ('有效期限', '有效期限'), ('签发机关', '签发机关'),)
# 居住证
RP_CN_NAME = '居住证'
RP_CLASSIFY = 10087
RP_FIELD_ORDER_0 = (('姓名', '姓名'),
                    ('公民身份号码', '公民身份号码'),
                    ('出生年月', '出生年月'),
                    ('住址', '住址'),
                    ('性别', '性别'),)
RP_FIELD_ORDER_1 = (('有效期限', '有效期限'), ('签发机关', '签发机关'), ('通行证号码', '通行证号码'))
# 增值税普票
VAT_CN_NAME = 'VAT普票'
VAT_CLASSIFY = 0
VAT_FIELD_ORDER = (('发票代码', '发票代码'),
                   ('发票代码_开具', '发票代码(开具)'),
                   ('发票号码', '发票号码'),
                   ('发票号码_开具', '发票号码(开具)'),
                   ('开票日期', '开票日期'),
                   ('校验码', '校验码'),
                   ('货物或应税劳务、服务名称', '货物或应税劳务、服务名称'),
                   ('金额合计', '开具金额合计(不含税)'),
                   ('税率', '税率'),
                   ('税额合计', '税额合计'),
                   ('价税合计小写', '价税合计(小写)'),
                   ('价税合计大写', '价税合计(大写)'),
                   ('购方名称', '购买方名称'),
                   ('购方纳税人识别号', '购买方纳税人识别号'),
                   ('购方地址、电话', '购买方地址、电话'),
                   ('购方开户行及账号', '购买方开户行及账号'),
                   ('销方名称', '销售方名称'),
                   ('销方纳税人识别号', '销售方纳税人识别号'),
                   ('销方地址、电话', '销售方地址、电话'),
                   ('销方开户行及账号', '销售方开户行及账号'),
                   ('下盖章', '销售方:(章)'),
                   ('备注', '备注'),)
# 增值税专票
VATS_CN_NAME = 'VAT专票'
VATS_CLASSIFY = 10088
VATS_FIELD_ORDER = (('发票代码', '发票代码'),
                    ('发票代码_开具', '发票代码(开具)'),
                    ('发票号码', '发票号码'),
                    ('发票号码_开具', '发票号码(开具)'),
                    ('开票日期', '开票日期'),
                    ('校验码', '校验码'),
                    ('货物或应税劳务、服务名称', '货物或应税劳务、服务名称'),
                    ('金额合计', '开具金额合计(不含税)'),
                    ('税率', '税率'),
                    ('税额合计', '税额合计'),
                    ('价税合计小写', '价税合计(小写)'),
                    ('价税合计大写', '价税合计(大写)'),
                    ('购方名称', '购买方名称'),
                    ('购方纳税人识别号', '购买方纳税人识别号'),
                    ('购方地址、电话', '购买方地址、电话'),
                    ('购方开户行及账号', '购买方开户行及账号'),
                    ('销方名称', '销售方名称'),
                    ('销方纳税人识别号', '销售方纳税人识别号'),
                    ('销方地址、电话', '销售方地址、电话'),
                    ('销方开户行及账号', '销售方开户行及账号'),
                    ('下盖章', '销售方:(章)'),
                    ('车船税', '车船税'),
                    ('备注', '备注'),)
# 机动车登记证书
MVC_CN_NAME = '机动车登记证书'
MVC_CLASSIFY = 28
MVC_CLASSIFY_SE = 10086
MVC_FIELD_ORDER_1_2 = (('1.机动车所有人/身份证名称/号码', '机动车所有人/身份证明名称/号码'),
                       ('3.登记日期', '登记日期'),
                       ('9.车辆识别代号/车架号', '车辆识别代号/车架号'),
                       ('32.车辆出厂日期', '车辆出厂日期'),
                       ('34.发证日期', '发证日期'),
                       ('30.使用性质', '使用性质'),
                       ('31.车辆获得方式', '车辆获得方式'),
                       ('4.机动车登记编号', '机动车登记编号'),
                       ('空行占位', None),
                       ('5.车辆类型', '车辆类型'),
                       ('6.车辆品牌', '车辆品牌'),
                       ('7.车辆型号', '车辆型号'),
                       ('8.车身颜色', '车身颜色'),
                       ('10.国产/进口', '国产/进口'),
                       ('11.发动机号', '发动机号'),
                       ('12.发动机型号', '发动机型号'),
                       ('15.制造厂名称', '制造厂名称'),
                       ('2.登记机关', '登记机关'),
                       ('编号', '机动车登记证书编号'),)
MVC_FIELD_ORDER_3_4 = (
    ('机动车登记证书编号', '机动车登记证书编号'),

    ('姓名/名称', '姓名/名称'),
    ('身份证名称/号码', '身份证明名称/号码'),
    ('获得方式', '获得方式'),
    ('转入地车辆管理所名称', '转入地车辆管理所名称'),
    ('机动车登记编号', '机动车登记编号'),
    ('转移登记日期', '转移登记日期'),

    ('抵押权人姓名/名称', '抵押权人姓名/名称'),
    ('身份证明名称/号码', '抵押身份证明名称/号码'),
    ('抵押登记日期', '抵押登记日期'),

    ('解除抵押日期', '解除抵押日期'),
)
MVC_SE_FIELD_ORDER_1_2 = (('9.车辆识别代号/车架号', '车辆识别代号/车架号'),
                          ('1.机动车所有人/身份证名称/号码', '机动车所有人/身份证明名称/号码'),
                          ('空行占位', None),
                          ('3.登记日期', '登记日期'),
                          ('32.车辆出厂日期', '车辆出厂日期'),
                          ('34.发证日期', '发证日期'),
                          ('30.使用性质', '使用性质'),
                          ('31.车辆获得方式', '车辆获得方式'),
                          ('5.车辆类型', '车辆类型'),
                          ('6.车辆品牌', '车辆品牌'),
                          ('7.车辆型号', '车辆型号'),
                          ('8.车身颜色', '车身颜色'),
                          ('10.国产/进口', '国产/进口'),
                          ('11.发动机号', '发动机号'),
                          ('12.发动机型号', '发动机型号'),
                          ('13.燃料种类', '燃料种类'),
                          ('14.排量/功率', '排量/功率'),
                          ('15.制造厂名称', '制造厂名称'),
                          ('16.转向形式', '转向形式'),
                          ('17.轮距', '轮距'),
                          ('18.轮胎数', '轮胎数'),
                          ('19.轮胎规格', '轮胎规格'),
                          ('20.钢板弹簧片数', '钢板弹簧片数'),
                          ('21.轴距', '轴距'),
                          ('22.轴数', '轴数'),
                          ('23.外廓尺寸', '外廓尺寸'),
                          ('24.货厢内部尺寸', '货厢内部尺寸'),
                          ('25.总质量', '总质量'),
                          ('26.核定载质量', '核定载质量'),
                          ('27.核定载客', '核定载客'),
                          ('28.准牵引总质量', '准牵引总质量'),
                          ('29.驾驶室载客', '驾驶室载客'),
                          ('2.登记机关', '登记机关'),
                          ('4.机动车登记编号', '机动车登记编号'),
                          ('编号', '机动车登记证书编号'),)
MVC_SE_FIELD_ORDER_3_4 = (
    ('机动车登记证书编号', '机动车登记证书编号'),

    ('姓名/名称', '姓名/名称'),
    ('身份证名称/号码', '身份证明名称/号码'),
    ('获得方式', '获得方式'),
    ('转入地车辆管理所名称', '转入地车辆管理所名称'),
    ('机动车登记编号', '机动车登记编号'),
    ('转移登记日期', '转移登记日期'),

    ('抵押权人姓名/名称', '抵押权人姓名/名称'),
    ('身份证明名称/号码', '抵押身份证明名称/号码'),
    ('抵押登记日期', '抵押登记日期'),

    ('解除抵押日期', '解除抵押日期'),
)
# 机动车销售统一发票
MVI_CN_NAME = '机动车销售统一发票'
MVI_CLASSIFY = 29
MVI_FIELD_ORDER = (('发票代码', '发票代码'),
                   ('发票号码', '发票号码'),
                   ('开票日期', '开票日期'),
                   ('不含税价(逻辑计算)', '不含税价(逻辑计算)'),
                   ('不含税价', '不含税价'),
                   ('发票类型', '发票联'),
                   ('购方名称', '购买方名称'),
                   ('购买方身份证号或组织机构代码', '购买方证件号码'),
                   ('购方纳税人识别号', '纳税人识别号'),
                   ('车辆识别代码', '车架号'),
                   ('价税合计小写', '价税合计小写'),
                   ('销方名称', '销货单位名称'),
                   ('增值税税额', '增值税税额'),
                   ('增值税税率', '增值税税率'),
                   ('销售单位章', '发票章有无'),
                   ('价税合计大写', '价税合计大写'),
                   ('', None),
                   ('发动机号码', '发动机号'),
                   ('车辆类型', '车辆类型'),
                   ('厂牌型号', '厂牌型号'),
                   ('产地', '产地'),
                   ('合格证号', '合格证号'),
                   ('进口证明书号', '进口证明书号'),
                   ('商检单号', '商检单号'),
                   ('电话', '电话'),
                   ('销方纳税人识别号', '销货方纳税人识别号'),
                   ('账号', '账号'),
                   ('地址', '地址'),
                   ('开户银行', '开户银行'),
                   ('主管税务机关及代码', '主管税务机关及代码'),
                   ('吨位', '吨位'),
                   ('限乘人数', '限乘人数'),)
IC_PID = VAT_PID = VATS_PID = MVC_PID = MVI_PID = RP_PID = DDA_PID = HMH_PID = JYPZ_PID = INSURANCE_PID = None

# 营业执照
BL_CN_NAME = '营业执照'
BL_CLASSIFY = 31
BL_PID = 41
BL_FIELD_ORDER = (('注册号', '统一社会信用代码'),
                  ('企业名称', '名称'),
                  ('企业类型', '类型'),
                  ('经营者姓名', '法定代表人'),
                  ('成立日期', '成立日期'),
                  ('营业期限', '营业期限'),
                  ('注册资本', '注册资本'),
                  ('地址', '住所'),
                  ('经营范围', '经营范围'),)
# 二手车发票
UCI_CN_NAME = '二手车发票'
UCI_CLASSIFY = 1
UCI_PID = 60
UCI_FIELD_ORDER = (('发票代码', '发票代码'),
                   ('发票号码', '发票号码'),
                   ('开票日期', '开票日期'),
                   ('价税合计小写', '车价合计小写'),
                   ('发票类型', '发票联'),
                   ('购方名称', '买方单位/个人'),
                   ('购方纳税人识别号', '买方单位代码/身份证号码'),
                   ('车架号', '车架号'),
                   ('价税合计大写', '车价合计大写'),
                   ('二手车市场', '二手车市场'),
                   ('发票章', '发票章有无'),
                   ('空行占位', None),
                   ('车牌照号', '车牌照号'),
                   ('登记证号', '登记证号'),
                   ('购方地址', '买方单位/住址'),
                   ('车辆类型', '车辆类型'),
                   ('厂牌型号', '厂牌型号'),
                   ('车管所名称', '转入地车辆管理所名称'),
                   ('销方名称', '卖方单位/个人'),
                   ('销方纳税人识别号', '卖方单位代码/身份证号码'),
                   ('销方地址', '卖方单位/个人住址'),)
# 港澳台通行证
EEP_CN_NAME = '港澳台通行证'
EEP_CLASSIFY = 30
EEP_PID = 1018
EEP_FIELD_ORDER = (('中文名', '姓名'),  # 英文名
                   ('证件号码', '证件号码'),
                   ('签发次数', '换证次数(签发次数)'),
                   ('有效期限', '有效期限'),
                   ('出生日期', '出生日期'),
                   ('性别', '性别'),
                   ('签发机关', '签发机关'),
                   ('签发地点', '签发地点'),)
# 行驶证
DL_CN_NAME = '行驶证'
DL_CLASSIFY = 32
DL_PID = 5
DL_FIELD_ORDER_0 = (('号牌号码', '1 号牌号码'),
                    ('所有人', '3 所有人'),
                    ('使用性质', '5 使用性质'),
                    ('车辆识别代码', '7 车辆识别代号'),
                    ('注册日期', '9 注册日期'),
                    ('发证日期', '10 发证日期'),
                    ('车辆类型', '2 车辆类型'),
                    ('地址', '4 住址'),
                    ('品牌型号', '6 品牌型号'),
                    ('发动机号', '8 发动机号码'),)
DL_FIELD_ORDER_1 = (('号牌号码', '1 号牌号码'),
                    ('档案编号', '11 档案编号'),
                    ('核定载人数', '12 核定载人数'),
                    ('总质量', '13 总质量'),
                    ('整备质量', '14 整备质量'),
                    ('核定载质量', '15 核对载质量'),
                    ('外廓尺寸', '16 外廓尺寸'),
                    ('准牵引总质量', '17 准牵引总质量'),)
# 护照
PP_CN_NAME = '护照'
PP_CLASSIFY = 3
PP_PID = 8
PP_FIELD_ORDER = (('类型', '类型/Type'),
                  ('英文姓名', '姓名/Name'),
                  ('护照号码', '护照号码/Passport No'),
                  ('有效期至', '有效期至/Date of expiry'),
                  ('签发日期', '签发日期/Date of issue'),
                  ('国家码', '国家码/Country Code'),
                  ('性别', '性别/Sex'),
                  ('国籍', '国籍/Nationality'),
                  ('出生日期', '出生日期/Date of birth'),
                  ('出生地点', '出生地点/Place of birth'),
                  ('签发地点', '签发地点/Place of issue'),)
# 银行卡
BC_CN_NAME = '银行卡'
BC_CLASSIFY = 37
BC_PID = 4
# BC_FIELD = (('CardNum', '银行卡号'),
#             ('BankName', '发卡行名称'),
#             ('CardName', '银行卡名称'),
#             ('BankCode', '发卡行代号'),
#             ('CardType', '银行卡类型'),
#             ('Date', '日期'))
BC_FIELD_ORDER = (('BankName', '发卡行名称'),
                  ('CardNum', '银行卡号'),
                  ('CardType', '银行卡类型'),
                  ('Name', '持卡人姓名'),)

# DDA
DDA_CN_NAME = 'DDA'
DDA_CLASSIFY = 38

DDA_IC_NAME = 'customer_name'
DDA_IC_ID = 'customer_id'
DDA_BC_NAME = 'account_name'
DDA_BC_ID = 'account_id'

DDA_FIELD_ORDER = (("check_Num", "缴费编号"),
                   (DDA_IC_NAME, "客户"),
                   (DDA_IC_ID, "身份证"),
                   (DDA_BC_NAME, "账户"),
                   (DDA_BC_ID, "账号"),
                   ("check_Num", "签署编号"),
                   ("signature", "客户签名"),
                   ("signature_date", "时间"),
                   ("to_company", "公司名称1"),
                   ("to_bank", "公司名称2"),
                   ("collection_company", "收款企业名称"),)

# 抵押登记豁免函
HMH_CN_NAME = '抵押登记豁免函'
HMH_CLASSIFY = 40
HMH_FIELD_ORDER = (("借款/承租人姓名", "借款/承租人姓名"),
                   ("证件号码", "证件号码"),
                   ("合同编号", "合同编号"),
                   ("渠道", "渠道"),
                   ("借款人签字/盖章", "借款人签字/盖章"))

# 二手车交易凭证
JYPZ_CN_NAME = '二手车交易凭证'
JYPZ_CLASSIFY = 39
JYPZ_FIELD_ORDER = (("type", "标题"),
                    ("authorized_dealer", "BMW授权经销商"),
                    ("buyer_name", "购买方名称"),
                    ("buyer_id", "购买方身份证号码/营业执照号码"),
                    ("vin", "车辆识别代号/车架号码"),
                    ("price", "车辆价格"),
                    ("date", "购买方交易日期"),
                    ("date", "出卖方交易日期"),
                    ("date", "经销商交易日期"),
                    ("stamp_signature_buyer", "购买方签字/盖章"),
                    ("stamp_signature_seller", "出卖方签字/盖章"),
                    ("stamp_signature_agent", "经销商签字/盖章"),)

# 合同
CONTRACT_CN_NAME = '合同'
CONTRACT_CLASSIFY = 41

# 保单
INSURANCE_CN_NAME = '保单'
INSURANCE_CLASSIFY = 42
INSURANCE_FIELD_ORDER = (("被保险人姓名", "被保险人姓名"),
                         ("被保险人证件号码", "被保险人证件号码"),
                         ("车架号", "车架号"),
                         ("机动车损失保险金额", "机动车损失保险金额"),
                         ("机动车第三者责任保险金额", "机动车第三者责任保险金额"),
                         ("机动车损失保险绝对免赔率/绝对免赔额", "机动车损失保险绝对免赔率/绝对免赔额"),
                         ("保险费合计", "保险费合计"),
                         ("保险起始日期", "保险起始日期"),
                         ("保险截止日期", "保险截止日期"),
                         ("保单章", "保单章"),
                         ("特别约定第一受益人", "特别约定第一受益人"))

SUCCESS_CODE_SET = {'0', 0}

FIELD_ORDER_MAP = {
    IC_CLASSIFY: ('有效期限', IC_FIELD_ORDER_1, IC_FIELD_ORDER_0),
    RP_CLASSIFY: ('有效期限', RP_FIELD_ORDER_1, RP_FIELD_ORDER_0),
    DL_CLASSIFY: ('档案编号', DL_FIELD_ORDER_1, DL_FIELD_ORDER_0),
    MVC_CLASSIFY: ('机动车登记证书编号', MVC_FIELD_ORDER_3_4, MVC_FIELD_ORDER_1_2),
    MVC_CLASSIFY_SE: ('机动车登记证书编号', MVC_SE_FIELD_ORDER_3_4, MVC_SE_FIELD_ORDER_1_2)
}

MODEL_FIELD_BS = 'bs_count'
MODEL_FIELD_MVI = 'mvi_count'
MODEL_FIELD_IC = 'ic_count'
MODEL_FIELD_RP = 'rp_count'
MODEL_FIELD_BC = 'bc_count'
MODEL_FIELD_BL = 'bl_count'
MODEL_FIELD_UCI = 'uci_count'
MODEL_FIELD_EEP = 'eep_count'
MODEL_FIELD_DL = 'dl_count'
MODEL_FIELD_PP = 'pp_count'
MODEL_FIELD_MVC = 'mvc_count'
MODEL_FIELD_VAT = 'vat_count'

LICENSE_ORDER = ((MVI_CLASSIFY, (MVI_PID, MVI_CN_NAME, MVI_FIELD_ORDER, False, False, MODEL_FIELD_MVI)),
                 (IC_CLASSIFY, (IC_PID, IC_CN_NAME, None, True, False, MODEL_FIELD_IC)),
                 (RP_CLASSIFY, (RP_PID, RP_CN_NAME, None, True, False, MODEL_FIELD_RP)),
                 (BC_CLASSIFY, (BC_PID, BC_CN_NAME, BC_FIELD_ORDER, False, False, MODEL_FIELD_BC)),
                 (BL_CLASSIFY, (BL_PID, BL_CN_NAME, BL_FIELD_ORDER, False, False, MODEL_FIELD_BL)),
                 (UCI_CLASSIFY, (UCI_PID, UCI_CN_NAME, UCI_FIELD_ORDER, False, False, MODEL_FIELD_UCI)),
                 (EEP_CLASSIFY, (EEP_PID, EEP_CN_NAME, EEP_FIELD_ORDER, False, False, MODEL_FIELD_EEP)),
                 (DL_CLASSIFY, (DL_PID, DL_CN_NAME, None, True, False, MODEL_FIELD_DL)),
                 (PP_CLASSIFY, (PP_PID, PP_CN_NAME, PP_FIELD_ORDER, False, False, MODEL_FIELD_PP)),
                 (MVC_CLASSIFY, (MVC_PID, MVC_CN_NAME, None, True, True, MODEL_FIELD_MVC)),
                 (VAT_CLASSIFY, (VAT_PID, VAT_CN_NAME, VAT_FIELD_ORDER, False, False, MODEL_FIELD_VAT)),
                 (DDA_CLASSIFY, (DDA_PID, DDA_CN_NAME, DDA_FIELD_ORDER, False, False, None)),
                 (HMH_CLASSIFY, (HMH_PID, HMH_CN_NAME, HMH_FIELD_ORDER, False, False, None)),
                 (JYPZ_CLASSIFY, (JYPZ_PID, JYPZ_CN_NAME, JYPZ_FIELD_ORDER, False, False, None)),
                 (INSURANCE_CLASSIFY, (INSURANCE_PID, INSURANCE_CN_NAME, INSURANCE_FIELD_ORDER, False, False, None)),
                 )

FOLDER_LICENSE_ORDER = ((MVI_CLASSIFY, (MVI_PID, MVI_CN_NAME, MVI_FIELD_ORDER, False, False, MODEL_FIELD_MVI)),
                        (IC_CLASSIFY, (IC_PID, IC_CN_NAME, None, True, False, MODEL_FIELD_IC)),
                        (MVC_CLASSIFY, (MVC_PID, MVC_CN_NAME, None, True, True, MODEL_FIELD_MVC)),
                        (VAT_CLASSIFY, (VAT_PID, VAT_CN_NAME, VAT_FIELD_ORDER, False, False, MODEL_FIELD_VAT)),
                        (VATS_CLASSIFY, (VATS_PID, VATS_CN_NAME, VATS_FIELD_ORDER, False, False, MODEL_FIELD_VAT)))

LICENSE_CLASSIFY_MAPPING = dict(LICENSE_ORDER)

OTHER_CLASSIFY_SET = {OTHER_CLASSIFY}
LICENSE_CLASSIFY_SET_1 = {IC_CLASSIFY, VAT_CLASSIFY, MVC_CLASSIFY, MVI_CLASSIFY, UCI_CLASSIFY, DDA_CLASSIFY, HMH_CLASSIFY, JYPZ_CLASSIFY, INSURANCE_CLASSIFY}
LICENSE_CLASSIFY_SET_2 = {BL_CLASSIFY, EEP_CLASSIFY, DL_CLASSIFY, PP_CLASSIFY, BC_CLASSIFY}

NYYH_CLASSIFY = {17, 18}
NYZS_CLASSIFY = 18
SPECIAL_NYZS_CLASSIFY = 50
MS_CLASSIFY = 21
MS_ERROR_COL = (5, 6)
WECHART_CLASSIFY = 12
ALI_WECHART_CLASSIFY = {12, 13}
WECHART_ERROR_COL = (1, 2)
WECHART_HEADERS_MAPPING = copy.deepcopy(HEADERS_MAPPING)
WECHART_HEADERS_MAPPING.update(
    {
        '交易时间': DATE_KEY,
    }
)

PATTERN_LIST = ['联机金额', '交易名称', '收入/支出金额', '收入', '存入', '支出', '支取', '金额', '余额', '发生额', '借贷',
                '借贷状态', '收支标志', '收/支', '收入金额', '存入金额(贷)', '存入金额(贷)', '支出金额', '支取金额(借)',
                '支取金额(借)', '记账日期', '交易日期', '摘要', '业务摘要', '工作日期', '交易金额', '账户余额', '交易类型',
                '金额(元)', '金额(元)', '时间', '名称/备注', '摘要/附言', '交易发生额', '交易摘要', '借贷发生额(借:-贷:+)',
                '借贷发生额(借:-贷:+)', '联机余额', '交易金额(元)', '交易金额(元)', '账户余额(元)', '账户余额(元)', '会计日期',
                '摘要代码', '摘要信息', '日期', '短摘要', '本次余额', '交易后余额', '交易说明', '帐户余额', '交易日期 记账日期']

CN_RE = re.compile(u'[\u4e00-\u9fa5]')

IC_RES_MAPPING = {
    -2: '不是有效证件',
    -1: '无法判断',
    0: '伪造证件',
    1: '真实证件',
}

# ----------------- CA compare ---------------------
ENTITY = ['HIL', 'AFC']
CUSTOMER_TYPE = ['TCCOR', 'TCDAS', 'TCFRE', 'TCIAS', 'TCIND', 'TCSEP', 'TCURE']
VEHICLE_STATUS = ['PCUSD', 'PCNEW']

APPLICANT_TYPE = ['CUSTR', 'COAPP', 'GAUTR1', 'GAUTR2']
ID_TYPE = ['ITARI', 'ITHKM', 'ITPRC', 'ITPSP', 'ITRES', 'ITTID', 'ITUSC', 'ITCCU']
SECOND_ID_TYPE = ['ITARI', 'ITHKM', 'ITPRC', 'ITPSP', 'ITRES', 'ITTID']
SUB_TYPE = ['CSIBM', 'CSOTH', 'CSSME']

# GCAP 请求体
BASE_XML_TEXT = """<?xml version="1.0" encoding="utf-8"?>

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:typ="http://guardean.net/webservices/workflow/vatra_bmwservice/types">
  <soapenv:Header/>
  <soapenv:Body>
    <typ:executeRequest>
      <request>{0}</request>
    </typ:executeRequest>
  </soapenv:Body>
</soapenv:Envelope>"""

CDATA_TEXT = """<![CDATA[<Exec xmlns="http://tempuri.org/"><strXMLParm>&lt;Request&gt;&lt;Framework&gt;&lt;UserName&gt;SFCHINA\qqcout0&lt;/UserName&gt;&lt;GUID&gt;70d0efcb-3bc2-4018-ac4e-681c8f3131b6&lt;/GUID&gt;&lt;DetailedTracingEnabled&gt;False&lt;/DetailedTracingEnabled&gt;&lt;ServiceName&gt;AMSWebService&lt;/ServiceName&gt;&lt;SupportsRedirection&gt;true&lt;/SupportsRedirection&gt;&lt;ServiceType&gt;Service&lt;/ServiceType&gt;&lt;/Framework&gt;&lt;Parms&gt;&lt;InputXML type="string"&gt;&amp;lt;?xml version="1.0" encoding="utf-16"?&amp;gt;&amp;lt;InputXML&amp;gt; &amp;lt;Result&amp;gt; {0} &amp;lt;/Result&amp;gt;&amp;lt;AuthorizationData&amp;gt;&amp;lt;ServiceComponent&amp;gt;OCR&amp;lt;/ServiceComponent&amp;gt;&amp;lt;RoleId/&amp;gt;&amp;lt;CompanyId/&amp;gt;&amp;lt;/AuthorizationData&amp;gt;&amp;lt;/InputXML&amp;gt;&lt;/InputXML&gt;&lt;/Parms&gt;&lt;/Request&gt;</strXMLParm></Exec>]]>"""

IC_OCR_FIELD = 'ic_ocr'
RP_OCR_FIELD = 'rp_ocr'
BL_OCR_FIELD = 'bl_ocr'
EEP_OCR_FIELD = 'eep_ocr'
DL_OCR_FIELD = 'dl_ocr'
PP_OCR_FIELD = 'pp_ocr'
MVC_OCR_FIELD = 'mvc_ocr'
MVI_OCR_FIELD = 'mvi_ocr'
BC_OCR_FIELD = 'bc_ocr'
UCI_OCR_FIELD = 'uci_ocr'
DDA_OCR_FIELD = 'bs_ocr'
HMH_OCR_FIELD = 'hmh_ocr'
JYPZ_OCR_FIELD = 'jypz_ocr'

RESULT_MAPPING = {
    MVI_CLASSIFY: MVI_OCR_FIELD,
    IC_CLASSIFY: IC_OCR_FIELD,
    RP_CLASSIFY: RP_OCR_FIELD,
    BC_CLASSIFY: BC_OCR_FIELD,
    BL_CLASSIFY: BL_OCR_FIELD,
    UCI_CLASSIFY: UCI_OCR_FIELD,
    EEP_CLASSIFY: EEP_OCR_FIELD,
    DL_CLASSIFY: DL_OCR_FIELD,
    PP_CLASSIFY: PP_OCR_FIELD,
    MVC_CLASSIFY: MVC_OCR_FIELD,
    DDA_CLASSIFY: DDA_OCR_FIELD,
    # VAT_CLASSIFY: 'vat_ocr',
    HMH_CLASSIFY: HMH_OCR_FIELD,
    JYPZ_CLASSIFY: JYPZ_OCR_FIELD
}

COMPARE_FIELDS = (MVI_OCR_FIELD,
                  IC_OCR_FIELD,
                  RP_OCR_FIELD,
                  BC_OCR_FIELD,
                  BL_OCR_FIELD,
                  UCI_OCR_FIELD,
                  EEP_OCR_FIELD,
                  DL_OCR_FIELD,
                  PP_OCR_FIELD,
                  MVC_OCR_FIELD,
                  DDA_OCR_FIELD,
                  HMH_OCR_FIELD,
                  JYPZ_OCR_FIELD,
)

# 身份证
ITPRC = [
    ('customerChineseName', '姓名', 'name_compare', {}, 'customerChineseNameResult'),
    ('idNum', '公民身份号码', 'common_compare', {}, 'idNumResult'),
    # 20200410-20250410 OCR识别为长期,向GCAP发送:2099-12-31 00:00:00.0
    ('idExpiryDate', '有效期限', 'date_compare', {'long': True, 'ocr_split': True, 'input_replace': ''}, 'idExpiryDateResult'),
    ('dateOfBirth', '出生年月', 'date_compare', {'input_replace': ''}, 'dateOfBirthResult'),  # 20231023
]

# 护照
ITPSP = [
    ('customerChineseName', '英文姓名', 'name_compare', {'is_passport': True}, 'customerChineseNameResult'),
    ('idNum', '护照号码', 'common_compare', {}, 'idNumResult'),
    ('idExpiryDate', '有效期至', 'date_compare', {'input_replace': ''}, 'idExpiryDateResult'),  # 20250410
    ('dateOfBirth', '出生日期', 'date_compare', {'input_replace': ''}, 'dateOfBirthResult'),  # 20250410
]

# 港澳台通行证
ITHKM_ITTID = [
    ('customerChineseName', '中文名', 'common_compare', {}, 'customerChineseNameResult'),
    ('idNum', '证件号码', 'common_compare', {}, 'idNumResult'),
    ('idExpiryDate', '有效期限', 'date_compare', {'ocr_split': True, 'input_replace': '.'}, 'idExpiryDateResult'),  # 2013.10.24-2023.10.23
    ('dateOfBirth', '出生日期', 'date_compare', {'input_replace': '.'}, 'dateOfBirthResult'),  # 2023.10.23
]

# 居住证
ITRES = [
    ('customerChineseName', '姓名', 'common_compare', {}, 'customerChineseNameResult'),
    ('idNum', '公民身份号码', 'common_compare', {}, 'idNumResult'),
    ('idExpiryDate', '有效期限', 'date_compare', {'ocr_split': True, 'input_replace': ''}, 'idExpiryDateResult'),  # 20200410-20250410
    ('dateOfBirth', '出生年月', 'date_compare', {'input_replace': ''}, 'dateOfBirthResult'),  # 20231023
]

ID_TYPE_COMPARE = {
    'ITPRC': [IC_OCR_FIELD, ITPRC, True],
    'ITPSP': [PP_OCR_FIELD, ITPSP, False],
    'ITHKM': [EEP_OCR_FIELD, ITHKM_ITTID, False],
    'ITTID': [EEP_OCR_FIELD, ITHKM_ITTID, False],
    'ITRES': [RP_OCR_FIELD, ITRES, True],
}

ID_RES = 'idNumResult'
SECOND_ID_TYPE_FIELD = 'secondIdType'
NAME_FIELD = 'customerChineseName'
SECOND_ID_FIELD = 'secondIdNum'
SECOND_ID_RES = 'secondIdNumResult'

SECOND_ITPRC = [
    (SECOND_ID_FIELD, '公民身份号码', 'common_compare', {}, SECOND_ID_RES),
]

# 护照
SECOND_ITPSP = [
    (SECOND_ID_FIELD, '护照号码', 'common_compare', {}, SECOND_ID_RES),
]

# 港澳台通行证
SECOND_ITHKM_ITTID = [
    (SECOND_ID_FIELD, '证件号码', 'common_compare', {}, SECOND_ID_RES),
]

# 居住证
SECOND_ITRES = [
    (SECOND_ID_FIELD, '公民身份号码', 'common_compare', {}, SECOND_ID_RES),
]

SECOND_ID_TYPE_COMPARE = {
    'ITPRC': [IC_OCR_FIELD, SECOND_ITPRC],
    'ITPSP': [PP_OCR_FIELD, SECOND_ITPSP],
    'ITHKM': [EEP_OCR_FIELD, SECOND_ITHKM_ITTID],
    'ITTID': [EEP_OCR_FIELD, SECOND_ITHKM_ITTID],
    'ITRES': [RP_OCR_FIELD, SECOND_ITRES],
}

# 1. 分别对比 POS车架号 vs 车辆登记正,POS车架号 vs 行驶证
#     a)两种比对 均一致:Y
#     b)其中一个 不一致:N,向GCAP发送:不一致的OCR识别结果
#     c)两中比对 均不一致:N,向GCAP发送:车辆登记证 & 行驶证识别结果
# 车辆登记证
PCUSD_MVC = [
    ('vinNo', '9.车辆识别代号/车架号', 'common_compare', {}, 'vinNoResult'),
    ('manufactureDate', '32.车辆出厂日期', 'date_compare', {}, 'manufactureDateResult'),
    ('firstRegistrationDate', '3.登记日期', 'date_compare', {}, 'firstRegistrationDateResult'),
]

# 行驶证
PCUSD_DL = [
    ('vinNo', '车辆识别代码', 'common_compare', {}, 'vinNoResult'),
]

# 营业执照
LEGAL_REP_NAME = '经营者姓名'
TCCOR = [
    ('customerChineseName', '企业名称', 'company_compare', {}, 'customerChinessNameResult'),
    ('legalRepName', '经营者姓名', 'name_compare', {}, 'legalRepNameResult'),
    ('idNum', '注册号', 'common_compare', {}, 'idNumResult'),
    ('businessLicenseNo', '注册号', 'common_compare', {}, 'businessLicenseNoResult'),
    ('taxRegistrationCode', '注册号', 'common_compare', {}, 'taxRegistrationCodeResult'),
    ('incorporationDate', '成立日期', 'date_compare', {'ocr_replace': True}, 'incorporationDateResult'),  # 2017年07月11日
    # 2017年07月11日至长期  1. OCR识别为长期,向GCAP发送:2099-12-31 00:00:00.0
    ('businessLicenseDueDate', '营业期限', 'date_compare', {'ocr_split': True, 'long': True, 'ocr_replace': True}, 'businessLicenseDueDateResult'),
    ('capitalRegAmount', '注册资本', 'rmb_compare', {}, 'capitalRegAmountResult'),  # 壹拾万元整 将OCR识别结果(人民币大写)转化为数字
]

TCSEP = [
    ('companyName', '企业名称', 'company_compare', {}, 'companyNameResult'),
    ('registeredCapital', '注册资本', 'rmb_compare', {}, 'registeredCapitalResult'),  # 壹拾万元整 将OCR识别结果(人民币大写)转化为数字
    ('selfEmployedSubType', '企业类型', 'type_compare', {}, 'selfEmployedSubTypeResult')  # 有限责任公司
]

# 1. POS数据OCR识别结果对应关系如下:
#     a)Individual Businessman CSIBM => 个体工商户
#     b)Small and Micro Enterprise Owners CSSME => 个人独资企业、有限合伙企业、股份合作制、有限责任公司(***)【只需比对“有限责任公司”即可】
#     c)Others CSOTH => 识别结果不一致时,向GCAP发送 OCR的识别结果

RESULT_Y = 'Y'
RESULT_N = 'N'
RESULT_NA = 'NA'

IN_ORDER = ('applicantType', 'idType', SECOND_ID_TYPE_FIELD, 'customerType', 'customerChineseName', 'idNum',
            SECOND_ID_FIELD, "idExpiryDate", "dateOfBirth", 'companyName', "registeredCapital", 'selfEmployedSubType',)
UC_ORDER = ('vinNo', 'manufactureDate', 'firstRegistrationDate')
CO_ORDER = ('customerType', 'customerChineseName', 'legalRepName', 'idNum', 'businessLicenseNo', 'taxRegistrationCode',
            'incorporationDate', 'businessLicenseDueDate', 'capitalRegAmount')

PREFIX_MVC = 'G'
PREFIX_DL = 'V'
SPLIT = ';'

# --------------- DDA 保存图片 --------------------
DDA_FIELD = 'DDA'
IC_FIELD = 'ID'
BC_FIELD = 'BC'

IC_KEY_FIELD = ('姓名', '公民身份号码')
BC_KEY_FIELD = 'CardNum'

DDA_IMG_PATH = 'img_path'
DDA_PRO = 'pro'


DDA_MAPPING = [
    (DDA_IC_NAME, IC_FIELD),
    (DDA_IC_ID, IC_FIELD),
    (DDA_BC_ID, BC_FIELD),
]

DDA_PRO_MIN = 0.6

# ----------------------- SE compare -----------------------
SE_FIRST_ID_FIELD = ['customerName', 'idNum', 'dateOfBirth', 'idExpiryDate']
SE_ID_CARD_FIELD = ['customerName', 'idNum', 'dateOfBirth', 'idExpiryDate', 'hukouProvince', 'hukouCity']
SE_SECOND_ID_FIELD = [
    ('customerName', 'customerName'),
    ('secondIdNum', 'idNum'),
]
SE_CORPORATE_ID_FIELD = [
    ('legalRepName', 'customerName'),
    ('firstIdNo', 'idNum')
]
SE_SEP_FIELD = [
    ('companyName', 'companyName'),
    ('customerName', 'legalRepName'),
    ('registeredCapital', 'registeredCapital'),
    ('selfEmployedSubType', 'organizationType')
]
SE_CORPORATE_FIELD = ['companyName', 'legalRepName', 'businessLicenseNo', 'organizationCreditCode',
                      'taxRegistrationCertificateNo', 'establishmentDate', 'businessLicenseDueDate']
SE_CORPORATE_ALL_FIELD = ['companyName', 'legalRepName', 'firstIdNo', 'businessLicenseNo', 'organizationCreditCode',
                          'taxRegistrationCertificateNo', 'establishmentDate', 'businessLicenseDueDate']
SE_NEW_FIELD = ['vinNo', 'dealer', 'vehicleTransactionAmount']
SE_USED_FIELD = ['vinNo', 'vehicleTransactionAmount']
SE_NEW_ADD_FIELD = ['customerName', 'idNum', 'dateOfInvoice', 'stamp']
SE_STAMP_VALUE = '有'
SE_GB_NEW_FIELD = ['vinNo']
SE_GB_USED_FIELD = ['customerName', 'idNum', 'date']
SE_HMH_FIELD = ['customerName', 'idNum', 'applicationId']

SE_BANK_FIELD = ['accountNo', 'bankName']
SE_DDA_FIELD = ['applicationId(1)', 'applicationId(2)', 'bankName', 'companyName', 'customerName', 'idNum', 'accountHolderName', 'accountNo']

HIL_COMPANY_NAME = '先锋国际融资租赁有限公司'
AFC_COMPANY_NAME = '宝马汽车金融(中国)有限公司'

ID_EN = 'PRC ID'
PP_EN = 'Passport'
EEP_EN = 'Resident Permit to Mainland'
RP_EN = 'Resident ID'
BL_EN = 'Business permit'
MVI_EN = 'newCar Invoice'
UCI_EN = 'usedCar Invoice'
MVC_EN = 'Green Book(1/2)'
MVC34_EN = 'Green Book(3/4)'
BC_EN = 'Bank Card'
DDA_EN = 'DDA'
HMH_EN = 'Mortgage Waiver Letter'
JYPZ_EN = 'Used Car Document'

SKIP_CARD = {ID_EN, RP_EN}


ID_COMPARE_LOGIC = {
    'customerName': ('姓名', 'se_name_compare', {}),
    'idNum': ('公民身份号码', 'se_common_compare', {}),
    'dateOfBirth': ('出生年月', 'se_date_compare', {'input_replace': ''}),
    'idExpiryDate': ('有效期限', 'se_date_compare', {'long': True, 'ocr_split': True, 'input_replace': '', 'today': True}),
    'hukouProvince': ('住址', 'se_contain_compare', {}),
    'hukouCity': ('住址', 'se_contain_compare', {}),
}

PP_COMPARE_LOGIC = {
    'customerName': ('英文姓名', 'se_name_compare', {'is_passport': True}),
    'idNum': ('护照号码', 'se_common_compare', {}),
    'dateOfBirth': ('出生日期', 'se_date_compare', {'input_replace': ''}),
    'idExpiryDate': ('有效期至', 'se_date_compare', {'input_replace': '', 'today': True}),
}

EEP_COMPARE_LOGIC = {
    'customerName': ('中文名', 'se_common_compare', {}),
    'idNum': ('证件号码', 'se_common_compare', {}),
    'dateOfBirth': ('出生日期', 'se_date_compare', {'input_replace': '.'}),
    'idExpiryDate': ('有效期限', 'se_date_compare', {'ocr_split': True, 'input_replace': '.', 'today': True}),
}

RP_COMPARE_LOGIC = {
    'customerName': ('姓名', 'se_name_compare', {}),
    'idNum': ('公民身份号码', 'se_common_compare', {}),
    'dateOfBirth': ('出生年月', 'se_date_compare', {'input_replace': ''}),
    'idExpiryDate': ('有效期限', 'se_date_compare', {'ocr_split': True, 'input_replace': '', 'today': True}),
    'hukouProvince': ('住址', 'se_contain_compare', {}),
    'hukouCity': ('住址', 'se_contain_compare', {}),
}

BL_COMPARE_LOGIC = {
    'companyName': ('企业名称', 'se_company_compare', {}),
    'legalRepName': ('经营者姓名', 'se_name_compare', {}),
    'firstIdNo': ('注册号', 'se_common_compare', {}),
    'businessLicenseNo': ('注册号', 'se_common_compare', {}),
    'organizationCreditCode': ('注册号', 'se_common_compare', {}),
    'taxRegistrationCertificateNo': ('注册号', 'se_common_compare', {}),
    'establishmentDate': ('成立日期', 'se_date_compare', {'ocr_replace': True}),
    'businessLicenseDueDate': ('营业期限', 'se_date_compare', {'ocr_split': True, 'long': True, 'ocr_replace': True, 'today': True}),
    'organizationType': ('企业类型', 'se_type_compare', {}),
    'registeredCapital': ('注册资本', 'se_rmb_compare', {}),
}

MVI_COMPARE_LOGIC = {
    'vinNo': ('车辆识别代码', 'se_common_compare', {}),
    'dealer': ('销方名称', 'se_common_compare', {}),
    'vehicleTransactionAmount': ('价税合计小写', 'se_amount_compare', {}),
    'customerName': ('购方名称', 'se_name_compare', {'is_passport': True}),
    'idNum': ('购买方身份证号或组织机构代码', 'se_contain_compare_2', {}),
    'dateOfInvoice': ('开票日期', 'se_date_compare_2', {'three_month': True}),
    'stamp': ('销售单位章', 'se_common_compare', {}),
}

UCI_COMPARE_LOGIC = {
    'vinNo': ('车架号', 'se_common_compare', {}),
    'vehicleTransactionAmount': ('价税合计小写', 'se_amount_compare', {}),
    'customerName': ('购方名称', 'se_name_compare', {'is_passport': True}),
    'idNum': ('购方纳税人识别号', 'se_contain_compare_2', {}),
    'dateOfInvoice': ('开票日期', 'se_date_compare_2', {'three_month': True}),
    'stamp': ('发票章', 'se_common_compare', {}),
}

MVC_COMPARE_LOGIC = {
    'vinNo': ('9.车辆识别代号/车架号', 'se_common_compare', {}),
    # 'customerName': ('姓名/名称', ),
    # 'idNum': ('身份证明名称/号码', ),
    # 'date': ('转移登记日期', ),
}

TRANSFER_NAME = '姓名/名称'
TRANSFER_NUM = '身份证明名称/号码'
TRANSFER_DATE = '转移登记日期'

MVC34_COMPARE_LOGIC = {
    'customerName': (TRANSFER_NAME, 'se_company_compare', {}),
    'idNum': (TRANSFER_NUM, 'se_contain_compare_2', {}),
    'date': (TRANSFER_DATE, 'se_date_compare_2', {}),
}

BC_COMPARE_LOGIC = {
    'accountNo': ('CardNum', 'se_common_compare', {}),
    'bankName': ('BankName', 'se_both_contain_compare', {}),
}

DDA_COMPARE_LOGIC = {
    'applicationId(1)': ('check_Num', 'se_common_compare', {}),
    'applicationId(2)': ('check_Num', 'se_common_compare', {}),
    'bankName': ('to_bank', 'se_both_contain_compare', {}),
    'companyName': ('to_company', 'se_company_compare', {}),
    'customerName': (DDA_IC_NAME, 'se_contain_compare_2', {}),
    'idNum': (DDA_IC_ID, 'se_contain_compare_2', {}),
    'accountHolderName': (DDA_BC_NAME, 'se_common_compare', {}),
    'accountNo': (DDA_BC_ID, 'se_common_compare', {}),
}

JYPZ_COMPARE_LOGIC = {
    'vinNo': ('vin', 'se_common_compare', {}),
    'vehicleTransactionAmount': ('price', 'se_amount_compare', {}),
    'customerName': ('buyer_name', 'se_name_compare', {'is_passport': True}),
    'idNum': ('buyer_id', 'se_contain_compare_2', {}),
    'date': ('date', 'se_date_compare_2', {}),
}

HMH_COMPARE_LOGIC = {
    'customerName': ('借款/承租人姓名', 'se_name_compare', {}),
    'idNum': ('证件号码', 'se_common_compare', {}),
    'applicationId': ('合同编号', 'se_contain_compare', {}),
}

# MVC_OCR_FIELD = 'mvc_ocr'

SE_DETECT_CARD = [UCI_EN, JYPZ_EN, HMH_EN, DDA_EN]

SE_COMPARE_FIELD = {
    ID_EN: (IC_OCR_FIELD, ID_COMPARE_LOGIC, True),
    PP_EN: (PP_OCR_FIELD, PP_COMPARE_LOGIC, False),
    EEP_EN: (EEP_OCR_FIELD, EEP_COMPARE_LOGIC, False),
    RP_EN: (RP_OCR_FIELD, RP_COMPARE_LOGIC, True),
    BL_EN: (BL_OCR_FIELD, BL_COMPARE_LOGIC, False),
    MVI_EN: (MVI_OCR_FIELD, MVI_COMPARE_LOGIC, False),
    UCI_EN: (UCI_OCR_FIELD, UCI_COMPARE_LOGIC, False),
    MVC_EN: (MVC_OCR_FIELD, MVC_COMPARE_LOGIC, False),
    MVC34_EN: (MVC_OCR_FIELD, MVC34_COMPARE_LOGIC, False),
    BC_EN: (BC_OCR_FIELD, BC_COMPARE_LOGIC, False),
    DDA_EN: (DDA_OCR_FIELD, DDA_COMPARE_LOGIC, False),
    HMH_EN: (HMH_OCR_FIELD, HMH_COMPARE_LOGIC, False),
    JYPZ_EN: (JYPZ_OCR_FIELD, JYPZ_COMPARE_LOGIC, False),
}


SE_FIRST_ID_FIELD_MAPPING = {
    'ITPRC': (ID_EN, SE_ID_CARD_FIELD),
    'ITPSP': (PP_EN, SE_FIRST_ID_FIELD),
    'ITHKM': (EEP_EN, SE_FIRST_ID_FIELD),
    'ITTID': (EEP_EN, SE_FIRST_ID_FIELD),
    'ITRES': (RP_EN, SE_FIRST_ID_FIELD),
}

SE_SECOND_ID_FIELD_MAPPING = {
    'ITPRC': (ID_EN, SE_SECOND_ID_FIELD),
    'ITPSP': (PP_EN, SE_SECOND_ID_FIELD),
    'ITHKM': (EEP_EN, SE_SECOND_ID_FIELD),
    'ITTID': (EEP_EN, SE_SECOND_ID_FIELD),
    'ITRES': (RP_EN, SE_SECOND_ID_FIELD),
}

HEAD_LIST = ['Info', 'Index', 'License', 'Field', 'Input', 'OCR', 'Result', 'Position', 'Image', 'errorType']

# ----------------litigation------------------------
IC_FIELD_ORDER_2 = (('姓名', '姓名'),
                    ('公民身份号码', '公民身份号码'),
                    ('出生年月', '出生年月'),
                    ('住址', '住址'),
                    ('性别', '性别'),
                    ('民族', '民族'),)
IC_FIELD_ORDER_3 = (('有效期限', '有效期限'), ('签发机关', '签发机关'),)

BC_FIELD_ORDER_2 = (('BankName', '发卡行名称'),
                    ('CardNum', '银行卡号'),
                    ('CardType', '银行卡类型'),)

IMG_PATH_KEY = 'uniq_img_path_key'
IMG_PATH_KEY_2 = 'uniq_img_path_key_2'

INFO_SOURCE = ['POS', 'CMS']

# -------------------

CA_FIRST_ID_FIELD = ['customerChineseName', 'idNum', 'idExpiryDate', 'dateOfBirth']

CA_FIRST_ID_FIELD_MAPPING = {
    'ITPRC': (ID_EN, CA_FIRST_ID_FIELD),
    'ITPSP': (PP_EN, CA_FIRST_ID_FIELD),
    'ITHKM': (EEP_EN, CA_FIRST_ID_FIELD),
    'ITTID': (EEP_EN, CA_FIRST_ID_FIELD),
    'ITRES': (RP_EN, CA_FIRST_ID_FIELD),
}

CA_SECOND_ID_FIELD = [
    ('customerChineseName', 'customerChineseName'),
    ('secondIdNum', 'idNum')
]

CA_SECOND_ID_FIELD_MAPPING = {
    'ITPRC': (ID_EN, CA_SECOND_ID_FIELD),
    'ITPSP': (PP_EN, CA_SECOND_ID_FIELD),
    'ITHKM': (EEP_EN, CA_SECOND_ID_FIELD),
    'ITTID': (EEP_EN, CA_SECOND_ID_FIELD),
    'ITRES': (RP_EN, CA_SECOND_ID_FIELD),
}

CA_SEP_FIELD = ['companyName', 'customerChineseName', 'registeredCapital', 'selfEmployedSubType']

CA_CORPORATE_FIELD = [
    ('customerChineseName', 'companyName'),
    ('legalRepName', 'customerChineseName'),
    ('idNum', 'idNum'),
    ('businessLicenseNo', 'businessLicenseNo'),
    ('taxRegistrationCode', 'taxRegistrationCode'),
    ('incorporationDate', 'incorporationDate'),
    ('businessLicenseDueDate', 'businessLicenseDueDate'),
    ('capitalRegAmount', 'registeredCapital'),
]

CA_MVC_FIELD = ['vinNo', 'manufactureDate', 'firstRegistrationDate']
CA_DL_FIELD = ['vinNo']
DL_EN = 'Driving Licence'

CA_ID_COMPARE_LOGIC = {
    'customerChineseName': ('姓名', 'ca_name_compare', {}),
    'idNum': ('公民身份号码', 'ca_common_compare', {}),
    'dateOfBirth': ('出生年月', 'ca_date_compare', {'input_replace': ''}),
    'idExpiryDate': ('有效期限', 'ca_date_compare', {'long': True, 'ocr_split': True, 'input_replace': ''}),
}


CA_PP_COMPARE_LOGIC = {
    'customerChineseName': ('英文姓名', 'ca_name_compare', {'is_passport': True}),
    'idNum': ('护照号码', 'ca_common_compare', {}),
    'dateOfBirth': ('出生日期', 'ca_date_compare', {'input_replace': ''}),
    'idExpiryDate': ('有效期至', 'ca_date_compare', {'input_replace': ''}),
}

CA_EEP_COMPARE_LOGIC = {
    'customerChineseName': ('中文名', 'ca_common_compare', {}),
    'idNum': ('证件号码', 'ca_common_compare', {}),
    'dateOfBirth': ('出生日期', 'ca_date_compare', {'input_replace': '.'}),
    'idExpiryDate': ('有效期限', 'ca_date_compare', {'ocr_split': True, 'input_replace': '.'}),
}

CA_RP_COMPARE_LOGIC = {
    'customerChineseName': ('姓名', 'ca_common_compare', {}),
    'idNum': ('公民身份号码', 'ca_common_compare', {}),
    'dateOfBirth': ('出生年月', 'ca_date_compare', {'input_replace': ''}),
    'idExpiryDate': ('有效期限', 'ca_date_compare', {'ocr_split': True, 'input_replace': ''}),
}

CA_BL_COMPARE_LOGIC = {
    'companyName': ('企业名称', 'ca_company_compare', {}),
    'customerChineseName': ('经营者姓名', 'ca_name_compare', {}),
    'idNum': ('注册号', 'ca_common_compare', {}),
    'businessLicenseNo': ('注册号', 'ca_common_compare', {}),
    'taxRegistrationCode': ('注册号', 'ca_common_compare', {}),
    'incorporationDate': ('成立日期', 'ca_date_compare', {'ocr_replace': True}),
    'businessLicenseDueDate': ('营业期限', 'ca_date_compare', {'ocr_split': True, 'long': True, 'ocr_replace': True}),
    'registeredCapital': ('注册资本', 'ca_rmb_compare', {}),
    'selfEmployedSubType': ('企业类型', 'ca_type_compare', {}),
}

CA_MVC_COMPARE_LOGIC = {
    'vinNo': ('9.车辆识别代号/车架号', 'ca_common_compare', {}),
    'manufactureDate': ('32.车辆出厂日期', 'ca_date_compare', {}),
    'firstRegistrationDate': ('3.登记日期', 'ca_date_compare', {}),
}

CA_DL_COMPARE_LOGIC = {
    'vinNo': ('车辆识别代码', 'ca_common_compare', {}),
}

CA_COMPARE_FIELD = {
    ID_EN: (IC_OCR_FIELD, CA_ID_COMPARE_LOGIC, True),
    PP_EN: (PP_OCR_FIELD, CA_PP_COMPARE_LOGIC, False),
    EEP_EN: (EEP_OCR_FIELD, CA_EEP_COMPARE_LOGIC, False),
    RP_EN: (RP_OCR_FIELD, CA_RP_COMPARE_LOGIC, True),

    BL_EN: (BL_OCR_FIELD, CA_BL_COMPARE_LOGIC, False),

    MVC_EN: (MVC_OCR_FIELD, CA_MVC_COMPARE_LOGIC, False),
    DL_EN: (DL_OCR_FIELD, CA_DL_COMPARE_LOGIC, False),
}

CONTRACT_SHEET_NAME = '合同'

# ------------------CMS--------------------------------------
BANK_INFO_MAP = (
    ('accountNo', 'bankAccountDetails.accountNo'),
    ('bankName', 'bankAccountDetails.bankName'),
    ('accountHolderName', 'bankAccountDetails.accountHolderName'),
)

VEHICLE_INFO_MAP = (
    ('vehicleStatus', 'vehicleStatus'),
    ('vinNo', 'vehicleInformation.vinNo'),
    ('dealer', 'dealerName'),
    ('vehicleTransactionAmount', 'totalFinanceAmount'),
)

CORPORATE_INFO_MAP = (
    ('firstIdType', ),
    ('firstIdNo', ),
    ('companyName', ),
    ('legalRepName', ),
    ('businessLicenseNo', ),
    ('organizationCreditCode', ),
    ('taxRegistrationCertificateNo', ),
    ('establishmentDate', ),
    ('businessLicenseDueDate', ),
)

INDIVIDUAL_INFO_MAP = (
    ('applicantType', 'applicantInformation.applicantType'),
    ('customerType', 'applicantInformation.customersubType'),

    ('idType', 'applicantInformation.IDInformation.idType'),
    ('customerName', 'applicantInformation.name'),
    ('idNum', 'applicantInformation.IDInformation.idNum'),
    ('dateOfBirth', 'applicantInformation.dateOfBirth'),
    ('idExpiryDate', 'applicantInformation.IDInformation.idExpiryDate'),
    ('hukouProvince', ),
    ('hukouCity', ),

    ('secondIdType', 'applicantInformation.IDInformation.idType'),
    ('secondIdNum', 'applicantInformation.IDInformation.idNum'),

    ('companyName', ),
    ('registeredCapital', ),
    ('selfEmployedSubType', ),
)

CMS_TO_POS = [
    ('bank_info', BANK_INFO_MAP),
    ('vehicle_info', VEHICLE_INFO_MAP),
    ('corporate_cus_info', CORPORATE_INFO_MAP),
    ('individual_cus_info', INDIVIDUAL_INFO_MAP),
]

TENANT_MAP = {
    AFC_PREFIX: 1,
    HIL_PREFIX: 2,
}

APPLICANT_TYPE_MAP = {
    'Borrower': 'CUSTR',
    'Co Borrower': 'COAPP',
    'Guarantor': 'GAUTR1',
    'Mortgager': 'GAUTR2'
}