/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKVWribVrfyKeiYmdCheck
*	ソースファイル名	：JBSbatKVWribVrfyKeiYmdCheck.java
*	作成者				：富士通　
*	作成日				：2013年06月18日
*＜機能概要＞
*　割引検証割引サービス契約日付検証部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2013/06/18   富士通		新規作成
*********************************************************************/
package eo.business.service;

import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatMatchServiceInterface;
import eo.business.util.file.JBSbatKVIFM016;
import eo.business.util.file.JBSbatKVIFM027;
import eo.business.util.file.JBSbatKVIFM028;
import eo.business.util.file.JBSbatKVIFM030;
import eo.business.util.table.JBSbatCH_M_PRC_SCHDL_TEIGI;
import eo.business.util.table.JBSbatDK_T_HAISO;
import eo.business.util.table.JBSbatKK_M_WRIB_SVC;
import eo.business.util.table.JBSbatKK_T_KAP_KEI;
import eo.business.util.table.JBSbatKK_T_KKTK_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_MSKM_DTL;
import eo.business.util.table.JBSbatKK_T_OP_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatKU_T_KOJIAK;
import eo.common.constant.JKKStrConst;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatDateUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKVWribVrfyKeiYmdCheck extends JBSbatBusinessService implements JBSbatMatchServiceInterface
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/

	/** テーブル(割引サービス)*/
	private static final String D_TBL_NAME_KK_M_WRIB_SVC = "KK_M_WRIB_SVC";

	/** テーブル(機器提供サービス契約)*/
	private static final String D_TBL_NAME_KK_T_KKTK_SVC_KEI = "KK_T_KKTK_SVC_KEI";

	/** テーブル(配送)*/
	private static final String D_TBL_NAME_DK_T_HAISO = "DK_T_HAISO";

	/** テーブル(工事案件)*/
	private static final String D_TBL_NAME_KU_T_KOJIAK = "KU_T_KOJIAK";

	/** テーブル(料金スケジュール定義)*/
	private static final String D_TBL_NAME_CH_M_PRC_SCHDL_TEIGI = "CH_M_PRC_SCHDL_TEIGI";

	/** テーブル(割引サービス対象契約)*/
	private static final String D_TBL_NAME_KK_T_WRISVC_TG_KEI = "KK_T_WRISVC_TG_KEI";

	/** テーブル(申込明細)*/
	private static final String D_TBL_NAME_KK_T_MSKM_DTL = "KK_T_MSKM_DTL";

	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";

	/** テーブル(割賦契約)*/
	private static final String D_TBL_NAME_KK_T_KAP_KEI = "KK_T_KAP_KEI";

	/** テーブル(オプションサービス契約)*/
	private static final String D_TBL_NAME_KK_T_OP_SVC_KEI = "KK_T_OP_SVC_KEI";

	/** SQL定義キー(KV_SELECT_009)*/
	private static final String KK_M_WRIB_SVC_KV_SELECT_002 = "KV_SELECT_002";

	/** SQL定義キー(KV_SELECT_154)*/
	private static final String KK_T_KKTK_SVC_KEI_KV_SELECT_006 = "KV_SELECT_006";

	/** SQL定義キー(KV_SELECT_013)*/
	private static final String DK_T_HAISO_KV_SELECT_004 = "KV_SELECT_004";

	/** SQL定義キー(KV_SELECT_028)*/
	private static final String KU_T_KOJIAK_KV_SELECT_003 = "KV_SELECT_003";

	/** SQL定義キー(KV_SELECT_017)*/
	private static final String CH_M_PRC_SCHDL_TEIGI_KV_SELECT_001 = "KV_SELECT_001";

	/** SQL定義キー(KV_SELECT_049)*/
	private static final String KK_T_WRISVC_TG_KEI_KV_SELECT_003 = "KV_SELECT_003";

	/** SQL定義キー(KV_SELECT_032)*/
	private static final String KK_T_MSKM_DTL_KV_SELECT_003 = "KV_SELECT_003";

	/** SQL定義キー(KV_SELECT_019)*/
	private static final String KK_T_SVC_KEI_KV_SELECT_019 = "KV_SELECT_019";

	/** SQL定義キー(KV_SELECT_020)*/
	private static final String KK_T_SVC_KEI_KV_SELECT_020 = "KV_SELECT_020";

	/** SQL定義キー(KV_SELECT_002)*/
	private static final String KK_T_KAP_KEI_KV_SELECT_002 = "KV_SELECT_002";

	/** SQL定義キー(KV_SELECT_013)*/
	private static final String KK_T_OP_SVC_KEI_KV_SELECT_013 = "KV_SELECT_013";

	/** テーブルアクセスクラス(割引サービス)*/
	private JBSbatSQLAccess db_KK_M_WRIB_SVC = null;

	/** テーブルアクセスクラス(機器提供サービス契約)*/
	private JBSbatSQLAccess db_KK_T_KKTK_SVC_KEI = null;

	/** テーブルアクセスクラス(配送)*/
	private JBSbatSQLAccess db_DK_T_HAISO = null;

	/** テーブルアクセスクラス(工事案件)*/
	private JBSbatSQLAccess db_KU_T_KOJIAK = null;

	/** テーブルアクセスクラス(料金スケジュール定義)*/
	private JBSbatSQLAccess db_CH_M_PRC_SCHDL_TEIGI = null;

	/** テーブルアクセスクラス(割引サービス対象契約)*/
	private JBSbatSQLAccess db_KK_T_WRISVC_TG_KEI = null;

	/** テーブルアクセスクラス(申込明細)*/
	private JBSbatSQLAccess db_KK_T_MSKM_DTL = null;

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;

	/** テーブルアクセスクラス(割賦契約)*/
	private JBSbatSQLAccess db_KK_T_KAP_KEI = null;

	/** テーブルアクセスクラス(オプションサービス契約)*/
	private JBSbatSQLAccess db_KK_T_OP_SVC_KEI = null;

	/** キーマッチ処理フラグ*/
	private boolean matchProcFlg;

	/** マスタファイル処理フラグ*/
	private boolean mastProcFlg;

	/** トランファイル処理フラグ*/
	private boolean tranProcFlg;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	 /** コード種別 キャンペーン開始コード 課金開始日 */
	 public static final String CD00266_01 = "01";
	 
	 /** コード種別 キャンペーン開始コード サービス開始日 */
	 public static final String CD00266_02 = "02";
	 
	 /** コード種別 キャンペーン開始コード 登録月 */
	 public static final String CD00266_03 = "03";
	 
	 /** コード種別 キャンペーン開始コード 翌月 */
	 public static final String CD00266_04 = "04";
	 
	 /** コード種別 キャンペーン開始コード 翌月(初日は当月) */
	 public static final String CD00266_05 = "05";
	 
	 /** コード種別 キャンペーン開始コード 課金開始前月 */
	 public static final String CD00266_06 = "06";
	 
	 /** コード種別 キャンペーン開始コード プラン変更 */
	 public static final String CD00266_07 = "07";
	 
	 /** コード種別 キャンペーン開始コード 機種変更 */
	 public static final String CD00266_08 = "08";
	 
	 /** コード種別 キャンペーン開始コード 出荷日＋n日 */
	 public static final String CD00266_09 = "09";
	 
	 /** コード種別 キャンペーン開始コード 住変サービス開始日 */
	 public static final String CD00266_20 = "20";
	 
	 /** コード種別 キャンペーン開始コード 長割 */
	 public static final String CD00266_51 = "51";
	 
	 /** コード種別 キャンペーン開始コード 即割 */
	 public static final String CD00266_52 = "52";
	 
	 /** コード種別 キャンペーン開始コード 長期継続利用割引 */
	 public static final String CD00266_53 = "53";
	 
	 /** コード種別 キャンペーン開始コード ネットTVセット割 */
	 public static final String CD00266_54 = "54";
	 
	 /** コード種別 キャンペーン開始コード ネット電話セット割 */
	 public static final String CD00266_55 = "55";
	 
	 /** コード種別 キャンペーン開始コード 電話TVセット割 */
	 public static final String CD00266_56 = "56";
	 
	 /** コード種別 キャンペーン開始コード ネットモバイルセット割 */
	 public static final String CD00266_57 = "57";
	 
	 /** コード種別 キャンペーン開始コード 割賦契約割引 */
	 public static final String CD00266_58 = "58";
	 
	/** コード種別 キャンペーン開始コード ハイブリッド割 */
	 public static final String CD00266_59 = "59";
	 
	/** 割引タイプコード ファミリーパック */
	public static final String WARIB_TYPE_FAMILY = "20";

	/** コード種別 割引タイプコード 割賦契約割引 */
	public static final String WARIB_TYPE_KAP = "42";

	/** コード種別 eoブランドコード eo光ネット */
	public static final String EOBLAND_NET = "01";

	/** コード種別 eoブランドコード eo光電話 */
	public static final String EOBLAND_TEL = "02";

	/** コード種別 eoブランドコード eo光テレビ */
	public static final String EOBLAND_TV = "03";

	/** コード種別 eoブランドコード eoモバイル */
	public static final String EOBLAND_MOBILE = "04";

	/** 検証エラーメッセージ（割引自動解約）*/
	private static final String MSG_CHECK_RESULT_01 = "サービス契約の解約に伴う割引自動解約だが、サービス契約と%1%が異なる。";

	/** 検証エラーメッセージ（割引単独解約）*/
	private static final String MSG_CHECK_RESULT_02 = "割引単独解約だが、%1%が設定論理と異なる。日付設定論理算出値：%2%";

	/** 検証エラーメッセージ（日付チェック）*/
	private static final String MSG_CHECK_RESULT_03 = "割引サービス契約の%1%が日付設定論理と異なる。日付設定論理算出値：%2%";
	// 2013/09/09 add start
	/** 検証エラーメッセージ（割引自動解約）*/
	private static final String MSG_CHECK_RESULT_04 = "サービス契約の異動に伴う割引自動解約だが、%1%が設定論理と異なる。日付設定論理算出値：%2%";
	// 2013/09/09 add end
	/** エラーメッセージ */
	String strErrorMessage = "";

	/** 割引サービス契約番号（コントロールブレイクキー） */
	private String strWribSvcyKeiNoBreakKey = ""; 

	/** ヘッダ出力処理用フラグ */
	private boolean booHeaderOutputFlg = false; 
		
	
	/** 初回ブレイク処理済みフラグ */
	private String strFirstFlg = ""; 

	/** マッチング処理済みフラグ */
	private String strMatchingFlg = ""; 

	/** 割引情報退避領域 */
	private JBSbatServiceInterfaceMap keepData = new JBSbatServiceInterfaceMap();

	/** 料金計算日 */
	private String strPrcYmd = null;
	
	/** サービス課金開始年月日（割引サービス契約番号単位） */
	private String strWribSvcChrgStaYmd = null;
	
	/** サービス開始年月日（割引サービス契約番号単位） */
	private String strWribSvcStaYmd = null;
	
	/** プラン課金開始年月日（割引サービス契約番号単位） */
	private String strWribPlanChrgStaYmd = null;
	
	/** プラン開始年月日（割引サービス契約番号単位） */
	private String strWribPlanStaYmd = null;
	
	/** サービス課金終了年月日（割引サービス契約番号単位） */
	private String strWribSvcChrgEndYmd = null;
	
	/** プラン課金終了年月日（割引サービス契約番号単位） */
	private String strWribPlanChrgEndYmd = null;
	
	/** 割引サービスマスタ情報 */
	private HashMap<String, String> hashWribSvcInfo = new HashMap<String, String>();
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_M_WRIB_SVC = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_M_WRIB_SVC);
		db_KK_T_KKTK_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KKTK_SVC_KEI);
		db_DK_T_HAISO = new JBSbatSQLAccess(commonItem, D_TBL_NAME_DK_T_HAISO);
		db_KU_T_KOJIAK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KU_T_KOJIAK);
		db_CH_M_PRC_SCHDL_TEIGI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_PRC_SCHDL_TEIGI);
		db_KK_T_WRISVC_TG_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_WRISVC_TG_KEI);
		db_KK_T_MSKM_DTL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_MSKM_DTL);
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		db_KK_T_KAP_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KAP_KEI);
		db_KK_T_OP_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_OP_SVC_KEI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		// 作業領域の初期化
		String EVENT_CD_PRC = "03";					// イベントコード(料金計算日)

		strErrorMessage = "";
		strMatchingFlg = "";

		// 料金計算日の取得
		Object[] PrcParam = {EVENT_CD_PRC,
							 super.opeDate};
		executeCH_M_PRC_SCHDL_TEIGI_KV_SELECT_001(PrcParam);
		JBSbatCommonDBInterface rcvPrcMap = db_CH_M_PRC_SCHDL_TEIGI.selectNext();
		
		if (rcvPrcMap == null)
		{
			strPrcYmd = "";
		}
		else
		{
			strPrcYmd = repNullToEmpty(rcvPrcMap.getString(JBSbatCH_M_PRC_SCHDL_TEIGI.EVENT_YMD));
		}
		
		// 割引サービス情報の取得
		this.setHashMapWribSvc();
		
		super.logPrint.printDebugLog("料金計算日[" + strPrcYmd + "]");
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param mastMap　入力電文
	 * @param tranMap　入力電文
	 * @param outputInItem  入力情報
	 * @return JBSbatOutputItem 出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap svcMap, JBSbatServiceInterfaceMap wribMap, JBSbatOutputItem outputInItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/

		// 初回のみ処理
		if (!booHeaderOutputFlg)
		{
			this.editOutputHeaderItem(outputInItem);
			this.editOutputHeaderItem2(outputInItem);
			booHeaderOutputFlg = true;
		}
		
		super.logPrint.printDebugLog("execute_START");
	
		// 日付項目の妥当性を検証する
		if (svcMap == null && wribMap != null)
		{
			// 入力Ｍのみnullの場合 ⇒ トランのみ
			this.setTranProcFlg(true);
			super.logPrint.printDebugLog("execute_END");
			return outputInItem;

		}
		else if (svcMap != null && wribMap == null)
		{
			// 入力Ｔのみnullの場合 ⇒ マスタのみ
			// 退避データがない場合は後始末を行わない
			if (strMatchingFlg.equals("1"))
			{
				// 割引サービス契約番号単位での日付比較を行う
				strErrorMessage = this.strConcatenate(strErrorMessage, this.isMatchWribKeiYmd());
				
				// エラーメッセージが編集されている場合は、検証結果ファイル出力
				if (strErrorMessage.length() > 0)
				{
					this.editOutputInItem(outputInItem , svcMap , keepData);
				}
			}
				
			this.setMastProcFlg(true);
			strMatchingFlg = "";
			super.logPrint.printDebugLog("execute_END");
			return outputInItem;
		// 2013/09/09 add start
		}
		else if (svcMap.getString(JBSbatKVIFM016.SVC_KEI_STAT).equals("020")
				|| svcMap.getString(JBSbatKVIFM016.SVC_KEI_STAT).equals("030"))
		{
			// 検証対象外
			super.logPrint.printDebugLog("検証対象外：" + svcMap.getString(JBSbatKVIFM016.SVC_KEI_NO));
			this.setMastProcFlg(true);
			super.logPrint.printDebugLog("execute_END");
			return outputInItem;

		}
		else if(!isCheckTarget(svcMap, wribMap))
		{
			// 検証対象外
			super.logPrint.printDebugLog("検証対象外：" + wribMap.getString(JBSbatKVIFM027.SVC_KEI_NO)
				+ "、" + repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO)));
			this.setTranProcFlg(true);
			super.logPrint.printDebugLog("execute_END");
			return outputInItem;
		// 2013/09/09 add end
		}
		else
		{
			// マッチング処理
			// サービス契約コードを主キーにする
			String strMastData = svcMap.getString(JBSbatKVIFM016.SVC_KEI_NO);
			String strTranData = wribMap.getString(JBSbatKVIFM027.SVC_KEI_NO);
			super.logPrint.printDebugLog("入力Ｍ：" + strMastData);
			super.logPrint.printDebugLog("入力Ｔ：" + strTranData + "、" + repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO)));

			int intRsrt = strMastData.compareTo(strTranData);

			// １件目処理のみ
			if (strFirstFlg.equals(""))
			{
				// ブレイクキーの設定
				strWribSvcyKeiNoBreakKey = repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO));		// 割引サービス契約番号
				keepData = wribMap;																					// 割引契約データ
				// 初回ブレイク処理済みフラグの設定
				strFirstFlg = "1"; 
			}
			
			if (intRsrt == 0)
			{
				// 一致した場合
				// 退避データがあり、割引サービス契約番号がブレイクした場合（割引サービス契約⇔集約日付）
				if (strMatchingFlg.equals("1") && !strWribSvcyKeiNoBreakKey.equals(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO))))
				{
					super.logPrint.printDebugLog("日付比較処理");
					
					// 割引サービス契約番号単位での日付比較を行う
					strErrorMessage = this.strConcatenate(strErrorMessage, this.isMatchWribKeiYmd());
					
					// エラーメッセージが編集されている場合は、検証結果ファイル出力
					if (strErrorMessage.length() > 0)
					{
						this.editOutputInItem(outputInItem , svcMap , keepData);
					}
					
					// 割引サービス契約単位の後始末（サービス契約番号単位）
					this.initWribKeiYmd();
				}
				
				// 割引サービス契約内訳データの処理（契約日付再計算）
				this.reCalcSvcbKeiYmd(outputInItem, svcMap, wribMap);
				
				// エラーメッセージが編集されている場合は、検証結果ファイル出力
				if (strErrorMessage.length() > 0)
				{
					this.editOutputInItem(outputInItem , svcMap , wribMap);
				}

				// 割引契約データの退避
				keepData = wribMap;
				strMatchingFlg = "1";

				// 入力Ｔのみ ⇒ 次のデータを読み込む
				this.setMastProcFlg(false);
				this.setTranProcFlg(true);
			}
			else if (intRsrt < 0)
			{
				// 入力Ｍのみ ⇒ 後始末＆次のデータを読み込む
				
				// 退避データがない場合は後始末を行わない
				if (strMatchingFlg.equals("1"))
				{
					super.logPrint.printDebugLog("日付比較処理(サービス契約終了)");
					
					// 割引サービス契約番号単位での日付比較を行う
					strErrorMessage = this.strConcatenate(strErrorMessage, this.isMatchWribKeiYmd());
					
					// エラーメッセージが編集されている場合は、検証結果ファイル出力
					if (strErrorMessage.length() > 0)
					{
						this.editOutputInItem(outputInItem , svcMap , keepData);
					}
					
					// 割引サービス契約単位の後始末（サービス契約番号単位）
					this.initWribKeiYmd();
				}

				this.setMastProcFlg(true);
				this.setTranProcFlg(false);
				strMatchingFlg = "";
			}
			else
			{
				// 入力Ｔのみ ⇒ 次のデータを読み込む
				this.setMastProcFlg(false);
				this.setTranProcFlg(true);
				strMatchingFlg = "";
			}
		}

		// ブレイクキーの設定
		strWribSvcyKeiNoBreakKey = repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO));		// 割引サービス契約番号

		super.logPrint.printDebugLog("execute_END");
		return outputInItem;

	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_M_WRIB_SVC.close();
		db_KK_T_KKTK_SVC_KEI.close();
		db_DK_T_HAISO.close();
		db_KU_T_KOJIAK.close();
		db_CH_M_PRC_SCHDL_TEIGI.close();
		db_KK_T_WRISVC_TG_KEI.close();
		db_KK_T_MSKM_DTL.close();
		db_KK_T_SVC_KEI.close();
		db_KK_T_KAP_KEI.close();
		db_KK_T_OP_SVC_KEI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * @return mastProcFlg を戻します。
	 */
	public boolean isMastProcFlg()
	{
		return mastProcFlg;
	}

	/**
	 * @return matchProcFlg を戻します。
	 */
	public boolean isMatchProcFlg()
	{
		return matchProcFlg;
	}

	/**
	 * @return tranProcFlg を戻します。
	 */
	public boolean isTranProcFlg()
	{
		return tranProcFlg;
	}

	/**
	 * @param mast_ProcFlg 設定する mastProcFlg。
	 */
	public void setMastProcFlg(boolean mast_ProcFlg)
	{
		this.mastProcFlg = mast_ProcFlg;
	}

	/**
	 * @param match_ProcFlg 設定する matchProcFlg。
	 */
	public void setMatchProcFlg(boolean match_ProcFlg)
	{
		this.matchProcFlg = match_ProcFlg;
	}

	/**
	 * @param tran_ProcFlg 設定する tranProcFlg。
	 */
	public void setTranProcFlg(boolean tran_ProcFlg)
	{
		this.tranProcFlg = tran_ProcFlg;
	}

	/**
	 * SQLKEY(KK_SELECT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	割引サービスコード
	 *		 	運用日付
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_M_WRIB_SVC_KV_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_M_WRIB_SVC.selectBySqlDefine(paramList, KK_M_WRIB_SVC_KV_SELECT_002);
	}

	/**
	 * SQLKEY(KV_SELECT_006)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 *		 	バッチ運用日付
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_KKTK_SVC_KEI_KV_SELECT_006(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_KKTK_SVC_KEI.selectBySqlDefine(paramList, KK_T_KKTK_SVC_KEI_KV_SELECT_006);
	}

	/**
	 * SQLKEY(KV_SELECT_004)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	配送ステータス
	 *		 	サービス契約番号
	 *		 	バッチ運用日付
	 *		 	サービス契約番号
	 *		 	バッチ運用日付
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeDK_T_HAISO_KV_SELECT_004(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());

		// DBアクセスを実行します
		db_DK_T_HAISO.selectBySqlDefine(paramList, DK_T_HAISO_KV_SELECT_004);
	}

	/**
	 * SQLKEY(KV_SELECT_003)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	SYSID
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKU_T_KOJIAK_KV_SELECT_003(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KU_T_KOJIAK.selectBySqlDefine(paramList, KU_T_KOJIAK_KV_SELECT_003);
	}

	/**
	 * SQLKEY(KV_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	イベントコード
	 *		 	バッチ運用日付
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_M_PRC_SCHDL_TEIGI_KV_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CH_M_PRC_SCHDL_TEIGI.selectBySqlDefine(paramList, CH_M_PRC_SCHDL_TEIGI_KV_SELECT_001);
	}

	/**
	 * SQLKEY(KV_SELECT_003)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	割引サービス契約番号
	 *		 	バッチ運用日付
	 *		 	バッチ運用日付
	 *		 	割引サービス契約番号
	 *		 	バッチ運用日付
	 *		 	バッチ運用日付
	 *		 	割引サービス契約番号
	 *		 	バッチ運用日付
	 *		 	バッチ運用日付
	 *		 	割引サービス契約番号
	 *		 	バッチ運用日付
	 *		 	バッチ運用日付
	 *		 	割引サービス契約番号
	 *		 	バッチ運用日付
	 *		 	バッチ運用日付
	 *		 	割引サービス契約番号
	 *		 	バッチ運用日付
	 *		 	バッチ運用日付
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_WRISVC_TG_KEI_KV_SELECT_003(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());
		paramList.setValue(param[5].toString());
		paramList.setValue(param[6].toString());
		paramList.setValue(param[7].toString());
		paramList.setValue(param[8].toString());
		paramList.setValue(param[9].toString());
		paramList.setValue(param[10].toString());
		paramList.setValue(param[11].toString());
		paramList.setValue(param[12].toString());
		paramList.setValue(param[13].toString());
		paramList.setValue(param[14].toString());
		paramList.setValue(param[15].toString());
		paramList.setValue(param[16].toString());
		paramList.setValue(param[17].toString());

		// DBアクセスを実行します
		db_KK_T_WRISVC_TG_KEI.selectBySqlDefine(paramList, KK_T_WRISVC_TG_KEI_KV_SELECT_003);
	}

	/**
	 * SQLKEY(KV_SELECT_003)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	割引サービス契約番号
	 *		 	バッチ運用日付
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_MSKM_DTL_KV_SELECT_003(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_MSKM_DTL.selectBySqlDefine(paramList, KK_T_MSKM_DTL_KV_SELECT_003);
	}

	/**
	 * SQLKEY(KV_SELECT_019)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	割引サービス契約番号
	 *		 	バッチ運用日付
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVC_KEI_KV_SELECT_019(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KV_SELECT_019);
	}

	/**
	 * SQLKEY(KV_SELECT_020)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	割引サービス契約番号
	 *		 	バッチ運用日付
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVC_KEI_KV_SELECT_020(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KV_SELECT_020);
	}
	
	/**
	 * SQLKEY(KV_SELECT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	割引サービス契約番号
	 *		 	バッチ運用日付
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_KAP_KEI_KV_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_KK_T_KAP_KEI.selectBySqlDefine(paramList, KK_T_KAP_KEI_KV_SELECT_002);
	}
	
	/**
	 * SQLKEY(KV_SELECT_013)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	割引サービス契約番号
	 *		 	バッチ運用日付
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_OP_SVC_KEI_KV_SELECT_013(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_KK_T_OP_SVC_KEI.selectBySqlDefine(paramList, KK_T_OP_SVC_KEI_KV_SELECT_013);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * NULLを空文字に置き換えます。
	 * 
	 * @param strChar 文字列
	 * @return String 編集結果
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String repNullToEmpty(String strChar) throws Exception
	{
		// 作業領域の初期化
		String resultChar = "";

		if (strChar == null)
		{
			resultChar = "";
		}
		else
		{
			resultChar = strChar;
		}
		return resultChar;
	}

	/**
	 * NULLをゼロに置き換えます。
	 * 
	 * @param strChar 文字列
	 * @return String 編集結果
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String repNullToZero(String strChar) throws Exception
	{
		// 作業領域の初期化
		String resultChar = "";

		if (strChar == null)
		{
			resultChar = "0";
		}
		else
		{
			if (strChar.length() == 0)
			{
				resultChar = "0";
			}
			else
			{
				resultChar = strChar;
			}
		}
		return resultChar;
	}

	/**
	 * 文字列を全角カンマで結合します。
	 * 
	 * @param strChar 文字列
	 * @param strInChar 結合文字列
	 * @return String 結合結果
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String strConcatenate(String strChar, String strInChar) throws Exception
	{
		// 作業領域の初期化
		String resultChar = "";

		if (strChar.length() == 0)
		{
			resultChar = strInChar;
		}
		else if (strInChar.length() == 0)
		{
			resultChar = strChar;
		}
		else
		{
			resultChar = strChar + "，" + strInChar;
		}
		return resultChar;
	}

	/**
	 * 割引サービス契約データの契約日付のチェックを行い、検証結果を返却します。
	 * 
	 * @return String 検証結果
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String isMatchWribKeiYmd() throws Exception
	{
		// 作業領域の初期化
		String strMessage = "";

		// サービス課金開始年月日
		if (!repNullToEmpty(strWribSvcChrgStaYmd).equals(repNullToEmpty(keepData.getString(JBSbatKVIFM027.SVC_CHRG_STAYMD))))
		{
			strMessage = this.strConcatenate(strMessage, MSG_CHECK_RESULT_03.replace("%1%", "サービス課金開始年月日").replace("%2%", strWribSvcChrgStaYmd));
		}
		
		// サービス開始年月日
		if (!repNullToEmpty(strWribSvcStaYmd).equals(repNullToEmpty(keepData.getString(JBSbatKVIFM027.SVC_STA_YMD))))
		{
			strMessage = this.strConcatenate(strMessage, MSG_CHECK_RESULT_03.replace("%1%", "サービス開始年月日").replace("%2%", strWribSvcStaYmd));
		}
		
		// プラン課金開始年月日
		if (!repNullToEmpty(strWribPlanChrgStaYmd).equals(repNullToEmpty(keepData.getString(JBSbatKVIFM027.PLAN_CHRG_STAYMD))))
		{
			strMessage = this.strConcatenate(strMessage, MSG_CHECK_RESULT_03.replace("%1%", "プラン課金開始年月日").replace("%2%", strWribPlanChrgStaYmd));
		}
		
		// プラン開始年月日
		if (!repNullToEmpty(strWribPlanStaYmd).equals(repNullToEmpty(keepData.getString(JBSbatKVIFM027.PLAN_STAYMD))))
		{
			strMessage = this.strConcatenate(strMessage, MSG_CHECK_RESULT_03.replace("%1%", "プラン開始年月日").replace("%2%", strWribPlanStaYmd));
		}
		
		// サービス課金終了年月日
		if (!repNullToEmpty(strWribSvcChrgEndYmd).equals(repNullToEmpty(keepData.getString(JBSbatKVIFM027.SVC_CHRG_ENDYMD))))
		{
			strMessage = this.strConcatenate(strMessage, MSG_CHECK_RESULT_03.replace("%1%", "サービス課金終了年月日").replace("%2%", strWribSvcChrgEndYmd));
		}
		
		// プラン課金終了年月日
		if (!repNullToEmpty(strWribPlanChrgEndYmd).equals(repNullToEmpty(keepData.getString(JBSbatKVIFM027.PLAN_CHRG_ENDYMD))))
		{
			strMessage = this.strConcatenate(strMessage, MSG_CHECK_RESULT_03.replace("%1%", "プラン課金終了年月日").replace("%2%", strWribPlanChrgEndYmd));
		}
		
		return strMessage;
	}

	// 2013/09/09 add start
	/**
	 * 日付検証を行う対象の割引データか確認を行います
	 * @param svcMap
	 * @param wribMap
	 * @return 検証対象かどうか
	 */
	private boolean isCheckTarget(JBSbatServiceInterfaceMap svcMap, JBSbatServiceInterfaceMap wribMap){
		
		try{
			String wribKeiStat = repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_STAT));
			
			// 解約済のデータは当日のみ検証対象
			if(wribKeiStat.equals(JKKStrConst.CD00055_DSLZM)){
				return repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)).equals(super.opeDate);
			}
			
			String chrgStaYmd = repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_CHRG_STAYMD));
			if (chrgStaYmd.equals("")){
				return false;
			}
			
			// サービス課金開始日が運用月以降であれば検証対象
			if(chrgStaYmd.substring(0,6).compareTo(super.opeDate.substring(0,6)) >= 0){
				return true;
			}
			
			String wribTypeCd = (String)hashWribSvcInfo.get(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_CD)));
			
			// キャンペーンの課金終了日が運用月以降であれば検証対象
			if(wribTypeCd.equals(JKKStrConst.WARIB_TYPE_CMP) || wribTypeCd.equals(JKKStrConst.WARIB_TYPE_MENKAIHAT)){
				
				String chrgEndYmd = repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_CHRG_ENDYMD));
				if (chrgEndYmd.equals("")){
					return false;
				}
				return chrgEndYmd.substring(0,6).compareTo(super.opeDate.substring(0,6)) >= 0;
			}
			
			return false;
			
		}catch(Exception e){
			return false;
		}
	}
	// 2013/09/09 add end
	
	/**
	 * 割引サービス契約単位で集約した日付の初期化を行います。
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void initWribKeiYmd() throws Exception
	{
		// 割引サービス契約単位で集約した日付の初期化
		strWribSvcChrgStaYmd = null;
		strWribSvcStaYmd  = null;
		strWribPlanChrgStaYmd  = null;
		strWribPlanStaYmd  = null;
		strWribSvcChrgEndYmd  = null;
		strWribPlanChrgEndYmd  = null;
	}

	/**
	 * 割引サービス契約内訳単位で算出した日付を、割引サービス契約単位で集約します。
	 * 
	 * @param svcChrgStaYmd		　サービス課金開始年月日
	 * @param svcStaYmd			　サービス開始年月日
	 * @param planChrgStaYmd	　プラン課金開始年月日
	 * @param planStaYmd		　プラン開始年月日
	 * @param svcChrgEndYmd		　サービス課金終了年月日
	 * @param planChrgEndYmd	　プラン終了年月日
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void setWribKeiYmd(String svcChrgStaYmd,
								String svcStaYmd,
								String planChrgStaYmd,
								String planStaYmd,
								String svcChrgEndYmd,
								String planChrgEndYmd) throws Exception
	{
		// サービス課金開始年月日（未設定[NULL]の場合は無条件に設定。空白の場合は日付を優先。それ以外は日付の最小値を設定）
		if (strWribSvcChrgStaYmd == null)
		{
			strWribSvcChrgStaYmd = svcChrgStaYmd;
		}
		else if ((strWribSvcChrgStaYmd.length() == 0) && (svcChrgStaYmd.length() > 0))
		{
			strWribSvcChrgStaYmd = svcChrgStaYmd;
		}
		else if (strWribSvcChrgStaYmd.compareTo(svcChrgStaYmd) > 0)
		{
			strWribSvcChrgStaYmd = svcChrgStaYmd;
		}
		
		// サービス開始年月日（未設定[NULL]の場合は無条件に設定。空白[継続中]の場合は空白を優先。それ以外は日付の最小値を設定）
		if (strWribSvcStaYmd == null)
		{
			strWribSvcStaYmd = svcStaYmd ;
		}
		else if ((strWribSvcStaYmd.length() == 0) && (svcStaYmd.length() == 0))
		{
			strWribSvcStaYmd = "";
		}
		else if (strWribSvcStaYmd.compareTo(svcStaYmd ) > 0)
		{
			strWribSvcStaYmd = svcStaYmd ;
		}
		
		// プラン課金開始年月日（未設定[NULL]の場合は無条件に設定。空白[継続中]の場合は空白を優先。それ以外は日付の最小値を設定）
		if (strWribPlanChrgStaYmd  == null)
		{
			strWribPlanChrgStaYmd = planChrgStaYmd;
		}
		else if ((strWribPlanChrgStaYmd.length() == 0) && (planChrgStaYmd.length() == 0))
		{
			strWribPlanChrgStaYmd = "";
		}
		else if (strWribPlanChrgStaYmd .compareTo(planChrgStaYmd) > 0)
		{
			strWribPlanChrgStaYmd = planChrgStaYmd;
		}
		
		// プラン開始年月日（未設定[NULL]の場合は無条件に設定。空白[継続中]の場合は空白を優先。それ以外は日付の最小値を設定）
		if (strWribPlanStaYmd == null)
		{
			strWribPlanStaYmd = planStaYmd;
		}
		else if ((strWribPlanStaYmd.length() == 0) && (planStaYmd.length() == 0))
		{
			strWribPlanStaYmd = "";
		}
		else if (strWribPlanStaYmd.compareTo(planStaYmd) > 0)
		{
			strWribPlanStaYmd = planStaYmd;
		}
		
		// サービス課金終了年月日（未設定[NULL]の場合は無条件に設定。空白[継続中]の場合は空白を優先。それ以外は日付の最大値を設定）
		if (strWribSvcChrgEndYmd == null)
		{
			strWribSvcChrgEndYmd = svcChrgEndYmd    ;
		}
		else if ((strWribSvcChrgEndYmd.length() == 0) && (svcChrgEndYmd.length() == 0))
		{
			strWribSvcChrgEndYmd = "";
		}
		else if (strWribSvcChrgEndYmd.compareTo(svcChrgEndYmd) < 0)
		{
			strWribSvcChrgEndYmd = svcChrgEndYmd;
		}
		
		// プラン課金終了年月日（未設定[NULL]の場合は無条件に設定。空白[継続中]の場合は空白を優先。それ以外は日付の最大値を設定）
		if (strWribPlanChrgEndYmd == null)
		{
			strWribPlanChrgEndYmd = planChrgEndYmd     ;
		}
		else if ((strWribPlanChrgEndYmd.length() == 0) && (planChrgEndYmd.length() == 0))
		{
			strWribPlanChrgEndYmd = "";
		}
		else if (strWribPlanChrgEndYmd.compareTo(planChrgEndYmd) < 0)
		{
			strWribPlanChrgEndYmd = planChrgEndYmd;
		}
	}
	
	/**
	 * 検証結果ファイルを編集します。
	 * 
	 * @param outputInItem 出力ファイル
	 * @param svcMap マスタデータ（割引検証サービス契約情報抽出結果ファイル）
	 * @param wribMap トランデータ（割引検証割引サービス契約集約ファイル））
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void editOutputInItem(	JBSbatOutputItem outputInItem,
									JBSbatServiceInterfaceMap svcMap,
									JBSbatServiceInterfaceMap wribMap) throws Exception
	{
		// 入出力インタフェースオブジェクトを生成
		JBSbatServiceInterfaceMap out_map = new JBSbatServiceInterfaceMap();
		
		// 出力項目を設定する
		out_map.setString(JBSbatKVIFM028.SVC_KEI_NO             , svcMap.getString(JBSbatKVIFM016.SVC_KEI_NO));					// サービス契約番号
		out_map.setString(JBSbatKVIFM028.PCRS_CD                , svcMap.getString(JBSbatKVIFM016.PCRS_CD));					// 料金コースコード
		out_map.setString(JBSbatKVIFM028.PCRS_CD_NM             , svcMap.getString(JBSbatKVIFM016.PCRS_NM));					// 料金コースコード名称
		out_map.setString(JBSbatKVIFM028.PPLAN_CD               , svcMap.getString(JBSbatKVIFM016.PPLAN_CD));					// 料金プランコード
		out_map.setString(JBSbatKVIFM028.PPLAN_CD_NM            , svcMap.getString(JBSbatKVIFM016.PPLAN_NM));					// 料金プランコード名称
		out_map.setString(JBSbatKVIFM028.KAKINS_NO              , svcMap.getString(JBSbatKVIFM016.KAKINS_NO));					// 課金先番号
		out_map.setString(JBSbatKVIFM028.SEIKY_KEI_NO           , svcMap.getString(JBSbatKVIFM016.SEIKY_KEI_NO));				// 請求契約番号
		out_map.setString(JBSbatKVIFM028.SVC_KEI_KAISEN_UCWK_NO , svcMap.getString(JBSbatKVIFM016.SVC_KEI_KAISEN_UCWK_NO));		// サービス契約回線内訳番号
		out_map.setString(JBSbatKVIFM028.PLAN_STAYMD_SVC        , svcMap.getString(JBSbatKVIFM016.PLAN_STAYMD));				// プラン開始年月日（サービス）
		out_map.setString(JBSbatKVIFM028.PLAN_ENDYMD_SVC        , svcMap.getString(JBSbatKVIFM016.PLAN_ENDYMD));				// プラン終了年月日（サービス）
		out_map.setString(JBSbatKVIFM028.PLAN_CHRG_STAYMD_SVC   , svcMap.getString(JBSbatKVIFM016.PLAN_CHRG_STAYMD));			// プラン課金開始年月日（サービス）
		out_map.setString(JBSbatKVIFM028.PLAN_CHRG_ENDYMD_SVC   , svcMap.getString(JBSbatKVIFM016.PLAN_CHRG_ENDYMD));			// プラン課金終了年月日（サービス）
		out_map.setString(JBSbatKVIFM028.SVC_CANCEL_YMD_SVC     , svcMap.getString(JBSbatKVIFM016.SVC_CANCEL_YMD));				// サービスキャンセル年月日（サービス）
		out_map.setString(JBSbatKVIFM028.SVC_STA_YMD_SVC        , svcMap.getString(JBSbatKVIFM016.SVC_STA_YMD));				// サービス開始年月日（サービス）
		out_map.setString(JBSbatKVIFM028.SVC_CHRG_STAYMD_SVC    , svcMap.getString(JBSbatKVIFM016.SVC_CHRG_STAYMD));			// サービス課金開始年月日（サービス）
		out_map.setString(JBSbatKVIFM028.SVC_PAUSE_YMD_SVC      , svcMap.getString(JBSbatKVIFM016.SVC_PAUSE_YMD));				// サービス休止年月日（サービス）
		out_map.setString(JBSbatKVIFM028.SVC_PAUSE_RLS_YMD_SVC  , svcMap.getString(JBSbatKVIFM016.SVC_PAUSE_RLS_YMD));			// サービス休止解除年月日（サービス）
		out_map.setString(JBSbatKVIFM028.SVC_ENDYMD_SVC         , svcMap.getString(JBSbatKVIFM016.SVC_ENDYMD));					// サービス終了年月日（サービス）
		out_map.setString(JBSbatKVIFM028.SVC_CHRG_ENDYMD_SVC    , svcMap.getString(JBSbatKVIFM016.SVC_CHRG_ENDYMD));			// サービス課金終了年月日（サービス）
		out_map.setString(JBSbatKVIFM028.SVC_DSL_KISAN_YMD_SVC  , svcMap.getString(JBSbatKVIFM016.SVC_DSL_KISAN_YMD));			// サービス解約起算年月日（サービス）
		out_map.setString(JBSbatKVIFM028.SVC_DSL_YMD_SVC        , svcMap.getString(JBSbatKVIFM016.SVC_DSL_YMD));				// サービス解約年月日（サービス）
		out_map.setString(JBSbatKVIFM028.KAIHK_YMD_SVC          , svcMap.getString(JBSbatKVIFM016.KAIHK_YMD));					// 回復年月日（サービス）
		out_map.setString(JBSbatKVIFM028.SVC_CANCEL_CL_YMD_SVC  , svcMap.getString(JBSbatKVIFM016.SVC_CANCEL_CL_YMD));			// サービスキャンセル取消年月日（サービス）
		out_map.setString(JBSbatKVIFM028.SVC_DSL_CL_YMD_SVC     , svcMap.getString(JBSbatKVIFM016.SVC_DSL_CL_YMD));				// サービス解約取消年月日（サービス）

		out_map.setString(JBSbatKVIFM028.WRIB_SVC_KEI_NO              , wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO));					// 割引サービス契約番号
		out_map.setString(JBSbatKVIFM028.WRIB_SVC_KEI_STAT            , wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_STAT));				// 割引サービス契約ステータス
		out_map.setString(JBSbatKVIFM028.WRIB_SVC_KEI_STAT_NM         , wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_STAT_NM));			// 割引サービス契約ステータス名称
		out_map.setString(JBSbatKVIFM028.SYSID                        , wribMap.getString(JBSbatKVIFM027.SYSID));							// ＳＹＳＩＤ
		out_map.setString(JBSbatKVIFM028.WRIB_SVC_CD                  , wribMap.getString(JBSbatKVIFM027.WRIB_SVC_CD));						// 割引サービスコード
		out_map.setString(JBSbatKVIFM028.DSP_CAMPAIGN_CD              , wribMap.getString(JBSbatKVIFM027.DSP_CAMPAIGN_CD));					// 表示用キャンペーンコード
		out_map.setString(JBSbatKVIFM028.WRIB_SVC_NM                  , wribMap.getString(JBSbatKVIFM027.WRIB_SVC_NM));						// 割引サービス名
		out_map.setString(JBSbatKVIFM028.PLAN_STAYMD_WRIB             , wribMap.getString(JBSbatKVIFM027.PLAN_STAYMD));						// プラン開始年月日（割引）
		out_map.setString(JBSbatKVIFM028.PLAN_ENDYMD_WRIB             , wribMap.getString(JBSbatKVIFM027.PLAN_ENDYMD));						// プラン終了年月日（割引）
		out_map.setString(JBSbatKVIFM028.PLAN_CHRG_STAYMD_WRIB        , wribMap.getString(JBSbatKVIFM027.PLAN_CHRG_STAYMD));				// プラン課金開始年月日（割引）
		out_map.setString(JBSbatKVIFM028.PLAN_CHRG_ENDYMD_WRIB        , wribMap.getString(JBSbatKVIFM027.PLAN_CHRG_ENDYMD));				// プラン課金終了年月日（割引）
		out_map.setString(JBSbatKVIFM028.PLAN_END_SBT_CD              , wribMap.getString(JBSbatKVIFM027.PLAN_END_SBT_CD));					// プラン終了種別コード
		out_map.setString(JBSbatKVIFM028.SVC_CANCEL_YMD_WRIB          , wribMap.getString(JBSbatKVIFM027.SVC_CANCEL_YMD));					// サービスキャンセル年月日（割引）
		out_map.setString(JBSbatKVIFM028.SVC_CANCEL_RSN_CD            , wribMap.getString(JBSbatKVIFM027.SVC_CANCEL_RSN_CD));				// サービスキャンセル理由コード
		out_map.setString(JBSbatKVIFM028.SVC_STA_YMD_WRIB             , wribMap.getString(JBSbatKVIFM027.SVC_STA_YMD));						// サービス開始年月日（割引）
		out_map.setString(JBSbatKVIFM028.SVC_CHRG_STAYMD_WRIB         , wribMap.getString(JBSbatKVIFM027.SVC_CHRG_STAYMD));					// サービス課金開始年月日（割引）
		out_map.setString(JBSbatKVIFM028.SVC_ENDYMD_WRIB              , wribMap.getString(JBSbatKVIFM027.SVC_ENDYMD));						// サービス終了年月日（割引）
		out_map.setString(JBSbatKVIFM028.SVC_CHRG_ENDYMD_WRIB         , wribMap.getString(JBSbatKVIFM027.SVC_CHRG_ENDYMD));					// サービス課金終了年月日（割引）
		out_map.setString(JBSbatKVIFM028.SVC_DSL_YMD_WRIB             , wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD));						// サービス解約年月日（割引）
		out_map.setString(JBSbatKVIFM028.KAIHK_YMD_WRIB               , wribMap.getString(JBSbatKVIFM027.KAIHK_YMD));						// 回復年月日（割引）
		out_map.setString(JBSbatKVIFM028.SVC_CANCEL_CL_YMD_WRIB       , wribMap.getString(JBSbatKVIFM027.SVC_CANCEL_CL_YMD));				// サービスキャンセル取消年月日（割引）
		out_map.setString(JBSbatKVIFM028.SVC_DSL_CL_YMD_WRIB          , wribMap.getString(JBSbatKVIFM027.SVC_DSL_CL_YMD));					// サービス解約取消年月日（割引）
		out_map.setString(JBSbatKVIFM028.INTR_CD                      , wribMap.getString(JBSbatKVIFM027.INTR_CD));							// 紹介コード
		out_map.setString(JBSbatKVIFM028.MSKM_KISAN_YMD               , wribMap.getString(JBSbatKVIFM027.MSKM_KISAN_YMD));					// 申込起算年月日
		out_map.setString(JBSbatKVIFM028.WRIB_ADD_OPTY_CD             , wribMap.getString(JBSbatKVIFM027.WRIB_ADD_OPTY_CD));				// 割引登録契機コード
		out_map.setString(JBSbatKVIFM028.WRIB_DSL_CNCL_OPTY_CD        , wribMap.getString(JBSbatKVIFM027.WRIB_DSL_CNCL_OPTY_CD));			// 割引解約キャンセル契機コード
		out_map.setString(JBSbatKVIFM028.WRIB_AMNT_SNST_STDARDYMD     , wribMap.getString(JBSbatKVIFM027.WRIB_AMNT_SNST_STDARDYMD));		// 割引額算出基準年月日
		out_map.setString(JBSbatKVIFM028.WRIB_CHRG_STA_MON_STI_CD     , wribMap.getString(JBSbatKVIFM027.WRIB_CHRG_STA_MON_STI_CD));		// 割引課金開始月指定コード
		out_map.setString(JBSbatKVIFM028.WRIB_ADD_YMD                 , wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD));					// 割引登録年月日
		out_map.setString(JBSbatKVIFM028.WRIB_SVC_KEI_UCWK_NO         , wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_UCWK_NO));			// 割引サービス契約内訳番号
		out_map.setString(JBSbatKVIFM028.WRIB_SVC_KEI_UCWK_STAT       , wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_UCWK_STAT));			// 割引サービス契約内訳ステータス
		out_map.setString(JBSbatKVIFM028.WRIB_SVC_KEI_UCWK_STAT_NM    , wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_UCWK_STAT_NM));		// 割引サービス契約内訳ステータス名称
		out_map.setString(JBSbatKVIFM028.WRIB_SVC_DTL_CD_UCWK         , wribMap.getString(JBSbatKVIFM027.WRIB_SVC_DTL_CD));					// 割引サービス詳細コード（内訳）
		out_map.setString(JBSbatKVIFM028.WRIB_APLY_CNT                , wribMap.getString(JBSbatKVIFM027.WRIB_APLY_CNT));					// 割引適用回数
		out_map.setString(JBSbatKVIFM028.SVC_CHRG_STAYMD              , wribMap.getString(JBSbatKVIFM027.SVC_CHRG_STAYMD_UCWK));			// サービス課金開始年月日
		out_map.setString(JBSbatKVIFM028.SVC_CHRG_ENDYMD              , wribMap.getString(JBSbatKVIFM027.SVC_CHRG_ENDYMD_UCWK));			// サービス課金終了年月日
		out_map.setString(JBSbatKVIFM028.FIRST_WRIB_APLY_YMD          , wribMap.getString(JBSbatKVIFM027.FIRST_WRIB_APLY_YMD));				// 初回割引適用年月日
		out_map.setString(JBSbatKVIFM028.CAMPAIGN_STA_CD              , wribMap.getString(JBSbatKVIFM027.CAMPAIGN_STA_CD));					// キャンペーン開始コード
		out_map.setString(JBSbatKVIFM028.CAMPAIGN_STA_CD_NM           , wribMap.getString(JBSbatKVIFM027.CAMPAIGN_STA_CD_NM));				// キャンペーン開始コード名称
		out_map.setString(JBSbatKVIFM028.STA_ADJ_CD                   , wribMap.getString(JBSbatKVIFM027.STA_ADJ_CD));						// 開始調整コード
		out_map.setString(JBSbatKVIFM028.STA_ADJ_CD_NM                , wribMap.getString(JBSbatKVIFM027.STA_ADJ_CD_NM));					// 開始調整コード名称
		out_map.setString(JBSbatKVIFM028.STA_ADJ_PRD                  , wribMap.getString(JBSbatKVIFM027.STA_ADJ_PRD));						// 開始調整期間
		out_map.setString(JBSbatKVIFM028.CAMPAIGN_END_CD              , wribMap.getString(JBSbatKVIFM027.CAMPAIGN_END_CD));					// キャンペーン終了コード
		out_map.setString(JBSbatKVIFM028.APLY_CNT_HAMBET_CD           , wribMap.getString(JBSbatKVIFM027.APLY_CNT_HAMBET_CD));				// 適用数判別コード
		out_map.setString(JBSbatKVIFM028.APLY_CNT_HAMBET_CD_NM        , wribMap.getString(JBSbatKVIFM027.APLY_CNT_HAMBET_CD_NM));			// 適用数判別コード名称
		out_map.setString(JBSbatKVIFM028.APLY_CNT                     , wribMap.getString(JBSbatKVIFM027.APLY_CNT));						// 適用数
		out_map.setString(JBSbatKVIFM028.SVC_CHRG_ENDYMD_SETPTN_CD    , wribMap.getString(JBSbatKVIFM027.SVC_CHRG_ENDYMD_SETPTN_CD));		// サービス課金終了年月日設定パターンコード
		out_map.setString(JBSbatKVIFM028.SVC_CHRG_ENDYMD_SETPTN_CD_NM , wribMap.getString(JBSbatKVIFM027.SVC_CHRG_ENDYMD_SETPTN_CD_NM));	// サービス課金終了年月日設定パターンコード名称

		out_map.setString(JBSbatKVIFM028.CHECK_RESULT                 , strErrorMessage);													// 検証結果
		
		//出力フラグを設定
		out_map.setOutFlg(true);
		
		//出力共通電文に入出力インターフェースを設定する。
		outputInItem.addOutMapList(out_map);
		
		// エラーメッセージの初期化
		strErrorMessage = "";
	}
	
	/**
	 * 割引検証割引サービス契約日付中間ファイルを編集します。
	 * 
	 * @param outputInItem 出力ファイル
	 * @param wribMap トランデータ（割引検証割引サービス契約集約ファイル））
	 * @param wribTypCd 割引タイプコード
	 * @param svcStaYmdRecalc サービス開始年月日（再算出後）
	 * @param svcChrgStaYmdRecalc サービス課金開始年月日（再算出後）
	 * @param wribAplyYmd 割引適用基準日
	 * @param svcStaYmd サービス開始年月日
	 * @param svcChrgStaYmd サービス課金開始年月日
	 * @param planStaYmd プラン開始年月日
	 * @param planChrgStaYmd プラン課金開始年月日
	 * @param svcChrgEndYmdBfcalc サービス課金終了年月日（再算出前）
	 * @param svcChrgEndYmdRecalc サービス課金終了年月日（再算出後）
	 * @param svcDslYmdHand 解約年月日（手動解除）
	 * @param svcChrgEndYmd サービス課金終了年月日
	 * @param planChrgEndYmd プラン課金終了年月日
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void editOutputCheckItem(	JBSbatOutputItem outputInItem,
										JBSbatServiceInterfaceMap wribMap,
										String wribTypCd,
										String svcStaYmdRecalc,
										String svcChrgStaYmdRecalc,
										String wribAplyYmd,
										String svcStaYmd,
										String svcChrgStaYmd,
										String planStaYmd,
										String planChrgStaYmd,
										String svcChrgEndYmdBfcalc,
										String svcChrgEndYmdRecalc,
										String svcDslYmdHand,
										String svcChrgEndYmd,
										String planChrgEndYmd) throws Exception
	{
		// 入出力インタフェースオブジェクトを生成
		JBSbatServiceInterfaceMap out_map = new JBSbatServiceInterfaceMap();
		
		// 出力項目を設定する
		out_map.setString(JBSbatKVIFM030.SVC_KEI_NO						 , wribMap.getString(JBSbatKVIFM027.SVC_KEI_NO));					// サービス契約番号
		out_map.setString(JBSbatKVIFM030.WRIB_SVC_KEI_NO				 , wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO));				// 割引サービス契約番号
		out_map.setString(JBSbatKVIFM030.WRIB_SVC_KEI_STAT				 , wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_STAT));			// 割引サービス契約ステータス
		out_map.setString(JBSbatKVIFM030.WRIB_SVC_KEI_STAT_NM			 , wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_STAT_NM));			// 割引サービス契約ステータス名称
		out_map.setString(JBSbatKVIFM030.WRIB_SVC_KEI_UCWK_STAT			 , wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_UCWK_STAT));		// 割引サービス契約内訳ステータス
		out_map.setString(JBSbatKVIFM030.WRIB_SVC_KEI_UCWK_STAT_NM		 , wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_UCWK_STAT_NM));	// 割引サービス契約内訳ステータス名称
		out_map.setString(JBSbatKVIFM030.WRIB_SVC_DTL_CD				 , wribMap.getString(JBSbatKVIFM027.WRIB_SVC_DTL_CD));				// 割引サービス詳細コード
		out_map.setString(JBSbatKVIFM030.SYSID							 , wribMap.getString(JBSbatKVIFM027.SYSID));						// ＳＹＳＩＤ
		out_map.setString(JBSbatKVIFM030.WRIB_SVC_CD					 , wribMap.getString(JBSbatKVIFM027.WRIB_SVC_CD));					// 割引サービスコード
		out_map.setString(JBSbatKVIFM030.WRIB_TYPE_CD					 , wribTypCd);														// 割引タイプコード
		out_map.setString(JBSbatKVIFM030.CAMPAIGN_STA_CD				 , wribMap.getString(JBSbatKVIFM027.CAMPAIGN_STA_CD));				// キャンペーン開始コード
		out_map.setString(JBSbatKVIFM030.CAMPAIGN_STA_CD_NM				 , wribMap.getString(JBSbatKVIFM027.CAMPAIGN_STA_CD_NM));			// キャンペーン開始コード名称
		out_map.setString(JBSbatKVIFM030.STA_ADJ_CD						 , wribMap.getString(JBSbatKVIFM027.STA_ADJ_CD));					// 開始調整コード
		out_map.setString(JBSbatKVIFM030.STA_ADJ_CD_NM					 , wribMap.getString(JBSbatKVIFM027.STA_ADJ_CD_NM));				// 開始調整コード名称
		out_map.setString(JBSbatKVIFM030.STA_ADJ_PRD					 , wribMap.getString(JBSbatKVIFM027.STA_ADJ_PRD));					// 開始調整期間
		out_map.setString(JBSbatKVIFM030.SVC_STA_YMD_RECALC				 , svcStaYmdRecalc);												// サービス開始年月日（再算出後）
		out_map.setString(JBSbatKVIFM030.SVC_CHRG_STAYMD_RECALC			 , svcChrgStaYmdRecalc);											// サービス課金開始年月日（再算出後）
		out_map.setString(JBSbatKVIFM030.WRIB_APLY_YMD					 , wribAplyYmd);													// 割引適用基準日
		out_map.setString(JBSbatKVIFM030.WRIB_ADD_YMD					 , wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD));					// 割引登録年月日
		out_map.setString(JBSbatKVIFM030.PRC_YMD						 , strPrcYmd);														// 料金計算日
		out_map.setString(JBSbatKVIFM030.SVC_STA_YMD					 , svcStaYmd);														// サービス開始年月日
		out_map.setString(JBSbatKVIFM030.SVC_CHRG_STAYMD				 , svcChrgStaYmd);													// サービス課金開始年月日
		out_map.setString(JBSbatKVIFM030.PLAN_STAYMD					 , planStaYmd);														// プラン開始年月日
		out_map.setString(JBSbatKVIFM030.PLAN_CHRG_STAYMD				 , planChrgStaYmd);													// プラン課金開始年月日
		out_map.setString(JBSbatKVIFM030.WRIB_DSL_CNCL_OPTY_CD			 , wribMap.getString(JBSbatKVIFM027.WRIB_DSL_CNCL_OPTY_CD));		// 割引解約キャンセル契機コード
		out_map.setString(JBSbatKVIFM030.SVC_CHRG_ENDYMD_BFCALC			 , svcChrgEndYmdBfcalc);											// サービス課金終了年月日（再算出前）
		out_map.setString(JBSbatKVIFM030.APLY_CNT_HAMBET_CD				 , wribMap.getString(JBSbatKVIFM027.APLY_CNT_HAMBET_CD));			// 適用数判別コード
		out_map.setString(JBSbatKVIFM030.APLY_CNT_HAMBET_CD_NM			 , wribMap.getString(JBSbatKVIFM027.APLY_CNT_HAMBET_CD_NM));		// 適用数判別コード名称
		out_map.setString(JBSbatKVIFM030.APLY_CNT						 , wribMap.getString(JBSbatKVIFM027.APLY_CNT));						// 適用数
		out_map.setString(JBSbatKVIFM030.SVC_CHRG_ENDYMD_RECALC			 , svcChrgEndYmdRecalc);											// サービス課金終了年月日（再算出後）
		out_map.setString(JBSbatKVIFM030.SVC_DSL_YMD_HAND				 , svcDslYmdHand);													// 解約年月日（手動解除）
		out_map.setString(JBSbatKVIFM030.SVC_CHRG_ENDYMD				 , svcChrgEndYmd);													// サービス課金終了年月日
		out_map.setString(JBSbatKVIFM030.PLAN_CHRG_ENDYMD				 , planChrgEndYmd);													// プラン課金終了年月日
		
		//出力フラグを設定
		out_map.setOutFlg(true);
		
		//出力共通電文に入出力インターフェースを設定する。
		outputInItem.addOutMapList_2(out_map);
	}
	
	/**
	 *  割引サービス契約内訳データの契約日付の再計算を行います。
	 * 
	 * @param svcMap　サービス契約データ
	 * @param wribMap　割引サービス契約データ
	 * @return String 検証結果
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void reCalcSvcbKeiYmd(JBSbatOutputItem outputInItem, JBSbatServiceInterfaceMap svcMap, JBSbatServiceInterfaceMap wribMap) throws Exception
	{
		// 作業領域の初期化
		String strWribTypCd = "";					// 割引タイプコード
		String strSvcChrgStaYmd = "";				// サービス課金開始年月日
		String strSvcStaYmd = "";					// サービス開始年月日
		String strPlanChrgStaYmd = "";				// プラン課金開始年月日
		String strPlanStaYmd = "";					// プラン開始年月日
		String strSvcChrgEndYmd = "";				// サービス課金終了年月日
		String strPlanChrgEndYmd = "";				// プラン終了年月日
		
		// サービス課金開始年月日計算
		strWribTypCd = (String)hashWribSvcInfo.get(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_CD)));
		Object[] resultYmd = this.getChrgStaYmd(strWribTypCd,
												 svcMap,
												 wribMap);
		
		// サービス課金開始年月日、サービス開始年月日の設定
		strSvcChrgStaYmd = resultYmd[1].toString();
		strSvcStaYmd = resultYmd[0].toString();

		// 開始調整コード・開始調整期間より、サービス課金開始年月日を再計算
		strSvcChrgStaYmd = this.reCalcSvcChrgStaYmd(strSvcChrgStaYmd, wribMap);
		
		// 開始調整コード・開始調整期間より、サービス開始年月日を再計算
		strSvcStaYmd = this.reCalcSvcChrgStaYmd(strSvcStaYmd, wribMap);
		
		// プラン開始年月日、プラン課金開始年月日の設定
		strPlanChrgStaYmd = strSvcChrgStaYmd;
		strPlanStaYmd = strSvcStaYmd;

		// エラーメッセージの初期化
		strErrorMessage = "";
		
		// サービス課金終了日検証
		Object[] resultEndYmd = this.chkChrgEndYmd(strWribTypCd,
													strSvcChrgStaYmd,
													svcMap,
													wribMap);
		
		// サービス課金終了日、プラン課金終了日の設定
		strSvcChrgEndYmd = resultEndYmd[1].toString();
		strPlanChrgEndYmd = strSvcChrgEndYmd;
		
		// 中間ファイルの出力
		this.editOutputCheckItem(outputInItem,
								  wribMap,
								  strWribTypCd,
								  strSvcStaYmd,
								  strSvcChrgStaYmd,
								  resultYmd[2].toString(),
								  strSvcStaYmd,
								  strSvcChrgStaYmd,
								  strPlanStaYmd,
								  strPlanChrgStaYmd,
								  resultEndYmd[0].toString(),
								  resultEndYmd[1].toString(),
								  resultEndYmd[2].toString(),
								  strSvcChrgEndYmd,
								  strPlanChrgEndYmd
								  );

		
		// 契約日付を、割引サービス契約単位で集約
		this.setWribKeiYmd(strSvcChrgStaYmd,
							strSvcStaYmd,
							strPlanChrgStaYmd,
							strPlanStaYmd,
							strSvcChrgEndYmd,
							strPlanChrgEndYmd);
	}
	
	/**
	 *  割引タイプコード・キャンペーン開始コードより、サービス課金開始年月日を算出します。
	 * 
	 * @param wribTypeCd　割引タイプコード
	 * @param svcMap　サービス契約データ
	 * @param wribMap　割引サービス契約データ
	 * @return String サービス課金開始年月日
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private Object[] getChrgStaYmd(String wribTypeCd, JBSbatServiceInterfaceMap svcMap, JBSbatServiceInterfaceMap wribMap) throws Exception
	{
		super.logPrint.printDebugLog("割引タイプコード[" + wribTypeCd + "]、キャンペーンコード[" + repNullToEmpty(wribMap.getString(JBSbatKVIFM027.CAMPAIGN_STA_CD)) + "]");

		
		// 作業領域の初期化
		String HAISO_STAT_COMPLETE = "004";					// 配送ステータス(完了済)
		String strCalcDay = "";
		String strSvcChrgStaYmd = "";
		String strSvcStaYmd = "";
		String wrkStaYmd = "";
		String wrkChrgStaYmd = "";
		String wrkBigDay = "";
		String wrkNetChrgStaYmd = "";
		String wrkTvChrgStaYmd = "";
		String wrkTelChrgStaYmd = "";
		String wrkNextMonth = "";
		String strWribAplyYmd = "";
		
		// 50:キャンペーン割引(51:面開発) かつ 01:課金開始日
		if ((wribTypeCd.equals(JKKStrConst.WARIB_TYPE_CMP) || wribTypeCd.equals(JKKStrConst.WARIB_TYPE_MENKAIHAT)) &&
			(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.CAMPAIGN_STA_CD)).equals(CD00266_01)))
		{
			strSvcChrgStaYmd = repNullToEmpty(svcMap.getString(JBSbatKVIFM016.SVC_CHRG_STAYMD));
			strWribAplyYmd = strSvcChrgStaYmd;
		}
		
		// 50:キャンペーン割引(51:面開発) かつ 02:サービス開始日
		else if ((wribTypeCd.equals(JKKStrConst.WARIB_TYPE_CMP) || wribTypeCd.equals(JKKStrConst.WARIB_TYPE_MENKAIHAT)) &&
				  (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.CAMPAIGN_STA_CD)).equals(CD00266_02)))
		{
			strSvcChrgStaYmd = repNullToEmpty(svcMap.getString(JBSbatKVIFM016.SVC_STA_YMD));
			strWribAplyYmd = strSvcChrgStaYmd;
		}
		
		// 50:キャンペーン割引(51:面開発) かつ 03:登録月
		else if ((wribTypeCd.equals(JKKStrConst.WARIB_TYPE_CMP) || wribTypeCd.equals(JKKStrConst.WARIB_TYPE_MENKAIHAT)) &&
				  (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.CAMPAIGN_STA_CD)).equals(CD00266_03)))
		{
			strSvcChrgStaYmd = repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD));
			strWribAplyYmd = strSvcChrgStaYmd;
		}
		
		// 50:キャンペーン割引(51:面開発) かつ 04:翌月
		else if ((wribTypeCd.equals(JKKStrConst.WARIB_TYPE_CMP) || wribTypeCd.equals(JKKStrConst.WARIB_TYPE_MENKAIHAT)) &&
				  (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.CAMPAIGN_STA_CD)).equals(CD00266_04)))
		{
			if (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).equals(""))
			{
				strSvcChrgStaYmd = "";
			}
			else
			{
				strSvcChrgStaYmd = JBSbatDateUtil.adjustDate(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).substring(0 , 6) + 
				           JBSbatDateUtil.getEndOfMonth(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).substring(0 , 6))
				           , 1);
			}
			strWribAplyYmd = strSvcChrgStaYmd;
		}
		
		// 50:キャンペーン割引(51:面開発) かつ 05:翌月(初日は当月)
		else if ((wribTypeCd.equals(JKKStrConst.WARIB_TYPE_CMP) || wribTypeCd.equals(JKKStrConst.WARIB_TYPE_MENKAIHAT)) &&
				  (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.CAMPAIGN_STA_CD)).equals(CD00266_05)))
		{
			if (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).equals(""))
			{
				strSvcChrgStaYmd = "";
			}
			else
			{
				//1日の場合
				if (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).substring(6 , 8).equals("01"))
				{
					strSvcChrgStaYmd = repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD));
				}
				else
				{
					strSvcChrgStaYmd = JBSbatDateUtil.adjustDate(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).substring(0 , 6) + 
									   JBSbatDateUtil.getEndOfMonth(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).substring(0 , 6))
									   , 1);
				}
			}
			strWribAplyYmd = strSvcChrgStaYmd;
		}
		
		// 50:キャンペーン割引(51:面開発) かつ 06:課金開始前月
		else if ((wribTypeCd.equals(JKKStrConst.WARIB_TYPE_CMP) || wribTypeCd.equals(JKKStrConst.WARIB_TYPE_MENKAIHAT)) &&
				  (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.CAMPAIGN_STA_CD)).equals(CD00266_06)))
		{
			if (repNullToEmpty(svcMap.getString(JBSbatKVIFM016.SVC_CHRG_STAYMD)).equals(""))
			{
				strSvcChrgStaYmd = "";
			}
			else
			{
				strCalcDay = JBSbatDateUtil.adjustMonth(repNullToEmpty(svcMap.getString(JBSbatKVIFM016.SVC_CHRG_STAYMD)) , -2);
				strSvcChrgStaYmd = JBSbatDateUtil.adjustDate(strCalcDay.substring(0 , 6) + 
															 JBSbatDateUtil.getEndOfMonth(strCalcDay.substring(0 , 6)) , 1);
			}
			strWribAplyYmd = strSvcChrgStaYmd;
		}
		
		// 50:キャンペーン割引(51:面開発) かつ 07:プラン変更
		else if ((wribTypeCd.equals(JKKStrConst.WARIB_TYPE_CMP) || wribTypeCd.equals(JKKStrConst.WARIB_TYPE_MENKAIHAT)) &&
				  (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.CAMPAIGN_STA_CD)).equals(CD00266_07)))
		{
			strSvcChrgStaYmd = repNullToEmpty(svcMap.getString(JBSbatKVIFM016.PLAN_STAYMD));
			strWribAplyYmd = strSvcChrgStaYmd;
		}
		
		// 50:キャンペーン割引(51:面開発) かつ 08:機種変更
		else if ((wribTypeCd.equals(JKKStrConst.WARIB_TYPE_CMP) || wribTypeCd.equals(JKKStrConst.WARIB_TYPE_MENKAIHAT)) &&
				  (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.CAMPAIGN_STA_CD)).equals(CD00266_08)))
		{
			// 機器提供サービス契約の課金開始日取得
			Object[] svcKktkParam = {repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_KEI_NO)),
													super.opeDate};
			executeKK_T_KKTK_SVC_KEI_KV_SELECT_006(svcKktkParam);
			JBSbatCommonDBInterface rcvTtktMap = db_KK_T_KKTK_SVC_KEI.selectNext();
			
			if (rcvTtktMap == null)
			{
				strSvcChrgStaYmd = "";
			}
			else
			{
				if (repNullToEmpty(rcvTtktMap.getString(JBSbatKK_T_KKTK_SVC_KEI.SVC_CHRG_STAYMD)).equals(""))
				{
					strSvcChrgStaYmd = "";
				}
				else
				{
					strSvcChrgStaYmd = repNullToEmpty(rcvTtktMap.getString(JBSbatKK_T_KKTK_SVC_KEI.SVC_CHRG_STAYMD));
				}
			}
			strWribAplyYmd = strSvcChrgStaYmd;
		}
		
		// 50:キャンペーン割引(51:面開発) かつ 09:出荷日＋n日
		else if ((wribTypeCd.equals(JKKStrConst.WARIB_TYPE_CMP) || wribTypeCd.equals(JKKStrConst.WARIB_TYPE_MENKAIHAT)) &&
				  (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.CAMPAIGN_STA_CD)).equals(CD00266_09)))
		{
			// 配送の配送完了日取得
			Object[] svcHaiParam = {HAISO_STAT_COMPLETE,
									repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_KEI_NO)),
									super.opeDate,
									repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_KEI_NO)),
									super.opeDate};
			executeDK_T_HAISO_KV_SELECT_004(svcHaiParam);
			JBSbatCommonDBInterface rcvTtktMap = db_DK_T_HAISO.selectNext();
			
			if (rcvTtktMap == null)
			{
				strSvcChrgStaYmd = "";
			}
			else
			{
				strSvcChrgStaYmd = repNullToEmpty(rcvTtktMap.getString(JBSbatDK_T_HAISO.HAISO_FIN_YMD));
			}
			strWribAplyYmd = strSvcChrgStaYmd;
		}
		
		// 50:キャンペーン割引(51:面開発) かつ 20:住変サービス開始日
		else if ((wribTypeCd.equals(JKKStrConst.WARIB_TYPE_CMP) || wribTypeCd.equals(JKKStrConst.WARIB_TYPE_MENKAIHAT)) &&
				  (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.CAMPAIGN_STA_CD)).equals(CD00266_20)))
		{
			// 住変（新設）の工事完了日取得
			Object[] svcJuuParam = {repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SYSID))};
			executeKU_T_KOJIAK_KV_SELECT_003(svcJuuParam);
			JBSbatCommonDBInterface rcvKojiMap = db_KU_T_KOJIAK.selectNext();
			// 2013/09/09 mod start
			if (rcvKojiMap == null)
			{
				//存在しない場合は予約適用年月日を設定
				strSvcChrgStaYmd = repNullToEmpty(svcMap.getString(JBSbatKVIFM016.RSV_APLY_YMD));//予約適用年月日
			}
			else
			{
				if (repNullToEmpty(rcvKojiMap.getString(JBSbatKU_T_KOJIAK.AD_CHG_FIX_DTM)).equals(""))
				{
					//住所変更日が設定されていない場合は予約適用年月日を設定
					strSvcChrgStaYmd = repNullToEmpty(svcMap.getString(JBSbatKVIFM016.RSV_APLY_YMD));
				}
				else
				{
					//開始調整コードで翌月初日を設定するため工事完了日のまま設定
					strSvcChrgStaYmd = repNullToEmpty(rcvKojiMap.getString(JBSbatKU_T_KOJIAK.AD_CHG_FIX_DTM)).substring(0 , 8);
					
				}
			}
			// 2013/09/09 mod end
			strWribAplyYmd = strSvcChrgStaYmd;
		}
		
		// 30:長期利用割引 かつ 51：長割
		else if ((wribTypeCd.equals(JKKStrConst.WRIB_TYPE_CHOKI_USE_WRIB)) &&
				  (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.CAMPAIGN_STA_CD)).equals(CD00266_51)))
		{
			// 割引適用基準日の計算
			// ネットのサービス課金開始年月日を取得
			wrkNetChrgStaYmd = this.getPrgGrpYmd(EOBLAND_NET, repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO)), "2");
			strWribAplyYmd = wrkNetChrgStaYmd;
			
			// 割引登録日　≦　割引適用基準日
			if (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).compareTo(wrkNetChrgStaYmd) <= 0)
			{
				strSvcChrgStaYmd = wrkNetChrgStaYmd;
			}
			else
			{
				if (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).equals(""))
				{
					strSvcChrgStaYmd = "";
				}
				else
				{
					strSvcChrgStaYmd = JBSbatDateUtil.adjustDate(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).substring(0 , 6) + 
								   JBSbatDateUtil.getEndOfMonth(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).substring(0 , 6))
								   , 1);
				}
			}
		}
		
		// 31:即割 かつ 52:即割
		else if ((wribTypeCd.equals(JKKStrConst.WRIB_TYPE_SOKU_WRIB)) &&
				  (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.CAMPAIGN_STA_CD)).equals(CD00266_52)))
		{
			// 割引適用基準日の計算
			// ネットのサービス課金開始年月日を取得
			wrkNetChrgStaYmd = this.getPrgGrpYmd(EOBLAND_NET, repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO)), "2");
			strWribAplyYmd = wrkNetChrgStaYmd;
			
			// 割引登録日　≦　割引適用基準日
			if (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).compareTo(wrkNetChrgStaYmd) <= 0)
			{
				strSvcChrgStaYmd = wrkNetChrgStaYmd;
			}
			else
			{
				if (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).equals(""))
				{
					strSvcChrgStaYmd = "";
				}
				else
				{
					strSvcChrgStaYmd = JBSbatDateUtil.adjustDate(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).substring(0 , 6) + 
								   JBSbatDateUtil.getEndOfMonth(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).substring(0 , 6))
								   , 1);
				}
			}
		}
		
		// 32:長期継続利用割引 かつ 53:長期継続利用割引
		else if ((wribTypeCd.equals(JKKStrConst.WRIB_TYPE_CHOKI_KEIZK_USE_WRIB)) &&
				  (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.CAMPAIGN_STA_CD)).equals(CD00266_53)))
		{
			// 割引適用基準日の計算
			// ネットのサービス開始年月日を取得
			wrkNetChrgStaYmd = this.getPrgGrpYmd(EOBLAND_NET, repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO)), "1");
			
			if (repNullToEmpty(wrkNetChrgStaYmd).equals(""))
			{
				strWribAplyYmd = "";
				strSvcChrgStaYmd = "";
			}
			else
			{
				// ２６ヶ月目の１日を計算
				strCalcDay = JBSbatDateUtil.adjustMonth(wrkNetChrgStaYmd , 24);
				wrkNetChrgStaYmd = JBSbatDateUtil.adjustDate(strCalcDay.substring(0 , 6) + 
														  JBSbatDateUtil.getEndOfMonth(strCalcDay.substring(0 , 6)) , 1);
				strWribAplyYmd = wrkNetChrgStaYmd;
				
				// 割引登録日　≦　割引適用基準日
				if (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).compareTo(wrkNetChrgStaYmd) <= 0)
				{
					if (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_AMNT_SNST_STDARDYMD)).equals(""))
					{
						strSvcChrgStaYmd = "";
					}
					else
					{
						strCalcDay = JBSbatDateUtil.adjustMonth(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_AMNT_SNST_STDARDYMD)) , 24);
						strSvcChrgStaYmd = JBSbatDateUtil.adjustDate(strCalcDay.substring(0 , 6) + 
																	 JBSbatDateUtil.getEndOfMonth(strCalcDay.substring(0 , 6)) , 1);
					}
				}
				else
				{
					// 申込時に「当月適用」を選択
					if (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_CHRG_STA_MON_STI_CD)).equals("1"))
					{
						if (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).equals(""))
						{
							strSvcChrgStaYmd = "";
						}
						else
						{
							strCalcDay = JBSbatDateUtil.adjustMonth(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)) , -1);
							strSvcChrgStaYmd = JBSbatDateUtil.adjustDate(strCalcDay.substring(0 , 6) + 
																		 JBSbatDateUtil.getEndOfMonth(strCalcDay.substring(0 , 6)) , 1);
						}
					}
					else
					{
						// 申込時に「前月適用」を選択
						strSvcChrgStaYmd = JBSbatDateUtil.adjustMonth(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)) , -1);
					}
				}
			}
		}
		
		// 10:セット割 かつ 54:ネットTVセット割
		else if ((wribTypeCd.equals(JKKStrConst.WRIB_TYPE_SET_WRIB)) &&
				  (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.CAMPAIGN_STA_CD)).equals(CD00266_54)))
		{
			// 割引適用基準日の計算
			// ネットのサービス開始年月日を取得
			wrkNetChrgStaYmd = this.getPrgGrpYmd(EOBLAND_NET, repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO)), "1");
			
			// TVのサービス開始年月日を取得
			wrkTvChrgStaYmd = this.getPrgGrpYmd(EOBLAND_TV, repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO)), "1");
			
			// ネットとTVの遅い日付を取得
			wrkBigDay = this.getBiggerString(wrkNetChrgStaYmd, wrkTvChrgStaYmd);
			
			if (repNullToEmpty(wrkBigDay).equals(""))
			{
				wrkNextMonth = "";
			}
			else
			{
				// 上記日付の翌月１日を取得（１日の場合は何もしない）
				if (wrkBigDay.substring(6 , 8).equals("01"))
				{
					wrkNextMonth = wrkBigDay;
				}
				else
				{
					wrkNextMonth = JBSbatDateUtil.adjustDate(wrkBigDay.substring(0 , 6) + 
								   JBSbatDateUtil.getEndOfMonth(wrkBigDay.substring(0 , 6))
								   , 1);
				}
			}
			strWribAplyYmd = wrkNextMonth;
			
			// 割引登録日　≦　割引適用基準日
			if (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).compareTo(wrkNextMonth) <= 0)
			{
				if (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).equals(""))
				{
					strSvcChrgStaYmd = "";
				}
				else
				{
					// 遅い日付が割引登録年月の１日の場合
					if (wrkBigDay.equals(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).substring(0 , 6) + "01"))
					{
						strSvcChrgStaYmd = repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).substring(0 , 6) + "01";
					}
					else
					{
						strSvcChrgStaYmd = JBSbatDateUtil.adjustDate(wrkBigDay.substring(0 , 6) + 
										   JBSbatDateUtil.getEndOfMonth(wrkBigDay.substring(0 , 6))
										   , 1);
					}
				}
			}
			else
			{
				if (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).equals(""))
				{
					strSvcChrgStaYmd = "";
				}
				else
				{
					strSvcChrgStaYmd = JBSbatDateUtil.adjustDate(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).substring(0 , 6) + 
							   JBSbatDateUtil.getEndOfMonth(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).substring(0 , 6))
							   , 1);
				}
			}
		}
		
		// 10:セット割 かつ 55:ネット電話セット割
		else if ((wribTypeCd.equals(JKKStrConst.WRIB_TYPE_SET_WRIB)) &&
				  (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.CAMPAIGN_STA_CD)).equals(CD00266_55)))
		{
			// 割引適用基準日の計算
			// ネットのサービス課金開始年月日を取得
			wrkNetChrgStaYmd = this.getPrgGrpYmd(EOBLAND_NET, repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO)), "2");
			
			// 電話のサービス課金開始年月日を取得
			wrkTelChrgStaYmd = this.getPrgGrpYmd(EOBLAND_TEL, repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO)), "2");
			
			// ネットとTVの遅い日付を取得
			wrkBigDay = this.getBiggerString(wrkNetChrgStaYmd, wrkTelChrgStaYmd);
			strWribAplyYmd = wrkBigDay;
			
			// 割引登録日　≦　割引適用基準日
			if (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).compareTo(wrkBigDay) <= 0)
			{
				strSvcChrgStaYmd = wrkBigDay;
			}
			else
			{
				if (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).equals(""))
				{
					strSvcChrgStaYmd = "";
				}
				else
				{
					strSvcChrgStaYmd = JBSbatDateUtil.adjustDate(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).substring(0 , 6) + 
									   JBSbatDateUtil.getEndOfMonth(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).substring(0 , 6))
									   , 1);
				}
			}
		}
		
		// 10:セット割 かつ 56:電話TVセット割
		else if ((wribTypeCd.equals(JKKStrConst.WRIB_TYPE_SET_WRIB)) &&
				  (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.CAMPAIGN_STA_CD)).equals(CD00266_56)))
		{
			// 割引適用基準日の計算
			// 電話のサービス開始年月日を取得
			wrkTelChrgStaYmd = this.getPrgGrpYmd(EOBLAND_TEL, repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO)), "1");
			
			// TVのサービス開始年月日を取得
			wrkTvChrgStaYmd = this.getPrgGrpYmd(EOBLAND_TV, repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO)), "1");
			
			// ネットとTVの遅い日付を取得
			wrkBigDay = this.getBiggerString(wrkTelChrgStaYmd, wrkTvChrgStaYmd);
			
			if (repNullToEmpty(wrkBigDay).equals(""))
			{
				strWribAplyYmd = "";
				strSvcChrgStaYmd = "";
			}
			else
			{
				// 上記日付の翌月１日を取得
				wrkNextMonth = JBSbatDateUtil.adjustDate(wrkBigDay.substring(0 , 6) + 
							   JBSbatDateUtil.getEndOfMonth(wrkBigDay.substring(0 , 6))
							   , 1);
				strWribAplyYmd = wrkNextMonth;
				
				// 割引登録日　≦　割引適用基準日
				if (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).compareTo(wrkNextMonth) <= 0)
				{
					strSvcChrgStaYmd = wrkNextMonth;
				}
				else
				{
					if (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).equals(""))
					{
						strSvcChrgStaYmd = "";
					}
					else
					{
						strSvcChrgStaYmd = JBSbatDateUtil.adjustDate(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).substring(0 , 6) + 
										   JBSbatDateUtil.getEndOfMonth(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_ADD_YMD)).substring(0 , 6))
										   , 1);
					}
				}
			}
		}
		
		// 10:セット割 かつ 57:ネットモバイルセット割
		else if ((wribTypeCd.equals(JKKStrConst.WRIB_TYPE_SET_WRIB)) &&
				  (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.CAMPAIGN_STA_CD)).equals(CD00266_57)))
		{
			// ネットのサービス契約が照査済以降（解約・キャンセルを除く）の日付を取得
			wrkStaYmd = this.getNetYmd(EOBLAND_NET, repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO)));
			
			// モバイルのサービス課金開始日を取得
			wrkChrgStaYmd = this.getPrgGrpYmd(EOBLAND_MOBILE, repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO)), "2");
			
			// 日付とサービス課金開始日のうち、大きいほうを取得
			wrkBigDay = this.getBiggerString(wrkStaYmd, wrkChrgStaYmd);
			strWribAplyYmd = wrkBigDay;
			
			if (wrkBigDay.equals(""))
			{
				strSvcChrgStaYmd = "";
			}
			else
			{
				strCalcDay = JBSbatDateUtil.adjustMonth(wrkBigDay , -1);
				strSvcChrgStaYmd = JBSbatDateUtil.adjustDate(strCalcDay.substring(0 , 6) + 
															 JBSbatDateUtil.getEndOfMonth(strCalcDay.substring(0 , 6)) , 1);
			}
		}
		
		// 42:割賦契約割引 かつ 58:割賦契約割引
		else if ((wribTypeCd.equals(WARIB_TYPE_KAP)) &&
				  (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.CAMPAIGN_STA_CD)).equals(CD00266_58)))
		{
			// 割引サービス契約番号に紐付く割賦契約の割賦契約課金開始年月日を取得
			Object[] svcKapParam = {super.opeDate, repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO)), super.opeDate};
			executeKK_T_KAP_KEI_KV_SELECT_002(svcKapParam);
			JBSbatCommonDBInterface rcvKapMap = db_KK_T_KAP_KEI.selectNext();
			
			// 取得結果がNULLの場合は、空文字を返却
			if (rcvKapMap == null)
			{
				wrkStaYmd = "";
			}
			else
			{
				// 割賦契約課金開始年月日を取得
				wrkStaYmd = repNullToEmpty(rcvKapMap.getString(JBSbatKK_T_KAP_KEI.KAP_KEI_CHRG_STAYMD));
			}
			
			// 割引サービス契約番号に紐付くオプションサービス契約のサービス課金開始年月日を取得
			Object[] svcOptParam = {super.opeDate, repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO)), super.opeDate};
			executeKK_T_OP_SVC_KEI_KV_SELECT_013(svcOptParam);
			JBSbatCommonDBInterface rcvOptMap = db_KK_T_OP_SVC_KEI.selectNext();
			
			// 取得結果がNULLの場合は、空文字を返却
			if (rcvOptMap == null)
			{
				wrkChrgStaYmd = "";
			}
			else
			{
				// サービス課金開始年月日を取得
				wrkChrgStaYmd = repNullToEmpty(rcvOptMap.getString(JBSbatKK_T_OP_SVC_KEI.SVC_CHRG_STAYMD));
			}
			
			// 割賦契約課金開始年月日とサービス課金開始年月日のうち、大きいほうを取得
			strSvcChrgStaYmd = this.getBiggerString(wrkStaYmd, wrkChrgStaYmd);
			strWribAplyYmd = strSvcChrgStaYmd;
		}
		
		// 50:キャンペーン割引(51:面開発) かつ 59:ハイブリッド割
		else if ((wribTypeCd.equals(JKKStrConst.WARIB_TYPE_CMP) || wribTypeCd.equals(JKKStrConst.WARIB_TYPE_MENKAIHAT)) &&
				  (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.CAMPAIGN_STA_CD)).equals(CD00266_59)))
		{
			strSvcChrgStaYmd = repNullToEmpty(svcMap.getString(JBSbatKVIFM016.SVC_CHRG_STAYMD));
			strWribAplyYmd = strSvcChrgStaYmd;
		}
		
		// 20:ファミリーパック
		else if (wribTypeCd.equals(WARIB_TYPE_FAMILY))
		{
			String svcStaYmd = "";
			String mskmYmd = "";
			
			// 割引のサービス開始年月日の最大値を取得
			Object[] svcFamilyParam = {repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO)),
									   super.opeDate,
									   super.opeDate,
									   repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO)),
									   super.opeDate,
									   super.opeDate,
									   repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO)),
									   super.opeDate,
									   super.opeDate,
									   repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO)),
									   super.opeDate,
									   super.opeDate,
									   repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO)),
									   super.opeDate,
									   super.opeDate,
									   repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO)),
									   super.opeDate,
									   super.opeDate};
			executeKK_T_WRISVC_TG_KEI_KV_SELECT_003(svcFamilyParam);
			JBSbatCommonDBInterface rcvFamilyMap = db_KK_T_WRISVC_TG_KEI.selectNext();
			
			if (rcvFamilyMap == null)
			{
				svcStaYmd = "";
			}
			else
			{
				svcStaYmd = (repNullToEmpty(rcvFamilyMap.getString(JBSbatKK_T_SVC_KEI.SVC_STA_YMD)));
			}
			
			// 申込明細の申込年月日を取得
			Object[] svcMskmParam = {repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_NO)),
									 super.opeDate};
			executeKK_T_MSKM_DTL_KV_SELECT_003(svcMskmParam);
			JBSbatCommonDBInterface rcvMskmMap = db_KK_T_MSKM_DTL.selectNext();
			
			if (rcvMskmMap == null)
			{
				mskmYmd = "";
			}
			else
			{
				mskmYmd = (repNullToEmpty(rcvMskmMap.getString(JBSbatKK_T_MSKM_DTL.MSKM_YMD)));
			}
			
			if (mskmYmd.compareTo(svcStaYmd) <= 0)
			{
				if (svcStaYmd.equals(""))
				{
					strSvcChrgStaYmd = "";
					strSvcStaYmd = strSvcChrgStaYmd;
				}
				else
				{
					strSvcChrgStaYmd = JBSbatDateUtil.adjustDate(svcStaYmd.substring(0 , 6) + 
							   JBSbatDateUtil.getEndOfMonth(svcStaYmd.substring(0 , 6))
							   , 1);
					strSvcStaYmd = svcStaYmd;
				}
			}
			else
			{
				if (mskmYmd.equals(""))
				{
					strSvcChrgStaYmd = "";
					strSvcStaYmd = strSvcChrgStaYmd;
				}
				else
				{
					strSvcChrgStaYmd = JBSbatDateUtil.adjustDate(mskmYmd.substring(0 , 6) + 
							   JBSbatDateUtil.getEndOfMonth(mskmYmd.substring(0 , 6))
							   , 1);
					strSvcStaYmd = strSvcChrgStaYmd;
				}
			}
			strWribAplyYmd = strSvcChrgStaYmd;
		}
		else
		{
			strSvcChrgStaYmd = "";
		}
		
		// ファミリーパック以外の場合は、サービス開始日＝サービス課金開始日
		if (!wribTypeCd.equals(WARIB_TYPE_FAMILY))
		{
			strSvcStaYmd = strSvcChrgStaYmd;
		}
		
		
		super.logPrint.printDebugLog("算出後のサービス開始日[" + strSvcStaYmd + "]");
		super.logPrint.printDebugLog("算出後のサービス課金開始日[" + strSvcChrgStaYmd + "]");
		
		Object[] result = {strSvcStaYmd , strSvcChrgStaYmd , strWribAplyYmd};
		return result;
	}

	/**
	 * ネットのサービス契約が照査済以降（解約・キャンセルを除く）の日付を取得します。
	 * 
	 * @param eoBlandCd eoブランドコード
	 * @param wribSvcKeiNo　割引サービス契約番号
	 * @return String ネットのサービス契約が照査済以降（解約・キャンセルを除く）の日付
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String getNetYmd(String eoBlandCd, String wribSvcKeiNo) throws Exception
	{

		// 作業領域の初期化
		String resultYmd = "";
		
		// ネットのサービス契約が照査済以降（解約・キャンセルを除く）の日付を取得
		Object[] svcWribParam = {wribSvcKeiNo, super.opeDate, eoBlandCd, super.opeDate, super.opeDate};
		executeKK_T_SVC_KEI_KV_SELECT_019(svcWribParam);
		JBSbatCommonDBInterface rcvKeiMap = db_KK_T_SVC_KEI.selectNext();
		
		// 取得結果がNULLの場合は、空文字を返却
		if (rcvKeiMap == null)
		{
			resultYmd = "";
		}
		else
		{
			// 照査日を取得
			resultYmd = repNullToEmpty(rcvKeiMap.getString(JBSbatKK_T_SVC_KEI.SHOSA_YMD));
		}
		
		return resultYmd;
	}
	
	/**
	 * ｅｏブランドに紐付くサービス契約のサービス開始年月日（サービス課金開始年月日）を取得します。
	 * 
	 * @param eoBlandCd eoブランドコード
	 * @param wribSvcKeiNo　割引サービス契約番号
	 * @param status　1:サービス開始年月日、2:サービス課金開始年月日
	 * @return String サービス開始年月日もしくはサービス課金開始年月日
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String getPrgGrpYmd(String eoBlandCd, String wribSvcKeiNo, String status) throws Exception
	{

		// 作業領域の初期化
		String resultYmd = "";
		
		// ｅｏブランドに紐付くサービス契約のサービス課金開始年月日を取得
		Object[] svcWribParam = {wribSvcKeiNo, super.opeDate, eoBlandCd, super.opeDate, super.opeDate};
		executeKK_T_SVC_KEI_KV_SELECT_020(svcWribParam);
		JBSbatCommonDBInterface rcvKeiMap = db_KK_T_SVC_KEI.selectNext();
		
		// 取得結果がNULLの場合は、空文字を返却
		if (rcvKeiMap == null)
		{
			resultYmd = "";
		}
		else
		{
			// サービス開始年月日
			if (status.equals("1"))
			{
				resultYmd = repNullToEmpty(rcvKeiMap.getString(JBSbatKK_T_SVC_KEI.SVC_STA_YMD));
			}
			else
			{
				// サービス課金開始年月日
				resultYmd = repNullToEmpty(rcvKeiMap.getString(JBSbatKK_T_SVC_KEI.SVC_CHRG_STAYMD));
			}
		}
		
		return resultYmd;
	}
	
	/**
	 * 文字列の比較を行い、大きいほうを返却します。
	 * 
	 * @param strChar1 文字列１
	 * @param strChar2 文字列２
	 * @return String 大きいほうの文字列
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String getBiggerString(String strChar1, String strChar2) throws Exception
	{
		// 作業領域の初期化
		String wrkChar1 = "";
		String wrkChar2 = "";
		String resultChar = "";

		// NULLを空白に置き換え
		wrkChar1 = repNullToEmpty(strChar1);
		wrkChar2 = repNullToEmpty(strChar2);
		
		// 文字列１が空白の場合は、文字列２を返却する
		if (wrkChar1.equals(""))
		{
			resultChar = wrkChar2;
		}
		else if (wrkChar2.equals(""))
		{
			// 文字列２が空白の場合は、文字列１を返却する
			resultChar = wrkChar1;
		}
		else
		{
			// 大きいほうを返却
			if (wrkChar1.compareTo(wrkChar2) <= 0)
			{
				resultChar = wrkChar2;
			}
			else
			{
				resultChar = wrkChar1;
			}
		}
		
		return resultChar;
	}
	
	/**
	 * 割引サービスマスタの情報をハッシュマップに格納します。
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void setHashMapWribSvc() throws Exception
	{
		// 割引サービスコード・割引タイプコード取得
		Object[] svcWribParam = {super.opeDate};
		executeKK_M_WRIB_SVC_KV_SELECT_002(svcWribParam);
		JBSbatCommonDBInterface rcvWribMap = db_KK_M_WRIB_SVC.selectNext();

		while (rcvWribMap != null)
		{
			hashWribSvcInfo.put(repNullToEmpty(rcvWribMap.getString(JBSbatKK_M_WRIB_SVC.WRIB_SVC_CD)) ,
								repNullToEmpty(rcvWribMap.getString(JBSbatKK_M_WRIB_SVC.WRIB_TYPE_CD)));

			rcvWribMap = db_KK_M_WRIB_SVC.selectNext();
		}
	}
	
	/**
	 * サービス課金開始年月日／サービス開始年月日を再算出します。
	 * 
	 * @param strSvcChrgStaYmd サービス課金開始年月日
	 * @param wribMap　割引サービス契約データ
	 * @return String 最算出後のサービス課金開始年月日
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String reCalcSvcChrgStaYmd(String strSvcChrgStaYmd, JBSbatServiceInterfaceMap wribMap) throws Exception
	{
		// 作業領域の初期化
		String STA_ADJ_CD_NONE = "1";				// 開始調整コード 調整なし
		String STA_ADJ_CD_MONTH = "2";				// 開始調整コード 月数
		String STA_ADJ_CD_DAY = "3";				// 開始調整コード 日数
		String STA_ADJ_CD_MONTH_FIRST = "4";		// 開始調整コード 月数（初日）
		String strCalcDay = "";

		String resultSvcChrgStaYmd = "";
		String staAdjCd = repNullToEmpty(wribMap.getString(JBSbatKVIFM027.STA_ADJ_CD));
		int strAdjPrd = Integer.parseInt(repNullToZero(wribMap.getString(JBSbatKVIFM027.STA_ADJ_PRD)));

		super.logPrint.printDebugLog("−−−−−サービス課金開始日／サービス開始年月日再算出開始−−−−−");
		super.logPrint.printDebugLog("開始調整コード[" + staAdjCd + "]、開始調整期間｢" + strAdjPrd + "]");
		// 開始調整コードにより処理分岐
		// 何もしない
		if (staAdjCd.equals(STA_ADJ_CD_NONE))
		{
			resultSvcChrgStaYmd = strSvcChrgStaYmd;
		}
		
		// 月数の調整
		else if (staAdjCd.equals(STA_ADJ_CD_MONTH))
		{
			resultSvcChrgStaYmd = JBSbatDateUtil.adjustMonth(strSvcChrgStaYmd , strAdjPrd);
		}
		
		// 日数の調整
		else if (staAdjCd.equals(STA_ADJ_CD_DAY))
		{
			resultSvcChrgStaYmd = JBSbatDateUtil.adjustDate(strSvcChrgStaYmd , strAdjPrd);
		}
		
		// 月数（月初日）の調整
		else if (staAdjCd.equals(STA_ADJ_CD_MONTH_FIRST))
		{
			if (!strSvcChrgStaYmd.equals(""))
			{
				strCalcDay = JBSbatDateUtil.adjustMonth(strSvcChrgStaYmd , strAdjPrd - 1);
				resultSvcChrgStaYmd = JBSbatDateUtil.adjustDate(strCalcDay.substring(0 , 6) + 
																JBSbatDateUtil.getEndOfMonth(strCalcDay.substring(0 , 6)) , 1);
			}
		}
		else
		{
			resultSvcChrgStaYmd = strSvcChrgStaYmd;
		}
		
		super.logPrint.printDebugLog("再算出後のサービス課金開始日／サービス開始年月日[" + strSvcChrgStaYmd + "]");
		super.logPrint.printDebugLog("−−−−−サービス課金開始日／サービス開始年月日再算出終了−−−−−");
		return resultSvcChrgStaYmd;
	}
	
	/**
	 *  サービス課金終了日の検証を行います。
	 * 
	 * @param wribTypeCd　割引タイプコード
	 * @param svcChrgStaYmd　サービス課金開始年月日
	 * @param svcMap　サービス契約データ
	 * @param wribMap　割引サービス契約データ
	 * @return Object[] サービス課金終了年月日
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private Object[] chkChrgEndYmd(String wribTypeCd, String svcChrgStaYmd, JBSbatServiceInterfaceMap svcMap, JBSbatServiceInterfaceMap wribMap) throws Exception
	{
		// 作業領域の初期化
		String APLY_CNT_HAMBET_CD_NONE = "1";	// 適用数判別コード 制限なし
		String APLY_CNT_HAMBET_CD_COUNT = "2";	// 適用数判別コード 回数
		String APLY_CNT_HAMBET_CD_MONTH = "3";	// 適用数判別コード 月数−１の月末
		String APLY_CNT_HAMBET_CD_DAY = "4";	// 適用数判別コード 日数
		String strCalcDay = "";

		strErrorMessage = "";
		String resultBfSvcChrgEndYmd = "";
		String resultSvcChrgEndYmd = "";
		String resultSvcDslYmdHand = "";
		String aplyCntHambetCd = repNullToEmpty(wribMap.getString(JBSbatKVIFM027.APLY_CNT_HAMBET_CD));
		int aplyCnt = Integer.parseInt(repNullToZero(wribMap.getString(JBSbatKVIFM027.APLY_CNT)));
		
		super.logPrint.printDebugLog("−−−−−サービス課金終了日算出開始−−−−−");
		super.logPrint.printDebugLog("適用数判別コード[" + aplyCntHambetCd + "]、適用数｢" + aplyCnt + "]");
		// 適用数判別コードにより処理分岐
		// 何もしない
		if (aplyCntHambetCd.equals(APLY_CNT_HAMBET_CD_NONE))
		{
			resultBfSvcChrgEndYmd = "20991231";
		}
		
		// 回数
		else if (aplyCntHambetCd.equals(APLY_CNT_HAMBET_CD_COUNT))
		{
			resultBfSvcChrgEndYmd = "20991231";
		}
		
		// 月数
		else if (aplyCntHambetCd.equals(APLY_CNT_HAMBET_CD_MONTH))
		{
			strCalcDay = JBSbatDateUtil.adjustMonth(svcChrgStaYmd , aplyCnt - 1);
			
			if (strCalcDay.equals(""))
			{
				resultBfSvcChrgEndYmd = "";
			}
			else
			{
				resultBfSvcChrgEndYmd = strCalcDay.substring(0 , 6) + 
				  JBSbatDateUtil.getEndOfMonth(strCalcDay.substring(0 , 6));
			}
		}
		
		// 日数
		else if (aplyCntHambetCd.equals(APLY_CNT_HAMBET_CD_DAY))
		{
			resultBfSvcChrgEndYmd = JBSbatDateUtil.adjustDate(svcChrgStaYmd , aplyCnt);
		}
		else
		{
			resultBfSvcChrgEndYmd = svcChrgStaYmd;
		}
		
		// サービス課金終了日の設定
		resultSvcChrgEndYmd = resultBfSvcChrgEndYmd;
		
		// 2013/09/09 mod start
		// 割引が解約されている場合
		if (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_SVC_KEI_STAT)).equals(JKKStrConst.CD00055_DSLZM)){
			
			
			if (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.WRIB_DSL_CNCL_OPTY_CD)).equals(JKKStrConst.CD00874_AUTO_SET))
			{
				
				// 契約解約による割引/CPの解除の場合
				if ((repNullToEmpty(svcMap.getString(JBSbatKVIFM016.SVC_KEI_STAT)).equals(JKKStrConst.CD00037_DSL_ZM)))
				{
					// サービス課金終了日の設定
					resultSvcChrgEndYmd = repNullToEmpty(svcMap.getString(JBSbatKVIFM016.SVC_CHRG_ENDYMD));
					
					//サービス課金終了日のチェック
					if (!resultSvcChrgEndYmd.equals(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_CHRG_ENDYMD))))
					{
						strErrorMessage = this.strConcatenate(strErrorMessage, MSG_CHECK_RESULT_01.replace("%1%", "サービス課金終了年月日"));
					}

					//プラン課金終了日のチェック
					if (!resultSvcChrgEndYmd.equals(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.PLAN_CHRG_ENDYMD))))
					{
						strErrorMessage = this.strConcatenate(strErrorMessage, MSG_CHECK_RESULT_01.replace("%1%", "プラン課金終了年月日"));
					}
				}
				else //割引の異動に伴う割引/CPの解除の場合
				{
					// 解約月の月末
					resultSvcChrgEndYmd = repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)).substring(0 , 6) +
										  JBSbatDateUtil.getEndOfMonth(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)).substring(0 , 6));
					
					//サービス課金終了日のチェック
					if (!resultSvcChrgEndYmd.equals(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_CHRG_ENDYMD))))
					{
						strErrorMessage = this.strConcatenate(strErrorMessage, MSG_CHECK_RESULT_04.replace("%1%", "サービス課金終了年月日").replace("%2%", resultSvcChrgEndYmd));
					}

					//プラン課金終了日のチェック
					if (!resultSvcChrgEndYmd.equals(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.PLAN_CHRG_ENDYMD))))
					{
						strErrorMessage = this.strConcatenate(strErrorMessage, MSG_CHECK_RESULT_04.replace("%1%", "プラン課金終了年月日").replace("%2%", resultSvcChrgEndYmd));
					}
				}
			}
			else
			{
			// 割引/CPの手動解除の場合、割引タイプコード・キャンペーン開始コードよりサービス課金終了日を再計算
				// 2013/09/09 mod end
				// 50:キャンペーン割引(51:面開発) かつ 59:ハイブリッド割
				if ((wribTypeCd.equals(JKKStrConst.WARIB_TYPE_CMP) || wribTypeCd.equals(JKKStrConst.WARIB_TYPE_MENKAIHAT)) &&
					(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.CAMPAIGN_STA_CD)).equals(CD00266_59)))
				{
					resultSvcDslYmdHand = repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD));
					
					// 解約月の月末
					if (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)).equals(""))
					{
						resultSvcChrgEndYmd = "";
					}
					else
					{
						resultSvcChrgEndYmd = repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)).substring(0 , 6) +
											  JBSbatDateUtil.getEndOfMonth(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)).substring(0 , 6));
					}
				}

				// 50:キャンペーン割引(51:面開発)
				else if (wribTypeCd.equals(JKKStrConst.WARIB_TYPE_CMP) || wribTypeCd.equals(JKKStrConst.WARIB_TYPE_MENKAIHAT))
				{
					resultSvcDslYmdHand = repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD));
					
					if (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)).equals(""))
					{
						resultSvcChrgEndYmd = "";
					}
					else
					{
						// サービス解約年月日≦料金計算日の場合は、解約月の前々月末日
						if (repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)).compareTo(strPrcYmd) <= 0)
						{
							strCalcDay = JBSbatDateUtil.adjustMonth(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)) , -2);
							resultSvcChrgEndYmd = strCalcDay.substring(0 , 6) + JBSbatDateUtil.getEndOfMonth(strCalcDay.substring(0 , 6));
						}
						else
						// サービス解約年月日＞料金計算日の場合は、解約月の前月末日
						{
							strCalcDay = JBSbatDateUtil.adjustMonth(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)) , -1);
							resultSvcChrgEndYmd = strCalcDay.substring(0 , 6) + JBSbatDateUtil.getEndOfMonth(strCalcDay.substring(0 , 6));
						}
					}
				}

				// 30:長期利用割引
				else if (wribTypeCd.equals(JKKStrConst.WRIB_TYPE_CHOKI_USE_WRIB))
				{
					resultSvcDslYmdHand = repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD));
					
					// 解約月の月末
					if (!repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)).equals(""))
					{
						resultSvcChrgEndYmd = repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)).substring(0 , 6) +
											  JBSbatDateUtil.getEndOfMonth(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)).substring(0 , 6));
					}
				}

				// 31:即割
				else if (wribTypeCd.equals(JKKStrConst.WRIB_TYPE_SOKU_WRIB))
				{
					resultSvcDslYmdHand = repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD));
					
					// 解約月の月末
					if (!repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)).equals(""))
					{
						resultSvcChrgEndYmd = repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)).substring(0 , 6) +
											  JBSbatDateUtil.getEndOfMonth(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)).substring(0 , 6));
					}
				}

				// 32:長期継続利用割引
				else if (wribTypeCd.equals(JKKStrConst.WRIB_TYPE_CHOKI_KEIZK_USE_WRIB))
				{
					resultSvcDslYmdHand = repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD));
					
					// 解約月の月末
					if (!repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)).equals(""))
					{
						resultSvcChrgEndYmd = repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)).substring(0 , 6) +
											  JBSbatDateUtil.getEndOfMonth(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)).substring(0 , 6));
					}
				}

				// 10:セット割
				else if (wribTypeCd.equals(JKKStrConst.WRIB_TYPE_SET_WRIB))
				{
					resultSvcDslYmdHand = repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD));
					
					// 解約月の月末
					if (!repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)).equals(""))
					{
						resultSvcChrgEndYmd = repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)).substring(0 , 6) +
											  JBSbatDateUtil.getEndOfMonth(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)).substring(0 , 6));
					}
				}

				// 42:割賦契約割引
				else if (wribTypeCd.equals(WARIB_TYPE_KAP))
				{
					resultSvcDslYmdHand = repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD));
					
					// 解約月の月末
					if (!repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)).equals(""))
					{
						resultSvcChrgEndYmd = repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)).substring(0 , 6) +
											  JBSbatDateUtil.getEndOfMonth(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)).substring(0 , 6));
					}
				}
				
				// 20:ファミリーパック
				else if (wribTypeCd.equals(WARIB_TYPE_FAMILY))
				{
					resultSvcDslYmdHand = repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD));
					
					// 解約月の月末
					if (!repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)).equals(""))
					{
						resultSvcChrgEndYmd = repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)).substring(0 , 6) +
											  JBSbatDateUtil.getEndOfMonth(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_DSL_YMD)).substring(0 , 6));
					}
				}

				//サービス課金終了日のチェック
				if (!resultSvcChrgEndYmd.equals(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.SVC_CHRG_ENDYMD))))
				{
					strErrorMessage = this.strConcatenate(strErrorMessage, MSG_CHECK_RESULT_02.replace("%1%", "サービス課金終了年月日").replace("%2%", resultSvcChrgEndYmd));
				}
				
				//プラン課金終了日のチェック
				if (!resultSvcChrgEndYmd.equals(repNullToEmpty(wribMap.getString(JBSbatKVIFM027.PLAN_CHRG_ENDYMD))))
				{
					strErrorMessage = this.strConcatenate(strErrorMessage, MSG_CHECK_RESULT_02.replace("%1%", "プラン課金終了年月日").replace("%2%", resultSvcChrgEndYmd));
				}
			}
		}
		
		super.logPrint.printDebugLog("再算出後のサービス課金終了日[" + resultSvcChrgEndYmd + "]");
		super.logPrint.printDebugLog("−−−−−サービス課金終了日算出終了−−−−−");
		Object[] result = {resultBfSvcChrgEndYmd , resultSvcChrgEndYmd , resultSvcDslYmdHand};
		return result;
	}

	/**
	 * 検証結果ファイル（ヘッダ）を編集します。
	 * 
	 * @param outputInItem 出力ファイル
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void editOutputHeaderItem(JBSbatOutputItem outputInItem) throws Exception
	{
		// ヘッダ項目の変数を指定する
		String COLUMN_01 = "サービス契約番号";
		String COLUMN_02 = "料金コースコード";
		String COLUMN_03 = "料金コース名";
		String COLUMN_04 = "料金プランコード";
		String COLUMN_05 = "料金プラン名";
		String COLUMN_06 = "課金先番号";
		String COLUMN_07 = "請求契約番号";
		String COLUMN_08 = "サービス契約回線内訳番号";
		String COLUMN_09 = "プラン開始年月日(サービス)";
		String COLUMN_10 = "プラン終了年月日(サービス)";
		String COLUMN_11 = "プラン課金開始年月日(サービス)";
		String COLUMN_12 = "プラン課金終了年月日(サービス)";
		String COLUMN_13 = "サービスキャンセル年月日(サービス)";
		String COLUMN_14 = "サービス開始年月日(サービス)";
		String COLUMN_15 = "サービス課金開始年月日(サービス)";
		String COLUMN_16 = "サービス休止年月日(サービス)";
		String COLUMN_17 = "サービス休止解除年月日(サービス)";
		String COLUMN_18 = "サービス終了年月日(サービス)";
		String COLUMN_19 = "サービス課金終了年月日(サービス)";
		String COLUMN_20 = "サービス解約起算年月日(サービス)";
		String COLUMN_21 = "サービス解約年月日(サービス)";
		String COLUMN_22 = "回復年月日(サービス)";
		String COLUMN_23 = "サービスキャンセル取消年月日(サービス)";
		String COLUMN_24 = "サービス解約取消年月日(サービス)";
		String COLUMN_25 = "割引サービス契約番号";
		String COLUMN_26 = "割引サービス契約ステータス";
		String COLUMN_27 = "割引サービス契約ステータス名称";
		String COLUMN_28 = "SYSID";
		String COLUMN_29 = "割引サービスコード";
		String COLUMN_30 = "表示用キャンペーンコード";
		String COLUMN_31 = "割引サービス名";
		String COLUMN_32 = "プラン開始年月日（割引）";
		String COLUMN_33 = "プラン終了年月日（割引）";
		String COLUMN_34 = "プラン課金開始年月日（割引）";
		String COLUMN_35 = "プラン課金終了年月日（割引）";
		String COLUMN_36 = "プラン終了種別コード";
		String COLUMN_37 = "サービスキャンセル年月日（割引）";
		String COLUMN_38 = "サービスキャンセル理由コード";
		String COLUMN_39 = "サービス開始年月日（割引）";
		String COLUMN_40 = "サービス課金開始年月日（割引）";
		String COLUMN_41 = "サービス終了年月日（割引）";
		String COLUMN_42 = "サービス課金終了年月日（割引）";
		String COLUMN_43 = "サービス解約年月日（割引）";
		String COLUMN_44 = "回復年月日（割引）";
		String COLUMN_45 = "サービスキャンセル取消年月日（割引）";
		String COLUMN_46 = "サービス解約取消年月日（割引）";
		String COLUMN_47 = "紹介コード";
		String COLUMN_48 = "申込起算年月日";
		String COLUMN_49 = "割引登録契機コード";
		String COLUMN_50 = "割引解約キャンセル契機コード";
		String COLUMN_51 = "割引額算出基準年月日";
		String COLUMN_52 = "割引課金開始月指定コード";
		String COLUMN_53 = "割引登録年月日";
		String COLUMN_54 = "割引サービス契約内訳番号";
		String COLUMN_55 = "割引サービス契約内訳ステータス";
		String COLUMN_56 = "割引サービス契約内訳ステータス名称";
		String COLUMN_57 = "割引サービス詳細コード";
		String COLUMN_58 = "割引適用回数";
		String COLUMN_59 = "サービス課金開始年月日";
		String COLUMN_60 = "サービス課金終了年月日";
		String COLUMN_61 = "初回割引適用年月日";
		String COLUMN_62 = "キャンペーン開始コード";
		String COLUMN_63 = "キャンペーン開始コード名称";
		String COLUMN_64 = "開始調整コード";
		String COLUMN_65 = "開始調整コード名称";
		String COLUMN_66 = "開始調整期間";
		String COLUMN_67 = "キャンペーン終了コード";
		String COLUMN_68 = "適用数判別コード";
		String COLUMN_69 = "適用数判別コード名称";
		String COLUMN_70 = "適用数";
		String COLUMN_71 = "サービス課金終了年月日設定パターンコード";
		String COLUMN_72 = "サービス課金終了年月日設定パターンコード名称";
		String COLUMN_73 = "検証結果";
		
		// 入出力インタフェースオブジェクトを生成
		JBSbatServiceInterfaceMap out_map = new JBSbatServiceInterfaceMap();
		
		// 出力項目を設定する
		out_map.setString(JBSbatKVIFM028.SVC_KEI_NO, 					COLUMN_01);	//サービス契約番号
		out_map.setString(JBSbatKVIFM028.PCRS_CD, 						COLUMN_02);	//料金コースコード
		out_map.setString(JBSbatKVIFM028.PCRS_CD_NM, 					COLUMN_03);	//料金コース名
		out_map.setString(JBSbatKVIFM028.PPLAN_CD, 						COLUMN_04);	//料金プランコード
		out_map.setString(JBSbatKVIFM028.PPLAN_CD_NM, 					COLUMN_05);	//料金プラン名
		out_map.setString(JBSbatKVIFM028.KAKINS_NO, 					COLUMN_06);	//課金先番号
		out_map.setString(JBSbatKVIFM028.SEIKY_KEI_NO, 					COLUMN_07);	//請求契約番号
		out_map.setString(JBSbatKVIFM028.SVC_KEI_KAISEN_UCWK_NO, 		COLUMN_08);	//サービス契約回線内訳番号
		out_map.setString(JBSbatKVIFM028.PLAN_STAYMD_SVC, 				COLUMN_09);	//プラン開始年月日(サービス)
		out_map.setString(JBSbatKVIFM028.PLAN_ENDYMD_SVC, 				COLUMN_10);	//プラン終了年月日(サービス)
		out_map.setString(JBSbatKVIFM028.PLAN_CHRG_STAYMD_SVC, 			COLUMN_11);	//プラン課金開始年月日(サービス)
		out_map.setString(JBSbatKVIFM028.PLAN_CHRG_ENDYMD_SVC, 			COLUMN_12);	//プラン課金終了年月日(サービス)
		out_map.setString(JBSbatKVIFM028.SVC_CANCEL_YMD_SVC, 			COLUMN_13);	//サービスキャンセル年月日(サービス)
		out_map.setString(JBSbatKVIFM028.SVC_STA_YMD_SVC, 				COLUMN_14);	//サービス開始年月日(サービス)
		out_map.setString(JBSbatKVIFM028.SVC_CHRG_STAYMD_SVC, 			COLUMN_15);	//サービス課金開始年月日(サービス)
		out_map.setString(JBSbatKVIFM028.SVC_PAUSE_YMD_SVC, 			COLUMN_16);	//サービス休止年月日(サービス)
		out_map.setString(JBSbatKVIFM028.SVC_PAUSE_RLS_YMD_SVC, 		COLUMN_17);	//サービス休止解除年月日(サービス)
		out_map.setString(JBSbatKVIFM028.SVC_ENDYMD_SVC, 				COLUMN_18);	//サービス終了年月日(サービス)
		out_map.setString(JBSbatKVIFM028.SVC_CHRG_ENDYMD_SVC, 			COLUMN_19);	//サービス課金終了年月日(サービス)
		out_map.setString(JBSbatKVIFM028.SVC_DSL_KISAN_YMD_SVC, 		COLUMN_20);	//サービス解約起算年月日(サービス)
		out_map.setString(JBSbatKVIFM028.SVC_DSL_YMD_SVC, 				COLUMN_21);	//サービス解約年月日(サービス)
		out_map.setString(JBSbatKVIFM028.KAIHK_YMD_SVC, 				COLUMN_22);	//回復年月日(サービス)
		out_map.setString(JBSbatKVIFM028.SVC_CANCEL_CL_YMD_SVC, 		COLUMN_23);	//サービスキャンセル取消年月日(サービス)
		out_map.setString(JBSbatKVIFM028.SVC_DSL_CL_YMD_SVC, 			COLUMN_24);	//サービス解約取消年月日(サービス)
		out_map.setString(JBSbatKVIFM028.WRIB_SVC_KEI_NO, 				COLUMN_25);	//割引サービス契約番号
		out_map.setString(JBSbatKVIFM028.WRIB_SVC_KEI_STAT, 			COLUMN_26);	//割引サービス契約ステータス
		out_map.setString(JBSbatKVIFM028.WRIB_SVC_KEI_STAT_NM, 			COLUMN_27);	//割引サービス契約ステータス名称
		out_map.setString(JBSbatKVIFM028.SYSID, 						COLUMN_28);	//SYSID
		out_map.setString(JBSbatKVIFM028.WRIB_SVC_CD, 					COLUMN_29);	//割引サービスコード
		out_map.setString(JBSbatKVIFM028.DSP_CAMPAIGN_CD, 				COLUMN_30);	//表示用キャンペーンコード
		out_map.setString(JBSbatKVIFM028.WRIB_SVC_NM, 					COLUMN_31);	//割引サービス名
		out_map.setString(JBSbatKVIFM028.PLAN_STAYMD_WRIB, 				COLUMN_32);	//プラン開始年月日（割引）
		out_map.setString(JBSbatKVIFM028.PLAN_ENDYMD_WRIB, 				COLUMN_33);	//プラン終了年月日（割引）
		out_map.setString(JBSbatKVIFM028.PLAN_CHRG_STAYMD_WRIB, 		COLUMN_34);	//プラン課金開始年月日（割引）
		out_map.setString(JBSbatKVIFM028.PLAN_CHRG_ENDYMD_WRIB, 		COLUMN_35);	//プラン課金終了年月日（割引）
		out_map.setString(JBSbatKVIFM028.PLAN_END_SBT_CD, 				COLUMN_36);	//プラン終了種別コード
		out_map.setString(JBSbatKVIFM028.SVC_CANCEL_YMD_WRIB, 			COLUMN_37);	//サービスキャンセル年月日（割引）
		out_map.setString(JBSbatKVIFM028.SVC_CANCEL_RSN_CD, 			COLUMN_38);	//サービスキャンセル理由コード
		out_map.setString(JBSbatKVIFM028.SVC_STA_YMD_WRIB, 				COLUMN_39);	//サービス開始年月日（割引）
		out_map.setString(JBSbatKVIFM028.SVC_CHRG_STAYMD_WRIB, 			COLUMN_40);	//サービス課金開始年月日（割引）
		out_map.setString(JBSbatKVIFM028.SVC_ENDYMD_WRIB, 				COLUMN_41);	//サービス終了年月日（割引）
		out_map.setString(JBSbatKVIFM028.SVC_CHRG_ENDYMD_WRIB, 			COLUMN_42);	//サービス課金終了年月日（割引）
		out_map.setString(JBSbatKVIFM028.SVC_DSL_YMD_WRIB, 				COLUMN_43);	//サービス解約年月日（割引）
		out_map.setString(JBSbatKVIFM028.KAIHK_YMD_WRIB, 				COLUMN_44);	//回復年月日（割引）
		out_map.setString(JBSbatKVIFM028.SVC_CANCEL_CL_YMD_WRIB, 		COLUMN_45);	//サービスキャンセル取消年月日（割引）
		out_map.setString(JBSbatKVIFM028.SVC_DSL_CL_YMD_WRIB, 			COLUMN_46);	//サービス解約取消年月日（割引）
		out_map.setString(JBSbatKVIFM028.INTR_CD, 						COLUMN_47);	//紹介コード
		out_map.setString(JBSbatKVIFM028.MSKM_KISAN_YMD, 				COLUMN_48);	//申込起算年月日
		out_map.setString(JBSbatKVIFM028.WRIB_ADD_OPTY_CD, 				COLUMN_49);	//割引登録契機コード
		out_map.setString(JBSbatKVIFM028.WRIB_DSL_CNCL_OPTY_CD, 		COLUMN_50);	//割引解約キャンセル契機コード
		out_map.setString(JBSbatKVIFM028.WRIB_AMNT_SNST_STDARDYMD, 		COLUMN_51);	//割引額算出基準年月日
		out_map.setString(JBSbatKVIFM028.WRIB_CHRG_STA_MON_STI_CD, 		COLUMN_52);	//割引課金開始月指定コード
		out_map.setString(JBSbatKVIFM028.WRIB_ADD_YMD, 					COLUMN_53);	//割引登録年月日
		out_map.setString(JBSbatKVIFM028.WRIB_SVC_KEI_UCWK_NO, 			COLUMN_54);	//割引サービス契約内訳番号
		out_map.setString(JBSbatKVIFM028.WRIB_SVC_KEI_UCWK_STAT, 		COLUMN_55);	//割引サービス契約内訳ステータス
		out_map.setString(JBSbatKVIFM028.WRIB_SVC_KEI_UCWK_STAT_NM, 	COLUMN_56);	//割引サービス契約内訳ステータス名称
		out_map.setString(JBSbatKVIFM028.WRIB_SVC_DTL_CD_UCWK, 			COLUMN_57);	//割引サービス詳細コード
		out_map.setString(JBSbatKVIFM028.WRIB_APLY_CNT, 				COLUMN_58);	//割引適用回数
		out_map.setString(JBSbatKVIFM028.SVC_CHRG_STAYMD, 				COLUMN_59);	//サービス課金開始年月日
		out_map.setString(JBSbatKVIFM028.SVC_CHRG_ENDYMD, 				COLUMN_60);	//サービス課金終了年月日
		out_map.setString(JBSbatKVIFM028.FIRST_WRIB_APLY_YMD, 			COLUMN_61);	//初回割引適用年月日
		out_map.setString(JBSbatKVIFM028.CAMPAIGN_STA_CD, 				COLUMN_62);	//キャンペーン開始コード
		out_map.setString(JBSbatKVIFM028.CAMPAIGN_STA_CD_NM, 			COLUMN_63);	//キャンペーン開始コード名称
		out_map.setString(JBSbatKVIFM028.STA_ADJ_CD, 					COLUMN_64);	//開始調整コード
		out_map.setString(JBSbatKVIFM028.STA_ADJ_CD_NM, 				COLUMN_65);	//開始調整コード名称
		out_map.setString(JBSbatKVIFM028.STA_ADJ_PRD, 					COLUMN_66);	//開始調整期間
		out_map.setString(JBSbatKVIFM028.CAMPAIGN_END_CD, 				COLUMN_67);	//キャンペーン終了コード
		out_map.setString(JBSbatKVIFM028.APLY_CNT_HAMBET_CD, 			COLUMN_68);	//適用数判別コード
		out_map.setString(JBSbatKVIFM028.APLY_CNT_HAMBET_CD_NM, 		COLUMN_69);	//適用数判別コード名称
		out_map.setString(JBSbatKVIFM028.APLY_CNT, 						COLUMN_70);	//適用数
		out_map.setString(JBSbatKVIFM028.SVC_CHRG_ENDYMD_SETPTN_CD, 	COLUMN_71);	//サービス課金終了年月日設定パターンコード
		out_map.setString(JBSbatKVIFM028.SVC_CHRG_ENDYMD_SETPTN_CD_NM, 	COLUMN_72);	//サービス課金終了年月日設定パターンコード名称
		out_map.setString(JBSbatKVIFM028.CHECK_RESULT, 					COLUMN_73);	//検証結果
		
		//出力フラグを設定
		out_map.setOutFlg(true);
		
		//出力共通電文に入出力インターフェースを設定する。
		outputInItem.addOutMapList(out_map);
	}
	
	/**
	 * 検証結果ファイル（ヘッダ）を編集します。
	 * 
	 * @param outputInItem 出力ファイル
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void editOutputHeaderItem2(JBSbatOutputItem outputInItem) throws Exception
	{
		// ヘッダ項目の変数を指定する
		String COLUMN_01 = "サービス契約番号";
		String COLUMN_02 = "割引サービス契約番号";
		String COLUMN_03 = "割引サービス契約ステータス";
		String COLUMN_04 = "割引サービス契約ステータス名称";
		String COLUMN_05 = "割引サービス契約内訳ステータス";
		String COLUMN_06 = "割引サービス契約内訳ステータス名称";
		String COLUMN_07 = "割引サービス詳細コード";
		String COLUMN_08 = "ＳＹＳＩＤ";
		String COLUMN_09 = "割引サービスコード";
		String COLUMN_10 = "割引タイプコード";
		String COLUMN_11 = "キャンペーン開始コード";
		String COLUMN_12 = "キャンペーン開始コード名称";
		String COLUMN_13 = "開始調整コード";
		String COLUMN_14 = "開始調整コード名称";
		String COLUMN_15 = "開始調整期間";
		String COLUMN_16 = "サービス開始年月日（再算出後）";
		String COLUMN_17 = "サービス課金開始年月日（再算出後）";
		String COLUMN_18 = "割引適用基準日";
		String COLUMN_19 = "割引登録年月日";
		String COLUMN_20 = "料金計算日";
		String COLUMN_21 = "サービス開始年月日";
		String COLUMN_22 = "サービス課金開始年月日";
		String COLUMN_23 = "プラン開始年月日";
		String COLUMN_24 = "プラン課金開始年月日";
		String COLUMN_25 = "割引解約キャンセル契機コード";
		String COLUMN_26 = "サービス課金終了年月日（再算出前）";
		String COLUMN_27 = "適用数判別コード";
		String COLUMN_28 = "適用数判別コード名称";
		String COLUMN_29 = "適用数";
		String COLUMN_30 = "サービス課金終了年月日（再算出後）";
		String COLUMN_31 = "解約年月日（手動解除）";
		String COLUMN_32 = "サービス課金終了年月日";
		String COLUMN_33 = "プラン課金終了年月日";
		
		// 入出力インタフェースオブジェクトを生成
		JBSbatServiceInterfaceMap out_map = new JBSbatServiceInterfaceMap();
		
		// 出力項目を設定する
		out_map.setString(JBSbatKVIFM030.SVC_KEI_NO						 , COLUMN_01);	// サービス契約番号
		out_map.setString(JBSbatKVIFM030.WRIB_SVC_KEI_NO				 , COLUMN_02);	// 割引サービス契約番号
		out_map.setString(JBSbatKVIFM030.WRIB_SVC_KEI_STAT				 , COLUMN_03);	// 割引サービス契約ステータス
		out_map.setString(JBSbatKVIFM030.WRIB_SVC_KEI_STAT_NM			 , COLUMN_04);	// 割引サービス契約ステータス名称
		out_map.setString(JBSbatKVIFM030.WRIB_SVC_KEI_UCWK_STAT			 , COLUMN_05);	// 割引サービス契約内訳ステータス
		out_map.setString(JBSbatKVIFM030.WRIB_SVC_KEI_UCWK_STAT_NM		 , COLUMN_06);	// 割引サービス契約内訳ステータス名称
		out_map.setString(JBSbatKVIFM030.WRIB_SVC_DTL_CD				 , COLUMN_07);	// 割引サービス詳細コード
		out_map.setString(JBSbatKVIFM030.SYSID							 , COLUMN_08);	// ＳＹＳＩＤ
		out_map.setString(JBSbatKVIFM030.WRIB_SVC_CD					 , COLUMN_09);	// 割引サービスコード
		out_map.setString(JBSbatKVIFM030.WRIB_TYPE_CD					 , COLUMN_10);	// 割引タイプコード
		out_map.setString(JBSbatKVIFM030.CAMPAIGN_STA_CD				 , COLUMN_11);	// キャンペーン開始コード
		out_map.setString(JBSbatKVIFM030.CAMPAIGN_STA_CD_NM				 , COLUMN_12);	// キャンペーン開始コード名称
		out_map.setString(JBSbatKVIFM030.STA_ADJ_CD						 , COLUMN_13);	// 開始調整コード
		out_map.setString(JBSbatKVIFM030.STA_ADJ_CD_NM					 , COLUMN_14);	// 開始調整コード名称
		out_map.setString(JBSbatKVIFM030.STA_ADJ_PRD					 , COLUMN_15);	// 開始調整期間
		out_map.setString(JBSbatKVIFM030.SVC_STA_YMD_RECALC				 , COLUMN_16);	// サービス開始年月日（再算出後）
		out_map.setString(JBSbatKVIFM030.SVC_CHRG_STAYMD_RECALC			 , COLUMN_17);	// サービス課金開始年月日（再算出後）
		out_map.setString(JBSbatKVIFM030.WRIB_APLY_YMD					 , COLUMN_18);	// 割引適用基準日
		out_map.setString(JBSbatKVIFM030.WRIB_ADD_YMD					 , COLUMN_19);	// 割引登録年月日
		out_map.setString(JBSbatKVIFM030.PRC_YMD						 , COLUMN_20);	// 料金計算日
		out_map.setString(JBSbatKVIFM030.SVC_STA_YMD					 , COLUMN_21);	// サービス開始年月日
		out_map.setString(JBSbatKVIFM030.SVC_CHRG_STAYMD				 , COLUMN_22);	// サービス課金開始年月日
		out_map.setString(JBSbatKVIFM030.PLAN_STAYMD					 , COLUMN_23);	// プラン開始年月日
		out_map.setString(JBSbatKVIFM030.PLAN_CHRG_STAYMD				 , COLUMN_24);	// プラン課金開始年月日
		out_map.setString(JBSbatKVIFM030.WRIB_DSL_CNCL_OPTY_CD			 , COLUMN_25);	// 割引解約キャンセル契機コード
		out_map.setString(JBSbatKVIFM030.SVC_CHRG_ENDYMD_BFCALC			 , COLUMN_26);	// サービス課金終了年月日（再算出前）
		out_map.setString(JBSbatKVIFM030.APLY_CNT_HAMBET_CD				 , COLUMN_27);	// 適用数判別コード
		out_map.setString(JBSbatKVIFM030.APLY_CNT_HAMBET_CD_NM			 , COLUMN_28);	// 適用数判別コード名称
		out_map.setString(JBSbatKVIFM030.APLY_CNT						 , COLUMN_29);	// 適用数
		out_map.setString(JBSbatKVIFM030.SVC_CHRG_ENDYMD_RECALC			 , COLUMN_30);	// サービス課金終了年月日（再算出後）
		out_map.setString(JBSbatKVIFM030.SVC_DSL_YMD_HAND				 , COLUMN_31);	// 解約年月日（手動解除）
		out_map.setString(JBSbatKVIFM030.SVC_CHRG_ENDYMD				 , COLUMN_32);	// サービス課金終了年月日
		out_map.setString(JBSbatKVIFM030.PLAN_CHRG_ENDYMD				 , COLUMN_33);	// プラン課金終了年月日
		
		//出力フラグを設定
		out_map.setOutFlg(true);
		
		//出力共通電文に入出力インターフェースを設定する。
		outputInItem.addOutMapList_2(out_map);
	}
}
