/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatAKPtnuwKaphukaWrbk
*	ソースファイル名	：JBSbatAKPtnuwKaphukaWrbk.java
*	作成者				：富士通　
*	作成日				：2013年03月08日
*＜機能概要＞
*　請求パターン内訳割賦割引割賦情報付加部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00.00	2013/03/08   富士通		新規作成
*********************************************************************/
package eo.business.service;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatSchdlUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatAKIFM004;
import eo.business.util.file.JBSbatAKIFM020;
import eo.business.util.table.JBSbatKK_T_KAP_KEI;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.db.JBSbatSQLAccess;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatAKPtnuwKaphukaWrbk extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(割賦契約)*/
	private static final String D_TBL_NAME_KK_T_KAP_KEI = "KK_T_KAP_KEI";

	/** SQL定義キー(AK_SELECT_003)*/
	private static final String KK_T_KAP_KEI_AK_SELECT_003 = "AK_SELECT_003";

	/** SQL定義キー(AK_SELECT_004)*/
	private static final String KK_T_KAP_KEI_AK_SELECT_004 = "AK_SELECT_004";

	/** テーブルアクセスクラス(割賦契約)*/
	private JBSbatSQLAccess db_KK_T_KAP_KEI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 退避．請求年月 */
	private String tmpSeikyYm = null;
	
	/** 月初日 */
	private String tmpMonStaDay 	= null;

	/** 月末日 */
	private String tmpMonEndDay 	= null;
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_KAP_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KAP_KEI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		// 料金スケジュール定義アクセス部品初期処理
		JACbatSchdlUtil schdlUtil 	= new JACbatSchdlUtil(commonItem);
		
		// 請求年月を取得する
		this.tmpSeikyYm = schdlUtil.getBillDate(super.opeDate, JACStrConst.EVENT_CD_RYOKIN_KEISAN_YMD);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "バッチ運用日" + super.opeDate + "から取得した請求年月：" + this.tmpSeikyYm);
		
		// 月初日、月末日を取得する
		// 月初日[0] 月末日[1]
		String[] ymd 		= schdlUtil.getUseStrEnd(this.tmpSeikyYm, JACStrConst.EVENT_CD_USE_STAYMD, JACStrConst.EVENT_CD_USE_ENDYMD);
		this.tmpMonStaDay 	= ymd[0];
		this.tmpMonEndDay 	= ymd[1];
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "月初日：" + ymd[0]);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "月末日：" + ymd[1]);

		// 料金スケジュール定義アクセス部品クローズ
		schdlUtil.close();

	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		assert inMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][inMap = " + inMap.getMap().toString() + "]") : true;


		JBSbatOutputItem outputItem = new JBSbatOutputItem();
		JBSbatCommonDBInterface dbMap = null;
		
		// 割賦契約情報取得
		dbMap = this.getKapKeiInfo(inMap);
		
		if(null == dbMap)
		{
			// 請求パターン内訳割賦契約情報の出力(割賦なし)
			setOutputItemNoKap( outputItem, inMap );
		}
		else
		{
			while(null != dbMap)
			{
				setOutputItem(outputItem, inMap, dbMap );
				// 次レコード
				dbMap = db_KK_T_KAP_KEI.selectNext();	
			}
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return outputItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_KAP_KEI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(AK_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_KAP_KEI_AK_SELECT_003(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_KAP_KEI.selectBySqlDefine(paramList, KK_T_KAP_KEI_AK_SELECT_003);
	}

	/**
	 * SQLKEY(AK_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 executeKK_T_KAP_KEI_AK_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_KK_T_KAP_KEI.selectBySqlDefine(paramList, KK_T_KAP_KEI_AK_SELECT_004);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	

	/**
	 * 割賦契約情報を取得する。
	 * 
	 * @param inMap 入力電文
	 * @param dbMap 割賦契約スキーマからの取得結果
	 * @throws Exception 業務サービス内で発生した例外処理全般 
	 */
	private JBSbatCommonDBInterface getKapKeiInfo(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getKapKeiInfo]");
		
		// DBアクセス用のパラメータ定義
		JBSbatCommonDBInterface dbMap = null;
		
		String kktkSvcKeiNo = inMap.getString(JBSbatAKIFM004.KKTK_SVC_KEI_NO);		// 機器提供サービス契約番号
		String opSvcKeiNo   = inMap.getString(JBSbatAKIFM004.OP_SVC_KEI_NO);		// オプションサービス契約番号
		
		
		// 機器提供サービス契約番号が存在する場合
		if( ( null!= kktkSvcKeiNo) && !JACStrConst.KARA_MOJI.equals(kktkSvcKeiNo.trim()))
		{
			dbMap = getKapKeiInfoForKKTK(inMap);
		}
		
		// オプションサービス契約番号が存在する場合
		if( (null != opSvcKeiNo)  && !JACStrConst.KARA_MOJI.equals(opSvcKeiNo.trim()))
		{
			dbMap = getKapKeiInfoForOP(inMap);
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getKapKeiInfo]");
		
		return dbMap;
	}
	

	
	/**
	 * 機器提供サービス契約に紐づく割賦契約情報を取得する。
	 * 
	 * @param inMap 入力電文
	 * @return dbMap 割賦契約からの取得結果
	 * @throws Exception 業務サービス内で発生した例外処理全般 
	 */
	private JBSbatCommonDBInterface getKapKeiInfoForKKTK(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getKapKeiInfoForKKTK]");
		
		String kktkSvcKeiNo = inMap.getString(JBSbatAKIFM004.KKTK_SVC_KEI_NO);	// 機器提供サービス契約番号
		
		// 割賦契約検索呼出
		JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();	
		dbList.setValue(super.opeDate);				// 運用日
		dbList.setValue(kktkSvcKeiNo);				// 入力.機器提供サービス契約番号
		
		this.executeKK_T_KAP_KEI_AK_SELECT_003(dbList.getList().toArray());
		
		// 結果取得
		JBSbatCommonDBInterface dbMap = db_KK_T_KAP_KEI.selectNext();

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getKapKeiInfoForKKTK]");

		return dbMap;

	}
	
	/**
	 * オプションサービス契約に紐づく割賦契約情報を取得する。
	 * 
	 * @param inMap 入力電文
	 * @return dbMap 割賦契約からの取得結果
	 * @throws Exception 業務サービス内で発生した例外処理全般 
	 */
	private JBSbatCommonDBInterface getKapKeiInfoForOP(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getKapKeiInfoForOP]");
		
		String svcChrgStaYmd   = inMap.getString(JBSbatAKIFM004.SVC_CHRG_STAYMD);	// サービス課金開始日
		String svcKeiNo   = inMap.getString(JBSbatAKIFM004.SVC_KEI_NO);				// サービス契約番号
		String pcrsCd   = inMap.getString(JBSbatAKIFM004.PCRS_CD);					// 料金コースコード
		
		
		JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();
		
		// 割賦契約検索呼出
		dbList.setValue(super.opeDate);				// 運用日
		dbList.setValue(super.opeDate);				// 運用日
		dbList.setValue(super.opeDate);				// 運用日
		dbList.setValue(svcChrgStaYmd);					// 入力．サービス課金開始日
		dbList.setValue(svcKeiNo);					// 入力．サービス契約番号
		dbList.setValue(pcrsCd);					// 入力．料金コースコード
		
		this.executeKK_T_KAP_KEI_AK_SELECT_004(dbList.getList().toArray());
		
		// 結果取得
		JBSbatCommonDBInterface dbMap = db_KK_T_KAP_KEI.selectNext();
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getKapKeiInfoForOP]");
		
		return dbMap;
	}
	
	/**
	 * 割賦契約状態判定を行い、想定金額算出方法コードを返却します。
	 * @param inMap　入力電文
	 * @return String :想定金額算出方法コード 
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private String JdgKapKeiStat(JBSbatServiceInterfaceMap inMap, JBSbatCommonDBInterface dbMap) throws Exception
	{
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getKapKeiStatJdg]");
		
		String returnData = null;
		
		// 判定条件取得
		String kapIktSikySwchYm 	= dbMap.getString(JBSbatKK_T_KAP_KEI.KAP_IKT_SIKY_SWCH_YM);		// 割賦一括請求切替年月
		
		// 割賦一括請求切替年月がnullか空文字以外の場合、
		if((null != kapIktSikySwchYm)  && !JACStrConst.KARA_MOJI.equals(kapIktSikySwchYm.trim()))
		{
			// 請求年月 ＝ 割賦一括請求切替年月 の場合
			if( this.tmpSeikyYm.compareTo(kapIktSikySwchYm) == 0)
			{
				returnData = JACStrConst.SOTEI_AMNT_SNST_WAY_CD_KAPWI;
			}
			// 請求年月 ＞ 割賦一括請求切替年月の場合
			else if ( this.tmpSeikyYm.compareTo(kapIktSikySwchYm) > 0 )
			{
				// 割賦一括切替請求年月
				returnData = JACStrConst.PRCKNS_KEI_STAT_CD_SP;
			}
		}	
		
		// 設定されていない場合はnull
		return returnData;
	}
	
	
	/**
	 * DBからの検索情報をもとに、
	 * 検索件数分の出力レコードを作成して出力情報を設定します（割賦契約情報等が取得できなかった場合の出力用）
	 * @param outputItem　出力情報
	 * @param inMap　入力電文
	 * @param pnltyHassei 違約金発生フラグ
	 * @throws Exception　業務サービス内で発生した例外全般
	 */
	private void setOutputItemNoKap(JBSbatOutputItem outputItem, JBSbatServiceInterfaceMap inMap ) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setOutputItemNoKap]");

		// 初期化
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		// 入力電文コピー
		copyInputToOutput(inMap, outMap);
		// 出力フラグを設定します
		outMap.setOutFlg(true);
		// 出力レコード1件設定します
	
		outputItem.addOutMapList(outMap);
		
		assert outMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutputItemNoKap][outMap = " + outMap.getMap().toString() + "]") : true;
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setOutputItemNoKap]");
	
	}
	
	/**
	 * DBからの検索情報をもとに、
	 * 検索件数分の出力レコードを作成して出力情報を設定します
	 * @param outputItem　出力情報
	 * @param inMap　入力電文
	 * @param dbMap　割賦契約からの取得結果
	 * @param chrgKeizokuMthCnt 
	 * @param pnltyHassei 
	 * @throws Exception　業務サービス内で発生した例外全般
	 */
	private void setOutputItem(JBSbatOutputItem outputItem, JBSbatServiceInterfaceMap inMap , JBSbatCommonDBInterface dbMap ) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setOutputItem]");

		// 初期化
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		// 入力電文コピー
		copyInputToOutput(inMap, outMap);
		
		// 割賦契約スキーマより設定
		copykapKeiData(dbMap,outMap);
		
		// 契約状態判定による想定金額算出方法コードの設定
		String soteiAmntSnstWayCd = this.JdgKapKeiStat(inMap, dbMap);
		if(null != soteiAmntSnstWayCd) {
			// 割賦契約より取得した想定金額算出方法を設定（nullであれば入力．想定金額算出方法コードのまま）
			outMap.setString(JBSbatAKIFM020.SOTEI_AMNT_SNST_WAY_CD,		soteiAmntSnstWayCd );		// 想定金額算出方法コード
		}
		
		// 出力フラグを設定します
		outMap.setOutFlg(true);
		// 出力レコード1件設定します
		outputItem.addOutMapList(outMap);
		
		assert outMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutputItem][outMap = " + outMap.getMap().toString() + "]") : true;
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setOutputItem]");
	
	}
	
	/**
	 * 入力電文から出力電文へのコピーを行う。	
	 * @param inMap     入力電文（請求パターン内訳情報からのコピー）
	 * @param outMap    出力電文
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void copyInputToOutput(JBSbatServiceInterfaceMap inMap,  JBSbatServiceInterfaceMap outMap ) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][copyInputToOutput]");
		assert inMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeOutputInfo][inMap=" + inMap.toString() + "]") : true;
		
		// 入力電文コピー
		outMap.setString(JBSbatAKIFM020.CHST_KEI_SKB_CD,			inMap.getString(JBSbatAKIFM004.CHST_KEI_SKB_CD));			// 抽出契約識別コード
		outMap.setString(JBSbatAKIFM020.PRC_GRP_CD, 				inMap.getString(JBSbatAKIFM004.PRC_GRP_CD));				// 料金グループコード
		outMap.setString(JBSbatAKIFM020.PCRS_CD, 					inMap.getString(JBSbatAKIFM004.PCRS_CD));					// 料金コースコード
		outMap.setString(JBSbatAKIFM020.PRC_SVC_CD, 				inMap.getString(JBSbatAKIFM004.PRC_SVC_CD));				// 料金サービスコード
		outMap.setString(JBSbatAKIFM020.SYSID,						inMap.getString(JBSbatAKIFM004.SYSID));						// SYSID
		outMap.setString(JBSbatAKIFM020.SEIRI_NO, 					inMap.getString(JBSbatAKIFM004.SEIRI_NO));					// 整理番号
		outMap.setString(JBSbatAKIFM020.SEIKY_KEI_NO, 				inMap.getString(JBSbatAKIFM004.SEIKY_KEI_NO));				// 請求契約番号
		outMap.setString(JBSbatAKIFM020.SVC_KEI_NO, 				inMap.getString(JBSbatAKIFM004.SVC_KEI_NO));				// サービス契約番号
		outMap.setString(JBSbatAKIFM020.SVC_KEI_UCWK_NO, 			inMap.getString(JBSbatAKIFM004.SVC_KEI_UCWK_NO));			// サービス契約内訳番号
		outMap.setString(JBSbatAKIFM020.OP_SVC_KEI_NO,	 			inMap.getString(JBSbatAKIFM004.OP_SVC_KEI_NO));				// オプションサービス契約番号
		outMap.setString(JBSbatAKIFM020.SBOP_SVC_KEI_NO, 			inMap.getString(JBSbatAKIFM004.SBOP_SVC_KEI_NO));			// サブオプションサービス契約番号
		outMap.setString(JBSbatAKIFM020.KKTK_SVC_KEI_NO, 			inMap.getString(JBSbatAKIFM004.KKTK_SVC_KEI_NO));			// 機器提供サービス契約番号
		outMap.setString(JBSbatAKIFM020.SEIOPSVC_KEI_NO, 			inMap.getString(JBSbatAKIFM004.SEIOPSVC_KEI_NO));			// 請求オプションサービス契約番号
		outMap.setString(JBSbatAKIFM020.WRIB_SVC_KEI_NO, 			inMap.getString(JBSbatAKIFM004.WRIB_SVC_KEI_NO));			// 割引サービス契約番号
		outMap.setString(JBSbatAKIFM020.GENE_ADD_DTM,	 			inMap.getString(JBSbatAKIFM004.GENE_ADD_DTM));				// 世代登録年月日時分秒
		outMap.setString(JBSbatAKIFM020.SVC_KEI_STAT, 				inMap.getString(JBSbatAKIFM004.SVC_KEI_STAT));				// サービス契約ステータス
		outMap.setString(JBSbatAKIFM020.RSV_APLY_YMD, 				inMap.getString(JBSbatAKIFM004.RSV_APLY_YMD));				// 予約適用年月日
		outMap.setString(JBSbatAKIFM020.PLAN_STAYMD, 				inMap.getString(JBSbatAKIFM004.PLAN_STAYMD));				// プラン開始年月日
		outMap.setString(JBSbatAKIFM020.PLAN_ENDYMD, 				inMap.getString(JBSbatAKIFM004.PLAN_ENDYMD));				// プラン終了年月日
		outMap.setString(JBSbatAKIFM020.PLAN_CHRG_STAYMD, 			inMap.getString(JBSbatAKIFM004.PLAN_CHRG_STAYMD));			// プラン課金開始年月日
		outMap.setString(JBSbatAKIFM020.PLAN_CHRG_ENDYMD, 			inMap.getString(JBSbatAKIFM004.PLAN_CHRG_ENDYMD));			// プラン課金終了年月日
		outMap.setString(JBSbatAKIFM020.PLAN_END_SBT_CD, 			inMap.getString(JBSbatAKIFM004.PLAN_END_SBT_CD));			// プラン終了種別コード
		outMap.setString(JBSbatAKIFM020.SVC_CANCEL_YMD, 			inMap.getString(JBSbatAKIFM004.SVC_CANCEL_YMD));			// サービスキャンセル年月日
		outMap.setString(JBSbatAKIFM020.SVC_STA_YMD, 				inMap.getString(JBSbatAKIFM004.SVC_STA_YMD));				// サービス開始年月日
		outMap.setString(JBSbatAKIFM020.SVC_CHRG_STAYMD, 			inMap.getString(JBSbatAKIFM004.SVC_CHRG_STAYMD));			// サービス課金開始年月日
		outMap.setString(JBSbatAKIFM020.PAUSE_STP_CD, 				inMap.getString(JBSbatAKIFM004.PAUSE_STP_CD));				// 休止中断コード
		outMap.setString(JBSbatAKIFM020.SVC_PAUSE_CHRG_STA_YMD,		inMap.getString(JBSbatAKIFM004.SVC_PAUSE_CHRG_STA_YMD));	// サービス休止課金開始年月日
		outMap.setString(JBSbatAKIFM020.SVC_PAUSE_RLS_YMD, 			inMap.getString(JBSbatAKIFM004.SVC_PAUSE_RLS_YMD));			// サービス休止解除年月日
		outMap.setString(JBSbatAKIFM020.SVC_ENDYMD, 				inMap.getString(JBSbatAKIFM004.SVC_ENDYMD));				// サービス終了年月日
		outMap.setString(JBSbatAKIFM020.SVC_CHRG_ENDYMD, 			inMap.getString(JBSbatAKIFM004.SVC_CHRG_ENDYMD));			// サービス課金終了年月日
		outMap.setString(JBSbatAKIFM020.SVC_DSL_YMD, 				inMap.getString(JBSbatAKIFM004.SVC_DSL_YMD));				// サービス解約年月日
		outMap.setString(JBSbatAKIFM020.SVC_DLRE_CD, 				inMap.getString(JBSbatAKIFM004.SVC_DLRE_CD));				// サービス解約理由コード
		outMap.setString(JBSbatAKIFM020.KAIHK_YMD, 					inMap.getString(JBSbatAKIFM004.KAIHK_YMD));					// 回復年月日
		outMap.setString(JBSbatAKIFM020.PNLTY_HASSEI_CD, 			inMap.getString(JBSbatAKIFM004.PNLTY_HASSEI_CD));			// 違約金発生コード
		outMap.setString(JBSbatAKIFM020.IDO_DIV, 					inMap.getString(JBSbatAKIFM004.IDO_DIV));					// 異動区分

		outMap.setString(JBSbatAKIFM020.BMP_UM,						inMap.getString(JBSbatAKIFM004.BMP_UM));					// 番ポ有無
		outMap.setString(JBSbatAKIFM020.SEIKY_YM,					inMap.getString(JBSbatAKIFM004.SEIKY_YM));					// 請求年月
		outMap.setString(JBSbatAKIFM020.PRCKNS_KEI_STAT_CD,			inMap.getString(JBSbatAKIFM004.PRCKNS_KEI_STAT_CD));		// 料金検証契約状態コード
		outMap.setBigDecimal(JBSbatAKIFM020.CHRG_KEIZOKU_MON_CNT,	inMap.getBigDecimal(JBSbatAKIFM004.CHRG_KEIZOKU_MON_CNT));	// 課金継続月数
		outMap.setBigDecimal(JBSbatAKIFM020.KEI_CNT,				inMap.getBigDecimal(JBSbatAKIFM004.KEI_CNT));				// 契約数
		outMap.setBigDecimal(JBSbatAKIFM020.HANTEI_DANKAI_KMK_VALUE,inMap.getBigDecimal(JBSbatAKIFM004.HANTEI_DANKAI_KMK_VALUE));	// 判定用段階決定元項目値
		outMap.setString(JBSbatAKIFM020.MANSION_ID,					inMap.getString(JBSbatAKIFM004.MANSION_ID));				// マンションID
		outMap.setString(JBSbatAKIFM020.TK_HOSHIKI_KEI_NO,			inMap.getString(JBSbatAKIFM004.TK_HOSHIKI_KEI_NO));			// 提供方式契約番号
		outMap.setString(JBSbatAKIFM020.KANYU_KEI_PAY_HOSHIKI_CD,	inMap.getString(JBSbatAKIFM004.KANYU_KEI_PAY_HOSHIKI_CD));	// 加入契約支払方式コード
		outMap.setString(JBSbatAKIFM020.PAY_KEI_SKBT_CD,			inMap.getString(JBSbatAKIFM004.PAY_KEI_SKBT_CD));			// 支払契約識別コード
		outMap.setString(JBSbatAKIFM020.SEIKY_PTN_CD,				inMap.getString(JBSbatAKIFM004.SEIKY_PTN_CD));				// 請求パターンコード
		outMap.setString(JBSbatAKIFM020.UW_PRC_SVC_CD,				inMap.getString(JBSbatAKIFM004.UW_PRC_SVC_CD));				// 内訳料金サービスコード
		outMap.setString(JBSbatAKIFM020.UW_PRC_KMK_CD,				inMap.getString(JBSbatAKIFM004.UW_PRC_KMK_CD));				// 内訳料金項目コード
		outMap.setString(JBSbatAKIFM020.SONZAI_CHK_LV_CD,			inMap.getString(JBSbatAKIFM004.SONZAI_CHK_LV_CD));			// 存在チェックレベルコード
		outMap.setString(JBSbatAKIFM020.AMNT_CHK_LV_CD,				inMap.getString(JBSbatAKIFM004.AMNT_CHK_LV_CD));			// 金額チェックレベルコード
		outMap.setString(JBSbatAKIFM020.SOTEI_AMNT_SNST_WAY_CD,		inMap.getString(JBSbatAKIFM004.SOTEI_AMNT_SNST_WAY_CD));	// 想定金額算出方法コード 
		outMap.setString(JBSbatAKIFM020.DANKAI_KETEI_MOTO_KMK_DIV,	inMap.getString(JBSbatAKIFM004.DANKAI_KETEI_MOTO_KMK_DIV));	// 段階決定元項目区分
		outMap.setBigDecimal(JBSbatAKIFM020.SOTEI_AMNT,				inMap.getBigDecimal(JBSbatAKIFM004.SOTEI_AMNT));			// 想定金額

		assert outMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][copyInputToOutput][outMap = " + outMap.getMap().toString() + "]") : true;
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][copyInputToOutput]");

		return;
	}
	
	
	/**
	 * 入力電文から出力電文へのコピーを行う。	
	 * @param inMap     入力電文（請求パターン内訳情報からのコピー）
	 * @param outMap    出力電文
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void copykapKeiData(JBSbatCommonDBInterface dbMap,  JBSbatServiceInterfaceMap outMap ) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][copyInputToOutput]");
		assert dbMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][copykapKeiData][outMap=" + outMap.toString() + "]") : true;
		
		// 割賦契約スキーマの取得結果から項目をコピーする。
		outMap.setString(JBSbatAKIFM020.KKTK_SVC_KEI_NO,			dbMap.getString(JBSbatKK_T_KAP_KEI.KKTK_SVC_KEI_NO));			// 機器提供サービス契約番号 (請求パターンの取得結果を上書)
		outMap.setString(JBSbatAKIFM020.KAP_KEI_NO,		 			dbMap.getString(JBSbatKK_T_KAP_KEI.KAP_KEI_NO));				// 割賦契約番号
		outMap.setString(JBSbatAKIFM020.KAP_PLAN_CD, 				dbMap.getString(JBSbatKK_T_KAP_KEI.KAP_PLAN_CD));				// 割賦プランコード
		outMap.setString(JBSbatAKIFM020.KAP_GENE_ADD_DTM, 			dbMap.getString(JBSbatKK_T_KAP_KEI.GENE_ADD_DTM));				// (割賦契約)世代登録年月日時分秒
		outMap.setString(JBSbatAKIFM020.KAP_KEI_STAT, 				dbMap.getString(JBSbatKK_T_KAP_KEI.KAP_KEI_STAT));				// 割賦契約ステータス
		outMap.setString(JBSbatAKIFM020.KAP_RSV_APLY_YMD, 			dbMap.getString(JBSbatKK_T_KAP_KEI.RSV_APLY_YMD));				// (割賦契約)予約適用年月日
		outMap.setString(JBSbatAKIFM020.KAP_KEI_CNC_YMD, 			dbMap.getString(JBSbatKK_T_KAP_KEI.KAP_KEI_CNC_YMD));			// 割賦契約締結年月日
		outMap.setString(JBSbatAKIFM020.KAP_SEIKY_ENDYMD, 			dbMap.getString(JBSbatKK_T_KAP_KEI.KAP_SEIKY_ENDYMD));			// 割賦請求終了年月日
		outMap.setString(JBSbatAKIFM020.KAP_KEI_CHRG_STDARD_YMD,	dbMap.getString(JBSbatKK_T_KAP_KEI.KAP_KEI_CHRG_STDARD_YMD));	// 割賦契約課金基準年月日
		outMap.setString(JBSbatAKIFM020.KAP_KEI_CHRG_STAYMD,		dbMap.getString(JBSbatKK_T_KAP_KEI.KAP_KEI_CHRG_STAYMD));		// 割賦契約課金開始年月日
		outMap.setString(JBSbatAKIFM020.KAP_SEIKY_STA_YM,			dbMap.getString(JBSbatKK_T_KAP_KEI.KAP_SEIKY_STA_YM));			// 割賦請求開始年月
		outMap.setString(JBSbatAKIFM020.KAP_IKT_SIKY_SWCH_YM,		dbMap.getString(JBSbatKK_T_KAP_KEI.KAP_IKT_SIKY_SWCH_YM));		// 割賦一括請求切替年月
		outMap.setString(JBSbatAKIFM020.KAP_KEI_DSL_YMD,			dbMap.getString(JBSbatKK_T_KAP_KEI.KAP_KEI_DSL_YMD));			// 割賦契約解約年月日
		outMap.setString(JBSbatAKIFM020.KAP_PNLTY_HASSEI_CD,		dbMap.getString(JBSbatKK_T_KAP_KEI.PNLTY_HASSEI_CD));			// (割賦契約)違約金発生コード
		outMap.setString(JBSbatAKIFM020.KAP_PAY_ZAN_CNT,			dbMap.getString(JBSbatKK_T_KAP_KEI.KAP_PAY_ZAN_CNT));			// 割賦支払い残回数
		outMap.setString(JBSbatAKIFM020.KAP_SEIKY_ZUMI_CNT,			dbMap.getString(JBSbatKK_T_KAP_KEI.KAP_SEIKY_ZUMI_CNT));		// 割賦請求済回数

		assert outMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][copykapKeiData][outMap = " + outMap.getMap().toString() + "]") : true;
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][copykapKeiData]");

		return;
	}

	
	
	
}
