/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUTelOptSvcMskmCmpCC
*   ソースファイル名：JFUTelOptSvcMskmCmpCC.java
*   作成者          ：富士通
*   日付            ：2020年05月30日
*＜機能概要＞
*   電話オプションパック申込解約（CMP）コモンコンポーネント部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*  v50.00.00    2020/05/30   FJ)張本     ANK-3862-00-00_【CMP】WEB電話オプション外出し対応
*  v50.00.01    2020/08/06   FJ)張本     IT1-2020-0000041_050番号エイジング登録漏れ
*  v50.00.02    2020/08/24   FJ)舘山     IT2-2020-0000014_横並び対応
*  v50.00.03    2020/08/25   FJ)張本     ANK-3862-05-00_【WEB電話オプション外出し対応】電話パックの複数登録チェックの追加
*  v50.00.04    2020/11/20   FJ)張本     OM-2020-0001416_課金開始後の電話オプション解約不正
*  v52.00.00    2021/01/12   FJ)西川     ANK-3975-00-00_【eo】照査前画面への転送電話項目追加
*  v53.00.00    2021/04/16   FJ)張本     ANK-4009-00-00_CX戦略WG方針対応
*  v61.00.00	2023/04/03   FJ)張本     ANK-4315-00-00【eo定期】eo光ホームゲートウェイ導入対応
*  v71.00.00    2024/05/13   FJ)舘山    【#84334】HGW瑕疵内障害
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;

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.exception.CCException;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.ErrorInfoMapKeys;
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 com.fujitsu.futurity.model.common.check.DatetimeCheck;
import com.fujitsu.futurity.model.common.check.HalfCharCheck;
import com.fujitsu.futurity.model.common.check.LengthCheck;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JFUCommonUtil;
import eo.common.util.JPCUtilCommon;
import eo.ejb.cbs.cbsmsg.EDK0011B090CBSMsg;
import eo.ejb.cbs.cbsmsg.EDK0011B090CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0021C060CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B508CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B508CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0191A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0191A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0351B003CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351B003CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0351C220CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351C240CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351C241CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351C250CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0371B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0371B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0371C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0371C030CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0371C041CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0371D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0371D011CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0401C150CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401C170CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401C171CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401C180CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0431C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0431C030CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0431C041CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0431D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0431D011CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0451B509CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0451B509CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1091D011CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811B503CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0111C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0111D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0121B040CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0121B040CBSMsg1List;

/**
 * 電話オプションサービス契約登録・解約（CMP）コモンコンポーネント部品
 * <br>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class JFUTelOptSvcMskmCmpCC extends JKKTelSelectOpPackOperateCC
{

	/** テンポラリテンプレート領域キー識別子 */
	private static final String TEMP_TEMPLATE_PRIFIX = "TEMP_TEMPLATE_";
	/** テンポラリテンプレート領域キー識別子区切文字 */
	private static final String TEMP_TEMPLATE_PRIFIX_SEP = "_";

	/** IN項目：機能コード */
	private static final String IN_FUNC_CD = "func_cd";
	/** IN項目：SYSID */
	private static final String IN_SYSID = "in_sysid";
	/** IN項目：サービス契約番号 */
	private static final String IN_SVC_KEI_NO = "in_svc_kei_no";
	/** IN項目：サービス契約回線内訳番号 */
	private static final String IN_SVC_KEI_KAISEN_UCWK_NO = "in_svc_kei_kaisen_ucwk_no";
	/** IN項目：サービス契約内訳番号 */
	private static final String IN_SVC_KEI_UCWK_NO = "in_svc_kei_ucwk_no";
	/** IN項目：電話番号 */
	private static final String IN_TELNO = "in_telno";
	/** IN項目：最終更新年月日時分秒 */
	private static final String IN_LAST_UPD_DTM = "last_upd_dtm";
	/** IN項目：オプションパックリスト */
	private static final String IN_OPT_PACK_LIST = "op_pack_list";
	/** IN項目：オプションリスト */
	private static final String IN_OP_SVC_MSKM_LIST = "option_service_list";

	/** レスポンスキー 処理結果 */
	private static final String OUT_RESULT = "return_code";
	/** レスポンスキー 使用可能電話番号 */
	private static final String OUT_050_TELNO = "n_050_telno";

	/** 返却項目(非課金判定部品):サービス課金終了日 */
	private static final String RET_PARAM_SVC_CHRG_ENDYMD = "svcChrgEndYmd";
	/** 返却項目(非課金判定部品):課金フラグ */
	private static final String RET_PARAM_CHRGFLG = "chrgFlg";

	/** 処理区分 */
	private static final String APP_DIV = "app_div";
	/** パック区分 */
	private static final String PACK_DIV = "pack_div";
	/** オプション・サブオプションサービスコード */
	private static final String OP_SBOP_SVC_CD = "op_sbop_svc_cd";
	/** オプションサービスコード */
	private static final String OP_SVC_CD = "op_svc_cd";

	/** サービス契約内訳ステータス */
	private static final String EKK0161_SVC_KEI_UCWK_STAT = "kk0161_svcKeiUcwkStat";
	/** サービス課金開始日 */
	private static final String EKK0161_SVC_CHRG_STAYMD = "kk0161_svcChrgStaymd";

	/** テンプレートID(EKK0451B509) 割引サービス契約一覧照会（サービス契約内訳番号）(機能コード：1) */
	private static final String TEMPLATE_ID_EKK0451B509 = "EKK0451B509";

	/* ■□ EKK0011D020_申込内容承認登録SC ■□ */
	/** テンプレートID(申込内容承認登録) */
	private static final String TEMP_ID_EKK0011D020 = "EKK0011D020";
	/** テンプレートID(申込内容承認登録明細) */
	private static final String TEMP_ID_DTL_EKK0011D020 = EKK0011D020CBSMsg.EKK0011D020CBSMSG1LIST;
	/** IN項目リスト(申込内容承認登録) */
	private static final List<String> IN_COL_LIST_EKK0011D020 =
			Arrays.asList(EKK0011D020CBSMsg.SYSID, EKK0011D020CBSMsg.MSKM_SBT_CD, EKK0011D020CBSMsg.MSKMSHO_ARIV_YMD, EKK0011D020CBSMsg.MSKM_UK_DTM,
					EKK0011D020CBSMsg.MSKM_UK_TNT_USER_ID, EKK0011D020CBSMsg.MSKM_YMD, EKK0011D020CBSMsg.TTL_BUSINESS_CENTER_UK_NO,
					EKK0011D020CBSMsg.TTL_BUSINESS_MSKM_OPT_CD, EKK0011D020CBSMsg.MSKM_RRKS_TELNO, EKK0011D020CBSMsg.MSKM_JSSIS_SBT_CD,
					EKK0011D020CBSMsg.CUST_YOBO_JIKO, EKK0011D020CBSMsg.TEL_RRK_KIBOD_SBT_CD, EKK0011D020CBSMsg.TEL_RRK_KIBO_TIME_CD,
					EKK0011D020CBSMsg.TAKCHO_KIBOD_SBT_CD, EKK0011D020CBSMsg.TAKCHO_KIBO_TIME_CD, EKK0011D020CBSMsg.KARI_MSKM_FLG,
					EKK0011D020CBSMsg.REFERER, EKK0011D020CBSMsg.KEPCO_CUSTINFO_JUJU_DOI_UM, EKK0011D020CBSMsg.SHOSA_BF_RRK_JIKO_YH,
					EKK0011D020CBSMsg.SHOSA_BF_RRK_JIKO, EKK0011D020CBSMsg.USE_SVC_KEIZK_SBT_CD, EKK0011D020CBSMsg.CONSMBSN_MSKM_STAT_SKBT_CD,
					EKK0011D020CBSMsg.UK_TNTSHA_SKBT_CD, EKK0011D020CBSMsg.KOJI_REQ_INFO_RRK_JIKO, EKK0011D020CBSMsg.MSKM_ROUTE_SKBT_CD,
					EKK0011D020CBSMsg.AGNT_MSKM_TRTG_UM, EKK0011D020CBSMsg.IDO_DIV);
	/** IN項目リスト(申込内容承認登録・明細部) */
	private static final List<String> IN_COL_LIST_EKK0011D020_DTL =
			Arrays.asList(EKK0011D020CBSMsg1List.MSKMSHO_NO, EKK0011D020CBSMsg1List.WEB_UK_NO, EKK0011D020CBSMsg1List.MSKM_FORM_CD,
					EKK0011D020CBSMsg1List.MSKM_DTL_SBT_CD, EKK0011D020CBSMsg1List.RRKS_KTAI_TELNO, EKK0011D020CBSMsg1List.RRKS_OFFC_NM,
					EKK0011D020CBSMsg1List.DT_RRKS_TELNO, EKK0011D020CBSMsg1List.NEW_MSKM_SBT_CD, EKK0011D020CBSMsg1List.MSKM_OPTNTY_CD,
					EKK0011D020CBSMsg1List.TAKCHO_KIBO_APO_KIGEN_YMD, EKK0011D020CBSMsg1List.KOJI_APO_RRKS_SHITEI_CD,
					EKK0011D020CBSMsg1List.KOJI_APO_RRKS_TELNO, EKK0011D020CBSMsg1List.RRK_JIKO_ADD_DTM, EKK0011D020CBSMsg1List.MSKM_RRKS_MLAD,
					EKK0011D020CBSMsg1List.KOJI_PRG_TCHI_MLAD, EKK0011D020CBSMsg1List.RRK_JIKO, EKK0011D020CBSMsg1List.KJSC_TCH_KTAI_MLAD,
					EKK0011D020CBSMsg1List.ML_SEND_JGI_FLG, EKK0011D020CBSMsg1List.ML_SEND_JGI_RSN_MEMO, EKK0011D020CBSMsg1List.BMP_MSKM_RRKS_TLN,
					EKK0011D020CBSMsg1List.OP_SVC_HKTGI_UM, EKK0011D020CBSMsg1List.DSL_ATICLE_SOHU_KIBO_UM, EKK0011D020CBSMsg1List.RRK_WAY_HOKI,
					EKK0011D020CBSMsg1List.NEWCONST_BUKKEN_CD, EKK0011D020CBSMsg1List.HUKKAT_ANKEN_FLG, EKK0011D020CBSMsg1List.SAME_EQUIP_RE_MSKM_CD,
					EKK0011D020CBSMsg1List.HNIN_CFM_ATICLE_SBT_CD, EKK0011D020CBSMsg1List.MSKMSHO_SBT_CD, EKK0011D020CBSMsg1List.MAP_TEMP_UM,
					EKK0011D020CBSMsg1List.KCN_STB_MSKM_CNT, EKK0011D020CBSMsg1List.KCN_STB_KIND_CD, EKK0011D020CBSMsg1List.CATID,
					EKK0011D020CBSMsg1List.KEI_HUKA_CD, EKK0011D020CBSMsg1List.MANSION_ID, EKK0011D020CBSMsg1List.MKM_UK_SBT_CD,
					EKK0011D020CBSMsg1List.MSKMSHO_TRAT_IF_TNTSHA_NM, EKK0011D020CBSMsg1List.MANSSBSYS_RNKI_YO_KIJIRAN,
					EKK0011D020CBSMsg1List.MSKMSHO_TRAT_IF_TELNO);
	/** 関連チェックエラー項目(申込内容承認登録) */
	private static final String ERR_COL_EKK0011D020 = null;
	/** SC実行結果取得キー(申込内容承認登録) */
	private static final String TEMP_TEMP_KEY_EKK0011D020 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0011D020 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EKK0011D020_申込明細照査・後続業務依頼SC ■□ */
	/** テンプレートID(申込明細照査・後続業務依頼) */
	private static final String TEMP_ID_EKK0021C060 = "EKK0021C060";
	/** テンプレートID(申込明細照査・後続業務依頼明細) */
	private static final String TEMP_ID_DTL_EKK0021C060 = null;
	/** IN項目リスト(申込明細照査・後続業務依頼) */
	private static final List<String> IN_COL_LIST_EKK0021C060 =
			Arrays.asList(EKK0021C060CBSMsg.MSKM_DTL_NO, EKK0021C060CBSMsg.RRK_JIKO_ADD_DTM, EKK0021C060CBSMsg.KZKWRK_REQYMD,
					EKK0021C060CBSMsg.RRK_JIKO, EKK0021C060CBSMsg.UPD_DTM_BF, EKK0021C060CBSMsg.IDO_DIV, EKK0021C060CBSMsg.TELNO,
					EKK0021C060CBSMsg.DAIHYO_TELNO, EKK0021C060CBSMsg.TELNO_USE_PLACE_NO, EKK0021C060CBSMsg.SIP_USER_ID_DEL_ZUMI_FLG,
					EKK0021C060CBSMsg.TEL_BAS_HOST_ID, EKK0021C060CBSMsg.N_050_OP_TELNO, EKK0021C060CBSMsg.KIKI_NINSHO_ID,
					EKK0021C060CBSMsg.KIKI_NINSHO_ID_PWD);
	/** 関連チェックエラー項目(申込明細照査・後続業務依頼) */
	private static final String ERR_COL_EKK0021C060 = null;

	/* ■□ EKK0371D011_オプションサービス契約＜電話＞登録SC ■□ */
	/** テンプレートID(オプションサービス契約＜電話＞登録) */
	private static final String TEMP_ID_EKK0371D011 = "EKK0371D011";
	/** テンプレートID(オプションサービス契約＜電話＞登録明細) */
	private static final String TEMP_ID_DTL_EKK0371D011 = null;
	/** IN項目リスト(オプションサービス契約＜電話＞登録) */
	private static final List<String> IN_COL_LIST_EKK0371D011 =
			Arrays.asList(EKK0371D011CBSMsg.OP_SVC_CD, EKK0371D011CBSMsg.PCRS_CD, EKK0371D011CBSMsg.PPLAN_CD, EKK0371D011CBSMsg.OYA_KEI_SKBT_CD,
					EKK0371D011CBSMsg.SVC_KEI_NO, EKK0371D011CBSMsg.SVC_KEI_UCWK_NO, EKK0371D011CBSMsg.SYSID, EKK0371D011CBSMsg.MSKM_DTL_NO,
					EKK0371D011CBSMsg.FTRIAL_KANYU_YMD, EKK0371D011CBSMsg.FTRIAL_PRD_ENDYMD, EKK0371D011CBSMsg.HONKANYU_YMD,
					EKK0371D011CBSMsg.HONKANYU_IKO_KIGEN_YMD, EKK0371D011CBSMsg.SVC_USE_STA_KIBO_YMD, EKK0371D011CBSMsg.RSV_TSTA_KIBO_YMD,
					EKK0371D011CBSMsg.PNLTY_HASSEI_CD, EKK0371D011CBSMsg.IDO_DIV, EKK0371D011CBSMsg.N_050_OP_TELNO,
					EKK0371D011CBSMsg.TWRYO_STIAM_TTU_TCHI_STIAM, EKK0371D011CBSMsg.SEIKY_KEI_NO, EKK0371D011CBSMsg.PRC_KMK_CD,
					EKK0371D011CBSMsg.UPD_DTM_BF);
	/** 関連チェックエラー項目(オプションサービス契約＜電話＞登録) */
	private static final String ERR_COL_EKK0371D011 = null;
	/** SC実行結果取得キー(オプションサービス契約＜電話＞登録) */
	private static final String TEMP_TEMP_KEY_EKK0371D011 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0371D011 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EKK0371D010_オプションサービス契約＜電話＞登録SC ■□ */
	/** テンプレートID(オプションサービス契約＜電話＞登録) */
	private static final String TEMP_ID_EKK0371D010 = "EKK0371D010";
	/** テンプレートID(オプションサービス契約＜電話＞登録明細) */
	private static final String TEMP_ID_DTL_EKK0371D010 = null;
	/** IN項目リスト(オプションサービス契約＜電話＞登録) */
	private static final List<String> IN_COL_LIST_EKK0371D010 =
			Arrays.asList(EKK0371D010CBSMsg.OP_SVC_CD, EKK0371D010CBSMsg.PCRS_CD, EKK0371D010CBSMsg.PPLAN_CD, EKK0371D010CBSMsg.OYA_KEI_SKBT_CD,
					EKK0371D010CBSMsg.SVC_KEI_NO, EKK0371D010CBSMsg.SVC_KEI_UCWK_NO, EKK0371D010CBSMsg.SYSID, EKK0371D010CBSMsg.MSKM_DTL_NO,
					EKK0371D010CBSMsg.FTRIAL_KANYU_YMD, EKK0371D010CBSMsg.FTRIAL_PRD_ENDYMD, EKK0371D010CBSMsg.HONKANYU_YMD,
					EKK0371D010CBSMsg.HONKANYU_IKO_KIGEN_YMD, EKK0371D010CBSMsg.SVC_USE_STA_KIBO_YMD, EKK0371D010CBSMsg.RSV_TSTA_KIBO_YMD,
					EKK0371D010CBSMsg.PNLTY_HASSEI_CD, EKK0371D010CBSMsg.IDO_DIV, EKK0371D010CBSMsg.N_050_OP_TELNO,
					EKK0371D010CBSMsg.TWRYO_STIAM_TTU_TCHI_STIAM, EKK0371D010CBSMsg.SEIKY_KEI_NO, EKK0371D010CBSMsg.PRC_KMK_CD,
					EKK0371D010CBSMsg.UPD_DTM_BF);
	/** 関連チェックエラー項目(オプションサービス契約＜電話＞登録) */
	private static final String ERR_COL_EKK0371D010 = null;

	/* ■□ EKK0371C010_オプションサービス契約＜電話＞照査SC ■□ */
	/** テンプレートID(オプションサービス契約＜電話＞照査) */
	private static final String TEMP_ID_EKK0371C010 = "EKK0371C010";
	/** テンプレートID(オプションサービス契約＜電話＞照査明細) */
	private static final String TEMP_ID_DTL_EKK0371C010 = null;
	/** IN項目リスト(オプションサービス契約＜電話＞照査) */
	private static final List<String> IN_COL_LIST_EKK0371C010 =
			Arrays.asList(EKK0371C010CBSMsg.OP_SVC_KEI_NO, EKK0371C010CBSMsg.IDO_DIV, EKK0371C010CBSMsg.SHOSA_DSL_FIN_CD,
					EKK0371C010CBSMsg.N_050_OP_TELNO, EKK0371C010CBSMsg.UPD_DTM_BF);
	/** 関連チェックエラー項目(オプションサービス契約＜電話＞照査) */
	private static final String ERR_COL_EKK0371C010 = null;
	/** SC実行結果取得キー(オプションサービス契約＜電話＞照査) */
	private static final String TEMP_TEMP_KEY_EKK0371C010 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0371C010 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EKK0371C030_オプションサービス契約＜電話＞照査締結SC ■□ */
	/** テンプレートID(オプションサービス契約＜電話＞照査締結) */
	private static final String TEMP_ID_EKK0371C030 = "EKK0371C030";
	/** テンプレートID(オプションサービス契約＜電話＞照査締結明細) */
	private static final String TEMP_ID_DTL_EKK0371C030 = null;
	/** IN項目リスト(オプションサービス契約＜電話＞照査締結) */
	private static final List<String> IN_COL_LIST_EKK0371C030 =
			Arrays.asList(EKK0371C030CBSMsg.OP_SVC_KEI_NO, EKK0371C030CBSMsg.IDO_DIV, EKK0371C030CBSMsg.N_050_OP_TELNO, EKK0371C030CBSMsg.UPD_DTM_BF);
	/** 関連チェックエラー項目(オプションサービス契約＜電話＞照査締結) */
	private static final String ERR_COL_EKK0371C030 = null;
	/** SC実行結果取得キー(オプションサービス契約＜電話＞照査締結) */
	private static final String TEMP_TEMP_KEY_EKK0371C030 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0371C030 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EKK0371C041_オプションサービス契約＜電話＞開始SC ■□ */
	/** テンプレートID(オプションサービス契約＜電話＞開始) */
	private static final String TEMP_ID_EKK0371C041 = "EKK0371C041";
	/** テンプレートID(オプションサービス契約＜電話＞開始明細) */
	private static final String TEMP_ID_DTL_EKK0371C041 = null;
	/** IN項目リスト(オプションサービス契約＜電話＞開始) */
	private static final List<String> IN_COL_LIST_EKK0371C041 =
			Arrays.asList(EKK0371C041CBSMsg.OP_SVC_KEI_NO, EKK0371C041CBSMsg.IDO_DIV, EKK0371C041CBSMsg.N_050_OP_TELNO, EKK0371C041CBSMsg.UPD_DTM_BF,
					EKK0371C041CBSMsg.SKJ_YKGT);
	/** 関連チェックエラー項目(オプションサービス契約＜電話＞開始) */
	private static final String ERR_COL_EKK0371C041 = null;
	/** SC実行結果取得キー(オプションサービス契約＜電話＞開始) */
	private static final String TEMP_TEMP_KEY_EKK0371C041 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0371C041 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EKK0351C241_オプションサービス契約解約SC ■□ */
	/** テンプレートID(オプションサービス契約解約) */
	private static final String TEMP_ID_EKK0351C241 = "EKK0351C241";
	/** テンプレートID(オプションサービス契約解約明細) */
	private static final String TEMP_ID_DTL_EKK0351C241 = null;
	/** IN項目リスト(オプションサービス契約解約) */
	private static final List<String> IN_COL_LIST_EKK0351C241 =
			Arrays.asList(EKK0351C241CBSMsg.OP_SVC_KEI_NO, EKK0351C241CBSMsg.MSKM_DTL_NO, EKK0351C241CBSMsg.RSV_TSTA_KIBO_YMD,
					EKK0351C241CBSMsg.SVC_ENDYMD, EKK0351C241CBSMsg.SVC_CHRG_ENDYMD, EKK0351C241CBSMsg.SVC_DLRE_CD, EKK0351C241CBSMsg.SVC_DLRE_MEMO,
					EKK0351C241CBSMsg.DSL_TNT_USER_ID, EKK0351C241CBSMsg.PNLTY_HASSEI_CD, EKK0351C241CBSMsg.IDO_DIV, EKK0351C241CBSMsg.UPD_DTM_BF,
					EKK0351C241CBSMsg.OP_HKTGI_SK_SVC_KEI_NO, EKK0351C241CBSMsg.WARN_FLG);
	/** 関連チェックエラー項目(オプションサービス契約解約) */
	private static final String ERR_COL_EKK0351C241 = null;
	/** SC実行結果取得キー(オプションサービス契約解約) */
	private static final String TEMP_TEMP_KEY_EKK0351C241 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0351C241 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EKK0351C240_オプションサービス契約解約SC ■□ */
	/** テンプレートID(オプションサービス契約解約) */
	private static final String TEMP_ID_EKK0351C240 = "EKK0351C240";
	/** テンプレートID(オプションサービス契約解約明細) */
	private static final String TEMP_ID_DTL_EKK0351C240 = null;
	/** IN項目リスト(オプションサービス契約解約) */
	private static final List<String> IN_COL_LIST_EKK0351C240 =
			Arrays.asList(EKK0351C240CBSMsg.OP_SVC_KEI_NO, EKK0351C240CBSMsg.MSKM_DTL_NO, EKK0351C240CBSMsg.RSV_TSTA_KIBO_YMD,
					EKK0351C240CBSMsg.SVC_ENDYMD, EKK0351C240CBSMsg.SVC_CHRG_ENDYMD, EKK0351C240CBSMsg.SVC_DLRE_CD, EKK0351C240CBSMsg.SVC_DLRE_MEMO,
					EKK0351C240CBSMsg.DSL_TNT_USER_ID, EKK0351C240CBSMsg.PNLTY_HASSEI_CD, EKK0351C240CBSMsg.IDO_DIV, EKK0351C240CBSMsg.UPD_DTM_BF,
					EKK0351C240CBSMsg.OP_HKTGI_SK_SVC_KEI_NO, EKK0351C240CBSMsg.WARN_FLG);
	/** 関連チェックエラー項目(オプションサービス契約解約) */
	private static final String ERR_COL_EKK0351C240 = null;

	/* ■□ EKK0351C250_オプションサービス契約解約確定SC ■□ */
	/** テンプレートID(オプションサービス契約解約確定) */
	private static final String TEMP_ID_EKK0351C250 = "EKK0351C250";
	/** テンプレートID(オプションサービス契約解約確定明細) */
	private static final String TEMP_ID_DTL_EKK0351C250 = null;
	/** IN項目リスト(オプションサービス契約解約確定) */
	private static final List<String> IN_COL_LIST_EKK0351C250 =
			Arrays.asList(EKK0351C250CBSMsg.OP_SVC_KEI_NO, EKK0351C250CBSMsg.SVC_ENDYMD, EKK0351C250CBSMsg.SVC_CHRG_ENDYMD,
					EKK0351C250CBSMsg.SVC_DLRE_CD, EKK0351C250CBSMsg.SVC_DLRE_MEMO, EKK0351C250CBSMsg.DSL_TNT_USER_ID, EKK0351C250CBSMsg.IDO_DIV,
					EKK0351C250CBSMsg.UPD_DTM_BF, EKK0351C250CBSMsg.DSLJI_CHRG_FLG, EKK0351C250CBSMsg.PLAN_END_SBT_CD);
	/** 関連チェックエラー項目(オプションサービス契約解約確定) */
	private static final String ERR_COL_EKK0351C250 = null;
	/** SC実行結果取得キー(オプションサービス契約解約確定) */
	private static final String TEMP_TEMP_KEY_EKK0351C250 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0351C250 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EKK0351C220_オプションサービス契約キャンセルSC ■□ */
	/** テンプレートID(オプションサービス契約キャンセル) */
	private static final String TEMP_ID_EKK0351C220 = "EKK0351C220";
	/** テンプレートID(オプションサービス契約キャンセル明細) */
	private static final String TEMP_ID_DTL_EKK0351C220 = null;
	/** IN項目リスト(オプションサービス契約キャンセル) */
	private static final List<String> IN_COL_LIST_EKK0351C220 =
			Arrays.asList(EKK0351C220CBSMsg.OP_SVC_KEI_NO, EKK0351C220CBSMsg.MSKM_DTL_NO, EKK0351C220CBSMsg.SVC_CANCEL_RSN_CD,
					EKK0351C220CBSMsg.IDO_DIV, EKK0351C220CBSMsg.UPD_DTM_BF);
	/** 関連チェックエラー項目(オプションサービス契約キャンセル) */
	private static final String ERR_COL_EKK0351C220 = null;
	/** SC実行結果取得キー(オプションサービス契約キャンセル) */
	private static final String TEMP_TEMP_KEY_EKK0351C220 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0351C220 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EKK0431D011_サブオプションサービス契約＜電話＞登録SC ■□ */
	/** テンプレートID(サブオプションサービス契約＜電話＞登録) */
	private static final String TEMP_ID_EKK0431D011 = "EKK0431D011";
	/** テンプレートID(サブオプションサービス契約＜電話＞登録明細) */
	private static final String TEMP_ID_DTL_EKK0431D011 = null;
	/** IN項目リスト(サブオプションサービス契約＜電話＞登録) */
	private static final List<String> IN_COL_LIST_EKK0431D011 =
			Arrays.asList(EKK0431D011CBSMsg.OP_SVC_KEI_NO, EKK0431D011CBSMsg.SBOP_SVC_CD, EKK0431D011CBSMsg.PCRS_CD, EKK0431D011CBSMsg.PPLAN_CD,
					EKK0431D011CBSMsg.MSKM_DTL_NO, EKK0431D011CBSMsg.FTRIAL_KANYU_YMD, EKK0431D011CBSMsg.FTRIAL_PRD_ENDYMD,
					EKK0431D011CBSMsg.HONKANYU_YMD, EKK0431D011CBSMsg.HONKANYU_IKO_KIGEN_YMD, EKK0431D011CBSMsg.SVC_USE_STA_KIBO_YMD,
					EKK0431D011CBSMsg.RSV_TSTA_KIBO_YMD, EKK0431D011CBSMsg.PNLTY_HASSEI_CD, EKK0431D011CBSMsg.IDO_DIV,
					EKK0431D011CBSMsg.SEIKY_KEI_NO, EKK0431D011CBSMsg.PRC_KMK_CD, EKK0431D011CBSMsg.UPD_DTM_BF);
	/** 関連チェックエラー項目(サブオプションサービス契約＜電話＞登録) */
	private static final String ERR_COL_EKK0431D011 = null;
	/** SC実行結果取得キー(サブオプションサービス契約＜電話＞登録) */
	private static final String TEMP_TEMP_KEY_EKK0431D011 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0431D011 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EKK0431D010_サブオプションサービス契約＜電話＞登録SC ■□ */
	/** テンプレートID(サブオプションサービス契約＜電話＞登録) */
	private static final String TEMP_ID_EKK0431D010 = "EKK0431D010";
	/** テンプレートID(サブオプションサービス契約＜電話＞登録明細) */
	private static final String TEMP_ID_DTL_EKK0431D010 = null;
	/** IN項目リスト(サブオプションサービス契約＜電話＞登録) */
	private static final List<String> IN_COL_LIST_EKK0431D010 =
			Arrays.asList(EKK0431D010CBSMsg.OP_SVC_KEI_NO, EKK0431D010CBSMsg.SBOP_SVC_CD, EKK0431D010CBSMsg.PCRS_CD, EKK0431D010CBSMsg.PPLAN_CD,
					EKK0431D010CBSMsg.MSKM_DTL_NO, EKK0431D010CBSMsg.FTRIAL_KANYU_YMD, EKK0431D010CBSMsg.FTRIAL_PRD_ENDYMD,
					EKK0431D010CBSMsg.HONKANYU_YMD, EKK0431D010CBSMsg.HONKANYU_IKO_KIGEN_YMD, EKK0431D010CBSMsg.SVC_USE_STA_KIBO_YMD,
					EKK0431D010CBSMsg.RSV_TSTA_KIBO_YMD, EKK0431D010CBSMsg.PNLTY_HASSEI_CD, EKK0431D010CBSMsg.IDO_DIV,
					EKK0431D010CBSMsg.SEIKY_KEI_NO, EKK0431D010CBSMsg.PRC_KMK_CD, EKK0431D010CBSMsg.UPD_DTM_BF);
	/** 関連チェックエラー項目(サブオプションサービス契約＜電話＞登録) */
	private static final String ERR_COL_EKK0431D010 = null;

	/* ■□ EKK0431C010_サブオプションサービス契約＜電話＞照査SC ■□ */
	/** テンプレートID(サブオプションサービス契約＜電話＞照査) */
	private static final String TEMP_ID_EKK0431C010 = "EKK0431C010";
	/** テンプレートID(サブオプションサービス契約＜電話＞照査明細) */
	private static final String TEMP_ID_DTL_EKK0431C010 = null;
	/** IN項目リスト(サブオプションサービス契約＜電話＞照査) */
	private static final List<String> IN_COL_LIST_EKK0431C010 =
			Arrays.asList(EKK0431C010CBSMsg.OP_SVC_KEI_NO, EKK0431C010CBSMsg.SBOP_SVC_KEI_NO, EKK0431C010CBSMsg.IDO_DIV,
					EKK0431C010CBSMsg.SHOSA_DSL_FIN_CD, EKK0431C010CBSMsg.UPD_DTM_BF);
	/** 関連チェックエラー項目(サブオプションサービス契約＜電話＞照査) */
	private static final String ERR_COL_EKK0431C010 = null;
	/** SC実行結果取得キー(サブオプションサービス契約＜電話＞照査) */
	private static final String TEMP_TEMP_KEY_EKK0431C010 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0431C010 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EKK0431C030_サブオプションサービス契約＜電話＞照査締結SC ■□ */
	/** テンプレートID(サブオプションサービス契約＜電話＞照査締結) */
	private static final String TEMP_ID_EKK0431C030 = "EKK0431C030";
	/** テンプレートID(サブオプションサービス契約＜電話＞照査締結明細) */
	private static final String TEMP_ID_DTL_EKK0431C030 = null;
	/** IN項目リスト(サブオプションサービス契約＜電話＞照査締結) */
	private static final List<String> IN_COL_LIST_EKK0431C030 =
			Arrays.asList(EKK0431C030CBSMsg.OP_SVC_KEI_NO, EKK0431C030CBSMsg.SBOP_SVC_KEI_NO, EKK0431C030CBSMsg.IDO_DIV,
							EKK0431C030CBSMsg.UPD_DTM_BF);
	/** 関連チェックエラー項目(サブオプションサービス契約＜電話＞照査締結) */
	private static final String ERR_COL_EKK0431C030 = null;
	/** SC実行結果取得キー(サブオプションサービス契約＜電話＞照査締結) */
	private static final String TEMP_TEMP_KEY_EKK0431C030 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0431C030 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EKK0431C041_サブオプションサービス契約＜電話＞使用開始SC ■□ */
	/** テンプレートID(サブオプションサービス契約＜電話＞使用開始) */
	private static final String TEMP_ID_EKK0431C041 = "EKK0431C041";
	/** テンプレートID(サブオプションサービス契約＜電話＞使用開始明細) */
	private static final String TEMP_ID_DTL_EKK0431C041 = null;
	/** IN項目リスト(サブオプションサービス契約＜電話＞使用開始) */
	private static final List<String> IN_COL_LIST_EKK0431C041 =
			Arrays.asList(EKK0431C041CBSMsg.OP_SVC_KEI_NO, EKK0431C041CBSMsg.SBOP_SVC_KEI_NO, EKK0431C041CBSMsg.IDO_DIV,
					EKK0431C041CBSMsg.UPD_DTM_BF, EKK0431C041CBSMsg.SKJ_YKGT);
	/** 関連チェックエラー項目(サブオプションサービス契約＜電話＞使用開始) */
	private static final String ERR_COL_EKK0431C041 = null;
	/** SC実行結果取得キー(サブオプションサービス契約＜電話＞使用開始) */
	private static final String TEMP_TEMP_KEY_EKK0431C041 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0431C041 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EKK0401C171_サブオプションサービス契約解約SC ■□ */
	/** テンプレートID(サブオプションサービス契約解約) */
	private static final String TEMP_ID_EKK0401C171 = "EKK0401C171";
	/** テンプレートID(サブオプションサービス契約解約明細) */
	private static final String TEMP_ID_DTL_EKK0401C171 = null;
	/** IN項目リスト(サブオプションサービス契約解約) */
	private static final List<String> IN_COL_LIST_EKK0401C171 =
			Arrays.asList(EKK0401C171CBSMsg.OP_SVC_KEI_NO, EKK0401C171CBSMsg.SBOP_SVC_KEI_NO, EKK0401C171CBSMsg.MSKM_DTL_NO,
					EKK0401C171CBSMsg.RSV_TSTA_KIBO_YMD, EKK0401C171CBSMsg.SVC_ENDYMD, EKK0401C171CBSMsg.SVC_CHRG_ENDYMD,
					EKK0401C171CBSMsg.SVC_DLRE_CD, EKK0401C171CBSMsg.SVC_DLRE_MEMO, EKK0401C171CBSMsg.PNLTY_HASSEI_CD, EKK0401C171CBSMsg.IDO_DIV,
					EKK0401C171CBSMsg.UPD_DTM_BF, EKK0401C171CBSMsg.OP_HKTGI_SK_SVC_KEI_NO);
	/** 関連チェックエラー項目(サブオプションサービス契約解約) */
	private static final String ERR_COL_EKK0401C171 = null;
	/** SC実行結果取得キー(サブオプションサービス契約解約) */
	private static final String TEMP_TEMP_KEY_EKK0401C171 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0401C171 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EKK0401C170_サブオプションサービス契約解約SC ■□ */
	/** テンプレートID(サブオプションサービス契約解約) */
	private static final String TEMP_ID_EKK0401C170 = "EKK0401C170";
	/** テンプレートID(サブオプションサービス契約解約明細) */
	private static final String TEMP_ID_DTL_EKK0401C170 = null;
	/** IN項目リスト(サブオプションサービス契約解約) */
	private static final List<String> IN_COL_LIST_EKK0401C170 =
			Arrays.asList(EKK0401C170CBSMsg.OP_SVC_KEI_NO, EKK0401C170CBSMsg.SBOP_SVC_KEI_NO, EKK0401C170CBSMsg.MSKM_DTL_NO,
					EKK0401C170CBSMsg.RSV_TSTA_KIBO_YMD, EKK0401C170CBSMsg.SVC_ENDYMD, EKK0401C170CBSMsg.SVC_CHRG_ENDYMD,
					EKK0401C170CBSMsg.SVC_DLRE_CD, EKK0401C170CBSMsg.SVC_DLRE_MEMO, EKK0401C170CBSMsg.PNLTY_HASSEI_CD, EKK0401C170CBSMsg.IDO_DIV,
					EKK0401C170CBSMsg.UPD_DTM_BF, EKK0401C170CBSMsg.OP_HKTGI_SK_SVC_KEI_NO);
	/** 関連チェックエラー項目(サブオプションサービス契約解約) */
	private static final String ERR_COL_EKK0401C170 = null;

	/* ■□ EKK0401C180_サブオプションサービス契約解約確定SC ■□ */
	/** テンプレートID(サブオプションサービス契約解約確定) */
	private static final String TEMP_ID_EKK0401C180 = "EKK0401C180";
	/** テンプレートID(サブオプションサービス契約解約確定明細) */
	private static final String TEMP_ID_DTL_EKK0401C180 = null;
	/** IN項目リスト(サブオプションサービス契約解約確定) */
	private static final List<String> IN_COL_LIST_EKK0401C180 =
			Arrays.asList(EKK0401C180CBSMsg.OP_SVC_KEI_NO, EKK0401C180CBSMsg.SBOP_SVC_KEI_NO, EKK0401C180CBSMsg.SVC_ENDYMD,
					EKK0401C180CBSMsg.SVC_CHRG_ENDYMD, EKK0401C180CBSMsg.SVC_DLRE_CD, EKK0401C180CBSMsg.SVC_DLRE_MEMO, EKK0401C180CBSMsg.UPD_DTM_BF,
					EKK0401C180CBSMsg.DSLJI_CHRG_FLG);
	/** 関連チェックエラー項目(サブオプションサービス契約解約確定) */
	private static final String ERR_COL_EKK0401C180 = null;
	/** SC実行結果取得キー(サブオプションサービス契約解約確定) */
	private static final String TEMP_TEMP_KEY_EKK0401C180 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0401C180 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EKK0401C150_サブオプションサービス契約キャンセルSC ■□ */
	/** テンプレートID(サブオプションサービス契約キャンセル) */
	private static final String TEMP_ID_EKK0401C150 = "EKK0401C150";
	/** テンプレートID(サブオプションサービス契約キャンセル明細) */
	private static final String TEMP_ID_DTL_EKK0401C150 = null;
	/** IN項目リスト(サブオプションサービス契約キャンセル) */
	private static final List<String> IN_COL_LIST_EKK0401C150 =
			Arrays.asList(EKK0401C150CBSMsg.OP_SVC_KEI_NO, EKK0401C150CBSMsg.SBOP_SVC_KEI_NO, EKK0401C150CBSMsg.MSKM_DTL_NO,
					EKK0401C150CBSMsg.SVC_CANCEL_RSN_CD, EKK0401C150CBSMsg.IDO_DIV, EKK0401C150CBSMsg.UPD_DTM_BF);
	/** 関連チェックエラー項目(サブオプションサービス契約キャンセル) */
	private static final String ERR_COL_EKK0401C150 = null;
	/** SC実行結果取得キー(サブオプションサービス契約キャンセル) */
	private static final String TEMP_TEMP_KEY_EKK0401C150 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0401C150 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EKK1091D010_進捗登録SC ■□ */
	/** テンプレートID(進捗登録) */
	private static final String TEMP_ID_EKK1091D011 = "EKK1091D011";
	/** テンプレートID(進捗登録明細) */
	private static final String TEMP_ID_DTL_EKK1091D011 = null;
	/** IN項目リスト(進捗登録) */
	private static final List<String> IN_COL_LIST_EKK1091D011 =
			Arrays.asList(EKK1091D011CBSMsg.MSKM_DTL_NO, EKK1091D011CBSMsg.SEIKY_KEI_NO, EKK1091D011CBSMsg.SEIKY_WAY_NO_KOZA,
					EKK1091D011CBSMsg.SEIKY_WAY_NO_CRECARD, EKK1091D011CBSMsg.SVC_KEI_NO, EKK1091D011CBSMsg.SVC_KEI_UCWK_NO,
					EKK1091D011CBSMsg.SVC_KEI_KAISEN_UCWK_NO, EKK1091D011CBSMsg.KKTK_SVC_KEI_NO, EKK1091D011CBSMsg.OP_SVC_KEI_NO,
					EKK1091D011CBSMsg.SEIOPSVC_KEI_NO, EKK1091D011CBSMsg.SBOP_SVC_KEI_NO, EKK1091D011CBSMsg.WRIB_SVC_KEI_NO,
					EKK1091D011CBSMsg.IDO_DIV, EKK1091D011CBSMsg.IDO_DTM, EKK1091D011CBSMsg.PRG_STAT, EKK1091D011CBSMsg.PRG_MEMO,
					EKK1091D011CBSMsg.PRG_TKJK_1, EKK1091D011CBSMsg.PRG_TKJK_2, EKK1091D011CBSMsg.PRG_DTM_I);
	/** 関連チェックエラー項目(進捗登録) */
	private static final String ERR_COL_EKK1091D011 = null;

	/* ■□ EKK0341B002_機器提供サービス契約一覧照会(サービス契約番号)SC ■□ */
	/** テンプレートID(機器提供サービス契約一覧照会(サービス契約番号)) */
	private static final String TEMP_ID_EKK0341B002 = "EKK0341B002";
	/** テンプレートID(機器提供サービス契約一覧照会(サービス契約番号)明細) */
	private static final String TEMP_ID_DTL_EKK0341B002 = EKK0341B002CBSMsg.EKK0341B002CBSMSG1LIST;
	/** IN項目リスト(機器提供サービス契約一覧照会(サービス契約番号)) */
	private static final List<String> IN_COL_LIST_EKK0341B002 =
			Arrays.asList(EKK0341B002CBSMsg.KEY_SVC_KEI_NO, EKK0341B002CBSMsg.KEY_KKTK_SVC_CD, EKK0341B002CBSMsg.KEY_KKTK_SVC_KEI_NO,
					EKK0341B002CBSMsg.KEY_SORT_KBN);
	/** 関連チェック,エラー項目(機器提供サービス契約一覧照会(サービス契約番号)) */
	private static final String ERR_COL_EKK0341B002 = EKK0341B002CBSMsg.KEY_SVC_KEI_NO_ERR;
	/** SC実行結果取得キー(機器提供サービス契約一覧照会(サービス契約番号)) */
	private static final String TEMP_TEMP_KEY_EKK0341B002 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0341B002 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EKK2811B503_機器提供サービス契約一覧照会(サービス契約番号)SC ■□ */
	/** テンプレートID(機器提供サービス契約一覧照会(サービス契約番号)) */
	private static final String TEMP_ID_EKK2811B503 = "EKK2811B503";
	/** テンプレートID(機器提供サービス契約一覧照会(サービス契約番号)明細) */
	private static final String TEMP_ID_DTL_EKK2811B503 = EKK2811B503CBSMsg.EKK2811B503CBSMSG1LIST;
	/** IN項目リスト(機器提供サービス契約一覧照会(サービス契約番号)) */
	private static final List<String> IN_COL_LIST_EKK2811B503 =
			Arrays.asList(EKK2811B503CBSMsg.KEY_SYSID, EKK2811B503CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO, EKK2811B503CBSMsg.KEY_TAKNKIKI_SBT_CD);
	/** 関連チェック,エラー項目(機器提供サービス契約一覧照会(サービス契約番号)) */
	private static final String ERR_COL_EKK2811B503 = EKK2811B503CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO_ERR;
	/** SC実行結果取得キー(機器提供サービス契約一覧照会(サービス契約番号)) */
	private static final String TEMP_TEMP_KEY_EKK2811B503 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK2811B503 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EKK0401A010_サブオプションサービス契約一意照会SC ■□ */
	/** テンプレートID(サブオプションサービス契約一意照会) */
	private static final String TEMP_ID_EKK0401A010 = "EKK0401A010";
	/** テンプレートID(サブオプションサービス契約一意照会明細) */
	private static final String TEMP_ID_DTL_EKK0401A010 = EKK0401A010CBSMsg.EKK0401A010CBSMSG1LIST;
	/** IN項目リスト(サブオプションサービス契約一意照会) */
	private static final List<String> IN_COL_LIST_EKK0401A010 =
			Arrays.asList(EKK0401A010CBSMsg.KEY_OP_SVC_KEI_NO, EKK0401A010CBSMsg.KEY_SBOP_SVC_KEI_NO, EKK0401A010CBSMsg.KEY_GENE_ADD_DTM,
					EKK0401A010CBSMsg.KEY_RSV_APLY_YMD);
	/** 関連チェック,エラー項目(サブオプションサービス契約一意照会) */
	private static final String ERR_COL_EKK0401A010 = EKK0401A010CBSMsg.KEY_SBOP_SVC_KEI_NO_ERR;
	/** SC実行結果取得キー(サブオプションサービス契約一意照会) */
	private static final String TEMP_TEMP_KEY_EKK0401A010 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0401A010 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EKK0161A010_サービス契約内訳一意照会SC ■□ */
	/** テンプレートID(サービス契約内訳一意照会) */
	private static final String TEMP_ID_EKK0161A010 = "EKK0161A010";
	/** テンプレートID(サービス契約内訳一意照会明細) */
	private static final String TEMP_ID_DTL_EKK0161A010 = EKK0161A010CBSMsg.EKK0161A010CBSMSG1LIST;
	/** IN項目リスト(サービス契約内訳一意照会) */
	private static final List<String> IN_COL_LIST_EKK0161A010 =
			Arrays.asList(EKK0161A010CBSMsg.KEY_SVC_KEI_UCWK_NO, EKK0161A010CBSMsg.KEY_GENE_ADD_DTM, EKK0161A010CBSMsg.KEY_RSV_APLY_YMD);
	/** 関連チェック,エラー項目(サービス契約内訳一意照会) */
	private static final String ERR_COL_EKK0161A010 = EKK0161A010CBSMsg.KEY_SVC_KEI_UCWK_NO_ERR;
	/** SC実行結果取得キー(サービス契約内訳一意照会) */
	private static final String TEMP_TEMP_KEY_EKK0161A010 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0161A010 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EKK0371B001_オプションサービス契約＜電話＞一覧照会（サービス契約内訳番号）SC ■□ */
	/** テンプレートID(オプションサービス契約＜電話＞一覧照会（サービス契約内訳番号）) */
	private static final String TEMP_ID_EKK0371B001 = "EKK0371B001";
	/** テンプレートID(オプションサービス契約＜電話＞一覧照会（サービス契約内訳番号）明細) */
	private static final String TEMP_ID_DTL_EKK0371B001 = EKK0371B001CBSMsg.EKK0371B001CBSMSG1LIST;
	/** IN項目リスト(オプションサービス契約＜電話＞一覧照会（サービス契約内訳番号）) */
	private static final List<String> IN_COL_LIST_EKK0371B001 = Arrays.asList(EKK0371B001CBSMsg.KEY_SVC_KEI_UCWK_NO);
	/** 関連チェック,エラー項目(オプションサービス契約＜電話＞一覧照会（サービス契約内訳番号）) */
	private static final String ERR_COL_EKK0371B001 = EKK0371B001CBSMsg.KEY_SVC_KEI_UCWK_NO_ERR;
	/** SC実行結果取得キー(オプションサービス契約＜電話＞一覧照会（サービス契約内訳番号）) */
	private static final String TEMP_TEMP_KEY_EKK0371B001 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0371B001 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EKK0191A010_サービス契約内訳<eo光電話>一意照会SC ■□ */
	/** テンプレートID(サービス契約内訳<eo光電話>一意照会) */
	private static final String TEMP_ID_EKK0191A010 = "EKK0191A010";
	/** テンプレートID(サービス契約内訳<eo光電話>一意照会明細) */
	private static final String TEMP_ID_DTL_EKK0191A010 = EKK0191A010CBSMsg.EKK0191A010CBSMSG1LIST;
	/** IN項目リスト(サービス契約内訳<eo光電話>一意照会) */
	private static final List<String> IN_COL_LIST_EKK0191A010 = Arrays.asList(EKK0191A010CBSMsg.KEY_SVC_KEI_UCWK_NO);
	/** 関連チェック,エラー項目(サービス契約内訳<eo光電話>一意照会) */
	private static final String ERR_COL_EKK0191A010 = EKK0191A010CBSMsg.KEY_SVC_KEI_UCWK_NO_ERR;
	/** SC実行結果取得キー(サービス契約内訳<eo光電話>一意照会) */
	private static final String TEMP_TEMP_KEY_EKK0191A010 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0191A010 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ 機器提供サービス契約一意照会SC ■□ */
	/** テンプレートID(機器提供サービス契約一意照会) */
	private static final String TEMPLATE_ID_EKK0341A010 = "EKK0341A010";
	/** テンプレートID(機器提供サービス契約一意照会明細) */
	private static final String TEMPLATE_ID_EKK0341A010_DETAIL = EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST;
	/** IN項目リスト(機器提供サービス契約一意照会) */
	private static final List<String> IN_COLUMN_LIST_EKK0341A010 =
			Arrays.asList(EKK0341A010CBSMsg.KEY_KKTK_SVC_KEI_NO, EKK0341A010CBSMsg.KEY_RSV_APLY_YMD);
	/** 関連チェックエラー項目(機器提供サービス契約一意照会) */
	private static final String ERROR_COLUMN_EKK0341A010 = EKK0341A010CBSMsg.KEY_KKTK_SVC_KEI_NO_ERR;
	/** SC実行結果取得キー(機器提供サービス契約一意照会) */
	private static final String TEMP_TEMPLATE_KEY_EKK0341A010 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_EKK0341A010 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ オプションサービス契約履歴一覧照会SC ■□ */
	/** テンプレートID(オプションサービス契約履歴一覧照会) */
	private static final String TEMPLATE_ID_EKK0351B003 = "EKK0351B003";
	/** テンプレートID(オプションサービス契約履歴一覧照会明細) */
	private static final String TEMPLATE_ID_EKK0351B003_DETAIL = EKK0351B003CBSMsg.EKK0351B003CBSMSG1LIST;
	/** IN項目リスト(オプションサービス契約履歴一覧照会) */
	private static final List<String> IN_COLUMN_LIST_EKK0351B003 =
			Arrays.asList(EKK0351B003CBSMsg.KEY_OP_SVC_KEI_NO);
	/** 関連チェックエラー項目(オプションサービス契約履歴一覧照会) */
	private static final String ERROR_COLUMN_EKK0351B003 = EKK0351B003CBSMsg.KEY_OP_SVC_KEI_NO_ERR;
	/** SC実行結果取得キー(オプションサービス契約履歴一覧照会) */
	private static final String TEMP_TEMPLATE_KEY_EKK0351B003 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_EKK0351B003 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ オプションサービス電話場番号使用可能一覧照会SC ■□ */
	/** テンプレートID(オプションサービス電話場番号使用可能一覧照会) */
	private static final String TEMPLATE_ID_EZM0121B040 = "EZM0121B040";
	/** テンプレートID(オプションサービス電話場番号使用可能一覧照会明細) */
	private static final String TEMPLATE_ID_EZM0121B040_DETAIL = EZM0121B040CBSMsg.EZM0121B040CBSMSG1LIST;
	/** IN項目リスト(オプションサービス電話場番号使用可能一覧照会) */
	private static final List<String> IN_COLUMN_LIST_EZM0121B040 =
			Arrays.asList(EZM0121B040CBSMsg.KEY_TELNO, EZM0121B040CBSMsg.KEY_SVC_DIV, EZM0121B040CBSMsg.KEY_KOJIN_HOJIN_TLN_TAI_CD, EZM0121B040CBSMsg.KEY_NO_CD);
	/** 関連チェックエラー項目(オプションサービス電話場番号使用可能一覧照会) */
	private static final String ERROR_COLUMN_EZM0121B040 = EZM0121B040CBSMsg.KEY_TELNO_ERR;
	/** SC実行結果取得キー(オプションサービス電話場番号使用可能一覧照会) */
	private static final String TEMP_TEMPLATE_KEY_EZM0121B040 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_EZM0121B040 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ エイジング対象登録SC ■□ */
	/** テンプレートID(エイジング対象登録) */
	private static final String TEMPLATE_ID_EZM0111D010 = "EZM0111D010";
	/** テンプレートID(エイジング対象登録明細) */
	private static final String TEMPLATE_ID_EZM0111D010_DETAIL = null;
	/** IN項目リスト(エイジング対象登録) */
	private static final List<String> IN_COLUMN_LIST_EZM0111D010 =
			Arrays.asList(EZM0111D010CBSMsg.AGING_SBT_CD, EZM0111D010CBSMsg.AGING_TG_VALUE);
	/** 関連チェックエラー項目(エイジング対象登録) */
	private static final String ERROR_COLUMN_EZM0111D010 = null;
	
	/* ■□ エイジング対象使用終了SC ■□ */
	/** テンプレートID(エイジング対象登録) */
	private static final String TEMPLATE_ID_EZM0111C010 = "EZM0111C010";
	/** テンプレートID(エイジング対象登録明細) */
	private static final String TEMPLATE_ID_EZM0111C010_DETAIL = null;
	/** IN項目リスト(エイジング対象登録) */
	private static final List<String> IN_COLUMN_LIST_EZM0111C010 =
			Arrays.asList(EZM0111C010CBSMsg.AGING_SBT_CD, EZM0111C010CBSMsg.AGING_TG_VALUE, EZM0111C010CBSMsg.LAST_UPD_DTM_BF);
	/** 関連チェックエラー項目(エイジング対象登録) */
	private static final String ERROR_COLUMN_EZM0111C010 = null;

	/* ■□ EKK0081B508_eo光電話サービス契約情報一覧照会 ■□ */
	/** テンプレートID(eo光電話サービス契約情報一覧照会) */
	private static final String TEMP_ID_EKK0081B508 = "EKK0081B508";
	/** テンプレートID(eo光電話サービス契約情報一覧照会明細) */
	private static final String TEMP_ID_DTL_EKK0081B508 = EKK0081B508CBSMsg.EKK0081B508CBSMSG1LIST;
	/** IN項目リスト(eo光電話サービス契約情報一覧照会) */
	private static final List<String> IN_COL_LIST_EKK0081B508 =
			Arrays.asList(EKK0081B508CBSMsg.KEY_SYSID, EKK0081B508CBSMsg.KEY_SVC_KEI_NO, EKK0081B508CBSMsg.KEY_TELNO);
	/** 関連チェックエラー項目(eo光電話サービス契約情報一覧照会) */
	private static final String ERR_COL_EKK0081B508 = EKK0081B508CBSMsg.KEY_TELNO_ERR;
	/** SC実行結果取得キー(eo光電話サービス契約情報一覧照会) */
	private static final String TEMP_TEMP_KEY_EKK0081B508 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0081B508 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ EDK0011B090_契約機器配送対象物品一覧照会SC ■□ */
	/** テンプレートID(契約機器配送対象物品一覧照会) */
	private static final String TEMP_ID_EDK0011B090 = "EDK0011B090";
	/** テンプレートID(契約機器配送対象物品一覧照会明細) */
	private static final String TEMP_ID_DTL_EDK0011B090 = EDK0011B090CBSMsg.EDK0011B090CBSMSG1LIST;
	/** IN項目リスト(契約機器配送対象物品一覧照会) */
	private static final List<String> IN_COL_LIST_EDK0011B090 =
			Arrays.asList(EDK0011B090CBSMsg.KEY_KKTK_SVC_KEI_NO);
	/** 関連チェック,エラー項目(契約機器配送対象物品一覧照会) */
	private static final String ERR_COL_EDK0011B090 = EDK0011B090CBSMsg.KEY_KKTK_SVC_KEI_NO_ERR;
	/** SC実行結果取得キー(契約機器配送対象物品一覧照会) */
	private static final String TEMP_TEMP_KEY_EDK0011B090 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EDK0011B090 + TEMP_TEMPLATE_PRIFIX_SEP;

	/** オプションサービスコードマッピングMap */
	private static final Map<String, String> OP_SVC_CD_MAPPING_MAP = new HashMap<String, String>()
	{
		{
			put(JFUStrConst.CD00137_D07, JFUStrConst.CD00136_B024); // 転送電話選択(転送電話のサブ)
			put(JFUStrConst.CD00137_D08, JFUStrConst.CD00136_B025); // 非通知着信拒否(発信者番号表示のサブ)
		}
	};
	/** 料金コースコード(料金プラン固定単価)マッピングMap */
	private static final Map<String, String> PCRS_CD_KK0601_MAPPING_MAP = new HashMap<String, String>()
	{
		{
			put(JFUStrConst.CD00136_B023, JFUStrConst.CD00134_B27); // 割込電話
			put(JFUStrConst.CD00136_B024, JFUStrConst.CD00134_B28); // 転送電話
			put(JFUStrConst.CD00136_B025, JFUStrConst.CD00134_B29); // 発信者番号表示
			put(JFUStrConst.CD00136_B026, JFUStrConst.CD00134_B30); // 迷惑電話拒否
			put(JFUStrConst.CD00136_B027, JFUStrConst.CD00134_B31); // 指定番号着信選択
			put(JFUStrConst.CD00136_B028, JFUStrConst.CD00134_B32); // 通話明細送付
			put(JFUStrConst.CD00136_B029, JFUStrConst.CD00134_B33); // 050ナンバープラス
			put(JFUStrConst.CD00136_B071, JFUStrConst.CD00134_B75); // 国際電話利用停止
			put(JFUStrConst.CD00136_B135, JFUStrConst.CD00134_BE6); // あんしん発着信サービス
		}
	};
	/** 料金プランコード(料金プラン固定単価)マッピングMap */
	private static final Map<String, String> PPLAN_CD_KK0601_MAPPING_MAP = new HashMap<String, String>()
	{
		{
			put(JFUStrConst.CD00136_B023, JFUStrConst.CD00565_PB2701); // 割込電話
			put(JFUStrConst.CD00136_B024, JFUStrConst.CD00565_PB2801); // 転送電話
			put(JFUStrConst.CD00136_B025, JFUStrConst.CD00565_PB2901); // 発信者番号表示
			put(JFUStrConst.CD00136_B026, JFUStrConst.CD00565_PB3001); // 迷惑電話拒否
			put(JFUStrConst.CD00136_B027, JFUStrConst.CD00565_PB3101); // 指定番号着信選択
			put(JFUStrConst.CD00136_B028, JFUStrConst.CD00565_PB3201); // 通話明細送付
			put(JFUStrConst.CD00136_B029, JFUStrConst.CD00565_PB3301); // 050ナンバープラス
			put(JFUStrConst.CD00136_B071, JFUStrConst.CD00565_PB7501); // 国際電話利用停止
			put(JFUStrConst.CD00136_B135, JFUStrConst.CD00565_PBE601); // あんしん発着信サービス
		}
	};
	/** 料金コースコード(オプションサービス契約)マッピングMap - サブオプション用(親オプションの料金コースコード) */
	private static final Map<String, String> PCRS_CD_KK0351_MAPPING_MAP = new HashMap<String, String>()
	{
		{
			put(JFUStrConst.CD00137_D07, JFUStrConst.CD00134_D07); // 転送電話選択
			put(JFUStrConst.CD00137_D08, JFUStrConst.CD00134_D08); // 非通知着信拒否
		}
	};
	/** 料金プランコード(オプションサービス契約)マッピングMap - サブオプション用(親オプションの料金プランコード) */
	private static final Map<String, String> PPLAN_CD_KK0351_MAPPING_MAP = new HashMap<String, String>()
	{
		{
			put(JFUStrConst.CD00137_D07, JFUStrConst.CD00565_PD0701); // 転送電話選択
			put(JFUStrConst.CD00137_D08, JFUStrConst.CD00565_PD0801); // 非通知着信拒否
		}
	};

	/** オプションサービス名マッピングMap */
	private static final Map<String, String> OP_SVC_NM_MAPPING_MAP = new HashMap<String, String>()
	{
		{
			put(JFUStrConst.CD00136_B023, "割込電話／複数通話");
			put(JFUStrConst.CD00136_B024, "転送電話");
			put(JFUStrConst.CD00136_B025, "発信者番号表示");
			put(JFUStrConst.CD00136_B026, "迷惑電話拒否");
			put(JFUStrConst.CD00136_B027, "指定番号着信選択");
			put(JFUStrConst.CD00136_B028, "通話明細送付");
			put(JFUStrConst.CD00136_B029, "０５０ナンバープラス");
			put(JFUStrConst.CD00136_B071, "国際電話利用停止機能");
			put(JFUStrConst.CD00136_B135, "あんしん発着信サービス");
			put(JFUStrConst.CD00137_D07, "転送電話選択");
			put(JFUStrConst.CD00137_D08, "非通知着信拒否");
		}
	};
	/** パック割引名マッピングMap */
	private static final Map<String, String> PACK_NM_MAPPING_MAP = new HashMap<String, String>()
	{
		{
			put("1", "eo光電話パック３");
			put("2", "eo光電話パック７");
			put("3", "あんしん電話パック");
		}
	};
	/** 処理区分マッピングMap */
	private static final Map<String, String> APP_NM_MAPPING_MAP = new HashMap<String, String>()
	{
		{
			put("1", "登録");
			put("2", "解約");
		}
	};
	/** 日付名称マッピングMap */
	private static final Map<String, String> APP_DATE_MAPPING_MAP = new HashMap<String, String>()
	{
		{
			put("1", "　利用開始日：");
			put("2", "　利用終了日：");
		}
	};
	
	/** 有効な機能コード */
	private static final List<String> FUNC_CD_YUKO = Arrays.asList("1", "2");
	/** 有効な処理区分 */
	private static final List<String> APP_DIV_YUKO = Arrays.asList("1", "2");
	/** 有効なオプションパック */
	private static final List<String> PACK_DIV_YUKO = Arrays.asList("1", "2", "3");
	/** 有効なサービスコード */
	private static final List<String> OP_SBOP_SVC_CD_YUKO = Arrays.asList(
			JFUStrConst.CD00136_B023,
			JFUStrConst.CD00136_B024,
			JFUStrConst.CD00136_B025,
			JFUStrConst.CD00136_B026,
			JFUStrConst.CD00136_B027,
			JFUStrConst.CD00136_B028,
			JFUStrConst.CD00136_B029,
			JFUStrConst.CD00136_B071,
			JFUStrConst.CD00136_B135,
			JFUStrConst.CD00137_D07,
			JFUStrConst.CD00137_D08
	);
	/** 有効なサービスコード */
	private static final List<String> OPPACK_SVC_CD_YUKO = Arrays.asList(
			JFUStrConst.CD00136_B023,
			JFUStrConst.CD00136_B024,
			JFUStrConst.CD00136_B025,
			JFUStrConst.CD00136_B026,
			JFUStrConst.CD00136_B027,
			JFUStrConst.CD00136_B135,
			JFUStrConst.CD00137_D07,
			JFUStrConst.CD00137_D08
	);

	/** 対象とする割引サービスコードとパック割区分マッピングMap （電話オプションパック３、電話オプションパック７、あんしん電話パック）*/
	private static final Map<String, String> PACK_DIV_MAPPING_MAP = new HashMap<String, String>()
	{
		{
			put(JFUStrConst.KK0841_WRIB_SVC_CD_TEL_OP_PACK3, "1");
			put(JFUStrConst.KK0841_WRIB_SVC_CD_TEL_OP_PACK7, "2");
			put(JFUStrConst.KK0841_WRIB_SVC_CD_EASE_PACK, "3");
		}
	};

	/** 無効な割引サービス契約ステータス */
	private static final List<String> WRIB_SVC_KEI_STAT_MUKO = Arrays.asList(JFUStrConst.CD00055_910, JFUStrConst.CD00055_920);

	/** 進捗特記事項１: 更新時埋込み固定文字列: 情報 **/
	public static final String PRG_TKJK_1_JYOHO = "情報";

	/** CCパラメータ：ボディ情報 */
	private static final String BODY_INFO = "BODY_INFO";
	/** CCパラメータ：エラー情報 */
	private static final String ERROR_INFO = "ERROR_INFO";
	/** CCパラメータ：エラーコード */
	private static final String ERROR_CODE = "errCode";
	/** CCパラメータ：エラーメッセージ */
	private static final String ERROR_MESSAGE = "errMessage";

	/** 属性チェック 半角数字1 */
	private static final String ATTR_HANNKAKUSUUJI1 = "hannkakusuuji1";
	/** 属性チェック 半角英数字1 */
	private static final String ATTR_HANNKAKUESUUJI1 = "hannkakuesuuji1";
	/** 属性チェック TEL2 */
	private static final String ATTR_TEL2 = "tel2";
	/** 属性チェック 日時1 */
	private static final String ATTR_DAY_HOUR1 = "day_hour1";

	/** APIエラーコード_1001：必須チェックエラー */
	private static final String RES_KEY_ERROR_CODE_1001 = "1001";
	/** APIエラーコード_1002：属性チェックエラー */
	private static final String RES_KEY_ERROR_CODE_1002 = "1002";
	/** APIエラーコード_1003：桁数チェックエラー */
	private static final String RES_KEY_ERROR_CODE_1003 = "1003";

	/** APIエラーコード_2001 */
	private static final String RES_KEY_ERROR_CODE_2001 = "2001";
	/** APIエラーコード_2002 */
	private static final String RES_KEY_ERROR_CODE_2002 = "2002";
	/** APIエラーコード_2003 */
	private static final String RES_KEY_ERROR_CODE_2003 = "2003";
	/** APIエラーコード_3001 */
	private static final String RES_KEY_ERROR_CODE_3001 = "3001";
	/** APIエラーコード_4001 */
	private static final String RES_KEY_ERROR_CODE_4001 = "4001";
	/** APIエラーコード_4002 */
	private static final String RES_KEY_ERROR_CODE_4002 = "4002";
	/** APIエラーコード_4003 */
	private static final String RES_KEY_ERROR_CODE_4003 = "4003";
	/** APIエラーコード_4004 */
	private static final String RES_KEY_ERROR_CODE_4004 = "4004";
	/** APIエラーコード_4005 */
	private static final String RES_KEY_ERROR_CODE_4005 = "4005";
	/** APIエラーコード_4006 */
	private static final String RES_KEY_ERROR_CODE_4006 = "4006";
	/** APIエラーコード_4007 */
	private static final String RES_KEY_ERROR_CODE_4007 = "4007";
	/** APIエラーコード_4008 */
	private static final String RES_KEY_ERROR_CODE_4008 = "4008";
	/** APIエラーコード_4009 */
	private static final String RES_KEY_ERROR_CODE_4009 = "4009";
	/** APIエラーコード_5001 */
	private static final String RES_KEY_ERROR_CODE_5001 = "5001";

	/** 処理結果 正常 */
	private static final String RESULT_OK = "0";
	/** 処理結果 エラー */
	private static final String RESULT_NG = "9";

	/** APIリターンコード_0000 正常終了 */
	private static final String RETURN_CD_0000 = "0000";
	/** APIリターンコード_5000_業務エラー */
	private static final String RETURN_CD_5000 = "5000";
	/** リターンメッセージ_業務エラー */
	private static final String RETURN_MESSAGE_API_ERROR = "業務エラー";

	/**
	 * eo光電話オプションパック申込登録コモンコンポーネント部品実行処理<br>
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Throwable 例外
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite setSaveData(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{

		// 開始ログ
		outDebugLog("----- setSaveData Start  -----");

		// ==============================================================================================================
		// ■ INPUTデータ
		// ==============================================================================================================

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);
		// 返却用ボディ
		Map<String, Object> bodyMap = new HashMap<String, Object>();

		inMap.put(BODY_INFO, bodyMap);
		// 処理結果
		bodyMap.put(OUT_RESULT, RESULT_NG);
		// 使用可能電話番号
		bodyMap.put(OUT_050_TELNO, JFUStrConst.EMPTY);
		// エラーリスト
		inMap.put(ERROR_INFO, new ArrayList<Map<String, String>>());

		// 単項目チェック
		if (!checkUnitParam(inMap))
		{
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, RETURN_CD_5000);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, null);
			return param;
		}
		// 単関連チェック
		if (!checkKnrnParam(inMap))
		{
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, RETURN_CD_5000);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, null);
			return param;
		}

		try{

			// ○最新更新年月日時分秒
			String lastUpdDtm = (String)inMap.get(IN_LAST_UPD_DTM);

			// ○オプションパックリスト（オプションパック）
			ArrayList optPackList = (ArrayList)inMap.get(IN_OPT_PACK_LIST);

			// ○オプションサービスリスト（申込・解約）
			// 　サブオプションサービスリスト（申込・解約）
			ArrayList opSvcMskmList = (ArrayList)inMap.get(IN_OP_SVC_MSKM_LIST);

			// ○オプションサービスリスト設定処理
			convOpSvcList(handle, param, fixedText, opSvcMskmList, optPackList);

			// ○オプションパックリスト設定処理
			convOpPackList(handle, param, fixedText, optPackList);


			// チェックモードの場合はチェックのみ
			if (JPCModelConstant.FUNC_CD_2.equals(inMap.get(IN_FUNC_CD)))
			{
				HashMap relCheckMap = new HashMap();
				relCheckMap.put(JFUTelOptSvcMskmRelCheckCC.IN_PARAM_KEY_SVC_KEI_NO, inMap.get(IN_SVC_KEI_NO));
				relCheckMap.put(JFUTelOptSvcMskmRelCheckCC.IN_PARAM_KEY_SVC_KEI_KAISEN_UCWK_NO, inMap.get(IN_SVC_KEI_KAISEN_UCWK_NO));
				relCheckMap.put(JFUTelOptSvcMskmRelCheckCC.IN_PARAM_KEY_TELNO, inMap.get(IN_TELNO));
				param.setData("telMskmRelCheckMap", relCheckMap);

				// ●住所変更中チェック
				// 検索エラーなし設定
				String adChgUm = new JFUTelOptSvcMskmRelCheckCC().getAdChgUmC(handle, param, "telMskmRelCheckMap");
				if (JFUStrConst.CD00002_1.equals(adChgUm))
				{
					inMap.put(ERROR_INFO, getApiErrInfList(RES_KEY_ERROR_CODE_4006, JFUStrConst.EMPTY));
					// 業務エラーを設定する
					param.setControlMapData(SCControlMapKeys.RETURN_CODE, RETURN_CD_5000);
					param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, RETURN_MESSAGE_API_ERROR);
					return param;
				}

				if (Integer.parseInt("20210701") > Integer.parseInt(JFUBPCommon.getOpeDate(null)))
				{
					// ●VLAN確定済チェック
					String checkVlanIdFix = new JFUTelOptSvcMskmRelCheckCC().checkVlanIdFix(handle, param, "telMskmRelCheckMap");
					if (!JFUStrConst.CD00002_1.equals(checkVlanIdFix))
					{
						inMap.put(ERROR_INFO, getApiErrInfList(RES_KEY_ERROR_CODE_4005, JFUStrConst.EMPTY));
						// 業務エラーを設定する
						param.setControlMapData(SCControlMapKeys.RETURN_CODE, RETURN_CD_5000);
						param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, RETURN_MESSAGE_API_ERROR);
						return param;
					}
				}

				HashMap opCheckMap = new HashMap();
				opCheckMap.put("sysid", inMap.get(IN_SYSID));
				opCheckMap.put("svc_kei_no", inMap.get(IN_SVC_KEI_NO));
				opCheckMap.put("svc_kei_kaisen_ucwk_no", inMap.get(IN_SVC_KEI_KAISEN_UCWK_NO));
				opCheckMap.put("svc_kei_ucwk_no", inMap.get(IN_SVC_KEI_UCWK_NO));
				param.setData("telOpMskmCheckMap", opCheckMap);

				// ●電話オプション申込可否チェック
				new JFUTelOpMskmCheckCC().execute(handle, param, "telOpMskmCheckMap");
				HashMap retMap = (HashMap)param.getData("telOpMskmCheckMap");
				if (JFUStrConst.CD00002_1.equals(retMap.get("mskmKhFlg")))
				{
					inMap.put(ERROR_INFO, getApiErrInfList(RES_KEY_ERROR_CODE_4007, JFUStrConst.EMPTY));
					// 業務エラーを設定する
					param.setControlMapData(SCControlMapKeys.RETURN_CODE, RETURN_CD_5000);
					param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, RETURN_MESSAGE_API_ERROR);
					return param;
				}

				// ●オプションサービス契約申込チェック処理
				lastUpdDtm = checkOpSvcKeiMskmData(handle, param, fixedText, opSvcMskmList, lastUpdDtm);

				// ●オプションサービス契約解約チェック処理
				lastUpdDtm = checkOpSvcKeiDeleData(handle, param, fixedText, opSvcMskmList, lastUpdDtm);

				// ●サブオプションサービス契約申込チェック処理
				lastUpdDtm = checkSbopSvcKeiMskmData(handle, param, fixedText, opSvcMskmList, lastUpdDtm);

				// ●サブオプションサービス契約解約チェック処理
				lastUpdDtm = checkSbopSvcKeiDeleData(handle, param, fixedText, opSvcMskmList, lastUpdDtm);

				// ●電話セレクトオプションパック操作部品呼出処理
				setTelSelOptPackMapping(handle, param, fixedText, optPackList, lastUpdDtm);

				// 処理結果
				bodyMap.put(OUT_RESULT, RESULT_OK);
				return param;
			}

			// ==============================================================================================================
			// ■ 登録処理
			// ==============================================================================================================

			// ●申込明細申込処理
			setMskmDtlData(handle, param, fixedText);

			// ●オプションサービス契約申込処理
			lastUpdDtm = setOpSvcKeiMskmData(handle, param, fixedText, opSvcMskmList, lastUpdDtm);

			// ●オプションサービス契約解約処理
			lastUpdDtm = setOpSvcKeiDeleData(handle, param, fixedText, opSvcMskmList, lastUpdDtm);

			// ●サブオプションサービス契約申込処理
			lastUpdDtm = setSbopSvcKeiMskmData(handle, param, fixedText, opSvcMskmList, lastUpdDtm);

			// ●サブオプションサービス契約解約処理
			lastUpdDtm = setSbopSvcKeiDeleData(handle, param, fixedText, opSvcMskmList, lastUpdDtm);

			// ●SOD用データマップ作成処理
			// 機器（旧ＶＡ、多機能ルーター）、オプション、サブオプションの申込解約の数だけ実行する。
			setSODMapping(handle, param, fixedText, opSvcMskmList);

			// ●電話セレクトオプションパック操作部品呼出処理
			setTelSelOptPackMapping(handle, param, fixedText, optPackList, lastUpdDtm);

			// ●進捗登録処理
			// 進捗ステータスは、5112を使用する。進捗特記事項1で、登録解約を判断できるようにする。
			// ・パック種別 + 操作モード + 日付名称 + 日付
			// 例)「eo光電話パック３登録△利用開始日：2014/04/03」
			// 例)「eo光電話パック３解約△利用終了日：2014/04/03」
			// ※ 電話オプションパック間での付け替え（パック３⇔パック７）が発生した場合は、登録と解約の２行を出力する。
			setRpgData(handle, param, fixedText, optPackList, opSvcMskmList);

			// ●サービスオーダ発行処理
			JFUHakkoSODCC hakkoSODCC = new JFUHakkoSODCC();
			hakkoSODCC.hakkoSOD(handle, param, "hakkoSODMap");

			// 処理結果
			bodyMap.put(OUT_RESULT, RESULT_OK);
			// 使用可能電話番号
			bodyMap.put(OUT_050_TELNO, JFUBPCommon.nvl((String)inMap.get(OUT_050_TELNO),JFUStrConst.EMPTY));
			// 正常終了
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, RETURN_CD_0000);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, null);

		}
		// サービスインターフェース呼び出しでエラーが発生した場合
		catch (SCCallException scCallEx)
		{
			// 排他エラー
			if (isErrorField(param, "upd_dtm_bf_err"))
			{
				inMap.put(ERROR_INFO, getApiErrInfList(RES_KEY_ERROR_CODE_3001, "排他エラー"));
				// 業務エラーを設定する
				param.setControlMapData(SCControlMapKeys.RETURN_CODE, RETURN_CD_5000);
				param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, RETURN_MESSAGE_API_ERROR);
			}
			// 実行可能な契約状態ではない
			else if (isErrorField(param, "op_svc_kei_no_err"))
			{
				inMap.put(ERROR_INFO, getApiErrInfList(RES_KEY_ERROR_CODE_4001, JFUStrConst.EMPTY));
				// 業務エラーを設定する
				param.setControlMapData(SCControlMapKeys.RETURN_CODE, RETURN_CD_5000);
				param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, RETURN_MESSAGE_API_ERROR);
			}
			// 同一内容で既に契約変更手続き中
			else if (isErrorField(param, "op_svc_cd_err"))
			{
				inMap.put(ERROR_INFO, getApiErrInfList(RES_KEY_ERROR_CODE_4002, JFUStrConst.EMPTY));
				// 業務エラーを設定する
				param.setControlMapData(SCControlMapKeys.RETURN_CODE, RETURN_CD_5000);
				param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, RETURN_MESSAGE_API_ERROR);
			}
			// 050番号払出し不可
			else if (isErrorField(param, "n_050_op_telno_err"))
			{
				inMap.put(ERROR_INFO, getApiErrInfList(RES_KEY_ERROR_CODE_4003, JFUStrConst.EMPTY));
				// 業務エラーを設定する
				param.setControlMapData(SCControlMapKeys.RETURN_CODE, RETURN_CD_5000);
				param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, RETURN_MESSAGE_API_ERROR);
			}
			// オプションの異動予約あり
			else if (isErrorField(param, "ido_rsv_dtl_cd_err"))
			{
				inMap.put(ERROR_INFO, getApiErrInfList(RES_KEY_ERROR_CODE_4004, JFUStrConst.EMPTY));
				// 業務エラーを設定する
				param.setControlMapData(SCControlMapKeys.RETURN_CODE, RETURN_CD_5000);
				param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, RETURN_MESSAGE_API_ERROR);
			}
			// 050ナンバープラスの申込制限あり
			else if (isErrorField(param, "rsv_aply_ymd_err"))
			{
				inMap.put(ERROR_INFO, getApiErrInfList(RES_KEY_ERROR_CODE_4008, JFUStrConst.EMPTY));
				// 業務エラーを設定する
				param.setControlMapData(SCControlMapKeys.RETURN_CODE, RETURN_CD_5000);
				param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, RETURN_MESSAGE_API_ERROR);
			}
			// パック割区分設定エラー
			else if (isErrorField(param, "op_pack_list_err"))
			{
				inMap.put(ERROR_INFO, getApiErrInfList(RES_KEY_ERROR_CODE_4009, JFUStrConst.EMPTY));
				// 業務エラーを設定する
				param.setControlMapData(SCControlMapKeys.RETURN_CODE, RETURN_CD_5000);
				param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, RETURN_MESSAGE_API_ERROR);
			}

			// システムエラー
			else
			{
				inMap.put(ERROR_INFO, getApiErrInfList(RES_KEY_ERROR_CODE_5001, JFUStrConst.EMPTY));
				// システムエラーを設定する
				param.setControlMapData(SCControlMapKeys.RETURN_CODE, RETURN_CD_5000);
				param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, RETURN_MESSAGE_API_ERROR);
			}
			throw scCallEx;
		}
		// コンポーネント呼び出しでエラーが発生した場合
		catch (CCException ccEx)
		{
			inMap.put(ERROR_INFO, getApiErrInfList(RES_KEY_ERROR_CODE_5001, JFUStrConst.EMPTY));
			// システムエラーを設定する
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, RETURN_CD_5000);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, RETURN_MESSAGE_API_ERROR);
			throw ccEx;
		}

		// 終了ログ
		outDebugLog("----- setSaveData End  -----");
		return param;
	}

	/**
	 * 申込明細登録処理<br>
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception 例外
	 */
	@SuppressWarnings("unchecked")
	public void setMskmDtlData(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ○SYSID
		String inSysId = (String)inMap.get(IN_SYSID);

		// ○EKK0011D020_申込内容承認登録

		// ユーザデータ初期化
		JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0011D020);
		// 上りマッピング
		setInMapEKK0011D020(param, fixedText, inSysId);
		// サービスIF実行
		JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0011D020, TEMP_ID_DTL_EKK0011D020, IN_COL_LIST_EKK0011D020, ERR_COL_EKK0011D020);
		// 処理結果取得
		HashMap kktkRegistMap = (HashMap)inMap.get(JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0011D020));

		// 申込明細番号
		String mskmDetailNo = JFUBPCommon.getBPListValueString(param, fixedText, TEMP_ID_DTL_EKK0011D020, 0, EKK0011D020CBSMsg1List.MSKM_DTL_NO);
		// 更新年月日時分秒
		String updDtmMskm = (String)kktkRegistMap.get(EKK0011D020CBSMsg.UPD_DTM);

		// ○EKK0021C060_申込明細照査・後続業務依頼

		// ユーザデータ初期化
		JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0021C060);
		// 上りマッピング
		setInMapEKK0021C060(param, fixedText, mskmDetailNo, updDtmMskm);
		// サービスIF実行
		JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0021C060, TEMP_ID_DTL_EKK0021C060, IN_COL_LIST_EKK0021C060, ERR_COL_EKK0021C060);

	}

	/**
	 * 上りマッピング項目設定(申込内容承認登録)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param sysId SYSID
	 * @param mskmshoNo 申込書番号
	 * @param mskmshoDtlNo 申込書明細番号
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0011D020(IRequestParameterReadWrite param, String fixedText, String sysId) throws RequestParameterException
	{
		// 機能コード設定(1:チェック&登録)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// SYSID
		inMap.put(EKK0011D020CBSMsg.SYSID, sysId);
		// 申込種別コード
		inMap.put(EKK0011D020CBSMsg.MSKM_SBT_CD, JFUStrConst.KK0971_MSKM_SBT_CD_00026); // "00026"：オプション申込
		// 申込受付年月日時分秒
		inMap.put(EKK0011D020CBSMsg.MSKM_UK_DTM, JFUBPCommon.getOpeDateTimeStamp(null));
		// 申込年月日
		inMap.put(EKK0011D020CBSMsg.MSKM_YMD, JFUBPCommon.getOpeDate(null));
		// コンシューマ営業用申込状態識別コード
		inMap.put(EKK0011D020CBSMsg.CONSMBSN_MSKM_STAT_SKBT_CD, JFUStrConst.CD00760_04); // "04"：承認済

		// 申込内容承認登録明細の設定
		ArrayList list = new ArrayList();
		HashMap childMap = new HashMap();

		for (String key : IN_COL_LIST_EKK0011D020_DTL)
		{
			childMap.put(key, null);
		}

		// 申込形態コード
		childMap.put(EKK0011D020CBSMsg1List.MSKM_FORM_CD, JFUStrConst.CD00591_01); // "01"：WEB
		list.add(childMap);

		inMap.put(TEMP_ID_DTL_EKK0011D020, list);
	}

	/**
	 * 上りマッピング項目設定(申込明細照査・後続業務依頼)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param mskmDtlNo 申込明細番号
	 * @param updDtm 更新年月日時分秒
	 * @param idoDiv 異動区分
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0021C060(IRequestParameterReadWrite param, String fixedText, String mskmDtlNo, String updDtm)
			throws RequestParameterException
	{
		// 機能コード設定(1:チェック&登録)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 申込明細番号
		inMap.put(EKK0021C060CBSMsg.MSKM_DTL_NO, mskmDtlNo);
		// 後続業務依頼年月日
		inMap.put(EKK0021C060CBSMsg.KZKWRK_REQYMD, JFUBPCommon.getOpeDate(null));
		// 更新年月日時分秒(更新前)
		inMap.put(EKK0021C060CBSMsg.UPD_DTM_BF, updDtm);
		// 異動区分
		inMap.put(EKK0021C060CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定
	}

	/**
	 * オプションサービス契約データ登録処理<br>
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataList
	 * @param lastUpdDtm
	 * @return リクエストパラメータ管理クラス
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	public String setOpSvcKeiMskmData(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, ArrayList<HashMap> dataList,
			String lastUpdDtm) throws Throwable
	{
		// 開始ログ
		outDebugLog("----- setOpSvcKeiMskmData Start  -----");

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 世代登録年月日時分秒
		String geneAddDtm = null;

		for (HashMap dtlMap : dataList)
		{

			// ●処理判定
			// 申込、オプション 以外の場合はスキップ
			if (!"1".equals(dtlMap.get("mskm_div")) || !"1".equals(dtlMap.get("svc_div")))
			{
				continue;
			}

			// 050ナンバープラスの場合
			if (JFUStrConst.CD00136_B029.equals(dtlMap.get(OP_SBOP_SVC_CD)))
			{
				// ●オプションサービス電話場番号使用可能一覧照会
				// ユーザデータ初期化
				JFUBPCommon.initData(param, fixedText, IN_COLUMN_LIST_EZM0121B040);
				// 検索エラーなし設定
				JFUBPCommon.ignoreSearchError(param, fixedText);
				// 上りマッピング
				setInMapEZM0121B040(param, fixedText);
				// サービスIF実行
				JFUBPCommon.executeSC(handle, param, fixedText, TEMPLATE_ID_EZM0121B040, TEMPLATE_ID_EZM0121B040_DETAIL, IN_COLUMN_LIST_EZM0121B040,
						ERROR_COLUMN_EZM0121B040);
				// データが存在するか
				if (JFUBPCommon.isExistsTemplateDetail(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_EZM0121B040),
						TEMPLATE_ID_EZM0121B040_DETAIL))
				{
					// 050電話番号
					String telno050 =
							JFUBPCommon.getTemplateListValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_EZM0121B040),
									TEMPLATE_ID_EZM0121B040_DETAIL, EZM0121B040CBSMsg1List.TELNO, 0);
					dtlMap.put(EZM0121B040CBSMsg1List.TELNO, telno050);
					inMap.put(OUT_050_TELNO, telno050);
				}
				else
				{
					// コントロールマップに設定
					setErrorField(param, "n_050_op_telno_err");
					// 例外をスロー
					throw new SCCallException("050電話番号が払い出し不可", String.valueOf(0), JPCModelConstant.RELATION_ERR);
				}

				// ●エイジング対象登録
				// ユーザデータ初期化
				JFUBPCommon.initData(param, fixedText, IN_COLUMN_LIST_EZM0111D010);
				// 上りマッピング
				setInMapEZM0111D010(param, fixedText, (String)inMap.get(OUT_050_TELNO));
				// サービスIF実行
				JFUBPCommon.executeSC(handle, param, fixedText, TEMPLATE_ID_EZM0111D010, TEMPLATE_ID_EZM0111D010_DETAIL, IN_COLUMN_LIST_EZM0111D010, ERROR_COLUMN_EZM0111D010);

			}

			// ○EKK0371D011_オプションサービス契約＜電話＞登録
			// ユーザデータ初期化
			JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0371D011);
			// 上りマッピング
			setInMapEKK0371D011(param, fixedText, dtlMap, lastUpdDtm);
			// サービスIF実行
			JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0371D011, TEMP_ID_DTL_EKK0371D011, IN_COL_LIST_EKK0371D011,
					ERR_COL_EKK0371D011);
			// 更新年月日時分秒
			lastUpdDtm =
					JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0371D011),
							EKK0371D011CBSMsg.UPD_DTM);
			// 世代登録年月日時分秒
			geneAddDtm =
					JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0371D011),
							EKK0371D011CBSMsg.KK0351_GENE_ADD_DTM);
			// オプションサービス契約番号を設定
			dtlMap.put("op_svc_kei_no", JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0371D011),
					EKK0371D011CBSMsg.OP_SVC_KEI_NO));

			// サービス契約内訳ステータス
			String svcKeiUcwkStat = (String)inMap.get(EKK0161_SVC_KEI_UCWK_STAT);

			// 照査の場合（親契約が照査の場合のみ実行する）
			if (JFUStrConst.CD00037_020.equals(svcKeiUcwkStat))
			{
				// ○EKK0371C010_オプションサービス契約＜電話＞照査
				// ユーザデータ初期化
				JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0371C010);
				// 上りマッピング
				setInMapEKK0371C010(param, fixedText, dtlMap, lastUpdDtm);
				// サービスIF実行
				JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0371C010, TEMP_ID_DTL_EKK0371C010, IN_COL_LIST_EKK0371C010,
						ERR_COL_EKK0371C010);
				// 更新年月日時分秒
				lastUpdDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0371C010),
								EKK0371C010CBSMsg.UPD_DTM);
				// 世代登録年月日時分秒
				geneAddDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0371C010),
								EKK0371C010CBSMsg.KK0351_GENE_ADD_DTM);
			}

			// 締結済み、提供中の場合
			if (JFUStrConst.CD00037_030.equals(svcKeiUcwkStat) || JFUStrConst.CD00037_100.equals(svcKeiUcwkStat))
			{
				// ○EKK0371C030_オプションサービス契約＜電話＞照査締結
				// ユーザデータ初期化
				JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0371C030);
				// 上りマッピング
				setInMapEKK0371C030(param, fixedText, dtlMap, lastUpdDtm);
				// サービスIF実行
				JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0371C030, TEMP_ID_DTL_EKK0371C030, IN_COL_LIST_EKK0371C030,
						ERR_COL_EKK0371C030);
				// 更新年月日時分秒
				lastUpdDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0371C030),
								EKK0371C030CBSMsg.UPD_DTM);
				// 世代登録年月日時分秒
				geneAddDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0371C030),
								EKK0371C030CBSMsg.KK0351_GENE_ADD_DTM);
			}

			// 提供中の場合
			if (JFUStrConst.CD00037_100.equals(svcKeiUcwkStat))
			{
				if (isEnabledStartOption(handle, param, fixedText, (String)dtlMap.get(OP_SVC_CD)))
				{
					// ○EKK0371C041_オプションサービス契約＜電話＞開始
					// ユーザデータ初期化
					JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0371C041);
					// 上りマッピング
					setInMapEKK0371C041(param, fixedText, dtlMap, lastUpdDtm);
					// サービスIF実行
					JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0371C041, TEMP_ID_DTL_EKK0371C041, IN_COL_LIST_EKK0371C041,
							ERR_COL_EKK0371C041);
					// 更新年月日時分秒
					lastUpdDtm =
							JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0371C041),
									EKK0371C041CBSMsg.UPD_DTM);
					// 世代登録年月日時分秒
					String tempAddDtm =
							JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0371C041),
									EKK0371C041CBSMsg.KK0351_GENE_ADD_DTM);
					if (!JFUBPCommon.isNull(tempAddDtm))
					{
						geneAddDtm = tempAddDtm;
					}
				}
			}

			// ●更新後ＳＯＤマップの設定
			// 更新後SODオプションマップ
			HashMap updateSODopMap = new HashMap();
			// オプションサービス契約番号
			updateSODopMap.put("chaf_opsvkei_no", (String)dtlMap.get("op_svc_kei_no"));
			// 変更後オプションサービス契約世代登録年月日時分秒(オプションサービス契約)
			updateSODopMap.put("chaf_opsvkei_gene_add_dtm", geneAddDtm);

			// 更新後ＳＯＤマップ
			HashMap updateSODMap = getUpdateSODMap(inMap);
			updateSODMap.put(dtlMap.get(OP_SVC_CD), updateSODopMap);

		}

		// 終了ログ
		outDebugLog("----- setOpSvcKeiMskmData End  -----");
		return lastUpdDtm;

	}

	/**
	 * 上りマッピング項目設定(サービス契約内訳一意照会)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0161A010(IRequestParameterReadWrite param, String fixedText, HashMap dataMap) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(2:カレント)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_2);

		// ＫＥＹ＿サービス契約内訳番号
		inMap.put(EKK0161A010CBSMsg.KEY_SVC_KEI_UCWK_NO, (String)dataMap.get("svc_kei_ucwk_no"));
		// ＫＥＹ＿予約適用年月日
		inMap.put(EKK0161A010CBSMsg.KEY_RSV_APLY_YMD, JFUBPCommon.getOpeDate(null));

	}

	/**
	 * 上りマッピング項目設定(オプションサービス契約＜電話＞登録)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @param lastUpdDtm
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0371D011(IRequestParameterReadWrite param, String fixedText, HashMap dataMap, String lastUpdDtm)
			throws RequestParameterException
	{

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(1:登録のみ)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// オプションサービスコード
		inMap.put(EKK0371D011CBSMsg.OP_SVC_CD, (String)dataMap.get(OP_SVC_CD));
		// 料金コースコード
		inMap.put(EKK0371D011CBSMsg.PCRS_CD, (String)dataMap.get("pcrs_cd"));
		// 料金プランコード
		inMap.put(EKK0371D011CBSMsg.PPLAN_CD, (String)dataMap.get("pplan_cd"));
		// 親契約識別コード
		inMap.put(EKK0371D011CBSMsg.OYA_KEI_SKBT_CD, JFUStrConst.CD00804_03); // "03"：サービス契約内訳
		// サービス契約内訳番号
		inMap.put(EKK0371D011CBSMsg.SVC_KEI_UCWK_NO, (String)dataMap.get("svc_kei_ucwk_no"));
		// SYSID
		inMap.put(EKK0371D011CBSMsg.SYSID, (String)dataMap.get("sysid"));
		// 申込明細番号
		inMap.put(EKK0371D011CBSMsg.MSKM_DTL_NO, JFUBPCommon.getBPListValueString(param, fixedText, TEMP_ID_DTL_EKK0011D020, 0,
				EKK0011D020CBSMsg1List.MSKM_DTL_NO));
		// サービス利用開始希望年月日
		inMap.put(EKK0371D011CBSMsg.SVC_USE_STA_KIBO_YMD, JFUBPCommon.getOpeDate(null));
		// 予約適用開始希望年月日
		inMap.put(EKK0371D011CBSMsg.RSV_TSTA_KIBO_YMD, JFUBPCommon.getOpeDate(null));
		// 異動区分
		inMap.put(EKK0371D011CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定

		// 通話料指定額到達通知指定金額
		inMap.put(EKK0371D011CBSMsg.TWRYO_STIAM_TTU_TCHI_STIAM, null);
		// 請求契約番号
		inMap.put(EKK0371D011CBSMsg.SEIKY_KEI_NO, (String)dataMap.get("seiky_kei_no"));
		// 更新年月日時分秒(更新前)
		inMap.put(EKK0371D011CBSMsg.UPD_DTM_BF, lastUpdDtm);

		// 050オプション電話番号
		inMap.put(EKK0371D011CBSMsg.N_050_OP_TELNO, (String)dataMap.get(EZM0121B040CBSMsg1List.TELNO));

	}

	/**
	 * 上りマッピング項目設定(オプションサービス契約＜電話＞照査)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @param lastUpdDtm
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0371C010(IRequestParameterReadWrite param, String fixedText, HashMap dataMap, String lastUpdDtm)
			throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(1:チェック&登録)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// オプションサービス契約番号
		inMap.put(EKK0371C030CBSMsg.OP_SVC_KEI_NO, JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap,
				TEMP_TEMP_KEY_EKK0371D011), EKK0371D011CBSMsg.OP_SVC_KEI_NO));
		// 異動区分
		inMap.put(EKK0371C010CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定

		// 更新年月日時分秒(更新前)
		inMap.put(EKK0371C010CBSMsg.UPD_DTM_BF, lastUpdDtm);

		// 050オプション電話番号
		inMap.put(EKK0371C010CBSMsg.N_050_OP_TELNO, (String)dataMap.get(EZM0121B040CBSMsg1List.TELNO));

	}

	/**
	 * 上りマッピング項目設定(オプションサービス契約＜電話＞照査締結)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @param lastUpdDtm
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0371C030(IRequestParameterReadWrite param, String fixedText, HashMap dataMap, String lastUpdDtm)
			throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(1:チェック&登録)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// オプションサービス契約番号
		inMap.put(EKK0371C030CBSMsg.OP_SVC_KEI_NO, JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap,
				TEMP_TEMP_KEY_EKK0371D011), EKK0371D011CBSMsg.OP_SVC_KEI_NO));
		// 異動区分
		inMap.put(EKK0371C030CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定

		// 更新年月日時分秒(更新前)
		inMap.put(EKK0371C030CBSMsg.UPD_DTM_BF, lastUpdDtm);

		// 050オプション電話番号
		inMap.put(EKK0371C030CBSMsg.N_050_OP_TELNO, (String)dataMap.get(EZM0121B040CBSMsg1List.TELNO));

	}

	/**
	 * 上りマッピング項目設定(オプションサービス契約＜電話＞開始)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @param lastUpdDtm
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0371C041(IRequestParameterReadWrite param, String fixedText, HashMap dataMap, String lastUpdDtm)
			throws RequestParameterException
	{

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(1:チェック&登録)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// オプションサービス契約番号
		inMap.put(EKK0371C030CBSMsg.OP_SVC_KEI_NO, JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap,
				TEMP_TEMP_KEY_EKK0371D011), EKK0371D011CBSMsg.OP_SVC_KEI_NO));
		// 異動区分
		inMap.put(EKK0371C041CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定

		// 更新年月日時分秒(更新前)
		inMap.put(EKK0371C041CBSMsg.UPD_DTM_BF, lastUpdDtm);
		// 即時/翌月
		inMap.put(EKK0371C041CBSMsg.SKJ_YKGT, JFUStrConst.SKJ_YKGT_SKJ); // "01"：即時

		// 050オプション電話番号
		inMap.put(EKK0371C041CBSMsg.N_050_OP_TELNO, (String)dataMap.get(EZM0121B040CBSMsg1List.TELNO));

	}

	/**
	 * オプションサービス契約データ解約処理<br>
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataList
	 * @param lastUpdDtm
	 * @return String
	 * @throws Throwable 例外
	 */
	@SuppressWarnings("unchecked")
	public String setOpSvcKeiDeleData(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, ArrayList dataList, String lastUpdDtm)
			throws Throwable
	{
		// 開始ログ
		outDebugLog("----- setOpSvcKeiDeleData Start  -----");

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 世代登録年月日時分秒
		String geneAddDtm = null;

		// ●親契約データ取得
		// 　オプションサービスコードからリストから値を取得
		// ○EKK0371B001_オプションサービス契約＜電話＞一覧照会（サービス契約内訳番号）
		// ユーザデータ初期化
		JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0371B001);
		// 上りマッピング
		setInMapEKK0371B001(param, fixedText, inMap);
		// サービスIF実行
		JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0371B001, TEMP_ID_DTL_EKK0371B001, IN_COL_LIST_EKK0371B001,
				ERR_COL_EKK0371B001);
		List<HashMap> opList =
				JFUBPCommon.getTemplateList(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0371B001), TEMP_ID_DTL_EKK0371B001);

		for (int i = 0; i < dataList.size(); i++)
		{

			HashMap dataMap = (HashMap)dataList.get(i);

			// ●処理判定
			// 解約、オプション 以外の場合はスキップ
			if (!"2".equals(dataMap.get("mskm_div")) || !"1".equals(dataMap.get("svc_div")))
			{
				continue;
			}

			for (HashMap dtlMap : opList)
			{
				// オプションサービス契約番号が同じ場合
				if (dtlMap.get("op_svc_kei_no").equals(dataMap.get("op_svc_kei_no")))
				{
					// オプションサービス契約ステータス
					dataMap.put("op_svc_kei_stat", dtlMap.get("op_svc_kei_stat"));
					// サービス開始日
					dataMap.put("svc_staymd", dtlMap.get("svc_staymd"));
				}
			}

			// オプションサービス契約ステータス
			String opSvcKeiStat = (String)dataMap.get("op_svc_kei_stat");

			// 照査済の場合
			if (JFUStrConst.CD00037_020.equals(opSvcKeiStat))
			{
				// ○EKK0351C220_オプションサービス契約キャンセル
				// ユーザデータ初期化
				JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0351C220);
				// 上りマッピング
				setInMapEKK0351C220(param, fixedText, dataMap, lastUpdDtm);
				// サービスIF実行
				JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0351C220, TEMP_ID_DTL_EKK0351C220, IN_COL_LIST_EKK0351C220,
						ERR_COL_EKK0351C220);
				// 更新年月日時分秒
				lastUpdDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0351C220),
								EKK0351C220CBSMsg.UPD_DTM);
				// 世代登録年月日時分秒
				geneAddDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0351C220),
								EKK0351C220CBSMsg.GENE_ADD_DTM);
			}
			else
			{
				// ●非課金判定処理(jdgHiChrg)
				HashMap hiChrgMap = jdgHiChrg(handle, param, fixedText, dataMap);

				// ○EKK0351C241_オプションサービス契約解約
				// ユーザデータ初期化
				JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0351C241);
				// 上りマッピング
				setInMapEKK0351C241(param, fixedText, dataMap, hiChrgMap, lastUpdDtm);
				// サービスIF実行
				JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0351C241, TEMP_ID_DTL_EKK0351C241, IN_COL_LIST_EKK0351C241,
						ERR_COL_EKK0351C241);
				// 世代登録年月日時分秒
				lastUpdDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0351C241),
								EKK0351C241CBSMsg.UPD_DTM);

				// ○EKK0351C250_オプションサービス契約解約確定
				// ユーザデータ初期化
				JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0351C250);
				// 上りマッピング
				setInMapEKK0351C250(param, fixedText, dataMap, hiChrgMap, lastUpdDtm);
				// サービスIF実行
				JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0351C250, TEMP_ID_DTL_EKK0351C250, IN_COL_LIST_EKK0351C250,
						ERR_COL_EKK0351C250);
				// 更新年月日時分秒
				lastUpdDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0351C250),
								EKK0351C250CBSMsg.UPD_DTM);
				// 世代登録年月日時分秒
				geneAddDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0351C250),
								EKK0351C250CBSMsg.GENE_ADD_DTM);
			}

			// 050ナンバープラスの場合
			if (JFUStrConst.CD00136_B029.equals(dataMap.get(OP_SBOP_SVC_CD)))
			{
				// ●エイジング対象使用終了
				// ユーザデータ初期化
				JFUBPCommon.initData(param, fixedText, IN_COLUMN_LIST_EZM0111C010);
				// 上りマッピング
				setInMapEZM0111C010(param, fixedText, (String)dataMap.get("n_050_op_telno"), (String)dataMap.get("zm0111_upd_dtm_bf"));
				// サービスIF実行
				JFUBPCommon.executeSC(handle, param, fixedText, TEMPLATE_ID_EZM0111C010, TEMPLATE_ID_EZM0111C010_DETAIL, IN_COLUMN_LIST_EZM0111C010, ERROR_COLUMN_EZM0111C010);
			}

			// ●更新後ＳＯＤマップの設定
			// 更新後ＳＯＤオプションマップ
			HashMap updateSODopMap = new HashMap();
			// オプションサービス契約番号
			updateSODopMap.put("chaf_opsvkei_no", (String)dataMap.get("op_svc_kei_no"));
			// 変更後オプションサービス契約世代登録年月日時分秒(サブオプションサービス契約)
			updateSODopMap.put("chaf_opsvkei_gene_add_dtm", geneAddDtm);

			// 更新後ＳＯＤマップ
			HashMap updateSODMap = getUpdateSODMap(inMap);
			updateSODMap.put(dataMap.get(OP_SVC_CD), updateSODopMap);

		}

		// 終了ログ
		outDebugLog("----- setOpSvcKeiDeleData End  -----");
		return lastUpdDtm;

	}

	/**
	 * 上りマッピング項目設定(オプションサービス契約キャンセル)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @param lastUpdDtm
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0351C220(IRequestParameterReadWrite param, String fixedText, HashMap dataMap, String lastUpdDtm)
			throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(1:チェック&登録)
		JFUBPCommon.setFuncCode(param, fixedText, (String)inMap.get(IN_FUNC_CD));

		// オプションサービス契約番号
		inMap.put(EKK0351C220CBSMsg.OP_SVC_KEI_NO, (String)dataMap.get("op_svc_kei_no"));

		// 申込明細番号
		if (JPCModelConstant.FUNC_CD_1.equals(inMap.get(IN_FUNC_CD)))
		{
			// 登録モードの場合のみ設定
			inMap.put(EKK0351C220CBSMsg.MSKM_DTL_NO, JFUBPCommon.getBPListValueString(param, fixedText, TEMP_ID_DTL_EKK0011D020, 0,
					EKK0011D020CBSMsg1List.MSKM_DTL_NO));
		}
		// サービスキャンセル理由コード
		inMap.put(EKK0351C220CBSMsg.SVC_CANCEL_RSN_CD, JFUStrConst.CD01390_06); // "06":解約によるキャンセル
		// 異動区分
		inMap.put(EKK0351C220CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定
		// 更新年月日時分秒(更新前)
		inMap.put(EKK0351C220CBSMsg.UPD_DTM_BF, lastUpdDtm);

	}


	/**
	 * 上りマッピング項目設定(オプションサービス契約解約)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @param hiChrgMap
	 * @param lastUpdDtm
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0351C241(IRequestParameterReadWrite param, String fixedText, HashMap dataMap, HashMap hiChrgMap, String lastUpdDtm)
			throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(1:チェック&登録)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// オプションサービス契約番号
		inMap.put(EKK0351C241CBSMsg.OP_SVC_KEI_NO, (String)dataMap.get("op_svc_kei_no"));
		// 申込明細番号
		inMap.put(EKK0351C241CBSMsg.MSKM_DTL_NO, JFUBPCommon.getBPListValueString(param, fixedText, TEMP_ID_DTL_EKK0011D020, 0,
				EKK0011D020CBSMsg1List.MSKM_DTL_NO));
		// 予約適用開始希望年月日
		inMap.put(EKK0351C241CBSMsg.RSV_TSTA_KIBO_YMD, JFUBPCommon.getOpeDate(null));
		// サービス終了年月日
		inMap.put(EKK0351C241CBSMsg.SVC_ENDYMD, JFUBPCommon.getOpeDate(null));
		// サービス解約理由コード
		inMap.put(EKK0351C241CBSMsg.SVC_DLRE_CD, JFUStrConst.CD00879_01); // "01"：通常解約
		// 異動区分
		inMap.put(EKK0351C241CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定
		// 更新年月日時分秒(更新前)
		inMap.put(EKK0351C241CBSMsg.UPD_DTM_BF, lastUpdDtm);

		// ●非課金判定処理(jdgHiChrg)の値
		// サービス課金終了年月日
		inMap.put(EKK0351C241CBSMsg.SVC_CHRG_ENDYMD, hiChrgMap.get("svc_chrg_endymd"));
	}

	/**
	 * 上りマッピング項目設定(オプションサービス契約解約確定)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @param hiChrgMap
	 * @param lastUpdDtm
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0351C250(IRequestParameterReadWrite param, String fixedText, HashMap dataMap, HashMap hiChrgMap, String lastUpdDtm)
			throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(1:チェック&登録)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// オプションサービス契約番号
		inMap.put(EKK0351C250CBSMsg.OP_SVC_KEI_NO, (String)dataMap.get("op_svc_kei_no"));
		// サービス終了年月日
		inMap.put(EKK0351C250CBSMsg.SVC_ENDYMD, com.fujitsu.futurity.bp.custom.common.JFUBPCommon
				.nvl(com.fujitsu.futurity.bp.custom.common.JFUBPCommon.getOpeDate(null)));
		// サービス解約理由コード
		inMap.put(EKK0351C250CBSMsg.SVC_DLRE_CD, JFUStrConst.CD00879_01); // "01"：通常解約
		// 異動区分
		inMap.put(EKK0351C250CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定
		// 更新年月日時分秒(更新前)
		inMap.put(EKK0351C250CBSMsg.UPD_DTM_BF, lastUpdDtm);

		// ●非課金判定処理(jdgHiChrg)の値
		// サービス課金終了年月日
		inMap.put(EKK0351C250CBSMsg.SVC_CHRG_ENDYMD, hiChrgMap.get("svc_chrg_endymd"));
		// 解約時課金フラグ
		inMap.put(EKK0351C250CBSMsg.DSLJI_CHRG_FLG, hiChrgMap.get("dslji_chrg_flg"));
	}

	/**
	 * サブオプションサービス契約データ登録処理<br>
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataList
	 * @param lastUpdDtm
	 * @return String
	 * @throws Exception 例外
	 */
	@SuppressWarnings("unchecked")
	public String setSbopSvcKeiMskmData(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, ArrayList<HashMap> dataList,
			String lastUpdDtm) throws Exception
	{
		// 開始ログ
		outDebugLog("----- setSbopSvcKeiMskmData Start  -----");

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 世代登録年月日時分秒
		String geneAddDtm = null;

		for (HashMap dtlMap : dataList)
		{

			// ●処理判定
			// 申込、サブオプション 以外の場合はスキップ
			if (!"1".equals(dtlMap.get("mskm_div")) || !"2".equals(dtlMap.get("svc_div")))
			{
				continue;
			}

			// オプションサービスコードが未設定の場合にオプションサービス契約番号を設定
			if (JFUBPCommon.isNull(dtlMap.get("op_svc_kei_no")))
			{
				// 更新後ＳＯＤマップ
				HashMap updateSODMap = getUpdateSODMap(inMap);
				// 更新後SODオプションマップ
				HashMap updateSODopMap = (HashMap)updateSODMap.get(dtlMap.get(OP_SVC_CD));
				// オプションサービス契約番号
				if (!JFUBPCommon.isNull(updateSODopMap) && !JFUBPCommon.isNull(updateSODopMap.get("chaf_opsvkei_no")))
				{
					dtlMap.put("op_svc_kei_no", updateSODopMap.get("chaf_opsvkei_no"));
				}
			}

			// ○EKK0431D011_サブオプションサービス契約＜電話＞登録
			// ユーザデータ初期化
			JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0431D011);
			// 上りマッピング
			setInMapEKK0431D011(param, fixedText, dtlMap, lastUpdDtm);
			// サービスIF実行
			JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0431D011, TEMP_ID_DTL_EKK0431D011, IN_COL_LIST_EKK0431D011,
					ERR_COL_EKK0431D011);
			// 更新年月日時分秒
			lastUpdDtm =
					JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0431D011),
							EKK0431D011CBSMsg.UPD_DTM);
			// 世代登録年月日時分秒
			geneAddDtm =
					JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0431D011),
							EKK0431D011CBSMsg.KK0401_GENE_ADD_DTM);
			// サブオプションサービス契約番号を設定
			dtlMap.put("sbop_svc_kei_no", JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0431D011),
					EKK0431D011CBSMsg.SBOP_SVC_KEI_NO));

			// サービス契約内訳ステータス
			String svcKeiUcwkStat = (String)inMap.get(EKK0161_SVC_KEI_UCWK_STAT);

			// 照査の場合（親契約が照査の場合のみ実行する）
			if (JFUStrConst.CD00037_020.equals(svcKeiUcwkStat))
			{
				// ○EKK0431C010_サブオプションサービス契約＜電話＞照査
				// ユーザデータ初期化
				JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0431C010);
				// 上りマッピング
				setInMapEKK0431C010(param, fixedText, dtlMap, lastUpdDtm);
				// サービスIF実行
				JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0431C010, TEMP_ID_DTL_EKK0431C010, IN_COL_LIST_EKK0431C010,
						ERR_COL_EKK0431C010);
				// 更新年月日時分秒
				lastUpdDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0431C010),
								EKK0431C010CBSMsg.UPD_DTM);
				// 世代登録年月日時分秒
				geneAddDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0431C010),
								EKK0431C010CBSMsg.KK0401_GENE_ADD_DTM);
			}

			// 締結済み、提供中の場合
			if (JFUStrConst.CD00037_030.equals(svcKeiUcwkStat) || JFUStrConst.CD00037_100.equals(svcKeiUcwkStat))
			{
				// ○EKK0431C030_サブオプションサービス契約＜電話＞照査締結
				// ユーザデータ初期化
				JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0431C030);
				// 上りマッピング
				setInMapEKK0431C030(param, fixedText, dtlMap, lastUpdDtm);
				// サービスIF実行
				JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0431C030, TEMP_ID_DTL_EKK0431C030, IN_COL_LIST_EKK0431C030,
						ERR_COL_EKK0431C030);
				// 更新年月日時分秒
				lastUpdDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0431C030),
								EKK0431C030CBSMsg.UPD_DTM);
				// 世代登録年月日時分秒
				geneAddDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0431C030),
								EKK0431C030CBSMsg.KK0401_GENE_ADD_DTM);
			}

			// 提供中の場合
			if (JFUStrConst.CD00037_100.equals(svcKeiUcwkStat))
			{
				// ○EKK0431C041_サブオプションサービス契約＜電話＞使用開始
				// ユーザデータ初期化
				JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0431C041);
				// 上りマッピング
				setInMapEKK0431C041(param, fixedText, dtlMap, lastUpdDtm);
				// サービスIF実行
				JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0431C041, TEMP_ID_DTL_EKK0431C041, IN_COL_LIST_EKK0431C041,
						ERR_COL_EKK0431C041);
				// 更新年月日時分秒
				lastUpdDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0431C041),
								EKK0431C041CBSMsg.UPD_DTM);
				// 世代登録年月日時分秒
				String tempAddDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0431C041),
								EKK0431C041CBSMsg.KK0401_GENE_ADD_DTM);
				if (!JFUBPCommon.isNull(tempAddDtm))
				{
					geneAddDtm = tempAddDtm;
				}
			}

			// ●更新後ＳＯＤマップの設定
			// 更新後SODサブオプションマップ
			HashMap updateSODsbopMap = new HashMap();
			// サブオプションサービス契約番号
			updateSODsbopMap.put("chaf_sbopsvkei_no", (String)dtlMap.get("sbop_svc_kei_no"));
			// 変更後サブオプションサービス契約世代登録年月日時分秒(サブオプションサービス契約)
			updateSODsbopMap.put("chaf_sbopsvkei_gene_add_dtm", geneAddDtm);

			// 更新後ＳＯＤマップ
			HashMap updateSODMap = getUpdateSODMap(inMap);
			updateSODMap.put(dtlMap.get("sbop_svc_cd"), updateSODsbopMap);

		}

		// 終了ログ
		outDebugLog("----- setSbopSvcKeiMskmData End  -----");
		return lastUpdDtm;

	}

	/**
		 * 上りマッピング項目設定(オプションサービス契約＜電話＞一覧照会（サービス契約内訳番号）)
		 *
		 * <br>
		 * @param param リクエストパラメータ
		 * @param fixedText サービスメッセージ
		 * @param dataMap
		 * @throws RequestParameterException
		 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0371B001(IRequestParameterReadWrite param, String fixedText, HashMap dataMap) throws RequestParameterException
	{

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(1:)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ＫＥＹ＿サービス契約内訳番号
		inMap.put(EKK0371B001CBSMsg.KEY_SVC_KEI_UCWK_NO, (String)dataMap.get("svc_kei_ucwk_no"));

	}

	/**
	 * 上りマッピング項目設定(サブオプションサービス契約＜電話＞登録)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @param lastUpdDtm
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0431D011(IRequestParameterReadWrite param, String fixedText, HashMap dataMap, String lastUpdDtm)
			throws RequestParameterException
	{

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(1:チェック&登録)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// オプションサービス契約番号
		inMap.put(EKK0431D011CBSMsg.OP_SVC_KEI_NO, (String)dataMap.get("op_svc_kei_no")); // 親データ
		// サブオプションサービスコード
		inMap.put(EKK0431D011CBSMsg.SBOP_SVC_CD, (String)dataMap.get("sbop_svc_cd"));
		// 料金コースコード
		inMap.put(EKK0431D011CBSMsg.PCRS_CD, (String)dataMap.get("pcrs_cd"));
		// 料金プランコード
		inMap.put(EKK0431D011CBSMsg.PPLAN_CD, (String)dataMap.get("pplan_cd"));
		// 申込明細番号
		inMap.put(EKK0431D011CBSMsg.MSKM_DTL_NO, JFUBPCommon.getBPListValueString(param, fixedText, TEMP_ID_DTL_EKK0011D020, 0,
				EKK0011D020CBSMsg1List.MSKM_DTL_NO));
		// サービス利用開始希望年月日
		inMap.put(EKK0431D011CBSMsg.SVC_USE_STA_KIBO_YMD, JFUBPCommon.getOpeDate(null));
		// 予約適用開始希望年月日
		inMap.put(EKK0431D011CBSMsg.RSV_TSTA_KIBO_YMD, JFUBPCommon.getOpeDate(null));
		// 違約金発生コード
		inMap.put(EKK0431D011CBSMsg.PNLTY_HASSEI_CD, null);
		// 異動区分
		inMap.put(EKK0431D011CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定
		// 請求契約番号
		inMap.put(EKK0431D011CBSMsg.SEIKY_KEI_NO, (String)dataMap.get("seiky_kei_no"));
		// 更新年月日時分秒(更新前)
		inMap.put(EKK0431D011CBSMsg.UPD_DTM_BF, lastUpdDtm);

	}

	/**
	 * 上りマッピング項目設定(サブオプションサービス契約＜電話＞照査)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @param lastUpdDtm
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0431C010(IRequestParameterReadWrite param, String fixedText, HashMap dataMap, String lastUpdDtm)
			throws RequestParameterException
	{

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(1:チェック&登録)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// オプションサービス契約番号
		inMap.put(EKK0431C010CBSMsg.OP_SVC_KEI_NO, (String)dataMap.get("op_svc_kei_no"));
		// サブオプションサービス契約番号
		inMap.put(EKK0431C010CBSMsg.SBOP_SVC_KEI_NO, (String)dataMap.get("sbop_svc_kei_no"));
		// 異動区分
		inMap.put(EKK0431C010CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定
		// 照査解約完了コード
		inMap.put(EKK0431C010CBSMsg.SHOSA_DSL_FIN_CD, null);
		// 更新年月日時分秒(更新前)
		inMap.put(EKK0431C010CBSMsg.UPD_DTM_BF, lastUpdDtm);

	}

	/**
	 * 上りマッピング項目設定(サブオプションサービス契約＜電話＞照査締結)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @param lastUpdDtm
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0431C030(IRequestParameterReadWrite param, String fixedText, HashMap dataMap, String lastUpdDtm)
			throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(1:チェック&登録)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// オプションサービス契約番号
		inMap.put(EKK0431C030CBSMsg.OP_SVC_KEI_NO, (String)dataMap.get("op_svc_kei_no"));
		// サブオプションサービス契約番号
		inMap.put(EKK0431C030CBSMsg.SBOP_SVC_KEI_NO, (String)dataMap.get("sbop_svc_kei_no"));
		// 異動区分
		inMap.put(EKK0431C030CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定
		// 更新年月日時分秒(更新前)
		inMap.put(EKK0431C030CBSMsg.UPD_DTM_BF, lastUpdDtm);

	}

	/**
	 * 上りマッピング項目設定(サブオプションサービス契約＜電話＞使用開始)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @param lastUpdDtm
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0431C041(IRequestParameterReadWrite param, String fixedText, HashMap dataMap, String lastUpdDtm)
			throws RequestParameterException
	{

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(1:チェック&登録)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// オプションサービス契約番号
		inMap.put(EKK0431C041CBSMsg.OP_SVC_KEI_NO, (String)dataMap.get("op_svc_kei_no"));
		// サブオプションサービス契約番号
		inMap.put(EKK0431C041CBSMsg.SBOP_SVC_KEI_NO, (String)dataMap.get("sbop_svc_kei_no"));
		// 異動区分
		inMap.put(EKK0431C041CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定
		// 更新年月日時分秒(更新前)
		inMap.put(EKK0431C041CBSMsg.UPD_DTM_BF, lastUpdDtm);
		// 即時/翌月
		inMap.put(EKK0431C041CBSMsg.SKJ_YKGT, JFUStrConst.SKJ_YKGT_SKJ); // "01"：即時

	}

	/**
	 * サブオプションサービス契約データ解約処理<br>
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataList
	 * @param lastUpdDtm
	 * @return String
	 * @throws Throwable 例外
	 */
	@SuppressWarnings("unchecked")
	public String setSbopSvcKeiDeleData(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, ArrayList<HashMap> dataList,
			String lastUpdDtm) throws Throwable
	{
		// 開始ログ
		outDebugLog("----- setSbopSvcKeiDeleData Start  -----");

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 世代登録年月日時分秒
		String geneAddDtm = null;

		for (HashMap dtlMap : dataList)
		{

			// ●処理判定
			// 解約、サブオプション 以外の場合はスキップ
			if (!"2".equals(dtlMap.get("mskm_div")) || !"2".equals(dtlMap.get("svc_div")))
			{
				continue;
			}

			// ●サブオプションサービス契約一意照会
			// ユーザデータ初期化
			JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0401A010);
			// 上りマッピング
			setInMapEKK0401A010(param, fixedText, dtlMap);
			// サービスIF実行
			JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0401A010, TEMP_ID_DTL_EKK0401A010, IN_COL_LIST_EKK0401A010,
					ERR_COL_EKK0401A010);
			// サブオプションサービス契約ステータス
			String sbopSvcKeiStat =
					JFUBPCommon.getTemplateListValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0401A010),
							TEMP_ID_DTL_EKK0401A010, EKK0401A010CBSMsg1List.SBOP_SVC_KEI_STAT, 0);

			// 照査済の場合
			if (JFUStrConst.CD00037_020.equals(sbopSvcKeiStat))
			{
				// ○EKK0401C150_サブオプションサービス契約キャンセル
				// ユーザデータ初期化
				JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0401C150);
				// 上りマッピング
				setInMapEKK0401C150(param, fixedText, dtlMap, lastUpdDtm);
				// サービスIF実行
				JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0401C150, TEMP_ID_DTL_EKK0401C150, IN_COL_LIST_EKK0401C150,
						ERR_COL_EKK0401C150);
				// 更新年月日時分秒
				lastUpdDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0401C150),
								EKK0401C150CBSMsg.UPD_DTM);
				// 世代登録年月日時分秒
				geneAddDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0401C150),
								EKK0401C150CBSMsg.GENE_ADD_DTM);
			}
			else
			{
				// ●非課金判定処理(jdgHiChrg)
				HashMap hiChrgMap = jdgHiChrg(handle, param, fixedText, dtlMap);

				// ○EKK0401C171_サブオプションサービス契約解約
				// ユーザデータ初期化
				JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0401C171);
				// 上りマッピング
				setInMapEKK0401C171(param, fixedText, dtlMap, hiChrgMap, lastUpdDtm);
				// サービスIF実行
				JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0401C171, TEMP_ID_DTL_EKK0401C171, IN_COL_LIST_EKK0401C171,
						ERR_COL_EKK0401C171);
				// 更新年月日時分秒
				lastUpdDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0401C171),
								EKK0401C171CBSMsg.UPD_DTM);

				// ○EKK0401C180_サブオプションサービス契約解約確定
				// ユーザデータ初期化
				JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0401C180);
				// 上りマッピング
				setInMapEKK0401C180(param, fixedText, dtlMap, hiChrgMap, lastUpdDtm);
				// サービスIF実行
				JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0401C180, TEMP_ID_DTL_EKK0401C180, IN_COL_LIST_EKK0401C180,
						ERR_COL_EKK0401C180);
				// 更新年月日時分秒
				lastUpdDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0401C180),
								EKK0401C180CBSMsg.UPD_DTM);
				// 世代登録年月日時分秒
				geneAddDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0401C180),
								EKK0401C180CBSMsg.GENE_ADD_DTM);
			}

			// ●更新後ＳＯＤマップの設定
			// 更新後SODサブオプションマップ
			HashMap updateSODsbopMap = new HashMap();
			// サブオプションサービス契約番号
			updateSODsbopMap.put("chaf_sbopsvkei_no", (String)dtlMap.get("sbop_svc_kei_no"));
			// 変更後サブオプションサービス契約世代登録年月日時分秒(サブオプションサービス契約)
			updateSODsbopMap.put("chaf_sbopsvkei_gene_add_dtm", geneAddDtm);

			// 更新後ＳＯＤマップ
			HashMap updateSODMap = getUpdateSODMap(inMap);
			updateSODMap.put(dtlMap.get("sbop_svc_cd"), updateSODsbopMap);

		}

		// 終了ログ
		outDebugLog("----- setSbopSvcKeiDeleData End  -----");
		return lastUpdDtm;

	}

	/**
	 * 上りマッピング項目設定(サブオプションサービス契約一意照会)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0401A010(IRequestParameterReadWrite param, String fixedText, HashMap dataMap) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(2:カレント)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_2);

		// ＫＥＹ＿オプションサービス契約番号
		inMap.put(EKK0401A010CBSMsg.KEY_OP_SVC_KEI_NO, (String)dataMap.get("op_svc_kei_no"));
		// ＫＥＹ＿サブオプションサービス契約番号
		inMap.put(EKK0401A010CBSMsg.KEY_SBOP_SVC_KEI_NO, (String)dataMap.get("sbop_svc_kei_no"));
		// ＫＥＹ＿予約適用年月日
		inMap.put(EKK0401A010CBSMsg.KEY_RSV_APLY_YMD, JFUBPCommon.getOpeDate(null));

	}

	/**
	 * 上りマッピング項目設定(サブオプションサービス契約キャンセル)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @param lastUpdDtm
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0401C150(IRequestParameterReadWrite param, String fixedText, HashMap dataMap, String lastUpdDtm)
			throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(1:チェック＆登録)
		JFUBPCommon.setFuncCode(param, fixedText, (String)inMap.get(IN_FUNC_CD));

		// オプションサービス契約番号
		inMap.put(EKK0401C150CBSMsg.OP_SVC_KEI_NO, (String)dataMap.get("op_svc_kei_no"));
		// サブオプションサービス契約番号
		inMap.put(EKK0401C180CBSMsg.SBOP_SVC_KEI_NO, (String)dataMap.get("sbop_svc_kei_no"));
		// 申込明細番号
		if (JPCModelConstant.FUNC_CD_1.equals(inMap.get(IN_FUNC_CD)))
		{
			// 登録モードの場合のみ設定
			inMap.put(EKK0401C150CBSMsg.MSKM_DTL_NO, JFUBPCommon.getBPListValueString(param, fixedText, TEMP_ID_DTL_EKK0011D020, 0,
					EKK0011D020CBSMsg1List.MSKM_DTL_NO));
		}
		// サービスキャンセル理由コード
		inMap.put(EKK0401C150CBSMsg.SVC_CANCEL_RSN_CD, JFUStrConst.CD01390_06); // "06":解約によるキャンセル
		// 異動区分
		inMap.put(EKK0401C150CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定
		// 更新年月日時分秒(更新前)
		inMap.put(EKK0401C150CBSMsg.UPD_DTM_BF, lastUpdDtm);

	}

	/**
	 * 上りマッピング項目設定(サブオプションサービス契約解約)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @param hiChrgMap
	 * @param lastUpdDtm
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0401C171(IRequestParameterReadWrite param, String fixedText, HashMap dataMap, HashMap hiChrgMap, String lastUpdDtm)
			throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(1:登録)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// オプションサービス契約番号
		inMap.put(EKK0401C171CBSMsg.OP_SVC_KEI_NO, (String)dataMap.get("op_svc_kei_no"));
		// サブオプションサービス契約番号
		inMap.put(EKK0401C171CBSMsg.SBOP_SVC_KEI_NO, (String)dataMap.get("sbop_svc_kei_no"));
		// 申込明細番号
		inMap.put(EKK0401C171CBSMsg.MSKM_DTL_NO, JFUBPCommon.getBPListValueString(param, fixedText, TEMP_ID_DTL_EKK0011D020, 0,
				EKK0011D020CBSMsg1List.MSKM_DTL_NO));
		// 予約適用開始希望年月日
		inMap.put(EKK0401C171CBSMsg.RSV_TSTA_KIBO_YMD, JFUBPCommon.getOpeDate(null));
		// サービス終了年月日
		inMap.put(EKK0401C171CBSMsg.SVC_ENDYMD, JFUBPCommon.getOpeDate(null));
		// サービス解約理由コード
		inMap.put(EKK0401C171CBSMsg.SVC_DLRE_CD, JFUStrConst.CD00879_01); // "01"：通常解約
		// 異動区分
		inMap.put(EKK0401C171CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定
		// 更新年月日時分秒(更新前)
		inMap.put(EKK0401C171CBSMsg.UPD_DTM_BF, lastUpdDtm);

		// ●非課金判定処理(jdgHiChrg)の値
		// サービス課金終了年月日
		inMap.put(EKK0401C171CBSMsg.SVC_CHRG_ENDYMD, hiChrgMap.get("svc_chrg_endymd"));
	}

	/**
	 * 上りマッピング項目設定(サブオプションサービス契約解約確定)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @param hiChrgMap
	 * @param lastUpdDtm
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0401C180(IRequestParameterReadWrite param, String fixedText, HashMap dataMap, HashMap hiChrgMap, String lastUpdDtm)
			throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(1:チェック＆登録)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// オプションサービス契約番号
		inMap.put(EKK0401C180CBSMsg.OP_SVC_KEI_NO, (String)dataMap.get("op_svc_kei_no"));
		// サブオプションサービス契約番号
		inMap.put(EKK0401C180CBSMsg.SBOP_SVC_KEI_NO, (String)dataMap.get("sbop_svc_kei_no"));
		// サービス終了年月日
		inMap.put(EKK0401C180CBSMsg.SVC_ENDYMD, JFUBPCommon.getOpeDate(null));
		// サービス解約理由コード
		inMap.put(EKK0401C180CBSMsg.SVC_DLRE_CD, JFUStrConst.CD00879_01); // "01"：通常解約
		// 異動区分
		inMap.put(EKK0401C180CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定
		// 更新年月日時分秒(更新前)
		inMap.put(EKK0401C180CBSMsg.UPD_DTM_BF, lastUpdDtm);

		// ●非課金判定処理(jdgHiChrg)の値
		// サービス課金終了年月日
		inMap.put(EKK0401C180CBSMsg.SVC_CHRG_ENDYMD, hiChrgMap.get("svc_chrg_endymd"));
		// 解約時課金フラグ
		inMap.put(EKK0401C180CBSMsg.DSLJI_CHRG_FLG, hiChrgMap.get("dslji_chrg_flg"));
	}

	/**
	 * 進捗登録処理<br>
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param packList
	 * @param optionList
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception 例外
	 */
	@SuppressWarnings("unchecked")
	public void setRpgData(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, ArrayList<HashMap> packList,
			ArrayList<HashMap> optionList) throws Exception
	{
		// 開始ログ
		outDebugLog("----- setRpgData Start  -----");

		// ※パックの付け替えの場合は、解約と申込の２レコード進捗データを作成する。
		// ※パックがつかない場合は、オプションの数分進捗データを作成する。

		// ●パック用
		for (HashMap dtlMap : packList)
		{
			// ○EKK1091D011_進捗登録
			// ユーザデータ初期化
			JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK1091D011);
			// 上りマッピング
			setInMapEKK1091D011(param, fixedText, dtlMap, true);
			// サービスIF実行
			JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK1091D011, TEMP_ID_DTL_EKK1091D011, IN_COL_LIST_EKK1091D011,
					ERR_COL_EKK1091D011);
		}

		// ●オプション用
		for (HashMap dtlMap : optionList)
		{
			// ○EKK1091D011_進捗登録
			// ユーザデータ初期化
			JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK1091D011);
			// 上りマッピング
			setInMapEKK1091D011(param, fixedText, dtlMap, false);
			// サービスIF実行
			JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK1091D011, TEMP_ID_DTL_EKK1091D011, IN_COL_LIST_EKK1091D011,
					ERR_COL_EKK1091D011);

		}

		// 終了ログ
		outDebugLog("----- setRpgData End  -----");
	}

	/**
	 * 上りマッピング項目設定(進捗登録)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @param packFlg
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK1091D011(IRequestParameterReadWrite param, String fixedText, HashMap dataMap, boolean packFlg) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(1:チェック＆登録)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// 申込明細番号
		inMap.put(EKK1091D011CBSMsg.MSKM_DTL_NO, JFUBPCommon.getBPListValueString(param, fixedText, TEMP_ID_DTL_EKK0011D020, 0,
				EKK0011D020CBSMsg1List.MSKM_DTL_NO));
		// 請求契約番号
		inMap.put(EKK1091D011CBSMsg.SEIKY_KEI_NO, dataMap.get("seiky_kei_no"));
		// 請求方法番号(口座)
		inMap.put(EKK1091D011CBSMsg.SEIKY_WAY_NO_KOZA, null);
		// 請求方法番号(クレジットカード)
		inMap.put(EKK1091D011CBSMsg.SEIKY_WAY_NO_CRECARD, null);
		// サービス契約番号
		inMap.put(EKK1091D011CBSMsg.SVC_KEI_NO, dataMap.get("svc_kei_no"));
		// サービス契約内訳番号
		inMap.put(EKK1091D011CBSMsg.SVC_KEI_UCWK_NO, dataMap.get("svc_kei_ucwk_no"));
		// サービス契約回線内訳番号
		inMap.put(EKK1091D011CBSMsg.SVC_KEI_KAISEN_UCWK_NO, dataMap.get("svc_kei_kaisen_ucwk_no"));
		// 機器提供サービス契約番号
		inMap.put(EKK1091D011CBSMsg.KKTK_SVC_KEI_NO, null);
		// オプションサービス契約番号
		// パック申込時は、未登録
		// パック以外申込時は、以下
		// 申込時は、EKK0371D011_オプションサービス契約＜電話＞登録のオプションサービス契約番号
		// 解約時は、入力値
		inMap.put(EKK1091D011CBSMsg.OP_SVC_KEI_NO, dataMap.get("op_svc_kei_no"));
		// 請求オプションサービス契約番号
		inMap.put(EKK1091D011CBSMsg.SEIOPSVC_KEI_NO, null);
		// サブオプションサービス契約番号
		inMap.put(EKK1091D011CBSMsg.SBOP_SVC_KEI_NO, dataMap.get("sbop_svc_kei_no"));
		// 割引サービス契約番号
		// パック申込時のみ設定
		inMap.put(EKK1091D011CBSMsg.WRIB_SVC_KEI_NO, null);
		// 異動区分
		inMap.put(EKK1091D011CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定
		// 異動年月日時分秒
		inMap.put(EKK1091D011CBSMsg.IDO_DTM, JFUBPCommon.getOpeDateTimeStamp(null));
		// 進捗ステータス
		String prgStat = null;
		if (packFlg)
		{
			prgStat = JFUStrConst.CD00647_5112; // "5112"：ｅｏ光電話オプションパック設定完了
		}
		else
		{
			prgStat = JFUStrConst.CD00647_5102; // "5102"：オプション設定完了
		}
		inMap.put(EKK1091D011CBSMsg.PRG_STAT, prgStat);
		// 進捗メモ
		inMap.put(EKK1091D011CBSMsg.PRG_MEMO, dataMap.get("prg_memo"));
		// 進捗特記事項1
		String prgTkjk1 = null;
		if (packFlg)
		{
			// 電話番号 + パック種別 + 操作モード + 日付名称 + 日付
			prgTkjk1 =
					"電話番号：" + inMap.get(IN_TELNO) + "　" + PACK_NM_MAPPING_MAP.get(dataMap.get("pack_div"))
							+ APP_NM_MAPPING_MAP.get(dataMap.get("app_div")) + APP_DATE_MAPPING_MAP.get(dataMap.get("app_div")) + editDateFormat(JFUBPCommon.getOpeDate(null));
		}
		else
		{
			// オプション種別 + "情報" + 操作モード
			prgTkjk1 = OP_SVC_NM_MAPPING_MAP.get(dataMap.get(OP_SBOP_SVC_CD)) + PRG_TKJK_1_JYOHO + APP_NM_MAPPING_MAP.get(dataMap.get("app_div"));
		}
		inMap.put(EKK1091D011CBSMsg.PRG_TKJK_1, prgTkjk1);
		// 進捗特記事項2
		inMap.put(EKK1091D011CBSMsg.PRG_TKJK_2, null);

	}

	/**
	 * SOD用データマップ作成処理<br>
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataList
	 * @throws Exception 例外
	 */
	@SuppressWarnings("unchecked")
	public void setSODMapping(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, ArrayList<HashMap> dataList) throws Exception
	{
		// 開始ログ
		outDebugLog("----- setSODDataMapping Start  -----");

		HashMap inMap = (HashMap)param.getData(fixedText);

		HashMap parentMap = new HashMap();

		// 機能コード
		parentMap.put("func_code", JPCModelConstant.FUNC_CD_1);

		// 更新後ＳＯＤ用データ取得
		HashMap updateSODMap = getUpdateSODMap(inMap);
		// 対象データリスト
		ArrayList<HashMap<String, Object>> arrayList = new ArrayList<HashMap<String, Object>>();

		// 機器データ取得処理
		ArrayList<HashMap> kikiDataList = getKikiDataList(handle, param, fixedText);

		// ●EKK0191A010_サービス契約内訳<eo光電話>一意照会
		// ユーザデータ初期化
		JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0191A010);
		// 上りマッピング
		setInMapEKK0191A010(param, fixedText, inMap);

		// サービスIF実行
		JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0191A010, TEMP_ID_DTL_EKK0191A010, IN_COL_LIST_EKK0191A010,
				ERR_COL_EKK0191A010);

		// サービス契約内訳番号
		HashMap svcKeiUcwkInfoTelMap =
				JFUBPCommon.getTemplateListMap(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0191A010),
						TEMP_ID_DTL_EKK0191A010, 0);

		// VA機器変更番号
		String vaKikiChgNo = (String)svcKeiUcwkInfoTelMap.get(EKK0191A010CBSMsg1List.VA_KIKI_CHG_NO);

		Set<String> vaKikiChgNoSet = new HashSet<String>();
		for (HashMap kikiMap : kikiDataList)
		{

			if (!JFUBPCommon.isNull(vaKikiChgNo)) {
				// VA機器変更番号が存在する場合

				// 機器提供サービス契約番号
				String kktkSvcKeiNo = (String)kikiMap.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO);

				// ●機器提供サービス契約一意照会
				// ユーザデータ初期化
				JFUBPCommon.initData(param, fixedText, IN_COLUMN_LIST_EKK0341A010);
				// 検索エラーなし設定
				JFUBPCommon.ignoreSearchError(param, fixedText);
				// 上りマッピング
				setInMapKktkSvcKeiUqSearch(param, fixedText, kktkSvcKeiNo);
				// サービスIF実行
				JFUBPCommon.executeSC(handle, param, fixedText, TEMPLATE_ID_EKK0341A010, TEMPLATE_ID_EKK0341A010_DETAIL, IN_COLUMN_LIST_EKK0341A010, ERROR_COLUMN_EKK0341A010);

				// 機器提供サービス契約情報
				HashMap kktkInfoMap = JFUBPCommon.getTemplateListMap(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_EKK0341A010), TEMPLATE_ID_EKK0341A010_DETAIL, 0);

				// 機器変更番号
				String kikiChgNo = (String)kktkInfoMap.get(EKK0341A010CBSMsg1List.KIKI_CHG_NO);
				if (!vaKikiChgNo.equals(kikiChgNo) || vaKikiChgNoSet.contains(kikiChgNo))
				{
					// サービス契約内訳＜eo光電話＞のVA機器変更番号と機器提供サービス契約と異なる場合はスキップする。
					continue;
				}
				else
				{
					vaKikiChgNoSet.add(kikiChgNo);
				}
			}

			// オプション、サブオプションの数分ループを実行する。
			for (HashMap dtlMap : dataList)
			{
				// SODマップ
				HashMap<String, Object> childMap = new HashMap<String, Object>();

				// SOD基本情報
				HashMap<String, Object> sodKihonInfo = new HashMap<String, Object>();
				// SYSID
				sodKihonInfo.put("sysid", dtlMap.get("sysid"));
				// 異動区分
				sodKihonInfo.put("ido_div", JFUStrConst.CD00576_00031);
				// SODマップに追加
				childMap.put("sod_kihon_info", sodKihonInfo);

				// サービス契約情報
				HashMap<String, Object> svcKeiInfo = new HashMap<String, Object>();
				// サービス契約番号
				svcKeiInfo.put("svc_kei_no", dtlMap.get("svc_kei_no"));
				// SODマップに追加
				childMap.put("svc_kei_info", svcKeiInfo);

				// サービス契約内訳情報
				HashMap<String, Object> svcKeiUcwkInfo = new HashMap<String, Object>();
				// サービス契約内訳番号
				svcKeiUcwkInfo.put("svc_kei_ucwk_no", dtlMap.get("svc_kei_ucwk_no"));
				// 変更前サービス契約内訳世代登録年月日時分秒(サービス契約内訳)
				svcKeiUcwkInfo.put("chaf_svc_kei_ucwk_gene_add_dtm", dtlMap.get("chaf_svc_kei_ucwk_gene_add_dtm"));
				// SODマップに追加
				childMap.put("svc_kei_ucwk_info", svcKeiUcwkInfo);

				// オプションサービス契約情報
				HashMap<String, Object> opsvkeiInfo = new HashMap<String, Object>();

				// ※処理フラグが解約・回復の場合、またはサブオプションの申込の場合、変更前情報が設定される。
				// 変更前オプションサービス契約番号
				opsvkeiInfo.put("chbf_opsvkei_no", dtlMap.get("chbf_opsvkei_no"));
				// 変更前オプションサービス契約世代登録年月日時分秒(オプションサービス契約)
				opsvkeiInfo.put("chbf_opsvkei_gene_add_dtm", dtlMap.get("chbf_opsvkei_gene_add_dtm"));
				// 変更前サブオプションサービス契約番号
				opsvkeiInfo.put("chbf_sbopsvkei_no", dtlMap.get("chbf_sbopsvkei_no"));
				// 変更前サブオプションサービス契約世代登録年月日時分秒(サブオプションサービス契約)
				opsvkeiInfo.put("chbf_sbopsvkei_gene_add_dtm", dtlMap.get("chbf_sbopsvkei_gene_add_dtm"));

				// ●変更後●
				// 更新後SODオプションマップ
				HashMap updateSODOpMap = (HashMap)updateSODMap.get(dtlMap.get(OP_SVC_CD));
				if (updateSODOpMap != null)
				{
					// 変更後オプションサービス契約番号
					opsvkeiInfo.put("chaf_opsvkei_no", updateSODOpMap.get("chaf_opsvkei_no"));
					// 変更後オプションサービス契約世代登録年月日時分秒(オプションサービス契約)
					opsvkeiInfo.put("chaf_opsvkei_gene_add_dtm", updateSODOpMap.get("chaf_opsvkei_gene_add_dtm"));
				}
				else
				{
					// 上記以外
					// 変更後オプションサービス契約番号
					opsvkeiInfo.put("chaf_opsvkei_no", dtlMap.get("chaf_opsvkei_no"));
					// 変更後オプションサービス契約世代登録年月日時分秒(オプションサービス契約)
					opsvkeiInfo.put("chaf_opsvkei_gene_add_dtm", dtlMap.get("chaf_opsvkei_gene_add_dtm"));
				}
				// 更新後SODサブオプションマップ
				HashMap updateSODSbopMap = (HashMap)updateSODMap.get(dtlMap.get("sbop_svc_cd"));
				if (updateSODSbopMap != null)
				{
					// 変更後サブオプションサービス契約番号
					opsvkeiInfo.put("chaf_sbopsvkei_no", updateSODSbopMap.get("chaf_sbopsvkei_no"));
					// 変更後サブオプションサービス契約世代登録年月日時分秒(サブオプションサービス契約)
					opsvkeiInfo.put("chaf_sbopsvkei_gene_add_dtm", updateSODSbopMap.get("chaf_sbopsvkei_gene_add_dtm"));
				}
				// ●変更後●

				// SODマップに追加
				childMap.put("opsvkei_info", opsvkeiInfo);

				// 機器提供サービス内訳情報
				HashMap<String, Object> kktsvkeiInfo = new HashMap<String, Object>();

				// 変更後機器提供サービス契約番号
				kktsvkeiInfo.put("chaf_kktsvkei_no", kikiMap.get("kktk_svc_kei_no"));

				// 変更後機器提供サービス契約世代登録年月日時分秒
				kktsvkeiInfo.put("chaf_kktsvkei_gene_add_dtm", kikiMap.get("gene_add_dtm"));

				// SODマップに追加
				childMap.put("kktsvkei_info", kktsvkeiInfo);

				// SODマップを対象データリストに追加
				arrayList.add(childMap);
			}

		}

		// 対象データリストをマップに追加
		parentMap.put("trgt_data_list", arrayList);

		// 対象データリストのマッピング
		param.setData("hakkoSODMap", parentMap);

		// 開始ログ
		outDebugLog("----- setSODDataMapping End  -----");

	}

	/**
	 * 機器リスト取得処理<br>
	 *
	 * <br>
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return ArrayList
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public ArrayList getKikiDataList(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		// 機器データを取得する
		// 旧VAか多機能ルーターを取得する

		ArrayList<HashMap> retList = new ArrayList<HashMap>();

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ●IN項目
		// ○SYSID
		String inSysId = (String)inMap.get(IN_SYSID);
		// ○サービス契約番号
		String inSvcKeiNo = (String)inMap.get(IN_SVC_KEI_NO);
		// ○サービス契約回線内訳番号
		String inSvcKeiKaisenUcwkNo = (String)inMap.get(IN_SVC_KEI_KAISEN_UCWK_NO);

		// ○EKK0341B002_機器提供サービス契約一覧照会(サービス契約番号)
		// ユーザデータ初期化
		JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0341B002);
		//検索エラーなし設定
		JFUBPCommon.ignoreSearchError(param, fixedText);
		// 上りマッピング
		setInMapEKK0341B002(param, fixedText, inSvcKeiNo);
		// サービスIF実行
		JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0341B002, TEMP_ID_DTL_EKK0341B002, IN_COL_LIST_EKK0341B002, ERR_COL_EKK0341B002);
		List<HashMap> kikiVaList =
				JFUBPCommon.getTemplateList(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0341B002), TEMP_ID_DTL_EKK0341B002);
		retList.addAll(kikiVaList);

		// ○EKK2811B503_機器オプションサービス契約一覧照会（フロント）
		// ユーザデータ初期化
		JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK2811B503);
		//検索エラーなし設定
		JFUBPCommon.ignoreSearchError(param, fixedText);
		// 上りマッピング
		setInMapEKK2811B503(param, fixedText, inSysId, inSvcKeiKaisenUcwkNo);
		// サービスIF実行
		JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK2811B503, TEMP_ID_DTL_EKK2811B503, IN_COL_LIST_EKK2811B503, ERR_COL_EKK2811B503);
		List<HashMap> kikiTknList =
				JFUBPCommon.getTemplateList(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK2811B503), TEMP_ID_DTL_EKK2811B503);
		for (HashMap dataMap : kikiTknList)
		{

			// 電話オプション以外の場合はスキップ
			if (!JFUStrConst.KK2801_KKOP_SVC_CD_G02.equals(dataMap.get("kkop_svc_cd")))
			{
				continue;
			}

			retList.add(dataMap);
		}

		return retList;
	}

	/**
	 * 上りマッピング項目設定(機器提供サービス契約一覧照会(サービス契約番号))
	 *
	 * <br>
	 * @param param
	 * @param fixedText
	 * @param svcKeiNo
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0341B002(IRequestParameterReadWrite param, String fixedText, String svcKeiNo) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(1:)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// サービス契約番号
		inMap.put(EKK0341B002CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);

	}

	/**
	 * 上りマッピング項目設定(機器オプションサービス契約一覧照会（フロント）)
	 *
	 * <br>
	 * @param param
	 * @param fixedText
	 * @param sysId
	 * @param svcKeiKaisenUcwkNo
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK2811B503(IRequestParameterReadWrite param, String fixedText, String sysId, String svcKeiKaisenUcwkNo)
			throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(1:)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// SYSID
		inMap.put(EKK2811B503CBSMsg.KEY_SYSID, sysId);
		// サービス契約回線内訳番号
		inMap.put(EKK2811B503CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO, svcKeiKaisenUcwkNo);
	}

	/**
	 * 電話セレクトオプションパック操作部品用データマップ作成<br>
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param packList パックリスト
	 * @param lastUpdDtm
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public void setTelSelOptPackMapping(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, ArrayList packList,
			String lastUpdDtm) throws Throwable
	{
		// 開始ログ
		outDebugLog("----- setTelSelOptPackMapping Start  -----");

		// ※パックの付け替えの場合は、解約と申込の２回マップデータを作成する。
		// ※パック付け替え時に、2回目の呼出で、最新年月日時分秒（更新前）を渡す必要がある。

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// パック申込がある場合
		if (packList.size() > 0)
		{
			HashMap<String, Object> parentMap = new HashMap<String, Object>();

			// 機能コード
			parentMap.put("func_cd", JPCModelConstant.FUNC_CD_1);
			// 処理区分
			parentMap.put("trn_div", "00");
			// SYSID
			parentMap.put("sysid", inMap.get(IN_SYSID));
			// サービス契約番号
			parentMap.put("svc_kei_no", inMap.get(IN_SVC_KEI_NO));
			// サービス契約内訳番号
			parentMap.put("svc_kei_ucwk_no", inMap.get(IN_SVC_KEI_UCWK_NO));
	
			param.setData("OpPackCC", parentMap);
	
			// 割引パックCC呼出
			execute(handle, param, "OpPackCC");
			//結果を取得
			HashMap outMap = (HashMap)param.getData("OpPackCC");

			ArrayList<HashMap<String, String>> wribList = (ArrayList<HashMap<String, String>>)outMap.get("wrib_svc_kei_list");

			int cntPackMskm = 0;
			for (int i = 0; i < packList.size(); i++)
			{
				HashMap dataMap = (HashMap)packList.get(i);
				// パック申込
				if ("01".equals((String)dataMap.get("trn_div")))
				{
					cntPackMskm++;
				}
				// パック解約
				if ("02".equals((String)dataMap.get("trn_div")))
				{
					cntPackMskm--;
				}
			}

			//結果のリスト分ループ処理
			for (int j = 0; wribList != null && wribList.size() > j; j++)
			{
				HashMap<String, String> wribInfo = wribList.get(j);
				//サービス利用開始希望年月日
				String svcUseStaKiboYmd = (String)wribInfo.get("svc_use_sta_kibo_ymd");

				// 運用日 < サービス開始希望日の場合
				if (!JFUBPCommon.isNull(svcUseStaKiboYmd) && Integer.parseInt(JFUBPCommon.getOpeDate(null)) < Integer.parseInt(svcUseStaKiboYmd))
				{
					// コントロールマップに設定
					setErrorField(param, "ido_rsv_dtl_cd_err");
					// 例外をスロー
					throw new SCCallException("オプションパックのサービス開始希望日が運用日より未来日", String.valueOf(0), JPCModelConstant.RELATION_ERR);
				}
				// 割引契約ステータスが解約済み／キャンセル済み以外の場合
				if (!WRIB_SVC_KEI_STAT_MUKO.contains(wribInfo.get("wrib_svc_kei_stat")))
				{
					cntPackMskm++;
				}
			}

			// パックを複数登録した場合はエラー
			if (cntPackMskm > 1)
			{
				// 例外をスロー
				throw new SCCallException("割引重複申込エラー", String.valueOf(0), JPCModelConstant.RELATION_ERR);
			}
		}

		// チェック時は照会のみ
		if (JPCModelConstant.FUNC_CD_2.equals(inMap.get(IN_FUNC_CD)))
		{
			return;
		}

		for (int i = 0; i < packList.size(); i++)
		{
			HashMap dataMap = (HashMap)packList.get(i);

			HashMap<String, Object> parentMap = new HashMap<String, Object>();

			// 機能コード
			parentMap.put("func_cd", inMap.get(IN_FUNC_CD));
			// 処理区分
			parentMap.put("trn_div", (String)dataMap.get("trn_div"));
			// SYSID
			parentMap.put("sysid", (String)dataMap.get("sysid"));
			// サービス契約番号
			parentMap.put("svc_kei_no", (String)dataMap.get("svc_kei_no"));
			// サービス契約内訳番号
			parentMap.put("svc_kei_ucwk_no", (String)dataMap.get("svc_kei_ucwk_no"));
			// 登録時
			if (JPCModelConstant.FUNC_CD_1.equals(inMap.get(IN_FUNC_CD)))
			{
				// 申込明細番号
				parentMap.put("mskm_dtl_no", JFUBPCommon.getBPListValueString(param, fixedText, TEMP_ID_DTL_EKK0011D020, 0,
						EKK0011D020CBSMsg1List.MSKM_DTL_NO));
			}
			if ("01".equals((String)dataMap.get("trn_div")))
			{
				// 登録時
				// サービス契約理由コード
				parentMap.put("svc_dlre_cd", null);
				// サービスキャンセル理由コード
				parentMap.put("svc_cancel_rsn_cd", null);
			}
			else
			{
				// 解約時
				// サービス契約理由コード
				parentMap.put("svc_dlre_cd", JFUStrConst.CD00879_01); // "01"：通常解約
				// サービスキャンセル理由コード
				parentMap.put("svc_cancel_rsn_cd", JFUStrConst.CD01390_06); // "06":解約によるキャンセル
			}
			// 起算日
			parentMap.put("kisan_ymd", JFUBPCommon.getOpeDate(null));
			// 利用開始希望年月日
			parentMap.put("use_sta_kibo_ymd", JFUBPCommon.getOpeDate(null));
			// 異動区分
			parentMap.put("ido_div", JFUStrConst.CD00576_00031); // "00031"：オプション設定
			// パック割区分
			parentMap.put("pack_div", (String)dataMap.get("pack_div"));
			// 課金区分
			parentMap.put("kakin_div", "1"); // "1"：課金
			// 違約金区分
			parentMap.put("pnlty_div", "0"); // "0":違約金なし
			// 割引サービス契約番号
			parentMap.put("wrib_svc_kei_no", null);
			if (i == 0)
			{
				// 1回目
				// 更新年月日時分秒（更新前）
				parentMap.put("kk0081_upd_dtm", lastUpdDtm);
			}
			else if (i == 1)
			{
				// 2回目
				// 更新年月日時分秒（更新前）
				parentMap.put("kk0081_upd_dtm", ((HashMap)param.getData("OpPackCC")).get("upd_dtm"));
			}

			param.setData("OpPackCC", parentMap);

			// 割引パックCC呼出
			execute(handle, param, "OpPackCC");
		}

		// 終了ログ
		outDebugLog("----- setTelSelOptPackMapping End  -----");
	}

	/**
	 * 非課金判定処理
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap データマップ
	 * @return HashMap
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private HashMap jdgHiChrg(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, HashMap dataMap) throws Throwable
	{
		// 返却用マップ
		HashMap returnMap = new HashMap();

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);
		// IN項目:オプションサービスコード
		String inMapOpSvcCd = (String)dataMap.get(OP_SVC_CD);
		// IN項目:サービス区分
		String svcDiv = (String)dataMap.get("svc_div"); // 1:オプション、2:サブオプション

		// 運用日付
		String opeDate = JFUBPCommon.getOpeDate(null);
		// サービス課金開始年月日
		String svcChrgStaYmd = null;

		// ■ オプションの場合 ■
		if ("1".equals(svcDiv) || "2".equals(svcDiv))
		{
			svcChrgStaYmd = getSvcChrgStartYMD(handle, param, fixedText, (String)dataMap.get("op_svc_kei_no"), (String)dataMap.get("svc_kei_ucwk_no"));

			// オプションサービス契約ステータス
			String opSvcKeiStat = (String)dataMap.get("op_svc_kei_stat");
			// サービス開始年月日
			String svcStaYmd = (String)dataMap.get("svc_staymd");

			HashMap trgtDataOp = new HashMap();

			// サービス提供中の場合
			if (JFUStrConst.CD00037_100.equals(opSvcKeiStat))
			{
				// サービス契約サービス課金開始日
				trgtDataOp.put("svcKeiChrgStaYmd", svcChrgStaYmd);
				// オプション解約種別フラグ("2")
				trgtDataOp.put("dslSbtFlg", "2");
				// オプションサービスコード
				trgtDataOp.put("opSvcCd", inMapOpSvcCd);
				// オプションサービス契約サービス利用開始日
				trgtDataOp.put("opSvcUseStaYmd", svcStaYmd);
				// オプションサービス契約サービス利用終了日
				trgtDataOp.put("opSvcUseEndYmd", opeDate);

				// 非課金判定処理
				HashMap<String, Object> resMap = JKKBpCommon.jdgHiChrg(trgtDataOp);

				// ●上りマッピング
				// サービス課金終了年月日
				returnMap.put(EKK0401C180CBSMsg.SVC_CHRG_ENDYMD, resMap.get(RET_PARAM_SVC_CHRG_ENDYMD));
				// 解約時課金フラグ
				returnMap.put(EKK0401C180CBSMsg.DSLJI_CHRG_FLG, resMap.get(RET_PARAM_CHRGFLG));
			}
			else
			{
				// ●上りマッピング
				// サービス課金終了年月日
				returnMap.put(EKK0401C180CBSMsg.SVC_CHRG_ENDYMD, JFUCommonUtil.addDay(opeDate, -1));
				// 解約時課金フラグ
				returnMap.put(EKK0401C180CBSMsg.DSLJI_CHRG_FLG, JFUStrConst.CD00002_0);
			}
		}

		// ■ サブオプションの場合 ■
		// ■ サブオプションの場合 ■
		// ■ サブオプションの場合 ■

		if ("2".equals(svcDiv))
		{
			// ●サブオプションサービス契約一意照会
			// ユーザデータ初期化
			JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0401A010);
			// 上りマッピング
			setInMapEKK0401A010(param, fixedText, dataMap);
			// サービスIF実行
			JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0401A010, TEMP_ID_DTL_EKK0401A010, IN_COL_LIST_EKK0401A010,
					ERR_COL_EKK0401A010);
			// サブオプションサービス契約ステータス
			String sbopSvcKeiStat =
					JFUBPCommon.getTemplateListValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0401A010),
							TEMP_ID_DTL_EKK0401A010, EKK0401A010CBSMsg1List.SBOP_SVC_KEI_STAT, 0);
			// サービス開始年月日
			String svcStaYmd =
					JFUBPCommon.getTemplateListValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0401A010),
							TEMP_ID_DTL_EKK0401A010, EKK0401A010CBSMsg1List.SVC_STAYMD, 0);

			// サービス提供中の場合
			if (JFUStrConst.CD00037_100.equals(sbopSvcKeiStat))
			{
				HashMap trgtDataSbop = new HashMap();

				// 解約種別フラグ("3")
				trgtDataSbop.put("dslSbtFlg", "3");
				// サービス契約サービス課金開始日
				trgtDataSbop.put("svcKeiChrgStaYmd", svcChrgStaYmd);
				// サブオプションサービス契約サービス利用開始日
				trgtDataSbop.put("subOpSvcUseStaYmd", svcStaYmd);
				// サブオプションサービス契約サービス利用終了日
				trgtDataSbop.put("subOpSvcUseEndYmd", opeDate);

				// 非課金判定処理
				HashMap<String, Object> resMap = JKKBpCommon.jdgHiChrg(trgtDataSbop);

				// ●上りマッピング
				// サービス課金終了年月日
				returnMap.put(EKK0401C180CBSMsg.SVC_CHRG_ENDYMD, resMap.get(RET_PARAM_SVC_CHRG_ENDYMD));
				// 解約時課金フラグ
				returnMap.put(EKK0401C180CBSMsg.DSLJI_CHRG_FLG, resMap.get(RET_PARAM_CHRGFLG));
			}
			else
			{
				// ●上りマッピング
				// サービス課金終了年月日
				returnMap.put(EKK0401C180CBSMsg.SVC_CHRG_ENDYMD, JFUCommonUtil.addDay(opeDate, -1));
				// 解約時課金フラグ
				returnMap.put(EKK0401C180CBSMsg.DSLJI_CHRG_FLG, JFUStrConst.CD00002_0);

			}
		}

		return returnMap;
	}

	/**
	 * 更新用SODマップを取得。
	 * <br>
	 * @param inMap
	 * @return HashMap
	 */
	@SuppressWarnings("unchecked")
	private HashMap getUpdateSODMap(HashMap inMap)
	{

		HashMap updateSODMap = (HashMap)inMap.get("update_sod_Map");

		if (updateSODMap == null)
		{

			updateSODMap = new HashMap();
			inMap.put("update_sod_Map", updateSODMap);
		}

		return updateSODMap;
	}

	/**
	 * チェック処理
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		return null;
	}

	/**
	 * デバッグ出力処理です。
	 *
	 * <br>
	 * @param obj 出力内容
	 */
	private void outDebugLog(Object obj)
	{
		// デバッグ出力
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), obj, null, null, null);
	}

	/**
	 * 上りマッピング項目設定(サービス契約内訳<eo光電話>一意照会)
	 *
	 * <br>
	 *
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0191A010(IRequestParameterReadWrite param,
			String fixedText, HashMap dataMap) throws RequestParameterException {

		// ユーザデータ取得
		HashMap inMap = (HashMap) param.getData(fixedText);

		// 機能コード設定(4:カレント)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_4);

		// ＫＥＹ＿サービス契約内訳番号
		inMap.put(EKK0191A010CBSMsg.KEY_SVC_KEI_UCWK_NO, (String) dataMap.get("svc_kei_ucwk_no"));

	}

	/**
	 * 上りマッピング項目設定(機器提供サービス契約一意照会)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapKktkSvcKeiUqSearch(IRequestParameterReadWrite param, String fixedText, String kktkSvcKeiNo)
			throws RequestParameterException
	{
		// 機能コード設定(1)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_2);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ＫＥＹ＿機器提供サービス契約番号
		inMap.put(EKK0341A010CBSMsg.KEY_KKTK_SVC_KEI_NO, kktkSvcKeiNo);
		// 予約適用年月日
		inMap.put(EKK0341A010CBSMsg.KEY_RSV_APLY_YMD, JFUBPCommon.getOpeDate(null));
	}

	/**
	 * 電話オプションサービスのサービス課金開始日を取得する。
	 * <br>
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param opSvcKeiNo
	 * @param inMapSvcKeiUcwkNo
	 */
	@SuppressWarnings("unchecked")
	private String getSvcChrgStartYMD(
			SessionHandle handle,
			IRequestParameterReadWrite param, 
			String fixedText,
			String opSvcKeiNo,
			String inMapSvcKeiUcwkNo) throws Throwable
	{
		HashMap dataMap = new HashMap();
		// オプションサービス契約番号から履歴一覧を取得する
		// ユーザデータ初期化
		JFUBPCommon.initData(param, fixedText, IN_COLUMN_LIST_EKK0351B003);
		
		// 上りマッピング
		setInMapEKK0351B003(param, fixedText, opSvcKeiNo);

		// サービスIF実行
		JFUBPCommon.executeSC(handle, param, fixedText, TEMPLATE_ID_EKK0351B003, 
				                            TEMPLATE_ID_EKK0351B003_DETAIL, 
				                            IN_COLUMN_LIST_EKK0351B003, 
				                            ERROR_COLUMN_EKK0351B003);

		HashMap inMap = (HashMap)param.getData(fixedText);

		// 取得したデータから内訳番号を取得
		String svc_kei_ucwk_no = null;

		for (HashMap outMapEKK0351B003 : JFUBPCommon.getTemplateList(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMPLATE_KEY_EKK0351B003), TEMPLATE_ID_EKK0351B003_DETAIL)) 
		{
			String wrk_ucwk_no = (String)outMapEKK0351B003.get(EKK0351B003CBSMsg1List.SVC_KEI_UCWK_NO);
			if (svc_kei_ucwk_no == null)
			{
				svc_kei_ucwk_no = wrk_ucwk_no;
			}
			else if (!svc_kei_ucwk_no.equals(wrk_ucwk_no))
			{
				svc_kei_ucwk_no = wrk_ucwk_no;
				break;
			}
		}

		// 内訳番号が異なる場合、新たな内訳番号でサービス課金開始日を取得する
		if (svc_kei_ucwk_no != null && !svc_kei_ucwk_no.equals(inMapSvcKeiUcwkNo))
		{
			JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0161A010);

			// 上りマッピング
			dataMap.put("svc_kei_ucwk_no", svc_kei_ucwk_no);
			setInMapEKK0161A010(param, fixedText, dataMap);

			// サービスIF実行
			JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0161A010, TEMP_ID_DTL_EKK0161A010, IN_COL_LIST_EKK0161A010, ERR_COL_EKK0161A010);
			
			String chrgStaYmd = JFUBPCommon.getTemplateListValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0161A010), 
                     TEMP_ID_DTL_EKK0161A010,
                     EKK0161A010CBSMsg1List.SVC_CHRG_STAYMD, 0);
			if (chrgStaYmd != null && chrgStaYmd.length() > 0)
			{
				return chrgStaYmd;
			}
		}

		// デフォルトの課金開始日を返却する。
		return (String)inMap.get(EKK0161_SVC_CHRG_STAYMD);
	}

	/**
	 * オプションサービス契約履歴一覧照会のinMapを設定
	 * <br>
	 * @param param 
	 * @param fixedText
	 * @param opSvcKeiNo
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0351B003(IRequestParameterReadWrite param, String fixedText, String opSvcKeiNo) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(1)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ＫＥＹ＿オプションサービス契約番号
		inMap.put(EKK0351B003CBSMsg.KEY_OP_SVC_KEI_NO, opSvcKeiNo);

		// ＫＥＹ＿オプションサービス契約番号
		inMap.put(EKK0351B003CBSMsg.KEY_OP_SVC_KEI_NO, opSvcKeiNo);
	}

	/**
	 * 上りマッピング項目設定(オプションサービス契約＜電話＞登録)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @param lastUpdDtm
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0371D010(IRequestParameterReadWrite param, String fixedText, HashMap dataMap, String lastUpdDtm)
			throws RequestParameterException
	{

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(2:チェックのみ)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_2);

		// オプションサービスコード
		inMap.put(EKK0371D010CBSMsg.OP_SVC_CD, (String)dataMap.get(OP_SVC_CD));
		// 料金コースコード
		inMap.put(EKK0371D010CBSMsg.PCRS_CD, (String)dataMap.get("pcrs_cd"));
		// 料金プランコード
		inMap.put(EKK0371D010CBSMsg.PPLAN_CD, (String)dataMap.get("pplan_cd"));
		// 親契約識別コード
		inMap.put(EKK0371D010CBSMsg.OYA_KEI_SKBT_CD, JFUStrConst.CD00804_03); // "03"：サービス契約内訳
		// サービス契約内訳番号
		inMap.put(EKK0371D010CBSMsg.SVC_KEI_UCWK_NO, (String)dataMap.get("svc_kei_ucwk_no"));
		// SYSID
		inMap.put(EKK0371D010CBSMsg.SYSID, (String)dataMap.get("sysid"));
		// サービス利用開始希望年月日
		inMap.put(EKK0371D010CBSMsg.SVC_USE_STA_KIBO_YMD, JFUBPCommon.getOpeDate(null));
		// 予約適用開始希望年月日
		inMap.put(EKK0371D010CBSMsg.RSV_TSTA_KIBO_YMD, JFUBPCommon.getOpeDate(null));
		// 異動区分
		inMap.put(EKK0371D010CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定

		// 通話料指定額到達通知指定金額
		inMap.put(EKK0371D010CBSMsg.TWRYO_STIAM_TTU_TCHI_STIAM, null);
		// 請求契約番号
		inMap.put(EKK0371D010CBSMsg.SEIKY_KEI_NO, (String)dataMap.get("seiky_kei_no"));
		// 更新年月日時分秒(更新前)
		inMap.put(EKK0371D010CBSMsg.UPD_DTM_BF, lastUpdDtm);

	}

	/**
	 * 上りマッピング項目設定(サブオプションサービス契約＜電話＞登録)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @param lastUpdDtm
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0431D010(IRequestParameterReadWrite param, String fixedText, HashMap dataMap, String lastUpdDtm)
			throws RequestParameterException
	{

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(2:チェックのみ)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_2);

		// オプションサービス契約番号
		inMap.put(EKK0431D010CBSMsg.OP_SVC_KEI_NO, (String)dataMap.get("op_svc_kei_no")); // 親データ
		// サブオプションサービスコード
		inMap.put(EKK0431D010CBSMsg.SBOP_SVC_CD, (String)dataMap.get("sbop_svc_cd"));
		// 料金コースコード
		inMap.put(EKK0431D010CBSMsg.PCRS_CD, (String)dataMap.get("pcrs_cd"));
		// 料金プランコード
		inMap.put(EKK0431D010CBSMsg.PPLAN_CD, (String)dataMap.get("pplan_cd"));
		// サービス利用開始希望年月日
		inMap.put(EKK0431D010CBSMsg.SVC_USE_STA_KIBO_YMD, JFUBPCommon.getOpeDate(null));
		// 予約適用開始希望年月日
		inMap.put(EKK0431D010CBSMsg.RSV_TSTA_KIBO_YMD, JFUBPCommon.getOpeDate(null));
		// 違約金発生コード
		inMap.put(EKK0431D010CBSMsg.PNLTY_HASSEI_CD, null);
		// 異動区分
		inMap.put(EKK0431D010CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定
		// 請求契約番号
		inMap.put(EKK0431D010CBSMsg.SEIKY_KEI_NO, (String)dataMap.get("seiky_kei_no"));
		// 更新年月日時分秒(更新前)
		inMap.put(EKK0431D010CBSMsg.UPD_DTM_BF, lastUpdDtm);

	}

	/**
	 * 上りマッピング項目設定(オプションサービス契約解約)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @param hiChrgMap
	 * @param lastUpdDtm
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0351C240(IRequestParameterReadWrite param, String fixedText, HashMap dataMap, HashMap hiChrgMap, String lastUpdDtm)
			throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(2:チェックのみ)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_2);

		// オプションサービス契約番号
		inMap.put(EKK0351C240CBSMsg.OP_SVC_KEI_NO, (String)dataMap.get("op_svc_kei_no"));
		// 予約適用開始希望年月日
		inMap.put(EKK0351C240CBSMsg.RSV_TSTA_KIBO_YMD, JFUBPCommon.getOpeDate(null));
		// サービス終了年月日
		inMap.put(EKK0351C240CBSMsg.SVC_ENDYMD, JFUBPCommon.getOpeDate(null));
		// サービス解約理由コード
		inMap.put(EKK0351C240CBSMsg.SVC_DLRE_CD, JFUStrConst.CD00879_01); // "01"：通常解約
		// 異動区分
		inMap.put(EKK0351C240CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定
		// 更新年月日時分秒(更新前)
		inMap.put(EKK0351C240CBSMsg.UPD_DTM_BF, lastUpdDtm);

		// ●非課金判定処理(jdgHiChrg)の値
		// サービス課金終了年月日
		inMap.put(EKK0351C240CBSMsg.SVC_CHRG_ENDYMD, hiChrgMap.get("svc_chrg_endymd"));
	}

	/**
	 * 上りマッピング項目設定(サブオプションサービス契約解約)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @param hiChrgMap
	 * @param lastUpdDtm
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0401C170(IRequestParameterReadWrite param, String fixedText, HashMap dataMap, HashMap hiChrgMap, String lastUpdDtm)
			throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(2:チェックのみ)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_2);

		// オプションサービス契約番号
		inMap.put(EKK0401C170CBSMsg.OP_SVC_KEI_NO, (String)dataMap.get("op_svc_kei_no"));
		// サブオプションサービス契約番号
		inMap.put(EKK0401C170CBSMsg.SBOP_SVC_KEI_NO, (String)dataMap.get("sbop_svc_kei_no"));
		// 予約適用開始希望年月日
		inMap.put(EKK0401C170CBSMsg.RSV_TSTA_KIBO_YMD, JFUBPCommon.getOpeDate(null));
		// サービス終了年月日
		inMap.put(EKK0401C170CBSMsg.SVC_ENDYMD, JFUBPCommon.getOpeDate(null));
		// サービス解約理由コード
		inMap.put(EKK0401C170CBSMsg.SVC_DLRE_CD, JFUStrConst.CD00879_01); // "01"：通常解約
		// 異動区分
		inMap.put(EKK0401C170CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定
		// 更新年月日時分秒(更新前)
		inMap.put(EKK0401C170CBSMsg.UPD_DTM_BF, lastUpdDtm);

		// ●非課金判定処理(jdgHiChrg)の値
		// サービス課金終了年月日
		inMap.put(EKK0401C170CBSMsg.SVC_CHRG_ENDYMD, hiChrgMap.get("svc_chrg_endymd"));
	}

	/**
	 * オプションサービス電話場番号使用可能一覧照会のinMapを設定
	 * <br>
	 * @param param 
	 * @param fixedText
	 * @param dtlMap
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEZM0121B040(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(1)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ＫＥＹ＿電話番号
		inMap.put(EZM0121B040CBSMsg.KEY_TELNO, String.valueOf("050"));
		// ＫＥＹ＿サービス区分
		inMap.put(EZM0121B040CBSMsg.KEY_SVC_DIV, String.valueOf(eo.common.constant.JFUStrConst.CD00203_01));
		// ＫＥＹ＿個人法人電話番号帯コード
		inMap.put(EZM0121B040CBSMsg.KEY_KOJIN_HOJIN_TLN_TAI_CD, String.valueOf(eo.common.constant.JFUStrConst.CD00410_1));
		// ＫＥＹ＿番号コード
		inMap.put(EZM0121B040CBSMsg.KEY_NO_CD, String.valueOf(eo.common.constant.JFUStrConst.CD00200_02));
	}

	/**
	 * 上りマッピング項目設定(エイジング対象登録)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param aigingTgValue エイジング対象値
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEZM0111D010(IRequestParameterReadWrite param, String fixedText, String aigingTgValue) throws RequestParameterException
	{
		// 機能コード設定(1)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// エイジング種別コード
		inMap.put(EZM0111D010CBSMsg.AGING_SBT_CD, JFUStrConst.CD00412_001);
		// エイジング対象値
		inMap.put(EZM0111D010CBSMsg.AGING_TG_VALUE, aigingTgValue);

	}

	/**
	 * 上りマッピング項目設定(エイジング対象使用終了)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param aigingTgValue エイジング対象値
	 * @param lastUpdDtm 更新年月日時分秒
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEZM0111C010(IRequestParameterReadWrite param, String fixedText, String aigingTgValue, String lastUpdDtm) throws RequestParameterException
	{
		// 機能コード設定(1)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// エイジング対象値
		inMap.put(EZM0111C010CBSMsg.AGING_TG_VALUE, aigingTgValue);
		// 更新年月日時分秒
		inMap.put(EZM0111C010CBSMsg.LAST_UPD_DTM_BF, lastUpdDtm);
		// エイジング種別コード
		inMap.put(EZM0111C010CBSMsg.AGING_SBT_CD, JFUStrConst.CD00412_001);

	}

	/**
	 * eo光電話サービス契約情報一覧照会の上りマッピング処理です。
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @throws RequestParameterException 
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEKK0081B508(IRequestParameterReadWrite param, String fixedText)
			throws RequestParameterException
	{
		// 機能コード設定(2)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_2);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ＫＥＹ＿SYSID
		inMap.put(EKK0081B508CBSMsg.KEY_SYSID, inMap.get(IN_SYSID));
		// ＫＥＹ＿サービス契約番号
		inMap.put(EKK0081B508CBSMsg.KEY_SVC_KEI_NO, inMap.get(IN_SVC_KEI_NO));
		// ＫＥＹ＿電話番号
		inMap.put(EKK0081B508CBSMsg.KEY_TELNO, inMap.get(IN_TELNO));
	}

	/**
	 * 上りマッピング項目設定(契約機器配送対象物品一覧照会)
	 *
	 * <br>
	 * @param param
	 * @param fixedText
	 * @param kktkSvcKeiNo
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void setInMapEDK0011B090(IRequestParameterReadWrite param, String fixedText, String kktkSvcKeiNo) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定(1:)
		JFUBPCommon.setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_1);

		// サービス契約番号
		inMap.put(EDK0011B090CBSMsg.KEY_KKTK_SVC_KEI_NO, kktkSvcKeiNo);

	}

	/**
	 * オプションが開始可能かどうか返す
	 * <br>
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param opSvcCd
	 */
	@SuppressWarnings("unchecked")
	private boolean isEnabledStartOption(
			SessionHandle handle, 
			IRequestParameterReadWrite param, 
			String fixedText,
			String opSvcCd) throws Throwable
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// あんしん発着信サービスの場合、開始SIFの実行判定を行う
		if (JFUStrConst.CD00136_B135.equals(opSvcCd))
		{
			String kktkSvcKeiNo = null;
			String kktkStat = null;
			List<HashMap<String, Object>> kikiList = getKikiDataList(handle, param, fixedText);
			if (kikiList != null && kikiList.size() > 0)
			{
				// 機器リストには有効な多機能ルータしか存在しない。
				for(HashMap<String, Object> kikiMap : kikiList)
				{
					String kkSvcCd = (String)kikiMap.get(EKK0341B002CBSMsg1List.KKTK_SVC_CD);
					// 多機能ルータ ホームゲートウェイ
					if (JFUStrConst.CD00132_C024.equals(kkSvcCd) || JFUStrConst.CD00132_C025.equals(kkSvcCd))
					{
// ▽▽▽ #84334 ADD START
						// 取得済のステータスの方が進んでいれば、上書きしない
						if (kktkStat != null && kktkStat.compareTo((String)kikiMap.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_STAT)) > 0) 
						{
							continue;
						}
// ▲▲▲ #84334 ADD END
						kktkSvcKeiNo = (String)kikiMap.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO);
						kktkStat = (String)kikiMap.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_STAT);
					}
				}
			}
			
			// 機器のステータスをチェック
			if (JFUStrConst.CD00056_100.equals(kktkStat) || 
					JFUStrConst.CD00056_210.equals(kktkStat) ||
					JFUStrConst.CD00056_220.equals(kktkStat)
				)
			{
				// 機器のステータスが提供中であれば、工事完了もしくは配送完了しているため開始はさせる
				return true;
			}
			else
			{
				// 機器のレコードが取得できるいる場合は、配送状態を確認する
				// 型番／製番が入っているかでも確認可能かもしれないが、
				// 工事会社配送かどうかを判定する必要があるので仕方がない
				if (kktkSvcKeiNo != null && kktkSvcKeiNo.length() > 0)
				{
					/*************************************************************************************/
					/** 契約機器配送対象物品一覧照会                                                    **/
					/*************************************************************************************/
					// ○EDK0011B090_契約機器配送対象物品一覧照会 
					// ユーザデータ初期化
					JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EDK0011B090);
					//検索エラーなし設定
					JFUBPCommon.ignoreSearchError(param, fixedText);
					// 上りマッピング
					setInMapEDK0011B090(param, fixedText, kktkSvcKeiNo);
					// サービスIF実行
					JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EDK0011B090, TEMP_ID_DTL_EDK0011B090, IN_COL_LIST_EDK0011B090,
							ERR_COL_EDK0011B090);

					// 開始の条件は、配送完了済で工事会社配送以外
					List<HashMap> haisoList =
						JFUBPCommon.getTemplateList(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EDK0011B090), TEMP_ID_DTL_EDK0011B090);
					
					for (HashMap haisoMap : haisoList)
					{
						// 配送済かつ、工事会社配送ではない（工事案件番号がNULL）
						if (JKKStrConst.HAISO_STAT_KANRYOU_ZM.equals(haisoMap.get(EDK0011B090CBSMsg1List.HAISO_STAT)) &&
// ▽▽▽ IT2-2020-0000014 Modify START
//							JFUBPCommon.isNull(haisoMap.get(EDK0011B090CBSMsg1List.HISOS_KOCOMP_CD))
							JFUBPCommon.isNull(haisoMap.get(EDK0011B090CBSMsg1List.KOJIAK_NO))
// △△△ IT2-2020-0000014 Modify END
							)
						{
							// 機器変更番号は見ない。（そもそも契約変更中の場合は、ステータスが提供中の為見なくて良い）
							return true;
						}
					}
				}
				else
				{
					// 本来は機器提供SV契約番号が取得できないことはない。（申込時点で機器が存在することは確認済の為）
					// デッドロジックになるかもしれないが、エラーとはしない。CCエラーにしておく
					throw new CCException("", new IllegalArgumentException("Not Found R0."));
				}
				return false;
			}
		}
		return true;
	}

	/**
	 * オプションサービスリスト設定処理<br>
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataList
	 * @param packList
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	public void convOpSvcList(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, ArrayList<HashMap> dataList, ArrayList<HashMap> packList) throws Throwable
	{

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// SYSID
		inMap.put(IN_SYSID, inMap.get("sysid"));
		// サービス契約番号
		inMap.put(IN_SVC_KEI_NO, (String)inMap.get("svc_kei_no"));
		// サービス契約回線内訳番号
		inMap.put(IN_SVC_KEI_KAISEN_UCWK_NO, inMap.get("svc_kei_kaisen_ucwk_no"));
		// eo光電話番号
		inMap.put(IN_TELNO, inMap.get("telno"));
		// サービス契約内訳番号
		String svcKeiUcwkNo = (String)inMap.get("svc_kei_ucwk_no");
		inMap.put(IN_SVC_KEI_UCWK_NO, svcKeiUcwkNo);

		// ●EKK0161A010_サービス契約内訳一意照会
		// ユーザデータ初期化
		JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0161A010);
		// 上りマッピング
		setInMapEKK0161A010(param, fixedText, inMap);
		// サービスIF実行
		JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0161A010, TEMP_ID_DTL_EKK0161A010, IN_COL_LIST_EKK0161A010,
				ERR_COL_EKK0161A010);
		String svcKeiUcwkStat =
				JFUBPCommon.getTemplateListValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0161A010),
						TEMP_ID_DTL_EKK0161A010, EKK0161A010CBSMsg1List.SVC_KEI_UCWK_STAT, 0);
		String geneAddDtm =
			JFUBPCommon.getTemplateListValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0161A010),
					TEMP_ID_DTL_EKK0161A010, EKK0161A010CBSMsg1List.GENE_ADD_DTM, 0);

		String svcChrgStaYmd =
				JFUBPCommon.getTemplateListValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0161A010), TEMP_ID_DTL_EKK0161A010,
						EKK0161A010CBSMsg1List.SVC_CHRG_STAYMD, 0);

		// サービス契約内訳ステータス
		inMap.put(EKK0161_SVC_KEI_UCWK_STAT, svcKeiUcwkStat);
		// サービス課金開始日
		inMap.put(EKK0161_SVC_CHRG_STAYMD, svcChrgStaYmd);

		// ○EKK0081B508_eo光電話サービス契約情報一覧照会
		// ユーザデータ初期化
		JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0081B508);
		//検索エラーなし設定
		JFUBPCommon.ignoreSearchError(param, fixedText);
		// 上りマッピング
		setInMapEKK0081B508(param, fixedText);
		// サービスIF実行
		JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0081B508, TEMP_ID_DTL_EKK0081B508, IN_COL_LIST_EKK0081B508,
				ERR_COL_EKK0081B508);
		List<HashMap> opList =
				JFUBPCommon.getTemplateList(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0081B508), TEMP_ID_DTL_EKK0081B508);

		HashSet<String> telPackOptionSetList = null;
		if (JPCModelConstant.FUNC_CD_2.equals(inMap.get(IN_FUNC_CD)))
		{
			// チェックモードの場合

			// EKK0081B508_eo光電話サービス契約情報一覧照会の結果から電話パックを構成するオプション／サブオプションの契約情報を作成する。
			telPackOptionSetList = createTelPackOpConstInfo(opList);

			// 処理区分「"2"：解約」を先に処理
			for (HashMap dtlMap : dataList)
			{
				if (!JFUBPCommon.isNull(dtlMap.get(OP_SBOP_SVC_CD)) && "2".equals(dtlMap.get(APP_DIV)))
				{
					// 処理区分（"2"：解約）でパック区分が設定されている場合
					// オプション・サブオプションサービスの申込情報で電話パックを構成するオプション／サブオプションの契約情報を更新
					telPackOptionSetList = updateTelPackSetList(telPackOptionSetList, OPPACK_SVC_CD_YUKO, (String)dtlMap.get(OP_SBOP_SVC_CD), false);
				}
			}

			// 処理区分「"1"：登録」を処理
			for (HashMap dtlMap : dataList)
			{
				if (!JFUBPCommon.isNull(dtlMap.get(OP_SBOP_SVC_CD)) && "1".equals(dtlMap.get(APP_DIV)))
				{
					// 処理区分（"1"：登録）でパック区分が設定されている場合
					// オプション・サブオプションサービスの申込情報で電話パックを構成するオプション／サブオプションの契約情報を更新
					telPackOptionSetList = updateTelPackSetList(telPackOptionSetList, OPPACK_SVC_CD_YUKO, (String)dtlMap.get(OP_SBOP_SVC_CD), true);

				}
			}
		}

		for (HashMap dtlMap : dataList)
		{

			// 処理区分
			dtlMap.put("mskm_div", dtlMap.get(APP_DIV));
			// SYSID
			dtlMap.put("sysid", inMap.get("sysid"));
			// サービス契約番号
			dtlMap.put("svc_kei_no", inMap.get("svc_kei_no"));
			// サービス契約内訳番号
			dtlMap.put("svc_kei_ucwk_no", inMap.get("svc_kei_ucwk_no"));
			// 請求契約番号
			dtlMap.put("seiky_kei_no", inMap.get("seiky_kei_no"));
			// オプションサービス契約番号
			dtlMap.put("op_svc_kei_no", JFUBPCommon.nvl((String)dtlMap.get("op_svc_kei_no"), JFUStrConst.EMPTY));
			// サブオプションサービス契約番号
			dtlMap.put("sbop_svc_kei_no", JFUBPCommon.nvl((String)dtlMap.get("sbop_svc_kei_no"), JFUStrConst.EMPTY));
			// サービス契約内訳世代登録年月日（SOD用）
			dtlMap.put("chaf_svc_kei_ucwk_gene_add_dtm", geneAddDtm);

			// オプションサービスコードが設定されている場合
			if (!OP_SVC_CD_MAPPING_MAP.containsKey(dtlMap.get(OP_SBOP_SVC_CD)))
			{
				dtlMap.put("svc_div", "1");	// 1:オプション
				// オプションサービスコード
				dtlMap.put("op_svc_cd", dtlMap.get(OP_SBOP_SVC_CD));
				// 料金コースコード
				dtlMap.put("pcrs_cd", PCRS_CD_KK0601_MAPPING_MAP.get(dtlMap.get("op_svc_cd")));
				// 料金プランコード
				dtlMap.put("pplan_cd", PPLAN_CD_KK0601_MAPPING_MAP.get(dtlMap.get("op_svc_cd")));
			}
			// サブオプションサービスコードが設定されている場合
			else
			{
				dtlMap.put("svc_div", "2");	// 2:サブオプション
				// オプションサービスコード
				dtlMap.put("op_svc_cd", OP_SVC_CD_MAPPING_MAP.get(dtlMap.get(OP_SBOP_SVC_CD)));
				// サブオプションサービスコード
				dtlMap.put("sbop_svc_cd", dtlMap.get(OP_SBOP_SVC_CD));
				// 料金コースコード
				dtlMap.put("pcrs_cd", PCRS_CD_KK0351_MAPPING_MAP.get(dtlMap.get("sbop_svc_cd")));
				// 料金プランコード
				dtlMap.put("pplan_cd", PPLAN_CD_KK0351_MAPPING_MAP.get(dtlMap.get("sbop_svc_cd")));
			}

			// ●処理判定
			// 申込の場合
			if ("1".equals(dtlMap.get(APP_DIV)))
			{
				for (HashMap dataMap : opList)
				{
					// オプションサービスコード
					String opSvcCd = (String)dataMap.get(EKK0081B508CBSMsg1List.OP_SVC_CD);
					// サブオプションサービスコード
					String sbopSvcCd = (String)dataMap.get(EKK0081B508CBSMsg1List.SBOP_SVC_CD);

					// オプションサービスコードが同じ場合にオプションサービス契約番号を設定
					if ("2".equals(dtlMap.get("svc_div")) && dtlMap.get("op_svc_cd").equals(opSvcCd))
					{
						dtlMap.put("op_svc_kei_no", dataMap.get("op_svc_kei_no"));
						dtlMap.put("chaf_opsvkei_no", dataMap.get("op_svc_kei_no"));
						dtlMap.put("chaf_opsvkei_gene_add_dtm", dataMap.get("kk0351_gene_add_dtm"));
						dtlMap.put("chbf_opsvkei_no", dataMap.get("op_svc_kei_no"));
						dtlMap.put("chbf_opsvkei_gene_add_dtm", dataMap.get("kk0351_gene_add_dtm"));
					}

					// オプションサービスコードが存在する場合
					if (dtlMap.get(OP_SBOP_SVC_CD).equals(opSvcCd))
					{
						// コントロールマップに設定
						setErrorField(param, "op_svc_cd_err");
						// 例外をスロー
						throw new SCCallException("同一内容で既に契約変更手続き中", String.valueOf(0), JPCModelConstant.RELATION_ERR);
					}
					// サブオプションサービスコードが存在する場合
					if (dtlMap.get(OP_SBOP_SVC_CD).equals(sbopSvcCd))
					{
						// コントロールマップに設定
						setErrorField(param, "op_svc_cd_err");
						// 例外をスロー
						throw new SCCallException("同一内容で既に契約変更手続き中", String.valueOf(0), JPCModelConstant.RELATION_ERR);
					}
				}
			}
			// 解約の場合
			else if ("2".equals(dtlMap.get(APP_DIV)))
			{
				for (HashMap dataMap : opList)
				{
					// サブオプションサービス契約番号が同じ場合に更新後SODオプションマップを設定
					if (dtlMap.get("sbop_svc_kei_no").equals(dataMap.get("sbop_svc_kei_no")))
					{
						dtlMap.put("op_svc_kei_no", dataMap.get("op_svc_kei_no"));
						// 更新後SODオプションマップの設定
						dtlMap.put("chaf_sbopsvkei_no", dataMap.get("sbop_svc_kei_no"));
						dtlMap.put("chaf_sbopsvkei_gene_add_dtm", dataMap.get("kk0401_gene_add_dtm"));
						dtlMap.put("chbf_sbopsvkei_no", dataMap.get("sbop_svc_kei_no"));
						dtlMap.put("chbf_sbopsvkei_gene_add_dtm", dataMap.get("kk0401_gene_add_dtm"));
					}
					// オプションサービス契約番号が同じ場合に更新後SODオプションマップを設定
					if (dtlMap.get("op_svc_kei_no").equals(dataMap.get("op_svc_kei_no")))
					{
						// 異動予約状態コードが入っていれば場合は、エラー
						if (!JFUBPCommon.isNull(dataMap.get(EKK0081B508CBSMsg1List.KK0351_IDO_RSV_DTL_CD)))
						{
							// コントロールマップに設定
							setErrorField(param, "ido_rsv_dtl_cd_err");
							// 例外をスロー
							throw new SCCallException("オプション・サブオプションサービスの異動予約が存在", String.valueOf(0), JPCModelConstant.RELATION_ERR);
						}

						// 更新後SODオプションマップの設定
						dtlMap.put("chaf_opsvkei_no", dataMap.get("op_svc_kei_no"));
						dtlMap.put("chaf_opsvkei_gene_add_dtm", dataMap.get("kk0351_gene_add_dtm"));
						dtlMap.put("chbf_opsvkei_no", dataMap.get("op_svc_kei_no"));
						dtlMap.put("chbf_opsvkei_gene_add_dtm", dataMap.get("kk0351_gene_add_dtm"));
						dtlMap.put("n_050_op_telno", dataMap.get("n_050_op_telno"));
						dtlMap.put("zm0111_upd_dtm_bf", dataMap.get("zm0111_upd_dtm_bf"));
					}
				}

				// 解約かつオプション契約番号が存在しない場合
				if (JFUBPCommon.isNull(dtlMap.get("chbf_opsvkei_no")))
				{
					// コントロールマップに設定
					setErrorField(param, "op_svc_kei_no_err");
					// 例外をスロー
					throw new SCCallException("実行可能な契約状態ではない", String.valueOf(0), JPCModelConstant.RELATION_ERR);
				}
			}

			// チェック時
			if (JPCModelConstant.FUNC_CD_2.equals(inMap.get(IN_FUNC_CD)))
			{
				// パックの構成一覧に、含まれているかを判定
				if (OPPACK_SVC_CD_YUKO.contains(dtlMap.get(OP_SBOP_SVC_CD)))
				{
					if (packList.size() == 0)
					{
						packList.add(new HashMap());
					}
				}
			}

		}

		// パック構成の申込がある場合
		if (JPCModelConstant.FUNC_CD_2.equals(inMap.get(IN_FUNC_CD)) && packList.size() > 0)
		{
			// パック構成のオプションに予約がある場合はエラー
			for (HashMap dataMap : opList)
			{
				// オプションサービスコード
				String opSvcCd = (String)dataMap.get(EKK0081B508CBSMsg1List.OP_SVC_CD);
				// 異動予約詳細コード（オプションサービス契約）
				String kk0351IdoRsvStatCd = (String)dataMap.get(EKK0081B508CBSMsg1List.KK0351_IDO_RSV_DTL_CD);
				// サブオプションサービスコード
				String sbopSvcCd = (String)dataMap.get(EKK0081B508CBSMsg1List.SBOP_SVC_CD);
				// 異動予約詳細コード（サブオプションサービス契約）
				String kk041IdoRsvStatCd = (String)dataMap.get(EKK0081B508CBSMsg1List.KK0401_IDO_RSV_DTL_CD);

				// パックの構成一覧に、含まれていない場合は、スキップ
				if (!OPPACK_SVC_CD_YUKO.contains(opSvcCd) && !OPPACK_SVC_CD_YUKO.contains(sbopSvcCd))
				{
					continue;
				}

				// 異動予約状態コードが入っていれば場合は、エラー
				if (!JFUBPCommon.isNull(kk0351IdoRsvStatCd) || !JFUBPCommon.isNull(kk041IdoRsvStatCd))
				{
					// コントロールマップに設定
					setErrorField(param, "ido_rsv_dtl_cd_err");
					// 例外をスロー
					throw new SCCallException("オプション・サブオプションサービスの異動予約が存在", String.valueOf(0), JPCModelConstant.RELATION_ERR);
				}
			}
		}

		if (JPCModelConstant.FUNC_CD_2.equals(inMap.get(IN_FUNC_CD)) && telPackOptionSetList.size() == 0)
		{
			// 機能コードが「2:チェック」かつ
			// 契約中の電話オプションに対して申込み／解約を行った最終結果がオプションの契約なしと判断した場合

			// オプションパックリストが存在する場合

			HashSet<String> telPackWribSetList = createTelPackWribConstInfo(handle, param, fixedText, svcKeiUcwkNo);

			if (packList != null && packList.size() > 0)
			{
				// 処理区分「"2"：解約」を先に処理
				for (int i = 0; i < packList.size(); i++)
				{
					HashMap dataMap = (HashMap)packList.get(i);

					if ("2".equals(dataMap.get(APP_DIV)) && PACK_DIV_YUKO.contains(dataMap.get("pack_div")))
					{
						// 処理区分（"2"：解約）でパック区分が設定されている場合
						// オプションパックの申込情報で電話パックの割引サービス契約情報を更新
						telPackWribSetList = updateTelPackSetList(telPackWribSetList, PACK_DIV_YUKO, (String)dataMap.get("pack_div"), false);
					}
				}

				// 処理区分「"1"：登録」を処理
				for (int i = 0; i < packList.size(); i++)
				{
					HashMap dataMap = (HashMap)packList.get(i);
					if ("1".equals(dataMap.get(APP_DIV)) && PACK_DIV_YUKO.contains(dataMap.get("pack_div")))
					{
						// 処理区分（"1"：登録）でパック区分が設定されている場合
						// オプションパックの申込情報で電話パックの割引サービス契約情報を更新
						telPackWribSetList = updateTelPackSetList(telPackWribSetList, PACK_DIV_YUKO, (String)dataMap.get("pack_div"), true);
					}
				}
			}

			if (telPackWribSetList.size() > 0)
			{
				// パックの申込みがあるケースについてエラーとする。
				// エラーコードは「4009：パック割区分設定エラー」で返却する。

				// コントロールマップに設定
				setErrorField(param, "op_pack_list_err");
				// 例外をスロー
				throw new SCCallException("パック割区分設定エラー", String.valueOf(0), JPCModelConstant.RELATION_ERR);
			}
		}
	}

	/**
	 * オプションサービス契約データ登録チェック処理<br>
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataList
	 * @param lastUpdDtm
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception 例外
	 */
	@SuppressWarnings("unchecked")
	public String checkOpSvcKeiMskmData(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, ArrayList<HashMap> dataList,
			String lastUpdDtm) throws Exception
	{
		// 開始ログ
		outDebugLog("----- checkOpSvcKeiMskmData Start  -----");

		for (HashMap dtlMap : dataList)
		{
			// ●処理判定
			// 申込、オプション 以外の場合はスキップ
			if (!"1".equals(dtlMap.get("mskm_div")) || !"1".equals(dtlMap.get("svc_div")))
			{
				continue;
			}

			// ○EKK0371D010_オプションサービス契約＜電話＞登録
			// ユーザデータ初期化
			JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0371D010);
			// 上りマッピング
			setInMapEKK0371D010(param, fixedText, dtlMap, lastUpdDtm);
			// サービスIF実行
			JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0371D010, TEMP_ID_DTL_EKK0371D010, IN_COL_LIST_EKK0371D010,
					ERR_COL_EKK0371D010);
		}

		// 終了ログ
		outDebugLog("----- checkOpSvcKeiMskmData End  -----");
		return lastUpdDtm;

	}

	/**
	 * オプションサービス契約データ解約チェック処理<br>
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataList
	 * @param lastUpdDtm
	 * @return String
	 * @throws Throwable 例外
	 */
	@SuppressWarnings("unchecked")
	public String checkOpSvcKeiDeleData(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, ArrayList dataList, String lastUpdDtm)
			throws Throwable
	{
		// 開始ログ
		outDebugLog("----- checkOpSvcKeiDeleData Start  -----");

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ●親契約データ取得
		// 　オプションサービスコードからリストから値を取得
		// ○EKK0371B001_オプションサービス契約＜電話＞一覧照会（サービス契約内訳番号）
		// ユーザデータ初期化
		JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0371B001);
		// 上りマッピング
		setInMapEKK0371B001(param, fixedText, inMap);
		// サービスIF実行
		JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0371B001, TEMP_ID_DTL_EKK0371B001, IN_COL_LIST_EKK0371B001,
				ERR_COL_EKK0371B001);
		List<HashMap> opList =
				JFUBPCommon.getTemplateList(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0371B001), TEMP_ID_DTL_EKK0371B001);

		for (int i = 0; i < dataList.size(); i++)
		{

			HashMap dataMap = (HashMap)dataList.get(i);

			// ●処理判定
			// 解約、オプション 以外の場合はスキップ
			if (!"2".equals(dataMap.get("mskm_div")) || !"1".equals(dataMap.get("svc_div")))
			{
				// ●050ナンバープラスの申込制限チェック
				// 予約適用年月日(＝解約年月日)の年月がオンライン運用日付の年月と一致する場合は申込不可とする。
				//   →同月の解約履歴が存在する場合は、再申込を制限する必要がある。(翌月以降の再申込は可能)
				// オプションサービス契約ステータスが「"910"：解約済」、
				// かつ予約適用年月日(オプションサービス契約)≦オンライン運用日付の場合
				if (JFUStrConst.CD00136_B029.equals(dataMap.get(OP_SBOP_SVC_CD)))
				{
					for (HashMap dtlMap : opList)
					{
						String rsvAplyYmd = (String)dtlMap.get(EKK0371B001CBSMsg1List.RSV_APLY_YMD);
						if (dataMap.get(OP_SBOP_SVC_CD).equals(dtlMap.get("op_svc_cd")) 
								&& JFUStrConst.CD00037_910.equals(dtlMap.get("op_svc_kei_stat"))
								&& JPCUtilCommon.isPastDate(rsvAplyYmd, JFUBPCommon.getOpeDate(null), "1")
								&& rsvAplyYmd.startsWith(JFUBPCommon.getOpeDate(null).substring(0, 6)))
						{
							// コントロールマップに設定
							setErrorField(param, "rsv_aply_ymd_err");
							// 例外をスロー
							throw new SCCallException("オプション・サブオプションサービスの異動予約が存在", String.valueOf(0), JPCModelConstant.RELATION_ERR);
						}
					}
				}
				continue;
			}

			for (HashMap dtlMap : opList)
			{
				// オプションサービス契約番号が同じ場合
				if (dtlMap.get("op_svc_kei_no").equals(dataMap.get("op_svc_kei_no")))
				{
					// オプションサービス契約ステータス
					dataMap.put("op_svc_kei_stat", dtlMap.get("op_svc_kei_stat"));
					// サービス開始日
					dataMap.put("svc_staymd", dtlMap.get("svc_staymd"));
				}
			}

			// オプションサービス契約ステータス
			String opSvcKeiStat = (String)dataMap.get("op_svc_kei_stat");

			// 照査済の場合
			if (JFUStrConst.CD00037_020.equals(opSvcKeiStat))
			{
				// ○EKK0351C220_オプションサービス契約キャンセル
				// ユーザデータ初期化
				JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0351C220);
				// 上りマッピング
				setInMapEKK0351C220(param, fixedText, dataMap, lastUpdDtm);
				// サービスIF実行
				JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0351C220, TEMP_ID_DTL_EKK0351C220, IN_COL_LIST_EKK0351C220,
						ERR_COL_EKK0351C220);
			}
			else
			{
				// ●非課金判定処理(jdgHiChrg)
				HashMap hiChrgMap = jdgHiChrg(handle, param, fixedText, dataMap);

				// ○EKK0351C240_オプションサービス契約解約
				// ユーザデータ初期化
				JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0351C240);
				// 上りマッピング
				setInMapEKK0351C240(param, fixedText, dataMap, hiChrgMap, lastUpdDtm);
				// サービスIF実行
				JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0351C240, TEMP_ID_DTL_EKK0351C240, IN_COL_LIST_EKK0351C240,
						ERR_COL_EKK0351C240);

			}

		}

		// 終了ログ
		outDebugLog("----- checkOpSvcKeiDeleData End  -----");
		return lastUpdDtm;

	}

	/**
	 * サブオプションサービス契約データ登録チェック処理<br>
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataList
	 * @param lastUpdDtm
	 * @return String
	 * @throws Exception 例外
	 */
	@SuppressWarnings("unchecked")
	public String checkSbopSvcKeiMskmData(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, ArrayList<HashMap> dataList,
			String lastUpdDtm) throws Exception
	{
		// 開始ログ
		outDebugLog("----- checkSbopSvcKeiMskmData Start  -----");

		for (HashMap dtlMap : dataList)
		{

			// ●処理判定
			// 申込、サブオプション 以外の場合はスキップ
			if (!"1".equals(dtlMap.get("mskm_div")) || !"2".equals(dtlMap.get("svc_div")))
			{
				continue;
			}

			// ○EKK0431D010_サブオプションサービス契約＜電話＞登録
			// ユーザデータ初期化
			JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0431D010);
			// 上りマッピング
			setInMapEKK0431D010(param, fixedText, dtlMap, lastUpdDtm);
			// サービスIF実行
			JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0431D010, TEMP_ID_DTL_EKK0431D010, IN_COL_LIST_EKK0431D010,
					ERR_COL_EKK0431D010);
		}

		// 終了ログ
		outDebugLog("----- checkSbopSvcKeiMskmData End  -----");
		return lastUpdDtm;

	}

	/**
	 * サブオプションサービス契約データ解約チェック処理<br>
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataList
	 * @param lastUpdDtm
	 * @return String
	 * @throws Throwable 例外
	 */
	@SuppressWarnings("unchecked")
	public String checkSbopSvcKeiDeleData(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, ArrayList<HashMap> dataList,
			String lastUpdDtm) throws Throwable
	{
		// 開始ログ
		outDebugLog("----- checkSbopSvcKeiDeleData Start  -----");

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		for (HashMap dtlMap : dataList)
		{

			// ●処理判定
			// 解約、サブオプション 以外の場合はスキップ
			if (!"2".equals(dtlMap.get("mskm_div")) || !"2".equals(dtlMap.get("svc_div")))
			{
				continue;
			}

			// ●サブオプションサービス契約一意照会
			// ユーザデータ初期化
			JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0401A010);
			// 上りマッピング
			setInMapEKK0401A010(param, fixedText, dtlMap);
			// サービスIF実行
			JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0401A010, TEMP_ID_DTL_EKK0401A010, IN_COL_LIST_EKK0401A010,
					ERR_COL_EKK0401A010);
			// サブオプションサービス契約ステータス
			String sbopSvcKeiStat =
					JFUBPCommon.getTemplateListValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0401A010),
							TEMP_ID_DTL_EKK0401A010, EKK0401A010CBSMsg1List.SBOP_SVC_KEI_STAT, 0);

			// 照査済の場合
			if (JFUStrConst.CD00037_020.equals(sbopSvcKeiStat))
			{
				// ○EKK0401C150_サブオプションサービス契約キャンセル
				// ユーザデータ初期化
				JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0401C150);
				// 上りマッピング
				setInMapEKK0401C150(param, fixedText, dtlMap, lastUpdDtm);
				// サービスIF実行
				JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0401C150, TEMP_ID_DTL_EKK0401C150, IN_COL_LIST_EKK0401C150,
						ERR_COL_EKK0401C150);
				// 更新年月日時分秒
				lastUpdDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0401C150),
								EKK0401C150CBSMsg.UPD_DTM);
			}
			else
			{
				// ●非課金判定処理(jdgHiChrg)
				HashMap hiChrgMap = jdgHiChrg(handle, param, fixedText, dtlMap);

				// ○EKK0401C170_サブオプションサービス契約解約
				// ユーザデータ初期化
				JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0401C170);
				// 上りマッピング
				setInMapEKK0401C170(param, fixedText, dtlMap, hiChrgMap, lastUpdDtm);
				// サービスIF実行
				JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0401C170, TEMP_ID_DTL_EKK0401C170, IN_COL_LIST_EKK0401C170,
						ERR_COL_EKK0401C170);
			}

		}

		// 終了ログ
		outDebugLog("----- checkSbopSvcKeiDeleData End  -----");
		return lastUpdDtm;

	}

	/**
	 * オプションパックリスト設定処理<br>
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param packList
	 * @throws Exception 例外
	 */
	@SuppressWarnings("unchecked")
	public void convOpPackList(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, ArrayList<HashMap> packList) throws Exception
	{
		if (packList != null)
		{
			// ユーザデータ取得
			HashMap inMap = (HashMap)param.getData(fixedText);

			for (int i = 0; i < packList.size(); i++)
			{
				HashMap dataMap = (HashMap)packList.get(i);

				// 処理区分
				dataMap.put("trn_div", JFUStrConst.S_ZERO + (String)dataMap.get(APP_DIV));
				// SYSID
				dataMap.put("sysid", (String)inMap.get(IN_SYSID));
				// サービス契約番号
				dataMap.put("svc_kei_no", (String)inMap.get(IN_SVC_KEI_NO));
				// サービス契約内訳番号
				dataMap.put("svc_kei_ucwk_no", (String)inMap.get(IN_SVC_KEI_UCWK_NO));
			}
		}
	}

	/**
	 * 単項目チェック
	 * 
	 * @param ccMsg
	 * @return チェックの判定
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private boolean checkUnitParam(Map<String, Object> ccMsg) throws Exception
	{
		HashMap<String, String> checkUnitParamMap = new HashMap<String, String>();
		List<Map<String, String>> errList = new ArrayList<Map<String, String>>();

		// ===========================================================================
		// 単項目チェック
		// ===========================================================================
		checkUnitParamMap.put("func_cd", "hannkakusuuji1:1,1");
		checkUnitParamMap.put("sysid", "hannkakuesuuji1:10,10");
		checkUnitParamMap.put("svc_kei_no", "hannkakuesuuji1:10,10");
		checkUnitParamMap.put("telno", "tel2:10,11");
		checkUnitParamMap.put("svc_kei_kaisen_ucwk_no", "hannkakuesuuji1:12,12");
		checkUnitParamMap.put("svc_kei_ucwk_no", "hannkakuesuuji1:12,12");
		checkUnitParamMap.put("seiky_kei_no", "hannkakuesuuji1:10,10");
		checkUnitParamMap.put("last_upd_dtm", "day_hour1:17,17");
		checkUnitParamMap.put("op_pack_list", "");
		checkUnitParamMap.put("option_service_list", "");

		checkUnitParam(errList, ccMsg, checkUnitParamMap, true);

		// ===========================================================================
		// 単項目チェック（オプションパックリスト）
		// ===========================================================================
		checkUnitParamMap = new HashMap<String, String>();
		checkUnitParamMap.put("app_div", "hannkakuesuuji1:1,1");
		checkUnitParamMap.put("pack_div", "hannkakuesuuji1:1,1");
		checkUnitParamMap.put("wrib_svc_kei_no", "hannkakuesuuji1:12,12");

		if (!JFUBPCommon.isNull(ccMsg.get("op_pack_list")))
		{
			ArrayList<HashMap> packList = (ArrayList<HashMap>)ccMsg.get("op_pack_list");
			for (HashMap dtlMap : packList)
			{
				checkUnitParam(errList, dtlMap, checkUnitParamMap, false);
			}
		}

		// ===========================================================================
		// 単項目チェック（オプションサービスリスト）
		// ===========================================================================
		checkUnitParamMap = new HashMap<String, String>();
		checkUnitParamMap.put("app_div", "hannkakuesuuji1:1,1");
		checkUnitParamMap.put("op_sbop_svc_cd", "hannkakuesuuji1:3,4");
		checkUnitParamMap.put("op_svc_kei_no", "hannkakuesuuji1:12,12");
		checkUnitParamMap.put("sbop_svc_kei_no", "hannkakuesuuji1:12,12");

		if (!JFUBPCommon.isNull(ccMsg.get("option_service_list")))
		{
			ArrayList<HashMap> opList = (ArrayList<HashMap>)ccMsg.get("option_service_list");
			for (HashMap dtlMap : opList)
			{
				checkUnitParam(errList, dtlMap, checkUnitParamMap, false);
			}
		}

		// エラーが存在する場合
		if (errList.size() > 0)
		{
			ccMsg.put(ERROR_INFO, errList);
			return false;
		}

		return true;
	}

	/**
	 * 単項目チェック
	 *
	 * @param errorList
	 * @param ccMsg
	 * @param itemInfoMap
	 * @param isReqChk
	 * @throws Exception
	 */
	private void checkUnitParam(List<Map<String, String>> errorList, Map<String, Object> ccMsg, HashMap<String, String> itemInfoMap, boolean isReqChk) throws Exception
	{
		Set<Entry<String, String>> itemInfoMapEntrySet = itemInfoMap.entrySet();

		for (Entry<String, String> entry : itemInfoMapEntrySet)
		{
			// チェック情報をチェックパターンと桁数値に分割
			String itemCkeckInfo = entry.getValue();
			String[] itemCkeckInfoArray = itemCkeckInfo.split(JFUStrConst.HALF_COLON);

			String itemCkeckPattern = null;
			int itemCkeckLenMin = 0;
			int itemCkeckLenMax = 0;

			if (itemCkeckInfoArray != null && itemCkeckInfoArray.length == 2)
			{
				// チェックパターン
				itemCkeckPattern = itemCkeckInfoArray[0];

				// 桁数値を最小値と最大値に分割
				String[] itemCkeckLenArray = itemCkeckInfoArray[1].split(JFUStrConst.COMMA);
				if (itemCkeckLenArray != null && itemCkeckLenArray.length == 2)
				{
					// 桁数：最小値を取得。
					itemCkeckLenMin = Integer.parseInt(itemCkeckLenArray[0]);
					// 桁数：最大値を取得。
					itemCkeckLenMax = Integer.parseInt(itemCkeckLenArray[1]);
				}
			}

			// 必須チェック
			if (JFUBPCommon.isNull(ccMsg.get(entry.getKey())))
			{
				if (isReqChk)
				{
					// 必須チェックエラー
					errorList.add(getItemErrInfMap(ccMsg, entry.getKey(), RES_KEY_ERROR_CODE_1001));
				}
			}
			else if (itemCkeckPattern != null)
			{
				// 項目値
				String itemName = entry.getKey();
				String itemValue = (String)ccMsg.get(itemName);

				// 属性チェック
				// 各チェックパターンによりチェックを行う
				if (ATTR_HANNKAKUSUUJI1.equals(itemCkeckPattern) && !HalfCharCheck.isNumber1Check(itemValue))
				{
					// 属性チェックエラー
					errorList.add(getItemErrInfMap(ccMsg, itemName, RES_KEY_ERROR_CODE_1002));
				}
				else if (ATTR_HANNKAKUESUUJI1.equals(itemCkeckPattern) && !HalfCharCheck.isEnNumber1Check(itemValue))
				{
					// 属性チェックエラー半角英数字1
					errorList.add(getItemErrInfMap(ccMsg, itemName, RES_KEY_ERROR_CODE_1002));
				}
				else if (ATTR_TEL2.equals(itemCkeckPattern) && !HalfCharCheck.isTelno2Check(itemValue))
				{
					// 属性チェックエラーTEL2
					errorList.add(getItemErrInfMap(ccMsg, itemName, RES_KEY_ERROR_CODE_1002));
				}
				else if (ATTR_DAY_HOUR1.equals(itemCkeckPattern) && !DatetimeCheck.isDatetimeCheck(itemValue))
				{
					// 属性チェックエラー日時1
					errorList.add(getItemErrInfMap(ccMsg, itemName, RES_KEY_ERROR_CODE_1002));
				}

				// 桁数チェック
				if (itemCkeckLenMax != 0 && !LengthCheck.isLength2Check(itemValue, itemCkeckLenMin, itemCkeckLenMax))
				{
					// 桁数チェックエラー
					errorList.add(getItemErrInfMap(ccMsg, itemName, RES_KEY_ERROR_CODE_1003));
				}
			}
		}
	}


	/**
	 * 単関連チェック
	 * 
	 * @param ccMsg
	 * @return チェックの判定
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private boolean checkKnrnParam(Map<String, Object> ccMsg) throws Exception
	{
		List<Map<String, String>> errList = new ArrayList<Map<String, String>>();

		// ===========================================================================
		// 単関連チェック（機能コード）
		// ===========================================================================
		if (!FUNC_CD_YUKO.contains(ccMsg.get(IN_FUNC_CD)))
		{
			errList.add(getItemErrInfMap(ccMsg, IN_FUNC_CD, RES_KEY_ERROR_CODE_2001));
		}

		// ===========================================================================
		// 単関連チェック（オプションパックリスト）
		// ===========================================================================
		ArrayList<HashMap> packList = (ArrayList<HashMap>)ccMsg.get("op_pack_list");
		if (packList != null)
		{
			for (HashMap dtlMap : packList)
			{
//				if (!JFUBPCommon.isNull(dtlMap.get(APP_DIV)))
//				{
					if (!APP_DIV_YUKO.contains(dtlMap.get(APP_DIV)))
					{
						errList.add(getItemErrInfMap(dtlMap, APP_DIV, RES_KEY_ERROR_CODE_2001));
					}
					if (!PACK_DIV_YUKO.contains(dtlMap.get(PACK_DIV)))
					{
						errList.add(getItemErrInfMap(dtlMap, PACK_DIV, RES_KEY_ERROR_CODE_2002));
					}
//				}
			}
		}

		// ===========================================================================
		// 単関連チェック（オプションサービスリスト）
		// ===========================================================================
		ArrayList<HashMap> opList = (ArrayList<HashMap>)ccMsg.get("option_service_list");
		if (opList != null)
		{
			for (HashMap dtlMap : opList)
			{
//				if (!JFUBPCommon.isNull(dtlMap.get(APP_DIV)))
//				{
					if (!APP_DIV_YUKO.contains(dtlMap.get(APP_DIV)))
					{
						errList.add(getItemErrInfMap(dtlMap, APP_DIV, RES_KEY_ERROR_CODE_2001));
					}
					if (!OP_SBOP_SVC_CD_YUKO.contains(dtlMap.get(OP_SBOP_SVC_CD)))
					{
						errList.add(getItemErrInfMap(dtlMap, OP_SBOP_SVC_CD, RES_KEY_ERROR_CODE_2003));
					}
//				}
			}
		}

		// エラーが存在する場合
		if (errList.size() > 0)
		{
			ccMsg.put(ERROR_INFO, errList);
			return false;
		}

		return true;
	}

	/**
	 * 単項目チェックの必須エラーマップ作成メソッドです。
	 * 
	 * @param dataMap
	 *            データマップ
	 * @param itemName
	 *            項目名
	 * @param errCode
	 *            エラーコード
	 * @return Map<String, String>
	 */
	@SuppressWarnings("unchecked")
	private Map<String, String> getItemErrInfMap(Map dataMap, String itemName, String errCode)
	{
		Map<String, String> returnMap = new HashMap<String, String>();

		// エラーメッセージ設定
		String errMessage = itemName + JFUStrConst.HALF_COLON + JFUBPCommon.nvl((String)dataMap.get(itemName), "");

		returnMap.put(ERROR_CODE, errCode);
		returnMap.put(ERROR_MESSAGE, errMessage);

		return returnMap;
	}

	/**
	 * 業務エラーのエラーマップ作成メソッドです。
	 * 
	 * @param errCode
	 *            エラーコード
	 * @param errMessage
	 *            エラーメッセージ
	 * @return
	 */
	private List<Map<String, String>> getApiErrInfList(String errCode, String errMessage)
	{
		List<Map<String, String>> errList = new ArrayList<Map<String, String>>();

		Map<String, String> returnMap = new HashMap<String, String>();

		returnMap.put(ERROR_CODE, errCode);
		returnMap.put(ERROR_MESSAGE, errMessage);

		errList.add(returnMap);

		return errList;
	}

	/**
	 * 項目エラー判定。<br />
	 * <pre>指定された項目のエラー情報がリクエストパラメータに存在するかどうかを調べる。</pre>
	 * @param param リクエストパラメータ
	 * @param errFieldName エラーフィールド名 例) sysid_err
	 * @return true:エラーあり、false:エラーなし
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private static boolean isErrorField(IRequestParameterReadWrite param, String errFieldName) throws RequestParameterException
	{
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		for (Object errObj : errList)
		{
			Map errorInfoMap = (Map)errObj;
			Map itemCheckErrorMap = (Map)errorInfoMap.get(ErrorInfoMapKeys.ITEM_CHECK_ERRORS);

			if (itemCheckErrorMap.containsKey(errFieldName)){
				return true;
			}
		}
		return false;
	}

	/**
	 * 項目エラー設定。<br />
	 * <pre>指定された項目のエラー情報を設定する。</pre>
	 * @param param リクエストパラメータ
	 * @param errFieldName エラーフィールド名 例) sysid_err
	 * @throws RequestParameterException
	 */
	private static void setErrorField(IRequestParameterReadWrite param, String errFieldName) throws RequestParameterException
	{
		// コントロールマップに設定
		ArrayList<Object> errorInfoArray = new ArrayList<Object>();
		HashMap<String, Object> errorMap = new HashMap<String, Object>();
		HashMap<String, String> errorMapChild = new HashMap<String, String>();
		errorMapChild.put(errFieldName, "EA");
		errorMap.put(ErrorInfoMapKeys.ITEM_CHECK_ERRORS, errorMapChild);
		errorInfoArray.add(errorMap);
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, errorInfoArray);
	}

	/**
	 * 日付を各形式に変換します。
	 * 
	 * <br>
	 * @param date 日付文字列
	 * @return 変換された文字列
	 */
	private String editDateFormat(String date)
	{
		try
		{
			return new SimpleDateFormat("yyyy/MM/dd").format(new SimpleDateFormat("yyyyMMdd").parse(JFUBPCommon.getOpeDate(null)));
		}
		catch (ParseException e)
		{
			// 処理抜け
			return null;
		}
	}

	/**
	 * EKK0081B508_eo光電話サービス契約情報一覧照会のサービスI/Fの結果から<br/>
	 * 電話パックを構成するオプション／サブオプションの契約情報を作成。<br/>
	 * 
	 * @param opList 契約中のオプション／サブオプションのリスト
	 * @return 契約中の電話パックを構成するオプション／サブオプションのリスト
	 */
	@SuppressWarnings("unchecked")
	private HashSet<String> createTelPackOpConstInfo(List<HashMap> opList)
	{
		HashSet<String> telPackOptionSetList = new HashSet<String>();
		if (opList == null || opList.size() == 0)
		{
			return telPackOptionSetList;
		}
		for (HashMap dataMap : opList)
		{
			// サブオプションサービスコード
			String sbopSvcCd = (String)dataMap.get("sbop_svc_cd");
			// オプションサービスコード
			String opSvcCd = (String)dataMap.get("op_svc_cd");

			if (!JFUBPCommon.isNull(sbopSvcCd))
			{
				// サブオプションサービスコード
				telPackOptionSetList = updateTelPackSetList(telPackOptionSetList, OPPACK_SVC_CD_YUKO, sbopSvcCd, true);
			}

			if (!JFUBPCommon.isNull(opSvcCd))
			{
				// オプションサービスコード
				telPackOptionSetList = updateTelPackSetList(telPackOptionSetList, OPPACK_SVC_CD_YUKO, opSvcCd, true);
			}
		}

		return telPackOptionSetList;
	}

	/**
	 * EKK0451B509_割引サービス契約一覧照会（サービス契約内訳番号）のサービスI/Fの結果から<br/>
	 * 電話パックの割引サービス契約情報を作成。<br/>
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @return 契約中の電話パックの割引サービス契約のリスト
	 * @throws Throwable
	 */
	private HashSet<String> createTelPackWribConstInfo(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, String svcKeiUcwkNo) throws Throwable
	{
		// 上りマッピング
		Object[][] ekk0451B509In =
				{ { EKK0451B509CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0451B509 }, { EKK0451B509CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1 }, { EKK0451B509CBSMsg.KEY_SVC_KEI_UCWK_NO, svcKeiUcwkNo } };

		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		// サービスIF実行
		CAANMsg ekk0451B509Msg = callSC(handle, scCall, param, fixedText, ekk0451B509In, new EKK0451B509CBSMsg().getContents());

		// 割引サービス契約一覧照会（サービス契約内訳番号）明細
		CAANMsg[] ekk0451B509Msg1List = ekk0451B509Msg.getCAANMsgList(EKK0451B509CBSMsg.EKK0451B509CBSMSG1LIST);

		HashSet<String> telPackWribSetList = new HashSet<String>();
		// サービスIF実行結果チェック
		if (ekk0451B509Msg1List != null && ekk0451B509Msg1List.length > 0)
		{
			for (int j = 0; j < ekk0451B509Msg1List.length; j++)
			{
				CAANMsg ekk0451B509MsgDtl = ekk0451B509Msg1List[j];

				// 割引サービス契約ステータス
				String wribSvcKeiStat = ekk0451B509MsgDtl.getString(EKK0451B509CBSMsg1List.WRIB_SVC_KEI_STAT);
				String wribSvcCd = ekk0451B509MsgDtl.getString(EKK0451B509CBSMsg1List.WRIB_SVC_CD);

				if (PACK_DIV_MAPPING_MAP.containsKey(wribSvcCd) && (JFUStrConst.CD00037_010.equals(wribSvcKeiStat) || JFUStrConst.CD00037_100.equals(wribSvcKeiStat)))
				{
					// 【対象とするステータス】
					// 「010:受付済」、「100:サービス提供中」

					telPackWribSetList = updateTelPackSetList(telPackWribSetList, PACK_DIV_YUKO, PACK_DIV_MAPPING_MAP.get(wribSvcCd), true);
				}
			}
		}
		return telPackWribSetList;
	}

	/**
	 * 申込情報で電話パック契約情報を更新
	 * 
	 * @param telPackSetList 電話パック契約情報
	 * @param div 区分
	 * @param isAddFlg 追加フラグ
	 * @return 契約中の電話パックのリスト
	 */
	private HashSet<String> updateTelPackSetList(HashSet<String> telPackSetList, List<String> list, String div, boolean isAddFlg)
	{
		if (list.contains(div))
		{
			if (isAddFlg)
			{
				if (!telPackSetList.contains(div))
				{
					telPackSetList.add(div);
				}
			}
			else
			{
				if (telPackSetList.contains(div))
				{
					telPackSetList.remove(div);
				}
			}
		}
		return telPackSetList;
	}

	/**
	 * サービスIF呼出処理
	 *
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param dataMapKey パラメータキー
	 * @param mappingData マッピングデータ
	 * @param contents CAANMsgのコンテンツ
	 * @return CAANMsg
	 * @throws Throwable 例外が発生した場合
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg callSC(SessionHandle handle, ServiceComponentRequestInvoker scCall, IRequestParameterReadWrite param, String dataMapKey, Object[][] mappingData, Object[][] contents)
			throws Throwable
	{
		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 return_code = (Integer)result.get(JCMConstants.RET_CD_INT_KEY);
		int status = msg.getInt(JCMConstants.STATUS_INT_KEY);

		editErrorInfoCom(param, templates, return_code, dataMapKey, mappingData, contents);

		// エラー情報のマップを取得
		ArrayList<Object> errorList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);

		if (null == errorList)
		{
			errorList = new ArrayList<Object>();
		}

		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errorList));

		// 異常の場合、SCCallExceptionを生成してスローする
		if (JPCModelConstant.NORMAL_END < return_code || JPCModelConstant.WARNING < status)
		{
			throw new SCCallException("戻り値不正", String.valueOf(return_code), status);
		}

		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 (JFUStrConst.EMPTY.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 param リクエストパラメータ
	 * @param templates CAANMsgクラス
	 * @param returnCode リターンコード
	 * @param dataMapKey パラメータキー
	 * @param mappingData マッピングデータ
	 * @param contents CAANMsgのコンテンツ
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException リクエストパラメータの操作でエラーが発生した場合
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoCom(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, String dataMapKey, Object[][] mappingData, Object[][] contents)
			throws RequestParameterException
	{
		CAANMsg template = templates[0];

		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);

		if (0 != returnCode)
		{
			templateStatus = 9000;
		}

		if (null == JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)))
		{
			templateStatus = 0;
		}

		int bpStatus = 0;

		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);

		if (null == obj)
		{
			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);
		}

		Map<String, String> inMap = null;

		// ユーザデータ情報
		inMap = (Map<String, String>)param.getData(dataMapKey);

		for (int i = 0; null != contents && i < contents.length; i++)
		{
			String itemNm = (String)contents[i][0];
			if (itemNm.endsWith("_err"))
			{
				String errCd = template.getString(itemNm);
				if (!JFUBPCommon.isNull(errCd))
				{
					inMap.put(itemNm, errCd);
				}
			}
		}
		return param;
	}
}
