/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACKapPrcCalc
*	ソースファイル名	：JBSbatACKapPrcCalc.java
*	作成者				：富士通　
*	作成日				：2012年10月15日
*＜機能概要＞
*　割賦料金計算部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00.00	2012/10/15   FJ）浜口	【ANK-0546-00-00】新規作成
*	v5.00.00	2013/07/21   FJ）垣内	【TG1-2013-0000708】オプションサービス契約番号の設定内容修正
*	v5.00.01	2013/07/09   FJ) 岡田	【TG1-2013-0000662】マスタ参照基準日水平展開対応
*	v8.00.00	2013/12/13   FJ) 鈴木	【ANK-1794-00-00】L2-MVNO対応（請求書電話番号表示（LC含む））
*	v9.00.00	2014/04/25   FJ) 小掠	【ANK-2055-00-00】サービス詳細識別番号をACIFM166に追加
*********************************************************************/
package eo.business.service;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatRknBusinessUtil;
import eo.business.common.JACbatSchdlUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatACIFI016;
import eo.business.util.file.JBSbatACIFM166;
import eo.business.util.table.JBSbatAC_M_KAP_PRC;
import eo.common.constant.JACStrConst;
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;

/**
* 
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACKapPrcCalc extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(割賦料金)*/
	private static final String D_TBL_NAME_AC_M_KAP_PRC = "AC_M_KAP_PRC";

	/** SQL定義キー(AC_SELECT_001)*/
	private static final String AC_M_KAP_PRC_AC_SELECT_001 = "AC_SELECT_001";

	/** テーブルアクセスクラス(割賦料金)*/
	private JBSbatSQLAccess db_AC_M_KAP_PRC = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 割賦支払方法：１（一括支払（計算要）） */
	private static final String 	PAY_MTD_IKT_Y 	= "1";

	/** 割賦支払方法：２（一括支払） */
	private static final String 	PAY_MTD_IKT 	= "2";

	/** 割賦支払方法：３（割賦支払） */
	private static final String 	PAY_MTD_KAP 	= "3";
	
	/** 割賦対象請求月：１（初回請求月） */
	private static final String KAP_SEIKY_YM_S 	= "1";

	/** 割賦対象請求月：２（継続請求月） */
	private static final String KAP_SEIKY_YM_K 	= "2";

	/** 料金サービスコード桁数 */
	private static final int PRC_SVC_CD_LEN 		= JACStrConst.PRC_SVC_CD_LENGTH;
	
	/** 退避．料金サービス管理マップ */
	private HashMap<String, List<JBSbatCommonDBInterface>> tmpKapPrcMap = null;

	/**  退避．群月初日 */
	private String tmpCycFst = null;
	
	/**  退避．群月末日 */
	private String tmpCycEnd = null;
	
	/**
	 * 
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_AC_M_KAP_PRC = new JBSbatSQLAccess(commonItem, D_TBL_NAME_AC_M_KAP_PRC);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		// 料金スケジュール定義アクセス部品初期処理
		JACbatSchdlUtil schdlUtil = new JACbatSchdlUtil(commonItem);
		
		try
		{
			// 請求年月を取得する
			String seikyYm = schdlUtil.getBillDate(super.opeDate, JACStrConst.EVENT_CD_RYOKIN_KEISAN_YMD);
			
			// 請求年月から、利用開始終了日取得
			String[] strEndYmd = schdlUtil.getUseStrEnd(seikyYm, JACStrConst.EVENT_CD_USE_STAYMD, JACStrConst.EVENT_CD_USE_ENDYMD);
			
			this.tmpCycFst = strEndYmd[0];	// 群月初日
			this.tmpCycEnd = strEndYmd[1];	// 群月末日
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][群月初日：" + tmpCycFst + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][群月末日：" + tmpCycEnd + "]");
		}
		finally
		{
			// 料金スケジュール定義アクセス部品クローズ
			schdlUtil.close();
		}
		
		// 割賦料金マップを作成
		this.makeKapPrcMap();
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		// 割賦料金計算処理

		// 利用料金情報（割賦料金）出力用
		JBSbatOutputItem outputInItem = new JBSbatOutputItem();

		//割賦料金マスタの取得
		List<JBSbatCommonDBInterface> kapMList = getPrcInfo(inMap);
		if (kapMList == null)
		{
			// 処理を終了する
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][割賦料金マスタ対象無し]");
			return outputInItem;
		}
		// 一括／割賦判定
		String kapPayMtd = this.getKapPayMtd(inMap);
		
		// 初回／継続判定
		String kapSeikyYM = this.getKapSeikyYM(inMap);

		// 割賦料金リスト用カウンタ
		int tmpCnt = 0;
		
		// 割賦料金のリスト分、繰り返し行う。
		while(kapMList.size() > tmpCnt)
		{
			// 計算処理
			BigDecimal kapPrc = this.getKapPrc(inMap, kapPayMtd, kapSeikyYM, kapMList.get(tmpCnt));
			
			// 利用料金情報（割賦料金）の出力
			this.makeOutputInfo(inMap, kapPayMtd, kapSeikyYM, kapPrc, kapMList.get(tmpCnt), outputInItem);
			tmpCnt++;
			
		}
		
		return outputInItem;
		
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_AC_M_KAP_PRC.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(AC_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 executeAC_M_KAP_PRC_AC_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_AC_M_KAP_PRC.selectBySqlDefine(paramList, AC_M_KAP_PRC_AC_SELECT_001);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 文字を連結します
	 * @param  string 文字
	 * @return strBuf 連結した文字列
	 */
	private String makeStr(String ...string)
	{
		StringBuffer strBuf = new StringBuffer();
		for(String str:string)
		{
			if(str == null)
			{
				strBuf.append(JACStrConst.KARA_MOJI);
			}
			else
			{
				strBuf.append(str);
			}
		}
		return strBuf.toString();
	}
	
	/**
	 * 割賦料金マスタより、料金コース、料金サービス毎の料金項目情報を取得し、退避．割賦料金マップに保持する
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void makeKapPrcMap() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeKapPrcMap]");

		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
	
		// システムコード
		paramList.setValue(super.systemCode);
		// 群月末日
		paramList.setValue(this.tmpCycEnd);

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeKapPrcMap][paramList=" + paramList.getList().toString() + "]");

		// SQL実行
		executeAC_M_KAP_PRC_AC_SELECT_001(paramList.getList().toArray());
		
		JBSbatCommonDBInterface dbMap = db_AC_M_KAP_PRC.selectNext();
		
		this.tmpKapPrcMap = new HashMap<String, List<JBSbatCommonDBInterface>>();
		
		// 検索結果0件の場合
		if(null == dbMap)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeKapPrcMap]");
			return;
		}
			
		//ブレイク用Key
		String bKey = makeStr(dbMap.getString(JBSbatAC_M_KAP_PRC.PCRS_CD), dbMap.getString(JBSbatAC_M_KAP_PRC.PRC_SVC_CD));
		// 退避マップに設定するバリュー：検索結果のリスト
		ArrayList<JBSbatCommonDBInterface> kapList = new ArrayList<JBSbatCommonDBInterface>();
		// 取得出来た場合
		while(dbMap != null)
		{
			
			// KEY：料金コースコード ＋ 料金サービスコード
			String key = makeStr(dbMap.getString(JBSbatAC_M_KAP_PRC.PCRS_CD), dbMap.getString(JBSbatAC_M_KAP_PRC.PRC_SVC_CD));
		
			// キーと検索結果のキーが異なった場合
			if(!bKey.equals(key))
			{
				// 割賦料金マップにキーとバリューを設定する
				this.tmpKapPrcMap.put(bKey, kapList);
				// キーに新たな値を設定する
				bKey = key;
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeKapPrcMap]Key:" + bKey);
				// バリューをクリアー
				kapList = new ArrayList<JBSbatCommonDBInterface>();
			}
			// 取得結果より割賦料金マップを作成しリストに格納
			kapList.add(dbMap);
			
			// 検索結果キークリアー
			key = null;
			
			dbMap =  db_AC_M_KAP_PRC.selectNext();
		}
		
		// 最後の取得結果を格納
		// 割賦料金マップにキーとバリューを設定する
		this.tmpKapPrcMap.put(bKey, kapList);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeKapPrcMap]");
		return;
	}
	
	/**
	 * 割賦料金マップを検索し、料金項目情報を取得します
	 * @param inMap 入力電文
	 * @return List 料金項目情報
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private List<JBSbatCommonDBInterface> getPrcInfo(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getPrcInfo]");
		
		// KEY：料金コースコード ＋ 料金サービスコード
		String key = makeStr(inMap.getString(JBSbatACIFM166.PCRS_CD), 
				JACbatRknBusinessUtil.fillHalfSpace(inMap.getString(JBSbatACIFM166.PRC_SVC_CD), PRC_SVC_CD_LEN, true));
		// 取得できなかった場合
		if(!this.tmpKapPrcMap.containsKey(key))
		{
			return null;
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getPrcInfo]");
		
		return this.tmpKapPrcMap.get(key);
	}
	
	/**
	 * 割賦支払方法を決定します
	 * @param inMap 入力電文
	 * @return String :支払方法
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private String getKapPayMtd(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getKapPayMtd]");
		
		String kapPayMtd = "";
		
		// 入力値取得
		String kapHambaiFormCd = inMap.getString(JBSbatACIFM166.KAP_HAMBAI_FORM_CD);	// 割賦販売形態コード
		String kapIktSikySwchYm = inMap.getString(JBSbatACIFM166.KAP_IKT_SIKY_SWCH_YM);	// 割賦一括請求切替年月
		String seikyYm = inMap.getString(JBSbatACIFM166.SEIKY_YM);						// 請求年月

		// 一括／割賦判定

		// 入力．割賦一括請求切替年月　＝　入力．請求年月　の場合
		if (kapIktSikySwchYm.equals(seikyYm))
		{ 
			kapPayMtd = PAY_MTD_IKT_Y;	//一括支払い（計算要）
		}
		else 
		{
			// 入力．割賦販売形態コード　＝　"01"（一括）　の場合
			if (JACStrConst.KAP_HAMBAI_FORM_CD_IKT.equals(kapHambaiFormCd))
			{	
				kapPayMtd = PAY_MTD_IKT;	//一括支払い
			}
			// 入力．割賦販売形態コード　＝　"02"（割賦）　の場合
			else
			{
				kapPayMtd = PAY_MTD_KAP;	//割賦支払
			}
		}

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getkapPrc]kapPayMtd:" + kapPayMtd);
		
		return kapPayMtd;
	}

	/**
	 * 割賦対象請求月を決定します
	 * @param inMap 入力電文
	 * @return String :割賦対象請求月
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private String getKapSeikyYM(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getKapSeikyYM]");
		
		String kapSeikyYM = JACStrConst.KARA_MOJI;
		
		// 入力値取得
		String wKapSeikyYM = inMap.getString(JBSbatACIFM166.KAP_SEIKY_STA_YM);	// 割賦請求開始年月

		// 初回／継続判定

		// 入力．割賦開始請求年月　＝　未設定　の場合
		if (JACStrConst.KARA_MOJI.equals(wKapSeikyYM))
		{ 
			kapSeikyYM = KAP_SEIKY_YM_S;	//初回請求月
		}
		else 
		{
			kapSeikyYM = KAP_SEIKY_YM_K;	//継続請求月
		}

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getKapSeikyYM]kapSeikyYM:" + kapSeikyYM);
		
		return kapSeikyYM;
	}

	/**
	 * 利用料金を算出をします
	 * @param inMap 入力電文
	 * @param kapPayMtd 割賦支払方法
	 * @param kapSeikyYM 割賦対象請求月
	 * @param kapMListMei 割賦料金リスト
	 * @return BigDecimal 料金
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private BigDecimal getKapPrc(JBSbatServiceInterfaceMap inMap, String kapPayMtd 
									, String kapSeikyYM 
									, JBSbatCommonDBInterface kapMListMei) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getKapPrc]");
		
		BigDecimal kapPrc = BigDecimal.ZERO;
		
		// 料金取得

		// ワーク．割賦支払方法　　＝　一括支払い
		if (PAY_MTD_IKT.equals(kapPayMtd))
		{
			// かつ、割賦対象請求月　＝　初回請求月　の場合
			if (KAP_SEIKY_YM_S.equals(kapSeikyYM))
			{
				// 算出料金　←　割賦料金．初回料金
				kapPrc = kapMListMei.getBigDecimal(JBSbatAC_M_KAP_PRC.FIRST_PRC);
			}
			// かつ、割賦対象請求月　＝　継続料金　の場合
			else
			{
				// 算出料金　←　割賦料金．継続料金
				kapPrc = kapMListMei.getBigDecimal(JBSbatAC_M_KAP_PRC.KEIZOKU_PRC);
			}

		}
		// ワーク．割賦支払方法　　＝　割賦支払
		else if (PAY_MTD_KAP.equals(kapPayMtd))
		{
			// かつ、割賦対象請求月　＝　初回請求月　の場合
			if (KAP_SEIKY_YM_S.equals(kapSeikyYM))
			{
				// 算出料金　←　割賦料金．初回料金
				kapPrc = kapMListMei.getBigDecimal(JBSbatAC_M_KAP_PRC.FIRST_PRC);
			}
			// かつ、割賦対象請求月　＝　継続料金　の場合
			else
			{
				// 算出料金　←　割賦料金．継続料金
				kapPrc = kapMListMei.getBigDecimal(JBSbatAC_M_KAP_PRC.KEIZOKU_PRC);
			}
		}
		// ワーク．割賦支払方法　　＝　一括支払（要計算）
		else
		{
			// かつ、割賦対象請求月　＝　初回請求月　の場合
			if (KAP_SEIKY_YM_S.equals(kapSeikyYM))
			{
				// 算出料金　←　割賦料金．初回料金　＋（割賦料金．継続料金　×　（割賦対象．残回数　−　１））
				kapPrc = kapMListMei.getBigDecimal(JBSbatAC_M_KAP_PRC.FIRST_PRC)
													.add(kapMListMei.getBigDecimal(JBSbatAC_M_KAP_PRC.KEIZOKU_PRC)
														.multiply(inMap.getBigDecimal(JBSbatACIFM166.KAP_PAY_ZAN_CNT).subtract(BigDecimal.ONE)));
			}
			// かつ、割賦対象請求月　＝　継続料金　の場合
			else
			{
				// 算出料金　←　割賦料金．継続料金　×　割賦対象．残回数
				kapPrc = kapMListMei.getBigDecimal(JBSbatAC_M_KAP_PRC.KEIZOKU_PRC)
							.multiply(inMap.getBigDecimal(JBSbatACIFM166.KAP_PAY_ZAN_CNT));
			}
		}

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getKapPrc]kapPrc:" + kapPrc);
		
		return kapPrc;
	}
	
	/**
	 * 利用料金情報（割賦料金）を出力します
	 * 
	 * @param inMap 入力電文
	 * @param kapPayMtd 支払方法
	 * @param kapSeikyYM 割賦請求年月
	 * @param kapPrc 利用料金
	 * @param kapMListMei 割賦請料金リスト
	 * @param outputInItem  出力情報
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void makeOutputInfo(JBSbatServiceInterfaceMap inMap 
									, String kapPayMtd 
									, String kapSeikyYM 
									, BigDecimal kapPrc 
									, JBSbatCommonDBInterface kapMListMei 
									, JBSbatOutputItem outputInItem) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeOutputInfo]");
		
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		// 請求先番号
		outMap.setString(JBSbatACIFI016.SEIKY_KEI_NO, 				inMap.getString(JBSbatACIFM166.SEIKY_KEI_NO));
		
		// 請求年月
		outMap.setString(JBSbatACIFI016.SEIKY_YM, 					inMap.getString(JBSbatACIFM166.SEIKY_YM));

		// 整理番号
		outMap.setString(JBSbatACIFI016.SEIRI_NO, 					inMap.getString(JBSbatACIFM166.SEIRI_NO));

		// 割引サービス契約番号
		outMap.setString(JBSbatACIFI016.WRIB_SVC_KEI_NO, 			inMap.getString(JBSbatACIFM166.WRIB_SVC_KEI_NO));

		// 割引サービス対象契約番号
		outMap.setString(JBSbatACIFI016.WRISVC_TRGT_KEI_NO, 		inMap.getString(JBSbatACIFM166.WRISVC_TRGT_KEI_NO));

		// サービス番号
		outMap.setString(JBSbatACIFI016.SVC_NO, 					inMap.getString(JBSbatACIFM166.SVC_KEI_NO));

		// オプションサービス契約番号
		if(JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatACIFM166.OP_SVC_KEI_NO)))
		{
			// 機器提供サービス契約番号
			outMap.setString(JBSbatACIFI016.OP_SVKEI_NO, 			inMap.getString(JBSbatACIFM166.KKTK_SVC_KEI_NO));
		}
		else
		{
			// オプションサービス契約番号
			outMap.setString(JBSbatACIFI016.OP_SVKEI_NO, 			inMap.getString(JBSbatACIFM166.OP_SVC_KEI_NO));
		}

		// 料金サービス識別コード
		outMap.setString(JBSbatACIFI016.SVC_SKBT_CD, 				inMap.getString(JBSbatACIFM166.SVC_SKBT_CD));

		// 料金グループコード
		outMap.setString(JBSbatACIFI016.PRC_GRP_CD, 				inMap.getString(JBSbatACIFM166.PRC_GRP_CD));

		// 料金コースコード
		outMap.setString(JBSbatACIFI016.PCRS_CD, 					inMap.getString(JBSbatACIFM166.PCRS_CD));

		// 料金サービスコード
		outMap.setString(JBSbatACIFI016.PRC_SVC_CD, 				inMap.getString(JBSbatACIFM166.PRC_SVC_CD));

		// 料金項目コード
		if (PAY_MTD_IKT_Y.equals(kapPayMtd))
		{	// 一括支払（要計算）の場合、割賦料金スキーマ．一括請求切替料金項目コードを設定
			outMap.setString(JBSbatACIFI016.PRC_KMK_CD, 				kapMListMei.getString(JBSbatAC_M_KAP_PRC.IKT_SIKY_SWCH_PRC_KMK_CD));
		}
		else
		{	// 割賦料金スキーマ.料金項目コードを設定
			outMap.setString(JBSbatACIFI016.PRC_KMK_CD, 				kapMListMei.getString(JBSbatAC_M_KAP_PRC.PRC_KMK_CD));
		}
		
		// 徴収パターンコード
		if (KAP_SEIKY_YM_S.equals(kapSeikyYM))
		{	// 初回請求月の場合、割賦料金スキーマ．初回徴収パターンコードを設定
			outMap.setString(JBSbatACIFI016.COLLECT_PATTERN_CD, 		kapMListMei.getString(JBSbatAC_M_KAP_PRC.FIRST_COLLECT_PATTERN_CD));
		}
		else
		{	// 割賦料金スキーマ．継続徴収パターンコードを設定
			outMap.setString(JBSbatACIFI016.COLLECT_PATTERN_CD, 		kapMListMei.getString(JBSbatAC_M_KAP_PRC.KEIZOKU_COLLECT_PATTERN_CD));
		}

		// 料金
		outMap.setBigDecimal(JBSbatACIFI016.PRC, 					kapPrc);

		// 利用開始日
		outMap.setString(JBSbatACIFI016.USE_STAYMD, 				inMap.getString(JBSbatACIFM166.USE_STAYMD));

		// 利用終了日
		outMap.setString(JBSbatACIFI016.USE_ENDYMD, 				inMap.getString(JBSbatACIFM166.USE_ENDYMD));

		// サービス開始日
		outMap.setString(JBSbatACIFI016.SVC_STAYMD, 				inMap.getString(JBSbatACIFM166.SVC_STA_YMD));

		// 初回課金開始
		outMap.setString(JBSbatACIFI016.FIRST_CHRG_STAYMD, 			inMap.getString(JBSbatACIFM166.FIRST_CHRG_STAYMD));

		// サービス解約
		outMap.setString(JBSbatACIFI016.SVC_DSL_YMD, 				inMap.getString(JBSbatACIFM166.SVC_DSL_YMD));

		// サービス解約理由
		outMap.setString(JBSbatACIFI016.SVC_DLRE, 					inMap.getString(JBSbatACIFM166.SVC_DLRE));

		// サービス回復日
		outMap.setString(JBSbatACIFI016.SVC_KAIHK_DAY, 				inMap.getString(JBSbatACIFM166.SVC_KAIHK_DAY));

		// 利用日数
		outMap.setBigDecimal(JBSbatACIFI016.USE_DAY_CNT, 			inMap.getBigDecimal(JBSbatACIFM166.USE_DAY_CNT));

		// 利用不可日数
		outMap.setBigDecimal(JBSbatACIFI016.USE_FAIL_DAY_CNT, 		inMap.getBigDecimal(JBSbatACIFM166.USE_FAIL_DAY_CNT));

		// 相対区分
		outMap.setString(JBSbatACIFI016.AIT_DIV, 					inMap.getString(JBSbatACIFM166.AIT_DIV));

		// 締め日
		outMap.setString(JBSbatACIFI016.SIME_DAY, 					inMap.getString(JBSbatACIFM166.SIME_DAY));

		// 利用不可適用可否
		outMap.setString(JBSbatACIFI016.USE_APLY_KH_CD, 			JACStrConst.USE_NG_TKY_N);

		// 前受相殺優先順位
		outMap.setString(JBSbatACIFI016.MAE_YUSEN_JUN, 				JACStrConst.MAE_YUSEN_JUN_0);

		// 割引優先順位
		outMap.setString(JBSbatACIFI016.WRIB_YUSEN_JUN, 			JACStrConst.WRIB_YUSEN_JUN_0);

		// 上限判定優先順位
		outMap.setString(JBSbatACIFI016.UPPL_JUDGE_YUSEN_JUN, 		JACStrConst.UPPL_YUSEN_JUN_0);

		// 割引繰越可否
		outMap.setString(JBSbatACIFI016.WRIB_KKSHI_KH, 				JACStrConst.WRIB_TKY_H);
		
		// サービス詳細識別番号
		outMap.setString(JBSbatACIFI016.SVC_DTL_SKBT_NO, 			inMap.getString(JBSbatACIFM166.SVC_DTL_SKBT_NO));
		
		// 出力フラグ設定
		outMap.setOutFlg(true);
		
		outputInItem.addOutMapList(outMap);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeOutputInfo]");

		return;
	}
}
