/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUSetOptPackMskmCC
*   ソースファイル名：JFUSetOptPackMskmCC.java
*   作成者          ：富士通
*   日付            ：2014年04月30日
*＜機能概要＞
*   電話オプションパック申込登録コモンコンポーネント部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v9.00.00    2014/04/30   FJ）谷本    新規作成
*  v12.00.00    2015/02/18   FJ) 西川    変更【OM-2015-0000342】機器の件数分オーダ発行CCに連携している不具合
*  v15.00.00    2015/07/10   FJ) 西川    変更【OM-2015-0001715】050ナンバープラス通話明細表示誤り不具合(暫定対応)
*  v15.00.00    2015/07/18   FJ) 西川    変更【OM-2015-0001715】050ナンバープラス通話明細表示誤り不具合(本格対応)
*  v32.00.00    2017/08/01   FJ)舘山     【OM-2017-0000593】住所変更の番号変更による非課金判定
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

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.model.ejb.common.JSYejbLog;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JFUCommonUtil;
import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0021C060CBSMsg;
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.EKK0351A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351A010CBSMsg1List;
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.EKK0351C250CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0371B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0371C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0371C030CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0371C040CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0371D010CBSMsg;
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.EKK0401C180CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0431C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0431C030CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0431C040CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0431D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811B503CBSMsg;

/**
 * 電話オプションパック申込登録コモンコンポーネント部品
 * <br>
 * @author 富士通
 */
public class JFUSetOptPackMskmCC extends JKKTelSelectOpPackOperateCC
{

	/** テンポラリテンプレート領域キー識別子 */
	private static final String TEMP_TEMPLATE_PRIFIX = "TEMP_TEMPLATE_";
	/** テンポラリテンプレート領域キー識別子区切文字 */
	private static final String TEMP_TEMPLATE_PRIFIX_SEP = "_";

	/** 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_LAST_UPD_DTM = "in_last_upd_dtm";
	/** IN項目：オプションパックリスト */
	private static final String IN_OPT_PACK_LIST = "in_opt_pack_list";
	/** IN項目：オプションリスト */
	private static final String IN_OP_SVC_MSKM_LIST = "in_op_svc_mskm_list";

	/** OUT項目(非課金判定部品):サービス課金終了日 */
	private static final String OUT_PARAM_SVC_CHRG_ENDYMD = "svcChrgEndYmd";
	/** OUT項目(非課金判定部品):課金フラグ */
	private static final String OUT_PARAM_CHRGFLG = "chrgFlg";

	/** オプションサービスコード */
	private static final String OP_SVC_CD = "op_svc_cd";

	/* ■□ 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;
	/** SC実行結果取得キー(申込明細照査・後続業務依頼) */
	private static final String TEMP_TEMP_KEY_EKK0021C060 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0021C060 + 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;
	/** SC実行結果取得キー(オプションサービス契約＜電話＞登録) */
	private static final String TEMP_TEMP_KEY_EKK0371D010 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0371D010 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ 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;

	/* ■□ EKK0371C040_オプションサービス契約＜電話＞開始SC ■□ */
	/** テンプレートID(オプションサービス契約＜電話＞開始) */
	private static final String TEMP_ID_EKK0371C040 = "EKK0371C040";
	/** テンプレートID(オプションサービス契約＜電話＞開始明細) */
	private static final String TEMP_ID_DTL_EKK0371C040 = null;
	/** IN項目リスト(オプションサービス契約＜電話＞開始) */
	private static final List<String> IN_COL_LIST_EKK0371C040 =
			Arrays.asList(EKK0371C040CBSMsg.OP_SVC_KEI_NO, EKK0371C040CBSMsg.IDO_DIV, EKK0371C040CBSMsg.N_050_OP_TELNO, EKK0371C040CBSMsg.UPD_DTM_BF,
					EKK0371C040CBSMsg.SKJ_YKGT);
	/** 関連チェックエラー項目(オプションサービス契約＜電話＞開始) */
	private static final String ERR_COL_EKK0371C040 = null;
	/** SC実行結果取得キー(オプションサービス契約＜電話＞開始) */
	private static final String TEMP_TEMP_KEY_EKK0371C040 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0371C040 + 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;
	/** SC実行結果取得キー(オプションサービス契約解約) */
	private static final String TEMP_TEMP_KEY_EKK0351C240 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0351C240 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ 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;

	/* ■□ 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;
	/** SC実行結果取得キー(サブオプションサービス契約＜電話＞登録) */
	private static final String TEMP_TEMP_KEY_EKK0431D010 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0431D010 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ 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;

	/* ■□ EKK0431C040_サブオプションサービス契約＜電話＞使用開始SC ■□ */
	/** テンプレートID(サブオプションサービス契約＜電話＞使用開始) */
	private static final String TEMP_ID_EKK0431C040 = "EKK0431C040";
	/** テンプレートID(サブオプションサービス契約＜電話＞使用開始明細) */
	private static final String TEMP_ID_DTL_EKK0431C040 = null;
	/** IN項目リスト(サブオプションサービス契約＜電話＞使用開始) */
	private static final List<String> IN_COL_LIST_EKK0431C040 =
			Arrays.asList(EKK0431C040CBSMsg.OP_SVC_KEI_NO, EKK0431C040CBSMsg.SBOP_SVC_KEI_NO, EKK0431C040CBSMsg.IDO_DIV,
					EKK0431C040CBSMsg.UPD_DTM_BF, EKK0431C040CBSMsg.SKJ_YKGT);
	/** 関連チェックエラー項目(サブオプションサービス契約＜電話＞使用開始) */
	private static final String ERR_COL_EKK0431C040 = null;
	/** SC実行結果取得キー(サブオプションサービス契約＜電話＞使用開始) */
	private static final String TEMP_TEMP_KEY_EKK0431C040 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0431C040 + 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;
	/** SC実行結果取得キー(サブオプションサービス契約解約) */
	private static final String TEMP_TEMP_KEY_EKK0401C170 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0401C170 + TEMP_TEMPLATE_PRIFIX_SEP;

	/* ■□ 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_EKK1091D010 = "EKK1091D010";
	/** テンプレートID(進捗登録明細) */
	private static final String TEMP_ID_DTL_EKK1091D010 = null;
	/** IN項目リスト(進捗登録) */
	private static final List<String> IN_COL_LIST_EKK1091D010 =
			Arrays.asList(EKK1091D010CBSMsg.MSKM_DTL_NO, EKK1091D010CBSMsg.SEIKY_KEI_NO, EKK1091D010CBSMsg.SEIKY_WAY_NO_KOZA,
					EKK1091D010CBSMsg.SEIKY_WAY_NO_CRECARD, EKK1091D010CBSMsg.SVC_KEI_NO, EKK1091D010CBSMsg.SVC_KEI_UCWK_NO,
					EKK1091D010CBSMsg.SVC_KEI_KAISEN_UCWK_NO, EKK1091D010CBSMsg.KKTK_SVC_KEI_NO, EKK1091D010CBSMsg.OP_SVC_KEI_NO,
					EKK1091D010CBSMsg.SEIOPSVC_KEI_NO, EKK1091D010CBSMsg.SBOP_SVC_KEI_NO, EKK1091D010CBSMsg.WRIB_SVC_KEI_NO,
					EKK1091D010CBSMsg.IDO_DIV, EKK1091D010CBSMsg.IDO_DTM, EKK1091D010CBSMsg.PRG_STAT, EKK1091D010CBSMsg.PRG_MEMO,
					EKK1091D010CBSMsg.PRG_TKJK_1, EKK1091D010CBSMsg.PRG_TKJK_2, EKK1091D010CBSMsg.PRG_DTM_I);
	/** 関連チェックエラー項目(進捗登録) */
	private static final String ERR_COL_EKK1091D010 = 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;

	/* ■□ EKK0351A010_オプションサービス契約一意照会SC ■□ */
	/** テンプレートID(オプションサービス契約一意照会) */
	private static final String TEMP_ID_EKK0351A010 = "EKK0351A010";
	/** テンプレートID(オプションサービス契約一意照会明細) */
	private static final String TEMP_ID_DTL_EKK0351A010 = EKK0351A010CBSMsg.EKK0351A010CBSMSG1LIST;
	/** IN項目リスト(オプションサービス契約一意照会) */
	private static final List<String> IN_COL_LIST_EKK0351A010 =
			Arrays.asList(EKK0351A010CBSMsg.KEY_OP_SVC_KEI_NO, EKK0351A010CBSMsg.KEY_GENE_ADD_DTM, EKK0351A010CBSMsg.KEY_RSV_APLY_YMD);
	/** 関連チェック,エラー項目(オプションサービス契約一意照会) */
	private static final String ERR_COL_EKK0351A010 = EKK0351A010CBSMsg.KEY_OP_SVC_KEI_NO_ERR;
	/** SC実行結果取得キー(オプションサービス契約一意照会) */
	private static final String TEMP_TEMP_KEY_EKK0351A010 = TEMP_TEMPLATE_PRIFIX + TEMP_ID_EKK0351A010 + 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;

// ▼▼▼ OM-2017-0000593 ADD START
	/* ■□ オプションサービス契約履歴一覧照会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;
	// ▼▼▼ OM-2017-0000593 ADD END

	/** リスト先頭*/
	protected static final int LIST_TOP = 0;

	/** 無効なサービス契約ステータス */
	private static final List<String> SVC_KEI_STAT_MUKO = Arrays.asList(JFUStrConst.CD00037_910, JFUStrConst.CD00037_920);

	/**
	 * eo光電話オプションパック申込登録コモンコンポーネント部品実行処理<br>
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Throwable 例外
	 */
	public IRequestParameterReadWrite setSaveData(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{

		// 開始ログ
		outDebugLog("----- setSaveData Start  -----");

		// 機能コード取得
		String funcCode = JFUBPCommon.getFuncCode(param, fixedText);

		// 実行判定
		// 機能コードが"1"(チェック＆登録)以外の場合
		if (!JPCModelConstant.FUNC_CD_1.equals(funcCode))
		{
			// 終了ログ
			outDebugLog("----- setSaveData End  -----");
			return param;
		}

		// ==============================================================================================================
		// ■ INPUTデータ
		// ==============================================================================================================

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ○最新更新年月日時分秒
		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);

		// ==============================================================================================================
		// ■ 登録処理
		// ==============================================================================================================

		// ●申込明細申込処理
		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);

		// 終了ログ
		outDebugLog("----- setSaveData End  -----");
		return param;
	}

	/**
	 * 申込明細登録処理<br>
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception 例外
	 */
	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
	 */
	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
	 */
	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 Exception 例外
	 */
	public String setOpSvcKeiMskmData(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, ArrayList<HashMap> dataList,
			String lastUpdDtm) throws Exception
	{
		// 開始ログ
		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;
			}

			// ○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);
			// 更新年月日時分秒
			lastUpdDtm =
					JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0371D010),
							EKK0371D010CBSMsg.UPD_DTM);
			// 世代登録年月日時分秒
			geneAddDtm =
					JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0371D010),
							EKK0371D010CBSMsg.KK0351_GENE_ADD_DTM);
			// オプションサービス契約番号を設定
			dtlMap.put("op_svc_kei_no", JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0371D010),
					EKK0371D010CBSMsg.OP_SVC_KEI_NO));

			// ●EKK0161A010_サービス契約内訳一意照会
			// ユーザデータ初期化
			JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0161A010);
			// 上りマッピング
			setInMapEKK0161A010(param, fixedText, dtlMap);
			// サービス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);

			// 照査の場合（親契約が照査の場合のみ実行する）
			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))
			{
				// ○EKK0371C040_オプションサービス契約＜電話＞開始
				// ユーザデータ初期化
				JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0371C040);
				// 上りマッピング
				setInMapEKK0371C040(param, fixedText, dtlMap, lastUpdDtm);
				// サービスIF実行
				JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0371C040, TEMP_ID_DTL_EKK0371C040, IN_COL_LIST_EKK0371C040,
						ERR_COL_EKK0371C040);
				// 更新年月日時分秒
				lastUpdDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0371C040),
								EKK0371C040CBSMsg.UPD_DTM);
				// 世代登録年月日時分秒
				String tempAddDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0371C040),
								EKK0371C040CBSMsg.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
	 */
	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
	 */
	private void setInMapEKK0371D010(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(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.MSKM_DTL_NO, JFUBPCommon.getBPListValueString(param, fixedText, TEMP_ID_DTL_EKK0011D020, 0,
				EKK0011D020CBSMsg1List.MSKM_DTL_NO));
		// サービス利用開始希望年月日
		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
	 */
	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_EKK0371D010), EKK0371D010CBSMsg.OP_SVC_KEI_NO));
		// 異動区分
		inMap.put(EKK0371C010CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定

		// 更新年月日時分秒(更新前)
		inMap.put(EKK0371C010CBSMsg.UPD_DTM_BF, lastUpdDtm);

	}

	/**
	 * 上りマッピング項目設定(オプションサービス契約＜電話＞照査締結)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @param lastUpdDtm
	 * @throws RequestParameterException
	 */
	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_EKK0371D010), EKK0371D010CBSMsg.OP_SVC_KEI_NO));
		// 異動区分
		inMap.put(EKK0371C030CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定

		// 更新年月日時分秒(更新前)
		inMap.put(EKK0371C030CBSMsg.UPD_DTM_BF, lastUpdDtm);

	}

	/**
	 * 上りマッピング項目設定(オプションサービス契約＜電話＞開始)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @param lastUpdDtm
	 * @throws RequestParameterException
	 */
	private void setInMapEKK0371C040(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_EKK0371D010), EKK0371D010CBSMsg.OP_SVC_KEI_NO));
		// 異動区分
		inMap.put(EKK0371C040CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定

		// 更新年月日時分秒(更新前)
		inMap.put(EKK0371C040CBSMsg.UPD_DTM_BF, lastUpdDtm);
		// 即時/翌月
		inMap.put(EKK0371C040CBSMsg.SKJ_YKGT, JFUStrConst.SKJ_YKGT_SKJ); // "01"：即時

	}

	/**
	 * オプションサービス契約データ解約処理<br>
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataList
	 * @param lastUpdDtm
	 * @return String
	 * @throws Throwable 例外
	 */
	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;

		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;
			}

			// ●EKK0351A010_オプションサービス契約一意照会
			// ユーザデータ初期化
			JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0351A010);
			// 上りマッピング
			setInMapEKK0351A010(param, fixedText, dataMap);
			// サービスIF実行
			JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0351A010, TEMP_ID_DTL_EKK0351A010, IN_COL_LIST_EKK0351A010,
					ERR_COL_EKK0351A010);
			// 変更前の機器情報
			HashMap optInfoMap =
					JFUBPCommon.getTemplateListMap(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0351A010),
							TEMP_ID_DTL_EKK0351A010, 0);
			// オプションサービス契約ステータス
			String opSvcKeiStat = (String)optInfoMap.get(EKK0351A010CBSMsg1List.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);

				// ○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);
				// 世代登録年月日時分秒
				lastUpdDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0351C240),
								EKK0351C240CBSMsg.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);
			}

			// ●更新後ＳＯＤマップの設定
			// 更新後ＳＯＤオプションマップ
			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
	 * @throws RequestParameterException
	 */
	private void setInMapEKK0351A010(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(EKK0351A010CBSMsg.KEY_OP_SVC_KEI_NO, (String)dataMap.get("op_svc_kei_no"));
		// ＫＥＹ＿予約適用年月日
		inMap.put(EKK0351A010CBSMsg.KEY_RSV_APLY_YMD, JFUBPCommon.getOpeDate(null));

	}

	/**
	 * 上りマッピング項目設定(オプションサービス契約キャンセル)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @param lastUpdDtm
	 * @throws RequestParameterException
	 */
	private void setInMapEKK0351C220(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(EKK0351C220CBSMsg.OP_SVC_KEI_NO, (String)dataMap.get("op_svc_kei_no"));
		// 申込明細番号
		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(EKK0351C240CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定
		// 更新年月日時分秒(更新前)
		inMap.put(EKK0351C240CBSMsg.UPD_DTM_BF, lastUpdDtm);

	}

	/**
	 * 上りマッピング項目設定(オプションサービス契約解約)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @param hiChrgMap
	 * @param lastUpdDtm
	 * @throws RequestParameterException
	 */
	private void setInMapEKK0351C240(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(EKK0351C240CBSMsg.OP_SVC_KEI_NO, (String)dataMap.get("op_svc_kei_no"));
		// 申込明細番号
		inMap.put(EKK0351C240CBSMsg.MSKM_DTL_NO, JFUBPCommon.getBPListValueString(param, fixedText, TEMP_ID_DTL_EKK0011D020, 0,
				EKK0011D020CBSMsg1List.MSKM_DTL_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
	 */
	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 例外
	 */
	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;
			}

			// ●親契約データ取得
			// 　オプションサービスコードからリストから値を取得
			// ○EKK0371B001_オプションサービス契約＜電話＞一覧照会（サービス契約内訳番号）
			// ユーザデータ初期化
			JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0371B001);
			// 上りマッピング
			setInMapEKK0371B001(param, fixedText, dtlMap);
			// サービス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 (HashMap dataMap : opList)
			{
				// 無効なステータスの場合はスキップ
				if (SVC_KEI_STAT_MUKO.contains(dataMap.get("op_svc_kei_stat")))
				{
					continue;
				}

				// オプションサービスコードが同じ場合にオプションサービス契約番号を設定
				if (dtlMap.get(OP_SVC_CD).equals(dataMap.get(OP_SVC_CD)))
				{
					// オプションサービス契約番号
					dtlMap.put("op_svc_kei_no", dataMap.get("op_svc_kei_no"));
				}
			}

			// ○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);
			// 更新年月日時分秒
			lastUpdDtm =
					JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0431D010),
							EKK0431D010CBSMsg.UPD_DTM);
			// 世代登録年月日時分秒
			geneAddDtm =
					JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0431D010),
							EKK0431D010CBSMsg.KK0401_GENE_ADD_DTM);
			// サブオプションサービス契約番号を設定
			dtlMap.put("sbop_svc_kei_no", JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0431D010),
					EKK0431D010CBSMsg.SBOP_SVC_KEI_NO));

			// ●サービス契約内訳一意照会
			// ユーザデータ初期化
			JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0161A010);
			// 上りマッピング
			setInMapEKK0161A010(param, fixedText, dtlMap);
			// サービス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);

			// 照査の場合（親契約が照査の場合のみ実行する）
			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))
			{
				// ○EKK0431C040_サブオプションサービス契約＜電話＞使用開始
				// ユーザデータ初期化
				JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0431C040);
				// 上りマッピング
				setInMapEKK0431C040(param, fixedText, dtlMap, lastUpdDtm);
				// サービスIF実行
				JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0431C040, TEMP_ID_DTL_EKK0431C040, IN_COL_LIST_EKK0431C040,
						ERR_COL_EKK0431C040);
				// 更新年月日時分秒
				lastUpdDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0431C040),
								EKK0431C040CBSMsg.UPD_DTM);
				// 世代登録年月日時分秒
				String tempAddDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0431C040),
								EKK0431C040CBSMsg.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
		 */
	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
	 */
	private void setInMapEKK0431D010(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(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.MSKM_DTL_NO, JFUBPCommon.getBPListValueString(param, fixedText, TEMP_ID_DTL_EKK0011D020, 0,
				EKK0011D020CBSMsg1List.MSKM_DTL_NO));
		// サービス利用開始希望年月日
		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 lastUpdDtm
	 * @throws RequestParameterException
	 */
	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
	 */
	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
	 */
	private void setInMapEKK0431C040(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(EKK0431C040CBSMsg.OP_SVC_KEI_NO, (String)dataMap.get("op_svc_kei_no"));
		// サブオプションサービス契約番号
		inMap.put(EKK0431C040CBSMsg.SBOP_SVC_KEI_NO, (String)dataMap.get("sbop_svc_kei_no"));
		// 異動区分
		inMap.put(EKK0431C040CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定
		// 更新年月日時分秒(更新前)
		inMap.put(EKK0431C040CBSMsg.UPD_DTM_BF, lastUpdDtm);
		// 即時/翌月
		inMap.put(EKK0431C040CBSMsg.SKJ_YKGT, JFUStrConst.SKJ_YKGT_SKJ); // "01"：即時

	}

	/**
	 * サブオプションサービス契約データ解約処理<br>
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataList
	 * @param lastUpdDtm
	 * @return String
	 * @throws Throwable 例外
	 */
	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);

				// ○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);
				// 更新年月日時分秒
				lastUpdDtm =
						JFUBPCommon.getTemplateValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0401C170),
								EKK0401C170CBSMsg.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
	 */
	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
	 */
	private void setInMapEKK0401C150(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(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"));
		// 申込明細番号
		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(EKK0351C240CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定
		// 更新年月日時分秒(更新前)
		inMap.put(EKK0351C240CBSMsg.UPD_DTM_BF, lastUpdDtm);

	}

	/**
	 * 上りマッピング項目設定(サブオプションサービス契約解約)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @param hiChrgMap
	 * @param lastUpdDtm
	 * @throws RequestParameterException
	 */
	private void setInMapEKK0401C170(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(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.MSKM_DTL_NO, JFUBPCommon.getBPListValueString(param, fixedText, TEMP_ID_DTL_EKK0011D020, 0,
				EKK0011D020CBSMsg1List.MSKM_DTL_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"));
	}

	/**
	 * 上りマッピング項目設定(サブオプションサービス契約解約確定)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @param hiChrgMap
	 * @param lastUpdDtm
	 * @throws RequestParameterException
	 */
	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 例外
	 */
	public void setRpgData(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, ArrayList<HashMap> packList,
			ArrayList<HashMap> optionList) throws Exception
	{
		// 開始ログ
		outDebugLog("----- setRpgData Start  -----");

		// ※パックの付け替えの場合は、解約と申込の２レコード進捗データを作成する。
		// ※パックがつかない場合は、オプションの数分進捗データを作成する。

		// ●パック用
		for (HashMap dtlMap : packList)
		{
			// ○EKK1091D010_進捗登録
			// ユーザデータ初期化
			JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK1091D010);
			// 上りマッピング
			setInMapEKK1091D010(param, fixedText, dtlMap, true);
			// サービスIF実行
			JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK1091D010, TEMP_ID_DTL_EKK1091D010, IN_COL_LIST_EKK1091D010,
					ERR_COL_EKK1091D010);
		}

		// ●オプション用
		for (HashMap dtlMap : optionList)
		{
			// ○EKK1091D010_進捗登録
			// ユーザデータ初期化
			JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK1091D010);
			// 上りマッピング
			setInMapEKK1091D010(param, fixedText, dtlMap, false);
			// サービスIF実行
			JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK1091D010, TEMP_ID_DTL_EKK1091D010, IN_COL_LIST_EKK1091D010,
					ERR_COL_EKK1091D010);

		}

		// 終了ログ
		outDebugLog("----- setRpgData End  -----");
	}

	/**
	 * 上りマッピング項目設定(進捗登録)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap
	 * @param packFlg
	 * @throws RequestParameterException
	 */
	private void setInMapEKK1091D010(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(EKK1091D010CBSMsg.MSKM_DTL_NO, JFUBPCommon.getBPListValueString(param, fixedText, TEMP_ID_DTL_EKK0011D020, 0,
				EKK0011D020CBSMsg1List.MSKM_DTL_NO));
		// 請求契約番号
		inMap.put(EKK1091D010CBSMsg.SEIKY_KEI_NO, dataMap.get("seiky_kei_no"));
		// 請求方法番号(口座)
		inMap.put(EKK1091D010CBSMsg.SEIKY_WAY_NO_KOZA, null);
		// 請求方法番号(クレジットカード)
		inMap.put(EKK1091D010CBSMsg.SEIKY_WAY_NO_CRECARD, null);
		// サービス契約番号
		inMap.put(EKK1091D010CBSMsg.SVC_KEI_NO, dataMap.get("svc_kei_no"));
		// サービス契約内訳番号
		inMap.put(EKK1091D010CBSMsg.SVC_KEI_UCWK_NO, dataMap.get("svc_kei_ucwk_no"));
		// サービス契約回線内訳番号
		inMap.put(EKK1091D010CBSMsg.SVC_KEI_KAISEN_UCWK_NO, dataMap.get("svc_kei_kaisen_ucwk_no"));
		// 機器提供サービス契約番号
		inMap.put(EKK1091D010CBSMsg.KKTK_SVC_KEI_NO, null);
		// オプションサービス契約番号
		// パック申込時は、未登録
		// パック以外申込時は、以下
		// 申込時は、EKK0371D010_オプションサービス契約＜電話＞登録のオプションサービス契約番号
		// 解約時は、入力値
		inMap.put(EKK1091D010CBSMsg.OP_SVC_KEI_NO, dataMap.get("op_svc_kei_no"));
		// 請求オプションサービス契約番号
		inMap.put(EKK1091D010CBSMsg.SEIOPSVC_KEI_NO, null);
		// サブオプションサービス契約番号
		inMap.put(EKK1091D010CBSMsg.SBOP_SVC_KEI_NO, dataMap.get("sbop_svc_kei_no"));
		// 割引サービス契約番号
		// パック申込時のみ設定
		inMap.put(EKK1091D010CBSMsg.WRIB_SVC_KEI_NO, null);
		// 異動区分
		inMap.put(EKK1091D010CBSMsg.IDO_DIV, JFUStrConst.CD00576_00031); // "00031"：オプション設定
		// 異動年月日時分秒
		inMap.put(EKK1091D010CBSMsg.IDO_DTM, JFUBPCommon.getOpeDateTimeStamp(null));
		// 進捗ステータス
		String prgStat = null;
		if (packFlg)
		{
			prgStat = JFUStrConst.CD00647_5112; // "5112"：ｅｏ光電話オプションパック設定完了
		}
		else
		{
			prgStat = JFUStrConst.CD00647_5102; // "5102"：オプション設定完了
		}
		inMap.put(EKK1091D010CBSMsg.PRG_STAT, prgStat);
		// 進捗メモ
		inMap.put(EKK1091D010CBSMsg.PRG_MEMO, dataMap.get("prg_memo"));
		// 進捗特記事項1
		inMap.put(EKK1091D010CBSMsg.PRG_TKJK_1, dataMap.get("prg_tkjk_1"));
		// 進捗特記事項2
		inMap.put(EKK1091D010CBSMsg.PRG_TKJK_2, null);

	}

	/**
	 * SOD用データマップ作成処理<br>
	 *
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataList
	 * @throws Exception 例外
	 */
	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>();

				// ●区分取得
				// 申込区分
				String mskmDiv = (String)dtlMap.get("mskm_div"); // 1:申込、2:解約
				// サービス区分
				String svcDiv = (String)dtlMap.get("svc_div"); // 1:オプション、2:サブオプション

				// 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
	 */
	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
	 */
	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
	 */
	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
	 */
	public void setTelSelOptPackMapping(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, ArrayList packList,
			String lastUpdDtm) throws Throwable
	{
		// 開始ログ
		outDebugLog("----- setTelSelOptPackMapping Start  -----");

		// ※パックの付け替えの場合は、解約と申込の２回マップデータを作成する。
		// ※パック付け替え時に、2回目の呼出で、最新年月日時分秒（更新前）を渡す必要がある。
		// サービスIF結果データ移送（JFUTransferCC）を使用する。

		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", JPCModelConstant.FUNC_CD_1);
			// 処理区分
			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"));
			// 申込明細番号
			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
	 */
	public 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))
		{
// ▼▼▼ OM-2017-0000593 Modify START
//			// ●サービス契約内訳一意照会
//			// ユーザデータ初期化
//			JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0161A010);
//			// 上りマッピング
//			setInMapEKK0161A010(param, fixedText, dataMap);
//			// サービスIF実行
//			JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0161A010, TEMP_ID_DTL_EKK0161A010, IN_COL_LIST_EKK0161A010,
//					ERR_COL_EKK0161A010);
//			// サービス課金開始年月日
//			svcChrgStaYmd =
//					JFUBPCommon.getTemplateListValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0161A010),
//							TEMP_ID_DTL_EKK0161A010, EKK0161A010CBSMsg1List.SVC_CHRG_STAYMD, 0);
			svcChrgStaYmd = getSvcChrgStartYMD(handle, param, fixedText, (String)dataMap.get("op_svc_kei_no"), (String)dataMap.get("svc_kei_ucwk_no"));
// ▲▲▲ OM-2017-0000593 Modify START

			// ●オプションサービス契約一意照会
			// ユーザデータ初期化
			JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0351A010);
			// 上りマッピング
			setInMapEKK0351A010(param, fixedText, dataMap);
			// サービスIF実行
			JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0351A010, TEMP_ID_DTL_EKK0351A010, IN_COL_LIST_EKK0351A010,
					ERR_COL_EKK0351A010);

			// オプションサービス契約ステータス
			String opSvcKeiStat =
					JFUBPCommon.getTemplateListValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0351A010),
							TEMP_ID_DTL_EKK0351A010, EKK0351A010CBSMsg1List.OP_SVC_KEI_STAT, 0);
			// サービス開始年月日
			String svcStaYmd =
					JFUBPCommon.getTemplateListValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0351A010),
							TEMP_ID_DTL_EKK0351A010, EKK0351A010CBSMsg1List.SVC_STAYMD, 0);

			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(OUT_PARAM_SVC_CHRG_ENDYMD));
				// 解約時課金フラグ
				returnMap.put(EKK0401C180CBSMsg.DSLJI_CHRG_FLG, resMap.get(OUT_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(OUT_PARAM_SVC_CHRG_ENDYMD));
				// 解約時課金フラグ
				returnMap.put(EKK0401C180CBSMsg.DSLJI_CHRG_FLG, resMap.get(OUT_PARAM_CHRGFLG));
			}
			else
			{
				// ●上りマッピング
				// サービス課金終了年月日
				returnMap.put(EKK0401C180CBSMsg.SVC_CHRG_ENDYMD, JFUCommonUtil.addDay(opeDate, -1));
				// 解約時課金フラグ
				returnMap.put(EKK0401C180CBSMsg.DSLJI_CHRG_FLG, JFUStrConst.CD00002_0);

			}
		}

		return returnMap;
	}

	/**
	 * リストのデータ有無。
	 * <br>
	 * @param dataList
	 * @return boolean
	 */
	private boolean checkList(ArrayList dataList)
	{
		boolean retFlag = true;

		if (dataList == null || dataList.size() == 0)
		{
			retFlag = false;
		}

		return retFlag;

	}

	/**
	 * 更新用SODマップを取得。
	 * <br>
	 * @param inMap
	 * @return HashMap
	 */
	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
	 */
	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
	 */
	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));
	}
// ▼▼▼ OM-2017-0000593 ADD START

	/**
	 * 電話オプションサービスのサービス課金開始日を取得する。
	 * <br>
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param opSvcKeiNo
	 * @param inMapSvcKeiUcwkNo
	 */
	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;
			}
		}
		
		// デフォルトの課金開始日を返却する。
		JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK0161A010);
		// 上りマッピング
		dataMap.put("svc_kei_ucwk_no", inMapSvcKeiUcwkNo);
		setInMapEKK0161A010(param, fixedText, dataMap);
		// サービスIF実行
		JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK0161A010, TEMP_ID_DTL_EKK0161A010, IN_COL_LIST_EKK0161A010, ERR_COL_EKK0161A010);
		
		return JFUBPCommon.getTemplateListValue(inMap, JFUBPCommon.getMaxTempTempleteKey(inMap, TEMP_TEMP_KEY_EKK0161A010), 
				                     TEMP_ID_DTL_EKK0161A010,
				                     EKK0161A010CBSMsg1List.SVC_CHRG_STAYMD, 0);
	}
	/**
	 * オプションサービス契約履歴一覧照会のinMapを設定
	 * <br>
	 * @param param 
	 * @param fixedText
	 * @param opSvcKeiNo
	 */
	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);
	}
// ▲▲▲ OM-2017-0000593 ADD START
}
