package com.brilliance.isc.common.transaction.newcheck.bopdec;

import com.brilliance.isc.bo.Bopcod;
import com.brilliance.isc.bo.model.CheckItems;
import com.brilliance.isc.common.transaction.newcheck.ValidResult;
import com.brilliance.isc.common.transaction.newcheck.WarningResult;
import com.brilliance.isc.common.util.Utils;
import com.brilliance.isc.config.CustomConfig;
import com.brilliance.isc.mda.dao.*;
import com.brilliance.isc.vo.bop.BopdecSelectVo;
import com.brilliance.mda.runtime.mda.util.Dates;
import com.brilliance.mda.runtime.mda.util.MdaUtils;
import com.brilliance.mda.runtime.mda.util.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Component
public class BopdecCommonValidator {

    @Autowired
    private DbaMapper dbaMapper;

    @Autowired
    private DbbMapper dbbMapper;

    @Autowired
    private DbcMapper dbcMapper;

    @Autowired
    private DbdMapper dbdMapper;

    @Autowired
    private DbuMapper dbuMapper;

    @Autowired
    private CustomConfig customConfig;

    @Autowired
    private DblMapper dblMapper;

    @Autowired
    private BopdecCommon bopdecCommon;

    @Autowired
    private BopcodMapper bopcodMapper;

    @Autowired
    private BopctyMapper bopctyMapper;


    public ValidResult checkBasActiondesc(CheckItems checkItems){
        String actiondesc = checkItems.getBasactiondesc();
        String actiontype = checkItems.getBasactiontype();
        return this.checkActiondesc(actiondesc,actiontype);
    }
    public ValidResult checkDclActiondesc(CheckItems checkItems){
        String actiondesc = checkItems.getDclactiondesc();
        String actiontype = checkItems.getDclactiontype();
        return this.checkActiondesc(actiondesc,actiontype);
    }
    public ValidResult checkVrfActiondesc(CheckItems checkItems){
        String actiondesc = checkItems.getVrfactiondesc();
        String actiontype = checkItems.getVrfactiontype();
        return this.checkActiondesc(actiondesc,actiontype);
    }

    public ValidResult checkActiondesc(String actiondesc,String actiontype){
        if (!MdaUtils.isEmpty(actiondesc)) {
            String str = actiondesc;
            byte[] buff = null;
            try {
                buff = str.getBytes("GB18030");
            } catch (Exception e) {
                return ValidResult.build(false, "getBytes fail...");
            }
            int len = buff.length;
            if (len > 128) {
                return ValidResult.build(false, "该字段只能输入128个字符！");
            }
        }
        if ("A".equals(actiontype) && !MdaUtils.isEmpty(actiondesc)) {
            return ValidResult.build(false, "操作类型为新增时，修改/删除原因为空");
        } else if ("D".equals(actiontype)) {
            if (MdaUtils.isEmpty(actiondesc)) {
                return ValidResult.build(false, "修改/删除原因为必输项");
            } else {
                if ("无需申报".equals(actiondesc) || "无须申报".equals(actiondesc) || "原业务退回".equals(actiondesc) || "不申报".equals(actiondesc)) {
                    return ValidResult.build(false, "删除理由必须充分，不能填写无需申报、原业务退回、不申报等不充分不合规的理由！");
                }
            }
        }
        return null;
    }

    public ValidResult checkCustcod(CheckItems checkItems){
        String transName = checkItems.getTransName().toLowerCase();
//        String inifrm= Strings.mid(transName,1,3);
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
        String custCod = checkItems.getCustcod();
        String custype= checkItems.getCustype();
        String oppuser = checkItems.getOppuser();
        if ("C".equals(custype)) {
            if (MdaUtils.isEmpty(custCod)){
                return ValidResult.build(false, "此字段为必输项！");
            }else {
                if (!bopdecCommon.isValidEntpCode(custCod)) {
                    return ValidResult.build(false, "主体标识码校验错误");
//                        ctx.setFieldError(this, "custcod", MdaUtils.getI18NString("baspp", "CT000167"));
                }
//                if (!transName.endsWith("sel")) {
//                    //51 交易对方名称以“(JN)”字样开头，且申报主体的主体标识码前三位为“634”、“635”、“636”、“637”、“354”、“358”、“360”或“319”等字段（特殊机构赋码码段）。
//                    if ((inifrm.startsWith("dba") || inifrm.startsWith("dbb") || inifrm.startsWith("dbc")) && oppuser.startsWith("(JN)") && bopdecCommon.startsWithValue(custCod,"-634-635-636-637-354-358-360-319-")) {
//                        return ValidResult.build(false, "第51条检核:交易对方名称以“(JN)”字样开头，且申报主体的主体标识码前三位为“634”、“635”、“636”、“637”、“354”、“358”、“360”或“319”等字段（特殊机构赋码码段）。");
//                    }
//                }
                //通过配置文件控制是否需要检验主体标识码
                String chk = customConfig.getCheckcustcod();
//                    String chk = MdaUtils.getPropertyValue(MdaUtils.catPath(ctx.getEnvConfig().getRootPath(), "cfg/custom.properties"), "checkcustcod");
                if("false".equals(chk)){
                    return null;
                }
                //收支申报基础信息报送，需要校验填写的主体标识码 对应的单位基本情况表是否已经报送
                boolean sndok = false;
                int num = dblMapper.dblCountByCustcod(custCod);
                if(num > 0){
                    sndok = true;
                }
                if(!sndok){
                    return ValidResult.build(false, "该主体标识码在单位基本情况表中不存在已确认待发送或报送成功的数据！");
                }
            }
        }
        return null;
    }

    public WarningResult warncheckCustcod(CheckItems checkItems,String subid){
        String transName = checkItems.getTransName().toLowerCase();
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
        String custCod = checkItems.getCustcod();
        String custype= checkItems.getCustype();
        String oppuser = checkItems.getOppuser();
        if ("C".equals(custype)) {
            if (MdaUtils.isEmpty(custCod)){
                return WarningResult.buildEmpty(subid);
            }else {
                if (!bopdecCommon.isValidEntpCode(custCod)) {
                    return WarningResult.buildEmpty(subid);
                }
                if (!transName.endsWith("sel")) {
                    //51 交易对方名称以“(JN)”字样开头，且申报主体的主体标识码前三位为“634”、“635”、“636”、“637”、“354”、“358”、“360”或“319”等字段（特殊机构赋码码段）。
                    if ((inifrm.startsWith("dba") || inifrm.startsWith("dbb") || inifrm.startsWith("dbc")) && oppuser.startsWith("(JN)") && bopdecCommon.startsWithValue(custCod,"-634-635-636-637-354-358-360-319-")) {
                        return WarningResult.build(subid, "第51条检核:交易对方名称以“(JN)”字样开头，且申报主体的主体标识码前三位为“634”、“635”、“636”、“637”、“354”、“358”、“360”或“319”等字段（特殊机构赋码码段）。");
                    }
                }
            }
        }
        return WarningResult.buildEmpty(subid);
    }

    public ValidResult checkCustnm(CheckItems checkItems){
        String custNm = checkItems.getCustnm();
        if (MdaUtils.isEmpty(custNm)) {
            return ValidResult.build(false, "此字段为必输项！");
        }
        //判断字符数不能超过 128
        if (!MdaUtils.isEmpty(custNm)) {
            String str = custNm;
            byte[] buff = null;
            try {
                buff = str.getBytes("GB18030");
            } catch (Exception e) {
                return ValidResult.build(false, "getBytes fail...");
            }
            int len = buff.length;
            if (len > 128) {
                return ValidResult.build(false, "该字段只能输入128个字符！");
            }
        }
        return null;
    }

    public ValidResult checkCustype(CheckItems checkItems){
        String cusType = checkItems.getCustype();
        String transName = checkItems.getTransName().toLowerCase();
//        String inifrm = Strings.mid(transName, 1, 3).toLowerCase();
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
        String oppUser = checkItems.getOppuser();
        String txccy = checkItems.getTxccy();
        String method = checkItems.getMethod();
        if (MdaUtils.isEmpty(cusType)) {
            return ValidResult.build(false, "此字段为必输项！");
        }
        //非查询交易才校验
        //只提供提示，不控制死
        if (!transName.endsWith("sel")) {
            //Platform.indexLe($recgrp\\bas\\txccy,"-CNY-") && $baspp\\othamt > 0
            //交易对手方(JN),申报主体为对私居民个人，收入币种人民币，其他币种有金额，
//            if (oppUser.startsWith("(JN)") && bopdecCommon.indexGt(cusType, "-D-") && bopdecCommon.indexGt(txccy, "-CNY-")) {
//                return ValidResult.build(false, "业务需求,`申报主体为对私居民个人，收入币种人民币，交易对手方(JN)时，请注意：境内居民个人与境内非居民个人之间发生的人民币收付款暂不申报。");
//            }
//            //78 结算方式为“信用证”，但申报主体类型为“对私居民”或“对私非居民”。
//            if (bopdecCommon.indexGt(method, "-L-") && bopdecCommon.indexGt(cusType, "-D-F-")) {
//                return ValidResult.build(false, "第78条检核:结算方式为“信用证”，但申报主体类型为“对私居民”或“对私非居民”");
//            }
//            //80 “是否保税货物项下收入/付款”选“是”，但申报主体为“对私居民”或“对私非居民”。
//            String isref = checkItems.getDclisref();
//            String payattr = checkItems.getPayattr();
//            String isref1 = checkItems.getVrfisref();
//            if (bopdecCommon.indexGt(isref, "-Y-") && bopdecCommon.indexGt(cusType, "-D-F-") && (inifrm.startsWith("dba") || inifrm.startsWith("dbb") || inifrm.startsWith("dbc"))) {
//                return ValidResult.build(false, "第80条检核:是否保税货物项下收入/付款”选“是”，但申报主体为“对私居民”或“对私非居民”");
//            }
//            if (bopdecCommon.indexGt(isref1, "-Y-") && bopdecCommon.indexGt(cusType, "-D-F-") && (inifrm.startsWith("dbd") || inifrm.startsWith("dbe") || inifrm.startsWith("dbf"))) {
//                return ValidResult.build(false, "第80条检核:是否保税货物项下收入/付款”选“是”，但申报主体为“对私居民”或“对私非居民”");
//            }
//            //88 收入类型不为空，但申报主体为“对私居民”或“对私非居民”。
//            if ((inifrm.startsWith("dba") || inifrm.startsWith("dbb") || inifrm.startsWith("dbc")) && !MdaUtils.isEmpty(payattr) && bopdecCommon.indexGt(cusType, "-D-F-")) {
//                return ValidResult.build(false, "第88条检核:收入类型不为空，但申报主体为“对私居民”或“对私非居民");
//            }
        }
        //53 交易对方名称以“(JN)”字样开头，且申报主体类型为“对公非居民”或“对私非居民”。                //对公非居民需要增加判断
//        if ((inifrm.startsWith("dba") || inifrm.startsWith("dbb") || inifrm.startsWith("dbc")) && oppUser.startsWith("(JN)") && bopdecCommon.indexGt(cusType, "-F-")) {
//            return ValidResult.build(false, "53：交易对方名称以“(JN)”开头，申报主体类型不能为“对私非居民”");
//        }
        if("dbd".equals(inifrm)){
            if(!MdaUtils.isEmpty(cusType) && "F".equals(cusType)) {
                return ValidResult.build(false, "收款人类型不能为该选项，请重新选择");
            }
        }
        return null;
    }

    public WarningResult warncheckCustype(CheckItems checkItems,String subid){
        String cusType = checkItems.getCustype();
        String transName = checkItems.getTransName().toLowerCase();
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
        String oppUser = checkItems.getOppuser();
        String txccy = checkItems.getTxccy();
        String method = checkItems.getMethod();
        if (MdaUtils.isEmpty(cusType)) {
            return WarningResult.buildEmpty(subid);
        }
        //非查询交易才校验
        //只提供提示，不控制死
        if (!transName.endsWith("sel")) {
            //Platform.indexLe($recgrp\\bas\\txccy,"-CNY-") && $baspp\\othamt > 0
            //交易对手方(JN),申报主体为对私居民个人，收入币种人民币，其他币种有金额，
            if (oppUser.startsWith("(JN)") && bopdecCommon.indexGt(cusType, "-D-") && bopdecCommon.indexGt(txccy, "-CNY-")) {
                return WarningResult.build(subid, "业务需求,`申报主体为对私居民个人，收入币种人民币，交易对手方(JN)时，请注意：境内居民个人与境内非居民个人之间发生的人民币收付款暂不申报。");
            }
            //78 结算方式为“信用证”，但申报主体类型为“对私居民”或“对私非居民”。
            if (bopdecCommon.indexGt(method, "-L-") && bopdecCommon.indexGt(cusType, "-D-F-")) {
                return WarningResult.build(subid, "第78条检核:结算方式为“信用证”，但申报主体类型为“对私居民”或“对私非居民”");
            }
            //80 “是否保税货物项下收入/付款”选“是”，但申报主体为“对私居民”或“对私非居民”。
            String isref = checkItems.getDclisref();
            String payattr = checkItems.getPayattr();
            String isref1 = checkItems.getVrfisref();
            if (bopdecCommon.indexGt(isref, "-Y-") && bopdecCommon.indexGt(cusType, "-D-F-") && (inifrm.startsWith("dba") || inifrm.startsWith("dbb") || inifrm.startsWith("dbc"))) {
                return WarningResult.build(subid, "第80条检核:是否保税货物项下收入/付款”选“是”，但申报主体为“对私居民”或“对私非居民”");
            }
            if (bopdecCommon.indexGt(isref1, "-Y-") && bopdecCommon.indexGt(cusType, "-D-F-") && (inifrm.startsWith("dbd") || inifrm.startsWith("dbe") || inifrm.startsWith("dbf"))) {
                return WarningResult.build(subid, "第80条检核:是否保税货物项下收入/付款”选“是”，但申报主体为“对私居民”或“对私非居民”");
            }
            //88 收入类型不为空，但申报主体为“对私居民”或“对私非居民”。
            if ((inifrm.startsWith("dba") || inifrm.startsWith("dbb") || inifrm.startsWith("dbc")) && !MdaUtils.isEmpty(payattr) && bopdecCommon.indexGt(cusType, "-D-F-")) {
                return WarningResult.build(subid, "第88条检核:收入类型不为空，但申报主体为“对私居民”或“对私非居民");
            }
        }
        //53 交易对方名称以“(JN)”字样开头，且申报主体类型为“对公非居民”或“对私非居民”。                //对公非居民需要增加判断
        if ((inifrm.startsWith("dba") || inifrm.startsWith("dbb") || inifrm.startsWith("dbc")) && oppUser.startsWith("(JN)") && bopdecCommon.indexGt(cusType, "-F-")) {
            return WarningResult.build(subid, "53：交易对方名称以“(JN)”开头，申报主体类型不能为“对私非居民”");
        }
        if("dbd".equals(inifrm)){
            if(!MdaUtils.isEmpty(cusType) && "F".equals(cusType)) {
                return WarningResult.buildEmpty(subid);
            }
        }
        return WarningResult.buildEmpty(subid);
    }

    public ValidResult checkExrate(CheckItems checkItems){
        BigDecimal exrate = checkItems.getExrate();
        if(MdaUtils.isEmpty(exrate)){
            exrate = BigDecimal.ZERO;
        }
        BigDecimal zero = BigDecimal.ZERO;
        BigDecimal lcyamt = checkItems.getLcyamt();
        if(MdaUtils.isEmpty(lcyamt)){
            lcyamt = BigDecimal.ZERO;
        }
        if(exrate.compareTo(zero) == 0) {
            BigDecimal lcyamtB = checkItems.getLcyamt();
            if(MdaUtils.isEmpty(lcyamtB)){
                lcyamtB = BigDecimal.ZERO;
            }
            if(lcyamtB.compareTo(zero) > 0){
                return ValidResult.build(false, "汇率必须大于0");
            }
        }else{
            if(MdaUtils.isBigDecimalEmpty(lcyamt)){
                return ValidResult.build(false, "此栏位必须为零");
            }
        }
        return null;
    }

    public ValidResult checkFcyacc(CheckItems checkItems){
        String transName = checkItems.getTransName().toLowerCase();
        BigDecimal fcyamt = checkItems.getFcyamt();
        if(MdaUtils.isEmpty(fcyamt)){
            fcyamt = BigDecimal.ZERO;
        }
        String fcyacc = checkItems.getFcyacc();
        if (fcyamt.compareTo(BigDecimal.ZERO) != 0) {
            if(MdaUtils.isEmpty(fcyacc)) {
                return ValidResult.build(false, "此字段为必输项！");
            }
        }
        if (!MdaUtils.isEmpty(fcyacc) && fcyamt.compareTo(BigDecimal.ZERO) == 0) {
            return ValidResult.build(false, "此栏位必须为空");
        }
//        String inifrm = Strings.mid(transName, 1, 3);
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
//        if (!transName.endsWith("sel")) {
//            //54  交易对方名称以“(JN)”字样开头，且其购汇账号或现汇账号或其他账号中以“OSA”或“NRA”或“FTN”或“FTF”字样开头，“OSA”、“NRA”、“FTN”、“FTF”大小写不敏感。
//            if ((inifrm.startsWith("dba") || inifrm.startsWith("dbb") || inifrm.startsWith("dbc")) && checkItems.getOppuser().startsWith("(JN)") && bopdecCommon.startsWithValueUpper(fcyacc,"-OSA-NRA-FTN-FTF-")) {
//                return ValidResult.build(false, "第54条检核:交易对方名称以“(JN)”字样开头，且申报主体购汇账号或现汇账号或其他账号中以“OSA”或“NRA”或“FTN”或“FTF”字样开头，“OSA”、“NRA”、“FTN”、“FTF”不区分大小写。");
//            }
//        }
//
        //67 “购汇账号”或“现汇账号”或“其他账号”中包含“现金”或“钞转汇”或“无”等中文字样。
        if ((inifrm.startsWith("dba") || inifrm.startsWith("dbb") || inifrm.startsWith("dbc")) && bopdecCommon.containsValue(fcyacc, "-现金-现汇-现钞-钞转汇-无-")) {
            return ValidResult.build(false, "67:“购汇账号”或“现汇账号”或“其他账号”中包含“现金”或“钞转汇”或“无”等中文字样。");
        }
        return null;
    }

    public WarningResult warncheckFcyacc(CheckItems checkItems,String subid){
        String transName = checkItems.getTransName().toLowerCase();
        BigDecimal fcyamt = checkItems.getFcyamt();
        if(MdaUtils.isEmpty(fcyamt)){
            fcyamt = BigDecimal.ZERO;
        }
        String fcyacc = checkItems.getFcyacc();
        if (fcyamt.compareTo(BigDecimal.ZERO) != 0) {
            if(MdaUtils.isEmpty(fcyacc)) {
                return WarningResult.buildEmpty(subid);
            }
        }
        if (!MdaUtils.isEmpty(fcyacc) && fcyamt.compareTo(BigDecimal.ZERO) == 0) {
            return WarningResult.buildEmpty(subid);
        }
//        String inifrm = Strings.mid(transName, 1, 3);
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
        if (!transName.endsWith("sel")) {
            //54  交易对方名称以“(JN)”字样开头，且其购汇账号或现汇账号或其他账号中以“OSA”或“NRA”或“FTN”或“FTF”字样开头，“OSA”、“NRA”、“FTN”、“FTF”大小写不敏感。
            if ((inifrm.startsWith("dba") || inifrm.startsWith("dbb") || inifrm.startsWith("dbc")) && checkItems.getOppuser().startsWith("(JN)") && bopdecCommon.startsWithValueUpper(fcyacc,"-OSA-NRA-FTN-FTF-")) {
                return WarningResult.build(subid, "第54条检核:交易对方名称以“(JN)”字样开头，且申报主体购汇账号或现汇账号或其他账号中以“OSA”或“NRA”或“FTN”或“FTF”字样开头，“OSA”、“NRA”、“FTN”、“FTF”不区分大小写。");
            }
        }

        //67 “购汇账号”或“现汇账号”或“其他账号”中包含“现金”或“钞转汇”或“无”等中文字样。
//        if ((inifrm.startsWith("dba") || inifrm.startsWith("dbb") || inifrm.startsWith("dbc")) && bopdecCommon.containsValue(fcyacc, "-现金-现汇-现钞-钞转汇-无-")) {
//            return WarningResult.build(subid, "67:“购汇账号”或“现汇账号”或“其他账号”中包含“现金”或“钞转汇”或“无”等中文字样。");
//        }
        return WarningResult.buildEmpty(subid);
    }


    public ValidResult checkFcyamt(CheckItems checkItems){
        BigDecimal zero = BigDecimal.ZERO;
        BigDecimal fcyamt = checkItems.getFcyamt();
        if(MdaUtils.isEmpty(fcyamt)){
            fcyamt = BigDecimal.ZERO;
        }
        BigDecimal lcyamt = checkItems.getLcyamt();
        if(MdaUtils.isEmpty(lcyamt)){
            lcyamt = BigDecimal.ZERO;
        }
        BigDecimal othamt = checkItems.getOthamt();
        if(MdaUtils.isEmpty(othamt)){
            othamt = BigDecimal.ZERO;
        }
        String fcyacc = checkItems.getFcyacc();
        String txccy = checkItems.getTxccy();
        String transName = checkItems.getTransName().toLowerCase();
//        String inifrm = Strings.mid(transName, 1, 3);
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
        if (fcyamt.compareTo(zero) == 0) {
            if (!MdaUtils.isEmpty(fcyacc) && !"CNY".equals(txccy)) {
                return ValidResult.build(false, "现汇金额必须大于0");
            }
        } else {
            if (fcyamt.compareTo(zero) < 0) {
                return ValidResult.build(false, "金额不能小于0");
            }
        }
        if("dba".equals(inifrm) || "dbd".equals(inifrm)) {
            if ("CNY".equals(txccy)) {
                if (fcyamt.compareTo(BigDecimal.ZERO) != 0) {
                    return ValidResult.build(false, "收入款币种为人民币时现汇金额应为零!");
                }
            }
        }
        if("dbb".equals(inifrm) || "dbe".equals(inifrm)){
            if ("CNY".equals(txccy)) {
                if (fcyamt.compareTo(BigDecimal.ZERO) != 0) {
                    return ValidResult.build(false, "汇款币种为人民币时现汇金额应为零!");
                }
            }else{
                if (!MdaUtils.isEmpty(fcyacc) &&  fcyamt.compareTo(BigDecimal.ZERO) == 0) {
                    return ValidResult.build(false, "现汇金额必须大于0");
                }
            }
        }
        if("dbc".equals(inifrm)){
            if ("CNY".equals(txccy)) {
                if (fcyamt.compareTo(BigDecimal.ZERO) != 0) {
                    return ValidResult.build(false, "实际付款币种为人民币时现汇金额应为零!");
                }
            }else{
                if (!MdaUtils.isEmpty(fcyacc) &&  fcyamt.compareTo(BigDecimal.ZERO) == 0) {
                    return ValidResult.build(false, "现汇金额必须大于0");
                }
            }
        }
        if("dbd".equals(inifrm)){
            if(!"CNY".equals(txccy)){
                if (!MdaUtils.isEmpty(fcyacc) &&  fcyamt.compareTo(BigDecimal.ZERO) <= 0) {
                    return ValidResult.build(false, "现汇金额必须大于0");
                }
            }
        }
        return null;
    }
    public ValidResult checkIdcode(CheckItems checkItems){
        String idCode = checkItems.getIdcode();
        String cusType = checkItems.getCustype();
        String transName = checkItems.getTransName().toLowerCase();
        if (!MdaUtils.isEmpty(idCode)) {
            byte[] buff = null;
            try {
                buff = idCode.getBytes("GB18030");
            } catch (Exception e) {
                return ValidResult.build(false, "getBytes fail...");
            }
            int len = buff.length;
            if (len > 32) {
                return ValidResult.build(false, "该字段只能输入32个字符！");
            }
        }
        if (!"C".equals(cusType)) {
            return ValidResult.build(false, "此字段为必输项！");
        } else {
            //74（1）申报主体类型为“对公居民”或“对公非居民”，但个人身份证件号码不为空。
            if (!MdaUtils.isEmpty(cusType) && !MdaUtils.isEmpty(idCode)) {
                return ValidResult.build(false, "74:申报主体类型为“对公居民”或“对公非居民”，但个人身份证件号码不为空。");
            }
        }

        if (MdaUtils.isEmpty(idCode)) {
            return null;
        }

        if (!transName.endsWith("sel")) {
//            //75（2）申报主体类型为“对私非居民”，但个人身份证件号码字符长度为15或18位。
//            if (bopdecCommon.indexGt(cusType, "-F-") && (idCode.length() == 15 || idCode.length() == 18) && !bopdecCommon.startsWithValue(idCode, "-81-82-83-")) {
//                return ValidResult.build(false, "第75条检核:申报主体类型为“对私非居民”，但个人身份证件号码字符长度为15或18位。");
//            }
//
//            //76（3）申报主体类型为“对私居民”，但个人身份证件号码字符长度不为15或18位。剔除军官证（证件号码包含第、海、陆、空、文、军等字）。
//
//            if (bopdecCommon.indexGt(cusType, "-D-") && idCode.length() != 15 && idCode.length() != 18 && !bopdecCommon.containsValue(idCode, "-第-海-陆-空-文-军-")) {
//                return ValidResult.build(false, "第76条检核:申报主体类型为“对私居民”，但个人身份证件号码字符长度不为15或18位。剔除军官证（证件号码包含第、海、陆、空、文、军等字）。");
//            }
//
//            //77 （4）申报主体类型为“对私居民”，个人身份证号码包含汉字或除X以外的英文字母，剔除军官证（证件号码包含第、海、陆、空、文、军等字）。
//            if (bopdecCommon.indexGt(cusType, "-D-") && (bopdecCommon.isChinese(idCode) || idCode.matches(".*[A-WYZa-z]+.*")) && !(bopdecCommon.containsValue(idCode, "-第-海-陆-空-文-军-") || idCode.matches("[A-Za-z]{3}+.*[0-9]{12}"))) {
//                return ValidResult.build(false, "第77条检核:申报主体类型为“对私居民”，个人身份证号码包含汉字或除X以外的英文字母，剔除军官证（证件号码包含第、海、陆、空、文、军等字）。");
//            }
        }
        return null;
    }

    public WarningResult warncheckIdcode(CheckItems checkItems,String subid){
        String idCode = checkItems.getIdcode();
        String cusType = checkItems.getCustype();
        String transName = checkItems.getTransName().toLowerCase();
        if (!MdaUtils.isEmpty(idCode)) {
            byte[] buff = null;
            try {
                buff = idCode.getBytes("GB18030");
            } catch (Exception e) {
                return WarningResult.buildEmpty(subid);
            }
            int len = buff.length;
            if (len > 32) {
                return WarningResult.buildEmpty(subid);
            }
        }
        if (!"C".equals(cusType)) {
            return WarningResult.buildEmpty(subid);
        } else {
            //74（1）申报主体类型为“对公居民”或“对公非居民”，但个人身份证件号码不为空。
            if (!MdaUtils.isEmpty(cusType) && !MdaUtils.isEmpty(idCode)) {
                return WarningResult.buildEmpty(subid);
            }
        }

        if (MdaUtils.isEmpty(idCode)) {
            return WarningResult.buildEmpty(subid);
        }

        if (!transName.endsWith("sel")) {
            //75（2）申报主体类型为“对私非居民”，但个人身份证件号码字符长度为15或18位。
            if (bopdecCommon.indexGt(cusType, "-F-") && (idCode.length() == 15 || idCode.length() == 18) && !bopdecCommon.startsWithValue(idCode, "-81-82-83-")) {
                return WarningResult.build(subid, "第75条检核:申报主体类型为“对私非居民”，但个人身份证件号码字符长度为15或18位。");
            }

            //76（3）申报主体类型为“对私居民”，但个人身份证件号码字符长度不为15或18位。剔除军官证（证件号码包含第、海、陆、空、文、军等字）。

            if (bopdecCommon.indexGt(cusType, "-D-") && idCode.length() != 15 && idCode.length() != 18 && !bopdecCommon.containsValue(idCode, "-第-海-陆-空-文-军-")) {
                return WarningResult.build(subid, "第76条检核:申报主体类型为“对私居民”，但个人身份证件号码字符长度不为15或18位。剔除军官证（证件号码包含第、海、陆、空、文、军等字）。");
            }

            //77 （4）申报主体类型为“对私居民”，个人身份证号码包含汉字或除X以外的英文字母，剔除军官证（证件号码包含第、海、陆、空、文、军等字）。
            if (bopdecCommon.indexGt(cusType, "-D-") && (bopdecCommon.isChinese(idCode) || idCode.matches(".*[A-WYZa-z]+.*")) && !(bopdecCommon.containsValue(idCode, "-第-海-陆-空-文-军-") || idCode.matches("[A-Za-z]{3}+.*[0-9]{12}"))) {
                return WarningResult.build(subid, "第77条检核:申报主体类型为“对私居民”，个人身份证号码包含汉字或除X以外的英文字母，剔除军官证（证件号码包含第、海、陆、空、文、军等字）。");
            }
        }
        return WarningResult.buildEmpty(subid);
    }

    public ValidResult checkLcyacc(CheckItems checkItems){
        BigDecimal lcyamt = checkItems.getLcyamt();
        if(MdaUtils.isEmpty(lcyamt)){
            lcyamt = BigDecimal.ZERO;
        }
        String lcyacc = checkItems.getLcyacc();
        String transName = checkItems.getTransName().toLowerCase();
        BigDecimal zero = BigDecimal.ZERO;
        if (lcyamt.compareTo(zero) != 0) {
            if(MdaUtils.isEmpty(lcyacc)) {
                return ValidResult.build(false, "此字段为必输项！");
            }
        }

        if (!MdaUtils.isEmpty(lcyacc) && lcyamt.compareTo(zero) == 0) {
            return ValidResult.build(false, "此栏位必须为空");
        }
//        String inifrm = Strings.mid(transName, 1, 3);
        String inifrm = checkItems.getBopobjtyp().toLowerCase();

        if (!transName.endsWith("sel")) {
//            //54  交易对方名称以“(JN)”字样开头，且其购汇账号或现汇账号或其他账号中以“OSA”或“NRA”或“FTN”或“FTF”字样开头，“OSA”、“NRA”、“FTN”、“FTF”大小写不敏感。
//            if ((inifrm.startsWith("dba") || inifrm.startsWith("dbb") || inifrm.startsWith("dbc")) && checkItems.getOppuser().startsWith("(JN)") && bopdecCommon.startsWithValueUpper(lcyacc, "-OSA-NRA-FTN-FTF-")) {
//                return ValidResult.build(false, "第54条检核:交易对方名称以“(JN)”字样开头，且其购汇账号或现汇账号或其他账号中以“OSA”或“NRA”或“FTN”或“FTF”字样开头，“OSA”、“NRA”、“FTN”、“FTF”大小写不敏感。");
//            }
        }

        //67 “购汇账号”或“现汇账号”或“其他账号”中包含“现金”或“钞转汇”或“无”等中文字样。
        if ((inifrm.startsWith("dba") || inifrm.startsWith("dbb") || inifrm.startsWith("dbc")) && bopdecCommon.containsValue(lcyacc, "-现金-现汇-现钞-钞转汇-无-")) {
            return ValidResult.build(false, "67:“购汇账号”或“现汇账号”或“其他账号”中包含“现金”或“钞转汇”或“无”等中文字样。");
        }
        return null;
    }

    public WarningResult warncheckLcyacc(CheckItems checkItems,String subid){
        BigDecimal lcyamt = checkItems.getLcyamt();
        if(MdaUtils.isEmpty(lcyamt)){
            lcyamt = BigDecimal.ZERO;
        }
        String lcyacc = checkItems.getLcyacc();
        String transName = checkItems.getTransName().toLowerCase();
        BigDecimal zero = BigDecimal.ZERO;
        if (lcyamt.compareTo(zero) != 0) {
            if(MdaUtils.isEmpty(lcyacc)) {
                return WarningResult.buildEmpty(subid);
            }
        }

        if (!MdaUtils.isEmpty(lcyacc) && lcyamt.compareTo(zero) == 0) {
            return WarningResult.buildEmpty(subid);
        }
        String inifrm = checkItems.getBopobjtyp().toLowerCase();

        if (!transName.endsWith("sel")) {
            //54  交易对方名称以“(JN)”字样开头，且其购汇账号或现汇账号或其他账号中以“OSA”或“NRA”或“FTN”或“FTF”字样开头，“OSA”、“NRA”、“FTN”、“FTF”大小写不敏感。
            if ((inifrm.startsWith("dba") || inifrm.startsWith("dbb") || inifrm.startsWith("dbc")) && checkItems.getOppuser().startsWith("(JN)") && bopdecCommon.startsWithValueUpper(lcyacc, "-OSA-NRA-FTN-FTF-")) {
                return WarningResult.build(subid, "第54条检核:交易对方名称以“(JN)”字样开头，且其购汇账号或现汇账号或其他账号中以“OSA”或“NRA”或“FTN”或“FTF”字样开头，“OSA”、“NRA”、“FTN”、“FTF”大小写不敏感。");
            }
        }

        //67 “购汇账号”或“现汇账号”或“其他账号”中包含“现金”或“钞转汇”或“无”等中文字样。
        if ((inifrm.startsWith("dba") || inifrm.startsWith("dbb") || inifrm.startsWith("dbc")) && bopdecCommon.containsValue(lcyacc, "-现金-现汇-现钞-钞转汇-无-")) {
            return WarningResult.buildEmpty(subid);
        }
        return WarningResult.buildEmpty(subid);
    }

    public ValidResult checkLcyamt(CheckItems checkItems){
        BigDecimal zero = BigDecimal.ZERO;
        BigDecimal lcyamt = checkItems.getLcyamt();
        if(MdaUtils.isEmpty(lcyamt)){
            lcyamt = BigDecimal.ZERO;
        }
        String lcyacc = checkItems.getLcyacc();
        String txccy = checkItems.getTxccy();
        BigDecimal exrate = checkItems.getExrate();
        if(MdaUtils.isEmpty(exrate)){
            exrate = BigDecimal.ZERO;
        }
        BigDecimal txamt = checkItems.getTxamt();
        if(MdaUtils.isEmpty(txamt)){
            txamt = BigDecimal.ZERO;
        }
        BigDecimal fcyamt = checkItems.getFcyamt();
        if(MdaUtils.isEmpty(fcyamt)){
            fcyamt = BigDecimal.ZERO;
        }
        BigDecimal othamt = checkItems.getOthamt();
        if(MdaUtils.isEmpty(othamt)){
            othamt = BigDecimal.ZERO;
        }
        String txcode = checkItems.getTxcode();
        if(MdaUtils.isEmpty(txcode)){
            txcode = "";
        }
        String txcode2 = checkItems.getTxcode2();
        if(MdaUtils.isEmpty(txcode2)){
            txcode2 = "";
        }
        String transName = checkItems.getTransName().toLowerCase();
//        String inifrm = Strings.mid(transName, 1, 3);
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
        if (lcyamt.compareTo(zero) == 0) {
            if ((exrate.compareTo(zero) != 0 ||!MdaUtils.isEmpty(lcyacc))&&( !"CNY".equals(txccy))){
                return ValidResult.build(false, "此金额必须大于0");
            }
        } else {
            if (lcyamt.compareTo(zero) < 0) {
                return ValidResult.build(false, "金额不能小于0");
            }
        }
        if (( exrate.compareTo(zero) != 0 ||!MdaUtils.isEmpty(lcyacc) ) && lcyamt.compareTo(zero) == 0 && !"CNY".equals(txccy)) {
            return ValidResult.build(false, "结汇金额必输大于0");
        }
        if("dba".equals(inifrm) || "dbd".equals(inifrm)) {
            if ("CNY".equals(txccy)) {
                if (lcyamt.compareTo(BigDecimal.ZERO) != 0) {
                    return ValidResult.build(false, "收入款币种为人民币时结汇金额应为零! ");
                }
            }
        }
        if("dbb".equals(inifrm) || "dbe".equals(inifrm)) {
            if ("CNY".equals(txccy)) {
                if (lcyamt.compareTo(BigDecimal.ZERO) != 0) {
                    return ValidResult.build(false, "汇款币种为人民币时购汇金额应为零!");
                }
            }
        }
        if("dbc".equals(inifrm)) {
            if ("CNY".equals(txccy)) {
                if (lcyamt.compareTo(BigDecimal.ZERO) != 0) {
                    return ValidResult.build(false, "实际付款币种为人民币时购汇金额应为零! ");
                }
            }
        }
        if("dba".equals(inifrm)){
            if (bopdecCommon.checkAmt(txamt, lcyamt, fcyamt, othamt, "A" ) && !"CNY".equals(txccy) && ( !bopdecCommon.indexGt(txcode,"-999998-") && !bopdecCommon.indexGt(txcode2,"-999998-"))) {
                return bopdecCommon.checkErrorText("A");
            }
        }
        if("dbb".equals(inifrm)){
            if(bopdecCommon.checkAmt ( txamt, lcyamt, fcyamt,othamt,"A" ) && !"CNY".equals(txccy)  && ( !bopdecCommon.indexGt(txcode,"-999998-") && !bopdecCommon.indexGt(txcode2,"-999998-"))){
                return bopdecCommon.checkErrorText("J");
            }
        }
        if("dbc".equals(inifrm)){
            if (( exrate.compareTo(zero) != 0 ||!MdaUtils.isEmpty(lcyacc) ) && lcyamt.compareTo(zero) == 0 && !"CNY".equals(txccy)) {
                return ValidResult.build(false, "购汇金额必输大于0");
            }
            if(bopdecCommon.checkAmt ( txamt, lcyamt, fcyamt,othamt,"A" ) && !"CNY".equals(txccy)  && ( !bopdecCommon.indexGt(txcode,"-999998-") && !bopdecCommon.indexGt(txcode2,"-999998-"))){
                return bopdecCommon.checkErrorText("J");
            }
        }
        if("dbd".equals(inifrm)) {
            if (bopdecCommon.checkAmt(txamt, lcyamt, fcyamt, othamt, "A") && !"CNY".equals(txccy)) {
                return bopdecCommon.checkErrorText("A");
            }
        }
        if("dbe".equals(inifrm)){
            if (bopdecCommon.checkAmt(txamt, lcyamt, fcyamt, othamt, "A") && !"CNY".equals(txccy)) {
                return bopdecCommon.checkErrorText("J");
            }
        }
        if("dbf".equals(inifrm)){
            if (( exrate.compareTo(zero) != 0 ||!MdaUtils.isEmpty(lcyacc) ) && lcyamt.compareTo(zero) == 0 && !"CNY".equals(txccy)) {
                return ValidResult.build(false, "购汇金额必输大于0");
            }
            if (bopdecCommon.checkAmt(txamt, lcyamt, fcyamt, othamt, "A") && !"CNY".equals(txccy)) {
                return bopdecCommon.checkErrorText("J");
            }
        }
        return null;
    }

    public ValidResult checkOppuser(CheckItems checkItems){
        String oppuser = checkItems.getOppuser();
        String custName = checkItems.getCustnm();
        String lcyacc = checkItems.getLcyacc();
        String fcyacc = checkItems.getFcyacc();
        String othacc = checkItems.getOthacc();
        String rptno = checkItems.getRptno();
        String transName = checkItems.getTransName().toLowerCase();
        String basactiontype = checkItems.getBasactiontype();
        if (MdaUtils.isEmpty(oppuser)) {
            return ValidResult.build(false, "此栏位为必输项!");
        }

        String nam = checkItems.getBopobjtyp().toLowerCase();
        //bopsel交易也需要判断付款人名称是否合法
        String trsTyp = "";

        if ("dba".equals(nam) || "dbb".equals(nam) || "dbc".equals(nam)
                || "dba".equals(trsTyp) || "dbb".equals(trsTyp) || "dbc".equals(trsTyp)) {
            if (!MdaUtils.isEmpty(oppuser)) {
                if (!oppuser.matches("(\\(JN\\)|\\(JW\\))(.)+")) {
                    return ValidResult.build(false, "请填写以(JW)或(JN)打头的付款人名称");
                }
            }
        }
        //dbaadd:$baspp/oppuser
        //22号文要求，涉外收入以及境外汇款交易，对私业务付款人名称后面需要添加账号，若为速汇或者托收业务，账号填000000
        String custyp = checkItems.getCustype();
        String usrnam = checkItems.getOppuser();
        String method = checkItems.getMethod();

        if ("dba".equals(nam) || "dbb".equals(nam) || "dba".equals(trsTyp) || "dbb".equals(trsTyp)) {
            if (!"C".equals(custyp)) {
                if (MdaUtils.isEmpty(usrnam)) {
                    return ValidResult.build(false, "此字段为必输项！");
                }
                if (!usrnam.matches("(\\(JN\\)|\\(JW\\))(.)+\\[acc:(.)+\\]")) {
                    return ValidResult.build(false, "请填写\"(JW)aa[acc:账号]\"格式或\"(JN)aa[acc:账号]\"格式的账号");
                }
            }
        }
        //非查询交易才校验
        //只提供提示，不控制死
//        String inifrm = Strings.mid(transName, 1, 3).toLowerCase();
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
        if (!transName.endsWith("sel")) {
            //56 交易对方名称以“(JW)”开头，且交易对方名称中包含“OSA”或“NRA”或“FTN”或“FTF”或“境内非居民”字样。剔除“OSA”或“NRA”或“FTN”或“FTF”仅为交易对方名称中某个单词部分字母数据（根据实际数据找剔除规律，如大阪OSAKA）。
            String temp = oppuser.replaceAll(" ", "").toUpperCase();
//            if ((inifrm.startsWith("dba") || inifrm.startsWith("dbb") || inifrm.startsWith("dbc")) && oppuser.startsWith("(JW)") && (bopdecCommon.containsValueUpper(oppuser, "-OSA PAYMENT-NRA PAYMENT-FTN PAYMENT-FTF PAYMENT-ACC:OSA-ACC:NRA-ACC:FTN-ACC:FTF-境内非居民-") || temp.contains("OSAPAYMENT") || temp.contains("NRAPAYMENT") || temp.contains("FTNPAYMENT") || temp.contains("FTFPAYMENT"))) {
//                return ValidResult.build(false, "第56条检核:交易对方名称以“(JW)”开头，且交易对方名称中包含“OSA”或“NRA”或“FTN”或“FTF”或“境内非居民”字样。剔除“OSA”或“NRA”或“FTN”或“FTF”仅为交易对方名称中某个单词部分字母数据（根据实际数据找剔除规律，如大阪OSAKA）。");
//            }
            //58 交易对方名称第5个字节后不包含汉字或字母。
//            if ("dba".equals(nam) || "dbb".equals(nam) || "dbc".equals(nam)) {
//                if (oppuser.length() > 4) {
//                    if (!bopdecCommon.isChinese(Strings.mid(oppuser, 5)) && !Strings.mid(oppuser, 5).matches(".*[A-Za-z]+.*")) {
//                        return ValidResult.build(false, "第58条检核:交易对方名称第5个字节后不包含汉字或字母。");
//                    }
//                }
//            }
            String txcode = checkItems.getTxcode();
            String txcode2 = checkItems.getTxcode2();
            //当名称相同时，两个交易编码任意一个为822030才能检核过
            if ((inifrm.startsWith("dba") || inifrm.startsWith("dbb") || inifrm.startsWith("dbc")) && !MdaUtils.isEmpty(custName) && !MdaUtils.isEmpty(oppuser) && !MdaUtils.isEmpty(txcode)) {
                String cusStr = custName;
                String oppStr = oppuser;
//                if (MdaUtils.isEmpty(txcode2)) {
//                    if (oppStr.length() > 4 && (oppStr.substring(4, oppStr.length()).equals(cusStr)) && (!bopdecCommon.indexGt(txcode, "-822030-"))) {
//                        return ValidResult.build(false, "业务需求：收付款人名称相同但交易编码不为 822030");
//                    }
//                } else {
//                    if (oppStr.length() > 4 && (oppStr.substring(4, oppStr.length()).equals(cusStr)) && (!bopdecCommon.indexGt(txcode, "-822030-") && !bopdecCommon.indexGt(txcode2, "-822030-"))) {
//                        return ValidResult.build(false, "业务需求：收付款人名称相同但交易编码不为 822030");
//                    }
//                }

            }
        }
        //bopsel交易也需要判断付款人名称是否合法
        //判断字符数不能超过 128
        if (!MdaUtils.isEmpty(oppuser)) {
            String str = oppuser;
            byte[] buff = null;
            try {
                buff = str.getBytes("GB18030");
            } catch (Exception e) {
                return ValidResult.build(false, "getBytes oppuser失败");
            }
            int len = buff.length;
            if (len > 128) {
                return ValidResult.build(false, "该字段只能输入128个字符！");
            }
        }
        //69对私涉外收支，申报号码编制日期≥2017年1月1日，交易对方名称不包含“[acc:”字样和数字。
        if (!MdaUtils.isEmpty(rptno)) {
            Date rptdat = Utils.parseDate("20" + rptno.substring(12, 18), "yyyyMMdd");
            Date basdat = Utils.parseDate("20170101", "yyyyMMdd");
            if (("dba".equals(nam) || "dbb".equals(nam) || "dbc".equals(nam)) && bopdecCommon.indexGt(custyp, "-D-F-") && rptdat.compareTo(basdat) >= 0 && !bopdecCommon.containsValue(oppuser, "-[acc:-0-1-2-3-4-5-6-7-8-9-")) {
                return ValidResult.build(false, "69：对私涉外收支，申报号码编制日期≥2017年1月1日，交易对方名称不包含\"[acc:\"字样和数字");
            }
        }
        //外汇采集规范（1.3版）非居民收款 202210
//        if ("dbd".equals(nam)) {
//            if (bopdecCommon.indexGt(custyp, "-C-") && (bopdecCommon.startsWithValueUpper(lcyacc, "-NRA-FTN-FTF-FTU-EFN-EFF-EFU-") || bopdecCommon.startsWithValueUpper(fcyacc, "-NRA-FTN-FTF-FTU-EFN-EFF-EFU-") || bopdecCommon.startsWithValueUpper(othacc, "-NRA-FTN-FTF-FTU-EFN-EFF-EFU-"))) {
//                if (!usrnam.matches("(.)+\\[acc:(.)+\\]")) {
//                    return ValidResult.build(false, "付款人名称：请确认是否为非居民机构账户间境内划转资金，如\"是\"则\"付款人名称\"后应添加付款人账号信息，以名称后加\"[acc:账号]\"表示。");
//                }
//            }
//        }
        //国别
//        if (transName.endsWith("add") || transName.endsWith("ame")) {
//            String country = checkItems.getCountry();
//            if ("dba".equals(nam) || "dba".equals(trsTyp)) {
//                if (!MdaUtils.isEmpty(oppuser) && !MdaUtils.isEmpty(country)) {
//                    String opp = oppuser.trim().toUpperCase();
//                    String oldCountry = country;
//                    String str = "";
//                    List list = new ArrayList();
//                    //读取数据库
////                    String sql = "SELECT DBA.rptno,DBA.oppuser,DBG.country FROM DBL,DBA LEFT JOIN DBG ON DBG.TMPREF = DBA.INR WHERE DBA.INR=DBL.OBJINR and DBL.CURFLG = '*' and DBL.OBJTYP = 'dba' and DBG.country is not null and DBG.country != ? and upper(trim(DBA.oppuser)) = ? and DBL.Credat > sysdate-interval '1' year order by DBL.Credat DESC";
//                    List<BopdecSelectVo> bopdecSelectVoList = dbaMapper.selectByCountryAndOppuser(oldCountry, opp);
//                    for (BopdecSelectVo bopdecSelectVo : bopdecSelectVoList) {
//                        if (list == null || list.size() == 0) {
//                            str = "请注意您此次录入的交易对手国别" + oldCountry + "与之前录入的国别不同，交易对手：" + bopdecSelectVo.getOppuser() + "，申报号码：" + bopdecSelectVo.getRptno() + "，国别：" + bopdecSelectVo.getCountry() + "；";
//                            list.add(bopdecSelectVo.getCountry());
//                        } else {
//                            if (!list.contains(bopdecSelectVo.getCountry())) {
//                                str = str + "交易对手：" + bopdecSelectVo.getOppuser() + "，申报号码：" + bopdecSelectVo.getRptno() + "，国别：" + bopdecSelectVo.getCountry() + "；";
//                                list.add(bopdecSelectVo.getCountry());
//                            }
//                        }
//                    }
//                    if (bopdecSelectVoList.size() == 0) {
//                        str = str + "请确定交易对手是否为同一个以及国别录入是否正确。";
//                    }
//
//                    if (null != list && list.size() > 0) {
//                        return ValidResult.build(false, "付款人名称:" + str);
//                    }
//
//                }
//            }
//            if ("dbb".equals(nam) || "dbb".equals(trsTyp)) {
//                if (!MdaUtils.isEmpty(oppuser) && !MdaUtils.isEmpty(country)) {
//                    String opp = oppuser.trim().toUpperCase();
//                    String oldCountry = country;
//                    String str = "";
//                    List list = new ArrayList();
//                    //读取数据库
////                    String sql = "SELECT DBB.rptno,DBB.oppuser,DBH.country FROM DBL,DBB LEFT JOIN DBH ON DBB.INR = DBH.TMPREF LEFT JOIN DBN ON DBB.INR = DBN.TMPREF  where DBB.INR = DBL.OBJINR and DBL.CURFLG = '*' and DBL.OBJTYP = 'dbb' and DBH.country is not null and DBH.country != ? and upper(trim(DBB.oppuser)) = ? and DBL.Credat > sysdate-interval '1' year order by DBL.Credat DESC";
//
//                    List<BopdecSelectVo> bopdecSelectVoList = dbbMapper.selectByCountryAndOppuser(oldCountry, opp);
//                    for (BopdecSelectVo bopdecSelectVo : bopdecSelectVoList) {
//                        if (list == null || list.size() == 0) {
//                            str = "请注意您此次录入的交易对手国别" + oldCountry + "与之前录入的国别不同，交易对手：" + bopdecSelectVo.getOppuser() + "，申报号码：" + bopdecSelectVo.getRptno() + "，国别：" + bopdecSelectVo.getCountry() + "；";
//                            list.add(bopdecSelectVo.getCountry());
//                        } else {
//                            if (!list.contains(bopdecSelectVo.getCountry())) {
//                                str = str + "交易对手：" + bopdecSelectVo.getOppuser() + "，申报号码：" + bopdecSelectVo.getRptno() + "，国别：" + bopdecSelectVo.getCountry() + "；";
//                                list.add(bopdecSelectVo.getCountry());
//                            }
//                        }
//                    }
//                    if (bopdecSelectVoList.size() == 0) {
//                        str = str + "请确定交易对手是否为同一个以及国别录入是否正确。";
//                    }
//
//                    if (null != list && list.size() > 0) {
//                        return ValidResult.build(false, "付款人名称:" + str);
//                    }
//                }
//            }
//            if ("dbc".equals(nam) || "dbc".equals(trsTyp)) {
//                if (!MdaUtils.isEmpty(oppuser) && !MdaUtils.isEmpty(country)) {
//                    String opp = oppuser.trim().toUpperCase();
//                    String oldCountry = country;
//                    String str = "";
//                    List list = new ArrayList();
//                    //读取数据库
////                    String sql = "SELECT DBC.rptno,DBC.oppuser,DBK.country FROM DBL,DBC LEFT JOIN DBK ON DBC.INR = DBK.TMPREF LEFT JOIN DBP ON DBC.INR = DBP.TMPREF where DBC.INR = DBL.OBJINR and DBL.CURFLG = '*' and DBL.OBJTYP = 'dbc' and DBK.country is not null and DBK.country != ? and upper(trim(DBC.oppuser)) = ? and DBL.Credat > sysdate-interval '1' year order by DBL.Credat DESC";
//
//                    List<BopdecSelectVo> bopdecSelectVoList = dbcMapper.selectByCountryAndOppuser(oldCountry, opp);
//                    for (BopdecSelectVo bopdecSelectVo : bopdecSelectVoList) {
//                        if (list == null || list.size() == 0) {
//                            str = "请注意您此次录入的交易对手国别" + oldCountry + "与之前录入的国别不同，交易对手：" + bopdecSelectVo.getOppuser() + "，申报号码：" + bopdecSelectVo.getRptno() + "，国别：" + bopdecSelectVo.getCountry() + "；";
//                            list.add(bopdecSelectVo.getCountry());
//                        } else {
//                            if (!list.contains(bopdecSelectVo.getCountry())) {
//                                str = str + "交易对手：" + bopdecSelectVo.getOppuser() + "，申报号码：" + bopdecSelectVo.getRptno() + "，国别：" + bopdecSelectVo.getCountry() + "；";
//                                list.add(bopdecSelectVo.getCountry());
//                            }
//                        }
//                    }
//                    if (bopdecSelectVoList.size() == 0) {
//                        str = str + "请确定交易对手是否为同一个以及国别录入是否正确。";
//                    }
//
//                    if (null != list && list.size() > 0) {
//                        return ValidResult.build(false, "付款人名称:" + str);
//                    }
//                }
//            }
//        }
//        if("dbdame".equals(transName) && "C".equals(basactiontype)) {
//            if(!MdaUtils.isEmpty(oppuser)) {
//                String usrname = oppuser;
//                //读取数据库
//                Dbd dbd = dbdMapper.selectByActypeAndRptno("A",rptno);
//                if(MdaUtils.isEmpty(dbd)){
//                    return ValidResult.build(false, "提示:数据库异常，请联系管理员！");
//                }
//
//                String oldoppuser = dbd.getOppuser();
//                if(!MdaUtils.isEmpty(oldoppuser)) {
//                    if(!usrname.matches("(.)*\\[acc:(.)*\\](.)*") && oldoppuser.matches("(.)*\\[acc:(.)*\\](.)*")) {
//                        return ValidResult.build(false, "“[acc:账号]”不允许进行修改，应报送删除信息后重新进行报送。");
//                    }
//                    if(usrname.matches("(.)*\\[acc:(.)*\\](.)*") && !oldoppuser.matches("(.)*\\[acc:(.)*\\](.)*")) {
//                        return ValidResult.build(false, "“[acc:账号]”不允许进行添加，应报送删除信息后重新进行报送。");
//                    }
//                }
//            }
//        }
        return null;
    }

    public WarningResult warncheckOppuser(CheckItems checkItems,String subid){
        String oppuser = checkItems.getOppuser();
        String custName = checkItems.getCustnm();
        String lcyacc = checkItems.getLcyacc();
        String fcyacc = checkItems.getFcyacc();
        String othacc = checkItems.getOthacc();
        String rptno = checkItems.getRptno();
        String transName = checkItems.getTransName().toLowerCase();
        String basactiontype = checkItems.getBasactiontype();
        if (MdaUtils.isEmpty(oppuser)) {
            return WarningResult.buildEmpty(subid);
        }

        String nam = checkItems.getBopobjtyp().toLowerCase();
        //bopsel交易也需要判断付款人名称是否合法
        String trsTyp = "";

        if ("dba".equals(nam) || "dbb".equals(nam) || "dbc".equals(nam)
                || "dba".equals(trsTyp) || "dbb".equals(trsTyp) || "dbc".equals(trsTyp)) {
            if (!MdaUtils.isEmpty(oppuser)) {
                if (!oppuser.matches("(\\(JN\\)|\\(JW\\))(.)+")) {
                    return WarningResult.buildEmpty(subid);
                }
            }
        }
        //dbaadd:$baspp/oppuser
        //22号文要求，涉外收入以及境外汇款交易，对私业务付款人名称后面需要添加账号，若为速汇或者托收业务，账号填000000
        String custyp = checkItems.getCustype();
        String usrnam = checkItems.getOppuser();
        String method = checkItems.getMethod();

        if ("dba".equals(nam) || "dbb".equals(nam) || "dba".equals(trsTyp) || "dbb".equals(trsTyp)) {
            if (!"C".equals(custyp)) {
                if (MdaUtils.isEmpty(usrnam)) {
                    return WarningResult.buildEmpty(subid);
                }
                if (!usrnam.matches("(\\(JN\\)|\\(JW\\))(.)+\\[acc:(.)+\\]")) {
                    return WarningResult.buildEmpty(subid);
                }
            }
        }
        //非查询交易才校验
        //只提供提示，不控制死
//        String inifrm = Strings.mid(transName, 1, 3).toLowerCase();
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
        if (!transName.endsWith("sel")) {
            //56 交易对方名称以“(JW)”开头，且交易对方名称中包含“OSA”或“NRA”或“FTN”或“FTF”或“境内非居民”字样。剔除“OSA”或“NRA”或“FTN”或“FTF”仅为交易对方名称中某个单词部分字母数据（根据实际数据找剔除规律，如大阪OSAKA）。
            String temp = oppuser.replaceAll(" ", "").toUpperCase();
            if ((inifrm.startsWith("dba") || inifrm.startsWith("dbb") || inifrm.startsWith("dbc")) && oppuser.startsWith("(JW)") && (bopdecCommon.containsValueUpper(oppuser, "-OSA PAYMENT-NRA PAYMENT-FTN PAYMENT-FTF PAYMENT-ACC:OSA-ACC:NRA-ACC:FTN-ACC:FTF-境内非居民-") || temp.contains("OSAPAYMENT") || temp.contains("NRAPAYMENT") || temp.contains("FTNPAYMENT") || temp.contains("FTFPAYMENT"))) {
                return WarningResult.build(subid, "第56条检核:交易对方名称以“(JW)”开头，且交易对方名称中包含“OSA”或“NRA”或“FTN”或“FTF”或“境内非居民”字样。剔除“OSA”或“NRA”或“FTN”或“FTF”仅为交易对方名称中某个单词部分字母数据（根据实际数据找剔除规律，如大阪OSAKA）。");
            }
            //58 交易对方名称第5个字节后不包含汉字或字母。
            if ("dba".equals(nam) || "dbb".equals(nam) || "dbc".equals(nam)) {
                if (oppuser.length() > 4) {
                    if (!bopdecCommon.isChinese(Strings.mid(oppuser, 5)) && !Strings.mid(oppuser, 5).matches(".*[A-Za-z]+.*")) {
                        return WarningResult.build(subid, "第58条检核:交易对方名称第5个字节后不包含汉字或字母。");
                    }
                }
            }
            String txcode = checkItems.getTxcode();
            String txcode2 = checkItems.getTxcode2();
            //当名称相同时，两个交易编码任意一个为822030才能检核过
            if ((inifrm.startsWith("dba") || inifrm.startsWith("dbb") || inifrm.startsWith("dbc")) && !MdaUtils.isEmpty(custName) && !MdaUtils.isEmpty(oppuser) && !MdaUtils.isEmpty(txcode)) {
                String cusStr = custName;
                String oppStr = oppuser;
                if (MdaUtils.isEmpty(txcode2)) {
                    if (oppStr.length() > 4 && (oppStr.substring(4, oppStr.length()).equals(cusStr)) && (!bopdecCommon.indexGt(txcode, "-822030-"))) {
                        return WarningResult.build(subid, "业务需求：收付款人名称相同但交易编码不为 822030");
                    }
                } else {
                    if (oppStr.length() > 4 && (oppStr.substring(4, oppStr.length()).equals(cusStr)) && (!bopdecCommon.indexGt(txcode, "-822030-") && !bopdecCommon.indexGt(txcode2, "-822030-"))) {
                        return WarningResult.build(subid, "业务需求：收付款人名称相同但交易编码不为 822030");
                    }
                }

            }
        }
        //bopsel交易也需要判断付款人名称是否合法
        //判断字符数不能超过 128
        if (!MdaUtils.isEmpty(oppuser)) {
            String str = oppuser;
            byte[] buff = null;
            try {
                buff = str.getBytes("GB18030");
            } catch (Exception e) {
                return WarningResult.buildEmpty(subid);
            }
            int len = buff.length;
            if (len > 128) {
                return WarningResult.buildEmpty(subid);
            }
        }
        //69对私涉外收支，申报号码编制日期≥2017年1月1日，交易对方名称不包含“[acc:”字样和数字。
        if (!MdaUtils.isEmpty(rptno)) {
            Date rptdat = Utils.parseDate("20" + rptno.substring(12, 18), "yyyyMMdd");
            Date basdat = Utils.parseDate("20170101", "yyyyMMdd");
            if (("dba".equals(nam) || "dbb".equals(nam) || "dbc".equals(nam)) && bopdecCommon.indexGt(custyp, "-D-F-") && rptdat.compareTo(basdat) >= 0 && !bopdecCommon.containsValue(oppuser, "-[acc:-0-1-2-3-4-5-6-7-8-9-")) {
                return WarningResult.buildEmpty(subid);
            }
        }
        //外汇采集规范（1.3版）非居民收款 202210
        if ("dbd".equals(nam)) {
            if (bopdecCommon.indexGt(custyp, "-C-") && (bopdecCommon.startsWithValueUpper(lcyacc, "-NRA-FTN-FTF-FTU-EFN-EFF-EFU-") || bopdecCommon.startsWithValueUpper(fcyacc, "-NRA-FTN-FTF-FTU-EFN-EFF-EFU-") || bopdecCommon.startsWithValueUpper(othacc, "-NRA-FTN-FTF-FTU-EFN-EFF-EFU-"))) {
                if (!usrnam.matches("(.)+\\[acc:(.)+\\]")) {
                    return WarningResult.build(subid, "付款人名称：请确认是否为非居民机构账户间境内划转资金，如\"是\"则\"付款人名称\"后应添加付款人账号信息，以名称后加\"[acc:账号]\"表示。");
                }
            }
        }
        //国别
//        if (transName.endsWith("add") || transName.endsWith("ame")) {
        String country = checkItems.getCountry();
        if ("dba".equals(nam) || "dba".equals(trsTyp)) {
            if (!MdaUtils.isEmpty(oppuser) && !MdaUtils.isEmpty(country)) {
                String opp = oppuser.trim().toUpperCase();
                String oldCountry = country;
                String str = "";
                List list = new ArrayList();
                //读取数据库
//                    String sql = "SELECT DBA.rptno,DBA.oppuser,DBG.country FROM DBL,DBA LEFT JOIN DBG ON DBG.TMPREF = DBA.INR WHERE DBA.INR=DBL.OBJINR and DBL.CURFLG = '*' and DBL.OBJTYP = 'dba' and DBG.country is not null and DBG.country != ? and upper(trim(DBA.oppuser)) = ? and DBL.Credat > sysdate-interval '1' year order by DBL.Credat DESC";
                List<BopdecSelectVo> bopdecSelectVoList = dbaMapper.selectByCountryAndOppuser(oldCountry, opp);
                for (BopdecSelectVo bopdecSelectVo : bopdecSelectVoList) {
                    if (list == null || list.size() == 0) {
                        str = "请注意您此次录入的交易对手国别" + oldCountry + "与之前录入的国别不同，交易对手：" + bopdecSelectVo.getOppuser() + "，申报号码：" + bopdecSelectVo.getRptno() + "，国别：" + bopdecSelectVo.getCountry() + "；";
                        list.add(bopdecSelectVo.getCountry());
                    } else {
                        if (!list.contains(bopdecSelectVo.getCountry())) {
                            str = str + "交易对手：" + bopdecSelectVo.getOppuser() + "，申报号码：" + bopdecSelectVo.getRptno() + "，国别：" + bopdecSelectVo.getCountry() + "；";
                            list.add(bopdecSelectVo.getCountry());
                        }
                    }
                }
                if (bopdecSelectVoList.size() == 0) {
                    str = str + "请确定交易对手是否为同一个以及国别录入是否正确。";
                }

                if (null != list && list.size() > 0) {
                    return WarningResult.build(subid, "付款人名称:" + str);
                }

            }
        }
        if ("dbb".equals(nam) || "dbb".equals(trsTyp)) {
            if (!MdaUtils.isEmpty(oppuser) && !MdaUtils.isEmpty(country)) {
                String opp = oppuser.trim().toUpperCase();
                String oldCountry = country;
                String str = "";
                List list = new ArrayList();
                //读取数据库
//                    String sql = "SELECT DBB.rptno,DBB.oppuser,DBH.country FROM DBL,DBB LEFT JOIN DBH ON DBB.INR = DBH.TMPREF LEFT JOIN DBN ON DBB.INR = DBN.TMPREF  where DBB.INR = DBL.OBJINR and DBL.CURFLG = '*' and DBL.OBJTYP = 'dbb' and DBH.country is not null and DBH.country != ? and upper(trim(DBB.oppuser)) = ? and DBL.Credat > sysdate-interval '1' year order by DBL.Credat DESC";

                List<BopdecSelectVo> bopdecSelectVoList = dbbMapper.selectByCountryAndOppuser(oldCountry, opp);
                for (BopdecSelectVo bopdecSelectVo : bopdecSelectVoList) {
                    if (list == null || list.size() == 0) {
                        str = "请注意您此次录入的交易对手国别" + oldCountry + "与之前录入的国别不同，交易对手：" + bopdecSelectVo.getOppuser() + "，申报号码：" + bopdecSelectVo.getRptno() + "，国别：" + bopdecSelectVo.getCountry() + "；";
                        list.add(bopdecSelectVo.getCountry());
                    } else {
                        if (!list.contains(bopdecSelectVo.getCountry())) {
                            str = str + "交易对手：" + bopdecSelectVo.getOppuser() + "，申报号码：" + bopdecSelectVo.getRptno() + "，国别：" + bopdecSelectVo.getCountry() + "；";
                            list.add(bopdecSelectVo.getCountry());
                        }
                    }
                }
                if (bopdecSelectVoList.size() == 0) {
                    str = str + "请确定交易对手是否为同一个以及国别录入是否正确。";
                }

                if (null != list && list.size() > 0) {
                    return WarningResult.build(subid, "付款人名称:" + str);
                }
            }
        }
        if ("dbc".equals(nam) || "dbc".equals(trsTyp)) {
            if (!MdaUtils.isEmpty(oppuser) && !MdaUtils.isEmpty(country)) {
                String opp = oppuser.trim().toUpperCase();
                String oldCountry = country;
                String str = "";
                List list = new ArrayList();
                //读取数据库
//                    String sql = "SELECT DBC.rptno,DBC.oppuser,DBK.country FROM DBL,DBC LEFT JOIN DBK ON DBC.INR = DBK.TMPREF LEFT JOIN DBP ON DBC.INR = DBP.TMPREF where DBC.INR = DBL.OBJINR and DBL.CURFLG = '*' and DBL.OBJTYP = 'dbc' and DBK.country is not null and DBK.country != ? and upper(trim(DBC.oppuser)) = ? and DBL.Credat > sysdate-interval '1' year order by DBL.Credat DESC";

                List<BopdecSelectVo> bopdecSelectVoList = dbcMapper.selectByCountryAndOppuser(oldCountry, opp);
                for (BopdecSelectVo bopdecSelectVo : bopdecSelectVoList) {
                    if (list == null || list.size() == 0) {
                        str = "请注意您此次录入的交易对手国别" + oldCountry + "与之前录入的国别不同，交易对手：" + bopdecSelectVo.getOppuser() + "，申报号码：" + bopdecSelectVo.getRptno() + "，国别：" + bopdecSelectVo.getCountry() + "；";
                        list.add(bopdecSelectVo.getCountry());
                    } else {
                        if (!list.contains(bopdecSelectVo.getCountry())) {
                            str = str + "交易对手：" + bopdecSelectVo.getOppuser() + "，申报号码：" + bopdecSelectVo.getRptno() + "，国别：" + bopdecSelectVo.getCountry() + "；";
                            list.add(bopdecSelectVo.getCountry());
                        }
                    }
                }
                if (bopdecSelectVoList.size() == 0) {
                    str = str + "请确定交易对手是否为同一个以及国别录入是否正确。";
                }

                if (null != list && list.size() > 0) {
                    return WarningResult.build(subid, "付款人名称:" + str);
                }
            }
        }
//        }
//        if("dbdame".equals(transName) && "C".equals(basactiontype)) {
//            if(!MdaUtils.isEmpty(oppuser)) {
//                String usrname = oppuser;
//                //读取数据库
//                Dbd dbd = dbdMapper.selectByActypeAndRptno("A",rptno);
//                if(MdaUtils.isEmpty(dbd)){
//                    return WarningResult.buildEmpty(subid);
//                }
//
//                String oldoppuser = dbd.getOppuser();
//                if(!MdaUtils.isEmpty(oldoppuser)) {
//                    if(!usrname.matches("(.)*\\[acc:(.)*\\](.)*") && oldoppuser.matches("(.)*\\[acc:(.)*\\](.)*")) {
//                        return WarningResult.buildEmpty(subid);
//                    }
//                    if(usrname.matches("(.)*\\[acc:(.)*\\](.)*") && !oldoppuser.matches("(.)*\\[acc:(.)*\\](.)*")) {
//                        return WarningResult.buildEmpty(subid);
//                    }
//                }
//            }
//        }
        return WarningResult.buildEmpty(subid);
    }

    public ValidResult checkTxrem(CheckItems checkItems){
        String custnm = checkItems.getCustnm();
        String oppuser = checkItems.getOppuser();
        String custype = checkItems.getCustype();
        String txcode = checkItems.getTxcode();
        String txcode2 = checkItems.getTxcode2();
        String tx2rem = checkItems.getTx2rem();
        String txrem = checkItems.getTxrem();
        String zbxmszh = checkItems.getZbxmszh();
        String paytype = checkItems.getPaytype();
        String transName = checkItems.getTransName().toLowerCase();
//            String inifrm = Strings.mid(transName, 1, 3);
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
        String dir = "O";

        if (MdaUtils.isEmpty(txrem)) {
            return ValidResult.build(false, "此字段为必输项！");
        }
        //checkTxrem();
        //添加字段长度检查，不能超过 50-》256
        if (!MdaUtils.isEmpty(txrem)) {
            String str = txrem;
            byte[] buff = null;
            try {
                buff = str.getBytes("GB18030");
            } catch (Exception e) {
                return ValidResult.build(false, "getBytes fail...");
            }
            int len = buff.length;
            if (len > 256) {
                return ValidResult.build(false, "该字段只能输入256个字符！");
            }
            //非查询交易才校验
            //只提供提示，不控制死
//            if (!transName.endsWith("sel")) {
//                //49交易对方名称以“(JN)”字样开头，且仅校验交易附言1，涉外收入不包含“收到境内非居民款项”,对外支出不包含“向境内非居民支付款项”。
//                if (oppuser.startsWith("(JN)") && ((inifrm.startsWith("dba") && !txrem.contains("收到境内非居民款项")) || ("-dbb-dbc-".indexOf(inifrm) > 0 && !txrem.contains("向境内非居民支付款项")))) {
//                    return ValidResult.build(false, "第49条核查:交易对方名称以“(JN)”字样开头，且仅校验交易附言1，涉外收入不包含“收到境内非居民款项”,对外支出不包含“向境内非居民支付款项”。");
//                }
//                //38（1）涉外收入但交易附言包含“支出”、“支付”、“付汇”、“付款”、“进口”字样。剔除收付款类型为“退款”或交易附言含“运费、佣金、运输费”字样数据。
//                //if (inifrm.startsWith("dba")   && bopdecCommon.containsValue($txrem,"-支出-支付-付汇-付款-进口-") && bopdecCommon.indexLe($paytype,"-R-") && !bopdecCommon.containsValue($txrem,"-运费-佣金-运输费-"))
//                if (inifrm.startsWith("dba") && bopdecCommon.indexLe(paytype, "-R-") && (((txcode.startsWith("1") || txcode.startsWith("221")) && bopdecCommon.containsValue(txrem, "-进口-延期付款利息-货到付款-")) || bopdecCommon.containsValue(txrem, "-支出-付汇-付款-汇出-付出-撤出-预付-"))) {
//                    return ValidResult.build(false, "第38条核查:涉外收入但交易附言包含“支出”、“付汇”、“付款”、“汇出”、“付出”、“撤出”、“预付”字样；或涉外收入交易编码以1开头和以221开头但交易附言包含“进口”、“延期付款利息”、“货到付款”字样。剔除收付款类型为“退款”数据。");
//                }
//                //39（2）对外支付但交易附言包含“收入”、“收到”、“收汇”、“收款”、“出口”字样。剔除收付款类型为“退款”或交易附言含“运费、佣金、运输费、出口加工区”字样数据。
//                if ("-dbb-dbc-".indexOf(inifrm) > 0 && bopdecCommon.indexLe(paytype, "-R-") && !bopdecCommon.containsValue(txrem, "-出口加工区-接收机-接收器-接收盒-收款机-") && (bopdecCommon.containsValue(txrem, "-收入-收到-收汇-收款-接收-接受-汇入-调回-汇回-收回-") || ((txcode.startsWith("1") || txcode.startsWith("221")) && bopdecCommon.containsValue(txrem, "-出口-")))) {
//                    return ValidResult.build(false, "核查第39条:涉外支出但交易附言包含“收入”、“收到”、“收汇”、“收款”、“接收”、“接受”、“汇入”、“调回”、“汇回”、“收回”字样；或涉外支出交易编码以1开头和以221开头但交易附言包含“出口”字样。剔除收付款类型为“退款”或交易附言含“出口加工区”、“接收机”、“接收器”、“接收盒”、“收款机”字样数据。");
//                }
//                //55  交易对方名称标注以“（JW）”字样开头，但交易附言包含“OSA”或“NRA”或“境内非居民”或“FTN”或“FTF”字样。
//                if (oppuser.startsWith("(JW)") && bopdecCommon.containsValueUpper(txrem, "-OSA-NRA-境内非居民-FTN-FTF-")) {
//                    return ValidResult.build(false, "第55条核查:交易对方名称以“(JW)”开头，交易附言不能包含“OSA”或“NRA”或“境内非居民”或“FTN”或“FTF”字样");
//                }
//                //99 交易编码为“121010一般贸易”，但交易附言包含“进料/来料/黄金/边贸/离岸/贷款/加工费/特殊/保税区/无需报关/未报关/软件开发/广告费/本金/服务(非“服务器”）/网上/报酬/留学/生活费/学费/境内交易”。
//                if (bopdecCommon.indexGt(txcode, "-121010-") && (bopdecCommon.containsValue(txrem, "-进料-来料-黄金-边贸-离岸-贷款-加工费-特殊-保税区-无需报关-未报关-软件开发-广告费-本金-网上-报酬-留学-生活费-学费-境内交易-市场采购贸易-") || (!txrem.contains("服务器") && txrem.contains("服务"))) && !bopdecCommon.containsValue(txrem, "-特殊流体-特殊监管-特殊退汇-")) {
//                    return ValidResult.build(false, "第99条核查:交易编码为“121010一般贸易”，但交易附言包含“进料/来料/黄金/边贸/离岸/贷款/加工费/特殊/保税区/无需报关/未报关/软件开发/广告费/本金/服务(非“服务器”）/网上/报酬/留学/生活费/学费/境内交易/市场采购贸易”。剔除交易附言含“特殊流体”、“特殊监管”、“特殊退汇”字样。");
//                }
//                //100 交易编码为“121020进料加工贸易”，但交易附言不包含“进料”或包含“一般贸易/来料/黄金/进口加工/电子商务”。
//                if (bopdecCommon.indexGt(txcode, "-121020-") && (bopdecCommon.containsValue(txrem, "-一般贸易-来料-黄金-进口加工-电子商务-市场采购贸易-") || !txrem.contains("进料"))) {
//                    return ValidResult.build(false, "第100条核查:交易编码为“121020进料加工贸易”，但交易附言不包含“进料”或包含“一般贸易/来料/黄金/进口加工/电子商务/市场采购贸易”");
//                }
//                //101 交易编码为“121030海关特殊监管区域及保税监管场所进出境物流货物”，但交易附言包含“进料/来料/离岸/黄金/一般贸易”。
//                if (bopdecCommon.indexGt(txcode, "-121030-") && bopdecCommon.containsValue(txrem, "-进料-来料-离岸-黄金-一般贸易-市场采购贸易-")) {
//                    return ValidResult.build(false, "第101条核查:交易编码为“121030海关特殊监管区域及保税监管场所进出境物流货物”，但交易附言包含“进料/来料/离岸/黄金/一般贸易/市场采购贸易”");
//                }
//                //102 交易编码为“121080边境小额贸易”，但交易附言包含“台/边民互市/黄金/一般贸易/易货（非贸易货）”。
//                if (bopdecCommon.indexGt(txcode, "-121080-") && (bopdecCommon.containsValue(txrem, "-台-边民互市-黄金-一般贸易-市场采购贸易-") || (txrem.contains("易货") && !txrem.contains("贸易货")))) {
//                    return ValidResult.build(false, "第102条核查:交易编码为“121080边境小额贸易”，但交易附言包含“台/边民互市/黄金/一般贸易/易货（非贸易货）/市场采购贸易”。");
//                }
//                //103 交易编码为“121090对外承包工程货物出口”，但交易附言不包含“承包工程”或包含“黄金/一般贸易/边境/小额/维修/维护/服务/劳务”。
//                if (bopdecCommon.indexGt(txcode, "-121090-") && (!bopdecCommon.containsValue(txrem, "-承包工程-") || bopdecCommon.containsValue(txrem, "-黄金-一般贸易-边境-小额-维修-维护-服务-劳务-市场采购贸易-"))) {
//                    return ValidResult.build(false, "第103条核查:交易编码为“121090对外承包工程货物出口”，但交易附言不包含“承包工程”或包含“黄金/一般贸易/边境/小额/维修/维护/服务/劳务/市场采购贸易”。");
//                }
//                //104 交易编码为“121990其他纳入海关统计的货物贸易”，但包含“未纳入/不纳入/没纳入/一般贸易/来料/进料/黄金/边境小额/不报关/不出境/未报关/无需报关/无须报关”。
//                if (bopdecCommon.indexGt(txcode, "-121990-") && bopdecCommon.containsValue(txrem, "-未纳入-不纳入-没纳入-一般贸易-来料-进料-黄金-边境小额-不报关-不出境-未报关-无需报关-无须报关-")) {
//                    return ValidResult.build(false, "第104条核查:交易编码为“121990其他纳入海关统计的货物贸易”，但包含“未纳入/不纳入/没纳入/一般贸易/来料/进料/黄金/边境小额/不报关/不出境/未报关/无需报关/无须报关”");
//                }
//                //105 交易编码为“122010离岸转手买卖”，但交易附言不包含“离岸”或包含“一般贸易/来料/进料/转口/在岸/特殊/保税区”。
//                if (bopdecCommon.indexGt(txcode, "-122010-") && (bopdecCommon.containsValue(txrem, "-一般贸易-来料-进料-转口-在岸-特殊-保税区-") || !bopdecCommon.containsValue(txrem, "-离岸-")) && !bopdecCommon.containsValue(txrem, "-特殊流体-特殊监管-特殊退汇-")) {
//                    return ValidResult.build(false, "第105条核查:交易编码为“122010离岸转手买卖”，但交易附言不包含“离岸”或包含“一般贸易/来料/进料/转口/在岸/特殊/保税区”。剔除交易附言含“特殊流体”、“特殊监管”、“特殊退汇”字样。");
//                }
//                //106 交易编码为“122020未纳入海关统计的非货币黄金”，但交易附言不包含“金”或包含“金属/金币/珠宝/手表/饰/一般贸易”。
//                if (bopdecCommon.indexGt(txcode, "-122020-") && (bopdecCommon.containsValue(txrem, "-金属-金币-珠宝-手表-饰-一般贸易-") || !txrem.contains("金"))) {
//                    return ValidResult.build(false, "第106条核查:交易编码为“122020未纳入海关统计的非货币黄金”，但交易附言不包含“金”或包含“金属/金币/珠宝/手表/饰/一般贸易”。");
//                }
//                //107 交易编码为“122030未纳入海关统计的网络购物”，但交易附言包含“黄金/来料/进料/一般贸易/软件/音像/游戏币”。
//                if (bopdecCommon.indexGt(txcode, "-122030-") && bopdecCommon.containsValue(txrem, "-黄金-来料-进料-一般贸易-软件-音像-游戏币-")) {
//                    return ValidResult.build(false, "第107条核查:交易编码为“122030未纳入海关统计的网络购物”，但交易附言包含“黄金/来料/进料/一般贸易/软件/音像/游戏币”");
//                }
//                //108 交易编码为“122990其他未纳入海关统计的货物贸易”，但交易附言包含“网/海淘/黄金/一般贸易/来料/进料/电子商务/虚拟/软件/边境小额/旅游购物”。
//                if (bopdecCommon.indexGt(txcode, "-122990-") && bopdecCommon.containsValue(txrem, "-网购-网络-海淘-黄金-一般贸易-来料-进料-电子商务-虚拟-软件-边境小额-旅游购物-市场采购贸易-已报关-")) {
//                    return ValidResult.build(false, "第108条核查:交易编码为“122990其他未纳入海关统计的货物贸易”，但交易附言包含“网购/网络/海淘/黄金/一般贸易/来料/进料/电子商务/虚拟/软件/边境小额/旅游购物/市场采购贸易/已报关”。");
//                }
//                //109 交易编码为“221000来料加工工缴费收入/出料加工工缴费支出”，但交易附言不包含“来料/工缴费/加工费/出料/带料”字样或包含“一般贸易/进料/货款”。
//                if (bopdecCommon.indexGt(txcode, "-221000-") && (!bopdecCommon.containsValue(txrem, "-来料-工缴费-加工费-出料-带料-") || bopdecCommon.containsValue(txrem, "-一般贸易-进料-货款-"))) {
//                    return ValidResult.build(false, "第109条核查:交易编码为“221000来料加工工缴费收入/出料加工工缴费支出”，但交易附言不包含“来料/工缴费/加工费/出料/带料”字样或包含“一般贸易/进料/货款”");
//                }
//                //110 交易编码为“222011涉及我国出口的海洋货运服务”，但交易附言包含“进口/空运/陆运/佣金/货款/代理/客运/租（但不包含‘人员’）/速遣费/滞期费”。
//                if (bopdecCommon.indexGt(txcode, "-222011-") && (bopdecCommon.containsValue(txrem, "-进口-空运-陆运-佣金-货款-代理-客运-速遣费-滞期费-") || (!bopdecCommon.containsValue(txrem, "-人员-") && bopdecCommon.containsValue(txrem, "-租-")))) {
//                    return ValidResult.build(false, "第110条核查:交易编码为“222011涉及我国出口的海洋货运服务”，但交易附言包含“进口/空运/陆运/佣金/货款/代理/客运/租（但不包含‘人员’）/速遣费/滞期费”");
//                }
//                //111 交易编码为“222012涉及我国进口的海洋货运服务”，但交易附言包含“出口/空运/陆运/佣金/货款/代理/客运/租（但不包含‘人员’）/速遣费/滞期费”。
//                if (bopdecCommon.indexGt(txcode, "-222012-") && (bopdecCommon.containsValue(txrem, "-出口-空运-陆运-佣金-货款-代理-客运-速遣费-滞期费-") || (!bopdecCommon.containsValue(txrem, "-人员-") && bopdecCommon.containsValue(txrem, "-租-")))) {
//                    return ValidResult.build(false, "第111条核查:交易编码为“222012涉及我国进口的海洋货运服务”，但交易附言包含“出口/空运/陆运/佣金/货款/代理/客运/租（但不包含‘人员’）/速遣费/滞期费”");
//                }
//                //112 交易编码为“222013不涉及我国进出口的海洋货运服务”，但交易附言包含“空运/陆运/港口/仓储/装卸/搬运/引航/牵引/导航/检/修/使%费/客运”。
//                //由于%不确定暂时先注释
//                //    if (bopdecCommon.indexGt($txcode,"-222013-")  && bopdecCommon.containsValue($txrem,"-空运-陆运-港口-仓储-装卸-搬运-引航-牵引-导航-检-修-使%费-客运-"))
//                if (bopdecCommon.indexGt(txcode, "-222013-") && (bopdecCommon.containsValue(txrem, "-空运-陆运-港口-仓储-装卸-搬运-引航-牵引-导航-检-修-客运-") || bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(txrem, "使", "费")))) {
//                    return ValidResult.build(false, "第112条核查:交易编码为“222013不涉及我国进出口的海洋货运服务”，但交易附言包含“空运/陆运/港口/仓储/装卸/搬运/引航/牵引/导航/检/修/使%费/客运”");
//                }
//                //113 交易编码为“222014海运客运”，但交易附言包含“空运/陆运/出口/进口”。
//                if (bopdecCommon.indexGt(txcode, "-222014-") && bopdecCommon.containsValue(txrem, "-空运-陆运-出口-进口-")) {
//                    return ValidResult.build(false, "第113条核查:交易编码为“222014海运客运”，但交易附言包含“空运/陆运/出口/进口”");
//                }
//                //114 交易编码为“222019其他海运服务”，但交易附言包含“其他/空运/陆运/速遣/清关/入渔/滞/运费/保险/修”。
//                if (bopdecCommon.indexGt(txcode, "-222019-") && bopdecCommon.containsValue(txrem, "-空运-陆运-速遣-清关-入渔-滞-运费-保险-修-")) {
//                    return ValidResult.build(false, "第114条核查:交易编码为“222019其他海运服务”，但交易附言包含“空运/陆运/速遣/清关/入渔/滞/运费/保险/修”");
//                }
//                //115 交易编码为“222021涉及我国出口的空中货运服务”，但交易附言包含“进口/海运/陆运/佣金/货款/代理/客运/租”。
//                if (bopdecCommon.indexGt(txcode, "-222021-") && bopdecCommon.containsValue(txrem, "-进口-海运-陆运-佣金-货款-代理-客运-租-")) {
//                    return ValidResult.build(false, "第115条核查:交易编码为“222021涉及我国出口的空中货运服务”，但交易附言包含“进口/海运/陆运/佣金/货款/代理/客运/租”");
//                }
//                //116 交易编码为“222022涉及我国进口的空中货运服务”，但交易附言包含“出口/海运/陆运/佣金/货款/代理/客运/租”。
//                if (bopdecCommon.indexGt(txcode, "-222022-") && bopdecCommon.containsValue(txrem, "-出口-海运-陆运-佣金-货款-代理-客运-租-")) {
//                    return ValidResult.build(false, "第116条核查:交易编码为“222022涉及我国进口的空中货运服务”，但交易附言包含“出口/海运/陆运/佣金/货款/代理/客运/租”");
//                }
//                //117交易编码为“222023不涉及我国进出口的空中货运服务”，但交易附言包含“海运/陆运/港口/仓储/装卸/搬运/引航/牵引/导航/检/修/使%费/客运”。
//                //由于%不确定暂时先注释
//                // if (bopdecCommon.indexGt($txcode,"-222023-")  && bopdecCommon.containsValue($txrem,"-海运-陆运-港口-仓储-装卸-搬运-引航-牵引-导航-检-修-使%费-客运-"))
//                if (bopdecCommon.indexGt(txcode, "-222023-") && (bopdecCommon.containsValue(txrem, "-海运-陆运-港口-仓储-装卸-搬运-引航-牵引-导航-检-修-客运-") || bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(txrem, "使", "费")))) {
//                    return ValidResult.build(false, "第117条核查:交易编码为“222023不涉及我国进出口的空中货运服务”，但交易附言包含“海运/陆运/港口/仓储/装卸/搬运/引航/牵引/导航/检/修/使%费/客运”");
//                }
//                //118交易编码为“222024空运客运”，但交易附言包含“海运/陆运/出口/进口”。
//                if (bopdecCommon.indexGt(txcode, "-222024-") && bopdecCommon.containsValue(txrem, "-海运-陆运-出口-进口-")) {
//                    return ValidResult.build(false, "第118条核查:交易编码为“222024空运客运”，但交易附言包含“海运/陆运/出口/进口”");
//                }
//                //119交易编码为“222029其他空运服务”，但交易附言包含“海运/陆运/速遣/清关/滞/运费/保险/修”。
//                if (bopdecCommon.indexGt(txcode, "-222029-") && bopdecCommon.containsValue(txrem, "-海运-陆运-速遣-清关-滞-运费-保险-修-")) {
//                    return ValidResult.build(false, "第119条核查:交易编码为“222029其他空运服务”，但交易附言包含“海运/陆运/速遣/清关/滞/运费/保险/修”");
//                }
//                //120交易编码为“222031涉及我国出口的其他运输方式货运服务”，但交易附言包含“进口/海运/空运/佣金/货款/代理/客运/租”。
//                if (bopdecCommon.indexGt(txcode, "-222031-") && bopdecCommon.containsValue(txrem, "-进口-海运-空运-佣金-货款-代理-客运-租-")) {
//                    return ValidResult.build(false, "第120条核查:交易编码为“222031涉及我国出口的其他运输方式货运服务”，但交易附言包含“进口/海运/空运/佣金/货款/代理/客运/租”");
//                }
//                //121交易编码为“222032涉及我国进口的其他运输方式货运服务”，但交易附言包含“出口/海运/空运/佣金/货款/代理/客运/租”。
//                if (bopdecCommon.indexGt(txcode, "-222032-") && bopdecCommon.containsValue(txrem, "-出口-海运-空运-佣金-货款-代理-客运-租-")) {
//                    return ValidResult.build(false, "第121条核查:交易编码为“222032涉及我国进口的其他运输方式货运服务”，但交易附言包含“出口/海运/空运/佣金/货款/代理/客运/租”");
//                }
//                //122交易编码为“222033不涉及我国进出口的其他运输方式货运服务”，但交易附言包含“海运/空运/港口/仓储/装卸/搬运/引航/牵引/导航/检/修/使%费/客运”。
//                //由于%不确定暂时先注释
//                //if (bopdecCommon.indexGt($txcode,"-222033-")  && bopdecCommon.containsValue($txrem,"-海运-空运-港口-仓储-装卸-搬运-引航-牵引-导航-检-修-使%费-客运-"))
//                if (bopdecCommon.indexGt(txcode, "-222033-") && (bopdecCommon.containsValue(txrem, "-海运-空运-港口-仓储-装卸-搬运-引航-牵引-导航-检-修-客运-") || bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(txrem, "使", "费")))) {
//                    return ValidResult.build(false, "第122条核查:交易编码为“222033不涉及我国进出口的其他运输方式货运服务”，但交易附言包含“海运/空运/港口/仓储/装卸/搬运/引航/牵引/导航/检/修/使%费/客运”");
//                }
//                //123交易编码为“222034其他运输方式客运”，但交易附言包含“海运/空运/出口/进口”。
//                if (bopdecCommon.indexGt(txcode, "-222034-") && bopdecCommon.containsValue(txrem, "-海运-空运-出口-进口-")) {
//                    return ValidResult.build(false, "第123条核查:交易编码为“222034其他运输方式客运”，但交易附言包含“海运/空运/出口/进口”");
//                }
//                //124交易编码为“222039其他运输方式的其他服务”，但交易附言包含“空运/海运/速遣/入渔/滞/运费/保险/快递/修”。
//                if (bopdecCommon.indexGt(txcode, "-222039-") && bopdecCommon.containsValue(txrem, "-空运-海运-速遣-入渔-滞-运费-保险-快递-修-")) {
//                    return ValidResult.build(false, "第124条核查:交易编码为“222039其他运输方式的其他服务”，但交易附言包含“空运/海运/速遣/入渔/滞/运费/保险/快递/修”");
//                }
//                //125交易编码为“222040邮政及寄递服务”，但交易附言包含“电信/电子/通讯/通信”。
//                if (bopdecCommon.indexGt(txcode, "-222040-") && bopdecCommon.containsValue(txrem, "-电信-电子-通讯-通信-")) {
//                    return ValidResult.build(false, "第125条核查:交易编码为“222040邮政及寄递服务”，但交易附言包含“电信/电子/通讯/通信”");
//                }
//                //126交易编码为“223010公务及商务旅行”，但交易附言包含“私/留学/学习/学费/培训”。
//                if (bopdecCommon.indexGt(txcode, "-223010-") && bopdecCommon.containsValue(txrem, "-私-留学-学习-学费-培训-个人-")) {
//                    return ValidResult.build(false, "第126条核查:交易编码为“223010公务及商务旅行”，但交易附言包含“私/留学/学习/学费/培训/个人”");
//                }
//                //127交易编码为“223021就医及健康相关旅行”，但交易附言包含“药品/器械/远程/网络/兽医/咨询/球会”。
//                if (bopdecCommon.indexGt(txcode, "-223021-") && bopdecCommon.containsValue(txrem, "-药品-器械-远程-网络-兽医-咨询-球会-")) {
//                    return ValidResult.build(false, "第127条核查:交易编码为“223021就医及健康相关旅行”，但交易附言包含“药品/器械/远程/网络/兽医/咨询/球会”");
//                }
//                //128交易编码为“223022留学及教育相关旅行（一年以上）”，但交易附言包含“探亲/旅游/远程/签证/中介/以下/以内/年内”。
//                if (bopdecCommon.indexGt(txcode, "-223022-") && bopdecCommon.containsValue(txrem, "-探亲-旅游-远程-签证-中介-以下-以内-年内-")) {
//                    return ValidResult.build(false, "第128条核查:交易编码为“223022留学及教育相关旅行（一年以上）”，但交易附言包含“探亲/旅游/远程/签证/中介/以下/以内/年内”");
//                }
//                //129交易编码为“223023留学及教育相关旅行（一年及一年以下）”，但交易附言包含“探亲/旅游/远程/签证/一年以上/1年以上/中介”。
//                if (bopdecCommon.indexGt(txcode, "-223023-") && bopdecCommon.containsValue(txrem, "-探亲-旅游-远程-签证-一年以上-1年以上-中介-")) {
//                    return ValidResult.build(false, "第129条核查:交易编码为“223023留学及教育相关旅行（一年及一年以下）”，但交易附言包含“探亲/旅游/远程/签证/一年以上/1年以上/中介”");
//                }
//                //130交易编码为“223029其他私人旅行”，但交易附言包含“教育/培训/公务/因公/商务/考察/会议/学/差旅/出差/会务”。
//                if (bopdecCommon.indexGt(txcode, "-223029-") && bopdecCommon.containsValue(txrem, "-教育-培训-公务-因公-商务-考察-会议-学-差旅-出差-会务-")) {
//                    return ValidResult.build(false, "第130条核查:交易编码为“223029其他私人旅行”，但交易附言包含“教育/培训/公务/因公/商务/考察/会议/学/差旅/出差/会务”");
//                }
//                //131交易编码为“224010境外建设”，但交易附言包含“设计/咨询/内/技术/投资/采矿/开采”，剔除交易对方名称以“（JN）”字样开头的数据。
//                if (bopdecCommon.indexGt(txcode, "-224010-") && (bopdecCommon.containsValue(txrem, "-设计-咨询-内-技术-投资-采矿-开采-") && !oppuser.startsWith("(JN)"))) {
//                    return ValidResult.build(false, "第131条核查:交易编码为“224010境外建设”，但交易附言包含“设计/咨询/内/技术/投资/采矿/开采”，剔除交易对方名称以“（JN）”字样开头的数据");
//                }
//                //132交易编码为“224020境内建设”，但交易附言包含“设计/咨询/外/技术/投资/采矿/开采”。
//                if (bopdecCommon.indexGt(txcode, "-224020-") && bopdecCommon.containsValue(txrem, "-设计-咨询-外-技术-投资-采矿-开采-")) {
//                    return ValidResult.build(false, "第132条核查:交易编码为“224020境内建设”，但交易附言包含“设计/咨询/外/技术/投资/采矿/开采”");
//                }
//                //133交易编码为“225010寿险”，但交易附言包含“定期人寿/非返还/平安险/水渍险/一切险/社保/财产/伤害/意外”。
//                if (bopdecCommon.indexGt(txcode, "-225010-") && bopdecCommon.containsValue(txrem, "-定期人寿-非返还-平安险-水渍险-一切险-社保-财产-伤害-意外-")) {
//                    return ValidResult.build(false, "第133条核查:交易编码为“225010寿险”，但交易附言包含“定期人寿/非返还/平安险/水渍险/一切险/社保/财产/伤害/意外”");
//                }
//                //134交易编码为“225021为我国出口提供的保险”，但交易附言包含“年金/信用/进口/进出口/社保”。
//                if (bopdecCommon.indexGt(txcode, "-225021-") && bopdecCommon.containsValue(txrem, "-年金-信用-进口-进出口-社保-")) {
//                    return ValidResult.build(false, "第134条核查:交易编码为“225021为我国出口提供的保险”，但交易附言包含“年金/信用/进口/进出口/社保”");
//                }
//                //135交易编码为“225022为我国进口提供的保险”，但交易附言包含“年金/信用/出口/进出口/社保”。
//                if (bopdecCommon.indexGt(txcode, "-225022-") && bopdecCommon.containsValue(txrem, "-年金-信用-出口-进出口-社保-")) {
//                    return ValidResult.build(false, "第135条核查:交易编码为“225022为我国进口提供的保险”，但交易附言包含“年金/信用/出口/进出口/社保”");
//                }
//                //136交易编码为“225029其他非寿险”，但交易附言包含“养老/年金/平安险/水渍险/再保险/货/社保/理赔/赔偿/赔款/其他”。
//                if (bopdecCommon.indexGt(txcode, "-225029-") && bopdecCommon.containsValue(txrem, "-养老-年金-平安险-水渍险-再保险-货-社保-理赔-赔偿-赔款-其他-") && !bopdecCommon.containsValue(txrem, "-其他非寿险-")) {
//                    return ValidResult.build(false, "第136条核查:交易编码为“225029其他非寿险”，但交易附言包含“养老/年金/平安险/水渍险/再保险/货/社保/理赔/赔偿/赔款/其他”。剔除交易附言包含“其他非寿险”。");
//                }
//                //137交易编码为“225050保险辅助服务”，但交易附言包含“保费”。
//                if (bopdecCommon.indexGt(txcode, "-225050-") && bopdecCommon.containsValue(txrem, "-保费-")) {
//                    return ValidResult.build(false, "第137条核查:交易编码为“225050保险辅助服务”，但交易附言包含“保费”");
//                }
//                //138交易编码为“226000金融服务”，但交易附言包含“认证/利息/保险/退休”。
//                if (bopdecCommon.indexGt(txcode, "-226000-") && bopdecCommon.containsValue(txrem, "-认证-利息-保险-退休-")) {
//                    return ValidResult.build(false, "第138条核查:交易编码为“226000金融服务”，但交易附言包含“认证/利息/保险/退休”");
//                }
//                //139交易编码为“227010电信服务”，但交易附言包含“咨询/数据库/数据信息/计算机/安装/信息费/数据费/软件/设备安装/工程”。
//                if (bopdecCommon.indexGt(txcode, "-227010-") && bopdecCommon.containsValue(txrem, "-咨询-数据库-数据信息-计算机-安装-信息费-数据费-软件-设备安装-工程-")) {
//                    return ValidResult.build(false, "第139条核查:交易编码为“227010电信服务”，但交易附言包含“咨询/数据库/数据信息/计算机/安装/信息费/数据费/软件/设备安装/工程”");
//                }
//                //140交易编码为“227020计算机服务”，但交易附言包含“进口/出口/报刊/书刊/动画”。
//                if (bopdecCommon.indexGt(txcode, "-227020-") && bopdecCommon.containsValue(txrem, "-进口-出口-报刊-书刊-动画-")) {
//                    return ValidResult.build(false, "第140条核查:交易编码为“227020计算机服务”，但交易附言包含“进口/出口/报刊/书刊/动画”");
//                }
//                //141交易编码为“227030信息服务”，但交易附言包含“进口/出口/税/计算机/技术/版面费/电信”。
//                if (bopdecCommon.indexGt(txcode, "-227030-") && bopdecCommon.containsValue(txrem, "-进口-出口-税-计算机-技术-版面费-电信-")) {
//                    return ValidResult.build(false, "第141条核查:交易编码为“227030信息服务”，但交易附言包含“进口/出口/税/计算机/技术/版面费/电信”");
//                }
//                //142交易编码为“228010研发成果转让费及委托研发”，但交易附言包含“使用/许可/特许/计算机/软件/视听/音像/检测/维修/修理/实验/检验/检疫/测验/测试/调试/售后/复制/分销/版面费”。
//                if (bopdecCommon.indexGt(txcode, "-228010-") && bopdecCommon.containsValue(txrem, "-使用-许可-特许-计算机-软件-视听-音像-检测-维修-修理-实验-检验-检疫-测验-测试-调试-售后-复制-分销-版面费-")) {
//                    return ValidResult.build(false, "第142条核查:交易编码为“228010研发成果转让费及委托研发”，但交易附言包含“使用/许可/特许/计算机/软件/视听/音像/检测/维修/修理/实验/检验/检疫/测验/测试/调试/售后/复制/分销/版面费”");
//                }
//                //143交易编码为“228021法律服务”，但交易附言包含“会计/审计/管理/技术/税务/账/统计/帐/检验/测试/UL/产品认证/质量认证”。
//                if (bopdecCommon.indexGt(txcode, "-228021-") && bopdecCommon.containsValue(txrem, "-会计-审计-管理-技术-税务-账-统计-帐-检验-测试-UL-产品认证-质量认证-")) {
//                    return ValidResult.build(false, "第143条核查:交易编码为“228021法律服务”，但交易附言包含“会计/审计/管理/技术/税务/账/统计/帐/检验/测试/UL/产品认证/质量认证”");
//                }
//                //144交易编码为“228022会计服务”，但交易附言包含“签证/佣金/法律/律师/仲裁/辩护/诉讼/受理/官司/监护”。
//                if (bopdecCommon.indexGt(txcode, "-228022-") && bopdecCommon.containsValue(txrem, "-签证-佣金-法律-律师-仲裁-辩护-诉讼-受理-官司-监护-")) {
//                    return ValidResult.build(false, "第144条核查:交易编码为“228022会计服务”，但交易附言包含“签证/佣金/法律/律师/仲裁/辩护/诉讼/受理/官司/监护”");
//                }
//                //145交易编码为“228023管理咨询和公共关系服务”，但交易附言包含“技术/佣金/保险/计算机/金融/产品认证/中标服务费/签证/养老金/会计/审计/记账/税务/环保服务/国际会议报名费/UL/公告服务费/版面费”。
//                if (bopdecCommon.indexGt(txcode, "-228023-") && bopdecCommon.containsValue(txrem, "-技术-佣金-保险-计算机-金融-中标服务费-签证-养老金-会计-审计-记账-税务-环保服务-国际会议报名费-UL-公告服务费-版面费-") && !bopdecCommon.containsValue(txrem, "-签证代理-签证代办-代理签证-代办签证-")) {
//                    return ValidResult.build(false, "第145条核查:交易编码为“228023管理咨询和公共关系服务”，但交易附言包含“技术/佣金/保险/计算机/金融/中标服务费/签证/养老金/会计/审计/记账/税务/环保服务/国际会议报名费/UL/公告服务费/版面费”。剔除交易附言包含“签证代理”、“签证代办”、“代理签证”、“代办签证”字样。");
//                }
//                //146交易编码为“228024广告服务”，但交易附言包含“展/出版”。
//                if (bopdecCommon.indexGt(txcode, "-228024-") && bopdecCommon.containsValue(txrem, "-展-出版-") && !(bopdecCommon.containsValue(txrem, "-展-") && bopdecCommon.containsValue(txrem, "-广告-"))) {
//                    return ValidResult.build(false, "第146条核查:交易编码为“228024广告服务”，但交易附言包含“展/出版”。剔除交易附言既包含“展”又含“广告”字样的数据。");
//                }
//                //147交易编码为“228025展会服务”，但交易附言包含“版面/营销/推广/推销/广告/刊登”。
//                if (bopdecCommon.indexGt(txcode, "-228025-") && bopdecCommon.containsValue(txrem, "-版面-营销-推广-推销-广告-刊登-")) {
//                    return ValidResult.build(false, "第147条核查:交易编码为“228025展会服务”，但交易附言包含“版面/营销/推广/推销/广告/刊登”");
//                }
//                //148交易编码为“228026市场调查、民意测验服务”，但交易附言包含“广告/展/推销”。
//                if (bopdecCommon.indexGt(txcode, "-228026-") && bopdecCommon.containsValue(txrem, "-广告-展-推销-")) {
//                    return ValidResult.build(false, "第148条核查:交易编码为“228026市场调查、民意测验服务”，但交易附言包含“广告/展/推销”");
//                }
//                //149交易编码为“228031建筑、工程技术服务”，但交易附言包含“废物/污染/测量/产品测试/认证技术检验/产品检验检疫/服装/产品/计算机工程/境外建设/境内建设/石油/天然气/环保服务/采矿/佣金/管理/监理”。
//                if (bopdecCommon.indexGt(txcode, "-228031-") && bopdecCommon.containsValue(txrem, "-废物-污染-测量-产品测试-认证技术检验-产品检验检疫-服装-产品-计算机工程-境外建设-境内建设-石油-天然气-环保服务-采矿-佣金-管理-监理-")) {
//                    return ValidResult.build(false, "第149条核查:交易编码为“228031建筑、工程技术服务”，但交易附言包含“废物/污染/测量/产品测试/认证技术检验/产品检验检疫/服装/产品/计算机工程/境外建设/境内建设/石油/天然气/环保服务/采矿/佣金/管理/监理”");
//                }
//                //150交易编码为“228032废物处理和防止污染服务”，但交易附言包含“许可/建筑/工程测量/制图/产品测试/认证/检验/检疫”。
//                if (bopdecCommon.indexGt(txcode, "-228032-") && bopdecCommon.containsValue(txrem, "-许可-建筑-工程测量-制图-产品测试-认证-检验-检疫-")) {
//                    return ValidResult.build(false, "第150条核查:交易编码为“228032废物处理和防止污染服务”，但交易附言包含“许可/建筑/工程测量/制图/产品测试/认证/检验/检疫”");
//                }
//                //151交易编码为“228033农业和采矿服务”，但交易附言包含“测量/制图/产品测试/认证技术/产品检验检疫”。
//                if (bopdecCommon.indexGt(txcode, "-228033-") && bopdecCommon.containsValue(txrem, "-测量-制图-产品测试-认证技术-产品检验检疫-")) {
//                    return ValidResult.build(false, "第151条核查:交易编码为“228033农业和采矿服务”，但交易附言包含“测量/制图/产品测试/认证技术/产品检验检疫”");
//                }
//                //152交易编码为“228039其他技术服务”，但交易附言包含“其他/计算机/电脑/研发/开发/佣金/货款/样品费/印刷/展览/会议/维护/专利/开采/建筑/动物检疫/废物/污染/污水/废气/放射性/环保服务/修”。
//                if (bopdecCommon.indexGt(txcode, "-228039-") && bopdecCommon.containsValue(txrem, "-计算机-电脑-研发-开发-佣金-货款-样品费-印刷费-展览-会议-维护-专利-开采-建筑-动物检疫-废物-污染-污水-废气-放射性-环保服务-修-")) {
//                    return ValidResult.build(false, "第152条核查:交易编码为“228039其他技术服务”，但交易附言包含“计算机/电脑/研发/开发/佣金/货款/样品费/印刷费/展览/会议/维护/专利/开采/建筑/动物检疫/废物/污染/污水/废气/放射性/环保服务/修”");
//                }
//                //153交易编码为“228040经营性租赁服务”，但交易附言不包含“租”或包含“金融/融资/电信”。
//                if (bopdecCommon.indexGt(txcode, "-228040-") && (!bopdecCommon.containsValue(txrem, "-租-") || bopdecCommon.containsValue(txrem, "-金融-融资-电信-"))) {
//                    return ValidResult.build(false, "第153条核查:交易编码为“228040经营性租赁服务”，但交易附言不包含“租”或包含“金融/融资/电信”");
//                }
//                //154交易编码为“228050货物或服务交易佣金及相关服务”，但交易附言不包含“佣/回扣/中介/提成/费/分成”或包含“运/金融/险”。
//                if (bopdecCommon.indexGt(txcode, "-228050-") && (!bopdecCommon.containsValue(txrem, "-佣-回扣-中介-提成-费-分成-") || bopdecCommon.containsValue(txrem, "-运-金融-险-"))) {
//                    return ValidResult.build(false, "第154条核查:交易编码为“228050货物或服务交易佣金及相关服务”，但交易附言不包含“佣/回扣/中介/提成/费/分成”或包含“运/金融/险”");
//                }
//                //155交易编码为“228060办事处、代表处等办公经费”，但交易附言包含“房/屋/地/建筑/装修”。
//                if (bopdecCommon.indexGt(txcode, "-228060-") && bopdecCommon.containsValue(txrem, "-房-屋-地-建筑-装修-")) {
//                    return ValidResult.build(false, "第155条核查:交易编码为“228060办事处、代表处等办公经费”，但交易附言包含“房/屋/地/建筑/装修”");
//                }
//                //156交易编码为“228990上述未提及的其他商业服务”，但交易附言包含“样品/进料/来料/出料/带料/邮购/学/商务/标签/注册/检/理财/技术/差旅/租/捐/签证/修/赔/计算机/网络/税/旅游/运费/猎头/招聘/装卸/罚/售后/研发/保证金/生活费/快件/仓储/科研/测量/制图/测试/装修/设计/推广/制作/经费/租赁/开采/返利/法律/会计/版面费”。
//                if (bopdecCommon.indexGt(txcode, "-228990-") && bopdecCommon.containsValue(txrem, "-样品-进料-来料-出料-带料-邮购-学-商务-注册-检-理财-技术-差旅-租-捐-签证-修-赔-计算机-网络-税-旅游-运费-猎头-招聘-装卸-罚-售后-研发-保证金-生活费-快件-仓储-科研-测量-制图-测试-装修-设计-推广-经费-租赁-开采-返利-法律-会计-版面费-") && !(bopdecCommon.containsValue(txrem, "-租-") && bopdecCommon.containsValue(txrem, "-中介-"))) {
//                    return ValidResult.build(false, "第156条核查:交易编码为“228990上述未提及的其他商业服务”，但交易附言包含“样品/进料/来料/出料/带料/邮购/学/商务/注册/检/理财/技术/差旅/租/捐/签证/修/赔/计算机/网络/税/旅游/运费/猎头/招聘/装卸/罚/售后/研发/保证金/生活费/快件/仓储/科研/测量/制图/测试/装修/设计/推广/经费/租赁/开采/返利/法律/会计/版面费”。剔除交易附言中同时包含“租”及“中介”字样的数据。");
//                }
//                //157交易编码“为229010视听和相关服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），或包含“进口/出口/许可/转播/复制/分销”。
//                if (bopdecCommon.indexGt(txcode, "-229010-") && (("-dbb-dbc-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(txrem, "-居民赴国外-居民前往国外-")) || ("-dba-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(txrem, "-非居民赴中国-非居民来中国-")) || bopdecCommon.containsValue(txrem, "-进口-出口-许可-转播-复制-分销-"))) {
//                    return ValidResult.build(false, "第157条核查:交易编码“为229010视听和相关服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），或包含“进口/出口/许可/转播/复制/分销”");
//                }
//                //158交易编码为“229020教育服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），或包含“留学”。
//                if (bopdecCommon.indexGt(txcode, "-229020-") && (("-dbb-dbc-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(txrem, "-居民赴国外-居民前往国外-")) || ("-dba-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(txrem, "-非居民赴中国-非居民来中国-")) || bopdecCommon.containsValue(txrem, "-留学-")) && !bopdecCommon.containsValue(txrem, "-留学咨询-")) {
//                    return ValidResult.build(false, "第158条核查:交易编码为“229020教育服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），或包含“留学”。剔除交易附言含“留学咨询”字样的数据。");
//                }
//                //159交易编码为“229030医疗服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），或包含“就医/兽医”。
//                if (bopdecCommon.indexGt(txcode, "-229030-") && (("-dbb-dbc-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(txrem, "-居民赴国外-居民前往国外-")) || ("-dba-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(txrem, "-非居民赴中国-非居民来中国-")) || bopdecCommon.containsValue(txrem, "-就医-兽医-"))) {
//                    return ValidResult.build(false, "第159条核查:交易编码为“229030医疗服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），或包含“就医/兽医”");
//                }
//                //160交易编码为“229990其他文化和娱乐服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），”。
//                if (bopdecCommon.indexGt(txcode, "-229990-") && (("-dbb-dbc-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(txrem, "-居民赴国外-居民前往国外-")) || ("-dba-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(txrem, "-非居民赴中国-非居民来中国-")))) {
//                    return ValidResult.build(false, "第160条核查:交易编码为“229990其他文化和娱乐服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向）");
//                }
//                //161交易编码为“230000别处未涵盖的维护和维修服务”，但交易附言包含“工程且不含‘维修’/计算机/租赁且不含‘维修/维护’/装修/建设/建筑”。
//                if (bopdecCommon.indexGt(txcode, "-230000-") && (bopdecCommon.containsValue(txrem, "-计算机-装修-建设-建筑-") || (bopdecCommon.containsValue(txrem, "-工程-租赁-") && !bopdecCommon.containsValue(txrem, "-维修-维护-")))) {
//                    return ValidResult.build(false, "第161条核查:交易编码为“230000别处未涵盖的维护和维修服务”，但交易附言包含“工程且不含‘维修’/计算机/租赁且不含‘维修/维护’/装修/建设/建筑”");
//                }
//                //162交易编码为“231010特许和商标使用费”，但交易附言包含“专有/所有权/转让/专利/技术/版权”。
//                if (bopdecCommon.indexGt(txcode, "-231010-") && bopdecCommon.containsValue(txrem, "-专有-所有权-转让-专利-技术-版权-")) {
//                    return ValidResult.build(false, "第162条核查:交易编码为“231010特许和商标使用费”，但交易附言包含“专有/所有权/转让/专利/技术/版权”");
//                }
//                //163交易编码为“231020研发成果使用费”，但交易附言包含“商标/特许/转让/所有权/计算机/版面费/软件/视听”。
//                if (bopdecCommon.indexGt(txcode, "-231020-") && bopdecCommon.containsValue(txrem, "-商标-特许-转让-所有权-计算机-版面费-软件-视听-")) {
//                    return ValidResult.build(false, "第163条核查:交易编码为“231020研发成果使用费”，但交易附言包含“商标/特许/转让/所有权/计算机/版面费/软件/视听”");
//                }
//                //164交易编码为“231030复制或分销计算机软件许可费”，但交易附言包含定制/出口/进出/进口/视听”。
//                if (bopdecCommon.indexGt(txcode, "-231030-") && (bopdecCommon.containsValue(txrem, "-出口-进出-进口-视听-定制-"))) {
//                    return ValidResult.build(false, "第164条核查:交易编码为“231030复制或分销计算机软件许可费”，但交易附言包含定制/出口/进出/进口/视听”");
//                }
//                //165交易编码为“231040复制或分销视听及相关产品许可费”，但交易附言包含“计算机/软件/定制/出口/进出/进口”。
//                if (bopdecCommon.indexGt(txcode, "-231040-") && bopdecCommon.containsValue(txrem, "-计算机-软件-定制-出口-进出-进口-")) {
//                    return ValidResult.build(false, "第165条核查:交易编码为“231040复制或分销视听及相关产品许可费”，但交易附言包含“计算机/软件/定制/出口/进出/进口”");
//                }
//                //166交易编码为“231990其他知识产权使用费”，但交易附言包含“计算机/软件/定制/出口/进出/进口/视听/商标/专利/著作/版权/设计/转播/视频/电影/影像/音像”。
//                if (bopdecCommon.indexGt(txcode, "-231990-") && bopdecCommon.containsValue(txrem, "-计算机-软件-定制-出口-进出-进口-视听-商标-专利-著作-版权-设计-转播-视频-电影-影像-音像-")) {
//                    return ValidResult.build(false, "第166条核查:交易编码为“231990其他知识产权使用费”但交易附言包含“计算机/软件/定制/出口/进出/进口/视听/商标/专利/著作/版权/设计/转播/视频/电影/影像/音像");
//                }
//                //167交易编码为“232000别处未涵盖的政府货物和服务”，但交易附言包含“税捐/赠/援助”。
//                if (bopdecCommon.indexGt(txcode, "-232000-") && bopdecCommon.containsValue(txrem, "-税-捐赠-援助-")) {
//                    return ValidResult.build(false, "第167条核查:交易编码为“232000别处未涵盖的政府货物和服务”，但交易附言包含“税/捐赠/援助”");
//                }
//                //168交易编码为“321000职工报酬”，但交易附言包含“工程/利息/侨汇/赠/佣金/咨询/贷款/货款/赡/差旅/教育/培训/一般贸易/社保但不包含‘雇员/员工'”。
//                if (bopdecCommon.indexGt(txcode, "-321000-") && (bopdecCommon.containsValue(txrem, "-工程-利息-侨汇-赠-佣金-咨询-贷款-货款-赡-差旅-教育-培训-一般贸易-社保-") && !bopdecCommon.containsValue(txrem, "-雇员-员工-"))) {
//                    return ValidResult.build(false, "第168条核查:交易编码为“321000职工报酬”但交易附言包含“工程/利息/侨汇/赠/佣金/咨询/贷款/货款/赡/差旅/教育/培训/一般贸易/社保但不包含雇员/员工”");
//                }
//                //169交易编码为“322011从境外子公司等获得的股息、红利或利润/向境外母公司支付的股息、红利或利润”，但交易附言包含“利息/关联/优先股/联属”。
//                if (bopdecCommon.indexGt(txcode, "-322011-") && bopdecCommon.containsValue(txrem, "-利息-关联-优先股-联属-")) {
//                    return ValidResult.build(false, "第169条核查:交易编码为“322011从境外子公司等获得的股息、红利或利润/向境外母公司支付的股息、红利或利润”，但交易附言包含“利息/关联/优先股/联属”");
//                }
//                //170交易编码为“322012从境外母公司获得的股息、红利（持有境外母公司10%以下股权）/向境外子公司等支付的股息、红利（持有本机构10%以下股权）”，但交易附言包含“利息/联营/联属/分支/关联/合伙/优先股”；或收入方向包含“境外子”，支出方向包含“境外母”，剔除收付款类型为“退款”的数据。
//                //需完善
//                //if (bopdecCommon.indexGt($txcode,"-322012-") && (  || (bopdecCommon.containsValue($txrem,"-境外母-")  && "-dbb-dbc-dbe-dbf-".indexOf(inifrm)>0 ) && !bopdecCommon.containsValue($paytype,"-退款-") ))
//                if (bopdecCommon.indexGt(txcode, "-322012-") && (bopdecCommon.containsValue(txrem, "-利息-联营-联属-分支-关联-合伙-优先股-") || (bopdecCommon.containsValue(txrem, "-境外母-") && "-dbb-dbc-".indexOf(inifrm) > 0) && !bopdecCommon.containsValue(paytype, "-R-") || (bopdecCommon.containsValue(txrem, "-境外子-") && "-dba-".indexOf(inifrm) > 0 && !bopdecCommon.containsValue(paytype, "-R-")))) {
//                    return ValidResult.build(false, "第170条核查:交易编码为“322012从境外母公司获得的股息、红利（持有境外母公司10%以下股权）/向境外子公司等支付的股息、红利（持有本机构10%以下股权）”，但交易附言包含“利息/联营/联属/分支/关联/合伙/优先股”；或收入方向包含“境外子”，支出方向包含“境外母”，剔除收付款类型为“退款”的数据。");
//                }
//                //171交易编码为“322013从境外联属企业获得的股息、红利/向境外联属企业支付的股息、红利”，但交易附言不包含“联属”或包含“利息/母公司/子公司/附属/分支/关联/联营/直接投资/优先股”。
//                if (bopdecCommon.indexGt(txcode, "-322013-") && (!bopdecCommon.containsValue(txrem, "-联属-") || bopdecCommon.containsValue(txrem, "-利息-母公司-子公司-附属-分支-关联-联营-直接投资-优先股-"))) {
//                    return ValidResult.build(false, "第171条核查:交易编码为“322013从境外联属企业获得的股息、红利/向境外联属企业支付的股息、红利”，但交易附言不包含“联属”或包含“利息/母公司/子公司/附属/分支/关联/联营/直接投资/优先股”");
//                }
//                //172交易编码为“322014因拥有境外建筑物而获得的租金/向境内建筑物的非居民所有者支付的租金”，但交易附言包含“售/卖/买/转让/购”。
//                if (bopdecCommon.indexGt(txcode, "-322014-") && bopdecCommon.containsValue(txrem, "-售-卖-买-转让-购-")) {
//                    return ValidResult.build(false, "第172条核查:交易编码为“322014因拥有境外建筑物而获得的租金/向境内建筑物的非居民所有者支付的租金”，但交易附言包含“售/卖/买/转让/购”");
//                }
//                //173交易编码为“322021从境外子公司获得的利息/向境外母公司支付的利息”，但交易附言包含“银行/本金/利润/红利/分红/股利/股息/联属”。
//                if (bopdecCommon.indexGt(txcode, "-322021-") && bopdecCommon.containsValue(txrem, "-银行-本金-利润-红利-分红-股利-股息-联属-")) {
//                    return ValidResult.build(false, "第173条核查:交易编码为“322021从境外子公司获得的利息/向境外母公司支付的利息”，但交易附言包含“银行/本金/利润/红利/分红/股利/股息/联属”");
//                }
//                //174交易编码为“322022从境外母公司获得的利息（持有境外母公司10%以下股权）/向境外子公司等支付的利息（持有本机构10%以下股权）”，但交易附言包含“银行/联营/附属/分支/本/利润/红利/分红/股利/股息/联属”。
//                if (bopdecCommon.indexGt(txcode, "-322022-") && bopdecCommon.containsValue(txrem, "-银行-联营-附属-分支-本-利润-红利-分红-股利-股息-联属-")) {
//                    return ValidResult.build(false, "第174条核查:交易编码为“322022从境外母公司获得的利息（持有境外母公司10%以下股权）/向境外子公司等支付的利息（持有本机构10%以下股权）”，但交易附言包含“银行/联营/附属/分支/本/利润/红利/分红/股利/股息/联属”");
//                }
//                //175交易编码为“322023从境外联属企业获得的利息/向境外联属企业支付的利息”，但交易附言不包含“联属”或包含“银行/母公司/子公司/附属/分支/关联/联营/直接投资/本金/利润/红利/分红/股利/股息/股东/投资者”。
//                if (bopdecCommon.indexGt(txcode, "-322023-") && (!bopdecCommon.containsValue(txrem, "-联属-") || bopdecCommon.containsValue(txrem, "-银行-母公司-子公司-附属-分支-关联-联营-直接投资-本金-利润-红利-分红-股利-股息-股东-投资者-"))) {
//                    return ValidResult.build(false, "第175条核查:交易编码为“322023从境外联属企业获得的利息/向境外联属企业支付的利息”，但交易附言不包含“联属”或包含“银行/母公司/子公司/附属/分支/关联/联营/直接投资/本金/利润/红利/分红/股利/股息/股东/投资者”");
//                }
//                //176交易编码为“322031股票投资的股息、红利”，但交易附言包含“优先股/基金/债/母/子/附属/分支/关联（但不是“非关联”）/直接投资/利息”。
//                if (bopdecCommon.indexGt(txcode, "-322031-") && (bopdecCommon.containsValue(txrem, "-优先股-基金-债-母-子-附属-分支-直接投资-利息-") || (bopdecCommon.containsValue(txrem, "-关联-") && !bopdecCommon.containsValue(txrem, "-非关联-")))) {
//                    return ValidResult.build(false, "第176条核查:交易编码为“322031股票投资的股息、红利”，但交易附言包含“优先股/基金/债/母/子/附属/分支/关联（但不是“非关联”）/直接投资/利息”");
//                }
//                //177交易编码为“322032投资基金份额的股息、红利”，但交易附言包含“利润/利息/母/子/附属/分支/联/直接投资/资金收入/资金支出”。
//                if (bopdecCommon.indexGt(txcode, "-322032-") && bopdecCommon.containsValue(txrem, "-利润-利息-母-子-附属-分支-联-直接投资-资金收入-资金支出-")) {
//                    return ValidResult.build(false, "第177条核查:交易编码为“322032投资基金份额的股息、红利”，但交易附言包含“利润/利息/母/子/附属/分支/联/直接投资/资金收入/资金支出”");
//                }
//                //178交易编码为“322033短期债券利息”，但交易附言包含“长期/中期/利润/红利/分红/股利/股息/本/买/卖/售/转让/购”。
//                if (bopdecCommon.indexGt(txcode, "-322033-") && bopdecCommon.containsValue(txrem, "-长期-中期-利润-红利-分红-股利-股息-本-买-卖-售-转让-购-")) {
//                    return ValidResult.build(false, "第178条核查:交易编码为“322033短期债券利息”，但交易附言包含“长期/中期/利润/红利/分红/股利/股息/本/买/卖/售/转让/购”");
//                }
//                //179交易编码为“322034中长期债券利息”，但交易附言包含“一年以下/一年期/短期/利润/红利/分红/股利/股息/本/买/卖/售/转让/购”。
//                if (bopdecCommon.indexGt(txcode, "-322034-") && bopdecCommon.containsValue(txrem, "-一年以下-一年期-短期-利润-红利-分红-股利-股息-本-买-卖-售-转让-购-")) {
//                    return ValidResult.build(false, "第179条核查:交易编码为“322034中长期债券利息”，但交易附言包含“一年以下/一年期/短期/利润/红利/分红/股利/股息/本/买/卖/售/转让/购”");
//                }
//                //180交易编码为“322041存贷款利息”，但交易附言包含“母公司/子公司/附属/联（但不是“非关联”）/直接投资/股东/分支/本/债券/利润”。
//                if (bopdecCommon.indexGt(txcode, "-322041-") && (bopdecCommon.containsValue(txrem, "-母公司-子公司-附属-直接投资-股东-分支-本-债券-利润-") || (!bopdecCommon.containsValue(txrem, "-非关联-") && bopdecCommon.containsValue(txrem, "-联-")))) {
//                    return ValidResult.build(false, "第180条核查:交易编码为“322041存贷款利息”，但交易附言包含“母公司/子公司/附属/联（但不是“非关联”）/直接投资/股东/分支/本/债券/利润”");
//                }
//                //181交易编码为“322042保单持有人获得的红利和利息/向保单持有者支付的红利和利息”，但交易附言包含“股/银行”。
//                if (bopdecCommon.indexGt(txcode, "-322042-") && bopdecCommon.containsValue(txrem, "-股-银行-")) {
//                    return ValidResult.build(false, "第181条核查:交易编码为“322042保单持有人获得的红利和利息/向保单持有者支付的红利和利息”，但交易附言包含“股/银行”");
//                }
//                //182交易编码为“322043从准公司和国际组织获得的红利、收益/向准公司和国际组织份额持有者支付的红利、收益”，但交易附言包含“利息/银行/母公司/子公司/联/直接投资/股东/分支/附属”。
//                if (bopdecCommon.indexGt(txcode, "-322043-") && bopdecCommon.containsValue(txrem, "-利息-银行-母公司-子公司-联-直接投资-股东-分支-附属-")) {
//                    return ValidResult.build(false, "第182条核查:交易编码为“322043从准公司和国际组织获得的红利、收益/向准公司和国际组织份额持有者支付的红利、收益”，但交易附言包含“利息/银行/母公司/子公司/联/直接投资/股东/分支/附属”");
//                }
//                //183交易编码为“323010使用自然资源的租金”，但交易附言包含“租约/转让/买/卖/售/房屋”。
//                if (bopdecCommon.indexGt(txcode, "-323010-") && bopdecCommon.containsValue(txrem, "-租约-转让-买-卖-售-房屋-")) {
//                    return ValidResult.build(false, "第183条核查:交易编码为“323010使用自然资源的租金”，但交易附言包含“租约/转让/买/卖/售/房屋”");
//                }
//                //184交易编码为“323020产品和生产的税收及补贴”，剔除交易附言包含“关税”、“出口%增值税”、“进口%增值税”、“吨税费”、“消费税”、“工资税”、“营业执照税”的数据。
//                //由于%不确定暂时先注释
//                if (bopdecCommon.indexGt(txcode, "-323020-") && (bopdecCommon.containsValue(txrem, "-税-") && !bopdecCommon.containsValue(txrem, "-关税-出口税-进口税-增值税-营业税-销售税-土地使用税-印花税-吨税费-消费税-工资税-营业执照税-"))) {
//                    return ValidResult.build(false, "第184条核查:交易编码为“323020产品和生产的税收及补贴”，交易附言包含“税”但不包含“关税”、“出口税”、“进口税”、“增值税”、“营业税”、“销售税”、“土地使用税”、“印花税”、“吨税费”、“消费税”、“工资税”或“营业执照税”的数据。");
//                }
//                //185交易编码为“421010个人间捐赠及无偿援助”，但交易附言包含“留学/赔偿/福利/学费/报酬/工资/政府/组织/固定资产有关/遗产/中奖/雇/房/舍/楼/屋/设备/机器/重建/速遣/滞期”或申报主体类型为“对公居民”（剔除交易附言包含“代收”或“代付”字样的数据）。
//                if (bopdecCommon.indexGt(txcode, "-421010-") && (bopdecCommon.containsValue(txrem, "-留学-赔偿-福利-学费-报酬-工资-政府-组织-固定资产有关-遗产-中奖-雇-房-舍-楼-屋-设备-机器-重建-速遣-滞期-") || (bopdecCommon.indexGt(custype, "-C-") && !bopdecCommon.containsValue(txrem, "-代收-代付-")))) {
//                    return ValidResult.build(false, "第185条核查:交易编码为“421010个人间捐赠及无偿援助”，但交易附言包含“留学/赔偿/福利/学费/报酬/工资/政府/组织/固定资产有关/遗产/中奖/雇/房/舍/楼/屋/设备/机器/重建/速遣/滞期”或申报主体类型为“对公居民”（剔除交易附言包含“代收”或“代付”字样的数据）。");
//                }
//                //186交易编码为“421020政府、国际组织间捐赠及无偿援助（与固定资产无关）”，但交易附言包含“工资/留学/赔偿/薪/福利/学费/报酬/探亲/个人/赡/遗产/中奖/雇/房/舍/楼/屋/设备/机器/重建/固定资产有关或申报主体类型为“对私居民””。
//                if (bopdecCommon.indexGt(txcode, "-421020-") && (bopdecCommon.containsValue(txrem, "-工资-留学-赔偿-薪-福利-学费-报酬-探亲-个人-赡-遗产-中奖-雇-房-舍-楼-屋-设备-机器-重建-固定资产有关-") || bopdecCommon.indexGt(custype, "-D-"))) {
//                    return ValidResult.build(false, "第186条核查:交易编码为“421020政府、国际组织间捐赠及无偿援助（与固定资产无关）”，但交易附言包含“工资/留学/赔偿/薪/福利/学费/报酬/探亲/个人/赡/遗产/中奖/雇/房/舍/楼/屋/设备/机器/重建/固定资产有关或申报主体类型为“对私居民”");
//                }
//                //187交易编码为“421990其他捐赠及无偿援助（与固定资产无关）”，但交易附言包含“工资/留学/赔偿/薪/福利/学费/报酬/探亲/政府/赡/遗产/中奖/雇/房/舍/楼/屋/设备/机器/重建/速遣/与固定资产有关”。
//                if (bopdecCommon.indexGt(txcode, "-421990-") && (bopdecCommon.containsValue(txrem, "-工资-留学-赔偿-薪-福利-学费-报酬-探亲-政府-赡-遗产-中奖-雇-房-舍-楼-屋-设备-机器-重建-速遣-与固定资产有关-") || bopdecCommon.indexGt(custype, "-D-"))) {
//                    return ValidResult.build(false, "第187条核查:交易编码为“421990其他捐赠及无偿援助（与固定资产无关）”，但交易附言包含“工资/留学/赔偿/薪/福利/学费/报酬/探亲/政府/赡/遗产/中奖/雇/房/舍/楼/屋/设备/机器/重建/速遣/与固定资产有关”。");
//                }
//                //188交易编码为“422000非寿险保险赔偿”，但交易附言包含“保费/年金”。
//                if (bopdecCommon.indexGt(txcode, "-422000-") && bopdecCommon.containsValue(txrem, "-保费-年金-")) {
//                    return ValidResult.build(false, "第188条核查:交易编码为“422000非寿险保险赔偿”，但交易附言包含“保费/年金”");
//                }
//                //189交易编码为“423010社保缴款”，但交易附言包含“雇/返”。
//                if (bopdecCommon.indexGt(txcode, "-423010-") && bopdecCommon.containsValue(txrem, "-雇-返-")) {
//                    return ValidResult.build(false, "第189条核查:交易编码为“423010社保缴款”，但交易附言包含“雇/返”");
//                }
//                //190交易编码为“423020社保返还的福利”，但交易附言包含“雇主/公司”。
//                if (bopdecCommon.indexGt(txcode, "-423020-") && bopdecCommon.containsValue(txrem, "-雇主-公司-")) {
//                    return ValidResult.build(false, "第190条核查:交易编码为“423020社保返还的福利”，但交易附言包含“雇主/公司”");
//                }
//                //191交易编码为“424000其他二次收入（经常转移）”，但交易附言包含“险赔但不包含‘非’/赠/借/捐/社保/无偿/养老金/关税但不是‘关税退款’或‘关税返还’或‘关税让利’/消费税/产品税/生产税/产品补贴/产品增值税/进口税/出口税/商品消费税/遗产税/资本税/税务咨询”。
//                //if (bopdecCommon.indexGt($txcode,"-424000-")  &&(bopdecCommon.containsValue($txrem,"-险赔-") && !bopdecCommon.containsValue($txrem,"-非赠-非借-非捐-非社保-非无偿-非养老金-非关税-非消费税-非产品税-非生产税-非产品补贴-非产品增值税-非进口税-非出口税-非商品消费税-非遗产税-非资本税-")) )
//                if (bopdecCommon.indexGt(txcode, "-424000-") && ((bopdecCommon.containsValue(txrem, "-关税-") && !bopdecCommon.containsValue(txrem, "-关税退款-关税返还-关税让利-")) || (bopdecCommon.containsValue(txrem, "-险赔-") && !bopdecCommon.containsValue(txrem, "-非-")) || bopdecCommon.containsValue(txrem, "-赠-借-捐-社保-无偿-养老金-消费税-产品税-生产税-产品补贴-产品增值税-进口税-出口税-商品消费税-遗产税-资本税-税务咨询-"))) {
//                    return ValidResult.build(false, "第191条核查:交易编码为“424000其他二次收入（经常转移）”，但交易附言包含“险赔但不包含‘非’/赠/借/捐/社保/无偿/养老金/关税但不是‘关税退款’或‘关税返还’或‘关税让利’/消费税/产品税/生产税/产品补贴/产品增值税/进口税/出口税/商品消费税/遗产税/资本税/税务咨询”。");
//                }
//                //192交易编码为“521020与固定资产有关的捐赠及无偿援助”，但交易附言包含“个人/亲属/赡/生活费”。
//                if (bopdecCommon.indexGt(txcode, "-521020-") && bopdecCommon.containsValue(txrem, "-个人-亲属-赡-生活费-")) {
//                    return ValidResult.build(false, "第192条核查:交易编码为“521020与固定资产有关的捐赠及无偿援助”，但交易附言包含“个人/亲属/赡/生活费”");
//                }
//                //193交易编码为“521030移民转移”，但交易附言包含“赠/捐/赡/生活费/探亲”。
//                if (bopdecCommon.indexGt(txcode, "-521030-") && bopdecCommon.containsValue(txrem, "-赠-捐-赡-生活费-探亲-")) {
//                    return ValidResult.build(false, "第193条核查:交易编码为“521030移民转移”，但交易附言包含“赠/捐/赡/生活费/探亲”");
//                }
//                //194交易编码为“521990其他资本转移”，但交易附言包含“销售税/产品税/税务咨询”。
//                if (bopdecCommon.indexGt(txcode, "-521990-") && bopdecCommon.containsValue(txrem, "-销售税-产品税-税务咨询-")) {
//                    return ValidResult.build(false, "第194条核查:交易编码为“521990其他资本转移”，但交易附言包含“销售税/产品税/税务咨询”");
//                }
//                //195交易编码为“522000品牌、商标、契约和许可所有权等非生产非金融资产转让”，但交易附言包含“租金/专利/版权/研发/使用”。
//                if (bopdecCommon.indexGt(txcode, "-522000-") && bopdecCommon.containsValue(txrem, "-租金-专利-版权-研发-使用-")) {
//                    return ValidResult.build(false, "第195条核查:交易编码为“522000品牌、商标、契约和许可所有权等非生产非金融资产转让”，但交易附言包含“租金/专利/版权/研发/使用”");
//                }
//                //196交易编码为“621011因境外子公司清算、终止等撤资/新设境外子公司资本金汇出”，但交易附言不包含“子公司/分公司/联营/直接投资/境外投资”；或包含“关联/外商/联属/境内子/境外母/前期/筹备/增资/减资/借/贷”,剔除交易附言包含“工程”字样的数据。
//                if (bopdecCommon.indexGt(txcode, "-621011-") && (!bopdecCommon.containsValue(txrem, "-子公司-分公司-联营-直接投资-境外投资-") || (bopdecCommon.containsValue(txrem, "-关联-外商-联属-境内子-境外母-前期-筹备-增资-减资-借-贷-") && !bopdecCommon.containsValue(txrem, "-工程-")))) {
//                    return ValidResult.build(false, "第196条核查:交易编码为“621011因境外子公司清算、终止等撤资/新设境外子公司资本金汇出”，但交易附言不包含“子公司/分公司/联营/直接投资/境外投资”；或包含“关联/外商/联属/境内子/境外母/前期/筹备/增资/减资/借/贷”,剔除交易附言包含“工程”字样的数据");
//                }
//                //197交易编码为“621012筹备资金撤回/筹备资金汇出”，但交易附言包含“关联/外商/联属/资本金/境内子/境外母/转让”。
//                if (bopdecCommon.indexGt(txcode, "-621012-") && bopdecCommon.containsValue(txrem, "-关联-外商-联属-资本金-境内子-境外母-转让-")) {
//                    return ValidResult.build(false, "第197条核查:交易编码为“621012筹备资金撤回/筹备资金汇出”，但交易附言包含“关联/外商/联属/资本金/境内子/境外母/转让”");
//                }
//                //198交易编码为“621013因境外子公司减资收回资金/对境外子公司增资”，但交易附言不包含“减%资/增%资”，或不包含“子公司”或“直接投资”；或包含“关联/外商/清算/境内子/境外母”。
//                //由于%不确定暂时先注释
//                if (bopdecCommon.indexGt(txcode, "-621013-") && (bopdecCommon.containsValue(txrem, "-关联-外商-清算-境内子-境外母-") || (!bopdecCommon.containsValue(txrem, "-子公司-直接投资-") && !bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(txrem, "增", "资")) && !bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(txrem, "减", "资"))))) {
//                    return ValidResult.build(false, "第198条核查:交易编码为“621013因境外子公司减资收回资金/对境外子公司增资”，但交易附言不包含“减%资/增%资”，或不包含“子公司”或“直接投资”；或包含“关联/外商/清算/境内子/境外母”");
//                }
//                //199交易编码为“621014转让境外子公司股权收入/购买转让的境外企业股权”，但交易附言不包含“股权/产权/股份”或包含“关联/外商/境内子/境外母”。
//                if (bopdecCommon.indexGt(txcode, "-621014-") && (!bopdecCommon.containsValue(txrem, "-股权-产权-股份-") || bopdecCommon.containsValue(txrem, "-关联-外商-境内子-境外母-"))) {
//                    return ValidResult.build(false, "第199条核查:交易编码为“621014转让境外子公司股权收入/购买转让的境外企业股权”，但交易附言不包含“股权/产权/股份”或包含“关联/外商/境内子/境外母”");
//                }
//                //200交易编码为“621015接受境外子公司的股权投资（逆向股权投资）/境外子公司撤回对境内母公司的股权投资（逆向股权投资的撤回）”，但交易附言不包含“投资/资本/股”或包含“关联/外商/境内子/境外母”。
//                if (bopdecCommon.indexGt(txcode, "-621015-") && (!bopdecCommon.containsValue(txrem, "-投资-资本-股-") || bopdecCommon.containsValue(txrem, "-关联-外商-境内子-境外母-"))) {
//                    return ValidResult.build(false, "第200条核查:交易编码为“621015接受境外子公司的股权投资（逆向股权投资）/境外子公司撤回对境内母公司的股权投资（逆向股权投资的撤回）”，但交易附言不包含“投资/资本/股”或包含“关联/外商/境内子/境外母”");
//                }
//                //201交易编码为“621016非法人投资款撤回/汇出”，但交易附言包含“子公司/境内子/境外母”。
//                if (bopdecCommon.indexGt(txcode, "-621016-") && bopdecCommon.containsValue(txrem, "-子公司-境内子-境外母-")) {
//                    return ValidResult.build(false, "第201条核查:交易编码为“621016非法人投资款撤回/汇出”，但交易附言包含“子公司/境内子/境外母”");
//                }
//                //202交易编码为“621021收回对境外子公司的贷款及其他往来/对境外子公司的贷款及其他往来”，但交易附言包含“关联/外商/担保/境内子/境外母”，剔除交易附言包含“工程”字样的数据。
//                if (bopdecCommon.indexGt(txcode, "-621021-") && bopdecCommon.containsValue(txrem, "-关联-外商-担保-境内子-境外母-") && !bopdecCommon.containsValue(txrem, "-工程-")) {
//                    return ValidResult.build(false, "第202条核查:交易编码为“621021收回对境外子公司的贷款及其他往来/对境外子公司的贷款及其他往来”，但交易附言包含“关联/外商/担保/境内子/境外母”，剔除交易附言包含“工程”字样的数据");
//                }
//                //203交易编码为“621022接受境外子公司的贷款及其他往来（逆向贷款投资）/偿还境外子公司的贷款及其他往来（逆向投资的撤回）”，但交易附言包含“关联/外商/担保/境内子/境外母”。
//                if (bopdecCommon.indexGt(txcode, "-621022-") && bopdecCommon.containsValue(txrem, "-关联-外商-担保-境内子-境外母-")) {
//                    return ValidResult.build(false, "第203条核查:交易编码为“621022接受境外子公司的贷款及其他往来（逆向贷款投资）/偿还境外子公司的贷款及其他往来（逆向投资的撤回）”，但交易附言包含“关联/外商/担保/境内子/境外母”");
//                }
//                //204交易编码为“621030出售境外不动产收入/购买境外不动产支出”，但交易附言包含“中介/税/境内/国内/境外母”。
//                if (bopdecCommon.indexGt(txcode, "-621030-") && bopdecCommon.containsValue(txrem, "-中介-税-境内-国内-境外母-")) {
//                    return ValidResult.build(false, "第204条核查:交易编码为“621030出售境外不动产收入/购买境外不动产支出”，但交易附言包含“中介/税/境内/国内/境外母”");
//                }
//                //205交易编码为“622011新设外商投资企业资本金汇入/因外商投资企业清算、终止等撤资”，但交易附言包含“关联/借款/增资/减资/筹备/前期/境内母/境外子”。
//                if (bopdecCommon.indexGt(txcode, "-622011-") && bopdecCommon.containsValue(txrem, "-关联-借款-增资-减资-筹备-前期-境内母-境外子-")) {
//                    return ValidResult.build(false, "第205条核查:交易编码为“622011新设外商投资企业资本金汇入/因外商投资企业清算、终止等撤资”，但交易附言包含“关联/借款/增资/减资/筹备/前期/境内母/境外子”");
//                }
//                //206交易编码为“622012筹备资金汇入/撤出”，但交易附言包含“关联/联属/新设/清算/联属/境内母/境外子/转让”。
//                if (bopdecCommon.indexGt(txcode, "-622012-") && bopdecCommon.containsValue(txrem, "-关联-联属-新设-清算-联属-境内母-境外子-转让-")) {
//                    return ValidResult.build(false, "第206条核查:交易编码为“622012筹备资金汇入/撤出”，但交易附言包含“关联/联属/新设/清算/联属/境内母/境外子/转让”");
//                }
//                //207交易编码为“622013外商投资企业增资/外商投资企业减资”，但交易附言不包含“减%资/增%资”或包含“关联/境内母/境外子”。
//                //由于%不确定暂时先注释
//                if (bopdecCommon.indexGt(txcode, "-622013-") && ((!bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(txrem, "增", "资")) && !bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(txrem, "减", "资"))) || bopdecCommon.containsValue(txrem, "-关联-境内母-境外子-"))) {
//                    return ValidResult.build(false, "第207条核查:交易编码为“622013外商投资企业增资/外商投资企业减资”，但交易附言不包含“减%资/增%资”或包含“关联/境内母/境外子”");
//                }
//                //208交易编码为“622014转让境内企业股权/购买转让的外商投资企业股权”，但交易附言不包含“股权/产权/股份/新设”或包含“关联/清算/减资/撤资”。
//                if (bopdecCommon.indexGt(txcode, "-622014-") && (bopdecCommon.containsValue(txrem, "-关联-清算-减资-撤资-新设-") || !bopdecCommon.containsValue(txrem, "-股权-产权-股份-"))) {
//                    return ValidResult.build(false, "第208条核查:交易编码为“622014转让境内企业股权/购买转让的外商投资企业股权”，但交易附言不包含“股权/产权/股份”或包含“关联/清算/减资/撤资/新设”");
//                }
//                //209交易编码为“622015对境外母公司的股权投资的撤回（逆向股权投资的撤回）/外商投资企业对境外母公司的股权投资（逆向股权投资）”，但交易附言不包含“母公司”或不包含“投资/资本/股”或包含“关联/附属/分支/联营/境内母/境外子”。
//                if (bopdecCommon.indexGt(txcode, "-622015-") && (bopdecCommon.containsValue(txrem, "-关联-附属-分支-联营-境内母-境外子-") || !bopdecCommon.containsValue(txrem, "-母公司-投资-资本-股-"))) {
//                    return ValidResult.build(false, "第209条核查:交易编码为“622015对境外母公司的股权投资的撤回（逆向股权投资的撤回）/外商投资企业对境外母公司的股权投资（逆向股权投资）”，但交易附言不包含“母公司”或不包含“投资/资本/股”或包含“关联/附属/分支/联营/境内母/境外子”");
//                }
//                //210交易编码为“622016非法人投资款汇入/撤出”，但交易编码包含“关联/联属/子/母”。
//                if (bopdecCommon.indexGt(txcode, "-622016-") && bopdecCommon.containsValue(txrem, "-关联-联属-子-母-")) {
//                    return ValidResult.build(false, "第210条核查:交易编码为“622016非法人投资款汇入/撤出”，但交易编码包含“关联/联属/子/母”");
//                }
//                //211交易编码为“622021”，但交易附言包含“关联/附属/分支/联营/担保/联属/境内母/境外子”。
//                if (bopdecCommon.indexGt(txcode, "-622021-") && bopdecCommon.containsValue(txrem, "-关联-附属-分支-联营-担保-联属-境内母-境外子-")) {
//                    return ValidResult.build(false, "第211条核查:交易编码为“622021”，但交易附言包含“关联/附属/分支/联营/担保/联属/境内母/境外子”");
//                }
//                //212交易编码为“622022收回对境外母公司的贷款及其他往来（逆向贷款投资的撤回）/对境外母公司的贷款及其他往来（逆向贷款投资）”，但交易附言包含“关联/附属/分支/联营/担保/联属/境内母/境外子”。
//                if (bopdecCommon.indexGt(txcode, "-622022-") && bopdecCommon.containsValue(txrem, "-关联-附属-分支-联营-担保-联属-境内母-境外子-")) {
//                    return ValidResult.build(false, "第212条核查:交易编码为“622022收回对境外母公司的贷款及其他往来（逆向贷款投资的撤回）/对境外母公司的贷款及其他往来（逆向贷款投资）”，但交易附言包含“关联/附属/分支/联营/担保/联属/境内母/境外子”");
//                }
//                //213交易编码为“622030向非居民出售境内不动产收入/从非居民购买境内不动产支出”，但交易附言包含“中介/税/租/境内母/境外子”
//                if (bopdecCommon.indexGt(txcode, "-622030-") && bopdecCommon.containsValue(txrem, "-中介-税-租-境内母-境外子-")) {
//                    return ValidResult.build(false, "第213条核查:交易编码为“622030向非居民出售境内不动产收入/从非居民购买境内不动产支出”，但交易附言包含“中介/税/租/境内母/境外子”");
//                }
//                //214交易编码为“623011”，但交易附言不包含“联属”或不包含“投资/资本/股”或包含“关联/子/母”。
//                if (bopdecCommon.indexGt(txcode, "-623011-") && (bopdecCommon.containsValue(txrem, "-关联-子-母-") || !bopdecCommon.containsValue(txrem, "-联属-投资-资本-股-"))) {
//                    return ValidResult.build(false, "第214条核查:交易编码为“623011”，但交易附言不包含“联属”或不包含“投资/资本/股”或包含“关联/子/母”");
//                }
//                //215交易编码为“623012接受境外联属企业的股权投资/境外联属企业撤回对境内的股权投资”，但交易附言不包含“联属”或不包含“投资/资本/股”或包含“关联/子/母”。
//                if (bopdecCommon.indexGt(txcode, "-623012-") && (bopdecCommon.containsValue(txrem, "-关联-子-母-") || !bopdecCommon.containsValue(txrem, "-联属-投资-资本-股-"))) {
//                    return ValidResult.build(false, "第215条核查:交易编码为“623012接受境外联属企业的股权投资/境外联属企业撤回对境内的股权投资”，但交易附言不包含“联属”或不包含“投资/资本/股”或包含“关联/子/母”");
//                }
//                //216交易编码为“623021收回对境外联属企业的贷款及其他往来/向境外联属企业提供贷款及其他债权”，但交易附言不包含“联属”；或包含“关联/担保/子/母”,剔除交易附言包含“工程”字样的数据。
//                if (bopdecCommon.indexGt(txcode, "-623021-") && (!bopdecCommon.containsValue(txrem, "-联属-借-贷-放-代垫-应-") || (bopdecCommon.containsValue(txrem, "-关联-担保-子-母-") && !bopdecCommon.containsValue(txrem, "-工程-")))) {
//                    return ValidResult.build(false, "第216条核查:交易编码为“623021收回对境外联属企业的贷款及其他往来/向境外联属企业提供贷款及其他债权”，但交易附言不包含“联属”；或包含“关联/担保/子/母”,剔除交易附言包含“工程”字样的数据");
//                }
//                //217交易编码为“623022接受境外联属企业的贷款及其他往来/ 偿还境外联属企业贷款及其他债务”，但交易附言不包含“联属”或不包含“借/贷/外债/代垫/应”或包含“关联/担保/子/母/利息”。
//                if (bopdecCommon.indexGt(txcode, "-623022-") && (bopdecCommon.containsValue(txrem, "-关联-担保-子-母-利息-") || !bopdecCommon.containsValue(txrem, "-联属-借-贷-外债-代垫-应-")) && !bopdecCommon.containsValue(txrem, "-资金池-不出境-不出口-")) {
//                    return ValidResult.build(false, "第217条核查:交易编码为“623022接受境外联属企业的贷款及其他往来/ 偿还境外联属企业贷款及其他债务”，但交易附言不包含“联属”或不包含“借/贷/外债/代垫/应”或包含“关联/担保/子/母/利息”。剔除交易附言包含“资金池”、“不出境”、“不出口”字样数据。");
//                }
//                //218交易编码为“721010卖出境外机构境外发行的股票或股权/投资境外机构境外发行的股票或股权”，但交易附言不包含“股”。
//                if (bopdecCommon.indexGt(txcode, "-721010-") && !bopdecCommon.containsValue(txrem, "-股-")) {
//                    return ValidResult.build(false, "第218条核查:交易编码为“721010卖出境外机构境外发行的股票或股权/投资境外机构境外发行的股票或股权”，但交易附言不包含“股”");
//                }
//                //219交易编码为“721020卖出境内机构在境外发行的股票或股权/投资境内机构在境外发行的股票或股权”，但交易附言不包含“股”。
//                if (bopdecCommon.indexGt(txcode, "-721020-") && !bopdecCommon.containsValue(txrem, "-股-")) {
//                    return ValidResult.build(false, "第219条核查:交易编码为“721020卖出境内机构在境外发行的股票或股权/投资境内机构在境外发行的股票或股权”，但交易附言不包含“股”");
//                }
//                //220交易编码为“721030在境外市场发行股票或股权/境内公司回购境外发行的股票或股权”，但交易附言不包含“股”。
//                if (bopdecCommon.indexGt(txcode, "-721030-") && !bopdecCommon.containsValue(txrem, "-股-")) {
//                    return ValidResult.build(false, "第220条核查:交易编码为“721030在境外市场发行股票或股权/境内公司回购境外发行的股票或股权”，但交易附言不包含“股”");
//                }
//                //221交易编码为“721040非居民买入/卖出境内股票或股权”，但交易附言不包含“股”。
//                if (bopdecCommon.indexGt(txcode, "-721040-") && !bopdecCommon.containsValue(txrem, "-股-") && !bopdecCommon.containsValue(custnm, "-证券-")) {
//                    return ValidResult.build(false, "第221条核查:交易编码为“721040非居民买入/卖出境内股票或股权”，但交易附言不包含“股”。剔除申报主体名称含“证券”的数据。");
//                }
//                //222交易编码为“721050非居民回购/发行境内股票或股权”，但交易附言不包含“股”。
//                if (bopdecCommon.indexGt(txcode, "-721050-") && !bopdecCommon.containsValue(txrem, "-股-")) {
//                    return ValidResult.build(false, "第222条核查:交易编码为“721050非居民回购/发行境内股票或股权”，但交易附言不包含“股”");
//                }
//                //223交易编码为“722010赎回/申购境外投资基金”，但交易附言不包含“基金”。
//                if (bopdecCommon.indexGt(txcode, "-722010-") && !bopdecCommon.containsValue(txrem, "-基金-")) {
//                    return ValidResult.build(false, "第223条核查:交易编码为“722010赎回/申购境外投资基金”，但交易附言不包含“基金”");
//                }
//                //224交易编码为“722020募集/清算境外投资基金”，但交易附言不包含“基金”。
//                if (bopdecCommon.indexGt(txcode, "-722020-") && !bopdecCommon.containsValue(txrem, "-基金-")) {
//                    return ValidResult.build(false, "第224条核查:交易编码为“722020募集/清算境外投资基金”，但交易附言不包含“基金”");
//                }
//                //225交易编码为“722030非居民申购/赎回境内投资基金”，但交易附言不包含“基金”。
//                if (bopdecCommon.indexGt(txcode, "-722030-") && !bopdecCommon.containsValue(txrem, "-基金-")) {
//                    return ValidResult.build(false, "第225条核查:交易编码为“722030非居民申购/赎回境内投资基金”，但交易附言不包含“基金”");
//                }
//                //226交易编码为“722040非居民清算境内募集的/境内募集投资基金”，但交易附言不包含“基金”。
//                if (bopdecCommon.indexGt(txcode, "-722040-") && !bopdecCommon.containsValue(txrem, "-基金-")) {
//                    return ValidResult.build(false, "第226条核查:交易编码为“722040非居民清算境内募集的/境内募集投资基金”，但交易附言不包含“基金”");
//                }
//                //227交易编码为“723011卖出/买入境外短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”。
//                if (bopdecCommon.indexGt(txcode, "-723011-") && (bopdecCommon.containsValue(txrem, "-长期-一年以上-1年以上-股-基金-") || !bopdecCommon.containsValue(txrem, "-债-"))) {
//                    return ValidResult.build(false, "第227条核查:交易编码为“723011卖出/买入境外短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”");
//                }
//                //228交易编码为“723012发行/偿付境外短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”。
//                if (bopdecCommon.indexGt(txcode, "-723012-") && (bopdecCommon.containsValue(txrem, "-长期-一年以上-1年以上-股-基金-") || !bopdecCommon.containsValue(txrem, "-债-"))) {
//                    return ValidResult.build(false, "第228条核查:交易编码为“723012发行/偿付境外短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”");
//                }
//                //229交易编码为“723013非居民买入/卖出境内短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”。
//                if (bopdecCommon.indexGt(txcode, "-723013-") && (bopdecCommon.containsValue(txrem, "-长期-一年以上-1年以上-股-基金-") || !bopdecCommon.containsValue(txrem, "-债-"))) {
//                    return ValidResult.build(false, "第229条核查:交易编码为“723013非居民买入/卖出境内短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”");
//                }
//                //230交易编码为“723014非居民偿付/发行境内短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”。
//                if (bopdecCommon.indexGt(txcode, "-723014-") && (bopdecCommon.containsValue(txrem, "-长期-一年以上-1年以上-股-基金-") || !bopdecCommon.containsValue(txrem, "-债-"))) {
//                    return ValidResult.build(false, "第230条核查:交易编码为“723014非居民偿付/发行境内短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”");
//                }
//                //231交易编码为“723021卖出/买入境外中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”。
//                if (bopdecCommon.indexGt(txcode, "-723021-") && (bopdecCommon.containsValue(txrem, "-短期-一年以下-一年以内-1年以内-1年以下-股-基金-") || !bopdecCommon.containsValue(txrem, "-债-"))) {
//                    return ValidResult.build(false, "第231条核查:交易编码为“723021卖出/买入境外中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”");
//                }
//                //232交易编码为“723022发行/偿付境外中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”。
//                if (bopdecCommon.indexGt(txcode, "-723022-") && (bopdecCommon.containsValue(txrem, "-短期-一年以下-一年以内-1年以内-1年以下-股-基金-") || !bopdecCommon.containsValue(txrem, "-债-"))) {
//                    return ValidResult.build(false, "第232条核查:交易编码为“723022发行/偿付境外中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”");
//                }
//                //233交易编码为“723023非居民买入/卖出境内中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”。
//                if (bopdecCommon.indexGt(txcode, "-723023-") && (bopdecCommon.containsValue(txrem, "-短期-一年以下-一年以内-1年以内-1年以下-股-基金-") || !bopdecCommon.containsValue(txrem, "-债-"))) {
//                    return ValidResult.build(false, "第233条核查:交易编码为“723023非居民买入/卖出境内中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”");
//                }
//                //234交易编码为“723024非居民偿付/发行境内中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”。
//                if (bopdecCommon.indexGt(txcode, "-723024-") && (bopdecCommon.containsValue(txrem, "-短期-一年以下-一年以内-1年以内-1年以下-股-基金-") || !bopdecCommon.containsValue(txrem, "-债-"))) {
//                    return ValidResult.build(false, "第234条核查:交易编码为“723024非居民偿付/发行境内中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”");
//                }
//                //235交易编码为“724000因金融衍生工具交易引起的收入/支出”，但交易附言不包含“期权/期货/掉期/衍生”或包含“债券/股票/基金”。
//                if (bopdecCommon.indexGt(txcode, "-724000-") && (bopdecCommon.containsValue(txrem, "-债券-股票-基金-") || !bopdecCommon.containsValue(txrem, "-期权-期货-掉期-衍生-"))) {
//                    return ValidResult.build(false, "第235条核查:交易编码为“724000因金融衍生工具交易引起的收入/支出”，但交易附言不包含“期权/期货/掉期/衍生”或包含“债券/股票/基金”");
//                }
//                //236交易编码为“821010资产-人寿保险和年金权益”，但交易附言不包含“年金/寿”或包含“利/赔/保费”。
//                if (bopdecCommon.indexGt(txcode, "-821010-") && (bopdecCommon.containsValue(txrem, "-利-赔-保费-") || !bopdecCommon.containsValue(txrem, "-年金-寿-"))) {
//                    return ValidResult.build(false, "第236条核查:交易编码为“821010资产-人寿保险和年金权益”，但交易附言不包含“年金/寿”或包含“利/赔/保费”");
//                }
//                //237交易编码为“821020对外贷款的收回/向境外提供贷款”，但交易附言包含“息/母/子/附属/关联(但不是‘非关联、无关联’)/存款”。
//                if (bopdecCommon.indexGt(txcode, "-821020-") && (bopdecCommon.containsValue(txrem, "-息-母-子-附属-存款-") || (!bopdecCommon.containsValue(txrem, "-非关联-无关联-") && bopdecCommon.containsValue(txrem, "-关联-")))) {
//                    return ValidResult.build(false, "第237条核查:交易编码为“821020对外贷款的收回/向境外提供贷款”，但交易附言包含“息/母/子/附属/关联(但不是‘非关联、无关联’)/存款”");
//                }
//                //238交易编码为“821030收回或调回存放境外存款本金/存放境外存款”，但交易附言包含“保证金/借/贷/利息”。
//                if (bopdecCommon.indexGt(txcode, "-821030-") && bopdecCommon.containsValue(txrem, "-保证金-借-贷-利息-")) {
//                    return ValidResult.build(false, "第238条核查:交易编码为“821030收回或调回存放境外存款本金/存放境外存款”，但交易附言包含“保证金/借/贷/利息”");
//                }
//                //239交易编码为“822010负债-人寿保险和年金权益”，但交易附言不包含“年金/寿”或包含“利/赔/保费”。
//                if (bopdecCommon.indexGt(txcode, "-822010-") && (bopdecCommon.containsValue(txrem, "-利-赔-保费-") || !bopdecCommon.containsValue(txrem, "-年金-寿-"))) {
//                    return ValidResult.build(false, "第239条核查:交易编码为“822010负债-人寿保险和年金权益”，但交易附言不包含“年金/寿”或包含“利/赔/保费”");
//                }
//                //240交易编码为“822020获得/偿还境外贷款”，但交易附言包含“息/母/子/附属/关联（但不是‘非关联’、‘无关联’)/联属”。
//                if (bopdecCommon.indexGt(txcode, "-822020-") && (bopdecCommon.containsValue(txrem, "-息-母-子-附属-") || (!bopdecCommon.containsValue(txrem, "-非关联-无关联-") && bopdecCommon.containsValue(txrem, "-关联-")) || (!bopdecCommon.containsValue(txrem, "-非联属-") && bopdecCommon.containsValue(txrem, "-联属-")))) {
//                    return ValidResult.build(false, "第240条核查:交易编码为“822020获得/偿还境外贷款”，但交易附言包含“息/母/子/附属/关联（但不是‘非关联’、‘无关联’)/联属（但不是‘非联属’）”。");
//                }
//                //241交易编码1为“822030境外存入款项/调出”，但涉外收入交易附言1不包含“非居民从境外收款”、对外支出交易附言1不包含“非居民向境外付款”。
//                if (bopdecCommon.indexGt(txcode, "-822030-") && ((!bopdecCommon.containsValue(txrem, "-非居民从境外收款-收汇-收入-") && inifrm.startsWith("dba")) || (!bopdecCommon.containsValue(txrem, "-非居民向境外付款-付汇-支出-") && "-dbb-dbc-".indexOf(inifrm) > 0))) {
//                    return ValidResult.build(false, "第241条核查:交易编码为“822030境外存入款项/调出”，但涉外收入交易附言不包含“非居民从境外收款/收汇/收入”、对外支出交易附言不包含“非居民向境外付款/付汇/支出”。");
//                }
//            }

            //96 交易附言1或交易附言2与申报主体名称一致。
            if (!MdaUtils.isEmpty(txrem) && !MdaUtils.isEmpty(custnm)) {
                if (txrem.equals(custnm)) {
                    return ValidResult.build(false, "96：交易附言1与申报主体名称一致");
                }
            }
            //97 交易附言1小于等于2个字节或为空格或不含中文（交易附言为全字符、全字母、全数字、填写“无”或空）；有交易编码2但交易附言2小于等于2个字节或为空格或不含中文。
            if (MdaUtils.isEmpty(txrem) || "无".equals((String) txrem.trim()) || len <= 2 || !bopdecCommon.isChinese((String) txrem)) {
                return ValidResult.build(false, "97：交易附言1小于等于2个字节或为空格或不含中文（交易附言为全字符、全字母、全数字、填写“无”或空）");
            }
        }

        /*
        优化：按照资本项目数字化的要求，对于业务来源为单一窗口、网银、手机银行等渠道的业务，根据资本项目的收支申报类型，涉及跨境收支信息报送，
        应在“交易附言”栏增加“CADS”字样；涉及境内划转信息报送，应在“交易附言”栏增加“CADS”字样。
         */
        if("dba".equals(inifrm) || "dbd".equals(inifrm)){
            dir = "I";
        }
        if("Y".equals( zbxmszh )) {
            if (!MdaUtils.isEmpty(txcode)) {
                if (bopdecCommon.isZbxm(txcode, dir)) {
                    if (!txrem.contains("CADS")) {
                        return ValidResult.build(false, "无资本项目数字化标识，请添加CADS前缀");
                    }
                }
            }
        }else {
            if (txrem.contains("CADS")) {
                return ValidResult.build(false, "非资本项目数字化请删除CADS字样");
            }
        }
        return null;
    }

    public WarningResult warncheckTxrem(CheckItems checkItems,String subid){
        String custnm = checkItems.getCustnm();
        String oppuser = checkItems.getOppuser();
        String custype = checkItems.getCustype();
        String txcode = checkItems.getTxcode();
        String txcode2 = checkItems.getTxcode2();
        String tx2rem = checkItems.getTx2rem();
        String txrem = checkItems.getTxrem();
        String paytype = checkItems.getPaytype();
        String transName = checkItems.getTransName().toLowerCase();
        String inifrm = checkItems.getBopobjtyp().toLowerCase();

        if (MdaUtils.isEmpty(txrem)) {
            return WarningResult.buildEmpty(subid);
        }
        //添加字段长度检查，不能超过 50-》256
        if (!MdaUtils.isEmpty(txrem)) {
            String str = txrem;
            byte[] buff = null;
            try {
                buff = str.getBytes("GB18030");
            } catch (Exception e) {
                return WarningResult.buildEmpty(subid);
            }
            int len = buff.length;
            if (len > 256) {
                return WarningResult.buildEmpty(subid);
            }
            //非查询交易才校验
            //只提供提示，不控制死
            if (!transName.endsWith("sel")) {
                //49交易对方名称以“(JN)”字样开头，且仅校验交易附言1，涉外收入不包含“收到境内非居民款项”,对外支出不包含“向境内非居民支付款项”。
                if (oppuser.startsWith("(JN)") && ((inifrm.startsWith("dba") && !txrem.contains("收到境内非居民款项")) || ("-dbb-dbc-".indexOf(inifrm) > 0 && !txrem.contains("向境内非居民支付款项")))) {
                    return WarningResult.build(subid, "第49条核查:交易对方名称以“(JN)”字样开头，且仅校验交易附言1，涉外收入不包含“收到境内非居民款项”,对外支出不包含“向境内非居民支付款项”。");
                }
                //38（1）涉外收入但交易附言包含“支出”、“支付”、“付汇”、“付款”、“进口”字样。剔除收付款类型为“退款”或交易附言含“运费、佣金、运输费”字样数据。
                //if (inifrm.startsWith("dba")   && bopdecCommon.containsValue($txrem,"-支出-支付-付汇-付款-进口-") && bopdecCommon.indexLe($paytype,"-R-") && !bopdecCommon.containsValue($txrem,"-运费-佣金-运输费-"))
                if (inifrm.startsWith("dba") && bopdecCommon.indexLe(paytype, "-R-") && (((txcode.startsWith("1") || txcode.startsWith("221")) && bopdecCommon.containsValue(txrem, "-进口-延期付款利息-货到付款-")) || bopdecCommon.containsValue(txrem, "-支出-付汇-付款-汇出-付出-撤出-预付-"))) {
                    return WarningResult.build(subid, "第38条核查:涉外收入但交易附言包含“支出”、“付汇”、“付款”、“汇出”、“付出”、“撤出”、“预付”字样；或涉外收入交易编码以1开头和以221开头但交易附言包含“进口”、“延期付款利息”、“货到付款”字样。剔除收付款类型为“退款”数据。");
                }
                //39（2）对外支付但交易附言包含“收入”、“收到”、“收汇”、“收款”、“出口”字样。剔除收付款类型为“退款”或交易附言含“运费、佣金、运输费、出口加工区”字样数据。
                if ("-dbb-dbc-".indexOf(inifrm) > 0 && bopdecCommon.indexLe(paytype, "-R-") && !bopdecCommon.containsValue(txrem, "-出口加工区-接收机-接收器-接收盒-收款机-") && (bopdecCommon.containsValue(txrem, "-收入-收到-收汇-收款-接收-接受-汇入-调回-汇回-收回-") || ((txcode.startsWith("1") || txcode.startsWith("221")) && bopdecCommon.containsValue(txrem, "-出口-")))) {
                    return WarningResult.build(subid, "核查第39条:涉外支出但交易附言包含“收入”、“收到”、“收汇”、“收款”、“接收”、“接受”、“汇入”、“调回”、“汇回”、“收回”字样；或涉外支出交易编码以1开头和以221开头但交易附言包含“出口”字样。剔除收付款类型为“退款”或交易附言含“出口加工区”、“接收机”、“接收器”、“接收盒”、“收款机”字样数据。");
                }
                //55  交易对方名称标注以“（JW）”字样开头，但交易附言包含“OSA”或“NRA”或“境内非居民”或“FTN”或“FTF”字样。
                if (oppuser.startsWith("(JW)") && bopdecCommon.containsValueUpper(txrem, "-OSA-NRA-境内非居民-FTN-FTF-")) {
                    return WarningResult.build(subid, "第55条核查:交易对方名称以“(JW)”开头，交易附言不能包含“OSA”或“NRA”或“境内非居民”或“FTN”或“FTF”字样");
                }
                //99 交易编码为“121010一般贸易”，但交易附言包含“进料/来料/黄金/边贸/离岸/贷款/加工费/特殊/保税区/无需报关/未报关/软件开发/广告费/本金/服务(非“服务器”）/网上/报酬/留学/生活费/学费/境内交易”。
                if (bopdecCommon.indexGt(txcode, "-121010-") && (bopdecCommon.containsValue(txrem, "-进料-来料-黄金-边贸-离岸-贷款-加工费-特殊-保税区-无需报关-未报关-软件开发-广告费-本金-网上-报酬-留学-生活费-学费-境内交易-市场采购贸易-") || (!txrem.contains("服务器") && txrem.contains("服务"))) && !bopdecCommon.containsValue(txrem, "-特殊流体-特殊监管-特殊退汇-")) {
                    return WarningResult.build(subid, "第99条核查:交易编码为“121010一般贸易”，但交易附言包含“进料/来料/黄金/边贸/离岸/贷款/加工费/特殊/保税区/无需报关/未报关/软件开发/广告费/本金/服务(非“服务器”）/网上/报酬/留学/生活费/学费/境内交易/市场采购贸易”。剔除交易附言含“特殊流体”、“特殊监管”、“特殊退汇”字样。");
                }
                //100 交易编码为“121020进料加工贸易”，但交易附言不包含“进料”或包含“一般贸易/来料/黄金/进口加工/电子商务”。
                if (bopdecCommon.indexGt(txcode, "-121020-") && (bopdecCommon.containsValue(txrem, "-一般贸易-来料-黄金-进口加工-电子商务-市场采购贸易-") || !txrem.contains("进料"))) {
                    return WarningResult.build(subid, "第100条核查:交易编码为“121020进料加工贸易”，但交易附言不包含“进料”或包含“一般贸易/来料/黄金/进口加工/电子商务/市场采购贸易”");
                }
                //101 交易编码为“121030海关特殊监管区域及保税监管场所进出境物流货物”，但交易附言包含“进料/来料/离岸/黄金/一般贸易”。
                if (bopdecCommon.indexGt(txcode, "-121030-") && bopdecCommon.containsValue(txrem, "-进料-来料-离岸-黄金-一般贸易-市场采购贸易-")) {
                    return WarningResult.build(subid, "第101条核查:交易编码为“121030海关特殊监管区域及保税监管场所进出境物流货物”，但交易附言包含“进料/来料/离岸/黄金/一般贸易/市场采购贸易”");
                }
                //102 交易编码为“121080边境小额贸易”，但交易附言包含“台/边民互市/黄金/一般贸易/易货（非贸易货）”。
                if (bopdecCommon.indexGt(txcode, "-121080-") && (bopdecCommon.containsValue(txrem, "-台-边民互市-黄金-一般贸易-市场采购贸易-") || (txrem.contains("易货") && !txrem.contains("贸易货")))) {
                    return WarningResult.build(subid, "第102条核查:交易编码为“121080边境小额贸易”，但交易附言包含“台/边民互市/黄金/一般贸易/易货（非贸易货）/市场采购贸易”。");
                }
                //103 交易编码为“121090对外承包工程货物出口”，但交易附言不包含“承包工程”或包含“黄金/一般贸易/边境/小额/维修/维护/服务/劳务”。
                if (bopdecCommon.indexGt(txcode, "-121090-") && (!bopdecCommon.containsValue(txrem, "-承包工程-") || bopdecCommon.containsValue(txrem, "-黄金-一般贸易-边境-小额-维修-维护-服务-劳务-市场采购贸易-"))) {
                    return WarningResult.build(subid, "第103条核查:交易编码为“121090对外承包工程货物出口”，但交易附言不包含“承包工程”或包含“黄金/一般贸易/边境/小额/维修/维护/服务/劳务/市场采购贸易”。");
                }
                //104 交易编码为“121990其他纳入海关统计的货物贸易”，但包含“未纳入/不纳入/没纳入/一般贸易/来料/进料/黄金/边境小额/不报关/不出境/未报关/无需报关/无须报关”。
                if (bopdecCommon.indexGt(txcode, "-121990-") && bopdecCommon.containsValue(txrem, "-未纳入-不纳入-没纳入-一般贸易-来料-进料-黄金-边境小额-不报关-不出境-未报关-无需报关-无须报关-")) {
                    return WarningResult.build(subid, "第104条核查:交易编码为“121990其他纳入海关统计的货物贸易”，但包含“未纳入/不纳入/没纳入/一般贸易/来料/进料/黄金/边境小额/不报关/不出境/未报关/无需报关/无须报关”");
                }
                //105 交易编码为“122010离岸转手买卖”，但交易附言不包含“离岸”或包含“一般贸易/来料/进料/转口/在岸/特殊/保税区”。
                if (bopdecCommon.indexGt(txcode, "-122010-") && (bopdecCommon.containsValue(txrem, "-一般贸易-来料-进料-转口-在岸-特殊-保税区-") || !bopdecCommon.containsValue(txrem, "-离岸-")) && !bopdecCommon.containsValue(txrem, "-特殊流体-特殊监管-特殊退汇-")) {
                    return WarningResult.build(subid, "第105条核查:交易编码为“122010离岸转手买卖”，但交易附言不包含“离岸”或包含“一般贸易/来料/进料/转口/在岸/特殊/保税区”。剔除交易附言含“特殊流体”、“特殊监管”、“特殊退汇”字样。");
                }
                //106 交易编码为“122020未纳入海关统计的非货币黄金”，但交易附言不包含“金”或包含“金属/金币/珠宝/手表/饰/一般贸易”。
                if (bopdecCommon.indexGt(txcode, "-122020-") && (bopdecCommon.containsValue(txrem, "-金属-金币-珠宝-手表-饰-一般贸易-") || !txrem.contains("金"))) {
                    return WarningResult.build(subid, "第106条核查:交易编码为“122020未纳入海关统计的非货币黄金”，但交易附言不包含“金”或包含“金属/金币/珠宝/手表/饰/一般贸易”。");
                }
                //107 交易编码为“122030未纳入海关统计的网络购物”，但交易附言包含“黄金/来料/进料/一般贸易/软件/音像/游戏币”。
                if (bopdecCommon.indexGt(txcode, "-122030-") && bopdecCommon.containsValue(txrem, "-黄金-来料-进料-一般贸易-软件-音像-游戏币-")) {
                    return WarningResult.build(subid, "第107条核查:交易编码为“122030未纳入海关统计的网络购物”，但交易附言包含“黄金/来料/进料/一般贸易/软件/音像/游戏币”");
                }
                //108 交易编码为“122990其他未纳入海关统计的货物贸易”，但交易附言包含“网/海淘/黄金/一般贸易/来料/进料/电子商务/虚拟/软件/边境小额/旅游购物”。
                if (bopdecCommon.indexGt(txcode, "-122990-") && bopdecCommon.containsValue(txrem, "-网购-网络-海淘-黄金-一般贸易-来料-进料-电子商务-虚拟-软件-边境小额-旅游购物-市场采购贸易-已报关-")) {
                    return WarningResult.build(subid, "第108条核查:交易编码为“122990其他未纳入海关统计的货物贸易”，但交易附言包含“网购/网络/海淘/黄金/一般贸易/来料/进料/电子商务/虚拟/软件/边境小额/旅游购物/市场采购贸易/已报关”。");
                }
                //109 交易编码为“221000来料加工工缴费收入/出料加工工缴费支出”，但交易附言不包含“来料/工缴费/加工费/出料/带料”字样或包含“一般贸易/进料/货款”。
                if (bopdecCommon.indexGt(txcode, "-221000-") && (!bopdecCommon.containsValue(txrem, "-来料-工缴费-加工费-出料-带料-") || bopdecCommon.containsValue(txrem, "-一般贸易-进料-货款-"))) {
                    return WarningResult.build(subid, "第109条核查:交易编码为“221000来料加工工缴费收入/出料加工工缴费支出”，但交易附言不包含“来料/工缴费/加工费/出料/带料”字样或包含“一般贸易/进料/货款”");
                }
                //110 交易编码为“222011涉及我国出口的海洋货运服务”，但交易附言包含“进口/空运/陆运/佣金/货款/代理/客运/租（但不包含‘人员’）/速遣费/滞期费”。
                if (bopdecCommon.indexGt(txcode, "-222011-") && (bopdecCommon.containsValue(txrem, "-进口-空运-陆运-佣金-货款-代理-客运-速遣费-滞期费-") || (!bopdecCommon.containsValue(txrem, "-人员-") && bopdecCommon.containsValue(txrem, "-租-")))) {
                    return WarningResult.build(subid, "第110条核查:交易编码为“222011涉及我国出口的海洋货运服务”，但交易附言包含“进口/空运/陆运/佣金/货款/代理/客运/租（但不包含‘人员’）/速遣费/滞期费”");
                }
                //111 交易编码为“222012涉及我国进口的海洋货运服务”，但交易附言包含“出口/空运/陆运/佣金/货款/代理/客运/租（但不包含‘人员’）/速遣费/滞期费”。
                if (bopdecCommon.indexGt(txcode, "-222012-") && (bopdecCommon.containsValue(txrem, "-出口-空运-陆运-佣金-货款-代理-客运-速遣费-滞期费-") || (!bopdecCommon.containsValue(txrem, "-人员-") && bopdecCommon.containsValue(txrem, "-租-")))) {
                    return WarningResult.build(subid, "第111条核查:交易编码为“222012涉及我国进口的海洋货运服务”，但交易附言包含“出口/空运/陆运/佣金/货款/代理/客运/租（但不包含‘人员’）/速遣费/滞期费”");
                }
                //112 交易编码为“222013不涉及我国进出口的海洋货运服务”，但交易附言包含“空运/陆运/港口/仓储/装卸/搬运/引航/牵引/导航/检/修/使%费/客运”。
                //由于%不确定暂时先注释
                //    if (bopdecCommon.indexGt($txcode,"-222013-")  && bopdecCommon.containsValue($txrem,"-空运-陆运-港口-仓储-装卸-搬运-引航-牵引-导航-检-修-使%费-客运-"))
                if (bopdecCommon.indexGt(txcode, "-222013-") && (bopdecCommon.containsValue(txrem, "-空运-陆运-港口-仓储-装卸-搬运-引航-牵引-导航-检-修-客运-") || bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(txrem, "使", "费")))) {
                    return WarningResult.build(subid, "第112条核查:交易编码为“222013不涉及我国进出口的海洋货运服务”，但交易附言包含“空运/陆运/港口/仓储/装卸/搬运/引航/牵引/导航/检/修/使%费/客运”");
                }
                //113 交易编码为“222014海运客运”，但交易附言包含“空运/陆运/出口/进口”。
                if (bopdecCommon.indexGt(txcode, "-222014-") && bopdecCommon.containsValue(txrem, "-空运-陆运-出口-进口-")) {
                    return WarningResult.build(subid, "第113条核查:交易编码为“222014海运客运”，但交易附言包含“空运/陆运/出口/进口”");
                }
                //114 交易编码为“222019其他海运服务”，但交易附言包含“其他/空运/陆运/速遣/清关/入渔/滞/运费/保险/修”。
                if (bopdecCommon.indexGt(txcode, "-222019-") && bopdecCommon.containsValue(txrem, "-空运-陆运-速遣-清关-入渔-滞-运费-保险-修-")) {
                    return WarningResult.build(subid, "第114条核查:交易编码为“222019其他海运服务”，但交易附言包含“空运/陆运/速遣/清关/入渔/滞/运费/保险/修”");
                }
                //115 交易编码为“222021涉及我国出口的空中货运服务”，但交易附言包含“进口/海运/陆运/佣金/货款/代理/客运/租”。
                if (bopdecCommon.indexGt(txcode, "-222021-") && bopdecCommon.containsValue(txrem, "-进口-海运-陆运-佣金-货款-代理-客运-租-")) {
                    return WarningResult.build(subid, "第115条核查:交易编码为“222021涉及我国出口的空中货运服务”，但交易附言包含“进口/海运/陆运/佣金/货款/代理/客运/租”");
                }
                //116 交易编码为“222022涉及我国进口的空中货运服务”，但交易附言包含“出口/海运/陆运/佣金/货款/代理/客运/租”。
                if (bopdecCommon.indexGt(txcode, "-222022-") && bopdecCommon.containsValue(txrem, "-出口-海运-陆运-佣金-货款-代理-客运-租-")) {
                    return WarningResult.build(subid, "第116条核查:交易编码为“222022涉及我国进口的空中货运服务”，但交易附言包含“出口/海运/陆运/佣金/货款/代理/客运/租”");
                }
                //117交易编码为“222023不涉及我国进出口的空中货运服务”，但交易附言包含“海运/陆运/港口/仓储/装卸/搬运/引航/牵引/导航/检/修/使%费/客运”。
                //由于%不确定暂时先注释
                // if (bopdecCommon.indexGt($txcode,"-222023-")  && bopdecCommon.containsValue($txrem,"-海运-陆运-港口-仓储-装卸-搬运-引航-牵引-导航-检-修-使%费-客运-"))
                if (bopdecCommon.indexGt(txcode, "-222023-") && (bopdecCommon.containsValue(txrem, "-海运-陆运-港口-仓储-装卸-搬运-引航-牵引-导航-检-修-客运-") || bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(txrem, "使", "费")))) {
                    return WarningResult.build(subid, "第117条核查:交易编码为“222023不涉及我国进出口的空中货运服务”，但交易附言包含“海运/陆运/港口/仓储/装卸/搬运/引航/牵引/导航/检/修/使%费/客运”");
                }
                //118交易编码为“222024空运客运”，但交易附言包含“海运/陆运/出口/进口”。
                if (bopdecCommon.indexGt(txcode, "-222024-") && bopdecCommon.containsValue(txrem, "-海运-陆运-出口-进口-")) {
                    return WarningResult.build(subid, "第118条核查:交易编码为“222024空运客运”，但交易附言包含“海运/陆运/出口/进口”");
                }
                //119交易编码为“222029其他空运服务”，但交易附言包含“海运/陆运/速遣/清关/滞/运费/保险/修”。
                if (bopdecCommon.indexGt(txcode, "-222029-") && bopdecCommon.containsValue(txrem, "-海运-陆运-速遣-清关-滞-运费-保险-修-")) {
                    return WarningResult.build(subid, "第119条核查:交易编码为“222029其他空运服务”，但交易附言包含“海运/陆运/速遣/清关/滞/运费/保险/修”");
                }
                //120交易编码为“222031涉及我国出口的其他运输方式货运服务”，但交易附言包含“进口/海运/空运/佣金/货款/代理/客运/租”。
                if (bopdecCommon.indexGt(txcode, "-222031-") && bopdecCommon.containsValue(txrem, "-进口-海运-空运-佣金-货款-代理-客运-租-")) {
                    return WarningResult.build(subid, "第120条核查:交易编码为“222031涉及我国出口的其他运输方式货运服务”，但交易附言包含“进口/海运/空运/佣金/货款/代理/客运/租”");
                }
                //121交易编码为“222032涉及我国进口的其他运输方式货运服务”，但交易附言包含“出口/海运/空运/佣金/货款/代理/客运/租”。
                if (bopdecCommon.indexGt(txcode, "-222032-") && bopdecCommon.containsValue(txrem, "-出口-海运-空运-佣金-货款-代理-客运-租-")) {
                    return WarningResult.build(subid, "第121条核查:交易编码为“222032涉及我国进口的其他运输方式货运服务”，但交易附言包含“出口/海运/空运/佣金/货款/代理/客运/租”");
                }
                //122交易编码为“222033不涉及我国进出口的其他运输方式货运服务”，但交易附言包含“海运/空运/港口/仓储/装卸/搬运/引航/牵引/导航/检/修/使%费/客运”。
                //由于%不确定暂时先注释
                //if (bopdecCommon.indexGt($txcode,"-222033-")  && bopdecCommon.containsValue($txrem,"-海运-空运-港口-仓储-装卸-搬运-引航-牵引-导航-检-修-使%费-客运-"))
                if (bopdecCommon.indexGt(txcode, "-222033-") && (bopdecCommon.containsValue(txrem, "-海运-空运-港口-仓储-装卸-搬运-引航-牵引-导航-检-修-客运-") || bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(txrem, "使", "费")))) {
                    return WarningResult.build(subid, "第122条核查:交易编码为“222033不涉及我国进出口的其他运输方式货运服务”，但交易附言包含“海运/空运/港口/仓储/装卸/搬运/引航/牵引/导航/检/修/使%费/客运”");
                }
                //123交易编码为“222034其他运输方式客运”，但交易附言包含“海运/空运/出口/进口”。
                if (bopdecCommon.indexGt(txcode, "-222034-") && bopdecCommon.containsValue(txrem, "-海运-空运-出口-进口-")) {
                    return WarningResult.build(subid, "第123条核查:交易编码为“222034其他运输方式客运”，但交易附言包含“海运/空运/出口/进口”");
                }
                //124交易编码为“222039其他运输方式的其他服务”，但交易附言包含“空运/海运/速遣/入渔/滞/运费/保险/快递/修”。
                if (bopdecCommon.indexGt(txcode, "-222039-") && bopdecCommon.containsValue(txrem, "-空运-海运-速遣-入渔-滞-运费-保险-快递-修-")) {
                    return WarningResult.build(subid, "第124条核查:交易编码为“222039其他运输方式的其他服务”，但交易附言包含“空运/海运/速遣/入渔/滞/运费/保险/快递/修”");
                }
                //125交易编码为“222040邮政及寄递服务”，但交易附言包含“电信/电子/通讯/通信”。
                if (bopdecCommon.indexGt(txcode, "-222040-") && bopdecCommon.containsValue(txrem, "-电信-电子-通讯-通信-")) {
                    return WarningResult.build(subid, "第125条核查:交易编码为“222040邮政及寄递服务”，但交易附言包含“电信/电子/通讯/通信”");
                }
                //126交易编码为“223010公务及商务旅行”，但交易附言包含“私/留学/学习/学费/培训”。
                if (bopdecCommon.indexGt(txcode, "-223010-") && bopdecCommon.containsValue(txrem, "-私-留学-学习-学费-培训-个人-")) {
                    return WarningResult.build(subid, "第126条核查:交易编码为“223010公务及商务旅行”，但交易附言包含“私/留学/学习/学费/培训/个人”");
                }
                //127交易编码为“223021就医及健康相关旅行”，但交易附言包含“药品/器械/远程/网络/兽医/咨询/球会”。
                if (bopdecCommon.indexGt(txcode, "-223021-") && bopdecCommon.containsValue(txrem, "-药品-器械-远程-网络-兽医-咨询-球会-")) {
                    return WarningResult.build(subid, "第127条核查:交易编码为“223021就医及健康相关旅行”，但交易附言包含“药品/器械/远程/网络/兽医/咨询/球会”");
                }
                //128交易编码为“223022留学及教育相关旅行（一年以上）”，但交易附言包含“探亲/旅游/远程/签证/中介/以下/以内/年内”。
                if (bopdecCommon.indexGt(txcode, "-223022-") && bopdecCommon.containsValue(txrem, "-探亲-旅游-远程-签证-中介-以下-以内-年内-")) {
                    return WarningResult.build(subid, "第128条核查:交易编码为“223022留学及教育相关旅行（一年以上）”，但交易附言包含“探亲/旅游/远程/签证/中介/以下/以内/年内”");
                }
                //129交易编码为“223023留学及教育相关旅行（一年及一年以下）”，但交易附言包含“探亲/旅游/远程/签证/一年以上/1年以上/中介”。
                if (bopdecCommon.indexGt(txcode, "-223023-") && bopdecCommon.containsValue(txrem, "-探亲-旅游-远程-签证-一年以上-1年以上-中介-")) {
                    return WarningResult.build(subid, "第129条核查:交易编码为“223023留学及教育相关旅行（一年及一年以下）”，但交易附言包含“探亲/旅游/远程/签证/一年以上/1年以上/中介”");
                }
                //130交易编码为“223029其他私人旅行”，但交易附言包含“教育/培训/公务/因公/商务/考察/会议/学/差旅/出差/会务”。
                if (bopdecCommon.indexGt(txcode, "-223029-") && bopdecCommon.containsValue(txrem, "-教育-培训-公务-因公-商务-考察-会议-学-差旅-出差-会务-")) {
                    return WarningResult.build(subid, "第130条核查:交易编码为“223029其他私人旅行”，但交易附言包含“教育/培训/公务/因公/商务/考察/会议/学/差旅/出差/会务”");
                }
                //131交易编码为“224010境外建设”，但交易附言包含“设计/咨询/内/技术/投资/采矿/开采”，剔除交易对方名称以“（JN）”字样开头的数据。
                if (bopdecCommon.indexGt(txcode, "-224010-") && (bopdecCommon.containsValue(txrem, "-设计-咨询-内-技术-投资-采矿-开采-") && !oppuser.startsWith("(JN)"))) {
                    return WarningResult.build(subid, "第131条核查:交易编码为“224010境外建设”，但交易附言包含“设计/咨询/内/技术/投资/采矿/开采”，剔除交易对方名称以“（JN）”字样开头的数据");
                }
                //132交易编码为“224020境内建设”，但交易附言包含“设计/咨询/外/技术/投资/采矿/开采”。
                if (bopdecCommon.indexGt(txcode, "-224020-") && bopdecCommon.containsValue(txrem, "-设计-咨询-外-技术-投资-采矿-开采-")) {
                    return WarningResult.build(subid, "第132条核查:交易编码为“224020境内建设”，但交易附言包含“设计/咨询/外/技术/投资/采矿/开采”");
                }
                //133交易编码为“225010寿险”，但交易附言包含“定期人寿/非返还/平安险/水渍险/一切险/社保/财产/伤害/意外”。
                if (bopdecCommon.indexGt(txcode, "-225010-") && bopdecCommon.containsValue(txrem, "-定期人寿-非返还-平安险-水渍险-一切险-社保-财产-伤害-意外-")) {
                    return WarningResult.build(subid, "第133条核查:交易编码为“225010寿险”，但交易附言包含“定期人寿/非返还/平安险/水渍险/一切险/社保/财产/伤害/意外”");
                }
                //134交易编码为“225021为我国出口提供的保险”，但交易附言包含“年金/信用/进口/进出口/社保”。
                if (bopdecCommon.indexGt(txcode, "-225021-") && bopdecCommon.containsValue(txrem, "-年金-信用-进口-进出口-社保-")) {
                    return WarningResult.build(subid, "第134条核查:交易编码为“225021为我国出口提供的保险”，但交易附言包含“年金/信用/进口/进出口/社保”");
                }
                //135交易编码为“225022为我国进口提供的保险”，但交易附言包含“年金/信用/出口/进出口/社保”。
                if (bopdecCommon.indexGt(txcode, "-225022-") && bopdecCommon.containsValue(txrem, "-年金-信用-出口-进出口-社保-")) {
                    return WarningResult.build(subid, "第135条核查:交易编码为“225022为我国进口提供的保险”，但交易附言包含“年金/信用/出口/进出口/社保”");
                }
                //136交易编码为“225029其他非寿险”，但交易附言包含“养老/年金/平安险/水渍险/再保险/货/社保/理赔/赔偿/赔款/其他”。
                if (bopdecCommon.indexGt(txcode, "-225029-") && bopdecCommon.containsValue(txrem, "-养老-年金-平安险-水渍险-再保险-货-社保-理赔-赔偿-赔款-其他-") && !bopdecCommon.containsValue(txrem, "-其他非寿险-")) {
                    return WarningResult.build(subid, "第136条核查:交易编码为“225029其他非寿险”，但交易附言包含“养老/年金/平安险/水渍险/再保险/货/社保/理赔/赔偿/赔款/其他”。剔除交易附言包含“其他非寿险”。");
                }
                //137交易编码为“225050保险辅助服务”，但交易附言包含“保费”。
                if (bopdecCommon.indexGt(txcode, "-225050-") && bopdecCommon.containsValue(txrem, "-保费-")) {
                    return WarningResult.build(subid, "第137条核查:交易编码为“225050保险辅助服务”，但交易附言包含“保费”");
                }
                //138交易编码为“226000金融服务”，但交易附言包含“认证/利息/保险/退休”。
                if (bopdecCommon.indexGt(txcode, "-226000-") && bopdecCommon.containsValue(txrem, "-认证-利息-保险-退休-")) {
                    return WarningResult.build(subid, "第138条核查:交易编码为“226000金融服务”，但交易附言包含“认证/利息/保险/退休”");
                }
                //139交易编码为“227010电信服务”，但交易附言包含“咨询/数据库/数据信息/计算机/安装/信息费/数据费/软件/设备安装/工程”。
                if (bopdecCommon.indexGt(txcode, "-227010-") && bopdecCommon.containsValue(txrem, "-咨询-数据库-数据信息-计算机-安装-信息费-数据费-软件-设备安装-工程-")) {
                    return WarningResult.build(subid, "第139条核查:交易编码为“227010电信服务”，但交易附言包含“咨询/数据库/数据信息/计算机/安装/信息费/数据费/软件/设备安装/工程”");
                }
                //140交易编码为“227020计算机服务”，但交易附言包含“进口/出口/报刊/书刊/动画”。
                if (bopdecCommon.indexGt(txcode, "-227020-") && bopdecCommon.containsValue(txrem, "-进口-出口-报刊-书刊-动画-")) {
                    return WarningResult.build(subid, "第140条核查:交易编码为“227020计算机服务”，但交易附言包含“进口/出口/报刊/书刊/动画”");
                }
                //141交易编码为“227030信息服务”，但交易附言包含“进口/出口/税/计算机/技术/版面费/电信”。
                if (bopdecCommon.indexGt(txcode, "-227030-") && bopdecCommon.containsValue(txrem, "-进口-出口-税-计算机-技术-版面费-电信-")) {
                    return WarningResult.build(subid, "第141条核查:交易编码为“227030信息服务”，但交易附言包含“进口/出口/税/计算机/技术/版面费/电信”");
                }
                //142交易编码为“228010研发成果转让费及委托研发”，但交易附言包含“使用/许可/特许/计算机/软件/视听/音像/检测/维修/修理/实验/检验/检疫/测验/测试/调试/售后/复制/分销/版面费”。
                if (bopdecCommon.indexGt(txcode, "-228010-") && bopdecCommon.containsValue(txrem, "-使用-许可-特许-计算机-软件-视听-音像-检测-维修-修理-实验-检验-检疫-测验-测试-调试-售后-复制-分销-版面费-")) {
                    return WarningResult.build(subid, "第142条核查:交易编码为“228010研发成果转让费及委托研发”，但交易附言包含“使用/许可/特许/计算机/软件/视听/音像/检测/维修/修理/实验/检验/检疫/测验/测试/调试/售后/复制/分销/版面费”");
                }
                //143交易编码为“228021法律服务”，但交易附言包含“会计/审计/管理/技术/税务/账/统计/帐/检验/测试/UL/产品认证/质量认证”。
                if (bopdecCommon.indexGt(txcode, "-228021-") && bopdecCommon.containsValue(txrem, "-会计-审计-管理-技术-税务-账-统计-帐-检验-测试-UL-产品认证-质量认证-")) {
                    return WarningResult.build(subid, "第143条核查:交易编码为“228021法律服务”，但交易附言包含“会计/审计/管理/技术/税务/账/统计/帐/检验/测试/UL/产品认证/质量认证”");
                }
                //144交易编码为“228022会计服务”，但交易附言包含“签证/佣金/法律/律师/仲裁/辩护/诉讼/受理/官司/监护”。
                if (bopdecCommon.indexGt(txcode, "-228022-") && bopdecCommon.containsValue(txrem, "-签证-佣金-法律-律师-仲裁-辩护-诉讼-受理-官司-监护-")) {
                    return WarningResult.build(subid, "第144条核查:交易编码为“228022会计服务”，但交易附言包含“签证/佣金/法律/律师/仲裁/辩护/诉讼/受理/官司/监护”");
                }
                //145交易编码为“228023管理咨询和公共关系服务”，但交易附言包含“技术/佣金/保险/计算机/金融/产品认证/中标服务费/签证/养老金/会计/审计/记账/税务/环保服务/国际会议报名费/UL/公告服务费/版面费”。
                if (bopdecCommon.indexGt(txcode, "-228023-") && bopdecCommon.containsValue(txrem, "-技术-佣金-保险-计算机-金融-中标服务费-签证-养老金-会计-审计-记账-税务-环保服务-国际会议报名费-UL-公告服务费-版面费-") && !bopdecCommon.containsValue(txrem, "-签证代理-签证代办-代理签证-代办签证-")) {
                    return WarningResult.build(subid, "第145条核查:交易编码为“228023管理咨询和公共关系服务”，但交易附言包含“技术/佣金/保险/计算机/金融/中标服务费/签证/养老金/会计/审计/记账/税务/环保服务/国际会议报名费/UL/公告服务费/版面费”。剔除交易附言包含“签证代理”、“签证代办”、“代理签证”、“代办签证”字样。");
                }
                //146交易编码为“228024广告服务”，但交易附言包含“展/出版”。
                if (bopdecCommon.indexGt(txcode, "-228024-") && bopdecCommon.containsValue(txrem, "-展-出版-") && !(bopdecCommon.containsValue(txrem, "-展-") && bopdecCommon.containsValue(txrem, "-广告-"))) {
                    return WarningResult.build(subid, "第146条核查:交易编码为“228024广告服务”，但交易附言包含“展/出版”。剔除交易附言既包含“展”又含“广告”字样的数据。");
                }
                //147交易编码为“228025展会服务”，但交易附言包含“版面/营销/推广/推销/广告/刊登”。
                if (bopdecCommon.indexGt(txcode, "-228025-") && bopdecCommon.containsValue(txrem, "-版面-营销-推广-推销-广告-刊登-")) {
                    return WarningResult.build(subid, "第147条核查:交易编码为“228025展会服务”，但交易附言包含“版面/营销/推广/推销/广告/刊登”");
                }
                //148交易编码为“228026市场调查、民意测验服务”，但交易附言包含“广告/展/推销”。
                if (bopdecCommon.indexGt(txcode, "-228026-") && bopdecCommon.containsValue(txrem, "-广告-展-推销-")) {
                    return WarningResult.build(subid, "第148条核查:交易编码为“228026市场调查、民意测验服务”，但交易附言包含“广告/展/推销”");
                }
                //149交易编码为“228031建筑、工程技术服务”，但交易附言包含“废物/污染/测量/产品测试/认证技术检验/产品检验检疫/服装/产品/计算机工程/境外建设/境内建设/石油/天然气/环保服务/采矿/佣金/管理/监理”。
                if (bopdecCommon.indexGt(txcode, "-228031-") && bopdecCommon.containsValue(txrem, "-废物-污染-测量-产品测试-认证技术检验-产品检验检疫-服装-产品-计算机工程-境外建设-境内建设-石油-天然气-环保服务-采矿-佣金-管理-监理-")) {
                    return WarningResult.build(subid, "第149条核查:交易编码为“228031建筑、工程技术服务”，但交易附言包含“废物/污染/测量/产品测试/认证技术检验/产品检验检疫/服装/产品/计算机工程/境外建设/境内建设/石油/天然气/环保服务/采矿/佣金/管理/监理”");
                }
                //150交易编码为“228032废物处理和防止污染服务”，但交易附言包含“许可/建筑/工程测量/制图/产品测试/认证/检验/检疫”。
                if (bopdecCommon.indexGt(txcode, "-228032-") && bopdecCommon.containsValue(txrem, "-许可-建筑-工程测量-制图-产品测试-认证-检验-检疫-")) {
                    return WarningResult.build(subid, "第150条核查:交易编码为“228032废物处理和防止污染服务”，但交易附言包含“许可/建筑/工程测量/制图/产品测试/认证/检验/检疫”");
                }
                //151交易编码为“228033农业和采矿服务”，但交易附言包含“测量/制图/产品测试/认证技术/产品检验检疫”。
                if (bopdecCommon.indexGt(txcode, "-228033-") && bopdecCommon.containsValue(txrem, "-测量-制图-产品测试-认证技术-产品检验检疫-")) {
                    return WarningResult.build(subid, "第151条核查:交易编码为“228033农业和采矿服务”，但交易附言包含“测量/制图/产品测试/认证技术/产品检验检疫”");
                }
                //152交易编码为“228039其他技术服务”，但交易附言包含“其他/计算机/电脑/研发/开发/佣金/货款/样品费/印刷/展览/会议/维护/专利/开采/建筑/动物检疫/废物/污染/污水/废气/放射性/环保服务/修”。
                if (bopdecCommon.indexGt(txcode, "-228039-") && bopdecCommon.containsValue(txrem, "-计算机-电脑-研发-开发-佣金-货款-样品费-印刷费-展览-会议-维护-专利-开采-建筑-动物检疫-废物-污染-污水-废气-放射性-环保服务-修-")) {
                    return WarningResult.build(subid, "第152条核查:交易编码为“228039其他技术服务”，但交易附言包含“计算机/电脑/研发/开发/佣金/货款/样品费/印刷费/展览/会议/维护/专利/开采/建筑/动物检疫/废物/污染/污水/废气/放射性/环保服务/修”");
                }
                //153交易编码为“228040经营性租赁服务”，但交易附言不包含“租”或包含“金融/融资/电信”。
                if (bopdecCommon.indexGt(txcode, "-228040-") && (!bopdecCommon.containsValue(txrem, "-租-") || bopdecCommon.containsValue(txrem, "-金融-融资-电信-"))) {
                    return WarningResult.build(subid, "第153条核查:交易编码为“228040经营性租赁服务”，但交易附言不包含“租”或包含“金融/融资/电信”");
                }
                //154交易编码为“228050货物或服务交易佣金及相关服务”，但交易附言不包含“佣/回扣/中介/提成/费/分成”或包含“运/金融/险”。
                if (bopdecCommon.indexGt(txcode, "-228050-") && (!bopdecCommon.containsValue(txrem, "-佣-回扣-中介-提成-费-分成-") || bopdecCommon.containsValue(txrem, "-运-金融-险-"))) {
                    return WarningResult.build(subid, "第154条核查:交易编码为“228050货物或服务交易佣金及相关服务”，但交易附言不包含“佣/回扣/中介/提成/费/分成”或包含“运/金融/险”");
                }
                //155交易编码为“228060办事处、代表处等办公经费”，但交易附言包含“房/屋/地/建筑/装修”。
                if (bopdecCommon.indexGt(txcode, "-228060-") && bopdecCommon.containsValue(txrem, "-房-屋-地-建筑-装修-")) {
                    return WarningResult.build(subid, "第155条核查:交易编码为“228060办事处、代表处等办公经费”，但交易附言包含“房/屋/地/建筑/装修”");
                }
                //156交易编码为“228990上述未提及的其他商业服务”，但交易附言包含“样品/进料/来料/出料/带料/邮购/学/商务/标签/注册/检/理财/技术/差旅/租/捐/签证/修/赔/计算机/网络/税/旅游/运费/猎头/招聘/装卸/罚/售后/研发/保证金/生活费/快件/仓储/科研/测量/制图/测试/装修/设计/推广/制作/经费/租赁/开采/返利/法律/会计/版面费”。
                if (bopdecCommon.indexGt(txcode, "-228990-") && bopdecCommon.containsValue(txrem, "-样品-进料-来料-出料-带料-邮购-学-商务-注册-检-理财-技术-差旅-租-捐-签证-修-赔-计算机-网络-税-旅游-运费-猎头-招聘-装卸-罚-售后-研发-保证金-生活费-快件-仓储-科研-测量-制图-测试-装修-设计-推广-经费-租赁-开采-返利-法律-会计-版面费-") && !(bopdecCommon.containsValue(txrem, "-租-") && bopdecCommon.containsValue(txrem, "-中介-"))) {
                    return WarningResult.build(subid, "第156条核查:交易编码为“228990上述未提及的其他商业服务”，但交易附言包含“样品/进料/来料/出料/带料/邮购/学/商务/注册/检/理财/技术/差旅/租/捐/签证/修/赔/计算机/网络/税/旅游/运费/猎头/招聘/装卸/罚/售后/研发/保证金/生活费/快件/仓储/科研/测量/制图/测试/装修/设计/推广/经费/租赁/开采/返利/法律/会计/版面费”。剔除交易附言中同时包含“租”及“中介”字样的数据。");
                }
                //157交易编码“为229010视听和相关服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），或包含“进口/出口/许可/转播/复制/分销”。
                if (bopdecCommon.indexGt(txcode, "-229010-") && (("-dbb-dbc-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(txrem, "-居民赴国外-居民前往国外-")) || ("-dba-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(txrem, "-非居民赴中国-非居民来中国-")) || bopdecCommon.containsValue(txrem, "-进口-出口-许可-转播-复制-分销-"))) {
                    return WarningResult.build(subid, "第157条核查:交易编码“为229010视听和相关服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），或包含“进口/出口/许可/转播/复制/分销”");
                }
                //158交易编码为“229020教育服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），或包含“留学”。
                if (bopdecCommon.indexGt(txcode, "-229020-") && (("-dbb-dbc-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(txrem, "-居民赴国外-居民前往国外-")) || ("-dba-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(txrem, "-非居民赴中国-非居民来中国-")) || bopdecCommon.containsValue(txrem, "-留学-")) && !bopdecCommon.containsValue(txrem, "-留学咨询-")) {
                    return WarningResult.build(subid, "第158条核查:交易编码为“229020教育服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），或包含“留学”。剔除交易附言含“留学咨询”字样的数据。");
                }
                //159交易编码为“229030医疗服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），或包含“就医/兽医”。
                if (bopdecCommon.indexGt(txcode, "-229030-") && (("-dbb-dbc-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(txrem, "-居民赴国外-居民前往国外-")) || ("-dba-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(txrem, "-非居民赴中国-非居民来中国-")) || bopdecCommon.containsValue(txrem, "-就医-兽医-"))) {
                    return WarningResult.build(subid, "第159条核查:交易编码为“229030医疗服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），或包含“就医/兽医”");
                }
                //160交易编码为“229990其他文化和娱乐服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），”。
                if (bopdecCommon.indexGt(txcode, "-229990-") && (("-dbb-dbc-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(txrem, "-居民赴国外-居民前往国外-")) || ("-dba-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(txrem, "-非居民赴中国-非居民来中国-")))) {
                    return WarningResult.build(subid, "第160条核查:交易编码为“229990其他文化和娱乐服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向）");
                }
                //161交易编码为“230000别处未涵盖的维护和维修服务”，但交易附言包含“工程且不含‘维修’/计算机/租赁且不含‘维修/维护’/装修/建设/建筑”。
                if (bopdecCommon.indexGt(txcode, "-230000-") && (bopdecCommon.containsValue(txrem, "-计算机-装修-建设-建筑-") || (bopdecCommon.containsValue(txrem, "-工程-租赁-") && !bopdecCommon.containsValue(txrem, "-维修-维护-")))) {
                    return WarningResult.build(subid, "第161条核查:交易编码为“230000别处未涵盖的维护和维修服务”，但交易附言包含“工程且不含‘维修’/计算机/租赁且不含‘维修/维护’/装修/建设/建筑”");
                }
                //162交易编码为“231010特许和商标使用费”，但交易附言包含“专有/所有权/转让/专利/技术/版权”。
                if (bopdecCommon.indexGt(txcode, "-231010-") && bopdecCommon.containsValue(txrem, "-专有-所有权-转让-专利-技术-版权-")) {
                    return WarningResult.build(subid, "第162条核查:交易编码为“231010特许和商标使用费”，但交易附言包含“专有/所有权/转让/专利/技术/版权”");
                }
                //163交易编码为“231020研发成果使用费”，但交易附言包含“商标/特许/转让/所有权/计算机/版面费/软件/视听”。
                if (bopdecCommon.indexGt(txcode, "-231020-") && bopdecCommon.containsValue(txrem, "-商标-特许-转让-所有权-计算机-版面费-软件-视听-")) {
                    return WarningResult.build(subid, "第163条核查:交易编码为“231020研发成果使用费”，但交易附言包含“商标/特许/转让/所有权/计算机/版面费/软件/视听”");
                }
                //164交易编码为“231030复制或分销计算机软件许可费”，但交易附言包含定制/出口/进出/进口/视听”。
                if (bopdecCommon.indexGt(txcode, "-231030-") && (bopdecCommon.containsValue(txrem, "-出口-进出-进口-视听-定制-"))) {
                    return WarningResult.build(subid, "第164条核查:交易编码为“231030复制或分销计算机软件许可费”，但交易附言包含定制/出口/进出/进口/视听”");
                }
                //165交易编码为“231040复制或分销视听及相关产品许可费”，但交易附言包含“计算机/软件/定制/出口/进出/进口”。
                if (bopdecCommon.indexGt(txcode, "-231040-") && bopdecCommon.containsValue(txrem, "-计算机-软件-定制-出口-进出-进口-")) {
                    return WarningResult.build(subid, "第165条核查:交易编码为“231040复制或分销视听及相关产品许可费”，但交易附言包含“计算机/软件/定制/出口/进出/进口”");
                }
                //166交易编码为“231990其他知识产权使用费”，但交易附言包含“计算机/软件/定制/出口/进出/进口/视听/商标/专利/著作/版权/设计/转播/视频/电影/影像/音像”。
                if (bopdecCommon.indexGt(txcode, "-231990-") && bopdecCommon.containsValue(txrem, "-计算机-软件-定制-出口-进出-进口-视听-商标-专利-著作-版权-设计-转播-视频-电影-影像-音像-")) {
                    return WarningResult.build(subid, "第166条核查:交易编码为“231990其他知识产权使用费”但交易附言包含“计算机/软件/定制/出口/进出/进口/视听/商标/专利/著作/版权/设计/转播/视频/电影/影像/音像");
                }
                //167交易编码为“232000别处未涵盖的政府货物和服务”，但交易附言包含“税捐/赠/援助”。
                if (bopdecCommon.indexGt(txcode, "-232000-") && bopdecCommon.containsValue(txrem, "-税-捐赠-援助-")) {
                    return WarningResult.build(subid, "第167条核查:交易编码为“232000别处未涵盖的政府货物和服务”，但交易附言包含“税/捐赠/援助”");
                }
                //168交易编码为“321000职工报酬”，但交易附言包含“工程/利息/侨汇/赠/佣金/咨询/贷款/货款/赡/差旅/教育/培训/一般贸易/社保但不包含‘雇员/员工'”。
                if (bopdecCommon.indexGt(txcode, "-321000-") && (bopdecCommon.containsValue(txrem, "-工程-利息-侨汇-赠-佣金-咨询-贷款-货款-赡-差旅-教育-培训-一般贸易-社保-") && !bopdecCommon.containsValue(txrem, "-雇员-员工-"))) {
                    return WarningResult.build(subid, "第168条核查:交易编码为“321000职工报酬”但交易附言包含“工程/利息/侨汇/赠/佣金/咨询/贷款/货款/赡/差旅/教育/培训/一般贸易/社保但不包含雇员/员工”");
                }
                //169交易编码为“322011从境外子公司等获得的股息、红利或利润/向境外母公司支付的股息、红利或利润”，但交易附言包含“利息/关联/优先股/联属”。
                if (bopdecCommon.indexGt(txcode, "-322011-") && bopdecCommon.containsValue(txrem, "-利息-关联-优先股-联属-")) {
                    return WarningResult.build(subid, "第169条核查:交易编码为“322011从境外子公司等获得的股息、红利或利润/向境外母公司支付的股息、红利或利润”，但交易附言包含“利息/关联/优先股/联属”");
                }
                //170交易编码为“322012从境外母公司获得的股息、红利（持有境外母公司10%以下股权）/向境外子公司等支付的股息、红利（持有本机构10%以下股权）”，但交易附言包含“利息/联营/联属/分支/关联/合伙/优先股”；或收入方向包含“境外子”，支出方向包含“境外母”，剔除收付款类型为“退款”的数据。
                //需完善
                //if (bopdecCommon.indexGt($txcode,"-322012-") && (  || (bopdecCommon.containsValue($txrem,"-境外母-")  && "-dbb-dbc-dbe-dbf-".indexOf(inifrm)>0 ) && !bopdecCommon.containsValue($paytype,"-退款-") ))
                if (bopdecCommon.indexGt(txcode, "-322012-") && (bopdecCommon.containsValue(txrem, "-利息-联营-联属-分支-关联-合伙-优先股-") || (bopdecCommon.containsValue(txrem, "-境外母-") && "-dbb-dbc-".indexOf(inifrm) > 0) && !bopdecCommon.containsValue(paytype, "-R-") || (bopdecCommon.containsValue(txrem, "-境外子-") && "-dba-".indexOf(inifrm) > 0 && !bopdecCommon.containsValue(paytype, "-R-")))) {
                    return WarningResult.build(subid, "第170条核查:交易编码为“322012从境外母公司获得的股息、红利（持有境外母公司10%以下股权）/向境外子公司等支付的股息、红利（持有本机构10%以下股权）”，但交易附言包含“利息/联营/联属/分支/关联/合伙/优先股”；或收入方向包含“境外子”，支出方向包含“境外母”，剔除收付款类型为“退款”的数据。");
                }
                //171交易编码为“322013从境外联属企业获得的股息、红利/向境外联属企业支付的股息、红利”，但交易附言不包含“联属”或包含“利息/母公司/子公司/附属/分支/关联/联营/直接投资/优先股”。
                if (bopdecCommon.indexGt(txcode, "-322013-") && (!bopdecCommon.containsValue(txrem, "-联属-") || bopdecCommon.containsValue(txrem, "-利息-母公司-子公司-附属-分支-关联-联营-直接投资-优先股-"))) {
                    return WarningResult.build(subid, "第171条核查:交易编码为“322013从境外联属企业获得的股息、红利/向境外联属企业支付的股息、红利”，但交易附言不包含“联属”或包含“利息/母公司/子公司/附属/分支/关联/联营/直接投资/优先股”");
                }
                //172交易编码为“322014因拥有境外建筑物而获得的租金/向境内建筑物的非居民所有者支付的租金”，但交易附言包含“售/卖/买/转让/购”。
                if (bopdecCommon.indexGt(txcode, "-322014-") && bopdecCommon.containsValue(txrem, "-售-卖-买-转让-购-")) {
                    return WarningResult.build(subid, "第172条核查:交易编码为“322014因拥有境外建筑物而获得的租金/向境内建筑物的非居民所有者支付的租金”，但交易附言包含“售/卖/买/转让/购”");
                }
                //173交易编码为“322021从境外子公司获得的利息/向境外母公司支付的利息”，但交易附言包含“银行/本金/利润/红利/分红/股利/股息/联属”。
                if (bopdecCommon.indexGt(txcode, "-322021-") && bopdecCommon.containsValue(txrem, "-银行-本金-利润-红利-分红-股利-股息-联属-")) {
                    return WarningResult.build(subid, "第173条核查:交易编码为“322021从境外子公司获得的利息/向境外母公司支付的利息”，但交易附言包含“银行/本金/利润/红利/分红/股利/股息/联属”");
                }
                //174交易编码为“322022从境外母公司获得的利息（持有境外母公司10%以下股权）/向境外子公司等支付的利息（持有本机构10%以下股权）”，但交易附言包含“银行/联营/附属/分支/本/利润/红利/分红/股利/股息/联属”。
                if (bopdecCommon.indexGt(txcode, "-322022-") && bopdecCommon.containsValue(txrem, "-银行-联营-附属-分支-本-利润-红利-分红-股利-股息-联属-")) {
                    return WarningResult.build(subid, "第174条核查:交易编码为“322022从境外母公司获得的利息（持有境外母公司10%以下股权）/向境外子公司等支付的利息（持有本机构10%以下股权）”，但交易附言包含“银行/联营/附属/分支/本/利润/红利/分红/股利/股息/联属”");
                }
                //175交易编码为“322023从境外联属企业获得的利息/向境外联属企业支付的利息”，但交易附言不包含“联属”或包含“银行/母公司/子公司/附属/分支/关联/联营/直接投资/本金/利润/红利/分红/股利/股息/股东/投资者”。
                if (bopdecCommon.indexGt(txcode, "-322023-") && (!bopdecCommon.containsValue(txrem, "-联属-") || bopdecCommon.containsValue(txrem, "-银行-母公司-子公司-附属-分支-关联-联营-直接投资-本金-利润-红利-分红-股利-股息-股东-投资者-"))) {
                    return WarningResult.build(subid, "第175条核查:交易编码为“322023从境外联属企业获得的利息/向境外联属企业支付的利息”，但交易附言不包含“联属”或包含“银行/母公司/子公司/附属/分支/关联/联营/直接投资/本金/利润/红利/分红/股利/股息/股东/投资者”");
                }
                //176交易编码为“322031股票投资的股息、红利”，但交易附言包含“优先股/基金/债/母/子/附属/分支/关联（但不是“非关联”）/直接投资/利息”。
                if (bopdecCommon.indexGt(txcode, "-322031-") && (bopdecCommon.containsValue(txrem, "-优先股-基金-债-母-子-附属-分支-直接投资-利息-") || (bopdecCommon.containsValue(txrem, "-关联-") && !bopdecCommon.containsValue(txrem, "-非关联-")))) {
                    return WarningResult.build(subid, "第176条核查:交易编码为“322031股票投资的股息、红利”，但交易附言包含“优先股/基金/债/母/子/附属/分支/关联（但不是“非关联”）/直接投资/利息”");
                }
                //177交易编码为“322032投资基金份额的股息、红利”，但交易附言包含“利润/利息/母/子/附属/分支/联/直接投资/资金收入/资金支出”。
                if (bopdecCommon.indexGt(txcode, "-322032-") && bopdecCommon.containsValue(txrem, "-利润-利息-母-子-附属-分支-联-直接投资-资金收入-资金支出-")) {
                    return WarningResult.build(subid, "第177条核查:交易编码为“322032投资基金份额的股息、红利”，但交易附言包含“利润/利息/母/子/附属/分支/联/直接投资/资金收入/资金支出”");
                }
                //178交易编码为“322033短期债券利息”，但交易附言包含“长期/中期/利润/红利/分红/股利/股息/本/买/卖/售/转让/购”。
                if (bopdecCommon.indexGt(txcode, "-322033-") && bopdecCommon.containsValue(txrem, "-长期-中期-利润-红利-分红-股利-股息-本-买-卖-售-转让-购-")) {
                    return WarningResult.build(subid, "第178条核查:交易编码为“322033短期债券利息”，但交易附言包含“长期/中期/利润/红利/分红/股利/股息/本/买/卖/售/转让/购”");
                }
                //179交易编码为“322034中长期债券利息”，但交易附言包含“一年以下/一年期/短期/利润/红利/分红/股利/股息/本/买/卖/售/转让/购”。
                if (bopdecCommon.indexGt(txcode, "-322034-") && bopdecCommon.containsValue(txrem, "-一年以下-一年期-短期-利润-红利-分红-股利-股息-本-买-卖-售-转让-购-")) {
                    return WarningResult.build(subid, "第179条核查:交易编码为“322034中长期债券利息”，但交易附言包含“一年以下/一年期/短期/利润/红利/分红/股利/股息/本/买/卖/售/转让/购”");
                }
                //180交易编码为“322041存贷款利息”，但交易附言包含“母公司/子公司/附属/联（但不是“非关联”）/直接投资/股东/分支/本/债券/利润”。
                if (bopdecCommon.indexGt(txcode, "-322041-") && (bopdecCommon.containsValue(txrem, "-母公司-子公司-附属-直接投资-股东-分支-本-债券-利润-") || (!bopdecCommon.containsValue(txrem, "-非关联-") && bopdecCommon.containsValue(txrem, "-联-")))) {
                    return WarningResult.build(subid, "第180条核查:交易编码为“322041存贷款利息”，但交易附言包含“母公司/子公司/附属/联（但不是“非关联”）/直接投资/股东/分支/本/债券/利润”");
                }
                //181交易编码为“322042保单持有人获得的红利和利息/向保单持有者支付的红利和利息”，但交易附言包含“股/银行”。
                if (bopdecCommon.indexGt(txcode, "-322042-") && bopdecCommon.containsValue(txrem, "-股-银行-")) {
                    return WarningResult.build(subid, "第181条核查:交易编码为“322042保单持有人获得的红利和利息/向保单持有者支付的红利和利息”，但交易附言包含“股/银行”");
                }
                //182交易编码为“322043从准公司和国际组织获得的红利、收益/向准公司和国际组织份额持有者支付的红利、收益”，但交易附言包含“利息/银行/母公司/子公司/联/直接投资/股东/分支/附属”。
                if (bopdecCommon.indexGt(txcode, "-322043-") && bopdecCommon.containsValue(txrem, "-利息-银行-母公司-子公司-联-直接投资-股东-分支-附属-")) {
                    return WarningResult.build(subid, "第182条核查:交易编码为“322043从准公司和国际组织获得的红利、收益/向准公司和国际组织份额持有者支付的红利、收益”，但交易附言包含“利息/银行/母公司/子公司/联/直接投资/股东/分支/附属”");
                }
                //183交易编码为“323010使用自然资源的租金”，但交易附言包含“租约/转让/买/卖/售/房屋”。
                if (bopdecCommon.indexGt(txcode, "-323010-") && bopdecCommon.containsValue(txrem, "-租约-转让-买-卖-售-房屋-")) {
                    return WarningResult.build(subid, "第183条核查:交易编码为“323010使用自然资源的租金”，但交易附言包含“租约/转让/买/卖/售/房屋”");
                }
                //184交易编码为“323020产品和生产的税收及补贴”，剔除交易附言包含“关税”、“出口%增值税”、“进口%增值税”、“吨税费”、“消费税”、“工资税”、“营业执照税”的数据。
                //由于%不确定暂时先注释
                if (bopdecCommon.indexGt(txcode, "-323020-") && (bopdecCommon.containsValue(txrem, "-税-") && !bopdecCommon.containsValue(txrem, "-关税-出口税-进口税-增值税-营业税-销售税-土地使用税-印花税-吨税费-消费税-工资税-营业执照税-"))) {
                    return WarningResult.build(subid, "第184条核查:交易编码为“323020产品和生产的税收及补贴”，交易附言包含“税”但不包含“关税”、“出口税”、“进口税”、“增值税”、“营业税”、“销售税”、“土地使用税”、“印花税”、“吨税费”、“消费税”、“工资税”或“营业执照税”的数据。");
                }
                //185交易编码为“421010个人间捐赠及无偿援助”，但交易附言包含“留学/赔偿/福利/学费/报酬/工资/政府/组织/固定资产有关/遗产/中奖/雇/房/舍/楼/屋/设备/机器/重建/速遣/滞期”或申报主体类型为“对公居民”（剔除交易附言包含“代收”或“代付”字样的数据）。
                if (bopdecCommon.indexGt(txcode, "-421010-") && (bopdecCommon.containsValue(txrem, "-留学-赔偿-福利-学费-报酬-工资-政府-组织-固定资产有关-遗产-中奖-雇-房-舍-楼-屋-设备-机器-重建-速遣-滞期-") || (bopdecCommon.indexGt(custype, "-C-") && !bopdecCommon.containsValue(txrem, "-代收-代付-")))) {
                    return WarningResult.build(subid, "第185条核查:交易编码为“421010个人间捐赠及无偿援助”，但交易附言包含“留学/赔偿/福利/学费/报酬/工资/政府/组织/固定资产有关/遗产/中奖/雇/房/舍/楼/屋/设备/机器/重建/速遣/滞期”或申报主体类型为“对公居民”（剔除交易附言包含“代收”或“代付”字样的数据）。");
                }
                //186交易编码为“421020政府、国际组织间捐赠及无偿援助（与固定资产无关）”，但交易附言包含“工资/留学/赔偿/薪/福利/学费/报酬/探亲/个人/赡/遗产/中奖/雇/房/舍/楼/屋/设备/机器/重建/固定资产有关或申报主体类型为“对私居民””。
                if (bopdecCommon.indexGt(txcode, "-421020-") && (bopdecCommon.containsValue(txrem, "-工资-留学-赔偿-薪-福利-学费-报酬-探亲-个人-赡-遗产-中奖-雇-房-舍-楼-屋-设备-机器-重建-固定资产有关-") || bopdecCommon.indexGt(custype, "-D-"))) {
                    return WarningResult.build(subid, "第186条核查:交易编码为“421020政府、国际组织间捐赠及无偿援助（与固定资产无关）”，但交易附言包含“工资/留学/赔偿/薪/福利/学费/报酬/探亲/个人/赡/遗产/中奖/雇/房/舍/楼/屋/设备/机器/重建/固定资产有关或申报主体类型为“对私居民”");
                }
                //187交易编码为“421990其他捐赠及无偿援助（与固定资产无关）”，但交易附言包含“工资/留学/赔偿/薪/福利/学费/报酬/探亲/政府/赡/遗产/中奖/雇/房/舍/楼/屋/设备/机器/重建/速遣/与固定资产有关”。
                if (bopdecCommon.indexGt(txcode, "-421990-") && (bopdecCommon.containsValue(txrem, "-工资-留学-赔偿-薪-福利-学费-报酬-探亲-政府-赡-遗产-中奖-雇-房-舍-楼-屋-设备-机器-重建-速遣-与固定资产有关-") || bopdecCommon.indexGt(custype, "-D-"))) {
                    return WarningResult.build(subid, "第187条核查:交易编码为“421990其他捐赠及无偿援助（与固定资产无关）”，但交易附言包含“工资/留学/赔偿/薪/福利/学费/报酬/探亲/政府/赡/遗产/中奖/雇/房/舍/楼/屋/设备/机器/重建/速遣/与固定资产有关”。");
                }
                //188交易编码为“422000非寿险保险赔偿”，但交易附言包含“保费/年金”。
                if (bopdecCommon.indexGt(txcode, "-422000-") && bopdecCommon.containsValue(txrem, "-保费-年金-")) {
                    return WarningResult.build(subid, "第188条核查:交易编码为“422000非寿险保险赔偿”，但交易附言包含“保费/年金”");
                }
                //189交易编码为“423010社保缴款”，但交易附言包含“雇/返”。
                if (bopdecCommon.indexGt(txcode, "-423010-") && bopdecCommon.containsValue(txrem, "-雇-返-")) {
                    return WarningResult.build(subid, "第189条核查:交易编码为“423010社保缴款”，但交易附言包含“雇/返”");
                }
                //190交易编码为“423020社保返还的福利”，但交易附言包含“雇主/公司”。
                if (bopdecCommon.indexGt(txcode, "-423020-") && bopdecCommon.containsValue(txrem, "-雇主-公司-")) {
                    return WarningResult.build(subid, "第190条核查:交易编码为“423020社保返还的福利”，但交易附言包含“雇主/公司”");
                }
                //191交易编码为“424000其他二次收入（经常转移）”，但交易附言包含“险赔但不包含‘非’/赠/借/捐/社保/无偿/养老金/关税但不是‘关税退款’或‘关税返还’或‘关税让利’/消费税/产品税/生产税/产品补贴/产品增值税/进口税/出口税/商品消费税/遗产税/资本税/税务咨询”。
                //if (bopdecCommon.indexGt($txcode,"-424000-")  &&(bopdecCommon.containsValue($txrem,"-险赔-") && !bopdecCommon.containsValue($txrem,"-非赠-非借-非捐-非社保-非无偿-非养老金-非关税-非消费税-非产品税-非生产税-非产品补贴-非产品增值税-非进口税-非出口税-非商品消费税-非遗产税-非资本税-")) )
                if (bopdecCommon.indexGt(txcode, "-424000-") && ((bopdecCommon.containsValue(txrem, "-关税-") && !bopdecCommon.containsValue(txrem, "-关税退款-关税返还-关税让利-")) || (bopdecCommon.containsValue(txrem, "-险赔-") && !bopdecCommon.containsValue(txrem, "-非-")) || bopdecCommon.containsValue(txrem, "-赠-借-捐-社保-无偿-养老金-消费税-产品税-生产税-产品补贴-产品增值税-进口税-出口税-商品消费税-遗产税-资本税-税务咨询-"))) {
                    return WarningResult.build(subid, "第191条核查:交易编码为“424000其他二次收入（经常转移）”，但交易附言包含“险赔但不包含‘非’/赠/借/捐/社保/无偿/养老金/关税但不是‘关税退款’或‘关税返还’或‘关税让利’/消费税/产品税/生产税/产品补贴/产品增值税/进口税/出口税/商品消费税/遗产税/资本税/税务咨询”。");
                }
                //192交易编码为“521020与固定资产有关的捐赠及无偿援助”，但交易附言包含“个人/亲属/赡/生活费”。
                if (bopdecCommon.indexGt(txcode, "-521020-") && bopdecCommon.containsValue(txrem, "-个人-亲属-赡-生活费-")) {
                    return WarningResult.build(subid, "第192条核查:交易编码为“521020与固定资产有关的捐赠及无偿援助”，但交易附言包含“个人/亲属/赡/生活费”");
                }
                //193交易编码为“521030移民转移”，但交易附言包含“赠/捐/赡/生活费/探亲”。
                if (bopdecCommon.indexGt(txcode, "-521030-") && bopdecCommon.containsValue(txrem, "-赠-捐-赡-生活费-探亲-")) {
                    return WarningResult.build(subid, "第193条核查:交易编码为“521030移民转移”，但交易附言包含“赠/捐/赡/生活费/探亲”");
                }
                //194交易编码为“521990其他资本转移”，但交易附言包含“销售税/产品税/税务咨询”。
                if (bopdecCommon.indexGt(txcode, "-521990-") && bopdecCommon.containsValue(txrem, "-销售税-产品税-税务咨询-")) {
                    return WarningResult.build(subid, "第194条核查:交易编码为“521990其他资本转移”，但交易附言包含“销售税/产品税/税务咨询”");
                }
                //195交易编码为“522000品牌、商标、契约和许可所有权等非生产非金融资产转让”，但交易附言包含“租金/专利/版权/研发/使用”。
                if (bopdecCommon.indexGt(txcode, "-522000-") && bopdecCommon.containsValue(txrem, "-租金-专利-版权-研发-使用-")) {
                    return WarningResult.build(subid, "第195条核查:交易编码为“522000品牌、商标、契约和许可所有权等非生产非金融资产转让”，但交易附言包含“租金/专利/版权/研发/使用”");
                }
                //196交易编码为“621011因境外子公司清算、终止等撤资/新设境外子公司资本金汇出”，但交易附言不包含“子公司/分公司/联营/直接投资/境外投资”；或包含“关联/外商/联属/境内子/境外母/前期/筹备/增资/减资/借/贷”,剔除交易附言包含“工程”字样的数据。
                if (bopdecCommon.indexGt(txcode, "-621011-") && (!bopdecCommon.containsValue(txrem, "-子公司-分公司-联营-直接投资-境外投资-") || (bopdecCommon.containsValue(txrem, "-关联-外商-联属-境内子-境外母-前期-筹备-增资-减资-借-贷-") && !bopdecCommon.containsValue(txrem, "-工程-")))) {
                    return WarningResult.build(subid, "第196条核查:交易编码为“621011因境外子公司清算、终止等撤资/新设境外子公司资本金汇出”，但交易附言不包含“子公司/分公司/联营/直接投资/境外投资”；或包含“关联/外商/联属/境内子/境外母/前期/筹备/增资/减资/借/贷”,剔除交易附言包含“工程”字样的数据");
                }
                //197交易编码为“621012筹备资金撤回/筹备资金汇出”，但交易附言包含“关联/外商/联属/资本金/境内子/境外母/转让”。
                if (bopdecCommon.indexGt(txcode, "-621012-") && bopdecCommon.containsValue(txrem, "-关联-外商-联属-资本金-境内子-境外母-转让-")) {
                    return WarningResult.build(subid, "第197条核查:交易编码为“621012筹备资金撤回/筹备资金汇出”，但交易附言包含“关联/外商/联属/资本金/境内子/境外母/转让”");
                }
                //198交易编码为“621013因境外子公司减资收回资金/对境外子公司增资”，但交易附言不包含“减%资/增%资”，或不包含“子公司”或“直接投资”；或包含“关联/外商/清算/境内子/境外母”。
                //由于%不确定暂时先注释
                if (bopdecCommon.indexGt(txcode, "-621013-") && (bopdecCommon.containsValue(txrem, "-关联-外商-清算-境内子-境外母-") || (!bopdecCommon.containsValue(txrem, "-子公司-直接投资-") && !bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(txrem, "增", "资")) && !bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(txrem, "减", "资"))))) {
                    return WarningResult.build(subid, "第198条核查:交易编码为“621013因境外子公司减资收回资金/对境外子公司增资”，但交易附言不包含“减%资/增%资”，或不包含“子公司”或“直接投资”；或包含“关联/外商/清算/境内子/境外母”");
                }
                //199交易编码为“621014转让境外子公司股权收入/购买转让的境外企业股权”，但交易附言不包含“股权/产权/股份”或包含“关联/外商/境内子/境外母”。
                if (bopdecCommon.indexGt(txcode, "-621014-") && (!bopdecCommon.containsValue(txrem, "-股权-产权-股份-") || bopdecCommon.containsValue(txrem, "-关联-外商-境内子-境外母-"))) {
                    return WarningResult.build(subid, "第199条核查:交易编码为“621014转让境外子公司股权收入/购买转让的境外企业股权”，但交易附言不包含“股权/产权/股份”或包含“关联/外商/境内子/境外母”");
                }
                //200交易编码为“621015接受境外子公司的股权投资（逆向股权投资）/境外子公司撤回对境内母公司的股权投资（逆向股权投资的撤回）”，但交易附言不包含“投资/资本/股”或包含“关联/外商/境内子/境外母”。
                if (bopdecCommon.indexGt(txcode, "-621015-") && (!bopdecCommon.containsValue(txrem, "-投资-资本-股-") || bopdecCommon.containsValue(txrem, "-关联-外商-境内子-境外母-"))) {
                    return WarningResult.build(subid, "第200条核查:交易编码为“621015接受境外子公司的股权投资（逆向股权投资）/境外子公司撤回对境内母公司的股权投资（逆向股权投资的撤回）”，但交易附言不包含“投资/资本/股”或包含“关联/外商/境内子/境外母”");
                }
                //201交易编码为“621016非法人投资款撤回/汇出”，但交易附言包含“子公司/境内子/境外母”。
                if (bopdecCommon.indexGt(txcode, "-621016-") && bopdecCommon.containsValue(txrem, "-子公司-境内子-境外母-")) {
                    return WarningResult.build(subid, "第201条核查:交易编码为“621016非法人投资款撤回/汇出”，但交易附言包含“子公司/境内子/境外母”");
                }
                //202交易编码为“621021收回对境外子公司的贷款及其他往来/对境外子公司的贷款及其他往来”，但交易附言包含“关联/外商/担保/境内子/境外母”，剔除交易附言包含“工程”字样的数据。
                if (bopdecCommon.indexGt(txcode, "-621021-") && bopdecCommon.containsValue(txrem, "-关联-外商-担保-境内子-境外母-") && !bopdecCommon.containsValue(txrem, "-工程-")) {
                    return WarningResult.build(subid, "第202条核查:交易编码为“621021收回对境外子公司的贷款及其他往来/对境外子公司的贷款及其他往来”，但交易附言包含“关联/外商/担保/境内子/境外母”，剔除交易附言包含“工程”字样的数据");
                }
                //203交易编码为“621022接受境外子公司的贷款及其他往来（逆向贷款投资）/偿还境外子公司的贷款及其他往来（逆向投资的撤回）”，但交易附言包含“关联/外商/担保/境内子/境外母”。
                if (bopdecCommon.indexGt(txcode, "-621022-") && bopdecCommon.containsValue(txrem, "-关联-外商-担保-境内子-境外母-")) {
                    return WarningResult.build(subid, "第203条核查:交易编码为“621022接受境外子公司的贷款及其他往来（逆向贷款投资）/偿还境外子公司的贷款及其他往来（逆向投资的撤回）”，但交易附言包含“关联/外商/担保/境内子/境外母”");
                }
                //204交易编码为“621030出售境外不动产收入/购买境外不动产支出”，但交易附言包含“中介/税/境内/国内/境外母”。
                if (bopdecCommon.indexGt(txcode, "-621030-") && bopdecCommon.containsValue(txrem, "-中介-税-境内-国内-境外母-")) {
                    return WarningResult.build(subid, "第204条核查:交易编码为“621030出售境外不动产收入/购买境外不动产支出”，但交易附言包含“中介/税/境内/国内/境外母”");
                }
                //205交易编码为“622011新设外商投资企业资本金汇入/因外商投资企业清算、终止等撤资”，但交易附言包含“关联/借款/增资/减资/筹备/前期/境内母/境外子”。
                if (bopdecCommon.indexGt(txcode, "-622011-") && bopdecCommon.containsValue(txrem, "-关联-借款-增资-减资-筹备-前期-境内母-境外子-")) {
                    return WarningResult.build(subid, "第205条核查:交易编码为“622011新设外商投资企业资本金汇入/因外商投资企业清算、终止等撤资”，但交易附言包含“关联/借款/增资/减资/筹备/前期/境内母/境外子”");
                }
                //206交易编码为“622012筹备资金汇入/撤出”，但交易附言包含“关联/联属/新设/清算/联属/境内母/境外子/转让”。
                if (bopdecCommon.indexGt(txcode, "-622012-") && bopdecCommon.containsValue(txrem, "-关联-联属-新设-清算-联属-境内母-境外子-转让-")) {
                    return WarningResult.build(subid, "第206条核查:交易编码为“622012筹备资金汇入/撤出”，但交易附言包含“关联/联属/新设/清算/联属/境内母/境外子/转让”");
                }
                //207交易编码为“622013外商投资企业增资/外商投资企业减资”，但交易附言不包含“减%资/增%资”或包含“关联/境内母/境外子”。
                //由于%不确定暂时先注释
                if (bopdecCommon.indexGt(txcode, "-622013-") && ((!bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(txrem, "增", "资")) && !bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(txrem, "减", "资"))) || bopdecCommon.containsValue(txrem, "-关联-境内母-境外子-"))) {
                    return WarningResult.build(subid, "第207条核查:交易编码为“622013外商投资企业增资/外商投资企业减资”，但交易附言不包含“减%资/增%资”或包含“关联/境内母/境外子”");
                }
                //208交易编码为“622014转让境内企业股权/购买转让的外商投资企业股权”，但交易附言不包含“股权/产权/股份/新设”或包含“关联/清算/减资/撤资”。
                if (bopdecCommon.indexGt(txcode, "-622014-") && (bopdecCommon.containsValue(txrem, "-关联-清算-减资-撤资-新设-") || !bopdecCommon.containsValue(txrem, "-股权-产权-股份-"))) {
                    return WarningResult.build(subid, "第208条核查:交易编码为“622014转让境内企业股权/购买转让的外商投资企业股权”，但交易附言不包含“股权/产权/股份”或包含“关联/清算/减资/撤资/新设”");
                }
                //209交易编码为“622015对境外母公司的股权投资的撤回（逆向股权投资的撤回）/外商投资企业对境外母公司的股权投资（逆向股权投资）”，但交易附言不包含“母公司”或不包含“投资/资本/股”或包含“关联/附属/分支/联营/境内母/境外子”。
                if (bopdecCommon.indexGt(txcode, "-622015-") && (bopdecCommon.containsValue(txrem, "-关联-附属-分支-联营-境内母-境外子-") || !bopdecCommon.containsValue(txrem, "-母公司-投资-资本-股-"))) {
                    return WarningResult.build(subid, "第209条核查:交易编码为“622015对境外母公司的股权投资的撤回（逆向股权投资的撤回）/外商投资企业对境外母公司的股权投资（逆向股权投资）”，但交易附言不包含“母公司”或不包含“投资/资本/股”或包含“关联/附属/分支/联营/境内母/境外子”");
                }
                //210交易编码为“622016非法人投资款汇入/撤出”，但交易编码包含“关联/联属/子/母”。
                if (bopdecCommon.indexGt(txcode, "-622016-") && bopdecCommon.containsValue(txrem, "-关联-联属-子-母-")) {
                    return WarningResult.build(subid, "第210条核查:交易编码为“622016非法人投资款汇入/撤出”，但交易编码包含“关联/联属/子/母”");
                }
                //211交易编码为“622021”，但交易附言包含“关联/附属/分支/联营/担保/联属/境内母/境外子”。
                if (bopdecCommon.indexGt(txcode, "-622021-") && bopdecCommon.containsValue(txrem, "-关联-附属-分支-联营-担保-联属-境内母-境外子-")) {
                    return WarningResult.build(subid, "第211条核查:交易编码为“622021”，但交易附言包含“关联/附属/分支/联营/担保/联属/境内母/境外子”");
                }
                //212交易编码为“622022收回对境外母公司的贷款及其他往来（逆向贷款投资的撤回）/对境外母公司的贷款及其他往来（逆向贷款投资）”，但交易附言包含“关联/附属/分支/联营/担保/联属/境内母/境外子”。
                if (bopdecCommon.indexGt(txcode, "-622022-") && bopdecCommon.containsValue(txrem, "-关联-附属-分支-联营-担保-联属-境内母-境外子-")) {
                    return WarningResult.build(subid, "第212条核查:交易编码为“622022收回对境外母公司的贷款及其他往来（逆向贷款投资的撤回）/对境外母公司的贷款及其他往来（逆向贷款投资）”，但交易附言包含“关联/附属/分支/联营/担保/联属/境内母/境外子”");
                }
                //213交易编码为“622030向非居民出售境内不动产收入/从非居民购买境内不动产支出”，但交易附言包含“中介/税/租/境内母/境外子”
                if (bopdecCommon.indexGt(txcode, "-622030-") && bopdecCommon.containsValue(txrem, "-中介-税-租-境内母-境外子-")) {
                    return WarningResult.build(subid, "第213条核查:交易编码为“622030向非居民出售境内不动产收入/从非居民购买境内不动产支出”，但交易附言包含“中介/税/租/境内母/境外子”");
                }
                //214交易编码为“623011”，但交易附言不包含“联属”或不包含“投资/资本/股”或包含“关联/子/母”。
                if (bopdecCommon.indexGt(txcode, "-623011-") && (bopdecCommon.containsValue(txrem, "-关联-子-母-") || !bopdecCommon.containsValue(txrem, "-联属-投资-资本-股-"))) {
                    return WarningResult.build(subid, "第214条核查:交易编码为“623011”，但交易附言不包含“联属”或不包含“投资/资本/股”或包含“关联/子/母”");
                }
                //215交易编码为“623012接受境外联属企业的股权投资/境外联属企业撤回对境内的股权投资”，但交易附言不包含“联属”或不包含“投资/资本/股”或包含“关联/子/母”。
                if (bopdecCommon.indexGt(txcode, "-623012-") && (bopdecCommon.containsValue(txrem, "-关联-子-母-") || !bopdecCommon.containsValue(txrem, "-联属-投资-资本-股-"))) {
                    return WarningResult.build(subid, "第215条核查:交易编码为“623012接受境外联属企业的股权投资/境外联属企业撤回对境内的股权投资”，但交易附言不包含“联属”或不包含“投资/资本/股”或包含“关联/子/母”");
                }
                //216交易编码为“623021收回对境外联属企业的贷款及其他往来/向境外联属企业提供贷款及其他债权”，但交易附言不包含“联属”；或包含“关联/担保/子/母”,剔除交易附言包含“工程”字样的数据。
                if (bopdecCommon.indexGt(txcode, "-623021-") && (!bopdecCommon.containsValue(txrem, "-联属-借-贷-放-代垫-应-") || (bopdecCommon.containsValue(txrem, "-关联-担保-子-母-") && !bopdecCommon.containsValue(txrem, "-工程-")))) {
                    return WarningResult.build(subid, "第216条核查:交易编码为“623021收回对境外联属企业的贷款及其他往来/向境外联属企业提供贷款及其他债权”，但交易附言不包含“联属”；或包含“关联/担保/子/母”,剔除交易附言包含“工程”字样的数据");
                }
                //217交易编码为“623022接受境外联属企业的贷款及其他往来/ 偿还境外联属企业贷款及其他债务”，但交易附言不包含“联属”或不包含“借/贷/外债/代垫/应”或包含“关联/担保/子/母/利息”。
                if (bopdecCommon.indexGt(txcode, "-623022-") && (bopdecCommon.containsValue(txrem, "-关联-担保-子-母-利息-") || !bopdecCommon.containsValue(txrem, "-联属-借-贷-外债-代垫-应-")) && !bopdecCommon.containsValue(txrem, "-资金池-不出境-不出口-")) {
                    return WarningResult.build(subid, "第217条核查:交易编码为“623022接受境外联属企业的贷款及其他往来/ 偿还境外联属企业贷款及其他债务”，但交易附言不包含“联属”或不包含“借/贷/外债/代垫/应”或包含“关联/担保/子/母/利息”。剔除交易附言包含“资金池”、“不出境”、“不出口”字样数据。");
                }
                //218交易编码为“721010卖出境外机构境外发行的股票或股权/投资境外机构境外发行的股票或股权”，但交易附言不包含“股”。
                if (bopdecCommon.indexGt(txcode, "-721010-") && !bopdecCommon.containsValue(txrem, "-股-")) {
                    return WarningResult.build(subid, "第218条核查:交易编码为“721010卖出境外机构境外发行的股票或股权/投资境外机构境外发行的股票或股权”，但交易附言不包含“股”");
                }
                //219交易编码为“721020卖出境内机构在境外发行的股票或股权/投资境内机构在境外发行的股票或股权”，但交易附言不包含“股”。
                if (bopdecCommon.indexGt(txcode, "-721020-") && !bopdecCommon.containsValue(txrem, "-股-")) {
                    return WarningResult.build(subid, "第219条核查:交易编码为“721020卖出境内机构在境外发行的股票或股权/投资境内机构在境外发行的股票或股权”，但交易附言不包含“股”");
                }
                //220交易编码为“721030在境外市场发行股票或股权/境内公司回购境外发行的股票或股权”，但交易附言不包含“股”。
                if (bopdecCommon.indexGt(txcode, "-721030-") && !bopdecCommon.containsValue(txrem, "-股-")) {
                    return WarningResult.build(subid, "第220条核查:交易编码为“721030在境外市场发行股票或股权/境内公司回购境外发行的股票或股权”，但交易附言不包含“股”");
                }
                //221交易编码为“721040非居民买入/卖出境内股票或股权”，但交易附言不包含“股”。
                if (bopdecCommon.indexGt(txcode, "-721040-") && !bopdecCommon.containsValue(txrem, "-股-") && !bopdecCommon.containsValue(custnm, "-证券-")) {
                    return WarningResult.build(subid, "第221条核查:交易编码为“721040非居民买入/卖出境内股票或股权”，但交易附言不包含“股”。剔除申报主体名称含“证券”的数据。");
                }
                //222交易编码为“721050非居民回购/发行境内股票或股权”，但交易附言不包含“股”。
                if (bopdecCommon.indexGt(txcode, "-721050-") && !bopdecCommon.containsValue(txrem, "-股-")) {
                    return WarningResult.build(subid, "第222条核查:交易编码为“721050非居民回购/发行境内股票或股权”，但交易附言不包含“股”");
                }
                //223交易编码为“722010赎回/申购境外投资基金”，但交易附言不包含“基金”。
                if (bopdecCommon.indexGt(txcode, "-722010-") && !bopdecCommon.containsValue(txrem, "-基金-")) {
                    return WarningResult.build(subid, "第223条核查:交易编码为“722010赎回/申购境外投资基金”，但交易附言不包含“基金”");
                }
                //224交易编码为“722020募集/清算境外投资基金”，但交易附言不包含“基金”。
                if (bopdecCommon.indexGt(txcode, "-722020-") && !bopdecCommon.containsValue(txrem, "-基金-")) {
                    return WarningResult.build(subid, "第224条核查:交易编码为“722020募集/清算境外投资基金”，但交易附言不包含“基金”");
                }
                //225交易编码为“722030非居民申购/赎回境内投资基金”，但交易附言不包含“基金”。
                if (bopdecCommon.indexGt(txcode, "-722030-") && !bopdecCommon.containsValue(txrem, "-基金-")) {
                    return WarningResult.build(subid, "第225条核查:交易编码为“722030非居民申购/赎回境内投资基金”，但交易附言不包含“基金”");
                }
                //226交易编码为“722040非居民清算境内募集的/境内募集投资基金”，但交易附言不包含“基金”。
                if (bopdecCommon.indexGt(txcode, "-722040-") && !bopdecCommon.containsValue(txrem, "-基金-")) {
                    return WarningResult.build(subid, "第226条核查:交易编码为“722040非居民清算境内募集的/境内募集投资基金”，但交易附言不包含“基金”");
                }
                //227交易编码为“723011卖出/买入境外短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”。
                if (bopdecCommon.indexGt(txcode, "-723011-") && (bopdecCommon.containsValue(txrem, "-长期-一年以上-1年以上-股-基金-") || !bopdecCommon.containsValue(txrem, "-债-"))) {
                    return WarningResult.build(subid, "第227条核查:交易编码为“723011卖出/买入境外短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”");
                }
                //228交易编码为“723012发行/偿付境外短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”。
                if (bopdecCommon.indexGt(txcode, "-723012-") && (bopdecCommon.containsValue(txrem, "-长期-一年以上-1年以上-股-基金-") || !bopdecCommon.containsValue(txrem, "-债-"))) {
                    return WarningResult.build(subid, "第228条核查:交易编码为“723012发行/偿付境外短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”");
                }
                //229交易编码为“723013非居民买入/卖出境内短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”。
                if (bopdecCommon.indexGt(txcode, "-723013-") && (bopdecCommon.containsValue(txrem, "-长期-一年以上-1年以上-股-基金-") || !bopdecCommon.containsValue(txrem, "-债-"))) {
                    return WarningResult.build(subid, "第229条核查:交易编码为“723013非居民买入/卖出境内短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”");
                }
                //230交易编码为“723014非居民偿付/发行境内短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”。
                if (bopdecCommon.indexGt(txcode, "-723014-") && (bopdecCommon.containsValue(txrem, "-长期-一年以上-1年以上-股-基金-") || !bopdecCommon.containsValue(txrem, "-债-"))) {
                    return WarningResult.build(subid, "第230条核查:交易编码为“723014非居民偿付/发行境内短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”");
                }
                //231交易编码为“723021卖出/买入境外中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”。
                if (bopdecCommon.indexGt(txcode, "-723021-") && (bopdecCommon.containsValue(txrem, "-短期-一年以下-一年以内-1年以内-1年以下-股-基金-") || !bopdecCommon.containsValue(txrem, "-债-"))) {
                    return WarningResult.build(subid, "第231条核查:交易编码为“723021卖出/买入境外中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”");
                }
                //232交易编码为“723022发行/偿付境外中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”。
                if (bopdecCommon.indexGt(txcode, "-723022-") && (bopdecCommon.containsValue(txrem, "-短期-一年以下-一年以内-1年以内-1年以下-股-基金-") || !bopdecCommon.containsValue(txrem, "-债-"))) {
                    return WarningResult.build(subid, "第232条核查:交易编码为“723022发行/偿付境外中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”");
                }
                //233交易编码为“723023非居民买入/卖出境内中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”。
                if (bopdecCommon.indexGt(txcode, "-723023-") && (bopdecCommon.containsValue(txrem, "-短期-一年以下-一年以内-1年以内-1年以下-股-基金-") || !bopdecCommon.containsValue(txrem, "-债-"))) {
                    return WarningResult.build(subid, "第233条核查:交易编码为“723023非居民买入/卖出境内中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”");
                }
                //234交易编码为“723024非居民偿付/发行境内中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”。
                if (bopdecCommon.indexGt(txcode, "-723024-") && (bopdecCommon.containsValue(txrem, "-短期-一年以下-一年以内-1年以内-1年以下-股-基金-") || !bopdecCommon.containsValue(txrem, "-债-"))) {
                    return WarningResult.build(subid, "第234条核查:交易编码为“723024非居民偿付/发行境内中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”");
                }
                //235交易编码为“724000因金融衍生工具交易引起的收入/支出”，但交易附言不包含“期权/期货/掉期/衍生”或包含“债券/股票/基金”。
                if (bopdecCommon.indexGt(txcode, "-724000-") && (bopdecCommon.containsValue(txrem, "-债券-股票-基金-") || !bopdecCommon.containsValue(txrem, "-期权-期货-掉期-衍生-"))) {
                    return WarningResult.build(subid, "第235条核查:交易编码为“724000因金融衍生工具交易引起的收入/支出”，但交易附言不包含“期权/期货/掉期/衍生”或包含“债券/股票/基金”");
                }
                //236交易编码为“821010资产-人寿保险和年金权益”，但交易附言不包含“年金/寿”或包含“利/赔/保费”。
                if (bopdecCommon.indexGt(txcode, "-821010-") && (bopdecCommon.containsValue(txrem, "-利-赔-保费-") || !bopdecCommon.containsValue(txrem, "-年金-寿-"))) {
                    return WarningResult.build(subid, "第236条核查:交易编码为“821010资产-人寿保险和年金权益”，但交易附言不包含“年金/寿”或包含“利/赔/保费”");
                }
                //237交易编码为“821020对外贷款的收回/向境外提供贷款”，但交易附言包含“息/母/子/附属/关联(但不是‘非关联、无关联’)/存款”。
                if (bopdecCommon.indexGt(txcode, "-821020-") && (bopdecCommon.containsValue(txrem, "-息-母-子-附属-存款-") || (!bopdecCommon.containsValue(txrem, "-非关联-无关联-") && bopdecCommon.containsValue(txrem, "-关联-")))) {
                    return WarningResult.build(subid, "第237条核查:交易编码为“821020对外贷款的收回/向境外提供贷款”，但交易附言包含“息/母/子/附属/关联(但不是‘非关联、无关联’)/存款”");
                }
                //238交易编码为“821030收回或调回存放境外存款本金/存放境外存款”，但交易附言包含“保证金/借/贷/利息”。
                if (bopdecCommon.indexGt(txcode, "-821030-") && bopdecCommon.containsValue(txrem, "-保证金-借-贷-利息-")) {
                    return WarningResult.build(subid, "第238条核查:交易编码为“821030收回或调回存放境外存款本金/存放境外存款”，但交易附言包含“保证金/借/贷/利息”");
                }
                //239交易编码为“822010负债-人寿保险和年金权益”，但交易附言不包含“年金/寿”或包含“利/赔/保费”。
                if (bopdecCommon.indexGt(txcode, "-822010-") && (bopdecCommon.containsValue(txrem, "-利-赔-保费-") || !bopdecCommon.containsValue(txrem, "-年金-寿-"))) {
                    return WarningResult.build(subid, "第239条核查:交易编码为“822010负债-人寿保险和年金权益”，但交易附言不包含“年金/寿”或包含“利/赔/保费”");
                }
                //240交易编码为“822020获得/偿还境外贷款”，但交易附言包含“息/母/子/附属/关联（但不是‘非关联’、‘无关联’)/联属”。
                if (bopdecCommon.indexGt(txcode, "-822020-") && (bopdecCommon.containsValue(txrem, "-息-母-子-附属-") || (!bopdecCommon.containsValue(txrem, "-非关联-无关联-") && bopdecCommon.containsValue(txrem, "-关联-")) || (!bopdecCommon.containsValue(txrem, "-非联属-") && bopdecCommon.containsValue(txrem, "-联属-")))) {
                    return WarningResult.build(subid, "第240条核查:交易编码为“822020获得/偿还境外贷款”，但交易附言包含“息/母/子/附属/关联（但不是‘非关联’、‘无关联’)/联属（但不是‘非联属’）”。");
                }
                //241交易编码1为“822030境外存入款项/调出”，但涉外收入交易附言1不包含“非居民从境外收款”、对外支出交易附言1不包含“非居民向境外付款”。
                if (bopdecCommon.indexGt(txcode, "-822030-") && ((!bopdecCommon.containsValue(txrem, "-非居民从境外收款-收汇-收入-") && inifrm.startsWith("dba")) || (!bopdecCommon.containsValue(txrem, "-非居民向境外付款-付汇-支出-") && "-dbb-dbc-".indexOf(inifrm) > 0))) {
                    return WarningResult.build(subid, "第241条核查:交易编码为“822030境外存入款项/调出”，但涉外收入交易附言不包含“非居民从境外收款/收汇/收入”、对外支出交易附言不包含“非居民向境外付款/付汇/支出”。");
                }
            }

            //96 交易附言1或交易附言2与申报主体名称一致。
            if (!MdaUtils.isEmpty(txrem) && !MdaUtils.isEmpty(custnm)) {
                if (txrem.equals(custnm)) {
                    return WarningResult.buildEmpty(subid);
                }
            }
            //97 交易附言1小于等于2个字节或为空格或不含中文（交易附言为全字符、全字母、全数字、填写“无”或空）；有交易编码2但交易附言2小于等于2个字节或为空格或不含中文。
            if (MdaUtils.isEmpty(txrem) || "无".equals((String) txrem.trim()) || len <= 2 || !bopdecCommon.isChinese((String) txrem)) {
                return WarningResult.buildEmpty(subid);
            }
        }
        return WarningResult.buildEmpty(subid);
    }

    public ValidResult checkTxcode2(CheckItems checkItems){
        String txcode = checkItems.getTxcode();
        if(MdaUtils.isEmpty(txcode)){
            txcode = "";
        }
        String txcode2 = checkItems.getTxcode2();
        if(MdaUtils.isEmpty(txcode2)){
            txcode2 = "";
        }
        BigDecimal tc2amt = checkItems.getTc2amt();
        if(MdaUtils.isEmpty(tc2amt) || MdaUtils.isBigDecimalEmpty(tc2amt)){
            tc2amt = BigDecimal.ZERO;
        }
        String country = checkItems.getCountry();
        String custnm = checkItems.getCustnm();
        String oppuser = checkItems.getOppuser();
        String custype = checkItems.getCustype();
        String custcod = checkItems.getCustcod();
        String lcyacc = checkItems.getLcyacc();
        String fcyacc = checkItems.getFcyacc();
        String othacc = checkItems.getOthacc();
        String tx2rem = checkItems.getTx2rem();
        String payattr = checkItems.getPayattr();
        BigDecimal zero = BigDecimal.ZERO;
        BigDecimal txamtB = checkItems.getTxamt();
        if(MdaUtils.isEmpty(txamtB)){
            txamtB = BigDecimal.ZERO;
        }
        String transName = checkItems.getTransName().toLowerCase();
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
        if (MdaUtils.isEmpty(txcode2) && !MdaUtils.isEmpty(tx2rem)) {
            return ValidResult.build(false, "此字段为必输项！");
        }
        if (MdaUtils.isEmpty(txcode2) && !MdaUtils.isBigDecimalEmpty(tc2amt)) {
            return ValidResult.build(false, "此字段为必输项！");
        }
        if (MdaUtils.isEmpty(txcode2)) {
            //交易编码为空不走后续校验
            return null;
        }
        //48 交易对方名称中包含“BANK”或“银行”字样，但交易编码却不是“223022”、“223023”、“226000”、“322041”、“724000”、“821030”、“822020”、“822030”等金融机构常涉及的业务。BANK大小写不敏感，剔除交易附言含有 “银行”或“海外代付”字样数据；剔除交易对方名称中含有“LIMITED”、“LTD”、
        //非查询交易才校验
        //只提供提示，不控制死
//        if (!transName.endsWith("sel")) {
//            //48 交易对方名称中包含“BANK”或“银行”字样，但交易编码却不是“223022”、“223023”、“226000”、“322041”、“724000”、“821030”、“822020”、“822030”等金融机构常涉及的业务。BANK大小写不敏感，剔除交易附言含有 “银行”或“海外代付”字样数据；剔除交易对方名称中含有“LIMITED”、“LTD”、“L.T.D”、“CO”、“COMPANY”、“INC”、“LLC”等字样数据。、
//            if (bopdecCommon.containsValueUpper(oppuser, "-BANK-银行-") && !bopdecCommon.containsValue(custnm, "-银联国际有限公司-上海国际黄金交易中心有限公司-") && bopdecCommon.indexLe(txcode2, "-223022-223023-226000-321000-322041-724000-821030-822020-822030-") && !bopdecCommon.containsValueUpper(tx2rem, "-银行-代付-债券北向通-CIBM-QDII-QDLP-") && !bopdecCommon.containsValueUpper(oppuser, "-LIMITED-LTD-L.T.D-CO-COMPANY-INC-LLC-GMBH-BHD-SDN-PLC-")) {
//                return ValidResult.build(false, "第48条核查:交易对方名称中包含“BANK”或“银行”字样，但交易编码却不是“223022”、“223023”、“226000”、“321000 ”、“322041”、“724000”、“821030”、“822020”、“822030”等金融机构常涉及的业务。BANK不区分大小写。剔除交易附言含有 “银行”、“代付”、“债券北向通”、“CIBM”、“QDII”或“QDLP”字样数据。剔除交易对方名称中含有“LIMITED”、“LTD”、“L.T.D”、“CO”、“COMPANY”、“INC”、“LLC”、“GMBH”、“BHD”、“SDN”、“PLC”等字样数据。剔除申报主体为“银联国际有限公司”或“上海国际黄金交易中心有限公司”的申报数据。");
//            }
//            //60 交易对方名称与申报主体名称完全相同，但交易编码为“421010个人间捐赠及无偿援助”。
//            if (!MdaUtils.isEmpty(custnm) && !MdaUtils.isEmpty(oppuser)) {
//                String cusStr = custnm;
//                String oppStr = oppuser;
//                if (oppStr.length() > 4 && (oppStr.substring(4, oppStr.length()).equals(cusStr)) && bopdecCommon.indexGt(txcode2, "-421010-")) {
//                    return ValidResult.build(false, "第60条核查:交易对方名称与申报主体名称完全相同，但交易编码为“421010个人间捐赠及无偿援助””");
//                }
//            }
//            //交易对方名称中含有“LIMITED”、“LTD”、“L.T.D”、“CO”、“COMPANY”、“INC”、“LLC”、“GMBH”、“BHD”、“SDN”、“PLC”等字样，但交易编码为“421010个人间捐赠及无偿援助”。
//            if (bopdecCommon.containsValueUpper(oppuser, "-LIMITED-LTD-L.T.D-CO-COMPANY-INC-LLC-GMBH-BHD-SDN-PLC-") && bopdecCommon.indexGt(txcode2, "-421010-")) {
//                return ValidResult.build(false, "第4.3.14.1项检核:交易对方名称中含有“LIMITED”、“LTD”、“L.T.D”、“CO”、“COMPANY”、“INC”、“LLC”、“GMBH”、“BHD”、“SDN”、“PLC”等字样，但交易编码为“421010个人间捐赠及无偿援助”。");
//            }
//            //70对公申报主体的“购汇账号”或“现汇账号”或“其他账号”中以“OSA”或“NRA”或“FTN”或“FTF”字样开头，但交易编码不为“822030境外存入款项/调出”，剔除行业属性为“2096国际组织”、行业属性为“2099使领馆”且经济类型为“400境外机构”、申报主体为“QFII”机构或“RQFII”机构（“QFII”机构和”RQFII”机构需要从资本系统同步过来）。
//            //if (Platform.indexGt(custype,"-C-") && Platform.indexLe($txcode2,"-822030-") && (Platform.startsWithValue(lcyacc,"-OSA-NRA-FTN-FTF-") || Platform.startsWithValue(fcyacc,"-OSA-NRA-FTN-FTF-") || Platform.startsWithValue(othacc,"-OSA-NRA-FTN-FTF-")) && "-2096-2099-".indexOf($\\sysmod.getIndustryCode((String)custcod.getValue()))<0  )
//            if (bopdecCommon.indexGt(custype, "-C-") && bopdecCommon.indexLe(txcode2, "-822030-") && (bopdecCommon.startsWithValueUpper(lcyacc, "-OSA-NRA-FTN-FTF-") || bopdecCommon.startsWithValueUpper(fcyacc, "-OSA-NRA-FTN-FTF-") || bopdecCommon.startsWithValueUpper(othacc, "-OSA-NRA-FTN-FTF-"))) {
//                return ValidResult.build(false, "第70条核查:“对公申报主体的“购汇账号”或“现汇账号”或“其他账号”中以“OSA”或“NRA”或“FTN”或“FTF”字样开头，但交易编码不为“822030境外存入款项/调出”，剔除行业属性为“2096国际组织”、行业属性为“2099使领馆”且经济类型为“400境外机构”、申报主体为“QFII”机构或“RQFII”机构。");
//            }
//            //87 收入类型不为空，但交易编码不是以“1货物贸易”开头或不是“822020获得/偿还境外贷款/822030境外存入款项/调出”。
//            if (!MdaUtils.isEmpty(payattr) && (!MdaUtils.isEmpty(txcode2) && (!txcode2.startsWith("1") && !bopdecCommon.indexGt(txcode2, "-822020-822030-221000-")))) {
//                return ValidResult.build(false, "第87条核查:收入类型不为空，但交易编码不是以“1货物贸易”开头或不是“221000来料加工工缴费收入/822020获得境外贷款/822030境外存入款项");
//            }
//            //95 交易附言与交易编码名称完全一致。交易编码1和交易编码2都需要校验。剔除交易编码为“221000来料加工工缴费收入/出料加工工缴费支出”、“622012筹备资金汇入/撤出”。
//            if (!MdaUtils.isEmpty(tx2rem)) {
//                String codtxtStr = "";
//                //根据交易编码获取交易名称
//                String iotype = this.getIoType(inifrm);
//                List<Bopcod> bopcodList = bopcodMapper.selectByCod(txcode2,iotype);
//                if(bopcodList.size() > 0){
//                    codtxtStr = bopcodList.get(0).getTxt();
//                }
////                if (!MdaUtils.isEmpty(bopcod)) {
////                    codtxtStr = bopcod.getTxt();
////                }
//                String txt2Str = tx2rem.trim();
//                if (txt2Str.equals(codtxtStr) && !bopdecCommon.indexGt(txcode2, "-221000-621011-622012-")) {
//                    return ValidResult.build(false, "第95条核查:交易附言与交易编码名称完全一致。交易编码1和交易编码2都需要校验。剔除交易编码为“221000来料加工工缴费收入/出料加工工缴费支出”、“621011因境外子公司清算、终止等撤资/新设境外子公司资本金汇出”、“622012筹备资金汇入/撤出”");
//                }
//            }
//            //242 交易编码以7开头：申报主体为“中国证券登记结算有限责任公司上海分公司”或“中国证券登记结算有限责任公司深圳分公司”，交易附言不包含“港股通”、“沪股通”或“深股通”字样，剔除交易附言含有“B股”或“备用金”字样的数据。
//            if (txcode2.startsWith("7") && !bopdecCommon.containsValue(tx2rem, "-港股通-沪股通-深股通-B股-备用金-") && (bopdecCommon.indexGt(custnm, "-中国证券登记结算有限责任公司上海分公司-") || bopdecCommon.indexGt(custnm, "-中国证券登记结算有限责任公司深圳分公司-"))) {
//                return ValidResult.build(false, "第242条核查:交易编码以7开头：申报主体为“中国证券登记结算有限责任公司上海分公司”或“中国证券登记结算有限责任公司深圳分公司”，交易附言不包含“港股通”、“沪股通”或“深股通”字样，剔除交易附言含有“B股”或“备用金”字样的数据。");
//            }
//            //243 交易编码为“999998实际资金收付轧差结算”，但交易对方国别不为“中国”。
//            //if(Platform.indexGt($txcode2,"-999998-") && !$\\sysmod.getTransOthCountry((String)oppuser.getValue()).equals("CHN"))
//            if (bopdecCommon.indexGt(txcode2, "-999998-") && !"CHN".equals(country)) {
//                return ValidResult.build(false, "第243条核查:交易编码为“999998实际资金收付轧差结算”，但交易对方国别不为“中国”");
//            }
//        }
        //40交易对方常驻国家（地区）代码为“CHN（中国）”，交易编码为“999998-无实际资金收付的轧差结算”数据不校验。
        String othcty = "";
        if (!MdaUtils.isEmpty(custcod)) {
            othcty = dbuMapper.getTransOthCountry(custcod);
            if(MdaUtils.isEmpty(othcty)){
                othcty = "";
            }
        }
        if ("-CHN-".indexOf(othcty) > 0 && !bopdecCommon.indexGt(txcode2, "-999998-")) {
            return ValidResult.build(false, "40：交易编码不为999998时，常驻国家（地区）代码不能为CHN");
        }
        //50 交易对方名称以“(JN)”字样开头，但交易编码为“822030境外存入款项／调出”。
        if (oppuser.startsWith("(JN)") && bopdecCommon.indexGt(txcode2, "-822030-")) {
            return ValidResult.build(false, "50：交易对方名称以“(JN)”字样开头交易编码不能为“822030境外存入款项／调出”");
        }
        //65（1）申报金额为“0”，但交易编码不为“999998无实际资金收付的轧差结算”。
        if (txamtB.compareTo(zero) == 0 && bopdecCommon.indexLe(txcode2, "-999998-")) {
            return ValidResult.build(false, "65：申报金额为“0”，但交易编码不为“999998无实际资金收付的轧差结算””");
        }

        //66（2）申报金额不为“0”，但交易编码为“999998无实际资金收付的轧差结算”。
        if (txamtB.compareTo(zero) != 0 && bopdecCommon.indexGt(txcode2, "-999998-")) {
            return ValidResult.build(false, "66：申报金额不为“0”，但交易编码为“999998无实际资金收付的轧差结算”");
        }
        //73 （3）申报主体类型为“对私非居民”，交易编码不为“822030境外存入款项／调出”剔除交易编码为“232000别处未涵盖的政府货物和服务”的数据。
        if (bopdecCommon.indexGt(custype, "-F-") && bopdecCommon.indexLe(txcode2, "-232000-") && bopdecCommon.indexLe(txcode2, "-822030-")) {
            return ValidResult.build(false, "73：申报主体类型为“对私非居民”，交易编码不为“822030境外存入款项／调出”，剔除交易编码为“232000别处未涵盖的政府货物和服务”的数据。");
        }

        if (!MdaUtils.isEmpty(txcode)) {
            if (txcode.equals(txcode2) && !MdaUtils.isEmpty(txcode2)) {
                return bopdecCommon.checkErrorText("C");
            }
            //添加交易编码和相应金额检核
			  /*
			    1.交易编码同时存在货物贸易(1开头交易编码)和来料加工(221000)时，金额大的需要放到第一位
			    2.交易编码不存在货物贸易和来料加工时，金额大的需要放到第一位
			    3.交易编码存在货物贸易不存在来料加工时，不论金额大小，货物贸易均放到第一位
			    4.交易编码只有来料加工不存在货物贸易时，不论金额大小，来料加工均放到第一位
			    */
            if (!MdaUtils.isEmpty(txcode2)) {
                //需要交易编码放前面的情况
                if (!txcode.startsWith("1") && !"221000".equals(txcode)) {
                    if ("221000".equals(txcode2) || txcode2.startsWith("1")) {
                        return ValidResult.build(false, "交易编码2应放到第一位");
                    }
                }
            }
        }
        return null;
    }

    public WarningResult warncheckTxcode2(CheckItems checkItems,String subid){
        String txcode = checkItems.getTxcode();
        if(MdaUtils.isEmpty(txcode)){
            txcode = "";
        }
        String txcode2 = checkItems.getTxcode2();
        if(MdaUtils.isEmpty(txcode2)){
            txcode2 = "";
        }
        BigDecimal tc2amt = checkItems.getTc2amt();
        if(MdaUtils.isEmpty(tc2amt) || MdaUtils.isBigDecimalEmpty(tc2amt)){
            tc2amt = BigDecimal.ZERO;
        }
        String country = checkItems.getCountry();
        String custnm = checkItems.getCustnm();
        String oppuser = checkItems.getOppuser();
        String custype = checkItems.getCustype();
        String custcod = checkItems.getCustcod();
        String lcyacc = checkItems.getLcyacc();
        String fcyacc = checkItems.getFcyacc();
        String othacc = checkItems.getOthacc();
        String tx2rem = checkItems.getTx2rem();
        String payattr = checkItems.getPayattr();
        BigDecimal zero = BigDecimal.ZERO;
        BigDecimal txamtB = checkItems.getTxamt();
        if(MdaUtils.isEmpty(txamtB)){
            txamtB = BigDecimal.ZERO;
        }
        String transName = checkItems.getTransName().toLowerCase();
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
        if (MdaUtils.isEmpty(txcode2) && !MdaUtils.isEmpty(tx2rem)) {
            return WarningResult.buildEmpty(subid);
        }
        if (MdaUtils.isEmpty(txcode2) && !MdaUtils.isBigDecimalEmpty(tc2amt)) {
            return WarningResult.buildEmpty(subid);
        }
        if (MdaUtils.isEmpty(txcode2)) {
            //交易编码为空不走后续校验
            return WarningResult.buildEmpty(subid);
        }
        //48 交易对方名称中包含“BANK”或“银行”字样，但交易编码却不是“223022”、“223023”、“226000”、“322041”、“724000”、“821030”、“822020”、“822030”等金融机构常涉及的业务。BANK大小写不敏感，剔除交易附言含有 “银行”或“海外代付”字样数据；剔除交易对方名称中含有“LIMITED”、“LTD”、
        //非查询交易才校验
        //只提供提示，不控制死
        if (!transName.endsWith("sel")) {
            //48 交易对方名称中包含“BANK”或“银行”字样，但交易编码却不是“223022”、“223023”、“226000”、“322041”、“724000”、“821030”、“822020”、“822030”等金融机构常涉及的业务。BANK大小写不敏感，剔除交易附言含有 “银行”或“海外代付”字样数据；剔除交易对方名称中含有“LIMITED”、“LTD”、“L.T.D”、“CO”、“COMPANY”、“INC”、“LLC”等字样数据。、
            if (bopdecCommon.containsValueUpper(oppuser, "-BANK-银行-") && !bopdecCommon.containsValue(custnm, "-银联国际有限公司-上海国际黄金交易中心有限公司-") && bopdecCommon.indexLe(txcode2, "-223022-223023-226000-321000-322041-724000-821030-822020-822030-") && !bopdecCommon.containsValueUpper(tx2rem, "-银行-代付-债券北向通-CIBM-QDII-QDLP-") && !bopdecCommon.containsValueUpper(oppuser, "-LIMITED-LTD-L.T.D-CO-COMPANY-INC-LLC-GMBH-BHD-SDN-PLC-")) {
                return WarningResult.build(subid, "第48条核查:交易对方名称中包含“BANK”或“银行”字样，但交易编码却不是“223022”、“223023”、“226000”、“321000 ”、“322041”、“724000”、“821030”、“822020”、“822030”等金融机构常涉及的业务。BANK不区分大小写。剔除交易附言含有 “银行”、“代付”、“债券北向通”、“CIBM”、“QDII”或“QDLP”字样数据。剔除交易对方名称中含有“LIMITED”、“LTD”、“L.T.D”、“CO”、“COMPANY”、“INC”、“LLC”、“GMBH”、“BHD”、“SDN”、“PLC”等字样数据。剔除申报主体为“银联国际有限公司”或“上海国际黄金交易中心有限公司”的申报数据。");
            }
            //60 交易对方名称与申报主体名称完全相同，但交易编码为“421010个人间捐赠及无偿援助”。
            if (!MdaUtils.isEmpty(custnm) && !MdaUtils.isEmpty(oppuser)) {
                String cusStr = custnm;
                String oppStr = oppuser;
                if (oppStr.length() > 4 && (oppStr.substring(4, oppStr.length()).equals(cusStr)) && bopdecCommon.indexGt(txcode2, "-421010-")) {
                    return WarningResult.build(subid, "第60条核查:交易对方名称与申报主体名称完全相同，但交易编码为“421010个人间捐赠及无偿援助””");
                }
            }
            //交易对方名称中含有“LIMITED”、“LTD”、“L.T.D”、“CO”、“COMPANY”、“INC”、“LLC”、“GMBH”、“BHD”、“SDN”、“PLC”等字样，但交易编码为“421010个人间捐赠及无偿援助”。
            if (bopdecCommon.containsValueUpper(oppuser, "-LIMITED-LTD-L.T.D-CO-COMPANY-INC-LLC-GMBH-BHD-SDN-PLC-") && bopdecCommon.indexGt(txcode2, "-421010-")) {
                return WarningResult.build(subid, "第4.3.14.1项检核:交易对方名称中含有“LIMITED”、“LTD”、“L.T.D”、“CO”、“COMPANY”、“INC”、“LLC”、“GMBH”、“BHD”、“SDN”、“PLC”等字样，但交易编码为“421010个人间捐赠及无偿援助”。");
            }
            //70对公申报主体的“购汇账号”或“现汇账号”或“其他账号”中以“OSA”或“NRA”或“FTN”或“FTF”字样开头，但交易编码不为“822030境外存入款项/调出”，剔除行业属性为“2096国际组织”、行业属性为“2099使领馆”且经济类型为“400境外机构”、申报主体为“QFII”机构或“RQFII”机构（“QFII”机构和”RQFII”机构需要从资本系统同步过来）。
            //if (Platform.indexGt(custype,"-C-") && Platform.indexLe($txcode2,"-822030-") && (Platform.startsWithValue(lcyacc,"-OSA-NRA-FTN-FTF-") || Platform.startsWithValue(fcyacc,"-OSA-NRA-FTN-FTF-") || Platform.startsWithValue(othacc,"-OSA-NRA-FTN-FTF-")) && "-2096-2099-".indexOf($\\sysmod.getIndustryCode((String)custcod.getValue()))<0  )
            if (bopdecCommon.indexGt(custype, "-C-") && bopdecCommon.indexLe(txcode2, "-822030-") && (bopdecCommon.startsWithValueUpper(lcyacc, "-OSA-NRA-FTN-FTF-") || bopdecCommon.startsWithValueUpper(fcyacc, "-OSA-NRA-FTN-FTF-") || bopdecCommon.startsWithValueUpper(othacc, "-OSA-NRA-FTN-FTF-"))) {
                return WarningResult.build(subid, "第70条核查:“对公申报主体的“购汇账号”或“现汇账号”或“其他账号”中以“OSA”或“NRA”或“FTN”或“FTF”字样开头，但交易编码不为“822030境外存入款项/调出”，剔除行业属性为“2096国际组织”、行业属性为“2099使领馆”且经济类型为“400境外机构”、申报主体为“QFII”机构或“RQFII”机构。");
            }
            //87 收入类型不为空，但交易编码不是以“1货物贸易”开头或不是“822020获得/偿还境外贷款/822030境外存入款项/调出”。
            if (!MdaUtils.isEmpty(payattr) && (!MdaUtils.isEmpty(txcode2) && (!txcode2.startsWith("1") && !bopdecCommon.indexGt(txcode2, "-822020-822030-221000-")))) {
                return WarningResult.build(subid, "第87条核查:收入类型不为空，但交易编码不是以“1货物贸易”开头或不是“221000来料加工工缴费收入/822020获得境外贷款/822030境外存入款项");
            }
            //95 交易附言与交易编码名称完全一致。交易编码1和交易编码2都需要校验。剔除交易编码为“221000来料加工工缴费收入/出料加工工缴费支出”、“622012筹备资金汇入/撤出”。
            if (!MdaUtils.isEmpty(tx2rem)) {
                String codtxtStr = "";
                //根据交易编码获取交易名称
                String iotype = this.getIoType(inifrm);
                List<Bopcod> bopcodList = bopcodMapper.selectByCod(txcode2,iotype);
                if(bopcodList.size() > 0){
                    codtxtStr = bopcodList.get(0).getTxt();
                }
//                if (!MdaUtils.isEmpty(bopcod)) {
//                    codtxtStr = bopcod.getTxt();
//                }
                String txt2Str = tx2rem.trim();
                if (txt2Str.equals(codtxtStr) && !bopdecCommon.indexGt(txcode2, "-221000-621011-622012-")) {
                    return WarningResult.build(subid, "第95条核查:交易附言与交易编码名称完全一致。交易编码1和交易编码2都需要校验。剔除交易编码为“221000来料加工工缴费收入/出料加工工缴费支出”、“621011因境外子公司清算、终止等撤资/新设境外子公司资本金汇出”、“622012筹备资金汇入/撤出”");
                }
            }
            //242 交易编码以7开头：申报主体为“中国证券登记结算有限责任公司上海分公司”或“中国证券登记结算有限责任公司深圳分公司”，交易附言不包含“港股通”、“沪股通”或“深股通”字样，剔除交易附言含有“B股”或“备用金”字样的数据。
            if (txcode2.startsWith("7") && !bopdecCommon.containsValue(tx2rem, "-港股通-沪股通-深股通-B股-备用金-") && (bopdecCommon.indexGt(custnm, "-中国证券登记结算有限责任公司上海分公司-") || bopdecCommon.indexGt(custnm, "-中国证券登记结算有限责任公司深圳分公司-"))) {
                return WarningResult.build(subid, "第242条核查:交易编码以7开头：申报主体为“中国证券登记结算有限责任公司上海分公司”或“中国证券登记结算有限责任公司深圳分公司”，交易附言不包含“港股通”、“沪股通”或“深股通”字样，剔除交易附言含有“B股”或“备用金”字样的数据。");
            }
            //243 交易编码为“999998实际资金收付轧差结算”，但交易对方国别不为“中国”。
            //if(Platform.indexGt($txcode2,"-999998-") && !$\\sysmod.getTransOthCountry((String)oppuser.getValue()).equals("CHN"))
            if (bopdecCommon.indexGt(txcode2, "-999998-") && !"CHN".equals(country)) {
                return WarningResult.build(subid, "第243条核查:交易编码为“999998实际资金收付轧差结算”，但交易对方国别不为“中国”");
            }
        }
        //40交易对方常驻国家（地区）代码为“CHN（中国）”，交易编码为“999998-无实际资金收付的轧差结算”数据不校验。
        String othcty = "";
        if (!MdaUtils.isEmpty(custcod)) {
            othcty = dbuMapper.getTransOthCountry(custcod);
            if(MdaUtils.isEmpty(othcty)){
                othcty = "";
            }
        }
        if ("-CHN-".indexOf(othcty) > 0 && !bopdecCommon.indexGt(txcode2, "-999998-")) {
            return WarningResult.buildEmpty(subid);
        }
        //50 交易对方名称以“(JN)”字样开头，但交易编码为“822030境外存入款项／调出”。
        if (oppuser.startsWith("(JN)") && bopdecCommon.indexGt(txcode2, "-822030-")) {
            return WarningResult.buildEmpty(subid);
        }
        //65（1）申报金额为“0”，但交易编码不为“999998无实际资金收付的轧差结算”。
        if (txamtB.compareTo(zero) == 0 && bopdecCommon.indexLe(txcode2, "-999998-")) {
            return WarningResult.buildEmpty(subid);
        }

        //66（2）申报金额不为“0”，但交易编码为“999998无实际资金收付的轧差结算”。
        if (txamtB.compareTo(zero) != 0 && bopdecCommon.indexGt(txcode2, "-999998-")) {
            return WarningResult.buildEmpty(subid);
        }
        //73 （3）申报主体类型为“对私非居民”，交易编码不为“822030境外存入款项／调出”剔除交易编码为“232000别处未涵盖的政府货物和服务”的数据。
        if (bopdecCommon.indexGt(custype, "-F-") && bopdecCommon.indexLe(txcode2, "-232000-") && bopdecCommon.indexLe(txcode2, "-822030-")) {
            return WarningResult.buildEmpty(subid);
        }

        if (!MdaUtils.isEmpty(txcode)) {
            if (txcode.equals(txcode2) && !MdaUtils.isEmpty(txcode2)) {
                return WarningResult.buildEmpty(subid);
            }
            //添加交易编码和相应金额检核
			  /*
			    1.交易编码同时存在货物贸易(1开头交易编码)和来料加工(221000)时，金额大的需要放到第一位
			    2.交易编码不存在货物贸易和来料加工时，金额大的需要放到第一位
			    3.交易编码存在货物贸易不存在来料加工时，不论金额大小，货物贸易均放到第一位
			    4.交易编码只有来料加工不存在货物贸易时，不论金额大小，来料加工均放到第一位
			    */
            if (!MdaUtils.isEmpty(txcode2)) {
                //需要交易编码放前面的情况
                if (!txcode.startsWith("1") && !"221000".equals(txcode)) {
                    if ("221000".equals(txcode2) || txcode2.startsWith("1")) {
                        return WarningResult.buildEmpty(subid);
                    }
                }
            }
        }
        return WarningResult.buildEmpty(subid);
    }

    public ValidResult checkOthacc(CheckItems checkItems){
        BigDecimal othamt = checkItems.getOthamt();
        if(MdaUtils.isEmpty(othamt)){
            othamt = BigDecimal.ZERO;
        }
        BigDecimal zero = BigDecimal.ZERO;
        String othacc = checkItems.getOthacc();
        String transName = checkItems.getTransName().toLowerCase();
        String oppuser = checkItems.getOppuser();
        if (othamt.compareTo(zero) != 0) {
            if(MdaUtils.isEmpty(othacc)) {
                return ValidResult.build(false, "此字段为必输项！");
            }
        }

        if (!MdaUtils.isEmpty(othacc) && othamt.compareTo(zero) == 0) {
            return ValidResult.build(false, "此栏位必须为空");
        }
//        String inifrm = Strings.mid(transName, 1, 3);
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
//        if (!transName.endsWith("sel")) {
//            //54  交易对方名称以“(JN)”字样开头，且其购汇账号或现汇账号或其他账号中以“OSA”或“NRA”或“FTN”或“FTF”字样开头，“OSA”、“NRA”、“FTN”、“FTF”大小写不敏感。
//            if ((inifrm.startsWith("dba") || inifrm.startsWith("dbb") || inifrm.startsWith("dbc")) && oppuser.startsWith("(JN)") && bopdecCommon.startsWithValueUpper(othacc, "-OSA-NRA-FTN-FTF-")) {
//                return ValidResult.build(false, "第54条检核:交易对方名称以“(JN)”字样开头，且申报主体购汇账号或现汇账号或其他账号中以“OSA”或“NRA”或“FTN”或“FTF”字样开头，“OSA”、“NRA”、“FTN”、“FTF”不区分大小写。");
//            }
//        }

        //67 “购汇账号”或“现汇账号”或“其他账号”中包含“现金”或“钞转汇”或“无”等中文字样。
        if ((inifrm.startsWith("dba") || inifrm.startsWith("dbb") || inifrm.startsWith("dbc")) && bopdecCommon.containsValue(othacc, "-现金-现汇-现钞-钞转汇-无-")) {
            return ValidResult.build(false, "67：\"其他账号\"中包含“现金”或“现汇”或“现钞”或“钞转汇”或“无”等中文字样");
        }
        return null;
    }

    public WarningResult warncheckOthacc(CheckItems checkItems,String subid){
        BigDecimal othamt = checkItems.getOthamt();
        if(MdaUtils.isEmpty(othamt)){
            othamt = BigDecimal.ZERO;
        }
        BigDecimal zero = BigDecimal.ZERO;
        String othacc = checkItems.getOthacc();
        String transName = checkItems.getTransName().toLowerCase();
        String oppuser = checkItems.getOppuser();
        if (othamt.compareTo(zero) != 0) {
            if(MdaUtils.isEmpty(othacc)) {
                return WarningResult.buildEmpty(subid);
            }
        }

        if (!MdaUtils.isEmpty(othacc) && othamt.compareTo(zero) == 0) {
            return WarningResult.buildEmpty(subid);
        }
//        String inifrm = Strings.mid(transName, 1, 3);
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
        if (!transName.endsWith("sel")) {
            //54  交易对方名称以“(JN)”字样开头，且其购汇账号或现汇账号或其他账号中以“OSA”或“NRA”或“FTN”或“FTF”字样开头，“OSA”、“NRA”、“FTN”、“FTF”大小写不敏感。
            if ((inifrm.startsWith("dba") || inifrm.startsWith("dbb") || inifrm.startsWith("dbc")) && oppuser.startsWith("(JN)") && bopdecCommon.startsWithValueUpper(othacc, "-OSA-NRA-FTN-FTF-")) {
                return WarningResult.build(subid, "第54条检核:交易对方名称以“(JN)”字样开头，且申报主体购汇账号或现汇账号或其他账号中以“OSA”或“NRA”或“FTN”或“FTF”字样开头，“OSA”、“NRA”、“FTN”、“FTF”不区分大小写。");
            }
        }

        //67 “购汇账号”或“现汇账号”或“其他账号”中包含“现金”或“钞转汇”或“无”等中文字样。
        if ((inifrm.startsWith("dba") || inifrm.startsWith("dbb") || inifrm.startsWith("dbc")) && bopdecCommon.containsValue(othacc, "-现金-现汇-现钞-钞转汇-无-")) {
            return WarningResult.buildEmpty(subid);
        }
        return WarningResult.buildEmpty(subid);
    }

    public ValidResult checkOthamt(CheckItems checkItems){
        //61 （1）币种为人民币，但“其他金额”为“0”或空（无数据），或“结汇金额”、“现汇金额”大于“0”。  （1）人民币币种与其他金额不符
        BigDecimal fcyamtB = checkItems.getFcyamt();
        if(MdaUtils.isEmpty(fcyamtB)){
            fcyamtB = BigDecimal.ZERO;
        }
        BigDecimal lcyamtB = checkItems.getLcyamt();
        if(MdaUtils.isEmpty(lcyamtB)){
            lcyamtB = BigDecimal.ZERO;
        }
        BigDecimal othamtB = checkItems.getOthamt();
        if(MdaUtils.isEmpty(othamtB)){
            othamtB = BigDecimal.ZERO;
        }
        String othacc = checkItems.getOthacc();
        String transName = checkItems.getTransName().toLowerCase();
        String txccy = checkItems.getTxccy();
        String txrem = checkItems.getTxrem();
        if(MdaUtils.isEmpty(txrem)){
            txrem = "";
        }
        String tx2rem = checkItems.getTx2rem();
        if(MdaUtils.isEmpty(tx2rem)){
            tx2rem = "";
        }
        BigDecimal zero = BigDecimal.ZERO;
//        String inifrm = Strings.mid(transName, 1, 3);
        String inifrm = checkItems.getBopobjtyp().toLowerCase();

        //if(Platform.indexGt($txccy,"-CNY-") && ($othamt.getValue() == 0 ||Platform.isEmpty($othamt.getValue()) || $lcyamt > 0 || $fcyamt > 0))
        if (bopdecCommon.indexGt(txccy, "-CNY-") && (othamtB.compareTo(zero) == 0 || lcyamtB.compareTo(zero) > 0 || fcyamtB.compareTo(zero) > 0)) {
            return ValidResult.build(false, "61：币种为人民币，但“其他金额”为“0”或空（无数据），或“结汇金额”、“现汇金额”大于“0”");
        }

        if (othamtB.compareTo(zero) != 0) {
            if (othamtB.compareTo(zero) < 0) {
                return ValidResult.build(false, "金额不能小于0 ");
            }
        }
        if("dba".equals(inifrm) || "dbb".equals(inifrm) || "dbc".equals(inifrm)){
            if (!MdaUtils.isEmpty(othacc) && MdaUtils.isBigDecimalEmpty(othamtB) &&  "CNY".equals(txccy) ) {
                return ValidResult.build(false, "此字段为必输项！");
            }
            //62（2）币种不为人民币，但“其他金额”大于“0”，剔除交易附言包含“接受境外提供优惠贷款或买方信贷”字样的数据。
            if(bopdecCommon.indexLe(txccy,"-CNY-") && othamtB.compareTo(zero) > 0 && (!txrem.contains("接受境外提供优惠贷款") && !txrem.contains("买方信贷") &&!tx2rem.contains("接受境外提供优惠贷款") && !tx2rem.contains("买方信贷"))) {
                return ValidResult.build(false, "62：币种不为人民币，其他金额不能大于“0”");
            }
        }
        if("dbd".equals(inifrm) || "dbe".equals(inifrm)){
            if (!MdaUtils.isEmpty(othacc) && othamtB.compareTo(zero) == 0 &&  "CNY".equals(txccy)){
                return ValidResult.build(false, "其他金额必须大于0");
            }
        }
        if("dba".equals(inifrm) || "dbd".equals(inifrm)) {
            if ("CNY".equals(txccy)) {
                if (othamtB.compareTo(BigDecimal.ZERO) == 0) {
                    return ValidResult.build(false, "收入款币种为人民币时其它金额不能为零! ");
                }
            }
        }
        if("dbb".equals(inifrm) || "dbe".equals(inifrm)){
            if ("CNY".equals(txccy)) {
                if (othamtB.compareTo(BigDecimal.ZERO) == 0) {
                    return ValidResult.build(false, "汇款币种为人民币时其它金额不能为零!");
                }
            }
        }
        if("dbc".equals(inifrm)){
            if ("CNY".equals(txccy)) {
                if (othamtB.compareTo(BigDecimal.ZERO) == 0) {
                    return ValidResult.build(false, "实际付款币种为人民币时其它金额不能为零! ");
                }
            }
        }
        return null;
    }

    public ValidResult checkTxamt(CheckItems checkItems){
        BigDecimal txamtB = checkItems.getTxamt();
        if(MdaUtils.isEmpty(txamtB)){
            txamtB = BigDecimal.ZERO;
        }
        BigDecimal fcyamt = checkItems.getFcyamt();
        if(MdaUtils.isEmpty(fcyamt)){
            fcyamt = BigDecimal.ZERO;
        }
        BigDecimal othamt = checkItems.getOthamt();
        if(MdaUtils.isEmpty(othamt)){
            othamt = BigDecimal.ZERO;
        }
        BigDecimal lcyamt = checkItems.getLcyamt();
        if(MdaUtils.isEmpty(lcyamt)){
            lcyamt = BigDecimal.ZERO;
        }
        BigDecimal allamt = BigDecimal.ZERO;
        BigDecimal zero = BigDecimal.ZERO;
        String txcode = checkItems.getTxcode();
        if(MdaUtils.isEmpty(txcode)){
            txcode = "";
        }
        String txcode2 = checkItems.getTxcode2();
        if(MdaUtils.isEmpty(txcode2)){
            txcode2 ="";
        }
        String transName = checkItems.getTransName().toLowerCase();
//        String inifrm = Strings.mid(transName, 1, 3);
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
        if (txamtB.compareTo(zero) < 0) {
            return ValidResult.build(false, "收入金额不能小于0 ");
        }
        if("dba".equals(inifrm)){
            if (MdaUtils.isBigDecimalEmpty(txamtB) && (!bopdecCommon.indexGt(txcode,"-999998-") && !bopdecCommon.indexGt(txcode2,"-999998-"))) {
                return ValidResult.build(false, "此字段为必输项！");
            }
            if (txamtB.compareTo(zero) < 0) {
                return ValidResult.build(false, "此金额不能小于零!");
            }
            //63（1）涉外收入中“涉外收入中“交易金额”<“结汇金额”+“现汇金额”+“其他金额”。
            allamt = allamt.add(fcyamt).add(othamt).add(lcyamt);
            if (!transName.endsWith("sel")) {
                if(allamt.compareTo(txamtB)> 0) {
                    return ValidResult.build(false, "涉外收入中“交易金额”<“结汇金额”+“现汇金额”+“其他金额");
                }
            }
        }
        if("dbb".equals(inifrm)){
            if (txamtB.compareTo(zero) < 0) {
                return ValidResult.build(false, "此金额不能小于零!");
            }
            allamt = allamt.add(fcyamt).add(othamt).add(lcyamt);
            if (!transName.endsWith("sel")) {
                if(allamt.compareTo(txamtB) != 0){
                    return ValidResult.build(false, "购汇金额、现汇金额、其它金额之和应等于汇款金额。");
                }
            }
        }
        if("dbc".equals(inifrm)){
            if (MdaUtils.isBigDecimalEmpty(txamtB) && (!bopdecCommon.indexGt(txcode,"-999998-") && !bopdecCommon.indexGt(txcode2,"-999998-"))) {
                return ValidResult.build(false, "付款金额必须大于0");
            }
            if (txamtB.compareTo(zero) < 0) {
                return ValidResult.build(false, "此金额不能小于零!");
            }
            allamt = allamt.add(fcyamt).add(othamt).add(lcyamt);
            if (!transName.endsWith("sel")) {
                if(allamt.compareTo(txamtB) != 0){
                    return ValidResult.build(false, "购汇金额、现汇金额、其它金额之和应等于汇款金额。");
                }
            }
        }
        if("dbd".equals(inifrm)){
            if (txamtB.compareTo(zero) == 0) {
                return ValidResult.build(false, "收入款金额必须大于0");
            }
            if (txamtB.compareTo(zero) < 0 ) {
                return ValidResult.build(false, "此金额不能小于零!");
            }
            allamt = allamt.add(fcyamt).add(othamt).add(lcyamt);
            if(allamt.compareTo(txamtB) > 0) {
                return bopdecCommon.checkErrorText("B");
            }
        }
        if("dbe".equals(inifrm)){
            if (txamtB.compareTo(zero) == 0) {
                return ValidResult.build(false, "收入款金额必须大于0");
            }
            if (txamtB.compareTo(zero) < 0 ) {
                return ValidResult.build(false, "此金额不能小于零!");
            }
            allamt = allamt.add(fcyamt).add(othamt).add(lcyamt);
            if(allamt.compareTo(txamtB) != 0) {
                return bopdecCommon.checkErrorText("L");
            }
        }
        if("dbf".equals(inifrm)){
            if(txamtB.compareTo(zero) == 0 || txamtB.compareTo(zero) < 0){
                return ValidResult.build(false, "付款金额必须大于0");
            }
            allamt = allamt.add(fcyamt).add(othamt).add(lcyamt);
            if(allamt.compareTo(txamtB) != 0) {
                return bopdecCommon.checkErrorText("K");
            }
        }
        return null;
    }

    public ValidResult checkCrtuser(String crtuser){
        if (MdaUtils.isEmpty(crtuser)) {
            return ValidResult.build(false, "此字段为必输项！");
        }
        if (!MdaUtils.isEmpty(crtuser)) {
            String str = crtuser;
            byte[] buff = null;
            try {
                buff = str.getBytes("GB18030");
            } catch (Exception e) {
                return ValidResult.build(false, "getBytes fail...");
            }
            int len = buff.length;
            if (len > 20) {
                return ValidResult.build(false, "该字段只能输入20个字符！");
            }
        }
        return null;
    }

    public ValidResult checkPaytype(CheckItems checkItems){
        String paytype = checkItems.getPaytype();
        String custype = checkItems.getCustype();
        String tx2rem = checkItems.getTx2rem();
        String txrem = checkItems.getTxrem();
        String txcode = checkItems.getTxcode();
        String txcode2 = checkItems.getTxcode2();
        String payattr = checkItems.getPayattr();
        String transName = checkItems.getTransName().toLowerCase();
//            String inifrm = Strings.mid(transName, 1, 3).toLowerCase();
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
        ///收款人类型dba对私不用填
        if (!(inifrm.startsWith("dba") && bopdecCommon.indexGt(custype, "-D-F-"))) {
            if (MdaUtils.isEmpty(paytype)) {
                return ValidResult.build(false, "此字段为必输项！");
            }
        }
        //81（1）收/付款类型为“退款”，但交易附言中不包含“退”字样。//附言2为空，交易附言1不包含退
        if (bopdecCommon.indexGt(paytype, "-R-") && MdaUtils.isEmpty(tx2rem) && !txrem.contains("退")) {
            return ValidResult.build(false, "81：收/付款类型为“退款”，但交易附言中不包含“退”字样");
        }
        //81（1）收/付款类型为“退款”，但交易附言中不包含“退”字样。//附言2不为空，交易附言1不包含退
        if (bopdecCommon.indexGt(paytype, "-R-") && !MdaUtils.isEmpty(tx2rem) && !txrem.contains("退") && !tx2rem.contains("退")) {
            return ValidResult.build(false, "81：收/付款类型为“退款”，但交易附言中不包含“退”字样");
        }
        // 86：收/付款类型为“预收货款”或“预付货款”或“货到付款”，但交易编码不是以“1货物贸易”开头或不是“2服务贸易”开头。剔除交易编码为“822030”的数据。--20201210改动
        // A 预收款   P 货到付款
        if (bopdecCommon.indexGt(paytype, "-A-P-") && !MdaUtils.isEmpty(txcode)) {
            //如果交易编码2不为空
            if (!MdaUtils.isEmpty(txcode2)) {
                if (!txcode.startsWith("1") && !txcode.startsWith("2") && !bopdecCommon.indexGt(txcode, "-822030-") && !txcode2.startsWith("1") && !txcode2.startsWith("2") && !bopdecCommon.indexGt(txcode2, "-822030-")) {
                    return ValidResult.build(false, "86：收/付款类型为“预收货款”或“预付货款”或“货到付款”，但交易编码不是以“1货物贸易”开头或不是“2服务贸易”开头。剔除交易编码为“822030”的数据。");
                }
            } else {
                //如果交易编码2为空则只判断交易附言1
                if (!txcode.startsWith("1") && !txcode.startsWith("2") && !bopdecCommon.indexGt(txcode, "-822030-")) {
                    return ValidResult.build(false, "86：收/付款类型为“预收货款”或“预付货款”或“货到付款”，但交易编码不是以“1货物贸易”开头或不是“2服务贸易”开头。剔除交易编码为“822030”的数据。");
                }
            }
        }
        // 非查询交易才校验
        //只提供提示，不控制死
//        if (!transName.endsWith("sel")) {
////            //82  收/付款类型为“退款”，但交易附言1和交易附言2均未注明原申报单号码（不包含数字0-9）剔除未付先退/原现钞出境/银行卡/原汇出行非我行等无法写明原申报单号的业务。剔除第三方支付机构以自身名义申报的还原数据（对私居民客户的单笔金额低于等值5000美元（含）的小汇总数据）
////            if (bopdecCommon.indexGt(paytype, "-R-") && (inifrm.startsWith("dba") || inifrm.startsWith("dbb") || inifrm.startsWith("dbc")) && (!bopdecCommon.containsValue(txrem, "-0-1-2-3-4-5-6-7-8-9-") && !bopdecCommon.containsValue(tx2rem, "-0-1-2-3-4-5-6-7-8-9-"))) {
////                return ValidResult.build(false, "第82条核查:收/付款类型为“退款”，但交易附言1和交易附言2均未注明原申报单号码（不包含数字0-9）。剔除未付先退/原现钞出境/银行卡/原汇出行非我行等无法写明原申报单号的业务。剔除第三方支付机构以自身名义申报的还原数据（对私居民客户的单笔金额低于等值5000美元（含）的小汇总数据）。");
////            }
////            //83 （3）交易附言中包含“退”字样，但收付款类型不为“退款”。剔除“交易附言”包含“退休、退火炉、退热贴、冷退板、退销钉机、退单、退税”等字样的数据。
////            if ((inifrm.startsWith("dba") || inifrm.startsWith("dbb")) && bopdecCommon.indexLe(paytype, "-R-") && ((txrem.contains("退") && !bopdecCommon.containsValue(txrem, "-退休-退火-退火炉-退热贴-冷退板-退销钉机-退单-退税-退浆机-退冰-退学-退保-进口退运-")) || ((tx2rem.contains("退") && !bopdecCommon.containsValue(tx2rem, "-退休-退火-退火炉-退热贴-冷退板-退销钉机-退单-退税-退浆机-退冰-退学-退保-进口退运-"))))) {
////                return ValidResult.build(false, "第83条检核:《涉外收入申报单》和《境外汇款申请书》中，交易附言中包含“退”字样，但收付款类型不为“退款”。剔除交易附言包含“退休、退火、退热贴、冷退板、退销钉机、退单、退税、退浆机、退冰、退学、退保、进口退运”等字样的数据。");
////            }
////            //84 （4）收/付款类型为“预收/预付”，但交易附言中不包含“预收/预付”字样。
////            if (bopdecCommon.indexGt(paytype, "-A-") && inifrm.startsWith("dba") && !bopdecCommon.containsValue(txrem, "-预收-") && !bopdecCommon.indexGt(txcode, "-822030-")) {
////                if (!MdaUtils.isEmpty(tx2rem)) {
////                    if (!bopdecCommon.containsValue(tx2rem, "-预收-") && !bopdecCommon.indexGt(txcode2, "-822030-")) {
////                        return ValidResult.build(false, "第84条检核:收/付款类型为“预收/预付”，但交易附言中不包含“预收/预付”字样");
////                    }
////                } else {
////                    return ValidResult.build(false, "第84条检核:收/付款类型为“预收/预付”，但交易附言中不包含“预收/预付”字样");
////                }
////            }
////            //84 （4）收/付款类型为“预收/预付”，但交易附言中不包含“预收/预付”字样。
////            if (bopdecCommon.indexGt(paytype, "-A-") && (inifrm.startsWith("dbb") || inifrm.startsWith("dbc")) && !bopdecCommon.containsValue(txrem, "-预付-") && !bopdecCommon.indexGt(txcode, "-822030-")) {
////                if (!MdaUtils.isEmpty(tx2rem)) {
////                    if (!bopdecCommon.containsValue(tx2rem, "-预付-") && !bopdecCommon.indexGt(txcode2, "-822030-")) {
////                        return ValidResult.build(false, "第84条检核:收/付款类型为“预收/预付”，但交易附言中不包含“预收/预付”字样");
////                    }
////                } else {
////                    return ValidResult.build(false, "第84条检核:收/付款类型为“预收/预付”，但交易附言中不包含“预收/预付”字样");
////                }
////            }
////
////            //85 （5）交易附言中包含“预收/预付”字样，但收/付款类型不为“预收/预付”，剔除收付款性质为“退款”。
////            if (bopdecCommon.indexLe(paytype, "-A-F-R-") && ((((bopdecCommon.containsValue(txrem, "-预收-") && txcode.startsWith("1")) || (txcode2.startsWith("1") && bopdecCommon.containsValue(tx2rem, "-预收-"))) && inifrm.startsWith("dba")) || (((bopdecCommon.containsValue(txrem, "-预付-") && txcode.startsWith("1")) || (txcode2.startsWith("1") && bopdecCommon.containsValue(tx2rem, "-预付-"))) && (inifrm.startsWith("dbc") || inifrm.startsWith("dbb"))))) {
////                return ValidResult.build(false, "第85条检核:交易附言中包含“预收/预付”字样，但收/付款类型不为“预收/预付”，剔除收付款性质为“退款”");
////            }
////
////            // 87 收入类型不为空，但交易编码不是以“1货物贸易”开头或不是“221000来料加工工缴费收入/822020获得境外贷款/822030境外存入款项”
////            if (!MdaUtils.isEmpty(payattr) && !MdaUtils.isEmpty(txcode)) {
////                //如果交易编码2不为空
////                if (!MdaUtils.isEmpty(txcode2)) {
////                    if (!txcode.startsWith("1") && !bopdecCommon.indexGt(txcode, "-822020-822030-221000-") && !txcode2.startsWith("1") && !bopdecCommon.indexGt(txcode2, "-822020-822030-221000-")) {
////                        return ValidResult.build(false, "第87条检核:收入类型不为空，但交易编码不是以“1货物贸易”开头或不是“221000来料加工工缴费收入/822020获得境外贷款/822030境外存入款项”");
////                    }
////                } else {
////                    //如果交易编码2为空则只判断交易编码1
////                    if (!txcode.startsWith("1") && !bopdecCommon.indexGt(txcode, "-822020-822030-221000-")) {
////                        return ValidResult.build(false, "第87条检核:收入类型不为空，但交易编码不是以“1货物贸易”开头或不是“221000来料加工工缴费收入/822020获得境外贷款/822030境外存入款项”");
////                    }
////                }
////            }
////        }
        return null;
    }

    public WarningResult warncheckPaytype(CheckItems checkItems,String subid){
        String paytype = checkItems.getPaytype();
        String custype = checkItems.getCustype();
        String tx2rem = checkItems.getTx2rem();
        String txrem = checkItems.getTxrem();
        String txcode = checkItems.getTxcode();
        String txcode2 = checkItems.getTxcode2();
        String payattr = checkItems.getPayattr();
        String transName = checkItems.getTransName().toLowerCase();
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
        ///收款人类型dba对私不用填
        if (!(inifrm.startsWith("dba") && bopdecCommon.indexGt(custype, "-D-F-"))) {
            if (MdaUtils.isEmpty(paytype)) {
                return WarningResult.buildEmpty(subid);
            }
        }
        //81（1）收/付款类型为“退款”，但交易附言中不包含“退”字样。//附言2为空，交易附言1不包含退
        if (bopdecCommon.indexGt(paytype, "-R-") && MdaUtils.isEmpty(tx2rem) && !txrem.contains("退")) {
            return WarningResult.buildEmpty(subid);
        }
        //81（1）收/付款类型为“退款”，但交易附言中不包含“退”字样。//附言2不为空，交易附言1不包含退
        if (bopdecCommon.indexGt(paytype, "-R-") && !MdaUtils.isEmpty(tx2rem) && !txrem.contains("退") && !tx2rem.contains("退")) {
            return WarningResult.buildEmpty(subid);
        }
        // 86：收/付款类型为“预收货款”或“预付货款”或“货到付款”，但交易编码不是以“1货物贸易”开头或不是“2服务贸易”开头。剔除交易编码为“822030”的数据。--20201210改动
        // A 预收款   P 货到付款
        if (bopdecCommon.indexGt(paytype, "-A-P-") && !MdaUtils.isEmpty(txcode)) {
            //如果交易编码2不为空
            if (!MdaUtils.isEmpty(txcode2)) {
                if (!txcode.startsWith("1") && !txcode.startsWith("2") && !bopdecCommon.indexGt(txcode, "-822030-") && !txcode2.startsWith("1") && !txcode2.startsWith("2") && !bopdecCommon.indexGt(txcode2, "-822030-")) {
                    return WarningResult.buildEmpty(subid);
                }
            } else {
                //如果交易编码2为空则只判断交易附言1
                if (!txcode.startsWith("1") && !txcode.startsWith("2") && !bopdecCommon.indexGt(txcode, "-822030-")) {
                    return WarningResult.buildEmpty(subid);
                }
            }
        }
        // 非查询交易才校验
        //只提供提示，不控制死
        if (!transName.endsWith("sel")) {
            //82  收/付款类型为“退款”，但交易附言1和交易附言2均未注明原申报单号码（不包含数字0-9）剔除未付先退/原现钞出境/银行卡/原汇出行非我行等无法写明原申报单号的业务。剔除第三方支付机构以自身名义申报的还原数据（对私居民客户的单笔金额低于等值5000美元（含）的小汇总数据）
            if (bopdecCommon.indexGt(paytype, "-R-") && (inifrm.startsWith("dba") || inifrm.startsWith("dbb") || inifrm.startsWith("dbc")) && (!bopdecCommon.containsValue(txrem, "-0-1-2-3-4-5-6-7-8-9-") && !bopdecCommon.containsValue(tx2rem, "-0-1-2-3-4-5-6-7-8-9-"))) {
                return WarningResult.build(subid, "第82条核查:收/付款类型为“退款”，但交易附言1和交易附言2均未注明原申报单号码（不包含数字0-9）。剔除未付先退/原现钞出境/银行卡/原汇出行非我行等无法写明原申报单号的业务。剔除第三方支付机构以自身名义申报的还原数据（对私居民客户的单笔金额低于等值5000美元（含）的小汇总数据）。"
                ,new Object[]{paytype,inifrm,txrem,tx2rem});
            }
            //83 （3）交易附言中包含“退”字样，但收付款类型不为“退款”。剔除“交易附言”包含“退休、退火炉、退热贴、冷退板、退销钉机、退单、退税”等字样的数据。
            if ((inifrm.startsWith("dba") || inifrm.startsWith("dbb")) && bopdecCommon.indexLe(paytype, "-R-") && ((txrem.contains("退") && !bopdecCommon.containsValue(txrem, "-退休-退火-退火炉-退热贴-冷退板-退销钉机-退单-退税-退浆机-退冰-退学-退保-进口退运-")) || ((tx2rem.contains("退") && !bopdecCommon.containsValue(tx2rem, "-退休-退火-退火炉-退热贴-冷退板-退销钉机-退单-退税-退浆机-退冰-退学-退保-进口退运-"))))) {
                return WarningResult.build(subid, "第83条检核:《涉外收入申报单》和《境外汇款申请书》中，交易附言中包含“退”字样，但收付款类型不为“退款”。剔除交易附言包含“退休、退火、退热贴、冷退板、退销钉机、退单、退税、退浆机、退冰、退学、退保、进口退运”等字样的数据。"
                        ,new Object[]{paytype,inifrm,txrem,tx2rem});
            }
            //84 （4）收/付款类型为“预收/预付”，但交易附言中不包含“预收/预付”字样。
            if (bopdecCommon.indexGt(paytype, "-A-") && inifrm.startsWith("dba") && !bopdecCommon.containsValue(txrem, "-预收-") && !bopdecCommon.indexGt(txcode, "-822030-")) {
                if (!MdaUtils.isEmpty(tx2rem)) {
                    if (!bopdecCommon.containsValue(tx2rem, "-预收-") && !bopdecCommon.indexGt(txcode2, "-822030-")) {
                        return WarningResult.build(subid, "第84条检核:收/付款类型为“预收/预付”，但交易附言中不包含“预收/预付”字样"
                                ,new Object[]{tx2rem,txcode2});
                    }
                } else {
                    return WarningResult.build(subid, "第84条检核:收/付款类型为“预收/预付”，但交易附言中不包含“预收/预付”字样"
                            ,new Object[]{paytype,inifrm,txrem,txcode});
                }
            }
            //84 （4）收/付款类型为“预收/预付”，但交易附言中不包含“预收/预付”字样。
            if (bopdecCommon.indexGt(paytype, "-A-") && (inifrm.startsWith("dbb") || inifrm.startsWith("dbc")) && !bopdecCommon.containsValue(txrem, "-预付-") && !bopdecCommon.indexGt(txcode, "-822030-")) {
                if (!MdaUtils.isEmpty(tx2rem)) {
                    if (!bopdecCommon.containsValue(tx2rem, "-预付-") && !bopdecCommon.indexGt(txcode2, "-822030-")) {
                        return WarningResult.build(subid, "第84条检核:收/付款类型为“预收/预付”，但交易附言中不包含“预收/预付”字样"
                                ,new Object[]{tx2rem,txcode2});
                    }
                } else {
                    return WarningResult.build(subid, "第84条检核:收/付款类型为“预收/预付”，但交易附言中不包含“预收/预付”字样"
                            ,new Object[]{paytype,inifrm,txrem,txcode});
                }
            }

            //85 （5）交易附言中包含“预收/预付”字样，但收/付款类型不为“预收/预付”，剔除收付款性质为“退款”。
            if (bopdecCommon.indexLe(paytype, "-A-F-R-") && ((((bopdecCommon.containsValue(txrem, "-预收-") && txcode.startsWith("1")) || (txcode2.startsWith("1") && bopdecCommon.containsValue(tx2rem, "-预收-"))) && inifrm.startsWith("dba")) || (((bopdecCommon.containsValue(txrem, "-预付-") && txcode.startsWith("1")) || (txcode2.startsWith("1") && bopdecCommon.containsValue(tx2rem, "-预付-"))) && (inifrm.startsWith("dbc") || inifrm.startsWith("dbb"))))) {
                return WarningResult.build(subid, "第85条检核:交易附言中包含“预收/预付”字样，但收/付款类型不为“预收/预付”，剔除收付款性质为“退款”"
                        ,new Object[]{paytype,txrem,txcode,txcode2,tx2rem,inifrm});
            }

            // 87 收入类型不为空，但交易编码不是以“1货物贸易”开头或不是“221000来料加工工缴费收入/822020获得境外贷款/822030境外存入款项”
            if (!MdaUtils.isEmpty(payattr) && !MdaUtils.isEmpty(txcode)) {
                //如果交易编码2不为空
                if (!MdaUtils.isEmpty(txcode2)) {
                    if (!txcode.startsWith("1") && !bopdecCommon.indexGt(txcode, "-822020-822030-221000-") && !txcode2.startsWith("1") && !bopdecCommon.indexGt(txcode2, "-822020-822030-221000-")) {
                        return WarningResult.build(subid, "第87条检核:收入类型不为空，但交易编码不是以“1货物贸易”开头或不是“221000来料加工工缴费收入/822020获得境外贷款/822030境外存入款项”"
                                ,new Object[]{txcode,txcode2});
                    }
                } else {
                    //如果交易编码2为空则只判断交易编码1
                    if (!txcode.startsWith("1") && !bopdecCommon.indexGt(txcode, "-822020-822030-221000-")) {
                        return WarningResult.build(subid, "第87条检核:收入类型不为空，但交易编码不是以“1货物贸易”开头或不是“221000来料加工工缴费收入/822020获得境外贷款/822030境外存入款项”"
                                ,new Object[]{txcode});
                    }
                }
            }
        }
        return WarningResult.buildEmpty(subid);
    }

    public ValidResult checkDclRptdate0007(CheckItems checkItems){
        Date rptdate = checkItems.getDclrptdate();
        String rptno = checkItems.getRptno();
//        String transName = checkItems.getTransName().toLowerCase();
        if (MdaUtils.isEmpty(rptdate)) {
            return ValidResult.build(false, "此字段为必输项！");
        } else {
            if (!MdaUtils.isEmpty(rptdate)) {
                String fmtRPTDat = bopdecCommon.format(rptdate, "yyMMdd");
                String strdat = Strings.mid(rptno, 13, 6);
                //涉外收入 必填项，按申报主体真实申报日期填写。申报日期>=申报号码中的日期。
                //境外汇款申请书 必填项，按申报主体真实填报日期填写。申报日期<=申报号码中的日期。
                //对外付款/承兑通知书 必填项，按申报主体真实填报日期填写。
                String transTyp = checkItems.getBopobjtyp().toLowerCase();
                if ("dba".equals(transTyp) && Integer.valueOf(fmtRPTDat) < Integer.valueOf(strdat)) {
                    return ValidResult.build(false, "申报日期 不得早于收付汇日期!");
                } else if ("dba".equals(transTyp) && Dates.diff(rptdate, MdaUtils.today()) > 0) {
                    //20210220 2.1《涉外收入申报单》：增加控制“申报日期”不应晚于当前日期
                    return ValidResult.build(false, "申报日期 不得晚于当前日期!");
                } else if ("dbb".equals(transTyp) && Integer.valueOf(fmtRPTDat) > Integer.valueOf(strdat)) {
                    return ValidResult.build(false, "申报日期应该<=申报号码中的日期!");
                } else if ("dbc".equals(transTyp) && Integer.valueOf(fmtRPTDat) < Integer.valueOf(strdat)) {
                    return ValidResult.build(false, "申报日期 不得早于收付汇日期!");
                }
            }
        }
        return null;
    }

    public ValidResult checkVrfRptdate0007(CheckItems checkItems){
        Date rptdate = checkItems.getVrfrptdate();
        String rptno = checkItems.getRptno();
//        String transName = checkItems.getTransName().toLowerCase();
        if (MdaUtils.isEmpty(rptdate)) {
            return ValidResult.build(false, "此字段为必输项！");
        } else {
            if (!MdaUtils.isEmpty(rptdate)) {
                String fmtRPTDat = bopdecCommon.format(rptdate, "yyMMdd");
                String strdat = Strings.mid(rptno, 13, 6);
                //涉外收入 必填项，按申报主体真实申报日期填写。申报日期>=申报号码中的日期。
                //境外汇款申请书 必填项，按申报主体真实填报日期填写。申报日期<=申报号码中的日期。
                //对外付款/承兑通知书 必填项，按申报主体真实填报日期填写。
                String transTyp = checkItems.getBopobjtyp().toLowerCase();
                if ("dba".equals(transTyp) && Integer.valueOf(fmtRPTDat) < Integer.valueOf(strdat)) {
                    return ValidResult.build(false, "申报日期 不得早于收付汇日期!");
                } else if ("dba".equals(transTyp) && Dates.diff(rptdate, MdaUtils.today()) > 0) {
                    //20210220 2.1《涉外收入申报单》：增加控制“申报日期”不应晚于当前日期
                    return ValidResult.build(false, "申报日期 不得晚于当前日期!");
                } else if ("dbb".equals(transTyp) && Integer.valueOf(fmtRPTDat) > Integer.valueOf(strdat)) {
                    return ValidResult.build(false, "申报日期应该<=申报号码中的日期!");
                } else if ("dbc".equals(transTyp) && Integer.valueOf(fmtRPTDat) < Integer.valueOf(strdat)) {
                    return ValidResult.build(false, "申报日期 不得早于收付汇日期!");
                }
            }
        }
        return null;
    }

    public ValidResult checkDclRptdate0013(CheckItems checkItems){
        Date rptdate = checkItems.getDclrptdate();
        String rptno = checkItems.getRptno();
        String transName = checkItems.getTransName().toLowerCase();
        if (MdaUtils.isEmpty(rptdate)) {
            return ValidResult.build(false, "此字段为必输项！");
        } else {
            if (!MdaUtils.isEmpty(rptdate)) {
                String fmtRPTDat = bopdecCommon.format(rptdate, "yyMMdd");
                String strdat = Strings.mid(rptno, 13, 6);
                if(Integer.valueOf(fmtRPTDat) < Integer.valueOf(strdat)){
                    return ValidResult.build(false, "申报日期 不得早于收付汇日期!");
                }
            }
        }
        return null;
    }

    public ValidResult checkVrfRptdate0013(CheckItems checkItems){
        Date rptdate = checkItems.getVrfrptdate();
        String rptno = checkItems.getRptno();
        String transName = checkItems.getTransName().toLowerCase();
        if (MdaUtils.isEmpty(rptdate)) {
            return ValidResult.build(false, "此字段为必输项！");
        } else {
            if (!MdaUtils.isEmpty(rptdate)) {
                String fmtRPTDat = bopdecCommon.format(rptdate, "yyMMdd");
                String strdat = Strings.mid(rptno, 13, 6);
                if(Integer.valueOf(fmtRPTDat) < Integer.valueOf(strdat)){
                    return ValidResult.build(false, "申报日期 不得早于收付汇日期!");
                }
            }
        }
        return null;
    }

    public ValidResult checkTc1amt(CheckItems checkItems){
        BigDecimal tc1amt = checkItems.getTc1amt();
        if(MdaUtils.isEmpty(tc1amt)){
            tc1amt = BigDecimal.ZERO;
        }
        BigDecimal tc2amt = checkItems.getTc2amt();
        if(MdaUtils.isEmpty(tc2amt)){
            tc2amt = BigDecimal.ZERO;
        }
        String txcode = checkItems.getTxcode();
        BigDecimal basamt = checkItems.getTxamt();
        if(MdaUtils.isEmpty(basamt)){
            basamt = BigDecimal.ZERO;
        }
        BigDecimal dclamt = tc1amt.add(tc2amt);
        String transName = checkItems.getTransName().toLowerCase();
//            String nam = Strings.mid(transName, 1, 3);
        String nam = checkItems.getBopobjtyp().toLowerCase();
        if ((MdaUtils.isEmpty(tc1amt) || MdaUtils.isBigDecimalEmpty(tc1amt)) && !bopdecCommon.indexGt(txcode, "-999998-")) {
            return ValidResult.build(false, "此字段为必输项！");
        }
        if (basamt.compareTo(dclamt) != 0) {
            if ("dba".equals(nam) || "bop".equals(nam)) {
                return bopdecCommon.checkErrorText("D");
            } else if ("dbc".equals(nam) || "bop".equals(nam)) {
                return bopdecCommon.checkErrorText( "H");
            } else if ("dbb".equals(nam) || "bop".equals(nam)) {
                return bopdecCommon.checkErrorText( "I");
            }
        }
        return null;
    }

    public ValidResult checkTxcode(CheckItems checkItems){
        String txcode = checkItems.getTxcode();
        String txcode2 = checkItems.getTxcode2();
        BigDecimal tc1amt = checkItems.getTc1amt();
        if(MdaUtils.isEmpty(tc1amt)){
            tc1amt = BigDecimal.ZERO;
        }
        BigDecimal tc2amt = checkItems.getTc2amt();
        if(MdaUtils.isEmpty(tc2amt)){
            tc2amt = BigDecimal.ZERO;
        }

        String paytype = checkItems.getPaytype();
        String country = checkItems.getCountry();
        String custnm = checkItems.getCustnm();
        String oppuser = checkItems.getOppuser();
        String custype = checkItems.getCustype();
        String custcod = checkItems.getCustcod();
        String lcyacc = checkItems.getLcyacc();
        String fcyacc = checkItems.getFcyacc();
        String othacc = checkItems.getOthacc();
        BigDecimal txamt = checkItems.getTxamt();
        if(MdaUtils.isEmpty(txamt)){
            txamt = BigDecimal.ZERO;
        }
        String txrem = checkItems.getTxrem();
        String tx2rem = checkItems.getTx2rem();
        String isref = checkItems.getDclisref();
        String payattr = checkItems.getPayattr();
        BigDecimal zero = BigDecimal.ZERO;
        BigDecimal txamtB = checkItems.getTxamt();
        if(MdaUtils.isEmpty(txamtB)){
            txamtB = BigDecimal.ZERO;
        }
        String transName = checkItems.getTransName().toLowerCase();
//            String inifrm = Strings.mid(transName, 1, 3);
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
        if (MdaUtils.isEmpty(txcode)) {
            return ValidResult.build(false, "此字段为必输项！");
        }
        //非查询交易才校验
        //只提供提示，不控制死
//        if (!transName.endsWith("sel")) {
//            //48 交易对方名称中包含“BANK”或“银行”字样，但交易编码却不是“223022”、“223023”、“226000”、“322041”、“724000”、“821030”、“822020”、“822030”等金融机构常涉及的业务。BANK大小写不敏感，剔除交易附言含有 “银行”或“海外代付”字样数据；剔除交易对方名称中含有“LIMITED”、“LTD”、“L.T.D”、“CO”、“COMPANY”、“INC”、“LLC”等字样数据。、
//            if (bopdecCommon.containsValueUpper(oppuser, "-BANK-银行-") && !bopdecCommon.containsValue(custnm, "-银联国际有限公司-上海国际黄金交易中心有限公司-") && bopdecCommon.indexLe(txcode, "-223022-223023-226000-321000-322041-724000-821030-822020-822030-") && !bopdecCommon.containsValueUpper(txrem, "-银行-代付-债券北向通-CIBM-QDII-QDLP-") && !bopdecCommon.containsValueUpper(oppuser, "-LIMITED-LTD-L.T.D-CO-COMPANY-INC-LLC-GMBH-BHD-SDN-PLC-")) {
//                return ValidResult.build(false, "第48条核查:交易对方名称中包含“BANK”或“银行”字样，但交易编码却不是“223022”、“223023”、“226000”、“321000 ”、“322041”、“724000”、“821030”、“822020”、“822030”等金融机构常涉及的业务。BANK不区分大小写。剔除交易附言含有 “银行”、“代付”、“债券北向通”、“CIBM”、“QDII”或“QDLP”字样数据。剔除交易对方名称中含有“LIMITED”、“LTD”、“L.T.D”、“CO”、“COMPANY”、“INC”、“LLC”、“GMBH”、“BHD”、“SDN”、“PLC”等字样数据。剔除申报主体为“银联国际有限公司”或“上海国际黄金交易中心有限公司”的申报数据。");
//            }
//            //60 交易对方名称与申报主体名称完全相同，但交易编码为“421010个人间捐赠及无偿援助”。
//            if (!MdaUtils.isEmpty(custnm) && !MdaUtils.isEmpty(oppuser)) {
//                String cusStr = custnm;
//                String oppStr = oppuser;
//                if (oppStr.length() > 4 && (oppStr.substring(4, oppStr.length()).equals(cusStr)) && bopdecCommon.indexGt(txcode, "-421010-")) {
//                    return ValidResult.build(false, "第60条核查:交易对方名称与申报主体名称完全相同，但交易编码为“421010个人间捐赠及无偿援助”");
//                }
//            }
//            //交易对方名称中含有“LIMITED”、“LTD”、“L.T.D”、“CO”、“COMPANY”、“INC”、“LLC”、“GMBH”、“BHD”、“SDN”、“PLC”等字样，但交易编码为“421010个人间捐赠及无偿援助”。
//            if (bopdecCommon.containsValueUpper(oppuser, "-LIMITED-LTD-L.T.D-CO-COMPANY-INC-LLC-GMBH-BHD-SDN-PLC-") && bopdecCommon.indexGt(txcode, "-421010-")) {
//                return ValidResult.build(false, "第4.3.14.1项检核:交易对方名称中含有“LIMITED”、“LTD”、“L.T.D”、“CO”、“COMPANY”、“INC”、“LLC”、“GMBH”、“BHD”、“SDN”、“PLC”等字样，但交易编码为“421010个人间捐赠及无偿援助”。");
//            }
//            //70对公申报主体的“购汇账号”或“现汇账号”或“其他账号”中以“OSA”或“NRA”或“FTN”或“FTF”字样开头，但交易编码不为“822030境外存入款项/调出”，剔除行业属性为“2096国际组织”、行业属性为“2099使领馆”且经济类型为“400境外机构”、申报主体为“QFII”机构或“RQFII”机构（“QFII”机构和”RQFII”机构需要从资本系统同步过来）。
//            //if (Platform.indexGt(custype,"-C-") && Platform.indexLe($txcode,"-822030-") && (Platform.startsWithValue(lcyacc,"-OSA-NRA-FTN-FTF-") || Platform.startsWithValue(fcyacc,"-OSA-NRA-FTN-FTF-") || Platform.startsWithValue(othacc,"-OSA-NRA-FTN-FTF-")) && "-2096-2099-".indexOf($\\sysmod.getIndustryCode((String)custcod.getValue()))<0  )
//            if (bopdecCommon.indexGt(custype, "-C-") && bopdecCommon.indexLe(txcode, "-822030-") && (bopdecCommon.startsWithValueUpper(lcyacc, "-OSA-NRA-FTN-FTF-") || bopdecCommon.startsWithValueUpper(fcyacc, "-OSA-NRA-FTN-FTF-") || bopdecCommon.startsWithValueUpper(othacc, "-OSA-NRA-FTN-FTF-"))) {
//                return ValidResult.build(false, "第70条核查:对公申报主体的“购汇账号”或“现汇账号”或“其他账号”中以“OSA”或“NRA”或“FTN”或“FTF”字样开头，但交易编码不为“822030境外存入款项/调出”，剔除行业属性为“2096国际组织”、行业属性为“2099使领馆”且经济类型为“400境外机构”、申报主体为“QFII”机构或“RQFII”机构。");
//            }
//            //79 “是否保税货物项下收入/付款”选“是”，但交易编码不是以“1货物贸易”开头。//交易2不判断
//            if (bopdecCommon.indexGt(isref, "-Y-") && !MdaUtils.isEmpty(txcode) && (!txcode.startsWith("1") && !"221000".equals(txcode))) {
//                return ValidResult.build(false, "第79条核查:“是否保税货物项下收入/付款”选“是”，但交易编码不是以“1货物贸易”开头或不是“221000来料加工工缴费收入/出料加工工缴费支出”。");
//            }
//            //87 收入类型不为空，但交易编码不是以“1货物贸易”开头或不是“221000来料加工工缴费收入/822020获得境外贷款/822030境外存入款项
//            if (!MdaUtils.isEmpty(payattr) && (!MdaUtils.isEmpty(txcode) && (!txcode.startsWith("1") && !bopdecCommon.indexGt(txcode, "-822020-822030-221000-")))) {
//                return ValidResult.build(false, "第87条核查:收入类型不为空，但交易编码不是以“1货物贸易”开头或不是“221000来料加工工缴费收入/822020获得境外贷款/822030境外存入款项");
//            }
//            //93 （1）交易编码1、2均为进出口核查项下（以“1货物贸易”开头或“221000来料加工工缴费收入/出料加工工缴费支出”）或都不为进出口核查项下，“交易金额1”小于“交易金额2”，剔除交易附言2包含 “其中”、“含”、数字{0-9}的数据。
//            if ((((txcode.startsWith("1") || bopdecCommon.indexGt(txcode, "-221000-")) && (txcode2.startsWith("1") || bopdecCommon.indexGt(txcode2, "-221000-"))) || ((!txcode.startsWith("1") && !bopdecCommon.indexGt(txcode, "-221000-")) && (!txcode2.startsWith("1") && !bopdecCommon.indexGt(txcode2, "-221000-")))) && tc1amt.compareTo(tc2amt) < 0 && !bopdecCommon.containsValue(tx2rem, "-其中-含-0-1-2-3-4-5-6-7-8-9-")) {
//                return ValidResult.build(false, "第93条核查:交易编码1、2均为进出口核查项下（以“1货物贸易”开头或“221000来料加工工缴费收入/出料加工工缴费支出”）或都不为进出口核查项下，“交易金额1”小于“交易金额2”，剔除交易附言2包含 “其中”、“含”、数字0-9的数据");
//            }
//            //95 交易附言与交易编码名称完全一致。交易编码1和交易编码2都需要校验。剔除交易编码为“221000来料加工工缴费收入/出料加工工缴费支出”、“622012筹备资金汇入/撤出”。
//            if (!MdaUtils.isEmpty(txrem)) {
//                String codtxtStr = "";
//                //根据交易编码获取交易名称
//                String iotype = this.getIoType(inifrm);
//                List<Bopcod> bopcodList = bopcodMapper.selectByCod(txcode,iotype);
//                if(bopcodList.size() > 0){
//                    codtxtStr = bopcodList.get(0).getTxt();
//                }
////                if (!MdaUtils.isEmpty(bopcod)) {
////                    codtxtStr = bopcod.getTxt();
////                }
//                String txtStr = txrem.trim();
//                if (txtStr.equals(codtxtStr) && !bopdecCommon.indexGt(txcode, "-221000-621011-622012-")) {
//                    return ValidResult.build(false, "第95条核查:交易附言与交易编码名称完全一致。交易编码1和交易编码2都需要校验。剔除交易编码为“221000来料加工工缴费收入/出料加工工缴费支出”、“621011因境外子公司清算、终止等撤资/新设境外子公司资本金汇出”、“622012筹备资金汇入/撤出”");
//                }
//            }
//            //242 交易编码以7开头：申报主体为“中国证券登记结算有限责任公司上海分公司”或“中国证券登记结算有限责任公司深圳分公司”，交易附言不包含“港股通”、“沪股通”或“深股通”字样，剔除交易附言含有“B股”或“备用金”字样的数据。
//            if (txcode.startsWith("7") && !bopdecCommon.containsValue(txrem, "-港股通-沪股通-深股通-B股-备用金-") && (bopdecCommon.indexGt(custnm, "-中国证券登记结算有限责任公司上海分公司-") || bopdecCommon.indexGt(custnm, "-中国证券登记结算有限责任公司深圳分公司-"))) {
//                return ValidResult.build(false, "第242条核查:交易编码以7开头：申报主体为“中国证券登记结算有限责任公司上海分公司”或“中国证券登记结算有限责任公司深圳分公司”，交易附言不包含“港股通”、“沪股通”或“深股通”字样，剔除交易附言含有“B股”或“备用金”字样的数据。");
//            }
//            //243 交易编码为“999998实际资金收付轧差结算”，但交易对方国别不为“中国”。
//            //if(Platform.indexGt($txcode,"-999998-") && !$\\sysmod.getTransOthCountry((String)oppuser.getValue()).equals("CHN"))
//            if (bopdecCommon.indexGt(txcode, "-999998-") && !"CHN".equals(country)) {
//                return ValidResult.build(false, "第243条核查:交易编码为“999998实际资金收付轧差结算”，但交易对方国别不为“中国”");
//            }
//
//        }
        //40交易对方常驻国家（地区）代码为“CHN（中国）”，交易编码为“999998-无实际资金收付的轧差结算”数据不校验。
        String othcty = "";
        if (!MdaUtils.isEmpty(custcod)) {
            othcty = dbuMapper.getTransOthCountry(custcod);
            if(MdaUtils.isEmpty(othcty)){
                othcty = "";
            }
        }
        if ("-CHN-".indexOf(othcty) > 0 && !bopdecCommon.indexGt(txcode, "-999998-")) {
            return ValidResult.build(false, "40：交易编码不为999998时，常驻国家（地区）代码不能为CHN");
        }
        //50 交易对方名称以“(JN)”字样开头，但交易编码为“822030境外存入款项／调出”。
        if (oppuser.startsWith("(JN)") && bopdecCommon.indexGt(txcode, "-822030-")) {
            return ValidResult.build(false, "50：交易对方名称以“(JN)”字样开头交易编码不能为“822030境外存入款项／调出”");
        }
        //65（1）申报金额为“0”，但交易编码不为“999998无实际资金收付的轧差结算”。

        if (txamtB.compareTo(zero) == 0 && bopdecCommon.indexLe(txcode, "-999998-")) {
            return ValidResult.build(false, "65：申报金额为“0”，但交易编码不为“999998无实际资金收付的轧差结算””");
        }
        //66（2）申报金额不为“0”，但交易编码为“999998无实际资金收付的轧差结算”。
        if (txamtB.compareTo(zero) != 0 && bopdecCommon.indexGt(txcode, "-999998-")) {
            return ValidResult.build(false, "66：申报金额不为“0”，但交易编码为“999998无实际资金收付的轧差结算”");
        }
        //73 （3）申报主体类型为“对私非居民”，交易编码不为“822030境外存入款项／调出”剔除交易编码为“232000别处未涵盖的政府货物和服务”的数据。
        if (bopdecCommon.indexGt(custype, "-F-") && bopdecCommon.indexLe(txcode, "-232000-") && bopdecCommon.indexLe(txcode, "-822030-")) {
            return ValidResult.build(false, "73：申报主体类型为“对私非居民”，交易编码不为“822030境外存入款项／调出”，剔除交易编码为“232000别处未涵盖的政府货物和服务”的数据。");
        }
        //88 收/付款类型为“货到付款”，但交易编码不是以“1货物贸易”开头或不是“221000来料加工工缴费收入/出料加工工缴费支出”。剔除交易编码为“822030”的数据
        // A 预收款   P 货到付款
        if (bopdecCommon.indexGt(paytype, "-P-") && !MdaUtils.isEmpty(txcode) && !txcode.startsWith("1") && !bopdecCommon.indexGt(txcode, "-221000-") && !bopdecCommon.indexGt(txcode, "-822030-")) {
            return ValidResult.build(false, "4.8.2.1项：收/付款类型为“货到付款”，但交易编码不是以“1货物贸易”开头或不是“221000来料加工工缴费收入/出料加工工缴费支出”。剔除交易编码为“822030”的数据。");
        }
        //89 收/付款类型为“预收款”或“预付款”，但交易编码不是以1或2开头。剔除交易编码为“822030”的数据
        // A 预收款   P 货到付款
        if (bopdecCommon.indexGt(paytype, "-A-") && !MdaUtils.isEmpty(txcode) && !bopdecCommon.startsWithValue(txcode, "-1-2-") && !bopdecCommon.indexGt(txcode, "-822030-")) {
            return ValidResult.build(false, "4.8.2.2项：收/付款类型为“预收款”或“预付款”，但交易编码不是以1或2开头。剔除交易编码为“822030”的数据。");
        }
        //不需要，系统无单位基本情况表数据
        //89 （1）对公申报数据，交易编码以“1货物贸易”开头，行业属性为“1066（货币金融服务）”、“1067（资本市场服务）”、“1069（其他金融业）”、“1990（中国共产党机关）”、“1991（国家机构）”、“1992（人民政协、民主党派）”、“1993（社会保障）”、“1994（群众团体、社会团体和其他成员组织）”、“2096（国际组织）”或“2099（使领馆）”。剔除银行黄金进出口数据（条件：行业属性为“1066货币金融服务且交易编码为“121040非货币黄金进出口”剔除申报主体为“上海国际黄金交易中心有限公司”  且交易编码为“121040非货币黄金进出口”
//        if(bopdecCommon.indexGt(custype,"-C-") && bopdecCommon.indexGt(txcode,"-1-")  && "-1066-1067-1069-1990-1991-1992-1993-1994-2096-2099-".indexOf(ctx.absGet(Sysmod.class).getIndustryCode((String)custcod.getValue()))>0  && (!( "-1066-".indexOf(ctx.absGet(Sysmod.class).getIndustryCode((String)custcod.getValue()))>0 && bopdecCommon.indexGt(txcode,"-121040-"))  ||  !(bopdecCommon.containsValue(custnm,"-上海国际黄金交易中心有限公司-") && bopdecCommon.indexGt(txcode,"-121040-")))) {
//            return ValidResult.build(false, "对公申报数据，交易编码以“1货物贸易”开头，行业属性为“1066（货币金融服务）”、“1067（资本市场服务）”、“1990（中国共产党机关）”、“1991（国家机构）”、“1992（人民政协、民主党派）”、“1993（社会保障）”、“1994（群众团体、社会团体和其他成员组织）”、“2096（国际组织）”或“2099（使领馆）”。剔除银行黄金进出口数据（行业属性为“1066货币金融服务”且交易编码为“121040非货币黄金进出口”）。剔除申报主体为“上海国际黄金交易中心有限公司”  且交易编码为“121040非货币黄金进出口”。");
//        }
        //不需要，系统无单位基本情况表数据
        //92（2）交易编码为“322011/322012/322021/322022/622011/622013/622015/622021/622022”,经济类型代码不以“2港澳台投资”或“3国外投资”开头。剔除申报主体组织机构代码为“551686504中海石油深海开发有限公司”和“559145905珠港澳大桥管理局”的数据。
        // $attrcode.setValue($\\sysmod.getAttrCode((String)custcod.getValue()));
//        if( bopdecCommon.indexGt(txcode,"-322011-322012-322021-322022-622011-622013-622015-622021-622022-") && bopdecCommon.startsWithValue(this.getAttrcode(),"-2-3-") && (bopdecCommon.indexLe(custcod,"-551686504-559145905-") ||  bopdecCommon.containsValue(txrem,"-资金池-"))) {
//            return ValidResult.build(false, "4.11.1.2项：交易编码为“322011/322012/322021/322022/622011/622013/622015/622021/622022”,经济类型代码不以“2港澳台投资”或“3国外投资”开头。剔除收入方向，交易编码为322011、322021的数据；支出方向，交易编码为322012、322022的数据。剔除申报主体为“中海石油深海开发有限公司”、“中国石油化工股份有限公司胜利油田分公司油气销售中心”和“珠港澳大桥管理局”的数据。剔除交易附言含“资金池”字样数据。");
//        }
        //94 （2）交易编码1不为进出口核查项下（以“1货物贸易”开头或“221000来料加工工缴费收入/出料加工工缴费支出”），交易编码2为进出口核查项下的数据。
        //log.info("txcode value is: " + $txcode.getValue() + "tx2code value is: " + $txcode2.getValue());
        if ((!txcode.startsWith("1") && !bopdecCommon.indexGt(txcode, "-221000-")) && (txcode2.startsWith("1") || bopdecCommon.indexGt(txcode2, "-221000-"))) {
            return ValidResult.build(false, "94：交易编码1不为进出口核查项下（以“1货物贸易”开头或“221000来料加工工缴费收入/出料加工工缴费支出”），交易编码2为进出口核查项下的数据");
        }
        return null;
    }

    public WarningResult warncheckTxcode(CheckItems checkItems,String subid){
        String txcode = checkItems.getTxcode();
        String txcode2 = checkItems.getTxcode2();
        BigDecimal tc1amt = checkItems.getTc1amt();
        if(MdaUtils.isEmpty(tc1amt)){
            tc1amt = BigDecimal.ZERO;
        }
        BigDecimal tc2amt = checkItems.getTc2amt();
        if(MdaUtils.isEmpty(tc2amt)){
            tc2amt = BigDecimal.ZERO;
        }

        String paytype = checkItems.getPaytype();
        String country = checkItems.getCountry();
        String custnm = checkItems.getCustnm();
        String oppuser = checkItems.getOppuser();
        String custype = checkItems.getCustype();
        String custcod = checkItems.getCustcod();
        String lcyacc = checkItems.getLcyacc();
        String fcyacc = checkItems.getFcyacc();
        String othacc = checkItems.getOthacc();
        BigDecimal txamt = checkItems.getTxamt();
        if(MdaUtils.isEmpty(txamt)){
            txamt = BigDecimal.ZERO;
        }
        String txrem = checkItems.getTxrem();
        String tx2rem = checkItems.getTx2rem();
        String isref = checkItems.getDclisref();
        String payattr = checkItems.getPayattr();
        BigDecimal zero = BigDecimal.ZERO;
        BigDecimal txamtB = checkItems.getTxamt();
        if(MdaUtils.isEmpty(txamtB)){
            txamtB = BigDecimal.ZERO;
        }
        String transName = checkItems.getTransName().toLowerCase();
//            String inifrm = Strings.mid(transName, 1, 3);
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
        if (MdaUtils.isEmpty(txcode)) {
            return WarningResult.buildEmpty(subid);
        }
        //非查询交易才校验
        //只提供提示，不控制死
        if (!transName.endsWith("sel")) {
            //48 交易对方名称中包含“BANK”或“银行”字样，但交易编码却不是“223022”、“223023”、“226000”、“322041”、“724000”、“821030”、“822020”、“822030”等金融机构常涉及的业务。BANK大小写不敏感，剔除交易附言含有 “银行”或“海外代付”字样数据；剔除交易对方名称中含有“LIMITED”、“LTD”、“L.T.D”、“CO”、“COMPANY”、“INC”、“LLC”等字样数据。、
            if (bopdecCommon.containsValueUpper(oppuser, "-BANK-银行-") && !bopdecCommon.containsValue(custnm, "-银联国际有限公司-上海国际黄金交易中心有限公司-") && bopdecCommon.indexLe(txcode, "-223022-223023-226000-321000-322041-724000-821030-822020-822030-") && !bopdecCommon.containsValueUpper(txrem, "-银行-代付-债券北向通-CIBM-QDII-QDLP-") && !bopdecCommon.containsValueUpper(oppuser, "-LIMITED-LTD-L.T.D-CO-COMPANY-INC-LLC-GMBH-BHD-SDN-PLC-")) {
                return WarningResult.build(subid, "第48条核查:交易对方名称中包含“BANK”或“银行”字样，但交易编码却不是“223022”、“223023”、“226000”、“321000 ”、“322041”、“724000”、“821030”、“822020”、“822030”等金融机构常涉及的业务。BANK不区分大小写。剔除交易附言含有 “银行”、“代付”、“债券北向通”、“CIBM”、“QDII”或“QDLP”字样数据。剔除交易对方名称中含有“LIMITED”、“LTD”、“L.T.D”、“CO”、“COMPANY”、“INC”、“LLC”、“GMBH”、“BHD”、“SDN”、“PLC”等字样数据。剔除申报主体为“银联国际有限公司”或“上海国际黄金交易中心有限公司”的申报数据。");
            }
            //60 交易对方名称与申报主体名称完全相同，但交易编码为“421010个人间捐赠及无偿援助”。
            if (!MdaUtils.isEmpty(custnm) && !MdaUtils.isEmpty(oppuser)) {
                String cusStr = custnm;
                String oppStr = oppuser;
                if (oppStr.length() > 4 && (oppStr.substring(4, oppStr.length()).equals(cusStr)) && bopdecCommon.indexGt(txcode, "-421010-")) {
                    return WarningResult.build(subid, "第60条核查:交易对方名称与申报主体名称完全相同，但交易编码为“421010个人间捐赠及无偿援助”");
                }
            }
            //交易对方名称中含有“LIMITED”、“LTD”、“L.T.D”、“CO”、“COMPANY”、“INC”、“LLC”、“GMBH”、“BHD”、“SDN”、“PLC”等字样，但交易编码为“421010个人间捐赠及无偿援助”。
            if (bopdecCommon.containsValueUpper(oppuser, "-LIMITED-LTD-L.T.D-CO-COMPANY-INC-LLC-GMBH-BHD-SDN-PLC-") && bopdecCommon.indexGt(txcode, "-421010-")) {
                return WarningResult.build(subid, "第4.3.14.1项检核:交易对方名称中含有“LIMITED”、“LTD”、“L.T.D”、“CO”、“COMPANY”、“INC”、“LLC”、“GMBH”、“BHD”、“SDN”、“PLC”等字样，但交易编码为“421010个人间捐赠及无偿援助”。");
            }
            //70对公申报主体的“购汇账号”或“现汇账号”或“其他账号”中以“OSA”或“NRA”或“FTN”或“FTF”字样开头，但交易编码不为“822030境外存入款项/调出”，剔除行业属性为“2096国际组织”、行业属性为“2099使领馆”且经济类型为“400境外机构”、申报主体为“QFII”机构或“RQFII”机构（“QFII”机构和”RQFII”机构需要从资本系统同步过来）。
            //if (Platform.indexGt(custype,"-C-") && Platform.indexLe($txcode,"-822030-") && (Platform.startsWithValue(lcyacc,"-OSA-NRA-FTN-FTF-") || Platform.startsWithValue(fcyacc,"-OSA-NRA-FTN-FTF-") || Platform.startsWithValue(othacc,"-OSA-NRA-FTN-FTF-")) && "-2096-2099-".indexOf($\\sysmod.getIndustryCode((String)custcod.getValue()))<0  )
            if (bopdecCommon.indexGt(custype, "-C-") && bopdecCommon.indexLe(txcode, "-822030-") && (bopdecCommon.startsWithValueUpper(lcyacc, "-OSA-NRA-FTN-FTF-") || bopdecCommon.startsWithValueUpper(fcyacc, "-OSA-NRA-FTN-FTF-") || bopdecCommon.startsWithValueUpper(othacc, "-OSA-NRA-FTN-FTF-"))) {
                return WarningResult.build(subid, "第70条核查:对公申报主体的“购汇账号”或“现汇账号”或“其他账号”中以“OSA”或“NRA”或“FTN”或“FTF”字样开头，但交易编码不为“822030境外存入款项/调出”，剔除行业属性为“2096国际组织”、行业属性为“2099使领馆”且经济类型为“400境外机构”、申报主体为“QFII”机构或“RQFII”机构。");
            }
            //79 “是否保税货物项下收入/付款”选“是”，但交易编码不是以“1货物贸易”开头。//交易2不判断
            if (bopdecCommon.indexGt(isref, "-Y-") && !MdaUtils.isEmpty(txcode) && (!txcode.startsWith("1") && !"221000".equals(txcode))) {
                return WarningResult.build(subid, "第79条核查:“是否保税货物项下收入/付款”选“是”，但交易编码不是以“1货物贸易”开头或不是“221000来料加工工缴费收入/出料加工工缴费支出”。");
            }
            //87 收入类型不为空，但交易编码不是以“1货物贸易”开头或不是“221000来料加工工缴费收入/822020获得境外贷款/822030境外存入款项
            if (!MdaUtils.isEmpty(payattr) && (!MdaUtils.isEmpty(txcode) && (!txcode.startsWith("1") && !bopdecCommon.indexGt(txcode, "-822020-822030-221000-")))) {
                return WarningResult.build(subid, "第87条核查:收入类型不为空，但交易编码不是以“1货物贸易”开头或不是“221000来料加工工缴费收入/822020获得境外贷款/822030境外存入款项");
            }
            //93 （1）交易编码1、2均为进出口核查项下（以“1货物贸易”开头或“221000来料加工工缴费收入/出料加工工缴费支出”）或都不为进出口核查项下，“交易金额1”小于“交易金额2”，剔除交易附言2包含 “其中”、“含”、数字{0-9}的数据。
            if ((((txcode.startsWith("1") || bopdecCommon.indexGt(txcode, "-221000-")) && (txcode2.startsWith("1") || bopdecCommon.indexGt(txcode2, "-221000-"))) || ((!txcode.startsWith("1") && !bopdecCommon.indexGt(txcode, "-221000-")) && (!txcode2.startsWith("1") && !bopdecCommon.indexGt(txcode2, "-221000-")))) && tc1amt.compareTo(tc2amt) < 0 && !bopdecCommon.containsValue(tx2rem, "-其中-含-0-1-2-3-4-5-6-7-8-9-")) {
                return WarningResult.build(subid, "第93条核查:交易编码1、2均为进出口核查项下（以“1货物贸易”开头或“221000来料加工工缴费收入/出料加工工缴费支出”）或都不为进出口核查项下，“交易金额1”小于“交易金额2”，剔除交易附言2包含 “其中”、“含”、数字0-9的数据");
            }
            //95 交易附言与交易编码名称完全一致。交易编码1和交易编码2都需要校验。剔除交易编码为“221000来料加工工缴费收入/出料加工工缴费支出”、“622012筹备资金汇入/撤出”。
            if (!MdaUtils.isEmpty(txrem)) {
                String codtxtStr = "";
                //根据交易编码获取交易名称
                String iotype = this.getIoType(inifrm);
                List<Bopcod> bopcodList = bopcodMapper.selectByCod(txcode,iotype);
                if(bopcodList.size() > 0){
                    codtxtStr = bopcodList.get(0).getTxt();
                }
//                if (!MdaUtils.isEmpty(bopcod)) {
//                    codtxtStr = bopcod.getTxt();
//                }
                String txtStr = txrem.trim();
                if (txtStr.equals(codtxtStr) && !bopdecCommon.indexGt(txcode, "-221000-621011-622012-")) {
                    return WarningResult.build(subid, "第95条核查:交易附言与交易编码名称完全一致。交易编码1和交易编码2都需要校验。剔除交易编码为“221000来料加工工缴费收入/出料加工工缴费支出”、“621011因境外子公司清算、终止等撤资/新设境外子公司资本金汇出”、“622012筹备资金汇入/撤出”");
                }
            }
            //242 交易编码以7开头：申报主体为“中国证券登记结算有限责任公司上海分公司”或“中国证券登记结算有限责任公司深圳分公司”，交易附言不包含“港股通”、“沪股通”或“深股通”字样，剔除交易附言含有“B股”或“备用金”字样的数据。
            if (txcode.startsWith("7") && !bopdecCommon.containsValue(txrem, "-港股通-沪股通-深股通-B股-备用金-") && (bopdecCommon.indexGt(custnm, "-中国证券登记结算有限责任公司上海分公司-") || bopdecCommon.indexGt(custnm, "-中国证券登记结算有限责任公司深圳分公司-"))) {
                return WarningResult.build(subid, "第242条核查:交易编码以7开头：申报主体为“中国证券登记结算有限责任公司上海分公司”或“中国证券登记结算有限责任公司深圳分公司”，交易附言不包含“港股通”、“沪股通”或“深股通”字样，剔除交易附言含有“B股”或“备用金”字样的数据。");
            }
            //243 交易编码为“999998实际资金收付轧差结算”，但交易对方国别不为“中国”。
            //if(Platform.indexGt($txcode,"-999998-") && !$\\sysmod.getTransOthCountry((String)oppuser.getValue()).equals("CHN"))
            if (bopdecCommon.indexGt(txcode, "-999998-") && !"CHN".equals(country)) {
                return WarningResult.build(subid, "第243条核查:交易编码为“999998实际资金收付轧差结算”，但交易对方国别不为“中国”");
            }

        }
        //40交易对方常驻国家（地区）代码为“CHN（中国）”，交易编码为“999998-无实际资金收付的轧差结算”数据不校验。
        String othcty = "";
        if (!MdaUtils.isEmpty(custcod)) {
            othcty = dbuMapper.getTransOthCountry(custcod);
            if(MdaUtils.isEmpty(othcty)){
                othcty = "";
            }
        }
        if ("-CHN-".indexOf(othcty) > 0 && !bopdecCommon.indexGt(txcode, "-999998-")) {
            return WarningResult.buildEmpty(subid);
        }
        //50 交易对方名称以“(JN)”字样开头，但交易编码为“822030境外存入款项／调出”。
        if (oppuser.startsWith("(JN)") && bopdecCommon.indexGt(txcode, "-822030-")) {
            return WarningResult.buildEmpty(subid);
        }
        //65（1）申报金额为“0”，但交易编码不为“999998无实际资金收付的轧差结算”。

        if (txamtB.compareTo(zero) == 0 && bopdecCommon.indexLe(txcode, "-999998-")) {
            return WarningResult.buildEmpty(subid);
        }
        //66（2）申报金额不为“0”，但交易编码为“999998无实际资金收付的轧差结算”。
        if (txamtB.compareTo(zero) != 0 && bopdecCommon.indexGt(txcode, "-999998-")) {
            return WarningResult.buildEmpty(subid);
        }
        //73 （3）申报主体类型为“对私非居民”，交易编码不为“822030境外存入款项／调出”剔除交易编码为“232000别处未涵盖的政府货物和服务”的数据。
        if (bopdecCommon.indexGt(custype, "-F-") && bopdecCommon.indexLe(txcode, "-232000-") && bopdecCommon.indexLe(txcode, "-822030-")) {
            return WarningResult.buildEmpty(subid);
        }
        //88 收/付款类型为“货到付款”，但交易编码不是以“1货物贸易”开头或不是“221000来料加工工缴费收入/出料加工工缴费支出”。剔除交易编码为“822030”的数据
        // A 预收款   P 货到付款
        if (bopdecCommon.indexGt(paytype, "-P-") && !MdaUtils.isEmpty(txcode) && !txcode.startsWith("1") && !bopdecCommon.indexGt(txcode, "-221000-") && !bopdecCommon.indexGt(txcode, "-822030-")) {
            return WarningResult.buildEmpty(subid);
        }
        //89 收/付款类型为“预收款”或“预付款”，但交易编码不是以1或2开头。剔除交易编码为“822030”的数据
        // A 预收款   P 货到付款
        if (bopdecCommon.indexGt(paytype, "-A-") && !MdaUtils.isEmpty(txcode) && !bopdecCommon.startsWithValue(txcode, "-1-2-") && !bopdecCommon.indexGt(txcode, "-822030-")) {
            return WarningResult.buildEmpty(subid);
        }
        //不需要，系统无单位基本情况表数据
        //89 （1）对公申报数据，交易编码以“1货物贸易”开头，行业属性为“1066（货币金融服务）”、“1067（资本市场服务）”、“1069（其他金融业）”、“1990（中国共产党机关）”、“1991（国家机构）”、“1992（人民政协、民主党派）”、“1993（社会保障）”、“1994（群众团体、社会团体和其他成员组织）”、“2096（国际组织）”或“2099（使领馆）”。剔除银行黄金进出口数据（条件：行业属性为“1066货币金融服务且交易编码为“121040非货币黄金进出口”剔除申报主体为“上海国际黄金交易中心有限公司”  且交易编码为“121040非货币黄金进出口”
//        if(bopdecCommon.indexGt(custype,"-C-") && bopdecCommon.indexGt(txcode,"-1-")  && "-1066-1067-1069-1990-1991-1992-1993-1994-2096-2099-".indexOf(ctx.absGet(Sysmod.class).getIndustryCode((String)custcod.getValue()))>0  && (!( "-1066-".indexOf(ctx.absGet(Sysmod.class).getIndustryCode((String)custcod.getValue()))>0 && bopdecCommon.indexGt(txcode,"-121040-"))  ||  !(bopdecCommon.containsValue(custnm,"-上海国际黄金交易中心有限公司-") && bopdecCommon.indexGt(txcode,"-121040-")))) {
//            return ValidResult.build(false, "对公申报数据，交易编码以“1货物贸易”开头，行业属性为“1066（货币金融服务）”、“1067（资本市场服务）”、“1990（中国共产党机关）”、“1991（国家机构）”、“1992（人民政协、民主党派）”、“1993（社会保障）”、“1994（群众团体、社会团体和其他成员组织）”、“2096（国际组织）”或“2099（使领馆）”。剔除银行黄金进出口数据（行业属性为“1066货币金融服务”且交易编码为“121040非货币黄金进出口”）。剔除申报主体为“上海国际黄金交易中心有限公司”  且交易编码为“121040非货币黄金进出口”。");
//        }
        //不需要，系统无单位基本情况表数据
        //92（2）交易编码为“322011/322012/322021/322022/622011/622013/622015/622021/622022”,经济类型代码不以“2港澳台投资”或“3国外投资”开头。剔除申报主体组织机构代码为“551686504中海石油深海开发有限公司”和“559145905珠港澳大桥管理局”的数据。
        // $attrcode.setValue($\\sysmod.getAttrCode((String)custcod.getValue()));
//        if( bopdecCommon.indexGt(txcode,"-322011-322012-322021-322022-622011-622013-622015-622021-622022-") && bopdecCommon.startsWithValue(this.getAttrcode(),"-2-3-") && (bopdecCommon.indexLe(custcod,"-551686504-559145905-") ||  bopdecCommon.containsValue(txrem,"-资金池-"))) {
//            return ValidResult.build(false, "4.11.1.2项：交易编码为“322011/322012/322021/322022/622011/622013/622015/622021/622022”,经济类型代码不以“2港澳台投资”或“3国外投资”开头。剔除收入方向，交易编码为322011、322021的数据；支出方向，交易编码为322012、322022的数据。剔除申报主体为“中海石油深海开发有限公司”、“中国石油化工股份有限公司胜利油田分公司油气销售中心”和“珠港澳大桥管理局”的数据。剔除交易附言含“资金池”字样数据。");
//        }
        //94 （2）交易编码1不为进出口核查项下（以“1货物贸易”开头或“221000来料加工工缴费收入/出料加工工缴费支出”），交易编码2为进出口核查项下的数据。
        //log.info("txcode value is: " + $txcode.getValue() + "tx2code value is: " + $txcode2.getValue());
        if ((!txcode.startsWith("1") && !bopdecCommon.indexGt(txcode, "-221000-")) && (txcode2.startsWith("1") || bopdecCommon.indexGt(txcode2, "-221000-"))) {
            return WarningResult.buildEmpty(subid);
        }
        return WarningResult.buildEmpty(subid);
    }

    private String getIoType(String inifrm) {
        inifrm = inifrm.toLowerCase();
        String ioType = "O";
        if("dba".equals(inifrm) || "dbd".equals(inifrm)){
            ioType = "I";
        }
        return ioType;
    }

    public ValidResult checkTx2rem(CheckItems checkItems){
        String custnm = checkItems.getCustnm();
        String oppuser = checkItems.getOppuser();
        String custype = checkItems.getCustype();
        String txcode2 = checkItems.getTxcode2();
        String tx2rem = checkItems.getTx2rem();
        String txrem = checkItems.getTxrem();
        String zbxmszh = checkItems.getZbxmszh();
        String paytype = checkItems.getPaytype();
        String transName = checkItems.getTransName().toLowerCase();
//            String inifrm = Strings.mid(transName, 1, 3);
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
        String dir = "O";

        if (!MdaUtils.isEmpty(txcode2) && MdaUtils.isEmpty(tx2rem)) {
            return ValidResult.build(false, "此字段为必输项！");
        }
        if (MdaUtils.isEmpty(tx2rem)) {
            //交易附言2为空不走后续检核
            return null;
        }

        if (!MdaUtils.isEmpty(tx2rem) && tx2rem.equals(txrem)) {
            return ValidResult.build(false, "交易附言2不能与交易附言1相同!");
        }
        //判断字节数
        int len = 0;
        if (!MdaUtils.isEmpty(tx2rem)) {
            String str = tx2rem;
            byte[] buff = null;
            try {
                buff = str.getBytes("GB18030");
            } catch (Exception e) {
                return ValidResult.build(false, "getBytes fail...");
            }
            len = buff.length;
            if (len > 256) {
                return ValidResult.build(false, "字段长度检查，不能超过 256字符");
            }
        }
        //非查询交易才校验
        //只提供提示，不控制死
//        if (!transName.endsWith("sel")) {
//            //38（1）涉外收入但交易附言包含“支出”、“支付”、“付汇”、“付款”、“进口”字样。剔除收付款类型为“退款”或交易附言含“运费、佣金、运输费”字样数据。
//            //if (inifrm.startsWith("dba")   && Platform.containsValue($tx2rem,"-支出-支付-付汇-付款-进口-") && Platform.indexLe($paytype,"-R-") && !Platform.containsValue($tx2rem,"-运费-佣金-运输费-"))
//            if (inifrm.startsWith("dba") && bopdecCommon.indexLe(paytype, "-R-") && (((txcode2.startsWith("1") || txcode2.startsWith("221")) && bopdecCommon.containsValue(tx2rem, "-进口-延期付款利息-货到付款-")) || bopdecCommon.containsValue(tx2rem, "-支出-付汇-付款-汇出-付出-撤出-预付-"))) {
//                return ValidResult.build(false, "核查第38条:涉外收入但交易附言包含“支出”、“付汇”、“付款”、“汇出”、“付出”、“撤出”、“预付”字样；或涉外收入交易编码以1开头和以221开头但交易附言包含“进口”、“延期付款利息”、“货到付款”字样。剔除收付款类型为“退款”数据。");
//            }
//            //39（2）对外支付但交易附言包含“收入”、“收到”、“收汇”、“收款”、“出口”字样。剔除收付款类型为“退款”或交易附言含“运费、佣金、运输费、出口加工区”字样数据。
//            //    if ("-dbb-dbc-".indexOf(inifrm)>0 && Platform.containsValue($tx2rem,"-收入-收到-收汇-收款-出口-") && Platform.indexLe($paytype,"-R-") && !Platform.containsValue($tx2rem,"-运费-佣金-出口加工区-")   )
//            if ("-dbb-dbc-".indexOf(inifrm) > 0 && bopdecCommon.indexLe(paytype, "-R-") && !bopdecCommon.containsValue(tx2rem, "-出口加工区-接收机-接收器-接收盒-收款机-") && (bopdecCommon.containsValue(tx2rem, "-收入-收到-收汇-收款-接收-接受-汇入-调回-汇回-收回-") || ((txcode2.startsWith("1") || txcode2.startsWith("221")) && bopdecCommon.containsValue(tx2rem, "-出口-")))) {
//                return ValidResult.build(false, "核查第39条:涉外支出但交易附言包含“收入”、“收到”、“收汇”、“收款”、“接收”、“接受”、“汇入”、“调回”、“汇回”、“收回”字样；或涉外支出交易编码以1开头和以221开头但交易附言包含“出口”字样。剔除收付款类型为“退款”或交易附言含“出口加工区”、“接收机”、“接收器”、“接收盒”、“收款机”字样数据。");
//            }
//            //55  交易对方名称标注以“（JW）”字样开头，但交易附言包含“OSA”或“NRA”或“境内非居民”或“FTN”或“FTF”字样。
//            if (oppuser.startsWith("(JW)") && bopdecCommon.containsValueUpper(tx2rem, "-OSA-NRA-境内非居民-FTN-FTF-")) {
//                return ValidResult.build(false, "第55条核查:交易对方名称以“(JW)”开头，交易附言不能包含“OSA”或“NRA”或“境内非居民”或“FTN”或“FTF”字样");
//            }
//            //99 交易编码为“121010一般贸易”，但交易附言包含“进料/来料/黄金/边贸/离岸/贷款/加工费/特殊/保税区/无需报关/未报关/软件开发/广告费/本金/服务(非“服务器”）/网上/报酬/留学/生活费/学费/境内交易”。
//            if (bopdecCommon.indexGt(txcode2, "-121010-") && (bopdecCommon.containsValue(tx2rem, "-进料-来料-黄金-边贸-离岸-贷款-加工费-特殊-保税区-无需报关-未报关-软件开发-广告费-本金-网上-报酬-留学-生活费-学费-境内交易-市场采购贸易-") || (!tx2rem.contains("服务器") && tx2rem.contains("服务"))) && !bopdecCommon.containsValue(tx2rem, "-特殊流体-特殊监管-特殊退汇-")) {
//                return ValidResult.build(false, "第99条核查:交易编码为“121010一般贸易”，但交易附言包含“进料/来料/黄金/边贸/离岸/贷款/加工费/特殊/保税区/无需报关/未报关/软件开发/广告费/本金/服务(非“服务器”）/网上/报酬/留学/生活费/学费/境内交易/市场采购贸易”。剔除交易附言含“特殊流体”、“特殊监管”、“特殊退汇”字样。");
//            }
//            //100 交易编码为“121020进料加工贸易”，但交易附言不包含“进料”或包含“一般贸易/来料/黄金/进口加工/电子商务”。
//            if (bopdecCommon.indexGt(txcode2, "-121020-") && (bopdecCommon.containsValue(tx2rem, "-一般贸易-来料-黄金-进口加工-电子商务-市场采购贸易-") || !tx2rem.contains("进料"))) {
//                return ValidResult.build(false, "第100条核查:交易编码为“121020进料加工贸易”，但交易附言不包含“进料”或包含“一般贸易/来料/黄金/进口加工/电子商务/市场采购贸易”");
//            }
//            //101 交易编码为“121030海关特殊监管区域及保税监管场所进出境物流货物”，但交易附言包含“进料/来料/离岸/黄金/一般贸易”。
//            if (bopdecCommon.indexGt(txcode2, "-121030-") && bopdecCommon.containsValue(tx2rem, "-进料-来料-离岸-黄金-一般贸易-市场采购贸易-")) {
//                return ValidResult.build(false, "第101条核查:交易编码为“121030海关特殊监管区域及保税监管场所进出境物流货物”，但交易附言包含“进料/来料/离岸/黄金/一般贸易/市场采购贸易”");
//            }
//            //102 交易编码为“121080边境小额贸易”，但交易附言包含“台/边民互市/黄金/一般贸易/易货（非贸易货）”。
//            if (bopdecCommon.indexGt(txcode2, "-121080-") && (bopdecCommon.containsValue(tx2rem, "-台-边民互市-黄金-一般贸易-市场采购贸易-") || (tx2rem.contains("易货") && !tx2rem.contains("贸易货")))) {
//                return ValidResult.build(false, "第102条核查:交易编码为“121080边境小额贸易”，但交易附言包含“台/边民互市/黄金/一般贸易/易货（非贸易货）/市场采购贸易”。");
//            }
//            //103 交易编码为“121090对外承包工程货物出口”，但交易附言不包含“承包工程”或包含“黄金/一般贸易/边境/小额/维修/维护/服务/劳务”。
//            if (bopdecCommon.indexGt(txcode2, "-121090-") && (!bopdecCommon.containsValue(tx2rem, "-承包工程-") || bopdecCommon.containsValue(tx2rem, "-黄金-一般贸易-边境-小额-维修-维护-服务-劳务-市场采购贸易-"))) {
//                return ValidResult.build(false, "第103条核查:交易编码为“121090对外承包工程货物出口”，但交易附言不包含“承包工程”或包含“黄金/一般贸易/边境/小额/维修/维护/服务/劳务/市场采购贸易”。");
//            }
//            //104 交易编码为“121990其他纳入海关统计的货物贸易”，但包含“未纳入/不纳入/没纳入/一般贸易/来料/进料/黄金/边境小额/不报关/不出境/未报关/无需报关/无须报关”。
//            if (bopdecCommon.indexGt(txcode2, "-121990-") && bopdecCommon.containsValue(tx2rem, "-未纳入-不纳入-没纳入-一般贸易-来料-进料-黄金-边境小额-不报关-不出境-未报关-无需报关-无须报关-")) {
//                return ValidResult.build(false, "第104条核查:交易编码为“121990其他纳入海关统计的货物贸易”，但包含“未纳入/不纳入/没纳入/一般贸易/来料/进料/黄金/边境小额/不报关/不出境/未报关/无需报关/无须报关”");
//            }
//            //105 交易编码为“122010离岸转手买卖”，但交易附言不包含“离岸”或包含“一般贸易/来料/进料/转口/在岸/特殊/保税区”。
//            if (bopdecCommon.indexGt(txcode2, "-122010-") && (bopdecCommon.containsValue(tx2rem, "-一般贸易-来料-进料-转口-在岸-特殊-保税区-") || !bopdecCommon.containsValue(tx2rem, "-离岸-")) && !bopdecCommon.containsValue(tx2rem, "-特殊流体-特殊监管-特殊退汇-")) {
//                return ValidResult.build(false, "第105条核查:交易编码为“122010离岸转手买卖”，但交易附言不包含“离岸”或包含“一般贸易/来料/进料/转口/在岸/特殊/保税区”。剔除交易附言含“特殊流体”、“特殊监管”、“特殊退汇”字样。");
//            }
//            //106 交易编码为“122020未纳入海关统计的非货币黄金”，但交易附言不包含“金”或包含“金属/金币/珠宝/手表/饰/一般贸易”。
//            if (bopdecCommon.indexGt(txcode2, "-122020-") && (bopdecCommon.containsValue(tx2rem, "-金属-金币-珠宝-手表-饰-一般贸易-") || !tx2rem.contains("金"))) {
//                return ValidResult.build(false, "第106条核查:交易编码为“122020未纳入海关统计的非货币黄金”，但交易附言不包含“金”或包含“金属/金币/珠宝/手表/饰/一般贸易”。");
//            }
//            //107 交易编码为“122030未纳入海关统计的网络购物”，但交易附言包含“黄金/来料/进料/一般贸易/软件/音像/游戏币”。
//            if (bopdecCommon.indexGt(txcode2, "-122030-") && bopdecCommon.containsValue(tx2rem, "-黄金-来料-进料-一般贸易-软件-音像-游戏币-")) {
//                return ValidResult.build(false, "第107条核查:交易编码为“122030未纳入海关统计的网络购物”，但交易附言包含“黄金/来料/进料/一般贸易/软件/音像/游戏币”");
//            }
//            //108 交易编码为“122990其他未纳入海关统计的货物贸易”，但交易附言包含“网/海淘/黄金/一般贸易/来料/进料/电子商务/虚拟/软件/边境小额/旅游购物”。
//            if (bopdecCommon.indexGt(txcode2, "-122990-") && bopdecCommon.containsValue(tx2rem, "-网购-网络-海淘-黄金-一般贸易-来料-进料-电子商务-虚拟-软件-边境小额-旅游购物-市场采购贸易-已报关-")) {
//                return ValidResult.build(false, "第108条核查:交易编码为“122990其他未纳入海关统计的货物贸易”，但交易附言包含“网购/网络/海淘/黄金/一般贸易/来料/进料/电子商务/虚拟/软件/边境小额/旅游购物/市场采购贸易/已报关”。");
//            }
//            //109 交易编码为“221000来料加工工缴费收入/出料加工工缴费支出”，但交易附言不包含“来料/工缴费/加工费/出料/带料”字样或包含“一般贸易/进料/货款”。
//            if (bopdecCommon.indexGt(txcode2, "-221000-") && (!bopdecCommon.containsValue(tx2rem, "-来料-工缴费-加工费-出料-带料-") || bopdecCommon.containsValue(tx2rem, "-一般贸易-进料-货款-"))) {
//                return ValidResult.build(false, "第109条核查:交易编码为“221000来料加工工缴费收入/出料加工工缴费支出”，但交易附言不包含“来料/工缴费/加工费/出料/带料”字样或包含“一般贸易/进料/货款”");
//            }
//            //110 交易编码为“222011涉及我国出口的海洋货运服务”，但交易附言包含“进口/空运/陆运/佣金/货款/代理/客运/租（但不包含‘人员’）/速遣费/滞期费”。
//            if (bopdecCommon.indexGt(txcode2, "-222011-") && (bopdecCommon.containsValue(tx2rem, "-进口-空运-陆运-佣金-货款-代理-客运-速遣费-滞期费-") || (!bopdecCommon.containsValue(tx2rem, "-人员-") && bopdecCommon.containsValue(tx2rem, "-租-")))) {
//                return ValidResult.build(false, "第110条核查:交易编码为“222011涉及我国出口的海洋货运服务”，但交易附言包含“进口/空运/陆运/佣金/货款/代理/客运/租（但不包含‘人员’）/速遣费/滞期费”");
//            }
//            //111 交易编码为“222012涉及我国进口的海洋货运服务”，但交易附言包含“出口/空运/陆运/佣金/货款/代理/客运/租（但不包含‘人员’）/速遣费/滞期费”。
//            if (bopdecCommon.indexGt(txcode2, "-222012-") && (bopdecCommon.containsValue(tx2rem, "-出口-空运-陆运-佣金-货款-代理-客运-速遣费-滞期费-") || (!bopdecCommon.containsValue(tx2rem, "-人员-") && bopdecCommon.containsValue(tx2rem, "-租-")))) {
//                return ValidResult.build(false, "第111条核查:交易编码为“222012涉及我国进口的海洋货运服务”，但交易附言包含“出口/空运/陆运/佣金/货款/代理/客运/租（但不包含‘人员’）/速遣费/滞期费”");
//            }
//            //112 交易编码为“222013不涉及我国进出口的海洋货运服务”，但交易附言包含“空运/陆运/港口/仓储/装卸/搬运/引航/牵引/导航/检/修/使%费/客运”。
//            //由于%不确定暂时先注释
//            //    if (Platform.indexGt($txcode2,"-222013-")  && Platform.containsValue($tx2rem,"-空运-陆运-港口-仓储-装卸-搬运-引航-牵引-导航-检-修-使%费-客运-"))
//            if (bopdecCommon.indexGt(txcode2, "-222013-") && (bopdecCommon.containsValue(tx2rem, "-空运-陆运-港口-仓储-装卸-搬运-引航-牵引-导航-检-修-客运-") || bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(tx2rem, "使", "费")))) {
//                return ValidResult.build(false, "第112条核查:交易编码为“222013不涉及我国进出口的海洋货运服务”，但交易附言包含“空运/陆运/港口/仓储/装卸/搬运/引航/牵引/导航/检/修/使%费/客运”");
//            }
//            //113 交易编码为“222014海运客运”，但交易附言包含“空运/陆运/出口/进口”。
//            if (bopdecCommon.indexGt(txcode2, "-222014-") && bopdecCommon.containsValue(tx2rem, "-空运-陆运-出口-进口-")) {
//                return ValidResult.build(false, "第113条核查:交易编码为“222014海运客运”，但交易附言包含“空运/陆运/出口/进口”");
//            }
//            //114 交易编码为“222019其他海运服务”，但交易附言包含“其他/空运/陆运/速遣/清关/入渔/滞/运费/保险/修”。
//            if (bopdecCommon.indexGt(txcode2, "-222019-") && bopdecCommon.containsValue(tx2rem, "-空运-陆运-速遣-清关-入渔-滞-运费-保险-修-")) {
//                return ValidResult.build(false, "第114条核查:交易编码为“222019其他海运服务”，但交易附言包含“空运/陆运/速遣/清关/入渔/滞/运费/保险/修”");
//            }
//            //115 交易编码为“222021涉及我国出口的空中货运服务”，但交易附言包含“进口/海运/陆运/佣金/货款/代理/客运/租”。
//            if (bopdecCommon.indexGt(txcode2, "-222021-") && bopdecCommon.containsValue(tx2rem, "-进口-海运-陆运-佣金-货款-代理-客运-租-")) {
//                return ValidResult.build(false, "第115条核查:交易编码为“222021涉及我国出口的空中货运服务”，但交易附言包含“进口/海运/陆运/佣金/货款/代理/客运/租”");
//            }
//            //116 交易编码为“222022涉及我国进口的空中货运服务”，但交易附言包含“出口/海运/陆运/佣金/货款/代理/客运/租”。
//            if (bopdecCommon.indexGt(txcode2, "-222022-") && bopdecCommon.containsValue(tx2rem, "-出口-海运-陆运-佣金-货款-代理-客运-租-")) {
//                return ValidResult.build(false, "第116条核查:交易编码为“222022涉及我国进口的空中货运服务”，但交易附言包含“出口/海运/陆运/佣金/货款/代理/客运/租”");
//            }
//            //117交易编码为“222023不涉及我国进出口的空中货运服务”，但交易附言包含“海运/陆运/港口/仓储/装卸/搬运/引航/牵引/导航/检/修/使%费/客运”。
//            //由于%不确定暂时先注释
//            // if (Platform.indexGt($txcode2,"-222023-")  && Platform.containsValue($tx2rem,"-海运-陆运-港口-仓储-装卸-搬运-引航-牵引-导航-检-修-使%费-客运-"))
//            if (bopdecCommon.indexGt(txcode2, "-222023-") && (bopdecCommon.containsValue(tx2rem, "-海运-陆运-港口-仓储-装卸-搬运-引航-牵引-导航-检-修-客运-") || bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(tx2rem, "使", "费")))) {
//                return ValidResult.build(false, "第117条核查:交易编码为“222023不涉及我国进出口的空中货运服务”，但交易附言包含“海运/陆运/港口/仓储/装卸/搬运/引航/牵引/导航/检/修/使%费/客运”");
//            }
//            //118交易编码为“222024空运客运”，但交易附言包含“海运/陆运/出口/进口”。
//            if (bopdecCommon.indexGt(txcode2, "-222024-") && bopdecCommon.containsValue(tx2rem, "-海运-陆运-出口-进口-")) {
//                return ValidResult.build(false, "第118条核查:交易编码为“222024空运客运”，但交易附言包含“海运/陆运/出口/进口”");
//            }
//            //119交易编码为“222029其他空运服务”，但交易附言包含“海运/陆运/速遣/清关/滞/运费/保险/修”。
//            if (bopdecCommon.indexGt(txcode2, "-222029-") && bopdecCommon.containsValue(tx2rem, "-海运-陆运-速遣-清关-滞-运费-保险-修-")) {
//                return ValidResult.build(false, "第119条核查:交易编码为“222029其他空运服务”，但交易附言包含“海运/陆运/速遣/清关/滞/运费/保险/修”");
//            }
//            //120交易编码为“222031涉及我国出口的其他运输方式货运服务”，但交易附言包含“进口/海运/空运/佣金/货款/代理/客运/租”。
//            if (bopdecCommon.indexGt(txcode2, "-222031-") && bopdecCommon.containsValue(tx2rem, "-进口-海运-空运-佣金-货款-代理-客运-租-")) {
//                return ValidResult.build(false, "第120条核查:交易编码为“222031涉及我国出口的其他运输方式货运服务”，但交易附言包含“进口/海运/空运/佣金/货款/代理/客运/租”");
//            }
//            //121交易编码为“222032涉及我国进口的其他运输方式货运服务”，但交易附言包含“出口/海运/空运/佣金/货款/代理/客运/租”。
//            if (bopdecCommon.indexGt(txcode2, "-222032-") && bopdecCommon.containsValue(tx2rem, "-出口-海运-空运-佣金-货款-代理-客运-租-")) {
//                return ValidResult.build(false, "第121条核查:交易编码为“222032涉及我国进口的其他运输方式货运服务”，但交易附言包含“出口/海运/空运/佣金/货款/代理/客运/租”");
//            }
//            //122交易编码为“222033不涉及我国进出口的其他运输方式货运服务”，但交易附言包含“海运/空运/港口/仓储/装卸/搬运/引航/牵引/导航/检/修/使%费/客运”。
//            //由于%不确定暂时先注释
//            //if (Platform.indexGt($txcode2,"-222033-")  && Platform.containsValue($tx2rem,"-海运-空运-港口-仓储-装卸-搬运-引航-牵引-导航-检-修-使%费-客运-"))
//            if (bopdecCommon.indexGt(txcode2, "-222033-") && (bopdecCommon.containsValue(tx2rem, "-海运-空运-港口-仓储-装卸-搬运-引航-牵引-导航-检-修-客运-") || bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(tx2rem, "使", "费")))) {
//                return ValidResult.build(false, "第122条核查:交易编码为“222033不涉及我国进出口的其他运输方式货运服务”，但交易附言包含“海运/空运/港口/仓储/装卸/搬运/引航/牵引/导航/检/修/使%费/客运”");
//            }
//            //123交易编码为“222034其他运输方式客运”，但交易附言包含“海运/空运/出口/进口”。
//            if (bopdecCommon.indexGt(txcode2, "-222034-") && bopdecCommon.containsValue(tx2rem, "-海运-空运-出口-进口-")) {
//                return ValidResult.build(false, "第123条核查:交易编码为“222034其他运输方式客运”，但交易附言包含“海运/空运/出口/进口”");
//            }
//            //124交易编码为“222039其他运输方式的其他服务”，但交易附言包含“空运/海运/速遣/入渔/滞/运费/保险/快递/修”。
//            if (bopdecCommon.indexGt(txcode2, "-222039-") && bopdecCommon.containsValue(tx2rem, "-空运-海运-速遣-入渔-滞-运费-保险-快递-修-")) {
//                return ValidResult.build(false, "第124条核查:交易编码为“222039其他运输方式的其他服务”，但交易附言包含“空运/海运/速遣/入渔/滞/运费/保险/快递/修”");
//            }
//            //125交易编码为“222040邮政及寄递服务”，但交易附言包含“电信/电子/通讯/通信”。
//            if (bopdecCommon.indexGt(txcode2, "-222040-") && bopdecCommon.containsValue(tx2rem, "-电信-电子-通讯-通信-")) {
//                return ValidResult.build(false, "第125条核查:交易编码为“222040邮政及寄递服务”，但交易附言包含“电信/电子/通讯/通信”");
//            }
//            //126交易编码为“223010公务及商务旅行”，但交易附言包含“私/留学/学习/学费/培训”。
//            if (bopdecCommon.indexGt(txcode2, "-223010-") && bopdecCommon.containsValue(tx2rem, "-私-留学-学习-学费-培训-个人-")) {
//                return ValidResult.build(false, "第126条核查:交易编码为“223010公务及商务旅行”，但交易附言包含“私/留学/学习/学费/培训/个人”");
//            }
//            //127交易编码为“223021就医及健康相关旅行”，但交易附言包含“药品/器械/远程/网络/兽医/咨询/球会”。
//            if (bopdecCommon.indexGt(txcode2, "-223021-") && bopdecCommon.containsValue(tx2rem, "-药品-器械-远程-网络-兽医-咨询-球会-")) {
//                return ValidResult.build(false, "第127条核查:交易编码为“223021就医及健康相关旅行”，但交易附言包含“药品/器械/远程/网络/兽医/咨询/球会”");
//            }
//            //128交易编码为“223022留学及教育相关旅行（一年以上）”，但交易附言包含“探亲/旅游/远程/签证/中介/以下/以内/年内”。
//            if (bopdecCommon.indexGt(txcode2, "-223022-") && bopdecCommon.containsValue(tx2rem, "-探亲-旅游-远程-签证-中介-以下-以内-年内-")) {
//                return ValidResult.build(false, "第128条核查:交易编码为“223022留学及教育相关旅行（一年以上）”，但交易附言包含“探亲/旅游/远程/签证/中介/以下/以内/年内”");
//            }
//            //129交易编码为“223023留学及教育相关旅行（一年及一年以下）”，但交易附言包含“探亲/旅游/远程/签证/一年以上/1年以上/中介”。
//            if (bopdecCommon.indexGt(txcode2, "-223023-") && bopdecCommon.containsValue(tx2rem, "-探亲-旅游-远程-签证-一年以上-1年以上-中介-")) {
//                return ValidResult.build(false, "第129条核查:交易编码为“223023留学及教育相关旅行（一年及一年以下）”，但交易附言包含“探亲/旅游/远程/签证/一年以上/1年以上/中介”");
//            }
//            //130交易编码为“223029其他私人旅行”，但交易附言包含“教育/培训/公务/因公/商务/考察/会议/学/差旅/出差/会务”。
//            if (bopdecCommon.indexGt(txcode2, "-223029-") && bopdecCommon.containsValue(tx2rem, "-教育-培训-公务-因公-商务-考察-会议-学-差旅-出差-会务-")) {
//                return ValidResult.build(false, "第130条核查:交易编码为“223029其他私人旅行”，但交易附言包含“教育/培训/公务/因公/商务/考察/会议/学/差旅/出差/会务”");
//            }
//            //131交易编码为“224010境外建设”，但交易附言包含“设计/咨询/内/技术/投资/采矿/开采”，剔除交易对方名称以“（JN）”字样开头的数据。
//            if (bopdecCommon.indexGt(txcode2, "-224010-") && (bopdecCommon.containsValue(tx2rem, "-设计-咨询-内-技术-投资-采矿-开采-") && !oppuser.startsWith("(JN)"))) {
//                return ValidResult.build(false, "第131条核查:交易编码为“224010境外建设”，但交易附言包含“设计/咨询/内/技术/投资/采矿/开采”，剔除交易对方名称以“（JN）”字样开头的数据");
//            }
//            //132交易编码为“224020境内建设”，但交易附言包含“设计/咨询/外/技术/投资/采矿/开采”。
//            if (bopdecCommon.indexGt(txcode2, "-224020-") && bopdecCommon.containsValue(tx2rem, "-设计-咨询-外-技术-投资-采矿-开采-")) {
//                return ValidResult.build(false, "第132条核查:交易编码为“224020境内建设”，但交易附言包含“设计/咨询/外/技术/投资/采矿/开采”");
//            }
//            //133交易编码为“225010寿险”，但交易附言包含“定期人寿/非返还/平安险/水渍险/一切险/社保/财产/伤害/意外”。
//            if (bopdecCommon.indexGt(txcode2, "-225010-") && bopdecCommon.containsValue(tx2rem, "-定期人寿-非返还-平安险-水渍险-一切险-社保-财产-伤害-意外-")) {
//                return ValidResult.build(false, "第133条核查:交易编码为“225010寿险”，但交易附言包含“定期人寿/非返还/平安险/水渍险/一切险/社保/财产/伤害/意外”");
//            }
//            //134交易编码为“225021为我国出口提供的保险”，但交易附言包含“年金/信用/进口/进出口/社保”。
//            if (bopdecCommon.indexGt(txcode2, "-225021-") && bopdecCommon.containsValue(tx2rem, "-年金-信用-进口-进出口-社保-")) {
//                return ValidResult.build(false, "第134条核查:交易编码为“225021为我国出口提供的保险”，但交易附言包含“年金/信用/进口/进出口/社保”");
//            }
//            //135交易编码为“225022为我国进口提供的保险”，但交易附言包含“年金/信用/出口/进出口/社保”。
//            if (bopdecCommon.indexGt(txcode2, "-225022-") && bopdecCommon.containsValue(tx2rem, "-年金-信用-出口-进出口-社保-")) {
//                return ValidResult.build(false, "第135条核查:交易编码为“225022为我国进口提供的保险”，但交易附言包含“年金/信用/出口/进出口/社保”");
//            }
//            //136交易编码为“225029其他非寿险”，但交易附言包含“养老/年金/平安险/水渍险/再保险/货/社保/理赔/赔偿/赔款/其他”。
//            if (bopdecCommon.indexGt(txcode2, "-225029-") && bopdecCommon.containsValue(tx2rem, "-养老-年金-平安险-水渍险-再保险-货-社保-理赔-赔偿-赔款-其他-") && !bopdecCommon.containsValue(tx2rem, "-其他非寿险-")) {
//                return ValidResult.build(false, "第136条核查:交易编码为“225029其他非寿险”，但交易附言包含“养老/年金/平安险/水渍险/再保险/货/社保/理赔/赔偿/赔款/其他”。剔除交易附言包含“其他非寿险”。");
//            }
//            //137交易编码为“225050保险辅助服务”，但交易附言包含“保费”。
//            if (bopdecCommon.indexGt(txcode2, "-225050-") && bopdecCommon.containsValue(tx2rem, "-保费-")) {
//                return ValidResult.build(false, "第137条核查:交易编码为“225050保险辅助服务”，但交易附言包含“保费”");
//            }
//            //138交易编码为“226000金融服务”，但交易附言包含“认证/利息/保险/退休”。
//            if (bopdecCommon.indexGt(txcode2, "-226000-") && bopdecCommon.containsValue(tx2rem, "-认证-利息-保险-退休-")) {
//                return ValidResult.build(false, "第138条核查:交易编码为“226000金融服务”，但交易附言包含“认证/利息/保险/退休”");
//            }
//            //139交易编码为“227010电信服务”，但交易附言包含“咨询/数据库/数据信息/计算机/安装/信息费/数据费/软件/设备安装/工程”。
//            if (bopdecCommon.indexGt(txcode2, "-227010-") && bopdecCommon.containsValue(tx2rem, "-咨询-数据库-数据信息-计算机-安装-信息费-数据费-软件-设备安装-工程-")) {
//                return ValidResult.build(false, "第139条核查:交易编码为“227010电信服务”，但交易附言包含“咨询/数据库/数据信息/计算机/安装/信息费/数据费/软件/设备安装/工程”");
//            }
//            //140交易编码为“227020计算机服务”，但交易附言包含“进口/出口/报刊/书刊/动画”。
//            if (bopdecCommon.indexGt(txcode2, "-227020-") && bopdecCommon.containsValue(tx2rem, "-进口-出口-报刊-书刊-动画-")) {
//                return ValidResult.build(false, "第140条核查:交易编码为“227020计算机服务”，但交易附言包含“进口/出口/报刊/书刊/动画”");
//            }
//            //141交易编码为“227030信息服务”，但交易附言包含“进口/出口/税/计算机/技术/版面费/电信”。
//            if (bopdecCommon.indexGt(txcode2, "-227030-") && bopdecCommon.containsValue(tx2rem, "-进口-出口-税-计算机-技术-版面费-电信-")) {
//                return ValidResult.build(false, "第141条核查:交易编码为“227030信息服务”，但交易附言包含“进口/出口/税/计算机/技术/版面费/电信”");
//            }
//            //142交易编码为“228010研发成果转让费及委托研发”，但交易附言包含“使用/许可/特许/计算机/软件/视听/音像/检测/维修/修理/实验/检验/检疫/测验/测试/调试/售后/复制/分销/版面费”。
//            if (bopdecCommon.indexGt(txcode2, "-228010-") && bopdecCommon.containsValue(tx2rem, "-使用-许可-特许-计算机-软件-视听-音像-检测-维修-修理-实验-检验-检疫-测验-测试-调试-售后-复制-分销-版面费-")) {
//                return ValidResult.build(false, "第142条核查:交易编码为“228010研发成果转让费及委托研发”，但交易附言包含“使用/许可/特许/计算机/软件/视听/音像/检测/维修/修理/实验/检验/检疫/测验/测试/调试/售后/复制/分销/版面费”");
//            }
//            //143交易编码为“228021法律服务”，但交易附言包含“会计/审计/管理/技术/税务/账/统计/帐/检验/测试/UL/产品认证/质量认证”。
//            if (bopdecCommon.indexGt(txcode2, "-228021-") && bopdecCommon.containsValue(tx2rem, "-会计-审计-管理-技术-税务-账-统计-帐-检验-测试-UL-产品认证-质量认证-")) {
//                return ValidResult.build(false, "第143条核查:交易编码为“228021法律服务”，但交易附言包含“会计/审计/管理/技术/税务/账/统计/帐/检验/测试/UL/产品认证/质量认证”");
//            }
//            //144交易编码为“228022会计服务”，但交易附言包含“签证/佣金/法律/律师/仲裁/辩护/诉讼/受理/官司/监护”。
//            if (bopdecCommon.indexGt(txcode2, "-228022-") && bopdecCommon.containsValue(tx2rem, "-签证-佣金-法律-律师-仲裁-辩护-诉讼-受理-官司-监护-")) {
//                return ValidResult.build(false, "第144条核查:交易编码为“228022会计服务”，但交易附言包含“签证/佣金/法律/律师/仲裁/辩护/诉讼/受理/官司/监护”");
//            }
//            //145交易编码为“228023管理咨询和公共关系服务”，但交易附言包含“技术/佣金/保险/计算机/金融/产品认证/中标服务费/签证/养老金/会计/审计/记账/税务/环保服务/国际会议报名费/UL/公告服务费/版面费”。
//            if (bopdecCommon.indexGt(txcode2, "-228023-") && bopdecCommon.containsValue(tx2rem, "-技术-佣金-保险-计算机-金融-中标服务费-签证-养老金-会计-审计-记账-税务-环保服务-国际会议报名费-UL-公告服务费-版面费-") && !bopdecCommon.containsValue(tx2rem, "-签证代理-签证代办-代理签证-代办签证-")) {
//                return ValidResult.build(false, "第145条核查:交易编码为“228023管理咨询和公共关系服务”，但交易附言包含“技术/佣金/保险/计算机/金融/中标服务费/签证/养老金/会计/审计/记账/税务/环保服务/国际会议报名费/UL/公告服务费/版面费”。剔除交易附言包含“签证代理”、“签证代办”、“代理签证”、“代办签证”字样。");
//            }
//            //146交易编码为“228024广告服务”，但交易附言包含“展/出版”。
//            if (bopdecCommon.indexGt(txcode2, "-228024-") && bopdecCommon.containsValue(tx2rem, "-展-出版-") && !(bopdecCommon.containsValue(tx2rem, "-展-") && bopdecCommon.containsValue(tx2rem, "-广告-"))) {
//                return ValidResult.build(false, "第146条核查:交易编码为“228024广告服务”，但交易附言包含“展/出版”。剔除交易附言既包含“展”又含“广告”字样的数据。");
//            }
//            //147交易编码为“228025展会服务”，但交易附言包含“版面/营销/推广/推销/广告/刊登”。
//            if (bopdecCommon.indexGt(txcode2, "-228025-") && bopdecCommon.containsValue(tx2rem, "-版面-营销-推广-推销-广告-刊登-")) {
//                return ValidResult.build(false, "第147条核查:交易编码为“228025展会服务”，但交易附言包含“版面/营销/推广/推销/广告/刊登”");
//            }
//            //148交易编码为“228026市场调查、民意测验服务”，但交易附言包含“广告/展/推销”。
//            if (bopdecCommon.indexGt(txcode2, "-228026-") && bopdecCommon.containsValue(tx2rem, "-广告-展-推销-")) {
//                return ValidResult.build(false, "第148条核查:交易编码为“228026市场调查、民意测验服务”，但交易附言包含“广告/展/推销”");
//            }
//            //149交易编码为“228031建筑、工程技术服务”，但交易附言包含“废物/污染/测量/产品测试/认证技术检验/产品检验检疫/服装/产品/计算机工程/境外建设/境内建设/石油/天然气/环保服务/采矿/佣金/管理/监理”。
//            if (bopdecCommon.indexGt(txcode2, "-228031-") && bopdecCommon.containsValue(tx2rem, "-废物-污染-测量-产品测试-认证技术检验-产品检验检疫-服装-产品-计算机工程-境外建设-境内建设-石油-天然气-环保服务-采矿-佣金-管理-监理-")) {
//                return ValidResult.build(false, "第149条核查:交易编码为“228031建筑、工程技术服务”，但交易附言包含“废物/污染/测量/产品测试/认证技术检验/产品检验检疫/服装/产品/计算机工程/境外建设/境内建设/石油/天然气/环保服务/采矿/佣金/管理/监理”");
//            }
//            //150交易编码为“228032废物处理和防止污染服务”，但交易附言包含“许可/建筑/工程测量/制图/产品测试/认证/检验/检疫”。
//            if (bopdecCommon.indexGt(txcode2, "-228032-") && bopdecCommon.containsValue(tx2rem, "-许可-建筑-工程测量-制图-产品测试-认证-检验-检疫-")) {
//                return ValidResult.build(false, "第150条核查:交易编码为“228032废物处理和防止污染服务”，但交易附言包含“许可/建筑/工程测量/制图/产品测试/认证/检验/检疫”");
//            }
//            //151交易编码为“228033农业和采矿服务”，但交易附言包含“测量/制图/产品测试/认证技术/产品检验检疫”。
//            if (bopdecCommon.indexGt(txcode2, "-228033-") && bopdecCommon.containsValue(tx2rem, "-测量-制图-产品测试-认证技术-产品检验检疫-")) {
//                return ValidResult.build(false, "第151条核查:交易编码为“228033农业和采矿服务”，但交易附言包含“测量/制图/产品测试/认证技术/产品检验检疫”");
//            }
//            //152交易编码为“228039其他技术服务”，但交易附言包含“其他/计算机/电脑/研发/开发/佣金/货款/样品费/印刷/展览/会议/维护/专利/开采/建筑/动物检疫/废物/污染/污水/废气/放射性/环保服务/修”。
//            if (bopdecCommon.indexGt(txcode2, "-228039-") && bopdecCommon.containsValue(tx2rem, "-计算机-电脑-研发-开发-佣金-货款-样品费-印刷费-展览-会议-维护-专利-开采-建筑-动物检疫-废物-污染-污水-废气-放射性-环保服务-修-")) {
//                return ValidResult.build(false, "第152条核查:交易编码为“228039其他技术服务”，但交易附言包含“计算机/电脑/研发/开发/佣金/货款/样品费/印刷费/展览/会议/维护/专利/开采/建筑/动物检疫/废物/污染/污水/废气/放射性/环保服务/修”");
//            }
//            //153交易编码为“228040经营性租赁服务”，但交易附言不包含“租”或包含“金融/融资/电信”。
//            if (bopdecCommon.indexGt(txcode2, "-228040-") && (!bopdecCommon.containsValue(tx2rem, "-租-") || bopdecCommon.containsValue(tx2rem, "-金融-融资-电信-"))) {
//                return ValidResult.build(false, "第153条核查:交易编码为“228040经营性租赁服务”，但交易附言不包含“租”或包含“金融/融资/电信”");
//            }
//            //154交易编码为“228050货物或服务交易佣金及相关服务”，但交易附言不包含“佣/回扣/中介/提成/费/分成”或包含“运/金融/险”。
//            if (bopdecCommon.indexGt(txcode2, "-228050-") && (!bopdecCommon.containsValue(tx2rem, "-佣-回扣-中介-提成-费-分成-") || bopdecCommon.containsValue(tx2rem, "-运-金融-险-"))) {
//                return ValidResult.build(false, "第154条核查:交易编码为“228050货物或服务交易佣金及相关服务”，但交易附言不包含“佣/回扣/中介/提成/费/分成”或包含“运/金融/险”");
//            }
//            //155交易编码为“228060办事处、代表处等办公经费”，但交易附言包含“房/屋/地/建筑/装修”。
//            if (bopdecCommon.indexGt(txcode2, "-228060-") && bopdecCommon.containsValue(tx2rem, "-房-屋-地-建筑-装修-")) {
//                return ValidResult.build(false, "第155条核查:交易编码为“228060办事处、代表处等办公经费”，但交易附言包含“房/屋/地/建筑/装修”");
//            }
//            //156交易编码为“228990上述未提及的其他商业服务”，但交易附言包含“样品/进料/来料/出料/带料/邮购/学/商务/标签/注册/检/理财/技术/差旅/租/捐/签证/修/赔/计算机/网络/税/旅游/运费/猎头/招聘/装卸/罚/售后/研发/保证金/生活费/快件/仓储/科研/测量/制图/测试/装修/设计/推广/制作/经费/租赁/开采/返利/法律/会计/版面费”。
//            if (bopdecCommon.indexGt(txcode2, "-228990-") && bopdecCommon.containsValue(tx2rem, "-样品-进料-来料-出料-带料-邮购-学-商务-注册-检-理财-技术-差旅-租-捐-签证-修-赔-计算机-网络-税-旅游-运费-猎头-招聘-装卸-罚-售后-研发-保证金-生活费-快件-仓储-科研-测量-制图-测试-装修-设计-推广-经费-租赁-开采-返利-法律-会计-版面费-") && !(bopdecCommon.containsValue(tx2rem, "-租-") && bopdecCommon.containsValue(tx2rem, "-中介-"))) {
//                return ValidResult.build(false, "第156条核查:交易编码为“228990上述未提及的其他商业服务”，但交易附言包含“样品/进料/来料/出料/带料/邮购/学/商务/注册/检/理财/技术/差旅/租/捐/签证/修/赔/计算机/网络/税/旅游/运费/猎头/招聘/装卸/罚/售后/研发/保证金/生活费/快件/仓储/科研/测量/制图/测试/装修/设计/推广/经费/租赁/开采/返利/法律/会计/版面费”。剔除交易附言中同时包含“租”及“中介”字样的数据。");
//            }
//            //157交易编码“为229010视听和相关服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），或包含“进口/出口/许可/转播/复制/分销”。
//            if (bopdecCommon.indexGt(txcode2, "-229010-") && (("-dbb-dbc-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(tx2rem, "-居民赴国外-居民前往国外-")) || ("-dba-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(tx2rem, "-非居民赴中国-非居民来中国-")) || bopdecCommon.containsValue(tx2rem, "-进口-出口-许可-转播-复制-分销-"))) {
//                return ValidResult.build(false, "第157条核查:交易编码“为229010视听和相关服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），或包含“进口/出口/许可/转播/复制/分销”");
//            }
//            //158交易编码为“229020教育服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），或包含“留学”。
//            if (bopdecCommon.indexGt(txcode2, "-229020-") && (("-dbb-dbc-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(tx2rem, "-居民赴国外-居民前往国外-")) || ("-dba-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(tx2rem, "-非居民赴中国-非居民来中国-")) || bopdecCommon.containsValue(tx2rem, "-留学-")) && !bopdecCommon.containsValue(tx2rem, "-留学咨询-")) {
//                return ValidResult.build(false, "第158条核查:交易编码为“229020教育服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），或包含“留学”。剔除交易附言含“留学咨询”字样的数据。");
//            }
//            //159交易编码为“229030医疗服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），或包含“就医/兽医”。
//            if (bopdecCommon.indexGt(txcode2, "-229030-") && (("-dbb-dbc-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(tx2rem, "-居民赴国外-居民前往国外-")) || ("-dba-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(tx2rem, "-非居民赴中国-非居民来中国-")) || bopdecCommon.containsValue(tx2rem, "-就医-兽医-"))) {
//                return ValidResult.build(false, "第159条核查:交易编码为“229030医疗服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），或包含“就医/兽医”");
//            }
//            //160交易编码为“229990其他文化和娱乐服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），”。
//            if (bopdecCommon.indexGt(txcode2, "-229990-") && (("-dbb-dbc-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(tx2rem, "-居民赴国外-居民前往国外-")) || ("-dba-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(tx2rem, "-非居民赴中国-非居民来中国-")))) {
//                return ValidResult.build(false, "第160条核查:交易编码为“229990其他文化和娱乐服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向）");
//            }
//            //161交易编码为“230000别处未涵盖的维护和维修服务”，但交易附言包含“工程且不含‘维修’/计算机/租赁且不含‘维修/维护’/装修/建设/建筑”。
//            if (bopdecCommon.indexGt(txcode2, "-230000-") && (bopdecCommon.containsValue(tx2rem, "-计算机-装修-建设-建筑-") || (bopdecCommon.containsValue(tx2rem, "-工程-租赁-") && !bopdecCommon.containsValue(tx2rem, "-维修-维护-")))) {
//                return ValidResult.build(false, "第161条核查:交易编码为“230000别处未涵盖的维护和维修服务”，但交易附言包含“工程且不含‘维修’/计算机/租赁且不含‘维修/维护’/装修/建设/建筑”");
//            }
//            //162交易编码为“231010特许和商标使用费”，但交易附言包含“专有/所有权/转让/专利/技术/版权”。
//            if (bopdecCommon.indexGt(txcode2, "-231010-") && bopdecCommon.containsValue(tx2rem, "-专有-所有权-转让-专利-技术-版权-")) {
//                return ValidResult.build(false, "第162条核查:交易编码为“231010特许和商标使用费”，但交易附言包含“专有/所有权/转让/专利/技术/版权”");
//            }
//            //163交易编码为“231020研发成果使用费”，但交易附言包含“商标/特许/转让/所有权/计算机/版面费/软件/视听”。
//            if (bopdecCommon.indexGt(txcode2, "-231020-") && bopdecCommon.containsValue(tx2rem, "-商标-特许-转让-所有权-计算机-版面费-软件-视听-")) {
//                return ValidResult.build(false, "第163条核查:交易编码为“231020研发成果使用费”，但交易附言包含“商标/特许/转让/所有权/计算机/版面费/软件/视听”");
//            }
//            //164交易编码为“231030复制或分销计算机软件许可费”，但交易附言包含定制/出口/进出/进口/视听”。
//            if (bopdecCommon.indexGt(txcode2, "-231030-") && (bopdecCommon.containsValue(tx2rem, "-出口-进出-进口-视听-定制-"))) {
//                return ValidResult.build(false, "第164条核查:交易编码为“231030复制或分销计算机软件许可费”，但交易附言包含定制/出口/进出/进口/视听”");
//            }
//            //165交易编码为“231040复制或分销视听及相关产品许可费”，但交易附言包含“计算机/软件/定制/出口/进出/进口”。
//            if (bopdecCommon.indexGt(txcode2, "-231040-") && bopdecCommon.containsValue(tx2rem, "-计算机-软件-定制-出口-进出-进口-")) {
//                return ValidResult.build(false, "第165条核查:交易编码为“231040复制或分销视听及相关产品许可费”，但交易附言包含“计算机/软件/定制/出口/进出/进口”");
//            }
//            //166交易编码为“231990其他知识产权使用费”，但交易附言包含“计算机/软件/定制/出口/进出/进口/视听/商标/专利/著作/版权/设计/转播/视频/电影/影像/音像”。
//            if (bopdecCommon.indexGt(txcode2, "-231990-") && bopdecCommon.containsValue(tx2rem, "-计算机-软件-定制-出口-进出-进口-视听-商标-专利-著作-版权-设计-转播-视频-电影-影像-音像-")) {
//                return ValidResult.build(false, "第166条核查:交易编码为“231990其他知识产权使用费”但交易附言包含“计算机/软件/定制/出口/进出/进口/视听/商标/专利/著作/版权/设计/转播/视频/电影/影像/音像");
//            }
//            //167交易编码为“232000别处未涵盖的政府货物和服务”，但交易附言包含“税捐/赠/援助”。
//            if (bopdecCommon.indexGt(txcode2, "-232000-") && bopdecCommon.containsValue(tx2rem, "-税-捐赠-援助-")) {
//                return ValidResult.build(false, "第167条核查:交易编码为“232000别处未涵盖的政府货物和服务”，但交易附言包含“税/捐赠/援助”");
//            }
//            //168交易编码为“321000职工报酬”，但交易附言包含“工程/利息/侨汇/赠/佣金/咨询/贷款/货款/赡/差旅/教育/培训/一般贸易/社保但不包含‘雇员/员工'”。
//            if (bopdecCommon.indexGt(txcode2, "-321000-") && (bopdecCommon.containsValue(tx2rem, "-工程-利息-侨汇-赠-佣金-咨询-贷款-货款-赡-差旅-教育-培训-一般贸易-社保-") && !bopdecCommon.containsValue(tx2rem, "-雇员-员工-"))) {
//                return ValidResult.build(false, "第168条核查:交易编码为“321000职工报酬”但交易附言包含“工程/利息/侨汇/赠/佣金/咨询/贷款/货款/赡/差旅/教育/培训/一般贸易/社保但不包含雇员/员工”");
//            }
//            //169交易编码为“322011从境外子公司等获得的股息、红利或利润/向境外母公司支付的股息、红利或利润”，但交易附言包含“利息/关联/优先股/联属”。
//            if (bopdecCommon.indexGt(txcode2, "-322011-") && bopdecCommon.containsValue(tx2rem, "-利息-关联-优先股-联属-")) {
//                return ValidResult.build(false, "第169条核查:交易编码为“322011从境外子公司等获得的股息、红利或利润/向境外母公司支付的股息、红利或利润”，但交易附言包含“利息/关联/优先股/联属”");
//            }
//            //170交易编码为“322012从境外母公司获得的股息、红利（持有境外母公司10%以下股权）/向境外子公司等支付的股息、红利（持有本机构10%以下股权）”，但交易附言包含“利息/联营/联属/分支/关联/合伙/优先股”；或收入方向包含“境外子”，支出方向包含“境外母”，剔除收付款类型为“退款”的数据。
//            //需完善
//            //if (Platform.indexGt($txcode2,"-322012-") && (  || (Platform.containsValue($tx2rem,"-境外母-")  && "-dbb-dbc-dbe-dbf-".indexOf(inifrm)>0 ) && !Platform.containsValue($paytype,"-退款-") ))
//            if (bopdecCommon.indexGt(txcode2, "-322012-") && (bopdecCommon.containsValue(tx2rem, "-利息-联营-联属-分支-关联-合伙-优先股-") || (bopdecCommon.containsValue(tx2rem, "-境外母-") && "-dbb-dbc-".indexOf(inifrm) > 0) && !bopdecCommon.containsValue(paytype, "-R-") || (bopdecCommon.containsValue(tx2rem, "-境外子-") && "-dba-".indexOf(inifrm) > 0 && !bopdecCommon.containsValue(paytype, "-R-")))) {
//                return ValidResult.build(false, "第170条核查:交易编码为“322012从境外母公司获得的股息、红利（持有境外母公司10%以下股权）/向境外子公司等支付的股息、红利（持有本机构10%以下股权）”，但交易附言包含“利息/联营/联属/分支/关联/合伙/优先股”；或收入方向包含“境外子”，支出方向包含“境外母”，剔除收付款类型为“退款”的数据。");
//            }
//            //171交易编码为“322013从境外联属企业获得的股息、红利/向境外联属企业支付的股息、红利”，但交易附言不包含“联属”或包含“利息/母公司/子公司/附属/分支/关联/联营/直接投资/优先股”。
//            if (bopdecCommon.indexGt(txcode2, "-322013-") && (!bopdecCommon.containsValue(tx2rem, "-联属-") || bopdecCommon.containsValue(tx2rem, "-利息-母公司-子公司-附属-分支-关联-联营-直接投资-优先股-"))) {
//                return ValidResult.build(false, "第171条核查:交易编码为“322013从境外联属企业获得的股息、红利/向境外联属企业支付的股息、红利”，但交易附言不包含“联属”或包含“利息/母公司/子公司/附属/分支/关联/联营/直接投资/优先股”");
//            }
//            //172交易编码为“322014因拥有境外建筑物而获得的租金/向境内建筑物的非居民所有者支付的租金”，但交易附言包含“售/卖/买/转让/购”。
//            if (bopdecCommon.indexGt(txcode2, "-322014-") && bopdecCommon.containsValue(tx2rem, "-售-卖-买-转让-购-")) {
//                return ValidResult.build(false, "第172条核查:交易编码为“322014因拥有境外建筑物而获得的租金/向境内建筑物的非居民所有者支付的租金”，但交易附言包含“售/卖/买/转让/购”");
//            }
//            //173交易编码为“322021从境外子公司获得的利息/向境外母公司支付的利息”，但交易附言包含“银行/本金/利润/红利/分红/股利/股息/联属”。
//            if (bopdecCommon.indexGt(txcode2, "-322021-") && bopdecCommon.containsValue(tx2rem, "-银行-本金-利润-红利-分红-股利-股息-联属-")) {
//                return ValidResult.build(false, "第173条核查:交易编码为“322021从境外子公司获得的利息/向境外母公司支付的利息”，但交易附言包含“银行/本金/利润/红利/分红/股利/股息/联属”");
//            }
//            //174交易编码为“322022从境外母公司获得的利息（持有境外母公司10%以下股权）/向境外子公司等支付的利息（持有本机构10%以下股权）”，但交易附言包含“银行/联营/附属/分支/本/利润/红利/分红/股利/股息/联属”。
//            if (bopdecCommon.indexGt(txcode2, "-322022-") && bopdecCommon.containsValue(tx2rem, "-银行-联营-附属-分支-本-利润-红利-分红-股利-股息-联属-")) {
//                return ValidResult.build(false, "第174条核查:交易编码为“322022从境外母公司获得的利息（持有境外母公司10%以下股权）/向境外子公司等支付的利息（持有本机构10%以下股权）”，但交易附言包含“银行/联营/附属/分支/本/利润/红利/分红/股利/股息/联属”");
//            }
//            //175交易编码为“322023从境外联属企业获得的利息/向境外联属企业支付的利息”，但交易附言不包含“联属”或包含“银行/母公司/子公司/附属/分支/关联/联营/直接投资/本金/利润/红利/分红/股利/股息/股东/投资者”。
//            if (bopdecCommon.indexGt(txcode2, "-322023-") && (!bopdecCommon.containsValue(tx2rem, "-联属-") || bopdecCommon.containsValue(tx2rem, "-银行-母公司-子公司-附属-分支-关联-联营-直接投资-本金-利润-红利-分红-股利-股息-股东-投资者-"))) {
//                return ValidResult.build(false, "第175条核查:交易编码为“322023从境外联属企业获得的利息/向境外联属企业支付的利息”，但交易附言不包含“联属”或包含“银行/母公司/子公司/附属/分支/关联/联营/直接投资/本金/利润/红利/分红/股利/股息/股东/投资者”");
//            }
//            //176交易编码为“322031股票投资的股息、红利”，但交易附言包含“优先股/基金/债/母/子/附属/分支/关联（但不是“非关联”）/直接投资/利息”。
//            if (bopdecCommon.indexGt(txcode2, "-322031-") && (bopdecCommon.containsValue(tx2rem, "-优先股-基金-债-母-子-附属-分支-直接投资-利息-") || (bopdecCommon.containsValue(tx2rem, "-关联-") && !bopdecCommon.containsValue(tx2rem, "-非关联-")))) {
//                return ValidResult.build(false, "第176条核查:交易编码为“322031股票投资的股息、红利”，但交易附言包含“优先股/基金/债/母/子/附属/分支/关联（但不是“非关联”）/直接投资/利息”");
//            }
//            //177交易编码为“322032投资基金份额的股息、红利”，但交易附言包含“利润/利息/母/子/附属/分支/联/直接投资/资金收入/资金支出”。
//            if (bopdecCommon.indexGt(txcode2, "-322032-") && bopdecCommon.containsValue(tx2rem, "-利润-利息-母-子-附属-分支-联-直接投资-资金收入-资金支出-")) {
//                return ValidResult.build(false, "第177条核查:交易编码为“322032投资基金份额的股息、红利”，但交易附言包含“利润/利息/母/子/附属/分支/联/直接投资/资金收入/资金支出”");
//            }
//            //178交易编码为“322033短期债券利息”，但交易附言包含“长期/中期/利润/红利/分红/股利/股息/本/买/卖/售/转让/购”。
//            if (bopdecCommon.indexGt(txcode2, "-322033-") && bopdecCommon.containsValue(tx2rem, "-长期-中期-利润-红利-分红-股利-股息-本-买-卖-售-转让-购-")) {
//                return ValidResult.build(false, "第178条核查:交易编码为“322033短期债券利息”，但交易附言包含“长期/中期/利润/红利/分红/股利/股息/本/买/卖/售/转让/购”");
//            }
//            //179交易编码为“322034中长期债券利息”，但交易附言包含“一年以下/一年期/短期/利润/红利/分红/股利/股息/本/买/卖/售/转让/购”。
//            if (bopdecCommon.indexGt(txcode2, "-322034-") && bopdecCommon.containsValue(tx2rem, "-一年以下-一年期-短期-利润-红利-分红-股利-股息-本-买-卖-售-转让-购-")) {
//                return ValidResult.build(false, "第179条核查:交易编码为“322034中长期债券利息”，但交易附言包含“一年以下/一年期/短期/利润/红利/分红/股利/股息/本/买/卖/售/转让/购”");
//            }
//            //180交易编码为“322041存贷款利息”，但交易附言包含“母公司/子公司/附属/联（但不是“非关联”）/直接投资/股东/分支/本/债券/利润”。
//            if (bopdecCommon.indexGt(txcode2, "-322041-") && (bopdecCommon.containsValue(tx2rem, "-母公司-子公司-附属-直接投资-股东-分支-本-债券-利润-") || (!bopdecCommon.containsValue(tx2rem, "-非关联-") && bopdecCommon.containsValue(tx2rem, "-联-")))) {
//                return ValidResult.build(false, "第180条核查:交易编码为“322041存贷款利息”，但交易附言包含“母公司/子公司/附属/联（但不是“非关联”）/直接投资/股东/分支/本/债券/利润”");
//            }
//            //181交易编码为“322042保单持有人获得的红利和利息/向保单持有者支付的红利和利息”，但交易附言包含“股/银行”。
//            if (bopdecCommon.indexGt(txcode2, "-322042-") && bopdecCommon.containsValue(tx2rem, "-股-银行-")) {
//                return ValidResult.build(false, "第181条核查:交易编码为“322042保单持有人获得的红利和利息/向保单持有者支付的红利和利息”，但交易附言包含“股/银行”");
//            }
//            //182交易编码为“322043从准公司和国际组织获得的红利、收益/向准公司和国际组织份额持有者支付的红利、收益”，但交易附言包含“利息/银行/母公司/子公司/联/直接投资/股东/分支/附属”。
//            if (bopdecCommon.indexGt(txcode2, "-322043-") && bopdecCommon.containsValue(tx2rem, "-利息-银行-母公司-子公司-联-直接投资-股东-分支-附属-")) {
//                return ValidResult.build(false, "第182条核查:交易编码为“322043从准公司和国际组织获得的红利、收益/向准公司和国际组织份额持有者支付的红利、收益”，但交易附言包含“利息/银行/母公司/子公司/联/直接投资/股东/分支/附属”");
//            }
//            //183交易编码为“323010使用自然资源的租金”，但交易附言包含“租约/转让/买/卖/售/房屋”。
//            if (bopdecCommon.indexGt(txcode2, "-323010-") && bopdecCommon.containsValue(tx2rem, "-租约-转让-买-卖-售-房屋-")) {
//                return ValidResult.build(false, "第183条核查:交易编码为“323010使用自然资源的租金”，但交易附言包含“租约/转让/买/卖/售/房屋”");
//            }
//            //184交易编码为“323020产品和生产的税收及补贴”，剔除交易附言包含“关税”、“出口%增值税”、“进口%增值税”、“吨税费”、“消费税”、“工资税”、“营业执照税”的数据。
//            //由于%不确定暂时先注释
//            if (bopdecCommon.indexGt(txcode2, "-323020-") && (bopdecCommon.containsValue(tx2rem, "-税-") && !bopdecCommon.containsValue(tx2rem, "-关税-出口税-进口税-增值税-营业税-销售税-土地使用税-印花税-吨税费-消费税-工资税-营业执照税-"))) {
//                return ValidResult.build(false, "第184条核查:交易编码为“323020产品和生产的税收及补贴”，交易附言包含“税”但不包含“关税”、“出口税”、“进口税”、“增值税”、“营业税”、“销售税”、“土地使用税”、“印花税”、“吨税费”、“消费税”、“工资税”或“营业执照税”的数据。");
//            }
//            //185交易编码为“421010个人间捐赠及无偿援助”，但交易附言包含“留学/赔偿/福利/学费/报酬/工资/政府/组织/固定资产有关/遗产/中奖/雇/房/舍/楼/屋/设备/机器/重建/速遣/滞期”或申报主体类型为“对公居民”（剔除交易附言包含“代收”或“代付”字样的数据）。
//            if (bopdecCommon.indexGt(txcode2, "-421010-") && (bopdecCommon.containsValue(tx2rem, "-留学-赔偿-福利-学费-报酬-工资-政府-组织-固定资产有关-遗产-中奖-雇-房-舍-楼-屋-设备-机器-重建-速遣-滞期-") || (bopdecCommon.indexGt(custype, "-C-") && !bopdecCommon.containsValue(tx2rem, "-代收-代付-")))) {
//                return ValidResult.build(false, "第185条核查:交易编码为“421010个人间捐赠及无偿援助”，但交易附言包含“留学/赔偿/福利/学费/报酬/工资/政府/组织/固定资产有关/遗产/中奖/雇/房/舍/楼/屋/设备/机器/重建/速遣/滞期”或申报主体类型为“对公居民”（剔除交易附言包含“代收”或“代付”字样的数据）。");
//            }
//            //186交易编码为“421020政府、国际组织间捐赠及无偿援助（与固定资产无关）”，但交易附言包含“工资/留学/赔偿/薪/福利/学费/报酬/探亲/个人/赡/遗产/中奖/雇/房/舍/楼/屋/设备/机器/重建/固定资产有关或申报主体类型为“对私居民””。
//            if (bopdecCommon.indexGt(txcode2, "-421020-") && (bopdecCommon.containsValue(tx2rem, "-工资-留学-赔偿-薪-福利-学费-报酬-探亲-个人-赡-遗产-中奖-雇-房-舍-楼-屋-设备-机器-重建-固定资产有关-") || bopdecCommon.indexGt(custype, "-D-"))) {
//                return ValidResult.build(false, "第186条核查:交易编码为“421020政府、国际组织间捐赠及无偿援助（与固定资产无关）”，但交易附言包含“工资/留学/赔偿/薪/福利/学费/报酬/探亲/个人/赡/遗产/中奖/雇/房/舍/楼/屋/设备/机器/重建/固定资产有关或申报主体类型为“对私居民”");
//            }
//            //187交易编码为“421990其他捐赠及无偿援助（与固定资产无关）”，但交易附言包含“工资/留学/赔偿/薪/福利/学费/报酬/探亲/政府/赡/遗产/中奖/雇/房/舍/楼/屋/设备/机器/重建/速遣/与固定资产有关”。
//            if (bopdecCommon.indexGt(txcode2, "-421990-") && (bopdecCommon.containsValue(tx2rem, "-工资-留学-赔偿-薪-福利-学费-报酬-探亲-政府-赡-遗产-中奖-雇-房-舍-楼-屋-设备-机器-重建-速遣-与固定资产有关-") || bopdecCommon.indexGt(custype, "-D-"))) {
//                return ValidResult.build(false, "第187条核查:交易编码为“421990其他捐赠及无偿援助（与固定资产无关）”，但交易附言包含“工资/留学/赔偿/薪/福利/学费/报酬/探亲/政府/赡/遗产/中奖/雇/房/舍/楼/屋/设备/机器/重建/速遣/与固定资产有关”。");
//            }
//            //188交易编码为“422000非寿险保险赔偿”，但交易附言包含“保费/年金”。
//            if (bopdecCommon.indexGt(txcode2, "-422000-") && bopdecCommon.containsValue(tx2rem, "-保费-年金-")) {
//                return ValidResult.build(false, "第188条核查:交易编码为“422000非寿险保险赔偿”，但交易附言包含“保费/年金”");
//            }
//            //189交易编码为“423010社保缴款”，但交易附言包含“雇/返”。
//            if (bopdecCommon.indexGt(txcode2, "-423010-") && bopdecCommon.containsValue(tx2rem, "-雇-返-")) {
//                return ValidResult.build(false, "第189条核查:交易编码为“423010社保缴款”，但交易附言包含“雇/返”");
//            }
//            //190交易编码为“423020社保返还的福利”，但交易附言包含“雇主/公司”。
//            if (bopdecCommon.indexGt(txcode2, "-423020-") && bopdecCommon.containsValue(tx2rem, "-雇主-公司-")) {
//                return ValidResult.build(false, "第190条核查:交易编码为“423020社保返还的福利”，但交易附言包含“雇主/公司”");
//            }
//            //191交易编码为“424000其他二次收入（经常转移）”，但交易附言包含“险赔但不包含‘非’/赠/借/捐/社保/无偿/养老金/关税但不是‘关税退款’或‘关税返还’或‘关税让利’/消费税/产品税/生产税/产品补贴/产品增值税/进口税/出口税/商品消费税/遗产税/资本税/税务咨询”。
//            //if (Platform.indexGt($txcode2,"-424000-")  &&(Platform.containsValue($tx2rem,"-险赔-") && !Platform.containsValue($tx2rem,"-非赠-非借-非捐-非社保-非无偿-非养老金-非关税-非消费税-非产品税-非生产税-非产品补贴-非产品增值税-非进口税-非出口税-非商品消费税-非遗产税-非资本税-")) )
//            if (bopdecCommon.indexGt(txcode2, "-424000-") && ((bopdecCommon.containsValue(tx2rem, "-关税-") && !bopdecCommon.containsValue(tx2rem, "-关税退款-关税返还-关税让利-")) || (bopdecCommon.containsValue(tx2rem, "-险赔-") && !bopdecCommon.containsValue(tx2rem, "-非-")) || bopdecCommon.containsValue(tx2rem, "-赠-借-捐-社保-无偿-养老金-消费税-产品税-生产税-产品补贴-产品增值税-进口税-出口税-商品消费税-遗产税-资本税-税务咨询-"))) {
//                return ValidResult.build(false, "第191条核查:交易编码为“424000其他二次收入（经常转移）”，但交易附言包含“险赔但不包含‘非’/赠/借/捐/社保/无偿/养老金/关税但不是‘关税退款’或‘关税返还’或‘关税让利’/消费税/产品税/生产税/产品补贴/产品增值税/进口税/出口税/商品消费税/遗产税/资本税/税务咨询”。");
//            }
//            //192交易编码为“521020与固定资产有关的捐赠及无偿援助”，但交易附言包含“个人/亲属/赡/生活费”。
//            if (bopdecCommon.indexGt(txcode2, "-521020-") && bopdecCommon.containsValue(tx2rem, "-个人-亲属-赡-生活费-")) {
//                return ValidResult.build(false, "第192条核查:交易编码为“521020与固定资产有关的捐赠及无偿援助”，但交易附言包含“个人/亲属/赡/生活费”");
//            }
//            //193交易编码为“521030移民转移”，但交易附言包含“赠/捐/赡/生活费/探亲”。
//            if (bopdecCommon.indexGt(txcode2, "-521030-") && bopdecCommon.containsValue(tx2rem, "-赠-捐-赡-生活费-探亲-")) {
//                return ValidResult.build(false, "第193条核查:交易编码为“521030移民转移”，但交易附言包含“赠/捐/赡/生活费/探亲”");
//            }
//            //194交易编码为“521990其他资本转移”，但交易附言包含“销售税/产品税/税务咨询”。
//            if (bopdecCommon.indexGt(txcode2, "-521990-") && bopdecCommon.containsValue(tx2rem, "-销售税-产品税-税务咨询-")) {
//                return ValidResult.build(false, "第194条核查:交易编码为“521990其他资本转移”，但交易附言包含“销售税/产品税/税务咨询”");
//            }
//            //195交易编码为“522000品牌、商标、契约和许可所有权等非生产非金融资产转让”，但交易附言包含“租金/专利/版权/研发/使用”。
//            if (bopdecCommon.indexGt(txcode2, "-522000-") && bopdecCommon.containsValue(tx2rem, "-租金-专利-版权-研发-使用-")) {
//                return ValidResult.build(false, "第195条核查:交易编码为“522000品牌、商标、契约和许可所有权等非生产非金融资产转让”，但交易附言包含“租金/专利/版权/研发/使用”");
//            }
//            //196交易编码为“621011因境外子公司清算、终止等撤资/新设境外子公司资本金汇出”，但交易附言不包含“子公司/分公司/联营/直接投资/境外投资”；或包含“关联/外商/联属/境内子/境外母/前期/筹备/增资/减资/借/贷”,剔除交易附言包含“工程”字样的数据。
//            if (bopdecCommon.indexGt(txcode2, "-621011-") && (!bopdecCommon.containsValue(tx2rem, "-子公司-分公司-联营-直接投资-境外投资-") || (bopdecCommon.containsValue(tx2rem, "-关联-外商-联属-境内子-境外母-前期-筹备-增资-减资-借-贷-") && !bopdecCommon.containsValue(tx2rem, "-工程-")))) {
//                return ValidResult.build(false, "第196条核查:交易编码为“621011因境外子公司清算、终止等撤资/新设境外子公司资本金汇出”，但交易附言不包含“子公司/分公司/联营/直接投资/境外投资”；或包含“关联/外商/联属/境内子/境外母/前期/筹备/增资/减资/借/贷”,剔除交易附言包含“工程”字样的数据");
//            }
//            //197交易编码为“621012筹备资金撤回/筹备资金汇出”，但交易附言包含“关联/外商/联属/资本金/境内子/境外母/转让”。
//            if (bopdecCommon.indexGt(txcode2, "-621012-") && bopdecCommon.containsValue(tx2rem, "-关联-外商-联属-资本金-境内子-境外母-转让-")) {
//                return ValidResult.build(false, "第197条核查:交易编码为“621012筹备资金撤回/筹备资金汇出”，但交易附言包含“关联/外商/联属/资本金/境内子/境外母/转让”");
//            }
//            //198交易编码为“621013因境外子公司减资收回资金/对境外子公司增资”，但交易附言不包含“减%资/增%资”，或不包含“子公司”或“直接投资”；或包含“关联/外商/清算/境内子/境外母”。
//            //由于%不确定暂时先注释
//            if (bopdecCommon.indexGt(txcode2, "-621013-") && (bopdecCommon.containsValue(tx2rem, "-关联-外商-清算-境内子-境外母-") || (!bopdecCommon.containsValue(tx2rem, "-子公司-直接投资-") && !bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(tx2rem, "增", "资")) && !bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(tx2rem, "减", "资"))))) {
//                return ValidResult.build(false, "第198条核查:交易编码为“621013因境外子公司减资收回资金/对境外子公司增资”，但交易附言不包含“减%资/增%资”，或不包含“子公司”或“直接投资”；或包含“关联/外商/清算/境内子/境外母”");
//            }
//            //199交易编码为“621014转让境外子公司股权收入/购买转让的境外企业股权”，但交易附言不包含“股权/产权/股份”或包含“关联/外商/境内子/境外母”。
//            if (bopdecCommon.indexGt(txcode2, "-621014-") && (!bopdecCommon.containsValue(tx2rem, "-股权-产权-股份-") || bopdecCommon.containsValue(tx2rem, "-关联-外商-境内子-境外母-"))) {
//                return ValidResult.build(false, "第199条核查:交易编码为“621014转让境外子公司股权收入/购买转让的境外企业股权”，但交易附言不包含“股权/产权/股份”或包含“关联/外商/境内子/境外母”");
//            }
//            //200交易编码为“621015接受境外子公司的股权投资（逆向股权投资）/境外子公司撤回对境内母公司的股权投资（逆向股权投资的撤回）”，但交易附言不包含“投资/资本/股”或包含“关联/外商/境内子/境外母”。
//            if (bopdecCommon.indexGt(txcode2, "-621015-") && (!bopdecCommon.containsValue(tx2rem, "-投资-资本-股-") || bopdecCommon.containsValue(tx2rem, "-关联-外商-境内子-境外母-"))) {
//                return ValidResult.build(false, "第200条核查:交易编码为“621015接受境外子公司的股权投资（逆向股权投资）/境外子公司撤回对境内母公司的股权投资（逆向股权投资的撤回）”，但交易附言不包含“投资/资本/股”或包含“关联/外商/境内子/境外母”");
//            }
//            //201交易编码为“621016非法人投资款撤回/汇出”，但交易附言包含“子公司/境内子/境外母”。
//            if (bopdecCommon.indexGt(txcode2, "-621016-") && bopdecCommon.containsValue(tx2rem, "-子公司-境内子-境外母-")) {
//                return ValidResult.build(false, "第201条核查:交易编码为“621016非法人投资款撤回/汇出”，但交易附言包含“子公司/境内子/境外母”");
//            }
//            //202交易编码为“621021收回对境外子公司的贷款及其他往来/对境外子公司的贷款及其他往来”，但交易附言包含“关联/外商/担保/境内子/境外母”，剔除交易附言包含“工程”字样的数据。
//            if (bopdecCommon.indexGt(txcode2, "-621021-") && bopdecCommon.containsValue(tx2rem, "-关联-外商-担保-境内子-境外母-") && !bopdecCommon.containsValue(tx2rem, "-工程-")) {
//                return ValidResult.build(false, "第202条核查:交易编码为“621021收回对境外子公司的贷款及其他往来/对境外子公司的贷款及其他往来”，但交易附言包含“关联/外商/担保/境内子/境外母”，剔除交易附言包含“工程”字样的数据");
//            }
//            //203交易编码为“621022接受境外子公司的贷款及其他往来（逆向贷款投资）/偿还境外子公司的贷款及其他往来（逆向投资的撤回）”，但交易附言包含“关联/外商/担保/境内子/境外母”。
//            if (bopdecCommon.indexGt(txcode2, "-621022-") && bopdecCommon.containsValue(tx2rem, "-关联-外商-担保-境内子-境外母-")) {
//                return ValidResult.build(false, "第203条核查:交易编码为“621022接受境外子公司的贷款及其他往来（逆向贷款投资）/偿还境外子公司的贷款及其他往来（逆向投资的撤回）”，但交易附言包含“关联/外商/担保/境内子/境外母”");
//            }
//            //204交易编码为“621030出售境外不动产收入/购买境外不动产支出”，但交易附言包含“中介/税/境内/国内/境外母”。
//            if (bopdecCommon.indexGt(txcode2, "-621030-") && bopdecCommon.containsValue(tx2rem, "-中介-税-境内-国内-境外母-")) {
//                return ValidResult.build(false, "第204条核查:交易编码为“621030出售境外不动产收入/购买境外不动产支出”，但交易附言包含“中介/税/境内/国内/境外母”");
//            }
//            //205交易编码为“622011新设外商投资企业资本金汇入/因外商投资企业清算、终止等撤资”，但交易附言包含“关联/借款/增资/减资/筹备/前期/境内母/境外子”。
//            if (bopdecCommon.indexGt(txcode2, "-622011-") && bopdecCommon.containsValue(tx2rem, "-关联-借款-增资-减资-筹备-前期-境内母-境外子-")) {
//                return ValidResult.build(false, "第205条核查:交易编码为“622011新设外商投资企业资本金汇入/因外商投资企业清算、终止等撤资”，但交易附言包含“关联/借款/增资/减资/筹备/前期/境内母/境外子”");
//            }
//            //206交易编码为“622012筹备资金汇入/撤出”，但交易附言包含“关联/联属/新设/清算/联属/境内母/境外子/转让”。
//            if (bopdecCommon.indexGt(txcode2, "-622012-") && bopdecCommon.containsValue(tx2rem, "-关联-联属-新设-清算-联属-境内母-境外子-转让-")) {
//                return ValidResult.build(false, "第206条核查:交易编码为“622012筹备资金汇入/撤出”，但交易附言包含“关联/联属/新设/清算/联属/境内母/境外子/转让”");
//            }
//            //207交易编码为“622013外商投资企业增资/外商投资企业减资”，但交易附言不包含“减%资/增%资”或包含“关联/境内母/境外子”。
//            //由于%不确定暂时先注释
//            if (bopdecCommon.indexGt(txcode2, "-622013-") && ((!bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(tx2rem, "增", "资")) && !bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(tx2rem, "减", "资"))) || bopdecCommon.containsValue(tx2rem, "-关联-境内母-境外子-"))) {
//                return ValidResult.build(false, "第207条核查:交易编码为“622013外商投资企业增资/外商投资企业减资”，但交易附言不包含“减%资/增%资”或包含“关联/境内母/境外子”");
//            }
//            //208交易编码为“622014转让境内企业股权/购买转让的外商投资企业股权”，但交易附言不包含“股权/产权/股份/新设”或包含“关联/清算/减资/撤资”。
//            if (bopdecCommon.indexGt(txcode2, "-622014-") && (bopdecCommon.containsValue(tx2rem, "-关联-清算-减资-撤资-新设-") || !bopdecCommon.containsValue(tx2rem, "-股权-产权-股份-"))) {
//                return ValidResult.build(false, "第208条核查:交易编码为“622014转让境内企业股权/购买转让的外商投资企业股权”，但交易附言不包含“股权/产权/股份”或包含“关联/清算/减资/撤资/新设”");
//            }
//            //209交易编码为“622015对境外母公司的股权投资的撤回（逆向股权投资的撤回）/外商投资企业对境外母公司的股权投资（逆向股权投资）”，但交易附言不包含“母公司”或不包含“投资/资本/股”或包含“关联/附属/分支/联营/境内母/境外子”。
//            if (bopdecCommon.indexGt(txcode2, "-622015-") && (bopdecCommon.containsValue(tx2rem, "-关联-附属-分支-联营-境内母-境外子-") || !bopdecCommon.containsValue(tx2rem, "-母公司-投资-资本-股-"))) {
//                return ValidResult.build(false, "第209条核查:交易编码为“622015对境外母公司的股权投资的撤回（逆向股权投资的撤回）/外商投资企业对境外母公司的股权投资（逆向股权投资）”，但交易附言不包含“母公司”或不包含“投资/资本/股”或包含“关联/附属/分支/联营/境内母/境外子”");
//            }
//            //210交易编码为“622016非法人投资款汇入/撤出”，但交易编码包含“关联/联属/子/母”。
//            if (bopdecCommon.indexGt(txcode2, "-622016-") && bopdecCommon.containsValue(tx2rem, "-关联-联属-子-母-")) {
//                return ValidResult.build(false, "第210条核查:交易编码为“622016非法人投资款汇入/撤出”，但交易编码包含“关联/联属/子/母”");
//            }
//            //211交易编码为“622021”，但交易附言包含“关联/附属/分支/联营/担保/联属/境内母/境外子”。
//            if (bopdecCommon.indexGt(txcode2, "-622021-") && bopdecCommon.containsValue(tx2rem, "-关联-附属-分支-联营-担保-联属-境内母-境外子-")) {
//                return ValidResult.build(false, "第211条核查:交易编码为“622021”，但交易附言包含“关联/附属/分支/联营/担保/联属/境内母/境外子”");
//            }
//            //212交易编码为“622022收回对境外母公司的贷款及其他往来（逆向贷款投资的撤回）/对境外母公司的贷款及其他往来（逆向贷款投资）”，但交易附言包含“关联/附属/分支/联营/担保/联属/境内母/境外子”。
//            if (bopdecCommon.indexGt(txcode2, "-622022-") && bopdecCommon.containsValue(tx2rem, "-关联-附属-分支-联营-担保-联属-境内母-境外子-")) {
//                return ValidResult.build(false, "第212条核查:交易编码为“622022收回对境外母公司的贷款及其他往来（逆向贷款投资的撤回）/对境外母公司的贷款及其他往来（逆向贷款投资）”，但交易附言包含“关联/附属/分支/联营/担保/联属/境内母/境外子”");
//            }
//            //213交易编码为“622030向非居民出售境内不动产收入/从非居民购买境内不动产支出”，但交易附言包含“中介/税/租/境内母/境外子”
//            if (bopdecCommon.indexGt(txcode2, "-622030-") && bopdecCommon.containsValue(tx2rem, "-中介-税-租-境内母-境外子-")) {
//                return ValidResult.build(false, "第213条核查:交易编码为“622030向非居民出售境内不动产收入/从非居民购买境内不动产支出”，但交易附言包含“中介/税/租/境内母/境外子”");
//            }
//            //214交易编码为“623011”，但交易附言不包含“联属”或不包含“投资/资本/股”或包含“关联/子/母”。
//            if (bopdecCommon.indexGt(txcode2, "-623011-") && (bopdecCommon.containsValue(tx2rem, "-关联-子-母-") || !bopdecCommon.containsValue(tx2rem, "-联属-投资-资本-股-"))) {
//                return ValidResult.build(false, "第214条核查:交易编码为“623011”，但交易附言不包含“联属”或不包含“投资/资本/股”或包含“关联/子/母”");
//            }
//            //215交易编码为“623012接受境外联属企业的股权投资/境外联属企业撤回对境内的股权投资”，但交易附言不包含“联属”或不包含“投资/资本/股”或包含“关联/子/母”。
//            if (bopdecCommon.indexGt(txcode2, "-623012-") && (bopdecCommon.containsValue(tx2rem, "-关联-子-母-") || !bopdecCommon.containsValue(tx2rem, "-联属-投资-资本-股-"))) {
//                return ValidResult.build(false, "第215条核查:交易编码为“623012接受境外联属企业的股权投资/境外联属企业撤回对境内的股权投资”，但交易附言不包含“联属”或不包含“投资/资本/股”或包含“关联/子/母”");
//            }
//            //216交易编码为“623021收回对境外联属企业的贷款及其他往来/向境外联属企业提供贷款及其他债权”，但交易附言不包含“联属”；或包含“关联/担保/子/母”,剔除交易附言包含“工程”字样的数据。
//            if (bopdecCommon.indexGt(txcode2, "-623021-") && (!bopdecCommon.containsValue(tx2rem, "-联属-借-贷-放-代垫-应-") || (bopdecCommon.containsValue(tx2rem, "-关联-担保-子-母-") && !bopdecCommon.containsValue(tx2rem, "-工程-")))) {
//                return ValidResult.build(false, "第216条核查:交易编码为“623021收回对境外联属企业的贷款及其他往来/向境外联属企业提供贷款及其他债权”，但交易附言不包含“联属”；或包含“关联/担保/子/母”,剔除交易附言包含“工程”字样的数据");
//            }
//            //217交易编码为“623022接受境外联属企业的贷款及其他往来/ 偿还境外联属企业贷款及其他债务”，但交易附言不包含“联属”或不包含“借/贷/外债/代垫/应”或包含“关联/担保/子/母/利息”。
//            if (bopdecCommon.indexGt(txcode2, "-623022-") && (bopdecCommon.containsValue(tx2rem, "-关联-担保-子-母-利息-") || !bopdecCommon.containsValue(tx2rem, "-联属-借-贷-外债-代垫-应-")) && !bopdecCommon.containsValue(tx2rem, "-资金池-不出境-不出口-")) {
//                return ValidResult.build(false, "第217条核查:交易编码为“623022接受境外联属企业的贷款及其他往来/ 偿还境外联属企业贷款及其他债务”，但交易附言不包含“联属”或不包含“借/贷/外债/代垫/应”或包含“关联/担保/子/母/利息”。剔除交易附言包含“资金池”、“不出境”、“不出口”字样数据。");
//            }
//            //218交易编码为“721010卖出境外机构境外发行的股票或股权/投资境外机构境外发行的股票或股权”，但交易附言不包含“股”。
//            if (bopdecCommon.indexGt(txcode2, "-721010-") && !bopdecCommon.containsValue(tx2rem, "-股-")) {
//                return ValidResult.build(false, "第218条核查:交易编码为“721010卖出境外机构境外发行的股票或股权/投资境外机构境外发行的股票或股权”，但交易附言不包含“股”");
//            }
//            //219交易编码为“721020卖出境内机构在境外发行的股票或股权/投资境内机构在境外发行的股票或股权”，但交易附言不包含“股”。
//            if (bopdecCommon.indexGt(txcode2, "-721020-") && !bopdecCommon.containsValue(tx2rem, "-股-")) {
//                return ValidResult.build(false, "第219条核查:交易编码为“721020卖出境内机构在境外发行的股票或股权/投资境内机构在境外发行的股票或股权”，但交易附言不包含“股”");
//            }
//            //220交易编码为“721030在境外市场发行股票或股权/境内公司回购境外发行的股票或股权”，但交易附言不包含“股”。
//            if (bopdecCommon.indexGt(txcode2, "-721030-") && !bopdecCommon.containsValue(tx2rem, "-股-")) {
//                return ValidResult.build(false, "第220条核查:交易编码为“721030在境外市场发行股票或股权/境内公司回购境外发行的股票或股权”，但交易附言不包含“股”");
//            }
//            //221交易编码为“721040非居民买入/卖出境内股票或股权”，但交易附言不包含“股”。
//            if (bopdecCommon.indexGt(txcode2, "-721040-") && !bopdecCommon.containsValue(tx2rem, "-股-") && !bopdecCommon.containsValue(custnm, "-证券-")) {
//                return ValidResult.build(false, "第221条核查:交易编码为“721040非居民买入/卖出境内股票或股权”，但交易附言不包含“股”。剔除申报主体名称含“证券”的数据。");
//            }
//            //222交易编码为“721050非居民回购/发行境内股票或股权”，但交易附言不包含“股”。
//            if (bopdecCommon.indexGt(txcode2, "-721050-") && !bopdecCommon.containsValue(tx2rem, "-股-")) {
//                return ValidResult.build(false, "第222条核查:交易编码为“721050非居民回购/发行境内股票或股权”，但交易附言不包含“股”");
//            }
//            //223交易编码为“722010赎回/申购境外投资基金”，但交易附言不包含“基金”。
//            if (bopdecCommon.indexGt(txcode2, "-722010-") && !bopdecCommon.containsValue(tx2rem, "-基金-")) {
//                return ValidResult.build(false, "第223条核查:交易编码为“722010赎回/申购境外投资基金”，但交易附言不包含“基金”");
//            }
//            //224交易编码为“722020募集/清算境外投资基金”，但交易附言不包含“基金”。
//            if (bopdecCommon.indexGt(txcode2, "-722020-") && !bopdecCommon.containsValue(tx2rem, "-基金-")) {
//                return ValidResult.build(false, "第224条核查:交易编码为“722020募集/清算境外投资基金”，但交易附言不包含“基金”");
//            }
//            //225交易编码为“722030非居民申购/赎回境内投资基金”，但交易附言不包含“基金”。
//            if (bopdecCommon.indexGt(txcode2, "-722030-") && !bopdecCommon.containsValue(tx2rem, "-基金-")) {
//                return ValidResult.build(false, "第225条核查:交易编码为“722030非居民申购/赎回境内投资基金”，但交易附言不包含“基金”");
//            }
//            //226交易编码为“722040非居民清算境内募集的/境内募集投资基金”，但交易附言不包含“基金”。
//            if (bopdecCommon.indexGt(txcode2, "-722040-") && !bopdecCommon.containsValue(tx2rem, "-基金-")) {
//                return ValidResult.build(false, "第226条核查:交易编码为“722040非居民清算境内募集的/境内募集投资基金”，但交易附言不包含“基金”");
//            }
//            //227交易编码为“723011卖出/买入境外短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”。
//            if (bopdecCommon.indexGt(txcode2, "-723011-") && (bopdecCommon.containsValue(tx2rem, "-长期-一年以上-1年以上-股-基金-") || !bopdecCommon.containsValue(tx2rem, "-债-"))) {
//                return ValidResult.build(false, "第227条核查:交易编码为“723011卖出/买入境外短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”");
//            }
//            //228交易编码为“723012发行/偿付境外短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”。
//            if (bopdecCommon.indexGt(txcode2, "-723012-") && (bopdecCommon.containsValue(tx2rem, "-长期-一年以上-1年以上-股-基金-") || !bopdecCommon.containsValue(tx2rem, "-债-"))) {
//                return ValidResult.build(false, "第228条核查:交易编码为“723012发行/偿付境外短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”");
//            }
//            //229交易编码为“723013非居民买入/卖出境内短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”。
//            if (bopdecCommon.indexGt(txcode2, "-723013-") && (bopdecCommon.containsValue(tx2rem, "-长期-一年以上-1年以上-股-基金-") || !bopdecCommon.containsValue(tx2rem, "-债-"))) {
//                return ValidResult.build(false, "第229条核查:交易编码为“723013非居民买入/卖出境内短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”");
//            }
//            //230交易编码为“723014非居民偿付/发行境内短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”。
//            if (bopdecCommon.indexGt(txcode2, "-723014-") && (bopdecCommon.containsValue(tx2rem, "-长期-一年以上-1年以上-股-基金-") || !bopdecCommon.containsValue(tx2rem, "-债-"))) {
//                return ValidResult.build(false, "第230条核查:交易编码为“723014非居民偿付/发行境内短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”");
//            }
//            //231交易编码为“723021卖出/买入境外中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”。
//            if (bopdecCommon.indexGt(txcode2, "-723021-") && (bopdecCommon.containsValue(tx2rem, "-短期-一年以下-一年以内-1年以内-1年以下-股-基金-") || !bopdecCommon.containsValue(tx2rem, "-债-"))) {
//                return ValidResult.build(false, "第231条核查:交易编码为“723021卖出/买入境外中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”");
//            }
//            //232交易编码为“723022发行/偿付境外中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”。
//            if (bopdecCommon.indexGt(txcode2, "-723022-") && (bopdecCommon.containsValue(tx2rem, "-短期-一年以下-一年以内-1年以内-1年以下-股-基金-") || !bopdecCommon.containsValue(tx2rem, "-债-"))) {
//                return ValidResult.build(false, "第232条核查:交易编码为“723022发行/偿付境外中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”");
//            }
//            //233交易编码为“723023非居民买入/卖出境内中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”。
//            if (bopdecCommon.indexGt(txcode2, "-723023-") && (bopdecCommon.containsValue(tx2rem, "-短期-一年以下-一年以内-1年以内-1年以下-股-基金-") || !bopdecCommon.containsValue(tx2rem, "-债-"))) {
//                return ValidResult.build(false, "第233条核查:交易编码为“723023非居民买入/卖出境内中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”");
//            }
//            //234交易编码为“723024非居民偿付/发行境内中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”。
//            if (bopdecCommon.indexGt(txcode2, "-723024-") && (bopdecCommon.containsValue(tx2rem, "-短期-一年以下-一年以内-1年以内-1年以下-股-基金-") || !bopdecCommon.containsValue(tx2rem, "-债-"))) {
//                return ValidResult.build(false, "第234条核查:交易编码为“723024非居民偿付/发行境内中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”");
//            }
//            //235交易编码为“724000因金融衍生工具交易引起的收入/支出”，但交易附言不包含“期权/期货/掉期/衍生”或包含“债券/股票/基金”。
//            if (bopdecCommon.indexGt(txcode2, "-724000-") && (bopdecCommon.containsValue(tx2rem, "-债券-股票-基金-") || !bopdecCommon.containsValue(tx2rem, "-期权-期货-掉期-衍生-"))) {
//                return ValidResult.build(false, "第235条核查:交易编码为“724000因金融衍生工具交易引起的收入/支出”，但交易附言不包含“期权/期货/掉期/衍生”或包含“债券/股票/基金”");
//            }
//            //236交易编码为“821010资产-人寿保险和年金权益”，但交易附言不包含“年金/寿”或包含“利/赔/保费”。
//            if (bopdecCommon.indexGt(txcode2, "-821010-") && (bopdecCommon.containsValue(tx2rem, "-利-赔-保费-") || !bopdecCommon.containsValue(tx2rem, "-年金-寿-"))) {
//                return ValidResult.build(false, "第236条核查:交易编码为“821010资产-人寿保险和年金权益”，但交易附言不包含“年金/寿”或包含“利/赔/保费”");
//            }
//            //237交易编码为“821020对外贷款的收回/向境外提供贷款”，但交易附言包含“息/母/子/附属/关联(但不是‘非关联、无关联’)/存款”。
//            if (bopdecCommon.indexGt(txcode2, "-821020-") && (bopdecCommon.containsValue(tx2rem, "-息-母-子-附属-存款-") || (!bopdecCommon.containsValue(tx2rem, "-非关联-无关联-") && bopdecCommon.containsValue(tx2rem, "-关联-")))) {
//                return ValidResult.build(false, "第237条核查:交易编码为“821020对外贷款的收回/向境外提供贷款”，但交易附言包含“息/母/子/附属/关联(但不是‘非关联、无关联’)/存款”");
//            }
//            //238交易编码为“821030收回或调回存放境外存款本金/存放境外存款”，但交易附言包含“保证金/借/贷/利息”。
//            if (bopdecCommon.indexGt(txcode2, "-821030-") && bopdecCommon.containsValue(tx2rem, "-保证金-借-贷-利息-")) {
//                return ValidResult.build(false, "第238条核查:交易编码为“821030收回或调回存放境外存款本金/存放境外存款”，但交易附言包含“保证金/借/贷/利息”");
//            }
//            //239交易编码为“822010负债-人寿保险和年金权益”，但交易附言不包含“年金/寿”或包含“利/赔/保费”。
//            if (bopdecCommon.indexGt(txcode2, "-822010-") && (bopdecCommon.containsValue(tx2rem, "-利-赔-保费-") || !bopdecCommon.containsValue(tx2rem, "-年金-寿-"))) {
//                return ValidResult.build(false, "第239条核查:交易编码为“822010负债-人寿保险和年金权益”，但交易附言不包含“年金/寿”或包含“利/赔/保费”");
//            }
//            //240交易编码为“822020获得/偿还境外贷款”，但交易附言包含“息/母/子/附属/关联（但不是‘非关联’、‘无关联’)/联属”。
//            if (bopdecCommon.indexGt(txcode2, "-822020-") && (bopdecCommon.containsValue(tx2rem, "-息-母-子-附属-") || (!bopdecCommon.containsValue(tx2rem, "-非关联-无关联-") && bopdecCommon.containsValue(tx2rem, "-关联-")) || (!bopdecCommon.containsValue(tx2rem, "-非联属-") && bopdecCommon.containsValue(tx2rem, "-联属-")))) {
//                return ValidResult.build(false, "第240条核查:交易编码为“822020获得/偿还境外贷款”，但交易附言包含“息/母/子/附属/关联（但不是‘非关联’、‘无关联’)/联属（但不是‘非联属’）”。");
//            }
//            //241交易编码1为“822030境外存入款项/调出”，但涉外收入交易附言1不包含“非居民从境外收款”、对外支出交易附言1不包含“非居民向境外付款”。
//            if (bopdecCommon.indexGt(txcode2, "-822030-") && ((!bopdecCommon.containsValue(tx2rem, "-非居民从境外收款-收汇-收入-") && inifrm.startsWith("dba")) || (!bopdecCommon.containsValue(tx2rem, "-非居民向境外付款-付汇-支出-") && "-dbb-dbc-".indexOf(inifrm) > 0))) {
//                return ValidResult.build(false, "第241条核查:交易编码为“822030境外存入款项/调出”，但涉外收入交易附言不包含“非居民从境外收款/收汇/收入”、对外支出交易附言不包含“非居民向境外付款/付汇/支出”。");
//            }
//        }
        //96 交易附言1或交易附言2与申报主体名称一致。
        if (!MdaUtils.isEmpty(tx2rem) && !MdaUtils.isEmpty(custnm)) {
            if (tx2rem.equals(custnm)) {
                return ValidResult.build(false, "97：交易附言2小于等于2个字节或为空格或不含中文（交易附言为全字符、全字母、全数字、填写“无”或空）");
            }
        }
        //97 交易附言1小于等于2个字节或为空格或不含中文（交易附言为全字符、全字母、全数字、填写“无”或空）；有交易编码2但交易附言2小于等于2个字节或为空格或不含中文。
        if (!MdaUtils.isEmpty(txcode2)) {
            if (MdaUtils.isEmpty(tx2rem) || "无".equals(tx2rem.trim()) || len <= 2 || !bopdecCommon.isChinese(tx2rem)) {
                return ValidResult.build(false, "94：交易编码1不为进出口核查项下（以“1货物贸易”开头或“221000来料加工工缴费收入/出料加工工缴费支出”），交易编码2为进出口核查项下的数据");
            }
        }

        /*
        优化：按照资本项目数字化的要求，对于业务来源为单一窗口、网银、手机银行等渠道的业务，根据资本项目的收支申报类型，涉及跨境收支信息报送，
        应在“交易附言”栏增加“CADS”字样；涉及境内划转信息报送，应在“交易附言”栏增加“CADS”字样。
         */
        if("dba".equals(inifrm) || "dbd".equals(inifrm)){
            dir = "I";
        }
        if("Y".equals( zbxmszh )) {
            if (!MdaUtils.isEmpty(txcode2)) {
                if (bopdecCommon.isZbxm(txcode2, dir)) {
                    if (!tx2rem.contains("CADS")) {
                        return ValidResult.build(false, "无资本项目数字化标识，请添加CADS前缀");
                    }
                }
            }
        }else {
            if (tx2rem.contains("CADS")) {
                return ValidResult.build(false, "非资本项目数字化请删除CADS字样");
            }
        }

        return null;
    }

    public WarningResult warncheckTx2rem(CheckItems checkItems,String subid){
        String custnm = checkItems.getCustnm();
        String oppuser = checkItems.getOppuser();
        String custype = checkItems.getCustype();
        String txcode2 = checkItems.getTxcode2();
        String tx2rem = checkItems.getTx2rem();
        String txrem = checkItems.getTxrem();
        String paytype = checkItems.getPaytype();
        String transName = checkItems.getTransName().toLowerCase();
        String inifrm = checkItems.getBopobjtyp().toLowerCase();

        if (!MdaUtils.isEmpty(txcode2) && MdaUtils.isEmpty(tx2rem)) {
            return WarningResult.buildEmpty(subid);
        }
        if (MdaUtils.isEmpty(tx2rem)) {
            //交易附言2为空不走后续检核
            return WarningResult.buildEmpty(subid);
        }

        if (!MdaUtils.isEmpty(tx2rem) && tx2rem.equals(txrem)) {
            return WarningResult.buildEmpty(subid);
        }
        //判断字节数
        int len = 0;
        if (!MdaUtils.isEmpty(tx2rem)) {
            String str = tx2rem;
            byte[] buff = null;
            try {
                buff = str.getBytes("GB18030");
            } catch (Exception e) {
                return WarningResult.buildEmpty(subid);
            }
            len = buff.length;
            if (len > 256) {
                return WarningResult.buildEmpty(subid);
            }
        }
        //非查询交易才校验
        //只提供提示，不控制死
        if (!transName.endsWith("sel")) {
            //38（1）涉外收入但交易附言包含“支出”、“支付”、“付汇”、“付款”、“进口”字样。剔除收付款类型为“退款”或交易附言含“运费、佣金、运输费”字样数据。
            //if (inifrm.startsWith("dba")   && Platform.containsValue($tx2rem,"-支出-支付-付汇-付款-进口-") && Platform.indexLe($paytype,"-R-") && !Platform.containsValue($tx2rem,"-运费-佣金-运输费-"))
            if (inifrm.startsWith("dba") && bopdecCommon.indexLe(paytype, "-R-") && (((txcode2.startsWith("1") || txcode2.startsWith("221")) && bopdecCommon.containsValue(tx2rem, "-进口-延期付款利息-货到付款-")) || bopdecCommon.containsValue(tx2rem, "-支出-付汇-付款-汇出-付出-撤出-预付-"))) {
                return WarningResult.build(subid, "核查第38条:涉外收入但交易附言包含“支出”、“付汇”、“付款”、“汇出”、“付出”、“撤出”、“预付”字样；或涉外收入交易编码以1开头和以221开头但交易附言包含“进口”、“延期付款利息”、“货到付款”字样。剔除收付款类型为“退款”数据。");
            }
            //39（2）对外支付但交易附言包含“收入”、“收到”、“收汇”、“收款”、“出口”字样。剔除收付款类型为“退款”或交易附言含“运费、佣金、运输费、出口加工区”字样数据。
            //    if ("-dbb-dbc-".indexOf(inifrm)>0 && Platform.containsValue($tx2rem,"-收入-收到-收汇-收款-出口-") && Platform.indexLe($paytype,"-R-") && !Platform.containsValue($tx2rem,"-运费-佣金-出口加工区-")   )
            if ("-dbb-dbc-".indexOf(inifrm) > 0 && bopdecCommon.indexLe(paytype, "-R-") && !bopdecCommon.containsValue(tx2rem, "-出口加工区-接收机-接收器-接收盒-收款机-") && (bopdecCommon.containsValue(tx2rem, "-收入-收到-收汇-收款-接收-接受-汇入-调回-汇回-收回-") || ((txcode2.startsWith("1") || txcode2.startsWith("221")) && bopdecCommon.containsValue(tx2rem, "-出口-")))) {
                return WarningResult.build(subid, "核查第39条:涉外支出但交易附言包含“收入”、“收到”、“收汇”、“收款”、“接收”、“接受”、“汇入”、“调回”、“汇回”、“收回”字样；或涉外支出交易编码以1开头和以221开头但交易附言包含“出口”字样。剔除收付款类型为“退款”或交易附言含“出口加工区”、“接收机”、“接收器”、“接收盒”、“收款机”字样数据。");
            }
            //55  交易对方名称标注以“（JW）”字样开头，但交易附言包含“OSA”或“NRA”或“境内非居民”或“FTN”或“FTF”字样。
            if (oppuser.startsWith("(JW)") && bopdecCommon.containsValueUpper(tx2rem, "-OSA-NRA-境内非居民-FTN-FTF-")) {
                return WarningResult.build(subid, "第55条核查:交易对方名称以“(JW)”开头，交易附言不能包含“OSA”或“NRA”或“境内非居民”或“FTN”或“FTF”字样");
            }
            //99 交易编码为“121010一般贸易”，但交易附言包含“进料/来料/黄金/边贸/离岸/贷款/加工费/特殊/保税区/无需报关/未报关/软件开发/广告费/本金/服务(非“服务器”）/网上/报酬/留学/生活费/学费/境内交易”。
            if (bopdecCommon.indexGt(txcode2, "-121010-") && (bopdecCommon.containsValue(tx2rem, "-进料-来料-黄金-边贸-离岸-贷款-加工费-特殊-保税区-无需报关-未报关-软件开发-广告费-本金-网上-报酬-留学-生活费-学费-境内交易-市场采购贸易-") || (!tx2rem.contains("服务器") && tx2rem.contains("服务"))) && !bopdecCommon.containsValue(tx2rem, "-特殊流体-特殊监管-特殊退汇-")) {
                return WarningResult.build(subid, "第99条核查:交易编码为“121010一般贸易”，但交易附言包含“进料/来料/黄金/边贸/离岸/贷款/加工费/特殊/保税区/无需报关/未报关/软件开发/广告费/本金/服务(非“服务器”）/网上/报酬/留学/生活费/学费/境内交易/市场采购贸易”。剔除交易附言含“特殊流体”、“特殊监管”、“特殊退汇”字样。");
            }
            //100 交易编码为“121020进料加工贸易”，但交易附言不包含“进料”或包含“一般贸易/来料/黄金/进口加工/电子商务”。
            if (bopdecCommon.indexGt(txcode2, "-121020-") && (bopdecCommon.containsValue(tx2rem, "-一般贸易-来料-黄金-进口加工-电子商务-市场采购贸易-") || !tx2rem.contains("进料"))) {
                return WarningResult.build(subid, "第100条核查:交易编码为“121020进料加工贸易”，但交易附言不包含“进料”或包含“一般贸易/来料/黄金/进口加工/电子商务/市场采购贸易”");
            }
            //101 交易编码为“121030海关特殊监管区域及保税监管场所进出境物流货物”，但交易附言包含“进料/来料/离岸/黄金/一般贸易”。
            if (bopdecCommon.indexGt(txcode2, "-121030-") && bopdecCommon.containsValue(tx2rem, "-进料-来料-离岸-黄金-一般贸易-市场采购贸易-")) {
                return WarningResult.build(subid, "第101条核查:交易编码为“121030海关特殊监管区域及保税监管场所进出境物流货物”，但交易附言包含“进料/来料/离岸/黄金/一般贸易/市场采购贸易”");
            }
            //102 交易编码为“121080边境小额贸易”，但交易附言包含“台/边民互市/黄金/一般贸易/易货（非贸易货）”。
            if (bopdecCommon.indexGt(txcode2, "-121080-") && (bopdecCommon.containsValue(tx2rem, "-台-边民互市-黄金-一般贸易-市场采购贸易-") || (tx2rem.contains("易货") && !tx2rem.contains("贸易货")))) {
                return WarningResult.build(subid, "第102条核查:交易编码为“121080边境小额贸易”，但交易附言包含“台/边民互市/黄金/一般贸易/易货（非贸易货）/市场采购贸易”。");
            }
            //103 交易编码为“121090对外承包工程货物出口”，但交易附言不包含“承包工程”或包含“黄金/一般贸易/边境/小额/维修/维护/服务/劳务”。
            if (bopdecCommon.indexGt(txcode2, "-121090-") && (!bopdecCommon.containsValue(tx2rem, "-承包工程-") || bopdecCommon.containsValue(tx2rem, "-黄金-一般贸易-边境-小额-维修-维护-服务-劳务-市场采购贸易-"))) {
                return WarningResult.build(subid, "第103条核查:交易编码为“121090对外承包工程货物出口”，但交易附言不包含“承包工程”或包含“黄金/一般贸易/边境/小额/维修/维护/服务/劳务/市场采购贸易”。");
            }
            //104 交易编码为“121990其他纳入海关统计的货物贸易”，但包含“未纳入/不纳入/没纳入/一般贸易/来料/进料/黄金/边境小额/不报关/不出境/未报关/无需报关/无须报关”。
            if (bopdecCommon.indexGt(txcode2, "-121990-") && bopdecCommon.containsValue(tx2rem, "-未纳入-不纳入-没纳入-一般贸易-来料-进料-黄金-边境小额-不报关-不出境-未报关-无需报关-无须报关-")) {
                return WarningResult.build(subid, "第104条核查:交易编码为“121990其他纳入海关统计的货物贸易”，但包含“未纳入/不纳入/没纳入/一般贸易/来料/进料/黄金/边境小额/不报关/不出境/未报关/无需报关/无须报关”");
            }
            //105 交易编码为“122010离岸转手买卖”，但交易附言不包含“离岸”或包含“一般贸易/来料/进料/转口/在岸/特殊/保税区”。
            if (bopdecCommon.indexGt(txcode2, "-122010-") && (bopdecCommon.containsValue(tx2rem, "-一般贸易-来料-进料-转口-在岸-特殊-保税区-") || !bopdecCommon.containsValue(tx2rem, "-离岸-")) && !bopdecCommon.containsValue(tx2rem, "-特殊流体-特殊监管-特殊退汇-")) {
                return WarningResult.build(subid, "第105条核查:交易编码为“122010离岸转手买卖”，但交易附言不包含“离岸”或包含“一般贸易/来料/进料/转口/在岸/特殊/保税区”。剔除交易附言含“特殊流体”、“特殊监管”、“特殊退汇”字样。");
            }
            //106 交易编码为“122020未纳入海关统计的非货币黄金”，但交易附言不包含“金”或包含“金属/金币/珠宝/手表/饰/一般贸易”。
            if (bopdecCommon.indexGt(txcode2, "-122020-") && (bopdecCommon.containsValue(tx2rem, "-金属-金币-珠宝-手表-饰-一般贸易-") || !tx2rem.contains("金"))) {
                return WarningResult.build(subid, "第106条核查:交易编码为“122020未纳入海关统计的非货币黄金”，但交易附言不包含“金”或包含“金属/金币/珠宝/手表/饰/一般贸易”。");
            }
            //107 交易编码为“122030未纳入海关统计的网络购物”，但交易附言包含“黄金/来料/进料/一般贸易/软件/音像/游戏币”。
            if (bopdecCommon.indexGt(txcode2, "-122030-") && bopdecCommon.containsValue(tx2rem, "-黄金-来料-进料-一般贸易-软件-音像-游戏币-")) {
                return WarningResult.build(subid, "第107条核查:交易编码为“122030未纳入海关统计的网络购物”，但交易附言包含“黄金/来料/进料/一般贸易/软件/音像/游戏币”");
            }
            //108 交易编码为“122990其他未纳入海关统计的货物贸易”，但交易附言包含“网/海淘/黄金/一般贸易/来料/进料/电子商务/虚拟/软件/边境小额/旅游购物”。
            if (bopdecCommon.indexGt(txcode2, "-122990-") && bopdecCommon.containsValue(tx2rem, "-网购-网络-海淘-黄金-一般贸易-来料-进料-电子商务-虚拟-软件-边境小额-旅游购物-市场采购贸易-已报关-")) {
                return WarningResult.build(subid, "第108条核查:交易编码为“122990其他未纳入海关统计的货物贸易”，但交易附言包含“网购/网络/海淘/黄金/一般贸易/来料/进料/电子商务/虚拟/软件/边境小额/旅游购物/市场采购贸易/已报关”。");
            }
            //109 交易编码为“221000来料加工工缴费收入/出料加工工缴费支出”，但交易附言不包含“来料/工缴费/加工费/出料/带料”字样或包含“一般贸易/进料/货款”。
            if (bopdecCommon.indexGt(txcode2, "-221000-") && (!bopdecCommon.containsValue(tx2rem, "-来料-工缴费-加工费-出料-带料-") || bopdecCommon.containsValue(tx2rem, "-一般贸易-进料-货款-"))) {
                return WarningResult.build(subid, "第109条核查:交易编码为“221000来料加工工缴费收入/出料加工工缴费支出”，但交易附言不包含“来料/工缴费/加工费/出料/带料”字样或包含“一般贸易/进料/货款”");
            }
            //110 交易编码为“222011涉及我国出口的海洋货运服务”，但交易附言包含“进口/空运/陆运/佣金/货款/代理/客运/租（但不包含‘人员’）/速遣费/滞期费”。
            if (bopdecCommon.indexGt(txcode2, "-222011-") && (bopdecCommon.containsValue(tx2rem, "-进口-空运-陆运-佣金-货款-代理-客运-速遣费-滞期费-") || (!bopdecCommon.containsValue(tx2rem, "-人员-") && bopdecCommon.containsValue(tx2rem, "-租-")))) {
                return WarningResult.build(subid, "第110条核查:交易编码为“222011涉及我国出口的海洋货运服务”，但交易附言包含“进口/空运/陆运/佣金/货款/代理/客运/租（但不包含‘人员’）/速遣费/滞期费”");
            }
            //111 交易编码为“222012涉及我国进口的海洋货运服务”，但交易附言包含“出口/空运/陆运/佣金/货款/代理/客运/租（但不包含‘人员’）/速遣费/滞期费”。
            if (bopdecCommon.indexGt(txcode2, "-222012-") && (bopdecCommon.containsValue(tx2rem, "-出口-空运-陆运-佣金-货款-代理-客运-速遣费-滞期费-") || (!bopdecCommon.containsValue(tx2rem, "-人员-") && bopdecCommon.containsValue(tx2rem, "-租-")))) {
                return WarningResult.build(subid, "第111条核查:交易编码为“222012涉及我国进口的海洋货运服务”，但交易附言包含“出口/空运/陆运/佣金/货款/代理/客运/租（但不包含‘人员’）/速遣费/滞期费”");
            }
            //112 交易编码为“222013不涉及我国进出口的海洋货运服务”，但交易附言包含“空运/陆运/港口/仓储/装卸/搬运/引航/牵引/导航/检/修/使%费/客运”。
            //由于%不确定暂时先注释
            //    if (Platform.indexGt($txcode2,"-222013-")  && Platform.containsValue($tx2rem,"-空运-陆运-港口-仓储-装卸-搬运-引航-牵引-导航-检-修-使%费-客运-"))
            if (bopdecCommon.indexGt(txcode2, "-222013-") && (bopdecCommon.containsValue(tx2rem, "-空运-陆运-港口-仓储-装卸-搬运-引航-牵引-导航-检-修-客运-") || bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(tx2rem, "使", "费")))) {
                return WarningResult.build(subid, "第112条核查:交易编码为“222013不涉及我国进出口的海洋货运服务”，但交易附言包含“空运/陆运/港口/仓储/装卸/搬运/引航/牵引/导航/检/修/使%费/客运”");
            }
            //113 交易编码为“222014海运客运”，但交易附言包含“空运/陆运/出口/进口”。
            if (bopdecCommon.indexGt(txcode2, "-222014-") && bopdecCommon.containsValue(tx2rem, "-空运-陆运-出口-进口-")) {
                return WarningResult.build(subid, "第113条核查:交易编码为“222014海运客运”，但交易附言包含“空运/陆运/出口/进口”");
            }
            //114 交易编码为“222019其他海运服务”，但交易附言包含“其他/空运/陆运/速遣/清关/入渔/滞/运费/保险/修”。
            if (bopdecCommon.indexGt(txcode2, "-222019-") && bopdecCommon.containsValue(tx2rem, "-空运-陆运-速遣-清关-入渔-滞-运费-保险-修-")) {
                return WarningResult.build(subid, "第114条核查:交易编码为“222019其他海运服务”，但交易附言包含“空运/陆运/速遣/清关/入渔/滞/运费/保险/修”");
            }
            //115 交易编码为“222021涉及我国出口的空中货运服务”，但交易附言包含“进口/海运/陆运/佣金/货款/代理/客运/租”。
            if (bopdecCommon.indexGt(txcode2, "-222021-") && bopdecCommon.containsValue(tx2rem, "-进口-海运-陆运-佣金-货款-代理-客运-租-")) {
                return WarningResult.build(subid, "第115条核查:交易编码为“222021涉及我国出口的空中货运服务”，但交易附言包含“进口/海运/陆运/佣金/货款/代理/客运/租”");
            }
            //116 交易编码为“222022涉及我国进口的空中货运服务”，但交易附言包含“出口/海运/陆运/佣金/货款/代理/客运/租”。
            if (bopdecCommon.indexGt(txcode2, "-222022-") && bopdecCommon.containsValue(tx2rem, "-出口-海运-陆运-佣金-货款-代理-客运-租-")) {
                return WarningResult.build(subid, "第116条核查:交易编码为“222022涉及我国进口的空中货运服务”，但交易附言包含“出口/海运/陆运/佣金/货款/代理/客运/租”");
            }
            //117交易编码为“222023不涉及我国进出口的空中货运服务”，但交易附言包含“海运/陆运/港口/仓储/装卸/搬运/引航/牵引/导航/检/修/使%费/客运”。
            //由于%不确定暂时先注释
            // if (Platform.indexGt($txcode2,"-222023-")  && Platform.containsValue($tx2rem,"-海运-陆运-港口-仓储-装卸-搬运-引航-牵引-导航-检-修-使%费-客运-"))
            if (bopdecCommon.indexGt(txcode2, "-222023-") && (bopdecCommon.containsValue(tx2rem, "-海运-陆运-港口-仓储-装卸-搬运-引航-牵引-导航-检-修-客运-") || bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(tx2rem, "使", "费")))) {
                return WarningResult.build(subid, "第117条核查:交易编码为“222023不涉及我国进出口的空中货运服务”，但交易附言包含“海运/陆运/港口/仓储/装卸/搬运/引航/牵引/导航/检/修/使%费/客运”");
            }
            //118交易编码为“222024空运客运”，但交易附言包含“海运/陆运/出口/进口”。
            if (bopdecCommon.indexGt(txcode2, "-222024-") && bopdecCommon.containsValue(tx2rem, "-海运-陆运-出口-进口-")) {
                return WarningResult.build(subid, "第118条核查:交易编码为“222024空运客运”，但交易附言包含“海运/陆运/出口/进口”");
            }
            //119交易编码为“222029其他空运服务”，但交易附言包含“海运/陆运/速遣/清关/滞/运费/保险/修”。
            if (bopdecCommon.indexGt(txcode2, "-222029-") && bopdecCommon.containsValue(tx2rem, "-海运-陆运-速遣-清关-滞-运费-保险-修-")) {
                return WarningResult.build(subid, "第119条核查:交易编码为“222029其他空运服务”，但交易附言包含“海运/陆运/速遣/清关/滞/运费/保险/修”");
            }
            //120交易编码为“222031涉及我国出口的其他运输方式货运服务”，但交易附言包含“进口/海运/空运/佣金/货款/代理/客运/租”。
            if (bopdecCommon.indexGt(txcode2, "-222031-") && bopdecCommon.containsValue(tx2rem, "-进口-海运-空运-佣金-货款-代理-客运-租-")) {
                return WarningResult.build(subid, "第120条核查:交易编码为“222031涉及我国出口的其他运输方式货运服务”，但交易附言包含“进口/海运/空运/佣金/货款/代理/客运/租”");
            }
            //121交易编码为“222032涉及我国进口的其他运输方式货运服务”，但交易附言包含“出口/海运/空运/佣金/货款/代理/客运/租”。
            if (bopdecCommon.indexGt(txcode2, "-222032-") && bopdecCommon.containsValue(tx2rem, "-出口-海运-空运-佣金-货款-代理-客运-租-")) {
                return WarningResult.build(subid, "第121条核查:交易编码为“222032涉及我国进口的其他运输方式货运服务”，但交易附言包含“出口/海运/空运/佣金/货款/代理/客运/租”");
            }
            //122交易编码为“222033不涉及我国进出口的其他运输方式货运服务”，但交易附言包含“海运/空运/港口/仓储/装卸/搬运/引航/牵引/导航/检/修/使%费/客运”。
            //由于%不确定暂时先注释
            //if (Platform.indexGt($txcode2,"-222033-")  && Platform.containsValue($tx2rem,"-海运-空运-港口-仓储-装卸-搬运-引航-牵引-导航-检-修-使%费-客运-"))
            if (bopdecCommon.indexGt(txcode2, "-222033-") && (bopdecCommon.containsValue(tx2rem, "-海运-空运-港口-仓储-装卸-搬运-引航-牵引-导航-检-修-客运-") || bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(tx2rem, "使", "费")))) {
                return WarningResult.build(subid, "第122条核查:交易编码为“222033不涉及我国进出口的其他运输方式货运服务”，但交易附言包含“海运/空运/港口/仓储/装卸/搬运/引航/牵引/导航/检/修/使%费/客运”");
            }
            //123交易编码为“222034其他运输方式客运”，但交易附言包含“海运/空运/出口/进口”。
            if (bopdecCommon.indexGt(txcode2, "-222034-") && bopdecCommon.containsValue(tx2rem, "-海运-空运-出口-进口-")) {
                return WarningResult.build(subid, "第123条核查:交易编码为“222034其他运输方式客运”，但交易附言包含“海运/空运/出口/进口”");
            }
            //124交易编码为“222039其他运输方式的其他服务”，但交易附言包含“空运/海运/速遣/入渔/滞/运费/保险/快递/修”。
            if (bopdecCommon.indexGt(txcode2, "-222039-") && bopdecCommon.containsValue(tx2rem, "-空运-海运-速遣-入渔-滞-运费-保险-快递-修-")) {
                return WarningResult.build(subid, "第124条核查:交易编码为“222039其他运输方式的其他服务”，但交易附言包含“空运/海运/速遣/入渔/滞/运费/保险/快递/修”");
            }
            //125交易编码为“222040邮政及寄递服务”，但交易附言包含“电信/电子/通讯/通信”。
            if (bopdecCommon.indexGt(txcode2, "-222040-") && bopdecCommon.containsValue(tx2rem, "-电信-电子-通讯-通信-")) {
                return WarningResult.build(subid, "第125条核查:交易编码为“222040邮政及寄递服务”，但交易附言包含“电信/电子/通讯/通信”");
            }
            //126交易编码为“223010公务及商务旅行”，但交易附言包含“私/留学/学习/学费/培训”。
            if (bopdecCommon.indexGt(txcode2, "-223010-") && bopdecCommon.containsValue(tx2rem, "-私-留学-学习-学费-培训-个人-")) {
                return WarningResult.build(subid, "第126条核查:交易编码为“223010公务及商务旅行”，但交易附言包含“私/留学/学习/学费/培训/个人”");
            }
            //127交易编码为“223021就医及健康相关旅行”，但交易附言包含“药品/器械/远程/网络/兽医/咨询/球会”。
            if (bopdecCommon.indexGt(txcode2, "-223021-") && bopdecCommon.containsValue(tx2rem, "-药品-器械-远程-网络-兽医-咨询-球会-")) {
                return WarningResult.build(subid, "第127条核查:交易编码为“223021就医及健康相关旅行”，但交易附言包含“药品/器械/远程/网络/兽医/咨询/球会”");
            }
            //128交易编码为“223022留学及教育相关旅行（一年以上）”，但交易附言包含“探亲/旅游/远程/签证/中介/以下/以内/年内”。
            if (bopdecCommon.indexGt(txcode2, "-223022-") && bopdecCommon.containsValue(tx2rem, "-探亲-旅游-远程-签证-中介-以下-以内-年内-")) {
                return WarningResult.build(subid, "第128条核查:交易编码为“223022留学及教育相关旅行（一年以上）”，但交易附言包含“探亲/旅游/远程/签证/中介/以下/以内/年内”");
            }
            //129交易编码为“223023留学及教育相关旅行（一年及一年以下）”，但交易附言包含“探亲/旅游/远程/签证/一年以上/1年以上/中介”。
            if (bopdecCommon.indexGt(txcode2, "-223023-") && bopdecCommon.containsValue(tx2rem, "-探亲-旅游-远程-签证-一年以上-1年以上-中介-")) {
                return WarningResult.build(subid, "第129条核查:交易编码为“223023留学及教育相关旅行（一年及一年以下）”，但交易附言包含“探亲/旅游/远程/签证/一年以上/1年以上/中介”");
            }
            //130交易编码为“223029其他私人旅行”，但交易附言包含“教育/培训/公务/因公/商务/考察/会议/学/差旅/出差/会务”。
            if (bopdecCommon.indexGt(txcode2, "-223029-") && bopdecCommon.containsValue(tx2rem, "-教育-培训-公务-因公-商务-考察-会议-学-差旅-出差-会务-")) {
                return WarningResult.build(subid, "第130条核查:交易编码为“223029其他私人旅行”，但交易附言包含“教育/培训/公务/因公/商务/考察/会议/学/差旅/出差/会务”");
            }
            //131交易编码为“224010境外建设”，但交易附言包含“设计/咨询/内/技术/投资/采矿/开采”，剔除交易对方名称以“（JN）”字样开头的数据。
            if (bopdecCommon.indexGt(txcode2, "-224010-") && (bopdecCommon.containsValue(tx2rem, "-设计-咨询-内-技术-投资-采矿-开采-") && !oppuser.startsWith("(JN)"))) {
                return WarningResult.build(subid, "第131条核查:交易编码为“224010境外建设”，但交易附言包含“设计/咨询/内/技术/投资/采矿/开采”，剔除交易对方名称以“（JN）”字样开头的数据");
            }
            //132交易编码为“224020境内建设”，但交易附言包含“设计/咨询/外/技术/投资/采矿/开采”。
            if (bopdecCommon.indexGt(txcode2, "-224020-") && bopdecCommon.containsValue(tx2rem, "-设计-咨询-外-技术-投资-采矿-开采-")) {
                return WarningResult.build(subid, "第132条核查:交易编码为“224020境内建设”，但交易附言包含“设计/咨询/外/技术/投资/采矿/开采”");
            }
            //133交易编码为“225010寿险”，但交易附言包含“定期人寿/非返还/平安险/水渍险/一切险/社保/财产/伤害/意外”。
            if (bopdecCommon.indexGt(txcode2, "-225010-") && bopdecCommon.containsValue(tx2rem, "-定期人寿-非返还-平安险-水渍险-一切险-社保-财产-伤害-意外-")) {
                return WarningResult.build(subid, "第133条核查:交易编码为“225010寿险”，但交易附言包含“定期人寿/非返还/平安险/水渍险/一切险/社保/财产/伤害/意外”");
            }
            //134交易编码为“225021为我国出口提供的保险”，但交易附言包含“年金/信用/进口/进出口/社保”。
            if (bopdecCommon.indexGt(txcode2, "-225021-") && bopdecCommon.containsValue(tx2rem, "-年金-信用-进口-进出口-社保-")) {
                return WarningResult.build(subid, "第134条核查:交易编码为“225021为我国出口提供的保险”，但交易附言包含“年金/信用/进口/进出口/社保”");
            }
            //135交易编码为“225022为我国进口提供的保险”，但交易附言包含“年金/信用/出口/进出口/社保”。
            if (bopdecCommon.indexGt(txcode2, "-225022-") && bopdecCommon.containsValue(tx2rem, "-年金-信用-出口-进出口-社保-")) {
                return WarningResult.build(subid, "第135条核查:交易编码为“225022为我国进口提供的保险”，但交易附言包含“年金/信用/出口/进出口/社保”");
            }
            //136交易编码为“225029其他非寿险”，但交易附言包含“养老/年金/平安险/水渍险/再保险/货/社保/理赔/赔偿/赔款/其他”。
            if (bopdecCommon.indexGt(txcode2, "-225029-") && bopdecCommon.containsValue(tx2rem, "-养老-年金-平安险-水渍险-再保险-货-社保-理赔-赔偿-赔款-其他-") && !bopdecCommon.containsValue(tx2rem, "-其他非寿险-")) {
                return WarningResult.build(subid, "第136条核查:交易编码为“225029其他非寿险”，但交易附言包含“养老/年金/平安险/水渍险/再保险/货/社保/理赔/赔偿/赔款/其他”。剔除交易附言包含“其他非寿险”。");
            }
            //137交易编码为“225050保险辅助服务”，但交易附言包含“保费”。
            if (bopdecCommon.indexGt(txcode2, "-225050-") && bopdecCommon.containsValue(tx2rem, "-保费-")) {
                return WarningResult.build(subid, "第137条核查:交易编码为“225050保险辅助服务”，但交易附言包含“保费”");
            }
            //138交易编码为“226000金融服务”，但交易附言包含“认证/利息/保险/退休”。
            if (bopdecCommon.indexGt(txcode2, "-226000-") && bopdecCommon.containsValue(tx2rem, "-认证-利息-保险-退休-")) {
                return WarningResult.build(subid, "第138条核查:交易编码为“226000金融服务”，但交易附言包含“认证/利息/保险/退休”");
            }
            //139交易编码为“227010电信服务”，但交易附言包含“咨询/数据库/数据信息/计算机/安装/信息费/数据费/软件/设备安装/工程”。
            if (bopdecCommon.indexGt(txcode2, "-227010-") && bopdecCommon.containsValue(tx2rem, "-咨询-数据库-数据信息-计算机-安装-信息费-数据费-软件-设备安装-工程-")) {
                return WarningResult.build(subid, "第139条核查:交易编码为“227010电信服务”，但交易附言包含“咨询/数据库/数据信息/计算机/安装/信息费/数据费/软件/设备安装/工程”");
            }
            //140交易编码为“227020计算机服务”，但交易附言包含“进口/出口/报刊/书刊/动画”。
            if (bopdecCommon.indexGt(txcode2, "-227020-") && bopdecCommon.containsValue(tx2rem, "-进口-出口-报刊-书刊-动画-")) {
                return WarningResult.build(subid, "第140条核查:交易编码为“227020计算机服务”，但交易附言包含“进口/出口/报刊/书刊/动画”");
            }
            //141交易编码为“227030信息服务”，但交易附言包含“进口/出口/税/计算机/技术/版面费/电信”。
            if (bopdecCommon.indexGt(txcode2, "-227030-") && bopdecCommon.containsValue(tx2rem, "-进口-出口-税-计算机-技术-版面费-电信-")) {
                return WarningResult.build(subid, "第141条核查:交易编码为“227030信息服务”，但交易附言包含“进口/出口/税/计算机/技术/版面费/电信”");
            }
            //142交易编码为“228010研发成果转让费及委托研发”，但交易附言包含“使用/许可/特许/计算机/软件/视听/音像/检测/维修/修理/实验/检验/检疫/测验/测试/调试/售后/复制/分销/版面费”。
            if (bopdecCommon.indexGt(txcode2, "-228010-") && bopdecCommon.containsValue(tx2rem, "-使用-许可-特许-计算机-软件-视听-音像-检测-维修-修理-实验-检验-检疫-测验-测试-调试-售后-复制-分销-版面费-")) {
                return WarningResult.build(subid, "第142条核查:交易编码为“228010研发成果转让费及委托研发”，但交易附言包含“使用/许可/特许/计算机/软件/视听/音像/检测/维修/修理/实验/检验/检疫/测验/测试/调试/售后/复制/分销/版面费”");
            }
            //143交易编码为“228021法律服务”，但交易附言包含“会计/审计/管理/技术/税务/账/统计/帐/检验/测试/UL/产品认证/质量认证”。
            if (bopdecCommon.indexGt(txcode2, "-228021-") && bopdecCommon.containsValue(tx2rem, "-会计-审计-管理-技术-税务-账-统计-帐-检验-测试-UL-产品认证-质量认证-")) {
                return WarningResult.build(subid, "第143条核查:交易编码为“228021法律服务”，但交易附言包含“会计/审计/管理/技术/税务/账/统计/帐/检验/测试/UL/产品认证/质量认证”");
            }
            //144交易编码为“228022会计服务”，但交易附言包含“签证/佣金/法律/律师/仲裁/辩护/诉讼/受理/官司/监护”。
            if (bopdecCommon.indexGt(txcode2, "-228022-") && bopdecCommon.containsValue(tx2rem, "-签证-佣金-法律-律师-仲裁-辩护-诉讼-受理-官司-监护-")) {
                return WarningResult.build(subid, "第144条核查:交易编码为“228022会计服务”，但交易附言包含“签证/佣金/法律/律师/仲裁/辩护/诉讼/受理/官司/监护”");
            }
            //145交易编码为“228023管理咨询和公共关系服务”，但交易附言包含“技术/佣金/保险/计算机/金融/产品认证/中标服务费/签证/养老金/会计/审计/记账/税务/环保服务/国际会议报名费/UL/公告服务费/版面费”。
            if (bopdecCommon.indexGt(txcode2, "-228023-") && bopdecCommon.containsValue(tx2rem, "-技术-佣金-保险-计算机-金融-中标服务费-签证-养老金-会计-审计-记账-税务-环保服务-国际会议报名费-UL-公告服务费-版面费-") && !bopdecCommon.containsValue(tx2rem, "-签证代理-签证代办-代理签证-代办签证-")) {
                return WarningResult.build(subid, "第145条核查:交易编码为“228023管理咨询和公共关系服务”，但交易附言包含“技术/佣金/保险/计算机/金融/中标服务费/签证/养老金/会计/审计/记账/税务/环保服务/国际会议报名费/UL/公告服务费/版面费”。剔除交易附言包含“签证代理”、“签证代办”、“代理签证”、“代办签证”字样。");
            }
            //146交易编码为“228024广告服务”，但交易附言包含“展/出版”。
            if (bopdecCommon.indexGt(txcode2, "-228024-") && bopdecCommon.containsValue(tx2rem, "-展-出版-") && !(bopdecCommon.containsValue(tx2rem, "-展-") && bopdecCommon.containsValue(tx2rem, "-广告-"))) {
                return WarningResult.build(subid, "第146条核查:交易编码为“228024广告服务”，但交易附言包含“展/出版”。剔除交易附言既包含“展”又含“广告”字样的数据。");
            }
            //147交易编码为“228025展会服务”，但交易附言包含“版面/营销/推广/推销/广告/刊登”。
            if (bopdecCommon.indexGt(txcode2, "-228025-") && bopdecCommon.containsValue(tx2rem, "-版面-营销-推广-推销-广告-刊登-")) {
                return WarningResult.build(subid, "第147条核查:交易编码为“228025展会服务”，但交易附言包含“版面/营销/推广/推销/广告/刊登”");
            }
            //148交易编码为“228026市场调查、民意测验服务”，但交易附言包含“广告/展/推销”。
            if (bopdecCommon.indexGt(txcode2, "-228026-") && bopdecCommon.containsValue(tx2rem, "-广告-展-推销-")) {
                return WarningResult.build(subid, "第148条核查:交易编码为“228026市场调查、民意测验服务”，但交易附言包含“广告/展/推销”");
            }
            //149交易编码为“228031建筑、工程技术服务”，但交易附言包含“废物/污染/测量/产品测试/认证技术检验/产品检验检疫/服装/产品/计算机工程/境外建设/境内建设/石油/天然气/环保服务/采矿/佣金/管理/监理”。
            if (bopdecCommon.indexGt(txcode2, "-228031-") && bopdecCommon.containsValue(tx2rem, "-废物-污染-测量-产品测试-认证技术检验-产品检验检疫-服装-产品-计算机工程-境外建设-境内建设-石油-天然气-环保服务-采矿-佣金-管理-监理-")) {
                return WarningResult.build(subid, "第149条核查:交易编码为“228031建筑、工程技术服务”，但交易附言包含“废物/污染/测量/产品测试/认证技术检验/产品检验检疫/服装/产品/计算机工程/境外建设/境内建设/石油/天然气/环保服务/采矿/佣金/管理/监理”");
            }
            //150交易编码为“228032废物处理和防止污染服务”，但交易附言包含“许可/建筑/工程测量/制图/产品测试/认证/检验/检疫”。
            if (bopdecCommon.indexGt(txcode2, "-228032-") && bopdecCommon.containsValue(tx2rem, "-许可-建筑-工程测量-制图-产品测试-认证-检验-检疫-")) {
                return WarningResult.build(subid, "第150条核查:交易编码为“228032废物处理和防止污染服务”，但交易附言包含“许可/建筑/工程测量/制图/产品测试/认证/检验/检疫”");
            }
            //151交易编码为“228033农业和采矿服务”，但交易附言包含“测量/制图/产品测试/认证技术/产品检验检疫”。
            if (bopdecCommon.indexGt(txcode2, "-228033-") && bopdecCommon.containsValue(tx2rem, "-测量-制图-产品测试-认证技术-产品检验检疫-")) {
                return WarningResult.build(subid, "第151条核查:交易编码为“228033农业和采矿服务”，但交易附言包含“测量/制图/产品测试/认证技术/产品检验检疫”");
            }
            //152交易编码为“228039其他技术服务”，但交易附言包含“其他/计算机/电脑/研发/开发/佣金/货款/样品费/印刷/展览/会议/维护/专利/开采/建筑/动物检疫/废物/污染/污水/废气/放射性/环保服务/修”。
            if (bopdecCommon.indexGt(txcode2, "-228039-") && bopdecCommon.containsValue(tx2rem, "-计算机-电脑-研发-开发-佣金-货款-样品费-印刷费-展览-会议-维护-专利-开采-建筑-动物检疫-废物-污染-污水-废气-放射性-环保服务-修-")) {
                return WarningResult.build(subid, "第152条核查:交易编码为“228039其他技术服务”，但交易附言包含“计算机/电脑/研发/开发/佣金/货款/样品费/印刷费/展览/会议/维护/专利/开采/建筑/动物检疫/废物/污染/污水/废气/放射性/环保服务/修”");
            }
            //153交易编码为“228040经营性租赁服务”，但交易附言不包含“租”或包含“金融/融资/电信”。
            if (bopdecCommon.indexGt(txcode2, "-228040-") && (!bopdecCommon.containsValue(tx2rem, "-租-") || bopdecCommon.containsValue(tx2rem, "-金融-融资-电信-"))) {
                return WarningResult.build(subid, "第153条核查:交易编码为“228040经营性租赁服务”，但交易附言不包含“租”或包含“金融/融资/电信”");
            }
            //154交易编码为“228050货物或服务交易佣金及相关服务”，但交易附言不包含“佣/回扣/中介/提成/费/分成”或包含“运/金融/险”。
            if (bopdecCommon.indexGt(txcode2, "-228050-") && (!bopdecCommon.containsValue(tx2rem, "-佣-回扣-中介-提成-费-分成-") || bopdecCommon.containsValue(tx2rem, "-运-金融-险-"))) {
                return WarningResult.build(subid, "第154条核查:交易编码为“228050货物或服务交易佣金及相关服务”，但交易附言不包含“佣/回扣/中介/提成/费/分成”或包含“运/金融/险”");
            }
            //155交易编码为“228060办事处、代表处等办公经费”，但交易附言包含“房/屋/地/建筑/装修”。
            if (bopdecCommon.indexGt(txcode2, "-228060-") && bopdecCommon.containsValue(tx2rem, "-房-屋-地-建筑-装修-")) {
                return WarningResult.build(subid, "第155条核查:交易编码为“228060办事处、代表处等办公经费”，但交易附言包含“房/屋/地/建筑/装修”");
            }
            //156交易编码为“228990上述未提及的其他商业服务”，但交易附言包含“样品/进料/来料/出料/带料/邮购/学/商务/标签/注册/检/理财/技术/差旅/租/捐/签证/修/赔/计算机/网络/税/旅游/运费/猎头/招聘/装卸/罚/售后/研发/保证金/生活费/快件/仓储/科研/测量/制图/测试/装修/设计/推广/制作/经费/租赁/开采/返利/法律/会计/版面费”。
            if (bopdecCommon.indexGt(txcode2, "-228990-") && bopdecCommon.containsValue(tx2rem, "-样品-进料-来料-出料-带料-邮购-学-商务-注册-检-理财-技术-差旅-租-捐-签证-修-赔-计算机-网络-税-旅游-运费-猎头-招聘-装卸-罚-售后-研发-保证金-生活费-快件-仓储-科研-测量-制图-测试-装修-设计-推广-经费-租赁-开采-返利-法律-会计-版面费-") && !(bopdecCommon.containsValue(tx2rem, "-租-") && bopdecCommon.containsValue(tx2rem, "-中介-"))) {
                return WarningResult.build(subid, "第156条核查:交易编码为“228990上述未提及的其他商业服务”，但交易附言包含“样品/进料/来料/出料/带料/邮购/学/商务/注册/检/理财/技术/差旅/租/捐/签证/修/赔/计算机/网络/税/旅游/运费/猎头/招聘/装卸/罚/售后/研发/保证金/生活费/快件/仓储/科研/测量/制图/测试/装修/设计/推广/经费/租赁/开采/返利/法律/会计/版面费”。剔除交易附言中同时包含“租”及“中介”字样的数据。");
            }
            //157交易编码“为229010视听和相关服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），或包含“进口/出口/许可/转播/复制/分销”。
            if (bopdecCommon.indexGt(txcode2, "-229010-") && (("-dbb-dbc-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(tx2rem, "-居民赴国外-居民前往国外-")) || ("-dba-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(tx2rem, "-非居民赴中国-非居民来中国-")) || bopdecCommon.containsValue(tx2rem, "-进口-出口-许可-转播-复制-分销-"))) {
                return WarningResult.build(subid, "第157条核查:交易编码“为229010视听和相关服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），或包含“进口/出口/许可/转播/复制/分销”");
            }
            //158交易编码为“229020教育服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），或包含“留学”。
            if (bopdecCommon.indexGt(txcode2, "-229020-") && (("-dbb-dbc-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(tx2rem, "-居民赴国外-居民前往国外-")) || ("-dba-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(tx2rem, "-非居民赴中国-非居民来中国-")) || bopdecCommon.containsValue(tx2rem, "-留学-")) && !bopdecCommon.containsValue(tx2rem, "-留学咨询-")) {
                return WarningResult.build(subid, "第158条核查:交易编码为“229020教育服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），或包含“留学”。剔除交易附言含“留学咨询”字样的数据。");
            }
            //159交易编码为“229030医疗服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），或包含“就医/兽医”。
            if (bopdecCommon.indexGt(txcode2, "-229030-") && (("-dbb-dbc-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(tx2rem, "-居民赴国外-居民前往国外-")) || ("-dba-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(tx2rem, "-非居民赴中国-非居民来中国-")) || bopdecCommon.containsValue(tx2rem, "-就医-兽医-"))) {
                return WarningResult.build(subid, "第159条核查:交易编码为“229030医疗服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），或包含“就医/兽医”");
            }
            //160交易编码为“229990其他文化和娱乐服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向），”。
            if (bopdecCommon.indexGt(txcode2, "-229990-") && (("-dbb-dbc-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(tx2rem, "-居民赴国外-居民前往国外-")) || ("-dba-".indexOf(inifrm) > 0 && bopdecCommon.containsValue(tx2rem, "-非居民赴中国-非居民来中国-")))) {
                return WarningResult.build(subid, "第160条核查:交易编码为“229990其他文化和娱乐服务”，但交易附言包含“非居民赴中国”或“非居民来中国”（收入方向）、“居民赴国外”或“居民前往国外”（支出方向）");
            }
            //161交易编码为“230000别处未涵盖的维护和维修服务”，但交易附言包含“工程且不含‘维修’/计算机/租赁且不含‘维修/维护’/装修/建设/建筑”。
            if (bopdecCommon.indexGt(txcode2, "-230000-") && (bopdecCommon.containsValue(tx2rem, "-计算机-装修-建设-建筑-") || (bopdecCommon.containsValue(tx2rem, "-工程-租赁-") && !bopdecCommon.containsValue(tx2rem, "-维修-维护-")))) {
                return WarningResult.build(subid, "第161条核查:交易编码为“230000别处未涵盖的维护和维修服务”，但交易附言包含“工程且不含‘维修’/计算机/租赁且不含‘维修/维护’/装修/建设/建筑”");
            }
            //162交易编码为“231010特许和商标使用费”，但交易附言包含“专有/所有权/转让/专利/技术/版权”。
            if (bopdecCommon.indexGt(txcode2, "-231010-") && bopdecCommon.containsValue(tx2rem, "-专有-所有权-转让-专利-技术-版权-")) {
                return WarningResult.build(subid, "第162条核查:交易编码为“231010特许和商标使用费”，但交易附言包含“专有/所有权/转让/专利/技术/版权”");
            }
            //163交易编码为“231020研发成果使用费”，但交易附言包含“商标/特许/转让/所有权/计算机/版面费/软件/视听”。
            if (bopdecCommon.indexGt(txcode2, "-231020-") && bopdecCommon.containsValue(tx2rem, "-商标-特许-转让-所有权-计算机-版面费-软件-视听-")) {
                return WarningResult.build(subid, "第163条核查:交易编码为“231020研发成果使用费”，但交易附言包含“商标/特许/转让/所有权/计算机/版面费/软件/视听”");
            }
            //164交易编码为“231030复制或分销计算机软件许可费”，但交易附言包含定制/出口/进出/进口/视听”。
            if (bopdecCommon.indexGt(txcode2, "-231030-") && (bopdecCommon.containsValue(tx2rem, "-出口-进出-进口-视听-定制-"))) {
                return WarningResult.build(subid, "第164条核查:交易编码为“231030复制或分销计算机软件许可费”，但交易附言包含定制/出口/进出/进口/视听”");
            }
            //165交易编码为“231040复制或分销视听及相关产品许可费”，但交易附言包含“计算机/软件/定制/出口/进出/进口”。
            if (bopdecCommon.indexGt(txcode2, "-231040-") && bopdecCommon.containsValue(tx2rem, "-计算机-软件-定制-出口-进出-进口-")) {
                return WarningResult.build(subid, "第165条核查:交易编码为“231040复制或分销视听及相关产品许可费”，但交易附言包含“计算机/软件/定制/出口/进出/进口”");
            }
            //166交易编码为“231990其他知识产权使用费”，但交易附言包含“计算机/软件/定制/出口/进出/进口/视听/商标/专利/著作/版权/设计/转播/视频/电影/影像/音像”。
            if (bopdecCommon.indexGt(txcode2, "-231990-") && bopdecCommon.containsValue(tx2rem, "-计算机-软件-定制-出口-进出-进口-视听-商标-专利-著作-版权-设计-转播-视频-电影-影像-音像-")) {
                return WarningResult.build(subid, "第166条核查:交易编码为“231990其他知识产权使用费”但交易附言包含“计算机/软件/定制/出口/进出/进口/视听/商标/专利/著作/版权/设计/转播/视频/电影/影像/音像");
            }
            //167交易编码为“232000别处未涵盖的政府货物和服务”，但交易附言包含“税捐/赠/援助”。
            if (bopdecCommon.indexGt(txcode2, "-232000-") && bopdecCommon.containsValue(tx2rem, "-税-捐赠-援助-")) {
                return WarningResult.build(subid, "第167条核查:交易编码为“232000别处未涵盖的政府货物和服务”，但交易附言包含“税/捐赠/援助”");
            }
            //168交易编码为“321000职工报酬”，但交易附言包含“工程/利息/侨汇/赠/佣金/咨询/贷款/货款/赡/差旅/教育/培训/一般贸易/社保但不包含‘雇员/员工'”。
            if (bopdecCommon.indexGt(txcode2, "-321000-") && (bopdecCommon.containsValue(tx2rem, "-工程-利息-侨汇-赠-佣金-咨询-贷款-货款-赡-差旅-教育-培训-一般贸易-社保-") && !bopdecCommon.containsValue(tx2rem, "-雇员-员工-"))) {
                return WarningResult.build(subid, "第168条核查:交易编码为“321000职工报酬”但交易附言包含“工程/利息/侨汇/赠/佣金/咨询/贷款/货款/赡/差旅/教育/培训/一般贸易/社保但不包含雇员/员工”");
            }
            //169交易编码为“322011从境外子公司等获得的股息、红利或利润/向境外母公司支付的股息、红利或利润”，但交易附言包含“利息/关联/优先股/联属”。
            if (bopdecCommon.indexGt(txcode2, "-322011-") && bopdecCommon.containsValue(tx2rem, "-利息-关联-优先股-联属-")) {
                return WarningResult.build(subid, "第169条核查:交易编码为“322011从境外子公司等获得的股息、红利或利润/向境外母公司支付的股息、红利或利润”，但交易附言包含“利息/关联/优先股/联属”");
            }
            //170交易编码为“322012从境外母公司获得的股息、红利（持有境外母公司10%以下股权）/向境外子公司等支付的股息、红利（持有本机构10%以下股权）”，但交易附言包含“利息/联营/联属/分支/关联/合伙/优先股”；或收入方向包含“境外子”，支出方向包含“境外母”，剔除收付款类型为“退款”的数据。
            //需完善
            //if (Platform.indexGt($txcode2,"-322012-") && (  || (Platform.containsValue($tx2rem,"-境外母-")  && "-dbb-dbc-dbe-dbf-".indexOf(inifrm)>0 ) && !Platform.containsValue($paytype,"-退款-") ))
            if (bopdecCommon.indexGt(txcode2, "-322012-") && (bopdecCommon.containsValue(tx2rem, "-利息-联营-联属-分支-关联-合伙-优先股-") || (bopdecCommon.containsValue(tx2rem, "-境外母-") && "-dbb-dbc-".indexOf(inifrm) > 0) && !bopdecCommon.containsValue(paytype, "-R-") || (bopdecCommon.containsValue(tx2rem, "-境外子-") && "-dba-".indexOf(inifrm) > 0 && !bopdecCommon.containsValue(paytype, "-R-")))) {
                return WarningResult.build(subid, "第170条核查:交易编码为“322012从境外母公司获得的股息、红利（持有境外母公司10%以下股权）/向境外子公司等支付的股息、红利（持有本机构10%以下股权）”，但交易附言包含“利息/联营/联属/分支/关联/合伙/优先股”；或收入方向包含“境外子”，支出方向包含“境外母”，剔除收付款类型为“退款”的数据。");
            }
            //171交易编码为“322013从境外联属企业获得的股息、红利/向境外联属企业支付的股息、红利”，但交易附言不包含“联属”或包含“利息/母公司/子公司/附属/分支/关联/联营/直接投资/优先股”。
            if (bopdecCommon.indexGt(txcode2, "-322013-") && (!bopdecCommon.containsValue(tx2rem, "-联属-") || bopdecCommon.containsValue(tx2rem, "-利息-母公司-子公司-附属-分支-关联-联营-直接投资-优先股-"))) {
                return WarningResult.build(subid, "第171条核查:交易编码为“322013从境外联属企业获得的股息、红利/向境外联属企业支付的股息、红利”，但交易附言不包含“联属”或包含“利息/母公司/子公司/附属/分支/关联/联营/直接投资/优先股”");
            }
            //172交易编码为“322014因拥有境外建筑物而获得的租金/向境内建筑物的非居民所有者支付的租金”，但交易附言包含“售/卖/买/转让/购”。
            if (bopdecCommon.indexGt(txcode2, "-322014-") && bopdecCommon.containsValue(tx2rem, "-售-卖-买-转让-购-")) {
                return WarningResult.build(subid, "第172条核查:交易编码为“322014因拥有境外建筑物而获得的租金/向境内建筑物的非居民所有者支付的租金”，但交易附言包含“售/卖/买/转让/购”");
            }
            //173交易编码为“322021从境外子公司获得的利息/向境外母公司支付的利息”，但交易附言包含“银行/本金/利润/红利/分红/股利/股息/联属”。
            if (bopdecCommon.indexGt(txcode2, "-322021-") && bopdecCommon.containsValue(tx2rem, "-银行-本金-利润-红利-分红-股利-股息-联属-")) {
                return WarningResult.build(subid, "第173条核查:交易编码为“322021从境外子公司获得的利息/向境外母公司支付的利息”，但交易附言包含“银行/本金/利润/红利/分红/股利/股息/联属”");
            }
            //174交易编码为“322022从境外母公司获得的利息（持有境外母公司10%以下股权）/向境外子公司等支付的利息（持有本机构10%以下股权）”，但交易附言包含“银行/联营/附属/分支/本/利润/红利/分红/股利/股息/联属”。
            if (bopdecCommon.indexGt(txcode2, "-322022-") && bopdecCommon.containsValue(tx2rem, "-银行-联营-附属-分支-本-利润-红利-分红-股利-股息-联属-")) {
                return WarningResult.build(subid, "第174条核查:交易编码为“322022从境外母公司获得的利息（持有境外母公司10%以下股权）/向境外子公司等支付的利息（持有本机构10%以下股权）”，但交易附言包含“银行/联营/附属/分支/本/利润/红利/分红/股利/股息/联属”");
            }
            //175交易编码为“322023从境外联属企业获得的利息/向境外联属企业支付的利息”，但交易附言不包含“联属”或包含“银行/母公司/子公司/附属/分支/关联/联营/直接投资/本金/利润/红利/分红/股利/股息/股东/投资者”。
            if (bopdecCommon.indexGt(txcode2, "-322023-") && (!bopdecCommon.containsValue(tx2rem, "-联属-") || bopdecCommon.containsValue(tx2rem, "-银行-母公司-子公司-附属-分支-关联-联营-直接投资-本金-利润-红利-分红-股利-股息-股东-投资者-"))) {
                return WarningResult.build(subid, "第175条核查:交易编码为“322023从境外联属企业获得的利息/向境外联属企业支付的利息”，但交易附言不包含“联属”或包含“银行/母公司/子公司/附属/分支/关联/联营/直接投资/本金/利润/红利/分红/股利/股息/股东/投资者”");
            }
            //176交易编码为“322031股票投资的股息、红利”，但交易附言包含“优先股/基金/债/母/子/附属/分支/关联（但不是“非关联”）/直接投资/利息”。
            if (bopdecCommon.indexGt(txcode2, "-322031-") && (bopdecCommon.containsValue(tx2rem, "-优先股-基金-债-母-子-附属-分支-直接投资-利息-") || (bopdecCommon.containsValue(tx2rem, "-关联-") && !bopdecCommon.containsValue(tx2rem, "-非关联-")))) {
                return WarningResult.build(subid, "第176条核查:交易编码为“322031股票投资的股息、红利”，但交易附言包含“优先股/基金/债/母/子/附属/分支/关联（但不是“非关联”）/直接投资/利息”");
            }
            //177交易编码为“322032投资基金份额的股息、红利”，但交易附言包含“利润/利息/母/子/附属/分支/联/直接投资/资金收入/资金支出”。
            if (bopdecCommon.indexGt(txcode2, "-322032-") && bopdecCommon.containsValue(tx2rem, "-利润-利息-母-子-附属-分支-联-直接投资-资金收入-资金支出-")) {
                return WarningResult.build(subid, "第177条核查:交易编码为“322032投资基金份额的股息、红利”，但交易附言包含“利润/利息/母/子/附属/分支/联/直接投资/资金收入/资金支出”");
            }
            //178交易编码为“322033短期债券利息”，但交易附言包含“长期/中期/利润/红利/分红/股利/股息/本/买/卖/售/转让/购”。
            if (bopdecCommon.indexGt(txcode2, "-322033-") && bopdecCommon.containsValue(tx2rem, "-长期-中期-利润-红利-分红-股利-股息-本-买-卖-售-转让-购-")) {
                return WarningResult.build(subid, "第178条核查:交易编码为“322033短期债券利息”，但交易附言包含“长期/中期/利润/红利/分红/股利/股息/本/买/卖/售/转让/购”");
            }
            //179交易编码为“322034中长期债券利息”，但交易附言包含“一年以下/一年期/短期/利润/红利/分红/股利/股息/本/买/卖/售/转让/购”。
            if (bopdecCommon.indexGt(txcode2, "-322034-") && bopdecCommon.containsValue(tx2rem, "-一年以下-一年期-短期-利润-红利-分红-股利-股息-本-买-卖-售-转让-购-")) {
                return WarningResult.build(subid, "第179条核查:交易编码为“322034中长期债券利息”，但交易附言包含“一年以下/一年期/短期/利润/红利/分红/股利/股息/本/买/卖/售/转让/购”");
            }
            //180交易编码为“322041存贷款利息”，但交易附言包含“母公司/子公司/附属/联（但不是“非关联”）/直接投资/股东/分支/本/债券/利润”。
            if (bopdecCommon.indexGt(txcode2, "-322041-") && (bopdecCommon.containsValue(tx2rem, "-母公司-子公司-附属-直接投资-股东-分支-本-债券-利润-") || (!bopdecCommon.containsValue(tx2rem, "-非关联-") && bopdecCommon.containsValue(tx2rem, "-联-")))) {
                return WarningResult.build(subid, "第180条核查:交易编码为“322041存贷款利息”，但交易附言包含“母公司/子公司/附属/联（但不是“非关联”）/直接投资/股东/分支/本/债券/利润”");
            }
            //181交易编码为“322042保单持有人获得的红利和利息/向保单持有者支付的红利和利息”，但交易附言包含“股/银行”。
            if (bopdecCommon.indexGt(txcode2, "-322042-") && bopdecCommon.containsValue(tx2rem, "-股-银行-")) {
                return WarningResult.build(subid, "第181条核查:交易编码为“322042保单持有人获得的红利和利息/向保单持有者支付的红利和利息”，但交易附言包含“股/银行”");
            }
            //182交易编码为“322043从准公司和国际组织获得的红利、收益/向准公司和国际组织份额持有者支付的红利、收益”，但交易附言包含“利息/银行/母公司/子公司/联/直接投资/股东/分支/附属”。
            if (bopdecCommon.indexGt(txcode2, "-322043-") && bopdecCommon.containsValue(tx2rem, "-利息-银行-母公司-子公司-联-直接投资-股东-分支-附属-")) {
                return WarningResult.build(subid, "第182条核查:交易编码为“322043从准公司和国际组织获得的红利、收益/向准公司和国际组织份额持有者支付的红利、收益”，但交易附言包含“利息/银行/母公司/子公司/联/直接投资/股东/分支/附属”");
            }
            //183交易编码为“323010使用自然资源的租金”，但交易附言包含“租约/转让/买/卖/售/房屋”。
            if (bopdecCommon.indexGt(txcode2, "-323010-") && bopdecCommon.containsValue(tx2rem, "-租约-转让-买-卖-售-房屋-")) {
                return WarningResult.build(subid, "第183条核查:交易编码为“323010使用自然资源的租金”，但交易附言包含“租约/转让/买/卖/售/房屋”");
            }
            //184交易编码为“323020产品和生产的税收及补贴”，剔除交易附言包含“关税”、“出口%增值税”、“进口%增值税”、“吨税费”、“消费税”、“工资税”、“营业执照税”的数据。
            //由于%不确定暂时先注释
            if (bopdecCommon.indexGt(txcode2, "-323020-") && (bopdecCommon.containsValue(tx2rem, "-税-") && !bopdecCommon.containsValue(tx2rem, "-关税-出口税-进口税-增值税-营业税-销售税-土地使用税-印花税-吨税费-消费税-工资税-营业执照税-"))) {
                return WarningResult.build(subid, "第184条核查:交易编码为“323020产品和生产的税收及补贴”，交易附言包含“税”但不包含“关税”、“出口税”、“进口税”、“增值税”、“营业税”、“销售税”、“土地使用税”、“印花税”、“吨税费”、“消费税”、“工资税”或“营业执照税”的数据。");
            }
            //185交易编码为“421010个人间捐赠及无偿援助”，但交易附言包含“留学/赔偿/福利/学费/报酬/工资/政府/组织/固定资产有关/遗产/中奖/雇/房/舍/楼/屋/设备/机器/重建/速遣/滞期”或申报主体类型为“对公居民”（剔除交易附言包含“代收”或“代付”字样的数据）。
            if (bopdecCommon.indexGt(txcode2, "-421010-") && (bopdecCommon.containsValue(tx2rem, "-留学-赔偿-福利-学费-报酬-工资-政府-组织-固定资产有关-遗产-中奖-雇-房-舍-楼-屋-设备-机器-重建-速遣-滞期-") || (bopdecCommon.indexGt(custype, "-C-") && !bopdecCommon.containsValue(tx2rem, "-代收-代付-")))) {
                return WarningResult.build(subid, "第185条核查:交易编码为“421010个人间捐赠及无偿援助”，但交易附言包含“留学/赔偿/福利/学费/报酬/工资/政府/组织/固定资产有关/遗产/中奖/雇/房/舍/楼/屋/设备/机器/重建/速遣/滞期”或申报主体类型为“对公居民”（剔除交易附言包含“代收”或“代付”字样的数据）。");
            }
            //186交易编码为“421020政府、国际组织间捐赠及无偿援助（与固定资产无关）”，但交易附言包含“工资/留学/赔偿/薪/福利/学费/报酬/探亲/个人/赡/遗产/中奖/雇/房/舍/楼/屋/设备/机器/重建/固定资产有关或申报主体类型为“对私居民””。
            if (bopdecCommon.indexGt(txcode2, "-421020-") && (bopdecCommon.containsValue(tx2rem, "-工资-留学-赔偿-薪-福利-学费-报酬-探亲-个人-赡-遗产-中奖-雇-房-舍-楼-屋-设备-机器-重建-固定资产有关-") || bopdecCommon.indexGt(custype, "-D-"))) {
                return WarningResult.build(subid, "第186条核查:交易编码为“421020政府、国际组织间捐赠及无偿援助（与固定资产无关）”，但交易附言包含“工资/留学/赔偿/薪/福利/学费/报酬/探亲/个人/赡/遗产/中奖/雇/房/舍/楼/屋/设备/机器/重建/固定资产有关或申报主体类型为“对私居民”");
            }
            //187交易编码为“421990其他捐赠及无偿援助（与固定资产无关）”，但交易附言包含“工资/留学/赔偿/薪/福利/学费/报酬/探亲/政府/赡/遗产/中奖/雇/房/舍/楼/屋/设备/机器/重建/速遣/与固定资产有关”。
            if (bopdecCommon.indexGt(txcode2, "-421990-") && (bopdecCommon.containsValue(tx2rem, "-工资-留学-赔偿-薪-福利-学费-报酬-探亲-政府-赡-遗产-中奖-雇-房-舍-楼-屋-设备-机器-重建-速遣-与固定资产有关-") || bopdecCommon.indexGt(custype, "-D-"))) {
                return WarningResult.build(subid, "第187条核查:交易编码为“421990其他捐赠及无偿援助（与固定资产无关）”，但交易附言包含“工资/留学/赔偿/薪/福利/学费/报酬/探亲/政府/赡/遗产/中奖/雇/房/舍/楼/屋/设备/机器/重建/速遣/与固定资产有关”。");
            }
            //188交易编码为“422000非寿险保险赔偿”，但交易附言包含“保费/年金”。
            if (bopdecCommon.indexGt(txcode2, "-422000-") && bopdecCommon.containsValue(tx2rem, "-保费-年金-")) {
                return WarningResult.build(subid, "第188条核查:交易编码为“422000非寿险保险赔偿”，但交易附言包含“保费/年金”");
            }
            //189交易编码为“423010社保缴款”，但交易附言包含“雇/返”。
            if (bopdecCommon.indexGt(txcode2, "-423010-") && bopdecCommon.containsValue(tx2rem, "-雇-返-")) {
                return WarningResult.build(subid, "第189条核查:交易编码为“423010社保缴款”，但交易附言包含“雇/返”");
            }
            //190交易编码为“423020社保返还的福利”，但交易附言包含“雇主/公司”。
            if (bopdecCommon.indexGt(txcode2, "-423020-") && bopdecCommon.containsValue(tx2rem, "-雇主-公司-")) {
                return WarningResult.build(subid, "第190条核查:交易编码为“423020社保返还的福利”，但交易附言包含“雇主/公司”");
            }
            //191交易编码为“424000其他二次收入（经常转移）”，但交易附言包含“险赔但不包含‘非’/赠/借/捐/社保/无偿/养老金/关税但不是‘关税退款’或‘关税返还’或‘关税让利’/消费税/产品税/生产税/产品补贴/产品增值税/进口税/出口税/商品消费税/遗产税/资本税/税务咨询”。
            //if (Platform.indexGt($txcode2,"-424000-")  &&(Platform.containsValue($tx2rem,"-险赔-") && !Platform.containsValue($tx2rem,"-非赠-非借-非捐-非社保-非无偿-非养老金-非关税-非消费税-非产品税-非生产税-非产品补贴-非产品增值税-非进口税-非出口税-非商品消费税-非遗产税-非资本税-")) )
            if (bopdecCommon.indexGt(txcode2, "-424000-") && ((bopdecCommon.containsValue(tx2rem, "-关税-") && !bopdecCommon.containsValue(tx2rem, "-关税退款-关税返还-关税让利-")) || (bopdecCommon.containsValue(tx2rem, "-险赔-") && !bopdecCommon.containsValue(tx2rem, "-非-")) || bopdecCommon.containsValue(tx2rem, "-赠-借-捐-社保-无偿-养老金-消费税-产品税-生产税-产品补贴-产品增值税-进口税-出口税-商品消费税-遗产税-资本税-税务咨询-"))) {
                return WarningResult.build(subid, "第191条核查:交易编码为“424000其他二次收入（经常转移）”，但交易附言包含“险赔但不包含‘非’/赠/借/捐/社保/无偿/养老金/关税但不是‘关税退款’或‘关税返还’或‘关税让利’/消费税/产品税/生产税/产品补贴/产品增值税/进口税/出口税/商品消费税/遗产税/资本税/税务咨询”。");
            }
            //192交易编码为“521020与固定资产有关的捐赠及无偿援助”，但交易附言包含“个人/亲属/赡/生活费”。
            if (bopdecCommon.indexGt(txcode2, "-521020-") && bopdecCommon.containsValue(tx2rem, "-个人-亲属-赡-生活费-")) {
                return WarningResult.build(subid, "第192条核查:交易编码为“521020与固定资产有关的捐赠及无偿援助”，但交易附言包含“个人/亲属/赡/生活费”");
            }
            //193交易编码为“521030移民转移”，但交易附言包含“赠/捐/赡/生活费/探亲”。
            if (bopdecCommon.indexGt(txcode2, "-521030-") && bopdecCommon.containsValue(tx2rem, "-赠-捐-赡-生活费-探亲-")) {
                return WarningResult.build(subid, "第193条核查:交易编码为“521030移民转移”，但交易附言包含“赠/捐/赡/生活费/探亲”");
            }
            //194交易编码为“521990其他资本转移”，但交易附言包含“销售税/产品税/税务咨询”。
            if (bopdecCommon.indexGt(txcode2, "-521990-") && bopdecCommon.containsValue(tx2rem, "-销售税-产品税-税务咨询-")) {
                return WarningResult.build(subid, "第194条核查:交易编码为“521990其他资本转移”，但交易附言包含“销售税/产品税/税务咨询”");
            }
            //195交易编码为“522000品牌、商标、契约和许可所有权等非生产非金融资产转让”，但交易附言包含“租金/专利/版权/研发/使用”。
            if (bopdecCommon.indexGt(txcode2, "-522000-") && bopdecCommon.containsValue(tx2rem, "-租金-专利-版权-研发-使用-")) {
                return WarningResult.build(subid, "第195条核查:交易编码为“522000品牌、商标、契约和许可所有权等非生产非金融资产转让”，但交易附言包含“租金/专利/版权/研发/使用”");
            }
            //196交易编码为“621011因境外子公司清算、终止等撤资/新设境外子公司资本金汇出”，但交易附言不包含“子公司/分公司/联营/直接投资/境外投资”；或包含“关联/外商/联属/境内子/境外母/前期/筹备/增资/减资/借/贷”,剔除交易附言包含“工程”字样的数据。
            if (bopdecCommon.indexGt(txcode2, "-621011-") && (!bopdecCommon.containsValue(tx2rem, "-子公司-分公司-联营-直接投资-境外投资-") || (bopdecCommon.containsValue(tx2rem, "-关联-外商-联属-境内子-境外母-前期-筹备-增资-减资-借-贷-") && !bopdecCommon.containsValue(tx2rem, "-工程-")))) {
                return WarningResult.build(subid, "第196条核查:交易编码为“621011因境外子公司清算、终止等撤资/新设境外子公司资本金汇出”，但交易附言不包含“子公司/分公司/联营/直接投资/境外投资”；或包含“关联/外商/联属/境内子/境外母/前期/筹备/增资/减资/借/贷”,剔除交易附言包含“工程”字样的数据");
            }
            //197交易编码为“621012筹备资金撤回/筹备资金汇出”，但交易附言包含“关联/外商/联属/资本金/境内子/境外母/转让”。
            if (bopdecCommon.indexGt(txcode2, "-621012-") && bopdecCommon.containsValue(tx2rem, "-关联-外商-联属-资本金-境内子-境外母-转让-")) {
                return WarningResult.build(subid, "第197条核查:交易编码为“621012筹备资金撤回/筹备资金汇出”，但交易附言包含“关联/外商/联属/资本金/境内子/境外母/转让”");
            }
            //198交易编码为“621013因境外子公司减资收回资金/对境外子公司增资”，但交易附言不包含“减%资/增%资”，或不包含“子公司”或“直接投资”；或包含“关联/外商/清算/境内子/境外母”。
            //由于%不确定暂时先注释
            if (bopdecCommon.indexGt(txcode2, "-621013-") && (bopdecCommon.containsValue(tx2rem, "-关联-外商-清算-境内子-境外母-") || (!bopdecCommon.containsValue(tx2rem, "-子公司-直接投资-") && !bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(tx2rem, "增", "资")) && !bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(tx2rem, "减", "资"))))) {
                return WarningResult.build(subid, "第198条核查:交易编码为“621013因境外子公司减资收回资金/对境外子公司增资”，但交易附言不包含“减%资/增%资”，或不包含“子公司”或“直接投资”；或包含“关联/外商/清算/境内子/境外母”");
            }
            //199交易编码为“621014转让境外子公司股权收入/购买转让的境外企业股权”，但交易附言不包含“股权/产权/股份”或包含“关联/外商/境内子/境外母”。
            if (bopdecCommon.indexGt(txcode2, "-621014-") && (!bopdecCommon.containsValue(tx2rem, "-股权-产权-股份-") || bopdecCommon.containsValue(tx2rem, "-关联-外商-境内子-境外母-"))) {
                return WarningResult.build(subid, "第199条核查:交易编码为“621014转让境外子公司股权收入/购买转让的境外企业股权”，但交易附言不包含“股权/产权/股份”或包含“关联/外商/境内子/境外母”");
            }
            //200交易编码为“621015接受境外子公司的股权投资（逆向股权投资）/境外子公司撤回对境内母公司的股权投资（逆向股权投资的撤回）”，但交易附言不包含“投资/资本/股”或包含“关联/外商/境内子/境外母”。
            if (bopdecCommon.indexGt(txcode2, "-621015-") && (!bopdecCommon.containsValue(tx2rem, "-投资-资本-股-") || bopdecCommon.containsValue(tx2rem, "-关联-外商-境内子-境外母-"))) {
                return WarningResult.build(subid, "第200条核查:交易编码为“621015接受境外子公司的股权投资（逆向股权投资）/境外子公司撤回对境内母公司的股权投资（逆向股权投资的撤回）”，但交易附言不包含“投资/资本/股”或包含“关联/外商/境内子/境外母”");
            }
            //201交易编码为“621016非法人投资款撤回/汇出”，但交易附言包含“子公司/境内子/境外母”。
            if (bopdecCommon.indexGt(txcode2, "-621016-") && bopdecCommon.containsValue(tx2rem, "-子公司-境内子-境外母-")) {
                return WarningResult.build(subid, "第201条核查:交易编码为“621016非法人投资款撤回/汇出”，但交易附言包含“子公司/境内子/境外母”");
            }
            //202交易编码为“621021收回对境外子公司的贷款及其他往来/对境外子公司的贷款及其他往来”，但交易附言包含“关联/外商/担保/境内子/境外母”，剔除交易附言包含“工程”字样的数据。
            if (bopdecCommon.indexGt(txcode2, "-621021-") && bopdecCommon.containsValue(tx2rem, "-关联-外商-担保-境内子-境外母-") && !bopdecCommon.containsValue(tx2rem, "-工程-")) {
                return WarningResult.build(subid, "第202条核查:交易编码为“621021收回对境外子公司的贷款及其他往来/对境外子公司的贷款及其他往来”，但交易附言包含“关联/外商/担保/境内子/境外母”，剔除交易附言包含“工程”字样的数据");
            }
            //203交易编码为“621022接受境外子公司的贷款及其他往来（逆向贷款投资）/偿还境外子公司的贷款及其他往来（逆向投资的撤回）”，但交易附言包含“关联/外商/担保/境内子/境外母”。
            if (bopdecCommon.indexGt(txcode2, "-621022-") && bopdecCommon.containsValue(tx2rem, "-关联-外商-担保-境内子-境外母-")) {
                return WarningResult.build(subid, "第203条核查:交易编码为“621022接受境外子公司的贷款及其他往来（逆向贷款投资）/偿还境外子公司的贷款及其他往来（逆向投资的撤回）”，但交易附言包含“关联/外商/担保/境内子/境外母”");
            }
            //204交易编码为“621030出售境外不动产收入/购买境外不动产支出”，但交易附言包含“中介/税/境内/国内/境外母”。
            if (bopdecCommon.indexGt(txcode2, "-621030-") && bopdecCommon.containsValue(tx2rem, "-中介-税-境内-国内-境外母-")) {
                return WarningResult.build(subid, "第204条核查:交易编码为“621030出售境外不动产收入/购买境外不动产支出”，但交易附言包含“中介/税/境内/国内/境外母”");
            }
            //205交易编码为“622011新设外商投资企业资本金汇入/因外商投资企业清算、终止等撤资”，但交易附言包含“关联/借款/增资/减资/筹备/前期/境内母/境外子”。
            if (bopdecCommon.indexGt(txcode2, "-622011-") && bopdecCommon.containsValue(tx2rem, "-关联-借款-增资-减资-筹备-前期-境内母-境外子-")) {
                return WarningResult.build(subid, "第205条核查:交易编码为“622011新设外商投资企业资本金汇入/因外商投资企业清算、终止等撤资”，但交易附言包含“关联/借款/增资/减资/筹备/前期/境内母/境外子”");
            }
            //206交易编码为“622012筹备资金汇入/撤出”，但交易附言包含“关联/联属/新设/清算/联属/境内母/境外子/转让”。
            if (bopdecCommon.indexGt(txcode2, "-622012-") && bopdecCommon.containsValue(tx2rem, "-关联-联属-新设-清算-联属-境内母-境外子-转让-")) {
                return WarningResult.build(subid, "第206条核查:交易编码为“622012筹备资金汇入/撤出”，但交易附言包含“关联/联属/新设/清算/联属/境内母/境外子/转让”");
            }
            //207交易编码为“622013外商投资企业增资/外商投资企业减资”，但交易附言不包含“减%资/增%资”或包含“关联/境内母/境外子”。
            //由于%不确定暂时先注释
            if (bopdecCommon.indexGt(txcode2, "-622013-") && ((!bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(tx2rem, "增", "资")) && !bopdecCommon.isALLChinese(bopdecCommon.insteadPercent(tx2rem, "减", "资"))) || bopdecCommon.containsValue(tx2rem, "-关联-境内母-境外子-"))) {
                return WarningResult.build(subid, "第207条核查:交易编码为“622013外商投资企业增资/外商投资企业减资”，但交易附言不包含“减%资/增%资”或包含“关联/境内母/境外子”");
            }
            //208交易编码为“622014转让境内企业股权/购买转让的外商投资企业股权”，但交易附言不包含“股权/产权/股份/新设”或包含“关联/清算/减资/撤资”。
            if (bopdecCommon.indexGt(txcode2, "-622014-") && (bopdecCommon.containsValue(tx2rem, "-关联-清算-减资-撤资-新设-") || !bopdecCommon.containsValue(tx2rem, "-股权-产权-股份-"))) {
                return WarningResult.build(subid, "第208条核查:交易编码为“622014转让境内企业股权/购买转让的外商投资企业股权”，但交易附言不包含“股权/产权/股份”或包含“关联/清算/减资/撤资/新设”");
            }
            //209交易编码为“622015对境外母公司的股权投资的撤回（逆向股权投资的撤回）/外商投资企业对境外母公司的股权投资（逆向股权投资）”，但交易附言不包含“母公司”或不包含“投资/资本/股”或包含“关联/附属/分支/联营/境内母/境外子”。
            if (bopdecCommon.indexGt(txcode2, "-622015-") && (bopdecCommon.containsValue(tx2rem, "-关联-附属-分支-联营-境内母-境外子-") || !bopdecCommon.containsValue(tx2rem, "-母公司-投资-资本-股-"))) {
                return WarningResult.build(subid, "第209条核查:交易编码为“622015对境外母公司的股权投资的撤回（逆向股权投资的撤回）/外商投资企业对境外母公司的股权投资（逆向股权投资）”，但交易附言不包含“母公司”或不包含“投资/资本/股”或包含“关联/附属/分支/联营/境内母/境外子”");
            }
            //210交易编码为“622016非法人投资款汇入/撤出”，但交易编码包含“关联/联属/子/母”。
            if (bopdecCommon.indexGt(txcode2, "-622016-") && bopdecCommon.containsValue(tx2rem, "-关联-联属-子-母-")) {
                return WarningResult.build(subid, "第210条核查:交易编码为“622016非法人投资款汇入/撤出”，但交易编码包含“关联/联属/子/母”");
            }
            //211交易编码为“622021”，但交易附言包含“关联/附属/分支/联营/担保/联属/境内母/境外子”。
            if (bopdecCommon.indexGt(txcode2, "-622021-") && bopdecCommon.containsValue(tx2rem, "-关联-附属-分支-联营-担保-联属-境内母-境外子-")) {
                return WarningResult.build(subid, "第211条核查:交易编码为“622021”，但交易附言包含“关联/附属/分支/联营/担保/联属/境内母/境外子”");
            }
            //212交易编码为“622022收回对境外母公司的贷款及其他往来（逆向贷款投资的撤回）/对境外母公司的贷款及其他往来（逆向贷款投资）”，但交易附言包含“关联/附属/分支/联营/担保/联属/境内母/境外子”。
            if (bopdecCommon.indexGt(txcode2, "-622022-") && bopdecCommon.containsValue(tx2rem, "-关联-附属-分支-联营-担保-联属-境内母-境外子-")) {
                return WarningResult.build(subid, "第212条核查:交易编码为“622022收回对境外母公司的贷款及其他往来（逆向贷款投资的撤回）/对境外母公司的贷款及其他往来（逆向贷款投资）”，但交易附言包含“关联/附属/分支/联营/担保/联属/境内母/境外子”");
            }
            //213交易编码为“622030向非居民出售境内不动产收入/从非居民购买境内不动产支出”，但交易附言包含“中介/税/租/境内母/境外子”
            if (bopdecCommon.indexGt(txcode2, "-622030-") && bopdecCommon.containsValue(tx2rem, "-中介-税-租-境内母-境外子-")) {
                return WarningResult.build(subid, "第213条核查:交易编码为“622030向非居民出售境内不动产收入/从非居民购买境内不动产支出”，但交易附言包含“中介/税/租/境内母/境外子”");
            }
            //214交易编码为“623011”，但交易附言不包含“联属”或不包含“投资/资本/股”或包含“关联/子/母”。
            if (bopdecCommon.indexGt(txcode2, "-623011-") && (bopdecCommon.containsValue(tx2rem, "-关联-子-母-") || !bopdecCommon.containsValue(tx2rem, "-联属-投资-资本-股-"))) {
                return WarningResult.build(subid, "第214条核查:交易编码为“623011”，但交易附言不包含“联属”或不包含“投资/资本/股”或包含“关联/子/母”");
            }
            //215交易编码为“623012接受境外联属企业的股权投资/境外联属企业撤回对境内的股权投资”，但交易附言不包含“联属”或不包含“投资/资本/股”或包含“关联/子/母”。
            if (bopdecCommon.indexGt(txcode2, "-623012-") && (bopdecCommon.containsValue(tx2rem, "-关联-子-母-") || !bopdecCommon.containsValue(tx2rem, "-联属-投资-资本-股-"))) {
                return WarningResult.build(subid, "第215条核查:交易编码为“623012接受境外联属企业的股权投资/境外联属企业撤回对境内的股权投资”，但交易附言不包含“联属”或不包含“投资/资本/股”或包含“关联/子/母”");
            }
            //216交易编码为“623021收回对境外联属企业的贷款及其他往来/向境外联属企业提供贷款及其他债权”，但交易附言不包含“联属”；或包含“关联/担保/子/母”,剔除交易附言包含“工程”字样的数据。
            if (bopdecCommon.indexGt(txcode2, "-623021-") && (!bopdecCommon.containsValue(tx2rem, "-联属-借-贷-放-代垫-应-") || (bopdecCommon.containsValue(tx2rem, "-关联-担保-子-母-") && !bopdecCommon.containsValue(tx2rem, "-工程-")))) {
                return WarningResult.build(subid, "第216条核查:交易编码为“623021收回对境外联属企业的贷款及其他往来/向境外联属企业提供贷款及其他债权”，但交易附言不包含“联属”；或包含“关联/担保/子/母”,剔除交易附言包含“工程”字样的数据");
            }
            //217交易编码为“623022接受境外联属企业的贷款及其他往来/ 偿还境外联属企业贷款及其他债务”，但交易附言不包含“联属”或不包含“借/贷/外债/代垫/应”或包含“关联/担保/子/母/利息”。
            if (bopdecCommon.indexGt(txcode2, "-623022-") && (bopdecCommon.containsValue(tx2rem, "-关联-担保-子-母-利息-") || !bopdecCommon.containsValue(tx2rem, "-联属-借-贷-外债-代垫-应-")) && !bopdecCommon.containsValue(tx2rem, "-资金池-不出境-不出口-")) {
                return WarningResult.build(subid, "第217条核查:交易编码为“623022接受境外联属企业的贷款及其他往来/ 偿还境外联属企业贷款及其他债务”，但交易附言不包含“联属”或不包含“借/贷/外债/代垫/应”或包含“关联/担保/子/母/利息”。剔除交易附言包含“资金池”、“不出境”、“不出口”字样数据。");
            }
            //218交易编码为“721010卖出境外机构境外发行的股票或股权/投资境外机构境外发行的股票或股权”，但交易附言不包含“股”。
            if (bopdecCommon.indexGt(txcode2, "-721010-") && !bopdecCommon.containsValue(tx2rem, "-股-")) {
                return WarningResult.build(subid, "第218条核查:交易编码为“721010卖出境外机构境外发行的股票或股权/投资境外机构境外发行的股票或股权”，但交易附言不包含“股”");
            }
            //219交易编码为“721020卖出境内机构在境外发行的股票或股权/投资境内机构在境外发行的股票或股权”，但交易附言不包含“股”。
            if (bopdecCommon.indexGt(txcode2, "-721020-") && !bopdecCommon.containsValue(tx2rem, "-股-")) {
                return WarningResult.build(subid, "第219条核查:交易编码为“721020卖出境内机构在境外发行的股票或股权/投资境内机构在境外发行的股票或股权”，但交易附言不包含“股”");
            }
            //220交易编码为“721030在境外市场发行股票或股权/境内公司回购境外发行的股票或股权”，但交易附言不包含“股”。
            if (bopdecCommon.indexGt(txcode2, "-721030-") && !bopdecCommon.containsValue(tx2rem, "-股-")) {
                return WarningResult.build(subid, "第220条核查:交易编码为“721030在境外市场发行股票或股权/境内公司回购境外发行的股票或股权”，但交易附言不包含“股”");
            }
            //221交易编码为“721040非居民买入/卖出境内股票或股权”，但交易附言不包含“股”。
            if (bopdecCommon.indexGt(txcode2, "-721040-") && !bopdecCommon.containsValue(tx2rem, "-股-") && !bopdecCommon.containsValue(custnm, "-证券-")) {
                return WarningResult.build(subid, "第221条核查:交易编码为“721040非居民买入/卖出境内股票或股权”，但交易附言不包含“股”。剔除申报主体名称含“证券”的数据。");
            }
            //222交易编码为“721050非居民回购/发行境内股票或股权”，但交易附言不包含“股”。
            if (bopdecCommon.indexGt(txcode2, "-721050-") && !bopdecCommon.containsValue(tx2rem, "-股-")) {
                return WarningResult.build(subid, "第222条核查:交易编码为“721050非居民回购/发行境内股票或股权”，但交易附言不包含“股”");
            }
            //223交易编码为“722010赎回/申购境外投资基金”，但交易附言不包含“基金”。
            if (bopdecCommon.indexGt(txcode2, "-722010-") && !bopdecCommon.containsValue(tx2rem, "-基金-")) {
                return WarningResult.build(subid, "第223条核查:交易编码为“722010赎回/申购境外投资基金”，但交易附言不包含“基金”");
            }
            //224交易编码为“722020募集/清算境外投资基金”，但交易附言不包含“基金”。
            if (bopdecCommon.indexGt(txcode2, "-722020-") && !bopdecCommon.containsValue(tx2rem, "-基金-")) {
                return WarningResult.build(subid, "第224条核查:交易编码为“722020募集/清算境外投资基金”，但交易附言不包含“基金”");
            }
            //225交易编码为“722030非居民申购/赎回境内投资基金”，但交易附言不包含“基金”。
            if (bopdecCommon.indexGt(txcode2, "-722030-") && !bopdecCommon.containsValue(tx2rem, "-基金-")) {
                return WarningResult.build(subid, "第225条核查:交易编码为“722030非居民申购/赎回境内投资基金”，但交易附言不包含“基金”");
            }
            //226交易编码为“722040非居民清算境内募集的/境内募集投资基金”，但交易附言不包含“基金”。
            if (bopdecCommon.indexGt(txcode2, "-722040-") && !bopdecCommon.containsValue(tx2rem, "-基金-")) {
                return WarningResult.build(subid, "第226条核查:交易编码为“722040非居民清算境内募集的/境内募集投资基金”，但交易附言不包含“基金”");
            }
            //227交易编码为“723011卖出/买入境外短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”。
            if (bopdecCommon.indexGt(txcode2, "-723011-") && (bopdecCommon.containsValue(tx2rem, "-长期-一年以上-1年以上-股-基金-") || !bopdecCommon.containsValue(tx2rem, "-债-"))) {
                return WarningResult.build(subid, "第227条核查:交易编码为“723011卖出/买入境外短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”");
            }
            //228交易编码为“723012发行/偿付境外短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”。
            if (bopdecCommon.indexGt(txcode2, "-723012-") && (bopdecCommon.containsValue(tx2rem, "-长期-一年以上-1年以上-股-基金-") || !bopdecCommon.containsValue(tx2rem, "-债-"))) {
                return WarningResult.build(subid, "第228条核查:交易编码为“723012发行/偿付境外短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”");
            }
            //229交易编码为“723013非居民买入/卖出境内短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”。
            if (bopdecCommon.indexGt(txcode2, "-723013-") && (bopdecCommon.containsValue(tx2rem, "-长期-一年以上-1年以上-股-基金-") || !bopdecCommon.containsValue(tx2rem, "-债-"))) {
                return WarningResult.build(subid, "第229条核查:交易编码为“723013非居民买入/卖出境内短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”");
            }
            //230交易编码为“723014非居民偿付/发行境内短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”。
            if (bopdecCommon.indexGt(txcode2, "-723014-") && (bopdecCommon.containsValue(tx2rem, "-长期-一年以上-1年以上-股-基金-") || !bopdecCommon.containsValue(tx2rem, "-债-"))) {
                return WarningResult.build(subid, "第230条核查:交易编码为“723014非居民偿付/发行境内短期债券”，但交易附言不包含“债”或包含“长期/一年以上/1年以上/股/基金”");
            }
            //231交易编码为“723021卖出/买入境外中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”。
            if (bopdecCommon.indexGt(txcode2, "-723021-") && (bopdecCommon.containsValue(tx2rem, "-短期-一年以下-一年以内-1年以内-1年以下-股-基金-") || !bopdecCommon.containsValue(tx2rem, "-债-"))) {
                return WarningResult.build(subid, "第231条核查:交易编码为“723021卖出/买入境外中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”");
            }
            //232交易编码为“723022发行/偿付境外中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”。
            if (bopdecCommon.indexGt(txcode2, "-723022-") && (bopdecCommon.containsValue(tx2rem, "-短期-一年以下-一年以内-1年以内-1年以下-股-基金-") || !bopdecCommon.containsValue(tx2rem, "-债-"))) {
                return WarningResult.build(subid, "第232条核查:交易编码为“723022发行/偿付境外中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”");
            }
            //233交易编码为“723023非居民买入/卖出境内中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”。
            if (bopdecCommon.indexGt(txcode2, "-723023-") && (bopdecCommon.containsValue(tx2rem, "-短期-一年以下-一年以内-1年以内-1年以下-股-基金-") || !bopdecCommon.containsValue(tx2rem, "-债-"))) {
                return WarningResult.build(subid, "第233条核查:交易编码为“723023非居民买入/卖出境内中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”");
            }
            //234交易编码为“723024非居民偿付/发行境内中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”。
            if (bopdecCommon.indexGt(txcode2, "-723024-") && (bopdecCommon.containsValue(tx2rem, "-短期-一年以下-一年以内-1年以内-1年以下-股-基金-") || !bopdecCommon.containsValue(tx2rem, "-债-"))) {
                return WarningResult.build(subid, "第234条核查:交易编码为“723024非居民偿付/发行境内中长期债券”，但交易附言不包含“债”或包含“短期/一年以下/一年以内/1年以内/1年以下/股/基金”");
            }
            //235交易编码为“724000因金融衍生工具交易引起的收入/支出”，但交易附言不包含“期权/期货/掉期/衍生”或包含“债券/股票/基金”。
            if (bopdecCommon.indexGt(txcode2, "-724000-") && (bopdecCommon.containsValue(tx2rem, "-债券-股票-基金-") || !bopdecCommon.containsValue(tx2rem, "-期权-期货-掉期-衍生-"))) {
                return WarningResult.build(subid, "第235条核查:交易编码为“724000因金融衍生工具交易引起的收入/支出”，但交易附言不包含“期权/期货/掉期/衍生”或包含“债券/股票/基金”");
            }
            //236交易编码为“821010资产-人寿保险和年金权益”，但交易附言不包含“年金/寿”或包含“利/赔/保费”。
            if (bopdecCommon.indexGt(txcode2, "-821010-") && (bopdecCommon.containsValue(tx2rem, "-利-赔-保费-") || !bopdecCommon.containsValue(tx2rem, "-年金-寿-"))) {
                return WarningResult.build(subid, "第236条核查:交易编码为“821010资产-人寿保险和年金权益”，但交易附言不包含“年金/寿”或包含“利/赔/保费”");
            }
            //237交易编码为“821020对外贷款的收回/向境外提供贷款”，但交易附言包含“息/母/子/附属/关联(但不是‘非关联、无关联’)/存款”。
            if (bopdecCommon.indexGt(txcode2, "-821020-") && (bopdecCommon.containsValue(tx2rem, "-息-母-子-附属-存款-") || (!bopdecCommon.containsValue(tx2rem, "-非关联-无关联-") && bopdecCommon.containsValue(tx2rem, "-关联-")))) {
                return WarningResult.build(subid, "第237条核查:交易编码为“821020对外贷款的收回/向境外提供贷款”，但交易附言包含“息/母/子/附属/关联(但不是‘非关联、无关联’)/存款”");
            }
            //238交易编码为“821030收回或调回存放境外存款本金/存放境外存款”，但交易附言包含“保证金/借/贷/利息”。
            if (bopdecCommon.indexGt(txcode2, "-821030-") && bopdecCommon.containsValue(tx2rem, "-保证金-借-贷-利息-")) {
                return WarningResult.build(subid, "第238条核查:交易编码为“821030收回或调回存放境外存款本金/存放境外存款”，但交易附言包含“保证金/借/贷/利息”");
            }
            //239交易编码为“822010负债-人寿保险和年金权益”，但交易附言不包含“年金/寿”或包含“利/赔/保费”。
            if (bopdecCommon.indexGt(txcode2, "-822010-") && (bopdecCommon.containsValue(tx2rem, "-利-赔-保费-") || !bopdecCommon.containsValue(tx2rem, "-年金-寿-"))) {
                return WarningResult.build(subid, "第239条核查:交易编码为“822010负债-人寿保险和年金权益”，但交易附言不包含“年金/寿”或包含“利/赔/保费”");
            }
            //240交易编码为“822020获得/偿还境外贷款”，但交易附言包含“息/母/子/附属/关联（但不是‘非关联’、‘无关联’)/联属”。
            if (bopdecCommon.indexGt(txcode2, "-822020-") && (bopdecCommon.containsValue(tx2rem, "-息-母-子-附属-") || (!bopdecCommon.containsValue(tx2rem, "-非关联-无关联-") && bopdecCommon.containsValue(tx2rem, "-关联-")) || (!bopdecCommon.containsValue(tx2rem, "-非联属-") && bopdecCommon.containsValue(tx2rem, "-联属-")))) {
                return WarningResult.build(subid, "第240条核查:交易编码为“822020获得/偿还境外贷款”，但交易附言包含“息/母/子/附属/关联（但不是‘非关联’、‘无关联’)/联属（但不是‘非联属’）”。");
            }
            //241交易编码1为“822030境外存入款项/调出”，但涉外收入交易附言1不包含“非居民从境外收款”、对外支出交易附言1不包含“非居民向境外付款”。
            if (bopdecCommon.indexGt(txcode2, "-822030-") && ((!bopdecCommon.containsValue(tx2rem, "-非居民从境外收款-收汇-收入-") && inifrm.startsWith("dba")) || (!bopdecCommon.containsValue(tx2rem, "-非居民向境外付款-付汇-支出-") && "-dbb-dbc-".indexOf(inifrm) > 0))) {
                return WarningResult.build(subid, "第241条核查:交易编码为“822030境外存入款项/调出”，但涉外收入交易附言不包含“非居民从境外收款/收汇/收入”、对外支出交易附言不包含“非居民向境外付款/付汇/支出”。");
            }
        }
        //96 交易附言1或交易附言2与申报主体名称一致。
        if (!MdaUtils.isEmpty(tx2rem) && !MdaUtils.isEmpty(custnm)) {
            if (tx2rem.equals(custnm)) {
                return WarningResult.buildEmpty(subid);
            }
        }
        //97 交易附言1小于等于2个字节或为空格或不含中文（交易附言为全字符、全字母、全数字、填写“无”或空）；有交易编码2但交易附言2小于等于2个字节或为空格或不含中文。
        if (!MdaUtils.isEmpty(txcode2)) {
            if (MdaUtils.isEmpty(tx2rem) || "无".equals(tx2rem.trim()) || len <= 2 || !bopdecCommon.isChinese(tx2rem)) {
                return WarningResult.buildEmpty(subid);
            }
        }
        return WarningResult.buildEmpty(subid);
    }

    public ValidResult checkRegno2(CheckItems checkItems){
        String regno = checkItems.getRegno();
        String txcode = checkItems.getTxcode();
        String txcode2 = checkItems.getTxcode2();
        String txrem = checkItems.getTxrem();
        String transName = checkItems.getTransName().toLowerCase();
//        String inifrm = Strings.mid(transName, 1, 3);
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
        if (!MdaUtils.isEmpty(regno)) {
            String str = regno;
            byte[] buff = null;
            try {
                buff = str.getBytes("GB18030");
            }catch(Exception e) {
                return ValidResult.build(false, "getBytes fail...");
            }
            int len = buff.length;
            if(len > 20) {
                return ValidResult.build(false, "该字段只能输入20个字符！");
            }
//            if (!"N/A".equals(regno)) {
//                if (!(regno.length() == 20)) {
//                    return ValidResult.build(false, "提示:外汇局批件号/备案表号/业务编号信息不填或必填（20位）或填写为N/A");
//                }
//            }
        }
        //dir：I 收入  ；O 支出
        String dir = "";
        if( "dbd".equals(inifrm)) {
            dir = "I";
        }
        else if ("dbe".equals(inifrm) || "dbf".equals(inifrm)) {
            dir = "O";
        }
        boolean required = false;
        if(!MdaUtils.isEmpty(txcode) && (bopdecCommon.jshisZb(transName,dir,txcode) || bopdecCommon.tsisZb(transName,dir,txcode))) {
            required = true;
        }
        if(!MdaUtils.isEmpty(txcode2) && (bopdecCommon.jshisZb(transName,dir,txcode2) || bopdecCommon.tsisZb(transName,dir,txcode2))) {
            required = true;
        }
        if(!required) {
            return null;
        }
        if(!MdaUtils.isEmpty(regno)) {
            if("n/a".equals(regno) || "N/a".equals(regno) || "n/A".equals(regno)) {
                return ValidResult.build(false, "外汇局批件/备案表号必须为N/A");
            }
        }else {
            if ( (!MdaUtils.isEmpty(txcode) && bopdecCommon.jshisZb(transName,dir,txcode)) || (!MdaUtils.isEmpty(txcode2) && bopdecCommon.jshisZb(transName,dir,txcode2))) {
                return ValidResult.build(false, "资本项目项下交易此字段必填，没有请填写N/A");
            }else {
//                return ValidResult.build(false, "外汇局批件号/备案表号/业务编号\",\"资本项目项下交易此字段必填，没有请填写N/A");
            }
        }
        return null;
    }

    public WarningResult warncheckRegno2(CheckItems checkItems,String subid){
        String regno = checkItems.getRegno();
        String txcode = checkItems.getTxcode();
        String txcode2 = checkItems.getTxcode2();
        String txrem = checkItems.getTxrem();
        String transName = checkItems.getTransName().toLowerCase();
//        String inifrm = Strings.mid(transName, 1, 3);
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
        if (!MdaUtils.isEmpty(regno)) {
            String str = regno;
            byte[] buff = null;
            try {
                buff = str.getBytes("GB18030");
            }catch(Exception e) {
                return WarningResult.buildEmpty(subid);
            }
            int len = buff.length;
            if(len > 20) {
                return WarningResult.buildEmpty(subid);
            }
            if (!"N/A".equals(regno)) {
                if (!(regno.length() == 20)) {
                    return WarningResult.build(subid, "提示:外汇局批件号/备案表号/业务编号信息不填或必填（20位）或填写为N/A");
                }
            }
        }
        //dir：I 收入  ；O 支出
        String dir = "";
        if( "dbd".equals(inifrm)) {
            dir = "I";
        }
        else if ("dbe".equals(inifrm) || "dbf".equals(inifrm)) {
            dir = "O";
        }
        boolean required = false;
        if(!MdaUtils.isEmpty(txcode) && (bopdecCommon.jshisZb(transName,dir,txcode) || bopdecCommon.tsisZb(transName,dir,txcode))) {
            required = true;
        }
        if(!MdaUtils.isEmpty(txcode2) && (bopdecCommon.jshisZb(transName,dir,txcode2) || bopdecCommon.tsisZb(transName,dir,txcode2))) {
            required = true;
        }
        if(!required) {
            return WarningResult.buildEmpty(subid);
        }
        if(!MdaUtils.isEmpty(regno)) {
            if("n/a".equals(regno) || "N/a".equals(regno) || "n/A".equals(regno)) {
                return WarningResult.buildEmpty(subid);
            }
        }else {
            if ( (!MdaUtils.isEmpty(txcode) && bopdecCommon.jshisZb(transName,dir,txcode)) || (!MdaUtils.isEmpty(txcode2) && bopdecCommon.jshisZb(transName,dir,txcode2))) {
                return WarningResult.buildEmpty(subid);
            }else {
                return WarningResult.build(subid, "外汇局批件号/备案表号/业务编号\",\"资本项目项下交易此字段必填，没有请填写N/A");
            }
        }
        return WarningResult.buildEmpty(subid);
    }


    public ValidResult checkRegno1(CheckItems checkItems){
        String regno = checkItems.getRegno();
        String txcode = checkItems.getTxcode();
        String txcode2 = checkItems.getTxcode2();
        String txrem = checkItems.getTxrem();
        String transName = checkItems.getTransName().toLowerCase();
//        String inifrm = Strings.mid(transName, 1, 3);
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
        if (!MdaUtils.isEmpty(regno)) {
            String str = regno;
            byte[] buff = null;
            try {
                buff = str.getBytes("GB18030");
            }catch(Exception e) {
                return ValidResult.build(false, "getBytes fail...");
            }
            int len = buff.length;
            if(len > 20) {
                return ValidResult.build(false, "该字段只能输入20个字符！");
            }
//            if (!"N/A".equals(regno)) {
//                if (!(regno.length() == 20)) {
//                    return ValidResult.build(false, "提示:外汇局批件号/备案表号/业务编号信息不填或必填（20位）或填写为N/A");
//                }
//            }
        }
        boolean required = false;
        if(!MdaUtils.isEmpty(txcode) && bopdecCommon.isZb(txcode)) {
            required = true;
        }
        if(!MdaUtils.isEmpty(txcode2)&& bopdecCommon.isZb(txcode2)) {
            required = true;
        }
        if(!required) {
            return null;
        }
        if(!MdaUtils.isEmpty(regno)) {
            if("n/a".equals(regno) || "N/a".equals(regno) || "n/A".equals(regno)) {
                return ValidResult.build(false, "外汇局批件/备案表号必须为N/A");
            }
        }else {
            return ValidResult.build(false, "资本项目项下交易此字段必填，没有请填写N/A");
        }
        return null;
    }

    public WarningResult warnCheckRegno1(CheckItems checkItems,String subid){
        String regno = checkItems.getRegno();
        String txcode = checkItems.getTxcode();
        String txcode2 = checkItems.getTxcode2();
        String txrem = checkItems.getTxrem();
        String transName = checkItems.getTransName().toLowerCase();
//        String inifrm = Strings.mid(transName, 1, 3);
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
        if (!MdaUtils.isEmpty(regno)) {
            String str = regno;
            byte[] buff = null;
            try {
                buff = str.getBytes("GB18030");
            }catch(Exception e) {
                return WarningResult.buildEmpty(subid);
            }
            int len = buff.length;
            if(len > 20) {
                return WarningResult.buildEmpty(subid);
            }
            if (!"N/A".equals(regno)) {
                if (!(regno.length() == 20)) {
                    return WarningResult.build(subid, "提示:外汇局批件号/备案表号/业务编号信息不填或必填（20位）或填写为N/A");
                }
            }
        }
        boolean required = false;
        if(!MdaUtils.isEmpty(txcode) && bopdecCommon.isZb(txcode)) {
            required = true;
        }
        if(!MdaUtils.isEmpty(txcode2)&& bopdecCommon.isZb(txcode2)) {
            required = true;
        }
        if(!required) {
            return WarningResult.buildEmpty(subid);
        }
        if(!MdaUtils.isEmpty(regno)) {
            if("n/a".equals(regno) || "N/a".equals(regno) || "n/A".equals(regno)) {
                return WarningResult.buildEmpty(subid);
            }
        }else {
            return WarningResult.buildEmpty(subid);
        }
        return WarningResult.buildEmpty(subid);
    }

    public ValidResult checkRegno(CheckItems checkItems){
        //境内付款/承兑通知书-管理信息REGNO，无此编号时，N/A不强制，
        //外汇局批件号/备案表号/业务编号信息不填或必填（20位）或填写为N/A
        String regno = checkItems.getRegno();
        String txcode = checkItems.getTxcode();
        String txcode2 = checkItems.getTxcode2();
        String txrem = checkItems.getTxrem();
        String transName = checkItems.getTransName().toLowerCase();
//        String inifrm = Strings.mid(transName, 1, 3);
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
        if (!MdaUtils.isEmpty(regno)) {
            String str = regno;
            byte[] buff = null;
            try {
                buff = str.getBytes("GB18030");
            }catch(Exception e) {
                return ValidResult.build(false, "getBytes fail...");
            }
            int len = buff.length;
            if(len > 20) {
                return ValidResult.build(false, "该字段只能输入20个字符！");
            }
//            if (!"N/A".equals(regno)) {
//                if (!(regno.length() == 20)) {
//                    return ValidResult.build(false, "提示:外汇局批件号/备案表号/业务编号信息不填或必填（20位）或填写为N/A");
//                }
//            }
        }else {
            if(!MdaUtils.isEmpty(txcode) && !MdaUtils.isEmpty(txrem) && "929090".equals(txcode.trim()) && "非居民机构账户间划转".equals(txrem.trim())) {
                return ValidResult.build(false, "当交易编码1为“929090”且“交易附言1”栏位填写的内容为“非居民机构账户间划转”时，“外汇局批件号/备案表号/业务编号”必输，没有填“N/A”。");
            }
        }
        //dir：I 收入  ；O 支出
        String dir = "";
        if( "dbd".equals(inifrm)) {
            dir = "I";
        }
        else if ("dbe".equals(inifrm) || "dbf".equals(inifrm)) {
            dir = "O";
        }
        boolean required = false;
        if(!MdaUtils.isEmpty(txcode) && (bopdecCommon.jshisZb(transName,dir,txcode) || bopdecCommon.tsisZb(transName,dir,txcode))) {
            required = true;
        }
        if(!MdaUtils.isEmpty(txcode2) && (bopdecCommon.jshisZb(transName,dir,txcode2) || bopdecCommon.tsisZb(transName,dir,txcode2))) {
            required = true;
        }
        if(!required) {
            return null;
        }
        if(!MdaUtils.isEmpty(regno)) {
            if("n/a".equals(regno) || "N/a".equals(regno) || "n/A".equals(regno)) {
                return ValidResult.build(false, "外汇局批件/备案表号必须为N/A");
            }
        }else {
            if ( (!MdaUtils.isEmpty(txcode) && bopdecCommon.jshisZb(transName,dir,txcode)) || (!MdaUtils.isEmpty(txcode2) && bopdecCommon.jshisZb(transName,dir,txcode2))) {
                return ValidResult.build(false, "资本项目项下交易此字段必填，没有请填写N/A");
            }else {
//                return ValidResult.build(false, "外汇局批件号/备案表号/业务编号\",\"资本项目项下交易此字段必填，没有请填写N/A");
            }
        }
        return null;
    }

    public WarningResult warncheckRegno(CheckItems checkItems,String subid){
        //境内付款/承兑通知书-管理信息REGNO，无此编号时，N/A不强制，
        //外汇局批件号/备案表号/业务编号信息不填或必填（20位）或填写为N/A
        String regno = checkItems.getRegno();
        String txcode = checkItems.getTxcode();
        String txcode2 = checkItems.getTxcode2();
        String txrem = checkItems.getTxrem();
        String transName = checkItems.getTransName().toLowerCase();
//        String inifrm = Strings.mid(transName, 1, 3);
        String inifrm = checkItems.getBopobjtyp().toLowerCase();
        if (!MdaUtils.isEmpty(regno)) {
            String str = regno;
            byte[] buff = null;
            try {
                buff = str.getBytes("GB18030");
            }catch(Exception e) {
                return WarningResult.buildEmpty(subid);
            }
            int len = buff.length;
            if(len > 20) {
                return WarningResult.buildEmpty(subid);
            }
            if (!"N/A".equals(regno)) {
                if (!(regno.length() == 20)) {
                    return WarningResult.build(subid, "提示:外汇局批件号/备案表号/业务编号信息不填或必填（20位）或填写为N/A");
                }
            }
        }else {
            if(!MdaUtils.isEmpty(txcode) && !MdaUtils.isEmpty(txrem) && "929090".equals(txcode.trim()) && "非居民机构账户间划转".equals(txrem.trim())) {
                return WarningResult.buildEmpty(subid);
            }
        }
        //dir：I 收入  ；O 支出
        String dir = "";
        if( "dbd".equals(inifrm)) {
            dir = "I";
        }
        else if ("dbe".equals(inifrm) || "dbf".equals(inifrm)) {
            dir = "O";
        }
        boolean required = false;
        if(!MdaUtils.isEmpty(txcode) && (bopdecCommon.jshisZb(transName,dir,txcode) || bopdecCommon.tsisZb(transName,dir,txcode))) {
            required = true;
        }
        if(!MdaUtils.isEmpty(txcode2) && (bopdecCommon.jshisZb(transName,dir,txcode2) || bopdecCommon.tsisZb(transName,dir,txcode2))) {
            required = true;
        }
        if(!required) {
            return WarningResult.buildEmpty(subid);
        }
        if(!MdaUtils.isEmpty(regno)) {
            if("n/a".equals(regno) || "N/a".equals(regno) || "n/A".equals(regno)) {
                return WarningResult.buildEmpty(subid);
            }
        }else {
            if ( (!MdaUtils.isEmpty(txcode) && bopdecCommon.jshisZb(transName,dir,txcode)) || (!MdaUtils.isEmpty(txcode2) && bopdecCommon.jshisZb(transName,dir,txcode2))) {
                return WarningResult.buildEmpty(subid);
            }else {
                return WarningResult.build(subid, "外汇局批件号/备案表号/业务编号\",\"资本项目项下交易此字段必填，没有请填写N/A");
            }
        }
        return WarningResult.buildEmpty(subid);
    }

    public ValidResult checkInchargeamt(CheckItems checkItems){
        BigDecimal inchargeamtB = checkItems.getInchargeamt();
        if(MdaUtils.isEmpty(inchargeamtB)){
            inchargeamtB = BigDecimal.ZERO;
        }
        String inchargeacc = checkItems.getInchargeccy();
        BigDecimal zero = BigDecimal.ZERO;
        if (inchargeamtB.compareTo(zero) == 0 && !MdaUtils.isEmpty(inchargeacc)) {
            return ValidResult.build(false, "此金额必须大于零!");
        }
        if (inchargeamtB.compareTo(zero) < 0) {
            return ValidResult.build(false, "此金额不能小于零!");
        }
        return null;
    }

    public ValidResult checkCommonCountry(CheckItems checkItems){
        String cod = checkItems.getCountry();
        int count = bopctyMapper.queryBopCodExist(cod);
        if(count == 0){
            return ValidResult.build(false,"国家代码输入错误,请重新输入！");
        }
        return null;
    }
}
