/*******************************************************************************
*	 All Rights reserved,Copyright (c) K-Opticom 
********************************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JEKK0351C240KRCK
*	ソースファイル名：JEKK0351C240KRCK.java
*	作成者			：富士通
*	日付			：2011年10月19日
*＜機能概要＞
*	関連チェック部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	ｖ1.00.00
*    v5.00.00   2013/10/23  FJ）小島	OM-2013-0003526
*   v39.00.00	2018/10/12	FJ) 山地	ANK-3484-00-00 端末補償サービス導入対応
*   v39.00.01	2018/10/12	FJ)山地		IT1-2018-0000186 PCワイドプランの前月末解約対応
*   v71.00.00	2024/06/25	FJ) 渋谷	ANK-4468-00-00 eo光ネット「シンプルプラン」追加対応
********************************************************************************/

package eo.ejb.common.entity;

import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbm.entity.KK0081ETMsg;
import eo.ejb.cbm.entity.KK0091ETMsg;
import eo.ejb.cbm.entity.KK0351ETMsg;
import eo.ejb.cbs.cbsmsg.EKK0351C240CBSMsg;
import eo.ejb.common.JKKModelCommon;
import eo.ejb.common.JKKModelConst;
import eo.ejb.common.db.JKKejbKK0081DBABase;
import eo.ejb.common.db.JKKejbKK0091DBABase;
import eo.ejb.common.db.JKKejbKK0351DBABase;
import eo.ejb.common.edit.JKKejbSeptWarnInfoFlgEdit;

/**
 * <p>
 * オプションサービス契約解約チェッククラスです。
 * ＜メソッド一覧＞
 * execKRCK
 * execEKK0351C240_KR1
 * execEKK0351C240_KR2
 * execEKK0351C240_KR4
 * execEKK0351C240_KR5
 * execEKK0351C240_KR6
 * execEKK0351C240_KR7
 * </p>
 * @author 富士通
 */

public class JEKK0351C240KRCK
{

	/** 異動予約詳細コード：サービス解約 */
	static final String IDO_RSV_CD_SVC_DSL = "007";

	/** 異動予約状態コード：予約手続中 */
	static final String IDO_RSV_STAT_CD_RSV_TETUDUKI = "03";
	
	/** オプションサービスコード：スマートリンクサービス */
	static final String OPT_SVC_CD_SMT_LINK_SVC = "B077";
	// IT1-2018-0000186 ADD START
	/** ＰＣプラン */
	static final String OP_SVC_CD_B133 = "B133";
	// IT1-2018-0000186 ADD END
	/**
	 * コンストラクタ
	 */
	public JEKK0351C240KRCK()
	{
	}

	/**
	 * オプションサービス契約解約チェックを行います。
	 * 
	 * @param inCBSMsg エンティティ
	 * @param inContext Agentから渡されたAgentDispatchContext
	 */
	public void execKRCK(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		JSYejbLog.println(JSYejbLog.DEBUG, getClass(), "call:JEKK0351C240KRCK.execKRCK");

		// ステータス
		int rtn = 0;

		rtn = execEKK0351C240_KR1(inCBSMsg, inContext, "EA");
		if (rtn <= StatusCodes.WARNING)
		{
			rtn = execEKK0351C240_KR2(inCBSMsg, inContext, "EA");
		}
		if (rtn <= StatusCodes.WARNING)
		{
			rtn = execEKK0351C240_KR4(inCBSMsg, inContext, "EA");
		}
		if (rtn <= StatusCodes.WARNING)
		{
			rtn = execEKK0351C240_KR5(inCBSMsg, inContext, "EA");
		}
		if (rtn <= StatusCodes.WARNING)
		{
			rtn = execEKK0351C240_KR6(inCBSMsg, inContext, "EB");
		}
		if (rtn <= StatusCodes.WARNING)
		{
			rtn = execEKK0351C240_KR7(inCBSMsg, inContext, "WA");
		}
		if (rtn <= StatusCodes.WARNING)
		{
			rtn = execEKK0351C240_KR8(inCBSMsg, inContext, "WA");
		}
		if (rtn <= StatusCodes.WARNING)
		{
			rtn = execEKK0351C240_KR9(inCBSMsg, inContext, "IA");
		}
		if (rtn <= StatusCodes.WARNING)
		{
			rtn = execEKK0351C240_KR11(inCBSMsg, inContext, "EB");
		}		
		if (rtn <= StatusCodes.WARNING)
		{
			rtn = execEKK0351C240_KR12(inCBSMsg, inContext, "EC");
		}		
		if (rtn <= StatusCodes.WARNING)
		{
			rtn = execEKK0351C240_KR13(inCBSMsg, inContext, "ED");
		}		
		if (rtn <= StatusCodes.WARNING)
		{
			rtn = execEKK0351C240_KR14(inCBSMsg, inContext, "EE");
		}		
		if (rtn <= StatusCodes.WARNING)
		{
			rtn = execEKK0351C240_KR15(inCBSMsg, inContext, "EC");
		}		
		JSYejbLog.println(JSYejbLog.DEBUG, getClass(), "end:JEKK0351C240KRCK.execKRCK");
	}

	/**
	 * EKK0351C240_制約ＮＯ１（関連）チェック
	 * 存在チェックを行う
	 *
	 * @param  inCBSMsg チェック対象のCBSMsg(KK0351CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag ERRフラグ
	 * @return result チェック結果
	 */
	private int execEKK0351C240_KR1(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// リターン初期値変数
		int result = 0;

		JKKejbKK0351KRCK kk0351krck = new JKKejbKK0351KRCK();
		
		if(!inCBSMsg.isNull(EKK0351C240CBSMsg.OP_SVC_KEI_NO))
		{
			// ETメッセージ
			CAANMsg inETMsg = new CAANMsg(KK0351ETMsg.class.getName());
			inETMsg.set(KK0351ETMsg.OP_SVC_KEI_NO, inCBSMsg.getString(EKK0351C240CBSMsg.OP_SVC_KEI_NO));
			inETMsg.set(KK0351ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inCBSMsg));

			CAANMsg msg = kk0351krck.findByCurrent(inETMsg);

			if (msg == null)
			{
				// レコードが存在しない場合
				inCBSMsg.set(EKK0351C240CBSMsg.OP_SVC_KEI_NO_ERR, errFlag);

				if ("W".equals(errFlag.substring(0, 1)))
				{
					result = StatusCodes.WARNING;
				}
				else
				{
					result = StatusCodes.RELATION_ERR;
				}
			}
			// ステータスのセット
			if (result > inCBSMsg.getInt(JCMConstants.STATUS_INT_KEY))
			{
				inCBSMsg.set(JCMConstants.STATUS_INT_KEY, result);
			}

		}
		
		// レコードが存在しない場合
		return result;
	}

	/**
	 * EKK0351C240_制約ＮＯ２（関連）チェック
	 * 存在チェックを行う
	 *
	 * @param  inCBSMsg チェック対象のCBSMsg(KK0161CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag ERRフラグ
	 * @return result チェック結果
	 */
	private int execEKK0351C240_KR2(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// リターン初期値変数
		int result = 0;

		JKKejbKK0021KRCK kk0021krck = new JKKejbKK0021KRCK();

		if (!kk0021krck.isExistsNonGene(inCBSMsg.getString(EKK0351C240CBSMsg.MSKM_DTL_NO)))
		{
			// レコードが存在する場合
			inCBSMsg.set(EKK0351C240CBSMsg.MSKM_DTL_NO_ERR, errFlag);

			if ("W".equals(errFlag.substring(0, 1)))
			{
				result = StatusCodes.WARNING;
			}
			else
			{
				result = StatusCodes.RELATION_ERR;
			}
		}
		// ステータスのセット
		if (result > inCBSMsg.getInt(JCMConstants.STATUS_INT_KEY))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, result);
		}

		// レコードが存在しない場合
		return result;
	}

	/**
	 * EKK0351C240_制約ＮＯ４（関連）チェック
	 * 状態チェックを行う
	 *
	 * @param  inCBSMsg  チェック対象のCBSMsg(KK0161CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag   ERRフラグ
	 * @return result    チェック結果
	 */
	private int execEKK0351C240_KR4(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// ステータス
		int rtn = 0;

		// 制約部品引数定義
		// ETメッセージ
		CAANMsg inETMsg = new CAANMsg(KK0351ETMsg.class.getName());
		inETMsg.set(KK0351ETMsg.TEMPLATEID, inCBSMsg.getString(EKK0351C240CBSMsg.TEMPLATEID));
		inETMsg.set(KK0351ETMsg.OP_SVC_KEI_NO, inCBSMsg.getString(EKK0351C240CBSMsg.OP_SVC_KEI_NO));

		// 判定条件
		if (JKKModelCommon.checkStateTransitionKK0351(inETMsg, inContext) == false)
		{
			inCBSMsg.set(EKK0351C240CBSMsg.OP_SVC_KEI_NO_ERR, errFlag);
			if ("W".equals(errFlag.substring(0, 1)))
			{
				rtn = StatusCodes.WARNING;
			}
			else
			{
				rtn = StatusCodes.STATUSTRANS_ERR;
			}
		}

		// ステータスのセット
		if (rtn > inCBSMsg.getInt(JCMConstants.STATUS_INT_KEY))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, rtn);
		}

		return rtn;
	}

	/**
	 * EKK0351C240_制約ＮＯ１５（関連）チェック
	 * サービス終了年月日過去日チェックを行う
	 *
	 * @param  inCBSMsg  チェック対象のCBSMsg(KK0161CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag   ERRフラグ
	 * @return result    チェック結果
	 */
	private int execEKK0351C240_KR15(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// ステータス
		int rtn = 0;

		// バッチ起動の場合、チェック対象外
		if (JKKModelCommon.isCallTypeBatch(inCBSMsg, inContext))
		{
			return rtn;
		}

		// オプションサービス契約番号が未設定の場合、チェック対象外
		if (inCBSMsg.isNull(EKK0351C240CBSMsg.OP_SVC_KEI_NO))
		{
			return rtn;
		}

		// サービス終了年月日が未設定の場合、チェック対象外
		if (inCBSMsg.isNull(EKK0351C240CBSMsg.SVC_ENDYMD))
		{
			return rtn;
		}

		// 対象の「オプションサービス契約」カレントレコードを取得する。
		String opSvcKeiNo = inCBSMsg.getString(EKK0351C240CBSMsg.OP_SVC_KEI_NO);
		String opeDate = JKKModelCommon.getOpeDate(inCBSMsg);
		CAANMsg kk0351Msg = new JKKejbKK0351DBABase().getKK0351Current(opSvcKeiNo, opeDate);

		// 対象の「オプションサービス契約」の親「サービス契約」を取得する。
		CAANMsg kk0081Msg = new JKKejbKK0081DBABase().getKK0081byOpSvcKei(kk0351Msg, opeDate);

		// テレビオプション(親「サービス契約」のサービスコードが"テレビサービス")の場合、チェック対象外
		if (JKKModelConst.SVC_CD_TV.equals(kk0081Msg.getString(KK0081ETMsg.SVC_CD)))
		{
			return rtn;
		}

		// サービス終了年月日が過去日の場合、チェックＮＧ
		// IT1-2018-0000186 MOD START
		//if (JKKejbDateChecker.isPastDate(inCBSMsg, inContext, inCBSMsg.getString(EKK0351C240CBSMsg.SVC_ENDYMD), "0"))
		if (JKKejbDateChecker.isPastDate(inCBSMsg, inContext, inCBSMsg.getString(EKK0351C240CBSMsg.SVC_ENDYMD), "0") && !(OP_SVC_CD_B133.equals(kk0351Msg.getString(KK0351ETMsg.OP_SVC_CD))))
		// IT1-2018-0000186 MOD END
		{
			inCBSMsg.set(EKK0351C240CBSMsg.SVC_ENDYMD_ERR, errFlag);
			if ("W".equals(errFlag.substring(0, 1)))
			{
				rtn = StatusCodes.WARNING;
			}
			else
			{
				rtn = StatusCodes.RELATION_ERR;
			}
		}

		// ステータスのセット
		if (rtn > inCBSMsg.getInt(JCMConstants.STATUS_INT_KEY))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, rtn);
		}

		return rtn;
	}

	/**
	 * EKK0351C240_制約ＮＯ５（関連）チェック
	 * サービス終了年月日未来日設定チェックを行う
	 *
	 * @param  inCBSMsg  チェック対象のCBSMsg(KK0161CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag   ERRフラグ
	 * @return result    チェック結果
	 */
	private int execEKK0351C240_KR5(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// ステータス
		int rtn = 0;
		
		// 住所変更の場合はチェックを行わない	
		if (JKKModelConst.IDO_DIV_ADCHG_ADD.equals(inCBSMsg.getString(EKK0351C240CBSMsg.IDO_DIV)))
		{
			return rtn;
		}

		// 制約部品引数定義
		// オプションサービス契約のカレントレコード検索
		CAANMsg msgKK0351 = new CAANMsg(KK0351ETMsg.class.getName());
		msgKK0351.set(KK0351ETMsg.OP_SVC_KEI_NO, inCBSMsg.getString(EKK0351C240CBSMsg.OP_SVC_KEI_NO));
		msgKK0351.set(KK0351ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inCBSMsg));

		CAANMsg retMsgKK0351 = new JKKejbKK0351DBABase().findByCurrent(msgKK0351);

		if (null == retMsgKK0351)
		{
			return rtn;
		}

		// 判定条件
		if (JKKModelCommon.isSvcTagYmdFutureChkKK0351(retMsgKK0351, inContext, inCBSMsg.getString(EKK0351C240CBSMsg.SVC_ENDYMD)) == false)
		{
			inCBSMsg.set(EKK0351C240CBSMsg.SVC_ENDYMD_ERR, errFlag);
			if ("W".equals(errFlag.substring(0, 1)))
			{
				rtn = StatusCodes.WARNING;
			}
			else
			{
				rtn = StatusCodes.RELATION_ERR;
			}
		}

		// ステータスのセット
		if (rtn > inCBSMsg.getInt(JCMConstants.STATUS_INT_KEY))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, rtn);
		}

		return rtn;
	}

	/**
	 * EKK0351C240_制約ＮＯ６（関連）チェック
	 * サービス終了年月日期間チェックを行う
	 *
	 * @param  inCBSMsg  チェック対象のCBSMsg(KK0161CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag   ERRフラグ
	 * @return result    チェック結果
	 */
	private int execEKK0351C240_KR6(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// ステータス
		int rtn = 0;

		// サービス終了年月日が未設定の場合はチェックを行わない
		if (inCBSMsg.isNull(EKK0351C240CBSMsg.SVC_ENDYMD))
		{
			return rtn;
		}
		
		// 住所変更の場合はチェックを行わない	
		if (JKKModelConst.IDO_DIV_ADCHG_ADD.equals(inCBSMsg.getString(EKK0351C240CBSMsg.IDO_DIV)))
		{
			return rtn;
		}
		
		// ANK-4468-00-00 ADD START
		String hktgiSvcKeiNo = inCBSMsg.getString(EKK0351C240CBSMsg.OP_HKTGI_SK_SVC_KEI_NO);
		if (hktgiSvcKeiNo != null && hktgiSvcKeiNo.length() > 0)
		{
			// サービス契約のカレントレコード検索
			CAANMsg msgKK0081 = new CAANMsg(KK0081ETMsg.class.getName());
			msgKK0081.set(KK0081ETMsg.SVC_KEI_NO, hktgiSvcKeiNo );
			msgKK0081.set(KK0081ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inCBSMsg));

			CAANMsg retMsgKK0081 = new JKKejbKK0081DBABase().findByCurrent(msgKK0081);
			if (retMsgKK0081 != null)
				{
				String stat = retMsgKK0081.getString(KK0081ETMsg.SVC_KEI_STAT);
				if ("020".equals(stat) || "030".equals(stat))
					{
					// サービス契約<eo光ネット>の検索
					CAANMsg msgKK0091 = new CAANMsg(KK0091ETMsg.class.getName());
					msgKK0091.set(KK0091ETMsg.SVC_KEI_NO, retMsgKK0081.getString(KK0081ETMsg.SVC_KEI_NO));
					msgKK0091.set(KK0091ETMsg.GENE_ADD_DTM, retMsgKK0081.getString(KK0081ETMsg.GENE_ADD_DTM));

					CAANMsg retMsgKK0091 = new JKKejbKK0091DBABase().findByPrimaryKey(msgKK0091);
					
					if (retMsgKK0091 != null && !retMsgKK0091.isNull(KK0091ETMsg.NRKEMT_SVKEI_NO) && retMsgKK0091.getString(KK0091ETMsg.NRKEMT_SVKEI_NO).length() > 0)
						{
						return rtn;
						}
					}
				}
			}
		// ANK-4468-00-00 ADD END
		// 制約部品引数定義
		CAANMsg msgKK0351 = new CAANMsg(KK0351ETMsg.class.getName());
		msgKK0351.set(KK0351ETMsg.OP_SVC_KEI_NO, inCBSMsg.getString(EKK0351C240CBSMsg.OP_SVC_KEI_NO));

		// 判定条件
		if (JKKModelCommon.isOpSvcRsvValidOyaSvcChkKK0351(msgKK0351, inContext, inCBSMsg.getString(EKK0351C240CBSMsg.SVC_ENDYMD)) == false)
		{
			inCBSMsg.set(EKK0351C240CBSMsg.SVC_ENDYMD_ERR, errFlag);
			if ("W".equals(errFlag.substring(0, 1)))
			{
				rtn = StatusCodes.WARNING;
			}
			else
			{
				rtn = StatusCodes.RELATION_ERR;
			}
		}

		// ステータスのセット
		if (rtn > inCBSMsg.getInt(JCMConstants.STATUS_INT_KEY))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, rtn);
		}

		return rtn;
	}
	
	/**
	 * EKK0351C240_制約ＮＯ７（関連）チェック
	 * サービス終了年月日未来日制御チェックを行う
	 *
	 * @param  inCBSMsg  チェック対象のCBSMsg(KK0161CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag   ERRフラグ
	 * @return result    チェック結果
	 */
	private int execEKK0351C240_KR7(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// ステータス
		int rtn = 0;

		// 制約部品引数定義
		// オプションサービス契約のカレントレコード検索
		CAANMsg msgKK0351 = new CAANMsg(KK0351ETMsg.class.getName());
		msgKK0351.set(KK0351ETMsg.OP_SVC_KEI_NO, inCBSMsg.getString(EKK0351C240CBSMsg.OP_SVC_KEI_NO));
		msgKK0351.set(KK0351ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inCBSMsg));

		CAANMsg retMsgKK0351 = new JKKejbKK0351DBABase().findByCurrent(msgKK0351);

		if (null == retMsgKK0351)
		{
			return rtn;
		}

		// インターフェイスの入力値を設定
		retMsgKK0351.set(KK0351ETMsg.SVC_ENDYMD, inCBSMsg.getString(EKK0351C240CBSMsg.SVC_ENDYMD));

		// 判定条件
		if (JKKModelCommon.isSvcEndDtmFutureCtrlWngKK0351(retMsgKK0351, inContext) == false)
		{
			inCBSMsg.set(EKK0351C240CBSMsg.SVC_ENDYMD_ERR, errFlag);
			if ("W".equals(errFlag.substring(0, 1)))
			{
				rtn = StatusCodes.WARNING;
			}
			else
			{
				rtn = StatusCodes.RELATION_ERR;
			}
		}

		// ステータスのセット
		if (rtn > inCBSMsg.getInt(JCMConstants.STATUS_INT_KEY))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, rtn);
		}

		return rtn;
	}
	
	/**
	 * EKK0351C240_制約ＮＯ８（関連）チェック
	 * 割賦情報有効チェックを行う
	 *
	 * @param  inCB	SMsg  チェック対象のCBSMsg(KK0161CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag   ERRフラグ
	 * @return result    チェック結果
	 */
	private int execEKK0351C240_KR8(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{

		// ステータス
		int rtn = 0;

		if (inCBSMsg.isNull(EKK0351C240CBSMsg.OP_SVC_KEI_NO))
		{
			return rtn;
		}

		// オプションサービス契約のカレントレコード検索
		CAANMsg msgKK0351 = new CAANMsg(KK0351ETMsg.class.getName());
		msgKK0351.set(KK0351ETMsg.OP_SVC_KEI_NO, inCBSMsg.getString(EKK0351C240CBSMsg.OP_SVC_KEI_NO));
		msgKK0351.set(KK0351ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inCBSMsg));

		CAANMsg retMsgKK0351 = new JKKejbKK0351DBABase().findByCurrent(msgKK0351);

		if (null == retMsgKK0351)
		{
			return rtn;
		}

		String opsSvcCd = retMsgKK0351.getString(KK0351ETMsg.OP_SVC_CD);

		// オプションサービスコードがスマートサービスでない場合
		if (!OPT_SVC_CD_SMT_LINK_SVC.equals(opsSvcCd))
		{
			return rtn;
		}

		// 判定条件
		if (JKKModelCommon.isKapInfoExsistTabKK0351(retMsgKK0351, inContext) == false)
		{
			inCBSMsg.set(EKK0351C240CBSMsg.OP_SVC_KEI_NO_ERR, errFlag);
			if ("W".equals(errFlag.substring(0, 1)))
			{
				rtn = StatusCodes.WARNING;
			}
			else
			{
				rtn = StatusCodes.RELATION_ERR;
			}
		}

		// ステータスのセット
		if (rtn > inCBSMsg.getInt(JCMConstants.STATUS_INT_KEY))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, rtn);
		}

		return rtn;
	}

	/**
	 * EKK0351C240_制約ＮＯ９（関連）チェック
	 * 子オプションサービス契約自動解約チェック
	 *
	 * @param  inCB	SMsg  チェック対象のCBSMsg(KK0161CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag   ERRフラグ
	 * @return result    チェック結果
	 */
	private int execEKK0351C240_KR9(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// ステータス
		int rtn = 0;

		// オプションサービス契約番号がnullの場合、チェックせず
		if (inCBSMsg.isNull(EKK0351C240CBSMsg.OP_SVC_KEI_NO))
		{
			return rtn;
		}

		JKKejbSeptWarnInfoFlgEdit edit = new JKKejbSeptWarnInfoFlgEdit();

		// オプションサービス契約のチェック用メッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK0351ETMsg.class.getName());
		inETMsg.set(KK0351ETMsg.OP_SVC_KEI_NO, inCBSMsg.getString(EKK0351C240CBSMsg.OP_SVC_KEI_NO));

		// 子オプションサービス契約自動解約チェック処理の返却値がtrueの場合、確認
		if (JKKModelCommon.isSubOptSvcKeiAutoCnclKK0351(inETMsg, inContext))
		{
			inCBSMsg.set(EKK0351C240CBSMsg.WARN_FLG_ERR,
					edit.getSeptWarnInfoFlg(inCBSMsg.getString(EKK0351C240CBSMsg.WARN_FLG_ERR), errFlag));
		}

		return rtn;
	}

	/**
	 * EKK0351C240_制約ＮＯ１１（関連）チェック
	 * 未完了工事案件ISP認証ID変更チェック
	 *
	 * @param  inCB	SMsg  チェック対象のCBSMsg(KK0161CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag   ERRフラグ
	 * @return result    チェック結果
	 */
	private int execEKK0351C240_KR11(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// ステータス
		int rtn = 0;

		// オプションサービス契約番号がnullの場合、チェックせず
		if (inCBSMsg.isNull(EKK0351C240CBSMsg.OP_SVC_KEI_NO))
		{
			return rtn;
		}

/* TODO 未完了工事案件ISP認証ID変更チェック
		// オプションサービス契約のチェック用メッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK0351ETMsg.class.getName());
		inETMsg.set(KK0351ETMsg.OP_SVC_KEI_NO, inCBSMsg.getString(EKK0351C240CBSMsg.OP_SVC_KEI_NO));

		// 未完了工事案件ISP認証ID変更チェック処理がtrueの場合、エラー
		if (JKKModelCommon.isSvcEndYmdOverFutureKK0351(inETMsg, inContext))
		{
			inCBSMsg.set(EKK0351C240CBSMsg.OP_SVC_KEI_NO_ERR, errFlag);
			if ("W".equals(errFlag.substring(0, 1)))
			{
				rtn = StatusCodes.WARNING;
			}
			else
			{
				rtn = StatusCodes.RELATION_ERR;
			}
		}
*/
		// ステータスのセット
		if (rtn > inCBSMsg.getInt(JCMConstants.STATUS_INT_KEY))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, rtn);
		}

		return rtn;
	}

	/**
	 * EKK0351C240_制約ＮＯ１２（関連）チェック
	 * 解約予約チェック処理
	 *
	 * @param  inCB	SMsg  チェック対象のCBSMsg(KK0161CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag   ERRフラグ
	 * @return result    チェック結果
	 */
	private int execEKK0351C240_KR12(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// ステータス
		int rtn = 0;

		// オプションサービス契約番号がnullの場合、チェックせず
		if (inCBSMsg.isNull(EKK0351C240CBSMsg.OP_SVC_KEI_NO))
		{
			return rtn;
		}

		// サービス終了年月日がnullの場合、チェックせず
		if (inCBSMsg.isNull(EKK0351C240CBSMsg.SVC_ENDYMD))
		{
			return rtn;
		}

		// 解約予約チェック処理がtrueの場合、エラー
		if (!JKKModelCommon.isAddRsvSvcKeiNoKouzoku(inCBSMsg, inContext, "B015", inCBSMsg
				.getString(EKK0351C240CBSMsg.SVC_ENDYMD), inCBSMsg.getString(EKK0351C240CBSMsg.OP_SVC_KEI_NO)))
		{
			inCBSMsg.set(EKK0351C240CBSMsg.OP_SVC_KEI_NO_ERR, errFlag);
			if ("W".equals(errFlag.substring(0, 1)))
			{
				rtn = StatusCodes.WARNING;
			}
			else
			{
				rtn = StatusCodes.RELATION_ERR;
			}
		}
		
		// ステータスのセット
		if (rtn > inCBSMsg.getInt(JCMConstants.STATUS_INT_KEY))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, rtn);
		}

		return rtn;
	}

	/**
	 * EKK0351C240_制約ＮＯ１３（関連）チェック
	 * マルチセッション解約予約契約チェック
	 *
	 * @param  inCB	SMsg  チェック対象のCBSMsg(KK0161CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag   ERRフラグ
	 * @return result    チェック結果
	 */
	private int execEKK0351C240_KR13(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// ステータス
		int rtn = 0;

		// オプションサービス契約番号がnullの場合、チェックせず
		if (inCBSMsg.isNull(EKK0351C240CBSMsg.OP_SVC_KEI_NO))
		{
			return rtn;
		}

		// 異動区分が「オプション設定」、「オプション予約取消」でない場合、チェック対象外とする
		if (!inCBSMsg.getString(EKK0351C240CBSMsg.IDO_DIV).equals(JKKModelConst.IDO_DIV_OP_SET) &&
				!inCBSMsg.getString(EKK0351C240CBSMsg.IDO_DIV).equals(JKKModelConst.IDO_DIV_OP_RSV_CL))
		{
			return rtn;
		}
		
		// オプションサービス契約のチェック用メッセージを作成
		CAANMsg inETMsg = new CAANMsg(KK0351ETMsg.class.getName());
		inETMsg.set(KK0351ETMsg.OP_SVC_KEI_NO, inCBSMsg.getString(EKK0351C240CBSMsg.OP_SVC_KEI_NO));

		// マルチセッション解約予約契約チェック処理がtrueの場合、エラー
		if (JKKModelCommon.isMltSsinDslRcvKeiChkKK0351(inETMsg, inContext))
		{
			inCBSMsg.set(EKK0351C240CBSMsg.OP_SVC_KEI_NO_ERR, errFlag);
			if ("W".equals(errFlag.substring(0, 1)))
			{
				rtn = StatusCodes.WARNING;
			}
			else
			{
				rtn = StatusCodes.RELATION_ERR;
			}
		}

		// ステータスのセット
		if (rtn > inCBSMsg.getInt(JCMConstants.STATUS_INT_KEY))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, rtn);
		}

		return rtn;
	}
	
	/**
	 * EKK0351C240_制約ＮＯ１４（関連）チェック
	 * 解約予約チェック処理
	 *
	 * @param  inCB	SMsg  チェック対象のCBSMsg(KK0161CBSMsg)
	 * @param  inContext Agentから渡されたAgentDispatchContext
	 * @param  errFlag   ERRフラグ
	 * @return result    チェック結果
	 */
	private int execEKK0351C240_KR14(CAANMsg inCBSMsg, AgentDispatchContext inContext, String errFlag)
	{
		// ステータス
		int rtn = 0;

		// オプションサービス契約番号がnullの場合、チェックせず
		if (inCBSMsg.isNull(EKK0351C240CBSMsg.OP_SVC_KEI_NO))
		{
			return rtn;
		}

		// サービス終了年月日がnullの場合、チェックせず
		if (inCBSMsg.isNull(EKK0351C240CBSMsg.SVC_ENDYMD))
		{
			return rtn;
		}

		// 異動区分が「オプション設定」、「オプション予約取消」でない場合、チェック対象外とする
		if (!inCBSMsg.getString(EKK0351C240CBSMsg.IDO_DIV).equals(JKKModelConst.IDO_DIV_OP_SET) &&
				!inCBSMsg.getString(EKK0351C240CBSMsg.IDO_DIV).equals(JKKModelConst.IDO_DIV_OP_RSV_CL))
		{
			return rtn;
		}

		// マルチセッション解約予約契約チェック処理がtrueの場合、エラー
		if (!JKKModelCommon.isAddRsvSvcKeiNoSenkou(inCBSMsg, inContext, "B015", inCBSMsg
				.getString(EKK0351C240CBSMsg.SVC_ENDYMD), inCBSMsg.getString(EKK0351C240CBSMsg.OP_SVC_KEI_NO)))
		{
			inCBSMsg.set(EKK0351C240CBSMsg.OP_SVC_KEI_NO_ERR, errFlag);
			if ("W".equals(errFlag.substring(0, 1)))
			{
				rtn = StatusCodes.WARNING;
			}
			else
			{
				rtn = StatusCodes.RELATION_ERR;
			}
		}

		// ステータスのセット
		if (rtn > inCBSMsg.getInt(JCMConstants.STATUS_INT_KEY))
		{
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, rtn);
		}

		return rtn;
	}
}
