/*******************************************************************************
* All Rights reserved,Copyright (c) K-Opticom
********************************************************************************
*＜プログラム内容＞
* システム名        ：eo顧客基幹システム
* モジュール名      ：JACSeikyUcwkInfSksiCC
* ソースファイル名  ：JACSeikyUcwkInfSksiCC.java
* 作成者            ：富士通
* 日付              ：2012年06月013日
*＜機能概要＞
* 請求書内訳情報作成共通コンポーネント部品
*＜修正履歴＞
* バージョン    修正日      修正者      修正内容
* ｖ3.00.00     2012/06/13  FJ
* ｖ5.00.00     2013/08/03  FJ)小野    【LT-2013-0000640】部屋番号の出力不備を修正(サービスIFが部屋番号込の料金内訳を返すため、当CCで部屋番号を付加する必要はない)
* ｖ5.00.01     2013/09/04  FJ)小野    【随時-2013-000XXX1】請求ステータスが"仮計算"、"仮確定"のものは抽出しないように変更。(請求内訳一覧照会機能 コード4を使用)
* ｖ6.00.00     2013/11/11  FJ) 鈴木   【ANK-1750-00-00】請求内訳の整理番号が１種類しかない場合でも整理番号を表示するように変更
* ｖ8.00.00     2014/02/13  FJ) 江森   【OM-2014-0000814】整理番号表示不正対応
* ｖ9.00.00     2014/04/16  FJ) 小野   【ANK-2054-00-00】eoスマートリンク改修(端末補償)により、料金内訳が30文字を超える場合、超過する部分を切り捨てるように修正。
* ｖ17.00.00    2015/10/02  FJ) 寺園   【ST-2015-0000044】請求確定年月日取得不備対応
*  v33.00.00	2017/06/20	FJ)西面		【ANK-3179-00-00】解約済み契約の請求明細表示
*  v33.00.01	2017/09/27	FJ)清原		【OM-2017-0001006】月別請求契約_お客様が取得できない場合にAPI結果が返却されない。
*  v39.00.00    2018/07/19  FJ)和田(康)【ANK-2829-00-00】【CMP】請求書内訳情報参照APIの改修１
*  v39.00.00    2018/07/19  FJ)和田(康)【ANK-2830-00-00】【CMP】請求書内訳情報参照APIの改修２
*  v39.00.00	2018/07/23  FJ)岡	   【ANK-2829-00-00】【CMP】請求書内訳情報参照APIの改修１
*  v44.00.00    2019/05/31  FJ)澤田		【ANK-3561-00-00】一部契約解約時の過去分請求明細表示
*  v46.00.00    2019/10/11  FJ)麻生		【ANK-3586-00-00】隔月合算請求
*  v64.00.00    2023/02/16  FJ)澤田		【ANK-4323-00-00】mineo請求明細の利用期間表示変更
********************************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.math.BigDecimal;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.mapping.bp.common.TemplateErrorUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;

import eo.common.constant.JACStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JCHCommonFormatUtil;
import eo.common.util.JCRUtilCommon;
import eo.common.util.JPCUtilCommon;
import eo.ejb.cbs.cbsmsg.ECH0101B010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECH0101B010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECH0401B010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECH0401B010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECH0501A010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECH0501A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECH0891A010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECH0891B010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0491B008CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0491B008CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0321A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0321A010CBSMsg1List;
/*---< ANK-2830-00-00/ANK-2829-00-00 add start >---*/
import eo.ejb.cbs.cbsmsg.EZM0321B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0321B010CBSMsg1List;
/*---< ANK-2830-00-00/ANK-2829-00-00 add end >---*/

/**
 * 請求書内訳情報作成CC部品クラス
 * @author   富士通
 */
public class JACSeikyUcwkInfSksiCC extends AbstractCommonComponent
{
	/** 請求書内訳情報作成CC部品マップID */
	public static final String CC_MAP_ID = "SEIKYUCWKINFSKSICC";
	
	// ANK-2829-00-00 2018/07/23 DEL START
	// /** 対象テーブル指定値 */
	// public static final String COL_TARGET_VALUE = "TARGET_VALUE";
	// ANK-2829-00-00 2018/07/23 DEL END

	/** 請求先番号 */
	public static final String COL_SIKYUSK_BNGU = "SIKYUSK_BNGU";
	
	// ANK-2829-00-00 2018/07/23 ADD START
	/** 請求年月 */
	public static final String COL_SIKYU_YM = "SIKYU_YM";
	// ANK-2829-00-00 2018/07/23 ADD END
	

//v33.00.00 2017/06/26 Add Start
	/** SYSID */
	private static final String  SYSID = "SYSID";
//v33.00.00 2017/06/26 Add End
	
	/** 結果コード */
	public static final String COL_RESULT_CD = "result_cd";
	
	/** 請求書内訳情報リスト */
	public static final String COL_SEIKY_UCWK_INF_LIST = "SeikyUcwkInfList";

	/** ＮＯ */
	public static final String COL_NO = "NO";
	
	/** 料金名称 */
	public static final String COL_RYOUKN_MI = "RYOUKN_MI";
	
	/** 税区分 */
	public static final String COL_ZI_KBN = "ZI_KBN";
	
	/** 編集金額 */
	public static final String COL_KNGK = "KNGK";
	

	/*---< ANK-2830-00-00 add start >---*/
	/** 編集金額表示区分 */
	public static final String COL_FMT_KBN_KNGK = "FMT_KBN_KNGK";
	/*---< ANK-2830-00-00 add end >---*/

	/** 編集金額内訳 */
	public static final String COL_KNGK_UTWK = "KNGK_UTWK";
	
	/*---< ANK-2830-00-00 add start >---*/
	/** 編集金額内訳表示区分 */
	public static final String COL_FMT_KBN_KNGK_UTWK = "FMT_KBN_KNGK_UTWK";
	
	/** 編集金額(内訳)表示区分：編集なし */
	public static final String FMT_KBN_KNGK_NASI = "1";

	/** 編集金額(内訳)表示区分：かっこ付きで表示 */
	public static final String FMT_KBN_KNGK_ADD_KAKKO = "2";
	/*---< ANK-2830-00-00 add end >---*/
	
	/** 利用期間 */
	public static final String COL_RIYO_KIKAN = "RIYO_KIKAN";
	
	/** 内訳表示区分 */
	public static final String COL_UTWK_HYJI_KBN = "UTWK_HYJI_KBN";
	
	/** 合算請求年月 */
	public static final String GSAN_SEIKY_YM = "GSAN_SEIKY_YM";
	
	/*---< ANK-2829-00-00 Add start >---*/
	/** CMP請求内訳表示識別区分 */
	public static final String COL_UTWK_HYJI_SKBT_KBN = "UTWK_HYJI_SKBT_KBN";
	
	/** CMP請求内訳表示識別区分：ブレイクなし(1) */
	public static final String UTWK_HYJI_BREAK_OFF = "1";
	
	/** CMP請求内訳表示識別区分：ブレイクあり(2) */
	public static final String UTWK_HYJI_BREAK_ON = "2";
	
	/** CMP請求表示行識別区分 */
	public static final String COL_UTWK_HYJIGYO_SKBT_KBN = "UTWK_HYJIGYO_SKBT_KBN";
	
	/** CMP請求表示行識別区分：タイトル行(1) */
	public static final String COL_UTWK_HYJIGYO_TITLE = "1";
	
	/** CMP請求表示行識別区分：内訳行(2) */
	public static final String COL_UTWK_HYJIGYO_DESC = "2";
	/*---< ANK-2829-00-00 Add end >---*/

	/** 結果コード（通常） */
	public static final String RETURN_CD_NORMAL = "0";
	
	/** 結果コード（業務パラメータ管理一意照会結果/業務パラメータ管理一覧照会結果0件） */
	public static final String RETURN_CD_EZM0321A010 = "1";
	
	/** 結果コード（料金スケジュール定義一意照会結果0件） */
	public static final String RETURN_CD_ECH0501A010 = "2";
	
	//v33.00.00 2017/06/26 Add Start
	/** 月別請求契約_お客様一意照会 */
	private static final String ECH0891A010 = "ECH0891A010";
	//v33.00.00 2017/06/26 Add End
	
	/** 業務パラメータ管理一意照会照会 */
	private static final String EZM0321A010 = "EZM0321A010";
	
	/** 料金スケジュール定義一意照会 */
	private static final String ECH0501A010 = "ECH0501A010";
	
	/** 料金項目抽出変換一覧照会 */
	private static final String ECH0401B010 = "ECH0401B010";
	
	/** 請求内訳一覧照会 */
	private static final String ECH0101B010 = "ECH0101B010";
	
	/** 請求年月 */
	private static final String COL_KEY_SEIKY_YM = "key_seiky_ym";
		
	/** 業務パラメータ管理一意明細1 */
	private static final String COL_EZM0321A010LIST1 = "EZM0321A010CBSMsg1List1";
	
	/** 業務パラメータ管理一意明細2 */
	private static final String COL_EZM0321A010LIST2 = "EZM0321A010CBSMsg1List2";
	
	/** 業務パラメータ管理一意明細3 */
	private static final String COL_EZM0321A010LIST3 = "EZM0321A010CBSMsg1List3";
	
	/** 業務パラメータ管理一意明細3 */
	private static final String COL_EZM0321A010LIST4 = "EZM0321A010CBSMsg1List4";

	/** 業務パラメータ管理一意明細配列 */
	private static final String[] COL_EZM0321A010LISTS = 
		new String[] {COL_EZM0321A010LIST1, COL_EZM0321A010LIST2, COL_EZM0321A010LIST3, COL_EZM0321A010LIST4};
	
	/*---< ANK-2829-00-00 Add start >---*/
	/** 業務パラメータ管理一覧照会 */
	private static final String EZM0321B010 = "EZM0321B010";

	/** 業務パラメータ管理一意明細1 */
	private static final String COL_EZM0321B010LIST1 = "EZM0321B010CBSMsg1List1";
	
	/** 業務パラメータ管理一意明細2 */
	private static final String COL_EZM0321B010LIST2 = "EZM0321B010CBSMsg1List2";
	
	/** 業務パラメータ管理一覧明細配列 */
	private static final String[] COL_EZM0321B010LISTS = 
		new String[] {COL_EZM0321B010LIST1, COL_EZM0321B010LIST2};

	/** 業務パラメータＩＤ（２）１ */
	private static final String WK_PARA_ID21 = "CH_CHIFE054_KMK1_";
	
	/** 業務パラメータＩＤ（２）２ */
	private static final String WK_PARA_ID22 = "CH_CHIFE054_KMK2_";

	/** 業務パラメータＩＤ（２）配列 */
	private static final String[] WK_PARA_ID2S = new String[] {WK_PARA_ID21, WK_PARA_ID22};
	/*---< ANK-2829-00-00 Add end >---*/

	/** 料金スケジュール定義一意明細 */
	private static final String COL_ECH0501A010LIST = "ECH0501A010CBSMsg1List";
	
	/** 料金項目抽出変換一覧明細 */
	private static final String COL_ECH0401B010LIST1 = "ECH0401B010CBSMsg1List1";
	
	/** 料金項目抽出変換一覧明細 */
	private static final String COL_ECH0401B010LIST2 = "ECH0401B010CBSMsg1List2";

//v33.00.00 2017/06/26 Add Start
	/** 月別請求契約_お客様 */
	private static final String COL_ECH0891A010LIST = "ECH0891A010CBSMsg1List";
//v33.00.00 2017/06/26 Add End	/** 料金項目抽出変換一覧明細配列 */
	
	private static final String[] COL_ECH0401B010LISTS = 
		new String[] {COL_ECH0401B010LIST1, COL_ECH0401B010LIST2};

	/** 請求内訳一覧明細 */
	private static final String COL_ECH0101B010LIST = "ECH0101B010CBSMsg1List";
	
	/** 請求種別コード（定例請求） */
	private static final String SEIKY_SBT_CD_TR_SEIKY = "0";
	
	/** システムコード（請求） */
	private static final String SYS_CD_CH = "CH";
	
	/** 業務パラメータＩＤ１ */
	private static final String WK_PARA_ID1 = "CH_WKS_SEIKY_UW_DSP";
	
	/** 業務パラメータＩＤ２ */
	private static final String WK_PARA_ID2 = "CH_WKS_SIKY_UW_D_GKI";
	
	/** 業務パラメータＩＤ３ */
	private static final String WK_PARA_ID3 = "CH_SIKYWKIF_AMTCOLNM";
	
	/** 業務パラメータＩＤ４ */
	private static final String WK_PARA_ID4 = "CH_WKS_SK_BOTH_DISP";

	/** 業務パラメータＩＤ配列 */
	private static final String[] WK_PARA_IDS = new String[] {WK_PARA_ID1, WK_PARA_ID2, WK_PARA_ID3, WK_PARA_ID4};
	
	/** 日（01） */
	private static final String DAY_01 = "01";
	
	/** 空文字 */
	private static final String BLANK = "";
	
	/** 整理番号（区切り） */
	private static final String SEIRI_NO_DIV = "-";
	
	/** 内訳表示区分（請求書表紙） */
	private static final String UTWK_HYJI_KBN_0 = "0";
	
	/** 内訳表示区分（請求内訳書） */
	private static final String UTWK_HYJI_KBN_1 = "1";
	
	/** 料金項目名称種別コード */
	private static final String PRC_KMK_NM_SBT_CD_NM = "1";
	
	/** 文字列0 */
	private static final String ZERO = "0";
	
	/** 金額（カッコ有り左） */
	private static final String KNGK_KAKKO_ARI_L = "(";
	
	/** 金額（カッコ有り右） */
	private static final String KNGK_KAKKO_ARI_R = ")";
	
	/** 金額（カッコ無し左） */
	private static final String KNGK_KAKKO_NASI_L = " ";
	
	/** 金額（カッコ無し右） */
	private static final String KNGK_KAKKO_NASI_R = " ";
	
	/** 金額編集パターンコード（カッコ有り） */
	private static final String AMNT_HENSHU_PTN_CD_KAKKO_ARI = "1";
	
// DELETE START 2013.11.11 ANK-1750-00-00
// 未使用変数のため削除
//	/** 部屋番号 */
//	private static final String RM_NO = "（部屋番号）";
//	
//	/** 部屋番号表示制御フラグ（表示対象） */
//	private static final String ADRRM_DSP_CTRL_FLG_DSP = "1";
// DELETE START 2013.11.11 ANK-1750-00-00
	
	/** 利用期間表示制御フラグ（表示対象） */
	private static final String USE_PRD_DSP_CTRL_FLG_DSP = "1";
	
	/** 税区分（アスタリスク） */
	private static final String COL_ZI_KBN_AST = "＊";
	
	/** 税区分表示フラグ（課税対象外） */
	private static final String TEX_DIV_DSP_FLG_GAI = "1";
	
	/** 0円明細表示制御フラグ(非表示) */
	private static final String N_0_YEN_DTL_DSP_CTRL_FLG_HIHYOJI = "0";
	
	/** 整理番号表示制御フラグ（表示あり） */
	private static final String SEIRI_NO_DSP_CTRL_FLG_DSP = "1";
	
	/** マンションＩＤ表示制御フラグ（表示対象） */
	private static final String MANS_ID_DSP_CTRL_FLG_DSP = "1";
	
	/** 金額表示カラム名称（区切文字） */
	private static final String KNGK_DSP_COL_NM_SEP = ",";

	/** 料金項目コード（判定用）キー */
	private static final String PRC_KMK_CD_KEY = "prc_kmk_cd_key";
	
	//v33.00.01 OM-2017-0001006 Add Start
	/** お客様一意照会 */
	private static final String TEMPLATE_ID_ECK0011A010 = "ECK0011A010";
	
	/** 解約後請求書参照可否・可 */
	private static final String DSL_AF_SKSSNS_KH_KA = "1";
	
	//v33.00.01 OM-2017-0001006 Add End
	// ANK-3561-00-00 ADD START
	/** 請求契約一覧照会(CMP) */
	private static final String TEMPLATE_ID_EKK0491B008 = "EKK0491B008";
	// ANK-3561-00-00 ADD END
	
	// ANK-3586-00-00 ADD START
	/** 料金項目名称スキップ月接尾辞 */
	private static final String PRC_KMK_NM_SKIP_M_SUFFIX = "（翌月合算）";
	// ANK-3586-00-00 ADD END」

	/**
	 * 請求書料金情報作成処理チェック処理<br>
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException RequestParameterException
	 */
	public  HashMap<String, Object> getInvokeCBS(SessionHandle handle
			, IRequestParameterReadWrite param, String fixedText) throws RequestParameterException 
	{
		// 共通領域の設定
		HashMap<String, Object> paramMap = editInMsg(param);

		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{});
		return paramMap;
	}

	/**
	 * <p>
	 * 請求書内訳情報作成処理
	 * </p>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @return 業務データ取得I/F
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite createSeikyUcwkInf(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// 上りマッピングの処理結果を取得するためのマップを生成
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		// SC実行結果を格納するマップ
		Map<?, ?> result = null;
		// サービスI/F実行するサービスを生成
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		// 入力データ情報
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(CC_MAP_ID);

		// 業務パラメータ管理一意照会の実行
		paramMap = editInMsgEZM0321A010(param);
		result = scCall.run(paramMap, handle);
		editOutMsgEZM0321A010(result, param, inMap);
		
		// 業務パラメータ格納用マップを生成
		HashMap<String, String> wkParaMap = createWkParaMap(inMap);
		
		// 業務パラメータ管理一意照会の取得結果が0件判定
		if (wkParaMap.size() != COL_EZM0321A010LISTS.length)
		{
			// 結果コードに"1"を設定
			inMap.put(COL_RESULT_CD, RETURN_CD_EZM0321A010);
			// 処理を終了する
			return param;
		}
		
		/*---< ANK-2829-00-00 Add start >---*/
		// 業務パラメータ管理一覧照会の実行
		paramMap = editInMsgEZM0321B010(param);
		result = scCall.run(paramMap, handle);
		editOutMsgEZM0321B010(result, param, inMap);
		// 業務パラメータ管理一覧照会の取得結果が0件判定
		for (int colEzm0321b010lists=0; colEzm0321b010lists < COL_EZM0321B010LISTS.length; colEzm0321b010lists++)
		{
			if (((ArrayList<HashMap<String, Object>>)inMap.get(COL_EZM0321B010LISTS[colEzm0321b010lists])).size() == 0)
			{
				// 結果コードに"3"を設定
				inMap.put(COL_RESULT_CD, RETURN_CD_EZM0321A010);
				// 処理を終了する
				return param;
			}

		}
		/*---< ANK-2829-00-00 Add end >---*/

		// 料金スケジュール定義一意照会の実行
		paramMap = editInMsgECH0501A010(param);
		result = scCall.run(paramMap, handle);
		editOutMsgECH0501A010(result, param, inMap);
		
		// 料金スケジュール定義一意照会の取得結果が0件判定
		if (((ArrayList<HashMap<String, Object>>)inMap.get(COL_ECH0501A010LIST)).size() == 0)
		{
			// 結果コードに"2"を設定
			inMap.put(COL_RESULT_CD, RETURN_CD_ECH0501A010);
			// 処理を終了する
			return param;
		}
		
		// ANK-2829-00-00 2018/07/23 DEL START
		// 請求年月算出処理
		// calcSeikyYm(inMap);
		// ANK-2829-00-00 2018/07/23 DEL END
		// ANK-2829-00-00 2018/07/23 ADD START
		// 入力マップに設定
		inMap.put(COL_KEY_SEIKY_YM, (String)inMap.get(COL_SIKYU_YM));
		// ANK-2829-00-00 2018/07/23 ADD END


		//v33.00.01 2017/09/27 Mod Start
////v33.00.00 2017/06/26 Add Start
//			//月別請求契約_お客様一意照会の実行
//			paramMap = editInMsgECH0891A010(param, inMap);
//			result = scCall.run(paramMap, handle);
//			if(editOutMsgECH0891A010(result, param, inMap)){
//
//				// 結果コードに"0"を設定
//				inMap.put(COL_RESULT_CD, RETURN_CD_NORMAL);
//				return param;
//			}
////v33.00.00 2017/06/26 Add End

			// SYSIDを取得する。
			String sysid = (String)inMap.get(SYSID);
			
			//運用年月日を取得する。
			String unyoYMD = JPCBPCommon.getOpeDate(null);
			
			// ***** ECK0011A010（お客様一意照会）情報取得*****
			Object[][] eck0011a010In = editInMsgECK0011A010(sysid, unyoYMD);
			CAANMsg[] eck0011a010Out = callSC(handle, scCall, param, fixedText, eck0011a010In).getCAANMsgList(ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST);
			// ANK-3561-00-00 ADD START
			// 請求契約一覧照会（CMP）
			Object[][] ekk0491b008In = editInMsgEKK0491B008(sysid, JPCModelConstant.FUNC_CD_1);
			CAANMsg[] ekk0491b008Out = callSC(handle, scCall, param, fixedText, ekk0491b008In).getCAANMsgList(EKK0491B008CBSMsg.EKK0491B008CBSMSG1LIST);
			List<String> seikyCmpList = new ArrayList<String>();
			// 請求リストの格納する。
			for (CAANMsg msg : ekk0491b008Out)
			{
				seikyCmpList.add(msg.getString(EKK0491B008CBSMsg1List.SEIKY_KEI_NO));
			}
			// ANK-3561-00-00 ADD END
			if (eck0011a010Out != null && eck0011a010Out.length > 0)
			{
				//解約後請求書参照可否取得
				String sanshoKahi = eck0011a010Out[0].getString(ECK0011A010CBSMsg1List.DSL_AF_SKSSNS_KH);
				
				//解約後請求書参照可否 = "1"（参照可）または、リクエストの請求契約番号が請求契約一覧照会（CMP）で取得した請求契約番号の中にない場合実行
				// ANK-3561-00-00 MOD START
				//if(DSL_AF_SKSSNS_KH_KA.equals(sanshoKahi))
				if(DSL_AF_SKSSNS_KH_KA.equals(sanshoKahi) || !seikyCmpList.contains(inMap.get(COL_SIKYUSK_BNGU)))
				// ANK-3561-00-00 MOD END
				{
					//月別請求契約_お客様一意照会の実行
					paramMap = editInMsgECH0891A010(param, inMap);
					result = scCall.run(paramMap, handle);
					if(editOutMsgECH0891A010(result, param, inMap)){
						// 結果コードに"0"を設定
						inMap.put(COL_RESULT_CD, RETURN_CD_NORMAL);
						return param;
					}
				}
			}
			
	//v33.00.01 2017/09/27 Mod End
		
		String[] wkSkbtCdArray = new String[2];
		wkSkbtCdArray[0] = (String)wkParaMap.get(WK_PARA_ID2);
		wkSkbtCdArray[1] = (String)wkParaMap.get(WK_PARA_ID4);

		// 料金項目抽出変換一覧照会の実行
		paramMap = editInMsgECH0401B010(param, wkSkbtCdArray);
		result = scCall.run(paramMap, handle);
		editOutMsgECH0401B010(result, param, inMap);

		// 請求内訳一覧照会の実行
		paramMap = editInMsgECH0101B010(param, inMap, wkParaMap);
		result = scCall.run(paramMap, handle);
		editOutMsgECH0101B010(result, param, inMap);

		// 請求書内訳情報作成
		createSeikyUcwkInf(inMap, wkParaMap);

		// 結果を返却する。
		return param;
	}

	/**
	 * IRequestParameterReadWriteにエラー情報をマッピングする。<br>
	 * 
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param templates テンプレート
	 * @param returnCode リターンコード
	 * @throws RequestParameterException
	 * @return パラメータオブジェクト
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode)
																							throws RequestParameterException
	{
		if (templates == null || templates.length == 0)
		{
			return param;
		}
		
		int index = 0;
		
		// 入力データ情報
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(CC_MAP_ID);
		
		editErrorInfoEZM0321A010(param, inMap, new CAANMsg[]{templates[index]}, returnCode);
		index++;
		
		/*---< ANK-2829-00-00 Add start >---*/
		editErrorInfoEZM0321B010(param, inMap, new CAANMsg[]{templates[index]}, returnCode);
		index++;
		/*---< ANK-2829-00-00 Add end >---*/

		editErrorInfoECH0501A010(param, inMap, new CAANMsg[]{templates[index]}, returnCode);
		index++;
		editErrorInfoECH0401B010(param, inMap, new CAANMsg[]{templates[index]}, returnCode);
		index++;
		editErrorInfoECH0101B010(param, inMap, new CAANMsg[]{templates[index]}, returnCode);
		index++;
		
		return param;
	
	}
	
	/**
	 * サービスIF実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 * 
	 * @param param リクエストパラメータ
	 * @param inMap 入力情報
	 * @param templates テンプレート
	 * @param returnCode リターンコード
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	private IRequestParameterReadWrite editErrorInfoEZM0321A010(IRequestParameterReadWrite param, 
																	HashMap<String, Object> inMap,
																	CAANMsg[] templates,
																	int returnCode) throws RequestParameterException
	{
		for (int i = 0; i < templates.length; i++)
		{
		CAANMsg template = templates[i];

			int templateStatus = template.getInt(EZM0321A010CBSMsg.STATUS);
			if (returnCode != 0)
			{
				templateStatus = 9000;
			}

			if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
			{
				templateStatus = 0;
			}

			int bpStatus = 0;
			Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
			if (obj == null)
			{
				bpStatus = -1;
			}
			else
			{
				bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
			}

			if (templateStatus > bpStatus)
			{
				// BPにサービスコンポーネントのステータスを設定する。
				String formatStatus = String.format("%1$04d", templateStatus);
				String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
				param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
				param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
			}
		
			// イベントコードエラー → 業務パラメータ管理一意照会.業務パラメータＩＤエラー
			if (!template.isNull(EZM0321A010CBSMsg.KEY_WORK_PARAM_ID_ERR))
			{
				if (!inMap.containsKey(EZM0321A010CBSMsg.KEY_WORK_PARAM_ID_ERR))
				{
					inMap.put(EZM0321A010CBSMsg.KEY_WORK_PARAM_ID_ERR, template.getString(EZM0321A010CBSMsg.KEY_WORK_PARAM_ID_ERR));
				}
			}
		}
		
		return param;
	}
	
	/**
	 * サービスIF実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 * 
	 * @param param リクエストパラメータ
	 * @param inMap 入力情報
	 * @param templates テンプレート
	 * @param returnCode リターンコード
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	private IRequestParameterReadWrite editErrorInfoECH0501A010(IRequestParameterReadWrite param, 
																	HashMap<String, Object> inMap,
																	CAANMsg[] templates,
																	int returnCode) throws RequestParameterException
	{
		CAANMsg template = templates[0];

		int templateStatus = template.getInt(ECH0501A010CBSMsg.STATUS);
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}

		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}
		
		// イベントコードエラー → 料金スケジュール定義一意照会.イベントコードエラー
		if (!template.isNull(ECH0501A010CBSMsg.KEY_EVENT_CD_ERR))
		{
			if (!inMap.containsKey(ECH0501A010CBSMsg.KEY_EVENT_CD_ERR))
			{
				inMap.put(ECH0501A010CBSMsg.KEY_EVENT_CD_ERR, template.getString(ECH0501A010CBSMsg.KEY_EVENT_CD_ERR));
			}
		}
		
		// イベント年月日エラー → 料金スケジュール定義一意照会.イベント年月日エラー
		if (!template.isNull(ECH0501A010CBSMsg.KEY_EVENT_YMD_ERR))
		{
			if (!inMap.containsKey(ECH0501A010CBSMsg.KEY_EVENT_YMD_ERR))
			{
				inMap.put(ECH0501A010CBSMsg.KEY_EVENT_YMD_ERR, template.getString(ECH0501A010CBSMsg.KEY_EVENT_YMD_ERR));
			}
		}
		
		// 運用日エラー → 料金スケジュール定義一意照会.運用日エラー
		if (!template.isNull(ECH0501A010CBSMsg.KEY_UNYO_DAY_ERR))
		{
			if (!inMap.containsKey(ECH0501A010CBSMsg.KEY_UNYO_DAY_ERR))
			{
				inMap.put(ECH0501A010CBSMsg.KEY_UNYO_DAY_ERR, template.getString(ECH0501A010CBSMsg.KEY_UNYO_DAY_ERR));
			}
		}
		
		return param;
	}
	
	/**
	 * サービスIF実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 * 
	 * @param param リクエストパラメータ
	 * @param inMap 入力情報
	 * @param templates テンプレート
	 * @param returnCode リターンコード
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	private IRequestParameterReadWrite editErrorInfoECH0401B010(IRequestParameterReadWrite param, 
																	HashMap<String, Object> inMap,
																	CAANMsg[] templates,
																	int returnCode) throws RequestParameterException
	{
		CAANMsg template = templates[0];

		int templateStatus = template.getInt(ECH0401B010CBSMsg.STATUS);
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}

		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}
		
		// システムコードエラー → 料金項目抽出変換一覧照会.システムコードエラー
		if (!template.isNull(ECH0401B010CBSMsg.KEY_SYS_CD_ERR))
		{
			if (!inMap.containsKey(ECH0401B010CBSMsg.KEY_SYS_CD_ERR))
			{
				inMap.put(ECH0401B010CBSMsg.KEY_SYS_CD_ERR, template.getString(ECH0401B010CBSMsg.KEY_SYS_CD_ERR));
			}
		}
		
		// 業務機能識別コードエラー → 料金項目抽出変換一覧照会.業務機能識別コードエラー
		if (!template.isNull(ECH0401B010CBSMsg.KEY_WORK_KINO_SKBT_CD_ERR))
		{
			if (!inMap.containsKey(ECH0401B010CBSMsg.KEY_WORK_KINO_SKBT_CD_ERR))
			{
				inMap.put(ECH0401B010CBSMsg.KEY_WORK_KINO_SKBT_CD_ERR, template.getString(ECH0401B010CBSMsg.KEY_WORK_KINO_SKBT_CD_ERR));
			}
		}
		
		// 抽出変換コードエラー → 料金項目抽出変換一覧照会.抽出変換コードエラー
		if (!template.isNull(ECH0401B010CBSMsg.KEY_CHSHT_CHG_CD_ERR))
		{
			if (!inMap.containsKey(ECH0401B010CBSMsg.KEY_CHSHT_CHG_CD_ERR))
			{
				inMap.put(ECH0401B010CBSMsg.KEY_CHSHT_CHG_CD_ERR, template.getString(ECH0401B010CBSMsg.KEY_CHSHT_CHG_CD_ERR));
			}
		}
		
		// 料金グループコードエラー → 料金項目抽出変換一覧照会.料金グループコードエラー
		if (!template.isNull(ECH0401B010CBSMsg.KEY_PRC_GRP_CD_ERR))
		{
			if (!inMap.containsKey(ECH0401B010CBSMsg.KEY_PRC_GRP_CD_ERR))
			{
				inMap.put(ECH0401B010CBSMsg.KEY_PRC_GRP_CD_ERR, template.getString(ECH0401B010CBSMsg.KEY_PRC_GRP_CD_ERR));
			}
		}
		
		// 料金コースコードエラー → 料金項目抽出変換一覧照会.料金コースコードエラー
		if (!template.isNull(ECH0401B010CBSMsg.KEY_PCRS_CD_ERR))
		{
			if (!inMap.containsKey(ECH0401B010CBSMsg.KEY_PCRS_CD_ERR))
			{
				inMap.put(ECH0401B010CBSMsg.KEY_PCRS_CD_ERR, template.getString(ECH0401B010CBSMsg.KEY_PCRS_CD_ERR));
			}
		}
		
		return param;
	}
	
	/**
	 * サービスIF実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 * 
	 * @param param リクエストパラメータ
	 * @param inMap 入力情報
	 * @param templates テンプレート
	 * @param returnCode リターンコード
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	private IRequestParameterReadWrite editErrorInfoECH0101B010(IRequestParameterReadWrite param, 
																	HashMap<String, Object> inMap,
																	CAANMsg[] templates,
																	int returnCode) throws RequestParameterException
	{
		for (int i = 0; i < templates.length; i++)
		{
			CAANMsg template = templates[i];

			int templateStatus = template.getInt(ECH0101B010CBSMsg.STATUS);
			if (returnCode != 0)
			{
				templateStatus = 9000;
			}

			if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
			{
				templateStatus = 0;
			}

			int bpStatus = 0;
			Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
			if (obj == null)
			{
				bpStatus = -1;
			}
			else
			{
				bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
			}

			if (templateStatus > bpStatus)
			{
				// BPにサービスコンポーネントのステータスを設定する。
				String formatStatus = String.format("%1$04d", templateStatus);
				String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
				param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
				param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
			}
		
			// 請求番号エラー → 請求内訳一覧照会.請求番号エラー
			if (!template.isNull(ECH0101B010CBSMsg.KEY_SEIKY_NO_ERR))
			{
				if (!inMap.containsKey(ECH0101B010CBSMsg.KEY_SEIKY_NO_ERR))
				{
					inMap.put(ECH0101B010CBSMsg.KEY_SEIKY_NO_ERR, template.getString(ECH0101B010CBSMsg.KEY_SEIKY_NO_ERR));
				}
			}
			
			// 請求契約番号エラー → 請求内訳一覧照会.請求契約番号エラー
			if (!template.isNull(ECH0101B010CBSMsg.KEY_SEIKY_KEI_NO_ERR))
			{
				if (!inMap.containsKey(ECH0101B010CBSMsg.KEY_SEIKY_KEI_NO_ERR))
				{
					inMap.put(ECH0101B010CBSMsg.KEY_SEIKY_KEI_NO_ERR, template.getString(ECH0101B010CBSMsg.KEY_SEIKY_KEI_NO_ERR));
				}
			}
		
			// 請求年月エラー → 請求内訳一覧照会.請求年月エラー
			if (!template.isNull(ECH0101B010CBSMsg.KEY_SEIKY_YM_ERR))
			{
				if (!inMap.containsKey(ECH0101B010CBSMsg.KEY_SEIKY_YM_ERR))
				{
					inMap.put(ECH0101B010CBSMsg.KEY_SEIKY_YM_ERR, template.getString(ECH0101B010CBSMsg.KEY_SEIKY_YM_ERR));
				}
			}
			
			// サービス契約番号エラー → 請求内訳一覧照会.サービス契約番号エラー
			if (!template.isNull(ECH0101B010CBSMsg.KEY_SVC_KEI_NO_ERR))
			{
				if (!inMap.containsKey(ECH0101B010CBSMsg.KEY_SVC_KEI_NO_ERR))
				{
					inMap.put(ECH0101B010CBSMsg.KEY_SVC_KEI_NO_ERR, template.getString(ECH0101B010CBSMsg.KEY_SVC_KEI_NO_ERR));
				}
			}
		
			// 請求種別コードエラー → 請求内訳一覧照会.請求種別コードエラー
			if (!template.isNull(ECH0101B010CBSMsg.KEY_SEIKY_SBT_CD_ERR))
			{
				if (!inMap.containsKey(ECH0101B010CBSMsg.KEY_SEIKY_SBT_CD_ERR))
				{
					inMap.put(ECH0101B010CBSMsg.KEY_SEIKY_SBT_CD_ERR, template.getString(ECH0101B010CBSMsg.KEY_SEIKY_SBT_CD_ERR));
				}
			}
		
			// システムコードエラー → 請求内訳一覧照会.システムコードエラー
			if (!template.isNull(ECH0101B010CBSMsg.KEY_SYS_CD_ERR))
			{
				if (!inMap.containsKey(ECH0101B010CBSMsg.KEY_SYS_CD_ERR))
				{
					inMap.put(ECH0101B010CBSMsg.KEY_SYS_CD_ERR, template.getString(ECH0101B010CBSMsg.KEY_SYS_CD_ERR));
				}
			}
		
			// 業務機能識別コードエラー → 請求内訳一覧照会.業務機能識別コードエラー
			if (!template.isNull(ECH0101B010CBSMsg.KEY_WORK_KINO_SKBT_CD_ERR))
			{
				if (!inMap.containsKey(ECH0101B010CBSMsg.KEY_WORK_KINO_SKBT_CD_ERR))
				{
					inMap.put(ECH0101B010CBSMsg.KEY_WORK_KINO_SKBT_CD_ERR, template.getString(ECH0101B010CBSMsg.KEY_WORK_KINO_SKBT_CD_ERR));
				}
			}
			
			// 業務機能識別コード＿料金訂正可否エラー → 請求内訳一覧照会.業務機能識別コード＿料金訂正可否エラー
			if (!template.isNull(ECH0101B010CBSMsg.KEY_WORK_KINO_SKBT_CD_PRC_TEISE_ERR))
			{
				if (!inMap.containsKey(ECH0101B010CBSMsg.KEY_WORK_KINO_SKBT_CD_PRC_TEISE_ERR))
				{
					inMap.put(ECH0101B010CBSMsg.KEY_WORK_KINO_SKBT_CD_PRC_TEISE_ERR, template.getString(ECH0101B010CBSMsg.KEY_WORK_KINO_SKBT_CD_PRC_TEISE_ERR));
				}
			}
			
			// 料金項目名称種別コードエラー → 請求内訳一覧照会.料金項目名称種別コードエラー
			if (!template.isNull(ECH0101B010CBSMsg.KEY_PRC_KMK_NM_SBT_CD_ERR))
			{
				if (!inMap.containsKey(ECH0101B010CBSMsg.KEY_PRC_KMK_NM_SBT_CD_ERR))
				{
					inMap.put(ECH0101B010CBSMsg.KEY_PRC_KMK_NM_SBT_CD_ERR, template.getString(ECH0101B010CBSMsg.KEY_PRC_KMK_NM_SBT_CD_ERR));
				}
			}
		}
		
		return param;
	}

	/**
	 * 共通領域の設定
	 * 
	 * @param param リクエストパラメータ
	 * @return HashMap<String, Object> リクエストパラメータ
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsg(IRequestParameterReadWrite param) throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// 【取得元：電文ヘッダ(ヘッダ)】
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());

		// 【取得元：ユーザエリア(コントロールマップ)】
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		return paramMap;
	}

	/**
	 * 上りマッピング（業務パラメータ管理一意照会）
	 * 
	 * @param param リクエストパラメータ
	 * @param workParamId 業務パラメータＩＤ
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEZM0321A010(IRequestParameterReadWrite param) throws RequestParameterException
	{
		// 共通領域の設定
		HashMap<String, Object> paramMap = editInMsg(param);

		// テンプレート配列の作成
		CAANMsg[] templates = new CAANMsg[WK_PARA_IDS.length];
		
		// 業務パラメータ数分繰り返す
		for (int i = 0; i < WK_PARA_IDS.length; i++)
		{
			// 業務パラメータを取得
			String wkParaId = WK_PARA_IDS[i];

			// テンプレートを作成
			CAANMsg template = new CAANMsg(EZM0321A010CBSMsg.class.getName());

			// テンプレートID
			template.set(EZM0321A010CBSMsg.TEMPLATEID, EZM0321A010);

			// 機能コード
			template.set(EZM0321A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

			// オペレータID
			template.set(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

			// 運用日付
			template.set(JCMConstants.OPERATE_DATE_KEY, param.getControlMapData(SCControlMapKeys.OPE_DATE));

			// 運用日時
			template.set(JCMConstants.OPERATE_DATETIME_KEY, param.getControlMapData(SCControlMapKeys.OPE_TIME));

			// 業務パラメータＩＤ → 業務パラメータ管理一意照会.業務パラメータＩＤ
			if (JCRUtilCommon.isNull(wkParaId))
			{
				template.setNull(EZM0321A010CBSMsg.KEY_WORK_PARAM_ID);
			}
			else
			{
				template.set(EZM0321A010CBSMsg.KEY_WORK_PARAM_ID, wkParaId);
			}
		
			// テンプレート配列にテンプレートを格納
			templates[i] = template;
		}
		
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}
	
	/**
	 * 上りマッピング（料金スケジュール一意照会）
	 * @param param リクエストパラメータ
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgECH0501A010(IRequestParameterReadWrite param) throws RequestParameterException
	{
		// 共通領域の設定
		HashMap<String, Object> paramMap = editInMsg(param);

		CAANMsg template = new CAANMsg(ECH0501A010CBSMsg.class.getName());
		
		// テンプレートID
		template.set(ECH0501A010CBSMsg.TEMPLATEID, ECH0501A010);

		// 機能コード
// ST-2015-0000044 MOD START
//		template.set(ECH0501A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2);
		template.set(ECH0501A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_5);
// ST-2015-0000044 MOD END

		// オペレータID
		template.set(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		// 運用日付
		template.set(JCMConstants.OPERATE_DATE_KEY, param.getControlMapData(SCControlMapKeys.OPE_DATE));

		// 運用日時
		template.set(JCMConstants.OPERATE_DATETIME_KEY, param.getControlMapData(SCControlMapKeys.OPE_TIME));

		// 請求処理日 → イベントコード
		template.set(ECH0501A010CBSMsg.KEY_EVENT_CD, JACStrConst.EVENT_CD_SIKY_TRN_DAY);
		
		// オンライン運用日 → 料金スケジュール一意照会イベント年月日
		template.set(ECH0501A010CBSMsg.KEY_EVENT_YMD, JCCBPCommon.getOpeDate(null));
		
		// オンライン運用日 → 料金スケジュール一意照会.運用日
		template.set(ECH0501A010CBSMsg.KEY_UNYO_DAY, JCCBPCommon.getOpeDate(null));
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}
	
	/**
	 * 上りマッピング（料金項目抽出変換一覧照会）
	 * @param param リクエストパラメータ
	 * @param wkSkbtCd 業務機能識別コード
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgECH0401B010(IRequestParameterReadWrite param, String[] wkSkbtCdArray) throws RequestParameterException
	{
		// 共通領域の設定
		HashMap<String, Object> paramMap = editInMsg(param);

		int wkParamCnt = wkSkbtCdArray.length;

		// テンプレート配列の作成
		CAANMsg[] templates = new CAANMsg[wkParamCnt];

		// 業務パラメータ数分繰り返す
		for (int i = 0; i < wkParamCnt; i++)
		{
			// 業務機能識別コードを取得
			String wkSkbtCd = wkSkbtCdArray[i];

			// テンプレートを作成
			CAANMsg template = new CAANMsg(ECH0401B010CBSMsg.class.getName());

			// テンプレートID
			template.set(ECH0401B010CBSMsg.TEMPLATEID, ECH0401B010);
	
			// 機能コード
			template.set(ECH0401B010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);
	
			// オペレータID
			template.set(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
	
			// 運用日付
			template.set(JCMConstants.OPERATE_DATE_KEY, param.getControlMapData(SCControlMapKeys.OPE_DATE));
	
			// 運用日時
			template.set(JCMConstants.OPERATE_DATETIME_KEY, param.getControlMapData(SCControlMapKeys.OPE_TIME));
	
			// システムコード → システムコード
			template.set(ECH0401B010CBSMsg.KEY_SYS_CD, JACStrConst.SYS_CD_CH);
			
			// 業務機能識別コード → 請求内訳一覧照会.業務機能識別コード
			template.set(ECH0401B010CBSMsg.KEY_WORK_KINO_SKBT_CD, wkSkbtCd);
			
			// 抽出変換コード → 抽出変換コード(抽出のみ)
			template.set(ECH0401B010CBSMsg.KEY_CHSHT_CHG_CD, JACStrConst.CHSHT_CHG_CD_CST);
	
			// null → 料金グループコード
			template.setNull(ECH0401B010CBSMsg.KEY_PRC_GRP_CD);
			
			// null → 料金コースコード
			template.setNull(ECH0401B010CBSMsg.KEY_PCRS_CD);

			// テンプレート配列にテンプレートを格納
			templates[i] = template;
		}

		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;

	}
	
	/**
	 * 上りマッピング（請求内訳一覧照会）
	 * 
	 * @param param リクエストパラメータ
	 * @param inMap 入力マップ
	 * @param wkParaMap 業務パラメータ格納用マップ
	 * @return HashMap<String, Object> リクエストパラメータ
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgECH0101B010(IRequestParameterReadWrite param, HashMap<String, Object> inMap, HashMap<String, String> wkParaMap) throws RequestParameterException
	{
		// 共通領域の設定
		HashMap<String, Object> paramMap = editInMsg(param);
		
		// テンプレートの作成
		CAANMsg template = new CAANMsg(ECH0101B010CBSMsg.class.getName());
		
		// テンプレートID
		template.set(ECH0101B010CBSMsg.TEMPLATEID, ECH0101B010);

		// 機能コード
		template.set(ECH0101B010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_4);

		// オペレータID
		template.set(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		// 運用日付
		template.set(JCMConstants.OPERATE_DATE_KEY, param.getControlMapData(SCControlMapKeys.OPE_DATE));

		// 運用日時
		template.set(JCMConstants.OPERATE_DATETIME_KEY, param.getControlMapData(SCControlMapKeys.OPE_TIME));

		// null → 請求内訳一覧照会.請求番号
		template.setNull(ECH0101B010CBSMsg.KEY_SEIKY_NO);

		// 請求先番号 → 請求内訳一覧照会.請求契約番号
		if (JCRUtilCommon.isNull(inMap.get(COL_SIKYUSK_BNGU)))
		{
			template.setNull(ECH0101B010CBSMsg.KEY_SEIKY_KEI_NO);
		}
		else
		{
			template.set(ECH0101B010CBSMsg.KEY_SEIKY_KEI_NO, (String)inMap.get(COL_SIKYUSK_BNGU));
		}

		// 請求年月 → 請求内訳一覧照会.請求年月
		if (JCRUtilCommon.isNull(inMap.get(COL_KEY_SEIKY_YM)))
		{
			template.setNull(ECH0101B010CBSMsg.KEY_SEIKY_YM);
		}
		else
		{
			template.set(ECH0101B010CBSMsg.KEY_SEIKY_YM, (String)inMap.get(COL_KEY_SEIKY_YM));
		}
			
		// null → 請求内訳一覧照会.サービス契約番号
		template.setNull(ECH0101B010CBSMsg.KEY_SVC_KEI_NO);
	
		// 定例請求 → 請求内訳一覧照会.請求種別コード
		template.set(ECH0101B010CBSMsg.KEY_SEIKY_SBT_CD, SEIKY_SBT_CD_TR_SEIKY);
	
		// 請求 → 請求内訳一覧照会.システムコード
		template.set(ECH0101B010CBSMsg.KEY_SYS_CD, SYS_CD_CH);
	
		// 業務機能識別コード → 請求内訳一覧照会.業務機能識別コード
		template.set(ECH0101B010CBSMsg.KEY_WORK_KINO_SKBT_CD, wkParaMap.get(WK_PARA_ID1));
		
		// null → 請求内訳一覧照会.業務機能識別コード＿料金訂正可否
		template.setNull(ECH0101B010CBSMsg.KEY_WORK_KINO_SKBT_CD_PRC_TEISE);
		
		// 料金項目名称 → 請求内訳一覧照会.料金項目名称種別コード
		template.set(ECH0101B010CBSMsg.KEY_PRC_KMK_NM_SBT_CD, PRC_KMK_NM_SBT_CD_NM);
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}
	
	//v33.00.00 2017/06/26 Add Start
	/**
	 * 上りマッピング（月別請求契約_お客様一意照会）
	 * @param param リクエストパラメータ
	 * @param inMap 入力データ情報
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgECH0891A010(IRequestParameterReadWrite param,
			HashMap<String, Object> inMap) throws RequestParameterException
	{
		// 共通領域の設定
		HashMap<String, Object> paramMap = editInMsg(param);

		CAANMsg template = new CAANMsg(ECH0891A010CBSMsg.class.getName());

		// テンプレートID
		template.set(ECH0891A010CBSMsg.TEMPLATEID, ECH0891A010);

		// 機能コード
		template.set(ECH0891A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		// オペレータID
		template.set(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		// 運用日付
		template.set(JCMConstants.OPERATE_DATE_KEY, param.getControlMapData(SCControlMapKeys.OPE_DATE));

		// 運用日時
		template.set(JCMConstants.OPERATE_DATETIME_KEY, param.getControlMapData(SCControlMapKeys.OPE_TIME));

		// ＫＥＹ＿請求契約番号
		template.set(ECH0891A010CBSMsg.KEY_SEIKY_KEI_NO, inMap.get(COL_SIKYUSK_BNGU));

		// ＫＥＹ＿請求年月
		template.set(ECH0891A010CBSMsg.KEY_SEIKY_YM, inMap.get(COL_KEY_SEIKY_YM).toString());
		
		// ＫＥＹ＿SYSID
		template.set(ECH0891A010CBSMsg.KEY_SYSID, inMap.get(SYSID));
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}
	
	
	/**
	 * 下りマッピング（月別請求契約一意照会）
	 * 
	 * @param msgList
	 * @param param リクエストパラメータ
	 * @param dataMap
	 * 
	 * @return IRequestParameterReadWrite
	 * 
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private boolean editOutMsgECH0891A010(Map<?, ?> msgList,
																		IRequestParameterReadWrite param,
																		HashMap<String, Object> dataMap) throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		
		// リターンコード取得
		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// エラー情報の設定
		IRequestParameterReadWrite retParam = this.editErrorInfoECH0891A010(param, dataMap, templates, (Integer)returnCode);
		
		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)retParam.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}
		
		// コントロールマップに設定
		retParam.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));
		
		/* ◇処理結果の判定 */
		//取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = msgList.get(JCMConstants.RET_CD_INT_KEY).toString();
		String status = (String)param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		
		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode) && 0 == Integer.parseInt(status))) 
		{
			SCCallException scCallEx = new SCCallException("INVALID_RETURN_MESSAGE", rtnCode, Integer.parseInt(status));
			throw scCallEx;
		}
		
		ArrayList resultList = new ArrayList();
		dataMap.put(COL_ECH0891A010LIST, resultList);
		CAANMsg[] msg1List = templates[0].getCAANMsgList(ECH0891A010CBSMsg.ECH0891A010CBSMSG1LIST);
		
		//取得結果がない場合はnullを返却する
		if(null == msg1List || 0 == msg1List.length)
		{
			return true;
		}
		
		return false;
	}
	
	
	/**
	 * サービスIF実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 * 
	 * @param param リクエストパラメータ
	 * @param inMap 入力情報
	 * @param templates テンプレート
	 * @param returnCode リターンコード
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	private IRequestParameterReadWrite editErrorInfoECH0891A010(IRequestParameterReadWrite param, 
																	HashMap<String, Object> inMap,
																	CAANMsg[] templates,
																	int returnCode) throws RequestParameterException
	{
		CAANMsg template = templates[0];

		int templateStatus = template.getInt(ECH0891A010CBSMsg.STATUS);
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}

		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}
		
		// 請求契約番号エラー → 月別請求契約＿お客様.ＫＥＹ＿請求契約番号エラー
		if (!template.isNull(ECH0891A010CBSMsg.KEY_SEIKY_KEI_NO_ERR))
		{
			if (!inMap.containsKey(ECH0891A010CBSMsg.KEY_SEIKY_KEI_NO_ERR))
			{
				inMap.put(ECH0891A010CBSMsg.KEY_SEIKY_KEI_NO_ERR, template.getString(ECH0891A010CBSMsg.KEY_SEIKY_KEI_NO_ERR));
			}
		}
		
		// 請求契約番号エラー → 月別請求契約＿お客様.ＫＥＹ＿請求契約番号エラー
		if (!template.isNull(ECH0891A010CBSMsg.KEY_SEIKY_YM_ERR))
		{
			if (!inMap.containsKey(ECH0891A010CBSMsg.KEY_SEIKY_YM_ERR))
			{
				inMap.put(ECH0891A010CBSMsg.KEY_SEIKY_YM_ERR, template.getString(ECH0891A010CBSMsg.KEY_SEIKY_YM_ERR));
			}
		}
		
		// ＳＹＳＩＤエラー → 月別請求契約＿お客様.ＫＥＹ＿ＳＹＳＩＤエラー
		if (!template.isNull(ECH0891A010CBSMsg.KEY_SYSID_ERR))
		{
			if (!inMap.containsKey(ECH0891A010CBSMsg.KEY_SYSID_ERR))
			{
				inMap.put(ECH0891A010CBSMsg.KEY_SYSID_ERR, template.getString(ECH0891A010CBSMsg.KEY_SYSID_ERR));
			}
		}

		return param;
	}
//v33.00.00 2017/06/26 Add End

	
	/**
	 * 下りマッピング（業務パラメータ管理一意照会）
	 * 
	 * @param msgList
	 * @param param リクエストパラメータ
	 * @param dataMap
	 * 
	 * @return IRequestParameterReadWrite
	 * 
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editOutMsgEZM0321A010(Map<?, ?> msgList,
																		IRequestParameterReadWrite param,
																		HashMap<String, Object> dataMap) throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		
		// リターンコード取得
		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// エラー情報の設定
		IRequestParameterReadWrite retParam = this.editErrorInfoEZM0321A010(param, dataMap, templates, (Integer)returnCode);
		
		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)retParam.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}
		
		// コントロールマップに設定
		retParam.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));
		
		/* ◇処理結果の判定 */
		//取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = msgList.get(JCMConstants.RET_CD_INT_KEY).toString();
		String status = (String)param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		
		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode) && 0 == Integer.parseInt(status))) 
		{
			SCCallException scCallEx = new SCCallException("INVALID_RETURN_MESSAGE", rtnCode, Integer.parseInt(status));
			throw scCallEx;
		}
		
		for (int i = 0; i < COL_EZM0321A010LISTS.length; i++)
		{
			ArrayList resultList = new ArrayList();
			dataMap.put(COL_EZM0321A010LISTS[i], resultList);
			CAANMsg[] msg1List = templates[i].getCAANMsgList(EZM0321A010CBSMsg.EZM0321A010CBSMSG1LIST);
		
			if (msg1List != null)
			{
				// 業務パラメータ管理一意明細件数分繰り返す
				for (CAANMsg msg : msg1List)
				{
					HashMap resultMap = new HashMap();
					resultList.add(resultMap);
			
					// 業務パラメータＩＤ ← 業務パラメータ管理一意明細.業務パラメータＩＤ
					resultMap.put(EZM0321A010CBSMsg1List.WORK_PARAM_ID, msg.getString(EZM0321A010CBSMsg1List.WORK_PARAM_ID));

					// 業務パラメータ設定値 ← 業務パラメータ管理一意明細.業務パラメータ設定値
					resultMap.put(EZM0321A010CBSMsg1List.WORK_PARAM_SETTE_VALUE, msg.getString(EZM0321A010CBSMsg1List.WORK_PARAM_SETTE_VALUE));
				}
			}
		}
		
		return retParam;
	}
	
	/**
	 * 下りマッピング（料金スケジュール一意照会）
	 * 
	 * @param msgList
	 * @param param リクエストパラメータ
	 * @param dataMap 
	 * 
	 * @return IRequestParameterReadWrite
	 * 
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editOutMsgECH0501A010(Map<?, ?> msgList,
																		IRequestParameterReadWrite param,
																		HashMap<String, Object> dataMap) throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		
		// リターンコード取得
		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// エラー情報の設定
		IRequestParameterReadWrite retParam = this.editErrorInfoECH0501A010(param, dataMap, templates, (Integer)returnCode);
		
		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)retParam.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}
		
		// コントロールマップに設定
		retParam.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));
		
		/* ◇処理結果の判定 */
		//取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = msgList.get(JCMConstants.RET_CD_INT_KEY).toString();
		String status = (String)param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		
		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode) && 0 == Integer.parseInt(status))) 
		{
			SCCallException scCallEx = new SCCallException("INVALID_RETURN_MESSAGE", rtnCode, Integer.parseInt(status));
			throw scCallEx;
		}
		
		ArrayList resultList = new ArrayList();
		dataMap.put(COL_ECH0501A010LIST, resultList);
		CAANMsg[] msg1List = templates[0].getCAANMsgList(ECH0501A010CBSMsg.ECH0501A010CBSMSG1LIST);
		
		// 料金スケジュール一意明細件数分繰り返す
		for (CAANMsg msg : msg1List)
		{
			HashMap resultMap = new HashMap();
			resultList.add(resultMap);
			
			// 請求年月 ← 料金スケジュール一意明細.請求年月
			resultMap.put(ECH0501A010CBSMsg1List.SEIKY_YM, msg.getString(ECH0501A010CBSMsg1List.SEIKY_YM));
		}
		
		return retParam;
	}
	
	/**
	 * 下りマッピング（料金項目抽出変換一覧照会）
	 * 
	 * @param msgList
	 * @param param リクエストパラメータ
	 * @param dataMap 
	 * 
	 * @return IRequestParameterReadWrite
	 * 
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editOutMsgECH0401B010(Map<?, ?> msgList,
																		IRequestParameterReadWrite param,
																		HashMap<String, Object> dataMap) throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		
		// リターンコード取得
		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// エラー情報の設定
		IRequestParameterReadWrite retParam = this.editErrorInfoECH0401B010(param, dataMap, templates, (Integer)returnCode);
		
		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)retParam.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}
		
		// コントロールマップに設定
		retParam.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));
		
		/* ◇処理結果の判定 */
		//取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = msgList.get(JCMConstants.RET_CD_INT_KEY).toString();
		String status = (String)param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		
		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode) && 0 == Integer.parseInt(status))) 
		{
			SCCallException scCallEx = new SCCallException("INVALID_RETURN_MESSAGE", rtnCode, Integer.parseInt(status));
			throw scCallEx;
		}

		for (int i = 0; i < COL_ECH0401B010LISTS.length; i++)
		{
			ArrayList resultList = new ArrayList();
			dataMap.put(COL_ECH0401B010LISTS[i], resultList);
			CAANMsg[] msg1List = templates[i].getCAANMsgList(ECH0401B010CBSMsg.ECH0401B010CBSMSG1LIST);
		
			if (msg1List != null)
			{
				// 料金項目抽出変換一覧明細件数分繰り返す
				for (CAANMsg msg : msg1List)
				{
					HashMap<String, String> resultMap = new HashMap<String, String>();
					resultList.add(resultMap);

					// 料金グループコード ← 料金抽出変換一覧明細.料金グループコード
					String prcGrpCd = msg.getString(ECH0401B010CBSMsg1List.PRC_GRP_CD);
					resultMap.put(ECH0401B010CBSMsg1List.PRC_GRP_CD, prcGrpCd);

					// 料金コースコード ← 料金抽出変換一覧明細.料金コースコード
					String pcrsCd = msg.getString(ECH0401B010CBSMsg1List.PCRS_CD);
					resultMap.put(ECH0401B010CBSMsg1List.PCRS_CD, pcrsCd);

					// 料金サービスコード ← 料金抽出変換一覧明細.料金サービスコード
					String prcSvcCd = msg.getString(ECH0401B010CBSMsg1List.PRC_SVC_CD);
					resultMap.put(ECH0401B010CBSMsg1List.PRC_SVC_CD, prcSvcCd);

					// 料金項目コード ← 料金抽出変換一覧明細.料金項目コード
					String prcKmkCd = msg.getString(ECH0401B010CBSMsg1List.PRC_KMK_CD);
					resultMap.put(ECH0401B010CBSMsg1List.PRC_KMK_CD, prcKmkCd);

					// キーを追加
					resultMap.put(PRC_KMK_CD_KEY, prcGrpCd.concat(pcrsCd).concat(prcSvcCd).concat(prcKmkCd));
				}
			}
		}

		return retParam;
	}
	
	/**
	 * 下りマッピング（請求内訳一覧照会）
	 * 
	 * @param msgList
	 * @param param リクエストパラメータ
	 * @param dataMap
	 * 
	 * @return IRequestParameterReadWrite
	 * 
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editOutMsgECH0101B010(Map<?, ?> msgList,
																		IRequestParameterReadWrite param,
																		HashMap<String, Object> dataMap) throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		
		// リターンコード取得
		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// エラー情報の設定
		IRequestParameterReadWrite retParam = this.editErrorInfoECH0101B010(param, dataMap, templates, (Integer)returnCode);
		
		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)retParam.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}
		
		// コントロールマップに設定
		retParam.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));
		
		/* ◇処理結果の判定 */
		//取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = msgList.get(JCMConstants.RET_CD_INT_KEY).toString();
		String status = (String)param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		
		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode) && 0 == Integer.parseInt(status))) 
		{
			SCCallException scCallEx = new SCCallException("INVALID_RETURN_MESSAGE", rtnCode, Integer.parseInt(status));
			throw scCallEx;
		}
		
		ArrayList resultList = new ArrayList();
		dataMap.put(COL_ECH0101B010LIST, resultList);
		CAANMsg[] msg1List = templates[0].getCAANMsgList(ECH0101B010CBSMsg.ECH0101B010CBSMSG1LIST);
	
		// 請求内訳一覧明細件数分繰り返す
		for (CAANMsg msg : msg1List)
		{
			HashMap resultMap = new HashMap();
			resultList.add(resultMap);
		
			// 整理番号 ← 請求内訳一覧明細.整理番号
			resultMap.put(ECH0101B010CBSMsg1List.SEIRI_NO, msg.getString(ECH0101B010CBSMsg1List.SEIRI_NO));

			// マンションＩＤ ← 請求内訳一覧明細.マンションＩＤ
			resultMap.put(ECH0101B010CBSMsg1List.MANSION_ID, msg.getString(ECH0101B010CBSMsg1List.MANSION_ID));
			
			// ＣＡＴ＿ＩＤ ← 請求内訳一覧明細.ＣＡＴ＿ＩＤ
			resultMap.put(ECH0101B010CBSMsg1List.CAT_ID, msg.getString(ECH0101B010CBSMsg1List.CAT_ID));
			
			// 回線場所住所補記＿部屋番号 ← 請求内訳一覧明細.回線場所住所補記＿部屋番号
			resultMap.put(ECH0101B010CBSMsg1List.KAISEN_PLACE_ADRRM, msg.getString(ECH0101B010CBSMsg1List.KAISEN_PLACE_ADRRM));
			
			// 金額 ← 請求内訳一覧明細.金額
			resultMap.put(ECH0101B010CBSMsg1List.AMNT, msg.getString(ECH0101B010CBSMsg1List.AMNT));
			
			// ご利用期間 ← 請求内訳一覧明細.ご利用期間
			resultMap.put(ECH0101B010CBSMsg1List.USE_KIKAN, msg.getString(ECH0101B010CBSMsg1List.USE_KIKAN));
			
			// 料金項目名称 ← 請求内訳一覧明細.料金項目名称
			resultMap.put(ECH0101B010CBSMsg1List.PRC_KMK_NM, msg.getString(ECH0101B010CBSMsg1List.PRC_KMK_NM));
			
			// 整理番号表示フラグ ← 請求内訳一覧明細.整理番号表示フラグ
			resultMap.put(ECH0101B010CBSMsg1List.SEIRI_NO_DSP_CTRL_FLG, msg.getString(ECH0101B010CBSMsg1List.SEIRI_NO_DSP_CTRL_FLG));
			
			// 整理番号表示フラグ ← 請求内訳一覧明細.整理番号表示フラグ
			resultMap.put(ECH0101B010CBSMsg1List.MANS_ID_DSP_CTRL_FLG, msg.getString(ECH0101B010CBSMsg1List.MANS_ID_DSP_CTRL_FLG));
			
			// 部屋番号表示制御フラグ ← 請求内訳一覧明細.部屋番号表示制御フラグ
			resultMap.put(ECH0101B010CBSMsg1List.ADRRM_DSP_CTRL_FLG, msg.getString(ECH0101B010CBSMsg1List.ADRRM_DSP_CTRL_FLG));
			
			// 利用期間表示制御フラグ ← 請求内訳一覧明細.利用期間表示制御フラグ
			resultMap.put(ECH0101B010CBSMsg1List.USE_PRD_DSP_CTRL_FLG, msg.getString(ECH0101B010CBSMsg1List.USE_PRD_DSP_CTRL_FLG));
			
			// 金額表示カラム数 ← 請求内訳一覧明細.金額表示カラム数
			resultMap.put(ECH0101B010CBSMsg1List.AMNT_DSP_COLUM_CNT, msg.getString(ECH0101B010CBSMsg1List.AMNT_DSP_COLUM_CNT));
			
			// 金額編集パターンコード ← 請求内訳一覧明細.金額編集パターンコード
			resultMap.put(ECH0101B010CBSMsg1List.AMNT_HENSHU_PTN_CD, msg.getString(ECH0101B010CBSMsg1List.AMNT_HENSHU_PTN_CD));
			
			// 税区分表示フラグ ← 請求内訳一覧明細.税区分表示フラグ
			resultMap.put(ECH0101B010CBSMsg1List.TAX_DIV_DSP_FLG, msg.getString(ECH0101B010CBSMsg1List.TAX_DIV_DSP_FLG));
			
			// 0円明細表示制御フラグ ← 請求内訳一覧明細.0円明細表示制御フラグ
			resultMap.put(ECH0101B010CBSMsg1List.N_0_YEN_DTL_DSP_CTRL_FLG, msg.getString(ECH0101B010CBSMsg1List.N_0_YEN_DTL_DSP_CTRL_FLG));
			
			// 行区分 ← 請求内訳一覧明細.行区分
			resultMap.put(ECH0101B010CBSMsg1List.GYO_DIV, msg.getString(ECH0101B010CBSMsg1List.GYO_DIV));
			
			// 料金グループコード ← 請求内訳一覧明細.料金グループコード
			resultMap.put(ECH0101B010CBSMsg1List.PRC_GRP_CD, msg.getString(ECH0101B010CBSMsg1List.PRC_GRP_CD));
			
			// 料金コースコード ← 請求内訳一覧明細.料金コースコード
			resultMap.put(ECH0101B010CBSMsg1List.PCRS_CD, msg.getString(ECH0101B010CBSMsg1List.PCRS_CD));
			
			// 料金サービスコード ← 請求内訳一覧明細.料金サービスコード
			resultMap.put(ECH0101B010CBSMsg1List.PRC_SVC_CD, msg.getString(ECH0101B010CBSMsg1List.PRC_SVC_CD));
			
			// 料金項目コード ← 請求内訳一覧明細.料金項目コード
			resultMap.put(ECH0101B010CBSMsg1List.PRC_KMK_CD, msg.getString(ECH0101B010CBSMsg1List.PRC_KMK_CD));
			
			// 合算請求年月 ← 請求内訳一覧明細.合算請求年月
			resultMap.put(ECH0101B010CBSMsg1List.GSAN_SEIKY_YM, msg.getString(ECH0101B010CBSMsg1List.GSAN_SEIKY_YM));
			
			/*---< ANK-2829-00-00 Add start >---*/
			// インデント数 ← 請求内訳一覧明細.インデント数
			resultMap.put(ECH0101B010CBSMsg1List.INDENT_CNT, msg.getString(ECH0101B010CBSMsg1List.INDENT_CNT));
			/*---< ANK-2829-00-00 Add end >---*/
			
			// ANK-3586-00-00 ADD START
			// 隔月請求スキップフラグ ← 請求内訳一覧明細.隔月請求スキップフラグ
			resultMap.put(ECH0101B010CBSMsg1List.KAKGT_SEIKY_SKIP_FLG, msg.getString(ECH0101B010CBSMsg1List.KAKGT_SEIKY_SKIP_FLG));
			// ANK-3586-00-00 ADD END
			
			/*---< ANK-4323-00-00 Add start >---*/
			// 利用終了年月日 ← 請求内訳一覧明細.利用終了年月日
			resultMap.put(ECH0101B010CBSMsg1List.USE_ENDYMD, msg.getString(ECH0101B010CBSMsg1List.USE_ENDYMD));
			
			// 請求年月 ← 請求内訳一覧明細.請求年月
			resultMap.put(ECH0101B010CBSMsg1List.SEIKY_YM, msg.getString(ECH0101B010CBSMsg1List.SEIKY_YM));
			/*---< ANK-4323-00-00 Add end >---*/
		}

		return retParam;
	}

	// ANK-2829-00-00 2018/07/23 DEL START
//	/**
//	 * 請求年月算出処理
//	 * 
//	 * @param inMap 入力マップ
//	 * @throws ParseException 入力データ（対象テーブル指定値）の数値変換処理エラー
//	 */
//	@SuppressWarnings("unchecked")
//	private void calcSeikyYm(HashMap<String, Object> inMap) throws ParseException
//	{
//		// 料金スケジュール定義一意照会明細を取得
//		ArrayList<HashMap<String, Object>> msgList = (ArrayList<HashMap<String, Object>>)inMap.get(COL_ECH0501A010LIST);
//		// 一意照会なので1件目のみ取得
//		HashMap<String, Object> msgMap = (HashMap<String, Object>)msgList.get(0);
//		// 請求年月を取得
//		String seikyYm = (String)msgMap.get(ECH0501A010CBSMsg1List.SEIKY_YM);
//
//		// 料金スケジュール定義一意照会で取得した年月の前月を基準年月とする
//		String stdYmd = JPCUtilCommon.addMonth(seikyYm + DAY_01, -1);
//
//		// 対象テーブル指定値を取得
//		int targetValue = Integer.parseInt((String)inMap.get(COL_TARGET_VALUE));
//
//		// 請求年月日を算出
//		String seikyYmd = JPCUtilCommon.addMonth(stdYmd, -targetValue);
//
//		// 請求年月日 → 請求年月
//		seikyYm = seikyYmd.substring(0, 6);
//
//		// 入力マップに設定
//		inMap.put(COL_KEY_SEIKY_YM, seikyYm);
//	}
	// ANK-2829-00-00 2018/07/23 DEL END
	
	/**
	 * キーリストの作成
	 * 
	 * @param inMap 入力マップ
	 * @return キーリスト
	 */
	@SuppressWarnings("unchecked")
	private List<String> createKeyList(HashMap<String, Object> inMap, String listName)
	{
		// 料金項目抽出変換一覧明細を取得
		List<HashMap<String, Object>> msgList = (ArrayList<HashMap<String, Object>>)inMap.get(listName);
		
		ArrayList<String> gkKeyList = new ArrayList<String>();
		
		// 料金項目抽出変換一覧明細件数分繰り返す
		for (HashMap<String, Object> msg : msgList)
		{
			String key = (String)msg.get(PRC_KMK_CD_KEY);
			gkKeyList.add(key);
		}
		return gkKeyList;
	}
	
	/**
	 * キー文字列の作成
	 * 
	 * @param prcGrpCd 料金グループコード
	 * @param pcrsCd 料金コースコード
	 * @param prcSvcCd 料金サービスコード
	 * @param prcKmkCd 料金項目コード
	 * @return キー文字列
	 */
	private String createKeyString(String prcGrpCd, String pcrsCd, String prcSvcCd, String prcKmkCd)
	{
		StringBuilder key = new StringBuilder();
		key.append(JPCUtilCommon.fillHalfSpace(prcGrpCd, 2, true));
		key.append(JPCUtilCommon.fillHalfSpace(pcrsCd, 3, true));
		key.append(JPCUtilCommon.fillHalfSpace(prcSvcCd, 12, true));
		key.append(JPCUtilCommon.fillHalfSpace(prcKmkCd, 11, true));
		return key.toString();
	}
	
	/**
	 * 業務パラメータ格納用マップの生成
	 * 
	 * @param inMap 入力マップ
	 * @return 業務パラメータ格納用マップ
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, String> createWkParaMap(HashMap<String, Object> inMap)
	{
		HashMap<String, String> wkParaMap = new HashMap<String, String>();
		
		for (int i = 0; i < COL_EZM0321A010LISTS.length; i++)
		{
			// 業務パラメータ一意明細を取得
			ArrayList<HashMap<String, Object>> msgList = (ArrayList<HashMap<String, Object>>)inMap.get(COL_EZM0321A010LISTS[i]);
			// 取得結果の0件判定
			if (msgList.size() > 0)
			{
				// 一意照会なので1件目のみ取得
				HashMap<String, Object> msgMap = (HashMap<String, Object>)msgList.get(0);
				if(msgMap != null)
				{
					// 業務パラメータ設定値を取得
					String wkParamSetteValue = (String)msgMap.get(EZM0321A010CBSMsg1List.WORK_PARAM_SETTE_VALUE);
					// 業務パラメータ格納用マップに追加
					wkParaMap.put(WK_PARA_IDS[i], wkParamSetteValue);
				}
			}
		}
		return wkParaMap;
		
	}
	
	/**
	 * 請求内訳情報作成処理
	 * 
	 * @param inMap 入力マップ
	 * @param wkParaMap 業務パラメータ格納用マップ
	 */
	@SuppressWarnings("unchecked")
	private void createSeikyUcwkInf(HashMap<String,Object> inMap, HashMap<String, String> wkParaMap)
	{
		// 業務パラメータの取得
		String[] kngkDspColNms = wkParaMap.get(WK_PARA_ID3).split(KNGK_DSP_COL_NM_SEP);

		// 請求内訳情報リストに請求内訳一覧明細（請求書表紙）の編集結果を格納
		ArrayList<HashMap<String, Object>> seikyUcwkInfList = editSeikyUcwkDtl(inMap, (ArrayList<HashMap<String, Object>>)inMap.get(COL_ECH0101B010LIST), kngkDspColNms);
		// 結果コードに"0"を設定
		inMap.put(COL_RESULT_CD, RETURN_CD_NORMAL);
		// 入力マップに請求書料金情報リストを設定
		inMap.put(COL_SEIKY_UCWK_INF_LIST, seikyUcwkInfList);
	}
	
	/**
	 * 請求内訳一覧明細編集処理
	 * 
	 * @param seikyUcwkDtl 請求内訳一覧明細
	 * @param kngkDspColNms 金額表示カラム名を格納した配列
	 * @param gkKeyList 合計判定用キーリスト
	 * @return 請求書内訳結果リスト
	 */
	@SuppressWarnings("unchecked")
	private ArrayList<HashMap<String, Object>> editSeikyUcwkDtl(HashMap<String, Object> inMap, List<HashMap<String, Object>> seikyUcwkDtl, String[] kngkDspColNms)
	{
		// 請求書内訳結果リストを作成
		ArrayList<HashMap<String, Object>> seikyUcwkResultList = new ArrayList<HashMap<String, Object>>();

		// 合計判別用キーリストの作成
		List<String> gkKeyList = createKeyList(inMap, COL_ECH0401B010LIST1);

		// 双方出力判別用キーリストの作成
		List<String> bothOutputKeyList = createKeyList(inMap, COL_ECH0401B010LIST2);

// DELETE START 2013.11.11 ANK-1750-00-00
//		// 整理番号マップ（整理番号の表示非表示の制御に使用）
//		HashMap<String, String> seiriNoMap = new HashMap<String, String>();
// DELETE END 2013.11.11 ANK-1750-00-00

		// 請求内訳一覧明細件数分繰り返す
		for (HashMap<String, Object> seikyUcwk : seikyUcwkDtl)
		{
			// 請求内訳情報マップを生成する
			HashMap<String, Object> seikyUcwkInfMap = new HashMap<String, Object>();
			
			// ＮＯの初期化
			StringBuilder no = new StringBuilder(BLANK);
			// マンションＩＤ表示制御フラグが"1"（表示対象）の場合
			if (MANS_ID_DSP_CTRL_FLG_DSP.equals(seikyUcwk.get(ECH0101B010CBSMsg1List.MANS_ID_DSP_CTRL_FLG)))
			{
				// ＮＯ項目にマンションＩＤを追加
				no.append(replaceNull(seikyUcwk.get(ECH0101B010CBSMsg1List.MANSION_ID)));
			}
			// 整理番号表示フラグが"1"（表示あり）の場合
			if (SEIRI_NO_DSP_CTRL_FLG_DSP.equals(seikyUcwk.get(ECH0101B010CBSMsg1List.SEIRI_NO_DSP_CTRL_FLG)))
			{
				// ＮＯ項目に整理番号を編集して追加
				no.append(editSeiriNo(seikyUcwk.get(ECH0101B010CBSMsg1List.SEIRI_NO)));
			}

// DELETE START 2013.11.11 ANK-1750-00-00
//			if (!JCRUtilCommon.isNull(no))
//			{
//				// 整理番号マップに整理番号をキーとしてput(重複は上書き)
//				seiriNoMap.put(no.toString(), null);
//			}
// DELETE END 2013.11.11 ANK-1750-00-00

			// 請求内訳情報マップにＮＯを設定
			seikyUcwkInfMap.put(COL_NO, no.toString());

			String amnt = (String)seikyUcwk.get(ECH0101B010CBSMsg1List.AMNT);
			if (JCRUtilCommon.isNull(amnt))
			{
				amnt = ZERO;
			}
			// 0円明細表示制御フラグが"0"（非表示）の場合 かつ 金額が0円の場合
			if (N_0_YEN_DTL_DSP_CTRL_FLG_HIHYOJI.equals(seikyUcwk.get(ECH0101B010CBSMsg1List.N_0_YEN_DTL_DSP_CTRL_FLG))
					&& BigDecimal.ZERO.compareTo(new BigDecimal(amnt)) == 0)
			{
				// レコード読み捨て
				continue;
			}

			// 合計判定用キーを作成
			String key = createKeyString((String)seikyUcwk.get(ECH0101B010CBSMsg1List.PRC_GRP_CD),
							(String)seikyUcwk.get(ECH0101B010CBSMsg1List.PCRS_CD),
							(String)seikyUcwk.get(ECH0101B010CBSMsg1List.PRC_SVC_CD),
							(String)seikyUcwk.get(ECH0101B010CBSMsg1List.PRC_KMK_CD));

			// 請求内訳情報に金額を編集
			editSeikyUcwkInfKngk(seikyUcwkInfMap, seikyUcwk, kngkDspColNms, bothOutputKeyList, key);
			
			// 税区分表示フラグが"1"（課税対象外）の場合
			if (TEX_DIV_DSP_FLG_GAI.equals(seikyUcwk.get(ECH0101B010CBSMsg1List.TAX_DIV_DSP_FLG)))
			{
				seikyUcwkInfMap.put(COL_ZI_KBN, COL_ZI_KBN_AST);
			}
			else
			{
				seikyUcwkInfMap.put(COL_ZI_KBN, BLANK);
			}
			
			// 利用期間表示制御フラグが"1"（表示対象）の場合
			if (USE_PRD_DSP_CTRL_FLG_DSP.equals(seikyUcwk.get(ECH0101B010CBSMsg1List.USE_PRD_DSP_CTRL_FLG)))
			{
				/*---< ANK-4323-00-00 MOD start >---*/
//				seikyUcwkInfMap.put(COL_RIYO_KIKAN, JCHCommonFormatUtil.convRiyoKikan((String)seikyUcwk.get(ECH0101B010CBSMsg1List.USE_KIKAN)));
				//料金グループコード　＝　"51"(ｍｉｎｅｏ)  かつ　利用終了年月日の年月　＜　請求年月の場合、空文字返却
				if ((seikyUcwk.get(ECH0101B010CBSMsg1List.PRC_GRP_CD) != null && seikyUcwk.get(ECH0101B010CBSMsg1List.PRC_GRP_CD).equals("51"))
						&& ((String)seikyUcwk.get(ECH0101B010CBSMsg1List.USE_ENDYMD) != null && ((String)seikyUcwk.get(ECH0101B010CBSMsg1List.USE_ENDYMD)).length() == 8)
						&& ((String)seikyUcwk.get(ECH0101B010CBSMsg1List.SEIKY_YM) != null && ((String)seikyUcwk.get(ECH0101B010CBSMsg1List.SEIKY_YM)).length() == 6)
						&& (((String)seikyUcwk.get(ECH0101B010CBSMsg1List.USE_ENDYMD)).substring(0,6).compareTo((String)seikyUcwk.get(ECH0101B010CBSMsg1List.SEIKY_YM)) < 0)
					)
				{
					seikyUcwkInfMap.put(COL_RIYO_KIKAN, BLANK);
				}
				else
				{
					seikyUcwkInfMap.put(COL_RIYO_KIKAN, JCHCommonFormatUtil.convRiyoKikan((String)seikyUcwk.get(ECH0101B010CBSMsg1List.USE_KIKAN)));
				}
				/*---< ANK-4323-00-00 MOD end >---*/
			}
			else
			{
				seikyUcwkInfMap.put(COL_RIYO_KIKAN, BLANK);
			}
			
			// 料金項目名称の初期化
			StringBuilder prcKmkNm = new StringBuilder(replaceNull(seikyUcwk.get(ECH0101B010CBSMsg1List.PRC_KMK_NM)));
			String strPrcKmkNm = prcKmkNm.toString();
			// ANK-3586-00-00 ADD START
			// 料金項目コードが"00900940601"(＜当月ご請求料金＞)で隔月請求スキップフラグが"2"(合算対象、請求なし月)の場合、
			if (JACStrConst.PRC_KMK_CD_SEIKY_AMNT_SARCH.equals(seikyUcwk.get(ECH0101B010CBSMsg1List.PRC_KMK_CD))
					&& JACStrConst.KAKGT_SEIKY_SKIP_FLG_SKIP_M.equals(seikyUcwk.get(ECH0101B010CBSMsg1List.KAKGT_SEIKY_SKIP_FLG)))
			{
				// 料金項目名称に"（翌月合算）"を付加
				strPrcKmkNm += PRC_KMK_NM_SKIP_M_SUFFIX;
			}
			// ANK-3586-00-00 ADD END

			/*---< ANK-2829-00-00 Add start >---*/
			// CMP請求内訳表示識別区分の設定
			// 初期値(0：ブレイクなし)を設定
			seikyUcwkInfMap.put(COL_UTWK_HYJI_SKBT_KBN, UTWK_HYJI_BREAK_OFF);

			// 「NO」に登録証Noが設定されている場合
			if (!BLANK.equals(seikyUcwkInfMap.get(COL_NO)))
			{
				// 1：ブレイクありを設定
				seikyUcwkInfMap.put(COL_UTWK_HYJI_SKBT_KBN, UTWK_HYJI_BREAK_ON);
				
			}
			else
			{
				// 料金項目がCMP請求内訳ブレイクあり対象料金項目かどうかを判定
				// CMP請求内訳ブレイクあり対象料金項目リストの取得
				ArrayList<HashMap<String, Object>> chife054Kmk1Map = (ArrayList<HashMap<String, Object>>)inMap.get(COL_EZM0321B010LIST1);
				for (int i=0; i < chife054Kmk1Map.size(); i++)
				{
					String chife054Kmk1 = (String) chife054Kmk1Map.get(i).get("work_param_sette_value");
					// CMP請求内訳ブレイクあり対象料金項目の場合
					if (chife054Kmk1.equals((String)seikyUcwk.get(ECH0101B010CBSMsg1List.PRC_KMK_CD)) || chife054Kmk1.equals(key))
					{
						// 1：ブレイクありを設定
						seikyUcwkInfMap.put(COL_UTWK_HYJI_SKBT_KBN, UTWK_HYJI_BREAK_ON);
					}
				}
			}
			
			// CMP請求表示行識別区分の設定
			// 初期値(1：タイトル行)を設定
			seikyUcwkInfMap.put(COL_UTWK_HYJIGYO_SKBT_KBN, COL_UTWK_HYJIGYO_TITLE);

			// 「料金項目名称」が全角スペースで始まる(＝インデント数が1以上)場合
			// 「料金項目名称」が空の場合
			if (strPrcKmkNm != null && strPrcKmkNm.trim().length() == 0)
			{
				// 2：内訳行を設定
				seikyUcwkInfMap.put(COL_UTWK_HYJIGYO_SKBT_KBN, COL_UTWK_HYJIGYO_DESC);
			}
			else if (seikyUcwk.get(ECH0101B010CBSMsg1List.INDENT_CNT) != null && Integer.parseInt(seikyUcwk.get(ECH0101B010CBSMsg1List.INDENT_CNT).toString()) >= 1)
			{
				// 2：内訳行を設定
				seikyUcwkInfMap.put(COL_UTWK_HYJIGYO_SKBT_KBN, COL_UTWK_HYJIGYO_DESC);
				
			}
			else
			{
				// CMP請求表示行識別区分：内訳行対象料金項目かどうかを判定
				// CMP請求表示行識別区分：内訳行対象料金項目リストの取得
				ArrayList<HashMap<String, Object>> chife054Kmk2Map = (ArrayList<HashMap<String, Object>>)inMap.get(COL_EZM0321B010LIST2);
				for (int i=0; i < chife054Kmk2Map.size(); i++)
				{
					String chife054Kmk2 = (String) chife054Kmk2Map.get(i).get("work_param_sette_value");
					// CMP請求表示行識別区分：内訳行対象料金項目の場合
					if (chife054Kmk2.equals((String)seikyUcwk.get(ECH0101B010CBSMsg1List.PRC_KMK_CD)) || chife054Kmk2.equals(key))
					{
						// 2：内訳行を設定
						seikyUcwkInfMap.put(COL_UTWK_HYJIGYO_SKBT_KBN, COL_UTWK_HYJIGYO_DESC);
					}
				}
			}
			/*---< ANK-2829-00-00 Add end >---*/

			// 料金項目名称（すでに全角に変換済）が30文字を超える場合は切り捨てる
			if (prcKmkNm.length() > 30)
			{
				strPrcKmkNm = prcKmkNm.substring(0, 30);
			}

			// 請求内訳情報マップに料金項目名称を編集する
			seikyUcwkInfMap.put(COL_RYOUKN_MI, strPrcKmkNm);

			if (gkKeyList.contains(key))
			{
				// 請求内訳情報マップに内訳表示区分(合計)を編集する
				seikyUcwkInfMap.put(COL_UTWK_HYJI_KBN, UTWK_HYJI_KBN_0);
			}
			else
			{
				// 請求内訳情報マップに内訳表示区分(明細)を編集する
				seikyUcwkInfMap.put(COL_UTWK_HYJI_KBN, UTWK_HYJI_KBN_1);
			}
			
			// 後続処理のため合算請求年月をマップに追加
			seikyUcwkInfMap.put(GSAN_SEIKY_YM, (String)seikyUcwk.get(ECH0101B010CBSMsg1List.GSAN_SEIKY_YM));
			
			// 請求書内訳結果リストに請求内訳情報マップを追加
			seikyUcwkResultList.add(seikyUcwkInfMap);
		}

// DELETE START 2013.11.11 ANK-1750-00-00
//		// 整理番号マップサイズ
//		int seiriNoMapSize = seiriNoMap.size();
// DELETE END 2013.11.11 ANK-1750-00-00

		// すでに出力済みの「"整理番号"＋"合算請求年月"」をキーとして保持するmap(重複は上書き)
		HashMap<String, String> outputSeriNoMap = new HashMap<String, String>();

		// 請求書内訳結果リスト.ＮＯが設定された後、ＮＯを設定しなおす
		for (HashMap<String, Object> seikyUcwk : seikyUcwkResultList)
		{
// DELETE START 2013.11.11 ANK-1750-00-00
//			// 整理番号が1種類の場合は整理番号の値を消去
//			if (seiriNoMapSize == 1)
//			{
//				seikyUcwk.put(COL_NO, "");
//			}
//			else
//			{
// DELETE END 2013.11.11 ANK-1750-00-00
			String beanSeiriNo = (String)seikyUcwk.get(COL_NO);

			if (!JCRUtilCommon.isNull(beanSeiriNo))
			{
				// 合算請求年月を取得
				String gsanSeikyYm = (String)seikyUcwk.get(GSAN_SEIKY_YM);
				
				// マップキーを作成
				String sKey = beanSeiriNo.concat(gsanSeikyYm);
				
				// 出力済みの「"整理番号"＋"合算請求年月"」と同一の場合は請求内訳情報の整理番号を消去する
				if (outputSeriNoMap.containsKey(sKey))
				{
					seikyUcwk.put(COL_NO, "");
				}
				outputSeriNoMap.put(sKey, null);
			}
// DELETE START 2013.11.11 ANK-1750-00-00
//			}
// DELETE END 2013.11.11 ANK-1750-00-00
		}

		// 請求書内訳結果リストを返却
		return seikyUcwkResultList;
	}

	/**
	 * 請求内訳情報マップの金額を編集する
	 * 
	 * @param seikyUcwkInfMap 請求内訳情報マップ
	 * @param seikyUcwk 請求内訳情報
	 * @param kngkDspColNms 金額表示カラム名を格納した配列
	 * @param bothOutputKeyList 双方出力判別用キーリスト
	 * @param key 判別用キー
	 */
	@SuppressWarnings("unchecked")
	private void editSeikyUcwkInfKngk(HashMap<String, Object> seikyUcwkInfMap, HashMap<String, Object> seikyUcwk,
			String[] kngkDspColNms, List<String> bothOutputKeyList, String key)
	{
		// 金額編集カラム名を要素番号を取得
		// ECH0101B010CBSMsg1List.AMNT_DSP_COLUM_CNT ->「金額欄の表示カラム数」
		int index = Integer.parseInt(replaceNull(seikyUcwk.get(ECH0101B010CBSMsg1List.AMNT_DSP_COLUM_CNT), ZERO)) - 1;
		for (int i = 0; i < kngkDspColNms.length; i++)
		{
			// 金額表示カラム名を取得
			// kngkDspColNms[0] = "編集金額"
			// kngkDspColNms[1] = "編集内訳金額"
			String kngkDspColNm = kngkDspColNms[i];
			// 編集先項目名の判定
			if (i == index || kngkDspColNms.length <= index || bothOutputKeyList.contains(key))
			{
				// 金額を取得
				String amnt = replaceNull(seikyUcwk.get(ECH0101B010CBSMsg1List.AMNT));
				if (BLANK.equals(amnt))
				{
					// 請求内訳情報マップに金額を編集して設定する
					seikyUcwkInfMap.put(kngkDspColNm, BLANK);

					/*---< ANK-2830-00-00 Add start >---*/
					// カラムが「編集金額」の場合
					if (COL_KNGK.equals(kngkDspColNm))
					{
						// 「編集金額表示区分」にブランクを設定する
						seikyUcwkInfMap.put(COL_FMT_KBN_KNGK, BLANK);

					}
					// カラムが「編集内訳金額」の場合
					else
					{
						// 「編集内訳金額表示区分」にブランクを設定する
						seikyUcwkInfMap.put(COL_FMT_KBN_KNGK_UTWK, BLANK);
						
					}
					/*---< ANK-2830-00-00 Add end >---*/

				}
				else
				{
					/*---< ANK-2829-00-00/ANK-2830-00-00 Del start >---*/
					//v39.00.00 2018/07/12 Del Start
//					// 金額の編集
//					amnt = JPCUtilCommon.formatNumber(amnt);
					/*---< ANK-2829-00-00/ANK-2830-00-00 Del end >---*/

					seikyUcwkInfMap.put(kngkDspColNm, amnt);	/*---< ANK-2829-00-00/ANK-2830-00-00 Add >---*/

					// 金額編集パターンコードが"1"（カッコあり）の場合
					if (AMNT_HENSHU_PTN_CD_KAKKO_ARI.equals(seikyUcwk.get(ECH0101B010CBSMsg1List.AMNT_HENSHU_PTN_CD)))
					{
						/*---< ANK-2830-00-00 Mod start >---*/
//						// 請求内訳情報マップに金額を編集して設定する
//						seikyUcwkInfMap.put(kngkDspColNm, KNGK_KAKKO_ARI_L + amnt + KNGK_KAKKO_ARI_R);

						// カラムが「編集金額」の場合
						if (COL_KNGK.equals(kngkDspColNm))
						{
							// 編集金額表示区分に「2(かっこ付きで表示)」を設定する
							seikyUcwkInfMap.put(COL_FMT_KBN_KNGK, FMT_KBN_KNGK_ADD_KAKKO);
							
						}
						// カラムが「編集内訳金額」の場合
						else
						{
							// 編集内訳金額表示区分に「2(かっこ付きで表示)」を設定する
							seikyUcwkInfMap.put(COL_FMT_KBN_KNGK_UTWK, FMT_KBN_KNGK_ADD_KAKKO);
							
						}
						/*---< ANK-2830-00-00 Mod end >---*/

					}
					// 金額編集パターンコードが"2"（カッコインデントあり）の場合
					else if(JACStrConst.AMNT_HENSHU_PTN_CD_END_SPASE.equals(seikyUcwk.get(ECH0101B010CBSMsg1List.AMNT_HENSHU_PTN_CD)))
					{
						/*---< ANK-2830-00-00 Mod start >---*/
//						// 請求内訳情報マップに金額を編集して設定する
//						seikyUcwkInfMap.put(kngkDspColNm, KNGK_KAKKO_NASI_L + amnt + KNGK_KAKKO_NASI_R);
						
						// カラムが「編集金額」の場合
						if (COL_KNGK.equals(kngkDspColNm))
						{
							// 編集金額表示区分に「1(編集なし)」を設定する
							seikyUcwkInfMap.put(COL_FMT_KBN_KNGK, FMT_KBN_KNGK_NASI);
							
						}
						// カラムが「編集内訳金額」の場合
						else
						{
							// 編集内訳金額表示区分に「1(編集なし)」を設定する
							seikyUcwkInfMap.put(COL_FMT_KBN_KNGK_UTWK, FMT_KBN_KNGK_NASI);
							
						}
						/*---< ANK-2830-00-00 Mod end >---*/

					}
					// 上記以外の場合
					else
					{
						/*---< ANK-2830-00-00 Mod start >---*/
//						// 請求内訳情報マップに金額を編集して設定する
//						seikyUcwkInfMap.put(kngkDspColNm, KNGK_KAKKO_NASI_L + amnt);
						// カラムが「編集金額」の場合
						if (COL_KNGK.equals(kngkDspColNm))
						{
							// 編集金額表示区分に「1(編集なし)」を設定する
							seikyUcwkInfMap.put(COL_FMT_KBN_KNGK, FMT_KBN_KNGK_NASI);
							
						}
						// カラムが「編集内訳金額」の場合
						else
						{
							// 編集内訳金額表示区分に「1(編集なし)」を設定する
							seikyUcwkInfMap.put(COL_FMT_KBN_KNGK_UTWK, FMT_KBN_KNGK_NASI);
							
						}
						/*---< ANK-2830-00-00 Mod end >---*/

					}
				}
			}
			else
			{
				// 請求内訳情報マップに金額を編集して設定する
				seikyUcwkInfMap.put(kngkDspColNm, BLANK);

				/*---< ANK-2830-00-00 Add start >---*/
				// カラムが「編集金額」の場合
				if (COL_KNGK.equals(kngkDspColNm)){
					// 「編集金額表示区分」にブランクを設定する
					seikyUcwkInfMap.put(COL_FMT_KBN_KNGK, BLANK);

				// カラムが「編集内訳金額」の場合
				} else {
					// 「編集内訳金額表示区分」にブランクを設定する
					seikyUcwkInfMap.put(COL_FMT_KBN_KNGK_UTWK, BLANK);
					
				}
				/*---< ANK-2830-00-00 Add end >---*/

			}
		}
	}
	
	/**
	 * 整理番号を編集する。
	 * 
	 * @param seiriNo 整理番号
	 * @return 編集後の整理番号
	 */
	private String editSeiriNo(Object seiriNo)
	{
		String str = replaceNull(seiriNo).trim();
		if (str.length() >= 10)
		{
			String str1 = str.substring(0, 10);
			String str2 = str.substring(10).trim();

			// 11桁目から4桁(最後まで)の前ゼロを削除する
			try
			{
				long no = Long.parseLong(str2);
				str2 = String.valueOf(no);
			}
			catch(NumberFormatException e)
			{
				// 数値変換できなかった場合はそのまま返す
			}
			return str1.concat(SEIRI_NO_DIV).concat(str2);
		}
		else
		{
			return str;
		}
	}
	
	/**
	 * NULLを空文字に置き換える
	 * 
	 * @param obj null又は文字列
	 * @param str 置換文字列
	 * @return 文字列
	 */
	private String replaceNull(Object obj, String str)
	{
		if (obj == null)
		{
			return str;
		}
		else
		{
			return obj.toString();
		}
	}
	
	/**
	 * NULLを空文字に置き換える
	 * 
	 * @param obj null又は文字列
	 * @return 文字列
	 */
	private String replaceNull(Object obj)
	{
		return replaceNull(obj, BLANK);
	}

	//v33.00.01 OM-2017-0001006 Add Start
	
	/**お客様一意照会情報を取得
	 * @param sysid SYSID
	 * @param unyoYMD 運用適用日
	 * 
	 * @return Object[][]
	 */
	private Object[][] editInMsgECK0011A010(String sysid, String unyoYMD)
	{
		Object[][] eck0011a010In = {
				{ECK0011A010CBSMsg.TEMPLATEID,       TEMPLATE_ID_ECK0011A010},
				{ECK0011A010CBSMsg.FUNC_CODE,        JPCModelConstant.FUNC_CD_2},
				{ECK0011A010CBSMsg.KEY_SYSID,        sysid},
				{ECK0011A010CBSMsg.KEY_RSV_APLY_YMD, unyoYMD},
			};
		return eck0011a010In;
	}	
	
	/**
	 * SC(サービスインターフェイス）を呼び出す。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param mappingData
	 * @return CAANMsg
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg callSC(SessionHandle handle,
							ServiceComponentRequestInvoker scCall,
							IRequestParameterReadWrite param,
							String dataMapKey,
							Object[][] mappingData) throws Exception
	{
		HashMap<String, Object> paramMap = editInMsg(param, mappingData);
		
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg msg = templates[0];
		
		// リターンコード取得
		int returnCode = (Integer)result.get(JCMConstants.RET_CD_INT_KEY);
		
		int templateStatus = msg.getInt(ECK0011A010CBSMsg.STATUS);
		
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		
		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}
		
		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}
		
		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}
		
		setErrorInf(msg, (HashMap<String, Object>)param.getData(dataMapKey));
		
		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}
		
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errList));
		
		/* ◇処理結果の判定*/
		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = result.get(JCMConstants.RET_CD_INT_KEY).toString();
		Integer status = msg.getInt(JCMConstants.STATUS_INT_KEY);
		
		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode) && 0 == status.intValue()))
		{
			SCCallException scCallEx = new SCCallException("戻り値不正", rtnCode, status);
			throw scCallEx;
		}
		return msg;
	}	

	/**
	 * @param param
	 * @param mappingData
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsg(IRequestParameterReadWrite param,
												Object[][] mappingData) throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		// 【取得元：電文ヘッダ(ヘッダ)】
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());
		
		// 【取得元：ユーザエリア(コントロールマップ)】
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		
		String svcIf = (String)mappingData[0][1];
		
		CAANMsg template = new CAANMsg(String.format("eo.ejb.cbs.cbsmsg.%sCBSMsg", svcIf));
		
		// オペレータID
		template.set(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		// 運用日付
		template.set(JCMConstants.OPERATE_DATE_KEY, param.getControlMapData(SCControlMapKeys.OPE_DATE));
		// 運用日時
		template.set(JCMConstants.OPERATE_DATETIME_KEY, param.getControlMapData(SCControlMapKeys.OPE_TIME));
		
		for (int i = 0; i < mappingData.length; i++)
		{
			if ("".equals(mappingData[i][1]))
			{
				template.setNull((String)mappingData[i][0]);
			}
			else
			{
				template.set((String)mappingData[i][0], mappingData[i][1]);
			}
		}
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		return paramMap;
	}

	/**
	 * エラー情報を設定します。
	 * 
	 * @param msg
	 * @param map
	 * 
	 */
	@SuppressWarnings("unchecked")
	private void setErrorInf(CAANMsg msg, HashMap<String, Object> map)
	{
		Iterator<String> msgKey = msg.getSchema().getSchemaKeySet().iterator();
		
		while (msgKey.hasNext())
		{
			String key = msgKey.next();
			
			if (key.endsWith("_err"))
			{
				if (!msg.isNull(key))
				{
					if (!map.containsKey(key))
					{
						map.put(key, msg.getString(key));
					}
				}
			}
		}
	}
	//v33.00.01 OM-2017-0001006 Add End

	/*---< ANK-2829-00-00 Add start >---*/
	/**
	 * サービスIF実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 * 
	 * @param param リクエストパラメータ
	 * @param inMap 入力情報
	 * @param templates テンプレート
	 * @param returnCode リターンコード
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	private IRequestParameterReadWrite editErrorInfoEZM0321B010(IRequestParameterReadWrite param, 
																	HashMap<String, Object> inMap,
																	CAANMsg[] templates,
																	int returnCode) throws RequestParameterException
	{
		for (int i = 0; i < templates.length; i++)
		{
		CAANMsg template = templates[i];

			int templateStatus = template.getInt(EZM0321B010CBSMsg.STATUS);
			if (returnCode != 0)
			{
				templateStatus = 9000;
			}

			if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
			{
				templateStatus = 0;
			}

			int bpStatus = 0;
			Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
			if (obj == null)
			{
				bpStatus = -1;
			}
			else
			{
				bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
			}

			if (templateStatus > bpStatus)
			{
				// BPにサービスコンポーネントのステータスを設定する。
				String formatStatus = String.format("%1$04d", templateStatus);
				String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
				param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
				param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
			}
		
			// イベントコードエラー → 業務パラメータ管理一意照会.業務パラメータＩＤエラー
			if (!template.isNull(EZM0321B010CBSMsg.KEY_WORK_PARAM_ID_ERR))
			{
				if (!inMap.containsKey(EZM0321B010CBSMsg.KEY_WORK_PARAM_ID_ERR))
				{
					inMap.put(EZM0321B010CBSMsg.KEY_WORK_PARAM_ID_ERR, template.getString(EZM0321B010CBSMsg.KEY_WORK_PARAM_ID_ERR));
				}
			}
		}
		
		return param;
	}
	
	/**
	 * 上りマッピング（業務パラメータ管理一意照会）
	 * 
	 * @param param リクエストパラメータ
	 * @param workParamId 業務パラメータＩＤ
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsgEZM0321B010(IRequestParameterReadWrite param) throws RequestParameterException
	{
		// 共通領域の設定
		HashMap<String, Object> paramMap = editInMsg(param);

		// テンプレート配列の作成
		CAANMsg[] templates = new CAANMsg[WK_PARA_ID2S.length];
		
		// 業務パラメータ数分繰り返す
		for (int i = 0; i < WK_PARA_ID2S.length; i++)
		{
			// 業務パラメータを取得
			String wkParaId = WK_PARA_ID2S[i];

			// テンプレートを作成
			CAANMsg template = new CAANMsg(EZM0321B010CBSMsg.class.getName());

			// テンプレートID
			template.set(EZM0321B010CBSMsg.TEMPLATEID, EZM0321B010);

			// 機能コード
			template.set(EZM0321B010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

			// オペレータID
			template.set(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

			// 運用日付
			template.set(JCMConstants.OPERATE_DATE_KEY, param.getControlMapData(SCControlMapKeys.OPE_DATE));

			// 運用日時
			template.set(JCMConstants.OPERATE_DATETIME_KEY, param.getControlMapData(SCControlMapKeys.OPE_TIME));

			// 業務パラメータＩＤ → 業務パラメータ管理一意照会.業務パラメータＩＤ
			if (JCRUtilCommon.isNull(wkParaId))
			{
				template.setNull(EZM0321B010CBSMsg.KEY_WORK_PARAM_ID);
			}
			else
			{
				template.set(EZM0321B010CBSMsg.KEY_WORK_PARAM_ID, wkParaId);
			}
		
			// テンプレート配列にテンプレートを格納
			templates[i] = template;
		}
		
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}
	
	/**
	 * 下りマッピング（業務パラメータ管理一意照会）
	 * 
	 * @param msgList
	 * @param param リクエストパラメータ
	 * @param dataMap
	 * 
	 * @return IRequestParameterReadWrite
	 * 
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editOutMsgEZM0321B010(Map<?, ?> msgList,
																		IRequestParameterReadWrite param,
																		HashMap<String, Object> dataMap) throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		
		// リターンコード取得
		Object returnCode = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// エラー情報の設定
		IRequestParameterReadWrite retParam = this.editErrorInfoEZM0321B010(param, dataMap, templates, (Integer)returnCode);
		
		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)retParam.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}
		
		// コントロールマップに設定
		retParam.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));
		
		/* ◇処理結果の判定 */
		//取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = msgList.get(JCMConstants.RET_CD_INT_KEY).toString();
		String status = (String)param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		
		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode) && 0 == Integer.parseInt(status))) 
		{
			SCCallException scCallEx = new SCCallException("INVALID_RETURN_MESSAGE", rtnCode, Integer.parseInt(status));
			throw scCallEx;
		}
		
		for (int i = 0; i < COL_EZM0321B010LISTS.length; i++)
		{
			ArrayList resultList = new ArrayList();
			dataMap.put(COL_EZM0321B010LISTS[i], resultList);
			CAANMsg[] msg1List = templates[i].getCAANMsgList(EZM0321B010CBSMsg.EZM0321B010CBSMSG1LIST);
		
			if (msg1List != null)
			{
				// 業務パラメータ管理一意明細件数分繰り返す
				for (CAANMsg msg : msg1List)
				{
					HashMap resultMap = new HashMap();
					resultList.add(resultMap);
			
					// 業務パラメータＩＤ ← 業務パラメータ管理一意明細.業務パラメータＩＤ
					resultMap.put(EZM0321B010CBSMsg1List.WORK_PARAM_ID, msg.getString(EZM0321B010CBSMsg1List.WORK_PARAM_ID));

					// 業務パラメータ設定値 ← 業務パラメータ管理一意明細.業務パラメータ設定値
					resultMap.put(EZM0321B010CBSMsg1List.WORK_PARAM_SETTE_VALUE, msg.getString(EZM0321B010CBSMsg1List.WORK_PARAM_SETTE_VALUE));
				}
			}
		}
		
		return retParam;
	}
	/*---< ANK-2829-00-00 Add end >---*/
	// ANK-3561-00-00 ADD START
	/**請求契約一覧照会(CMP)情報を取得
	 * @param sysid SYSID
	 * @param func_code 機能コード
	 * @return Object[][]
	 */
	private Object[][] editInMsgEKK0491B008(String sysid, String func_code)
	{
		Object[][] ech0891b010In = {
				{ECH0891B010CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0491B008},
				{ECH0891B010CBSMsg.FUNC_CODE,           func_code},
				{ECH0891B010CBSMsg.KEY_SYSID,           sysid}
		};
		return ech0891b010In;
	}
	// ANK-3561-00-00 ADD END
}
