/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACFtthTsnryoChsht
*	ソースファイル名	：JBSbatACFtthTsnryoChsht.java
*	作成者				：富士通　
*	作成日				：2012年12月17日
*＜機能概要＞
*　FTTH利用料金情報抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00		2012/12/17   富士通		新規作成
*	v8.00		2013/12/13	 FJ) 北端	【ANK-1794-00-00】請求書電話番号表示対応
*	v8.01		2014/01/20   FJ）伊藤	【ANK-1589-00-00】増税対応
*	v8.02		2014/06/06   FJ) 早崎	【OM-2014-0001545】通信明細に通信料０MBが表示される
*********************************************************************/
package eo.business.service;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatParamUtil;
import eo.business.common.JACbatSchdlUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatACIFI016;
import eo.business.util.table.JBSbatAC_M_JURYOPRC;
import eo.business.util.table.JBSbatAC_T_CHRG_JSVKEI_CKS;
import eo.business.util.table.JBSbatAC_T_FTTH_TUSHIN_GK;
import eo.common.constant.JACStrConst;
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 JBSbatACFtthTsnryoChsht extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(従量料金)*/
	private static final String D_TBL_NAME_AC_M_JURYOPRC = "AC_M_JURYOPRC";

	/** SQL定義キー(AC_SELECT_004)*/
	private static final String AC_M_JURYOPRC_AC_SELECT_004 = "AC_SELECT_004";

	/** テーブルアクセスクラス(従量料金)*/
	private JBSbatSQLAccess db_AC_M_JURYOPRC = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 従量料金マップ */
	private HashMap<String, ArrayList<JBSbatCommonDBInterface>> juryoPrcMap = null;

	/** 料金項目コード一覧（利用通信量） */
	private ArrayList<String>  					useTsn			= null;
	/** 料金項目コード一覧（補正通信量） */
	private ArrayList<String>  					hseTsn			= null;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_AC_M_JURYOPRC = new JBSbatSQLAccess(commonItem, D_TBL_NAME_AC_M_JURYOPRC);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		// パラメータ取得部品の初期処理
		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		
		// 料金スケジュール部品の初期処理
		JACbatSchdlUtil schdlUtil = new JACbatSchdlUtil(commonItem);
		
		// イベントコード（利用終了日）に対する請求年月を取得する
		String seikyYm = schdlUtil.getBillDate(super.opeDate, JACStrConst.EVENT_CD_PRC_CALC_DAY);
		
		// 月初日、締め日　←　JACbatSchdlUtil.getUseStrEnd(請求年月, イベントコード("01"（利用開始日））, イベントコード（"02"（利用終了日））)
		String[] seikyYmd = schdlUtil.getUseStrEnd(seikyYm, JACStrConst.EVENT_CD_USE_STAYMD, JACStrConst.EVENT_CD_USE_ENDYMD);
		String seikyEndYmd = seikyYmd[1];
		
		// 料金項目コード一覧初期化
		useTsn = new ArrayList<String>();
		hseTsn = new ArrayList<String>();
		
		// 業務パラメータ取得、コンマ分割
		String[] useTsnTemp = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_WKS_USE_TSN).split(JACStrConst.COMMA);
		String[] hseTsnTemp = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_WKS_HSE_TSN).split(JACStrConst.COMMA);

		// 全値を料金項目コード一覧に入力
		for(String kmkCd : useTsnTemp)
		{
			useTsn.add(kmkCd);
		}
		
		for(String kmkCd : hseTsnTemp)
		{
			hseTsn.add(kmkCd);
		}
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][useTsn=" + this.useTsn + "]");
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][hseTsn=" + this.hseTsn + "]");

		paramUtil.close();
		
		// 従量料金取得
		getJuryoPrc(seikyEndYmd);
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		
		// FTTH利用料金情報編集
		JBSbatOutputItem outItem = outputFtthUsePrcInfo(inMap);

		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return outItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_AC_M_JURYOPRC.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(AC_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 executeAC_M_JURYOPRC_AC_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());

		// DBアクセスを実行します
		db_AC_M_JURYOPRC.selectBySqlDefine(paramList, AC_M_JURYOPRC_AC_SELECT_004);
	}

	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	/**
	 * 従量料金取得
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void getJuryoPrc(String seikyEndYmd) throws Exception
	{
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getJuryoPrc]");
		this.juryoPrcMap 		= new HashMap<String, ArrayList<JBSbatCommonDBInterface>>();
		
		ArrayList<JBSbatCommonDBInterface> dbMapList = new ArrayList<JBSbatCommonDBInterface>(); // 取得結果マップ格納リスト
		StringBuffer mapKey 	= null; // 取得結果キー
		String thMapKey 		= null; // 退避キー
		
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(super.systemCode); 							// システムコード
		paramList.setValue(seikyEndYmd); 								// 請求年月末日
		paramList.setValue(seikyEndYmd); 								// 請求年月末日
		paramList.setValue(JACStrConst.CHRG_HICHRG_CD_CHRG); 			// 課金非課金コード
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getJuryoPrc][paramList=" + paramList.getList().toString() + "]");
		
		// SQL実行
		executeAC_M_JURYOPRC_AC_SELECT_004(paramList.getList().toArray());
		// 結果を取得
		JBSbatCommonDBInterface dbMap = db_AC_M_JURYOPRC.selectNext();
		if(dbMap != null)
		{
			// 取得結果がある限り処理を継続
			while(dbMap != null)
			{
				// 課税非課税コード＝"1"(課税)の場合
				if(JACStrConst.KAZEI_HIKAZEI_CD_KAZEI.equals(dbMap.getString(JBSbatAC_M_JURYOPRC.KAZEI_HIKAZEI_CD)))
				{
					// 取得結果キー作成
					mapKey = new StringBuffer();
					mapKey.append(dbMap.getString(JBSbatAC_M_JURYOPRC.PCRS_CD)); 		// 料金コースコード
					mapKey.append(dbMap.getString(JBSbatAC_M_JURYOPRC.PRC_SVC_CD)); 	// 料金サービス
					
					// 退避キー＝nullの場合(初回起動時)
					if(thMapKey == null)
					{
						// 取得結果キーを退避
						thMapKey = mapKey.toString();
					}
					
					// 取得結果キー＝退避キー
					if(mapKey.toString().equals(thMapKey))
					{
						// 取得結果マップ格納リストに退避 
						dbMapList.add(dbMap);
					}
					// 取得結果キー≠退避キー
					else
					{
						// 従量料金マップにキーと値を設定
						this.juryoPrcMap.put(thMapKey, dbMapList);
						// 取得結果キーを退避
						thMapKey 	= mapKey.toString();
						// 取得結果マップ格納リストを初期化
						dbMapList 	= new ArrayList<JBSbatCommonDBInterface>();
						dbMapList.add(dbMap);
					}
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getJuryoPrc][dbMap=" + dbMap.getMap().toString() + "]");
				}
				dbMap = db_AC_M_JURYOPRC.selectNext();
			}
			// 取得結果マップ格納リストに要素がある場合
			if(dbMapList.size() != 0)
			{
				// 従量料金マップにキーと値を設定
				this.juryoPrcMap.put(mapKey.toString(), dbMapList);
			}
		}
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getJuryoPrc]");
	}
	
	/**
	 * FTTH利用料金情報編集
	 * @param  tempMap   通信明細マップ
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatOutputItem outputFtthUsePrcInfo(JBSbatServiceInterfaceMap tempMap) throws Exception
	{
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][outputFtthUsePrcInfo]");
		
		// 出力共通電文オブジェクト生成
		JBSbatOutputItem outItem = new JBSbatOutputItem();

		// 従量料金マップリスト
		ArrayList<JBSbatCommonDBInterface> resultMapList = new ArrayList<JBSbatCommonDBInterface>();
		// 結果マップ：従量料金マップ
		JBSbatCommonDBInterface resultMap = new JBSbatCommonDBInterface();
		// 料金
		BigDecimal resultAmnt = BigDecimal.ZERO;
		// 検索キー
		StringBuffer searchKey 	= new StringBuffer();
		searchKey.append(tempMap.getString(JBSbatAC_T_CHRG_JSVKEI_CKS.PCRS_CD)); 			// 料金コースコード
		searchKey.append(tempMap.getString(JBSbatAC_T_CHRG_JSVKEI_CKS.PRC_SVC_CD)); 		// 料金サービス
				
		// 検索キーを用いて従量料金マップリストにデータが存在するか検索
		if(this.juryoPrcMap.containsKey(searchKey.toString()))
		{
			// データが存在した場合、退避
			resultMapList = this.juryoPrcMap.get(searchKey.toString());
		}
		// 従量料金マップリスト≠nullの場合
		if(resultMapList != null)
		{
			int i = 0;
			
			// リスト件数、出力処理を継続する
			while(resultMapList.size() > i)
			{
				resultMap = resultMapList.get(i);
				
				// 従量料金.料金項目コード＝"利用通信量"　かつ　FTTH通信合計.補正通信量合計≠0の場合
				if(this.useTsn.contains(resultMap.getValue(JBSbatAC_M_JURYOPRC.PRC_KMK_CD))
						&& !tempMap.getBigDecimal(JBSbatAC_T_FTTH_TUSHIN_GK.USE_TSRYO_GK).equals(BigDecimal.ZERO))
				{
					assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][outputFtthUsePrcInfo][従量料金.料金項目コード＝利用通信量かつ　FTTH通信合計.補正通信量合計≠0の場合]");
					// 利用通信量合計
					resultAmnt = tempMap.getBigDecimal(JBSbatAC_T_FTTH_TUSHIN_GK.USE_TSRYO_GK);
					
					// FTTH利用料金情報作成
					JBSbatServiceInterfaceMap outMap = makeOutList(tempMap, resultMap, resultAmnt);
					
					outItem.addOutMapList(outMap);
				}
				// 従量料金.料金項目コード＝"補正通信量"　かつ　FTTH通信合計.補正通信量合計≠0の場合
				else if(this.hseTsn.contains(resultMap.getValue(JBSbatAC_M_JURYOPRC.PRC_KMK_CD))
						&& !tempMap.getBigDecimal(JBSbatAC_T_FTTH_TUSHIN_GK.HOSEI_TSRYO_GK).equals(BigDecimal.ZERO))
				{
					assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][outputFtthUsePrcInfo][従量料金.料金項目コード＝補正通信量かつ　FTTH通信合計.補正通信量合計≠0の場合]");
					// 変換済利用通信量
					resultAmnt = tempMap.getBigDecimal(JBSbatAC_T_FTTH_TUSHIN_GK.HOSEI_TSRYO_GK);

					// FTTH利用料金情報作成
					JBSbatServiceInterfaceMap outMap = makeOutList(tempMap, resultMap, resultAmnt);
					
					outItem.addOutMapList(outMap);
				}
				// 従量料金.料金項目コード≠"利用通信量"　かつ　従量料金.料金項目コード≠"補正通信量"　かつ　FTTH通信合計.利用通信量 + FTTH通信合計.補正通信量合計≠0の場合
				else if(!this.useTsn.contains(resultMap.getValue(JBSbatAC_M_JURYOPRC.PRC_KMK_CD))
						&& !this.hseTsn.contains(resultMap.getValue(JBSbatAC_M_JURYOPRC.PRC_KMK_CD))
						&& !tempMap.getBigDecimal(JBSbatAC_T_FTTH_TUSHIN_GK.USE_TSRYO_GK).add(tempMap.getBigDecimal(JBSbatAC_T_FTTH_TUSHIN_GK.HOSEI_TSRYO_GK)).equals(BigDecimal.ZERO))
				{
					assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][outputFtthUsePrcInfo][従量料金.料金項目コード≠利用通信量　かつ　従量料金.料金項目コード≠補正通信量　かつ　FTTH通信合計.利用通信量 + FTTH通信合計.補正通信量合計≠0の場合]");
					resultAmnt = tempMap.getBigDecimal(JBSbatAC_T_FTTH_TUSHIN_GK.USE_TSRYO_GK).add(tempMap.getBigDecimal(JBSbatAC_T_FTTH_TUSHIN_GK.HOSEI_TSRYO_GK));
					// FTTH利用料金情報作成
					JBSbatServiceInterfaceMap outMap = makeOutList(tempMap, resultMap, resultAmnt);
					
					outItem.addOutMapList(outMap);
				}
				
				i++;
			}
		}
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][outputFtthUsePrcInfo]");
		
		return outItem;
	}

	/**
	 * FTTH利用料金情報出力処理
	 * @param tempMap
	 * @param resultMap
	 * @param resultAmnt
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatServiceInterfaceMap makeOutList(JBSbatServiceInterfaceMap tempMap, JBSbatCommonDBInterface resultMap, BigDecimal resultAmnt) throws Exception
	{
		// FTTH利用料金情報リスト
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		outMap.set(JBSbatACIFI016.SEIKY_KEI_NO, 		tempMap.getString(JBSbatAC_T_CHRG_JSVKEI_CKS.SEIKY_KEI_NO));		// 請求契約番号
		outMap.set(JBSbatACIFI016.SEIKY_YM, 			tempMap.getString(JBSbatAC_T_CHRG_JSVKEI_CKS.SEIKY_YM));			// 請求年月
		outMap.set(JBSbatACIFI016.SEIRI_NO, 			tempMap.getString(JBSbatAC_T_CHRG_JSVKEI_CKS.SEIRI_NO));			// 整理番号
		outMap.set(JBSbatACIFI016.WRIB_SVC_KEI_NO, 		tempMap.getString(JBSbatAC_T_CHRG_JSVKEI_CKS.WRIB_SVC_KEI_NO));		// 割引サービス契約番号
		outMap.set(JBSbatACIFI016.WRISVC_TRGT_KEI_NO, 	JACStrConst.KARA_MOJI);												// 割引サービス対象契約番号
		outMap.set(JBSbatACIFI016.SVC_NO, 				tempMap.getString(JBSbatAC_T_FTTH_TUSHIN_GK.SVC_KEI_NO));			// サービス番号
		outMap.set(JBSbatACIFI016.OP_SVKEI_NO, 			tempMap.getString(JBSbatAC_T_CHRG_JSVKEI_CKS.OP_SVC_KEI_NO));		// オプションサービス契約番号
		outMap.set(JBSbatACIFI016.SVC_SKBT_CD, 			tempMap.getString(JBSbatAC_T_CHRG_JSVKEI_CKS.PRC_SVC_SKBT_CD));		// サービス識別
		outMap.set(JBSbatACIFI016.PRC_GRP_CD, 			tempMap.getString(JBSbatAC_T_CHRG_JSVKEI_CKS.PRC_GRP_CD));			// 料金グループコード
		outMap.set(JBSbatACIFI016.PCRS_CD, 				tempMap.getString(JBSbatAC_T_FTTH_TUSHIN_GK.PCRS_CD));				// 料金グループコード
		outMap.set(JBSbatACIFI016.PRC_SVC_CD, 			tempMap.getString(JBSbatAC_T_FTTH_TUSHIN_GK.PRC_SVC_CD));			// 料金サービスコード
		outMap.set(JBSbatACIFI016.PRC_KMK_CD, 			resultMap.getValue(JBSbatAC_M_JURYOPRC.PRC_KMK_CD));				// 料金項目コード
		outMap.set(JBSbatACIFI016.COLLECT_PATTERN_CD, 	resultMap.getValue(JBSbatAC_M_JURYOPRC.COLLECT_PATTERN_CD));		// 徴収パターンコード
		outMap.set(JBSbatACIFI016.PRC, 					resultAmnt);														// 料金
		outMap.set(JBSbatACIFI016.USE_STAYMD, 			tempMap.getString(JBSbatAC_T_CHRG_JSVKEI_CKS.USE_STAYMD));			// 利用開始日
		outMap.set(JBSbatACIFI016.USE_ENDYMD, 			tempMap.getString(JBSbatAC_T_CHRG_JSVKEI_CKS.USE_ENDYMD));			// 利用終了日
		outMap.set(JBSbatACIFI016.SVC_STAYMD, 			tempMap.getString(JBSbatAC_T_CHRG_JSVKEI_CKS.SVC_STAYMD));			// サービス開始日
		outMap.set(JBSbatACIFI016.FIRST_CHRG_STAYMD, 	tempMap.getString(JBSbatAC_T_CHRG_JSVKEI_CKS.FIRST_CHRG_STAYMD));	// 初回課金開始日
		outMap.set(JBSbatACIFI016.SVC_DSL_YMD, 			tempMap.getString(JBSbatAC_T_CHRG_JSVKEI_CKS.SVC_DSL_YMD));			// サービス解約日
		outMap.set(JBSbatACIFI016.SVC_DLRE, 			tempMap.getString(JBSbatAC_T_CHRG_JSVKEI_CKS.SVC_DSL_RSN_SKBT_CD));	// サービス解約理由
		outMap.set(JBSbatACIFI016.SVC_KAIHK_DAY, 		tempMap.getString(JBSbatAC_T_CHRG_JSVKEI_CKS.KAIHK_YMD));			// サービス回復日
		outMap.set(JBSbatACIFI016.USE_DAY_CNT, 			tempMap.getBigDecimal(JBSbatAC_T_CHRG_JSVKEI_CKS.USE_DAY_CNT));		// 利用日数
		outMap.set(JBSbatACIFI016.USE_FAIL_DAY_CNT, 	tempMap.getBigDecimal(JBSbatAC_T_CHRG_JSVKEI_CKS.USE_FAIL_DAY_CNT));		// 利用不可日数
		outMap.set(JBSbatACIFI016.AIT_DIV, 				tempMap.getString(JBSbatAC_T_CHRG_JSVKEI_CKS.AITAI_CD));			// 相対区分
		outMap.set(JBSbatACIFI016.SIME_DAY, 			tempMap.getString(JBSbatAC_T_CHRG_JSVKEI_CKS.SIME_DAY));			// 締め日
		outMap.set(JBSbatACIFI016.USE_APLY_KH_CD, 		resultMap.getValue(JBSbatAC_M_JURYOPRC.USE_FAIL_APLY_WAY_CD));		// 利用不可適用可否
		outMap.set(JBSbatACIFI016.MAE_YUSEN_JUN, 		"0");																// 前受相殺優先順位
		outMap.set(JBSbatACIFI016.WRIB_YUSEN_JUN, 		"0");																// 割引優先順位
		outMap.set(JBSbatACIFI016.UPPL_JUDGE_YUSEN_JUN, null);																// 上限判定優先順位
		outMap.set(JBSbatACIFI016.WRIB_KKSHI_KH, 		null);																// 割引繰越可否
		outMap.set(JBSbatACIFI016.SVC_DTL_SKBT_NO, 		null);																// 割引繰越可否
		// 出力フラグを設定する
		outMap.setOutFlg(true);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][outputFtthUsePrcInfo]");

		return outMap;

	}

}
