/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：KKSV0384_KKSV0384OPDBMapper
*	ソースファイル名：KKSV0384_KKSV0384OPDBMapper.java
*	作成者			：Fujitsu
*	日付			：2011年11月17日
*＜機能概要＞
*	BP（請求契約更新ページング）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/11/17	Fujitsu		新規作成
*	v4.00.00	2013/06/14  FJ)磯俣		【IT2-2013-0000535】マンションオーナーで料金コースない場合の対応
*	v4.00.01	2013/08/09	FJ)磯俣		【IK1-2013-0000126】明細適用年月日へ課金開始日を編集
*	v15.00.00	2015/07/17	FJ)余野木	【OM-2015-0000783】対応
*   v18.00.00   2015/08/11  FJ) 阪口    【ANK-2631-00-00】ワンストップ案件（ＳＴＥＰ１）※koptWebBからkoptWebAへコピー
*	v15.00.01	2015/08/17	FJ)余野木	【OM-2015-0001910】対応
*   v20.00.00   2015/10/21  FJ) 阪口    【ANK-2073-00-00】【ＮＯ．１５４】支払方法変更時のメール通知機能の追加 ※koptWebBとの資産同期
*	v20.00.00	2015/11/18	FJ)川島		【ANK-2565-00-00】クレジットカード番号預かりサービス導入（Step3：預かり番号化）
*	v20.00.01	2015/12/04	FJ)阪口		【ANK-2565-00-00】クレジットカード番号預かりサービス導入（Step3：預かり番号化）※koptWebBとの資産同期
*	v23.00.00	2016/02/19	FJ)中山		【OM-2016-0000145】請求契約変更の支払方法変更もれ対応
*	v23.00.01	2016/02/19	FJ)中山		【OM-2016-0000145】請求契約変更の支払方法変更もれ対応 ※koptWebBとの資産同期
*	v58.00.00	2022/04/07	GDC)M. Gungog	【ANK-3846-00-00】【クレカ】クリアパス→ペイジェント移行
*	v66.00.00	2023/05/19	FJ)謝		【ANK-4408-00-00】口振請求及びWeb申込システム移行 事前対応
*	v66.00.00	2023/05/29	FJ)謝		【ANK-4408-00-00】口振請求及びWeb申込システム移行 事前対応 ※koptWebBとの資産同期
*	v75.00.00	2025/05/12	FJ)中川		【ANK-4619-00-00】3Dセキュア対応 ※koptWebBとの資産同期
**********************************************************************/
package eo.web.webview.mapping;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.common.util.JKKCrecaPaySkaJdg;
import eo.common.util.JKKStringUtil;
import eo.common.util.JPCDateUtil;
import eo.common.util.JPCUtilCommon;
import eo.web.webview.KKA15301SF.KKW01601SFConst;
import eo.web.webview.commonOneStop.JCCWebCommon;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class KKSV0384_KKSV0384OPDBMapper {
	
	/**
	 * "無効"文字列
	 */
	private static final String MUKOU = "無効";
	/**
	 * "有効"文字列
	 */
	private static final String YUUKOU = "有効";
	/**
	 * 支払審査結果コード(口座振替申請ＯＫ)
	 */
	private static final String PAY_SKEKKA_CD_KOZA_OK = "20";
	/**
	 * 支払審査結果コード(口座振替申請ＮＧ)
	 */
	private static final String PAY_SKEKKA_CD_KOZA_NG = "21";
	/**
	 * 支払審査結果コード(口座振替申請ＮＧ解除)
	 */
	private static final String PAY_SKEKKA_CD_KOZA_NGOK = "29";
	/**
	 * 支払審査結果コード(郵便自動振込申請ＯＫ)
	 */
	private static final String PAY_SKEKKA_CD_POST_OK = "30";
	/**
	 * 支払審査結果コード(郵便自動振込申請ＮＧ)
	 */
	private static final String PAY_SKEKKA_CD_POST_NG = "31";
	/**
	 * 支払審査結果コード(郵便自動振込申請ＮＧ解除)
	 */
	private static final String PAY_SKEKKA_CD_POST_NGOK = "39";
// ANK-4619-00-00 ADD START
	/**
	 * 請求方法コード(クレジット)
	 */
	private static final String SEIKY_WAY_CD_CREDIT = "4";
// ANK-4619-00-00 ADD END
	
// ANK-3846-00-00 ADD START
	/**
	 * CARDSTR
	 */
	private static final String CARDSTR = "カード";
// ANK-3846-00-00 ADD END
	
	
	/**
	 * コンストラクタ
	 */
	public KKSV0384_KKSV0384OPDBMapper(){
	}
	

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：請求契約更新
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV038101CC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
		
		if(bean == null){
			return null;
		}
		
		if(bean.length != 1){
			return null;
		}


		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		
		// 共通情報のマッピング
		parentMap.put("func_code", func_code);
		// 検索処理パターン
		parentMap.put("search_type", String.valueOf("1"));
		// 最大検索件数
		parentMap.put("max_search_num", JCCWebCommon.getSearchConst("KKW01601_MAX_SHOW_CNT"));
		// 表示件数
		parentMap.put("display_num", JCCWebCommon.getSearchConst("KKW01601_ROW_PER_PAGE"));
		// ページ番号
//		parentMap.put("display_page_num", bean[0].sendMessageString("ページ番号", X31CWebConst.DATABEAN_GET_VALUE));
		// サービス契約番号 → 請求契約履歴一覧照会マップ.ＫＥＹ＿サービス契約番号
		parentMap.put("key_svc_kei_no", bean[0].sendMessageString("サービス契約番号", X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put("KKSV038101CC", parentMap);
						
		return outputMap;
	}


	/**
	 * 下りマッピング
	 * @param bean　[0]：請求契約更新
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getKKSV038101CC(X31SDataBeanAccess[] bean, HashMap outputMap){

		HashMap parentMap = null;
		if(outputMap.containsKey("KKSV038101CC")){
			parentMap = (HashMap)outputMap.get("KKSV038101CC");
		}

		ArrayList childList = null;
		
		
		X31SDataBeanAccessArray listKKSV038101CC_rireki_seiky_list_EKK0491B002CBSMsg1List = bean[0].getDataBeanArray("請求契約履歴リスト");
		childList = null;
		if(parentMap.containsKey("EKK0491B002CBSMsg1List")){
			childList = (ArrayList)parentMap.get("EKK0491B002CBSMsg1List");

			// 同一請求先番号の判定フラグ
			boolean setYmdFlg = false;
			// 適用年月日退避変数
			String rsvAplyYmd = "";
			
			int meisaiCnt = childList.size();
			
			for(int i = 0; i < childList.size(); i++){
				X31SDataBeanAccess subbean = null;
				if(listKKSV038101CC_rireki_seiky_list_EKK0491B002CBSMsg1List.getCount() -1 >= i){
					subbean = listKKSV038101CC_rireki_seiky_list_EKK0491B002CBSMsg1List.getDataBean(i);
				}else{
					subbean = listKKSV038101CC_rireki_seiky_list_EKK0491B002CBSMsg1List.addDataBean();
				}
				HashMap childMap = (HashMap)childList.get(i);
			
				// 請求契約履歴リスト.請求契約番号 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.請求契約番号
				subbean.sendMessageString("請求契約番号", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_kei_no"));
				// 請求契約履歴リスト.世代登録年月日時分秒 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.世代登録年月日時分秒
				subbean.sendMessageString("世代登録年月日時分秒", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("gene_add_dtm"));
				// 請求契約履歴リスト.課金先適用開始年月日 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.課金先適用開始年月日
				subbean.sendMessageString("課金先適用開始年月日", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("kakins_tstaymd"));
				
				// 請求契約履歴リスト.終了年月日 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.予約適用終了年月日
				String rsvAplyEndYmd = (String)childMap.get("rsv_aply_endymd");
				
				// 上段の請求先番号と同一の場合
				if(setYmdFlg)
				{
					// 表示する終了年月日がない場合
					if("".equals(rsvAplyEndYmd) && !"".equals(rsvAplyYmd))
					{
						// 表示する適用年月日-1日を表示する
						rsvAplyEndYmd = JPCDateUtil.addDay(rsvAplyYmd, -1);
						setYmdFlg = false;
					}
				}
				
				// 請求契約履歴リスト.適用年月日 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.予約適用年月日
				rsvAplyYmd = (String)childMap.get("rsv_aply_ymd");
				
//OM-2016-0000145 ADD START
				// 請求契約履歴リスト.適用年月日初期値 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.予約適用年月日
				subbean.sendMessageString(KKW01601SFConst.L_RIREKI_APLY_YMD_F_02, X31CWebConst.DATABEAN_SET_VALUE, rsvAplyYmd);
//OM-2016-0000145 ADD END
				
				// *** 適用年月日・終了年月日の編集 ***
				// １世代前の請求契約と比較し、請求契約番号に差異がある場合、適用年月日を「課金先適用開始年月日」とする。
				if ((i + 1) < childList.size())
				{
					// １世代前の請求契約情報を取得
					HashMap oldGeneSeikyData = (HashMap) childList.get(i + 1);
					if (!childMap.get("seiky_kei_no").equals(oldGeneSeikyData.get("seiky_kei_no")))
					{
						// 請求契約履歴リスト.適用年月日 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.課金先適用開始年月日
						rsvAplyYmd = (String)childMap.get("kakins_tstaymd");
					}
					else
					{
						// 表示対象レコードの世代管理年月日時分秒
						String compGeneAddDtm = (String)childMap.get("gene_add_dtm");
						
						// １世代前の適用年月日
						String oldRsvAplyYmd = (String)oldGeneSeikyData.get("rsv_aply_ymd");
						// １世代前の世代管理年月日時分秒
						String oldGeneAddDtm = (String)oldGeneSeikyData.get("gene_add_dtm");
						
						StringBuilder compDtm = new StringBuilder(rsvAplyYmd + compGeneAddDtm);
						StringBuilder compDtmOld = new StringBuilder(oldRsvAplyYmd + oldGeneAddDtm);
						
						// １世代前の適用年月日+世代管理年月日時分秒と比較し同一なら課金先適用開始年月日を設定する
						if(compDtm.toString().equals(compDtmOld.toString()))
						{
							rsvAplyYmd = (String)childMap.get("kakins_tstaymd");
							setYmdFlg = true;
						}
					}
				}
				
				// 一覧が１件しかない場合か最後の行の場合、課金先適用開始年月日を設定する
				if(meisaiCnt == i + 1)
				{
					rsvAplyYmd = (String)childMap.get("kakins_tstaymd");
				}
				
				// 請求契約履歴リスト.適用年月日 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.予約適用年月日
				subbean.sendMessageString("適用年月日", X31CWebConst.DATABEAN_SET_VALUE, rsvAplyYmd);
				subbean.sendMessageString("適用年月日マスク保持", X31CWebConst.DATABEAN_SET_VALUE, rsvAplyYmd);
				
				// １世代先の請求契約と比較し、請求契約番号に差異がある場合、終了年月日を「一世代先の適用年月日 - 1日」とする。
				if (i > 0)
				{
					// １世代前の請求契約情報を取得
					HashMap newGeneSeikyData = (HashMap) childList.get(i - 1);
					if (!childMap.get("seiky_kei_no").equals(newGeneSeikyData.get("seiky_kei_no")))
					{
						// 請求契約履歴リスト.終了年月日 ← 請求契約履歴一覧照会マップ（１世代先）.請求契約履歴一覧照会明細.課金先適用開始年月日 - 1日
						rsvAplyEndYmd = (String)newGeneSeikyData.get("kakins_tstaymd");
						rsvAplyEndYmd = JPCDateUtil.addDay(rsvAplyEndYmd, -1);
					}
				}
				// 請求契約履歴リスト.終了年月日 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.予約適用終了年月日
				subbean.sendMessageString("終了年月日", X31CWebConst.DATABEAN_SET_VALUE, rsvAplyEndYmd);
				
				// 請求契約履歴リスト.調整日 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.請求方法適用調整年月日
				subbean.sendMessageString("調整日", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_way_aply_adj_ymd"));
				subbean.sendMessageString("調整日マスク保持", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_way_aply_adj_ymd"));
				// 請求契約履歴リスト.支払方法コード ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.請求方法コード
				String seikyuCd = (String)childMap.get("seiky_way_cd");
				subbean.sendMessageString("支払方法コード", X31CWebConst.DATABEAN_SET_VALUE, seikyuCd);
// ANK-4408-00-00 MOD START
//				// 請求契約履歴リスト.支払方法 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.請求方法コード名称
//				subbean.sendMessageString("支払方法", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_way_cd_nm"));
				// 口座支払方法受付区分略称が取得できた場合
				if (!JKKStringUtil.isNullBlank((String)childMap.get("koza_payway_uk_div_ali")))
				{
					// 請求契約履歴リスト.支払方法 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.請求方法コード名称、口座支払方法受付区分略称
					subbean.sendMessageString("支払方法", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_way_cd_nm") + "　" + (String)childMap.get("koza_payway_uk_div_ali"));
				}
				else
				{
					// 請求契約履歴リスト.支払方法 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.請求方法コード名称
					subbean.sendMessageString("支払方法", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_way_cd_nm"));
				}
// ANK-4408-00-00 MOD END
//				// 請求契約履歴リスト.請求契約カナ名 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.請求契約カナ名
				subbean.sendMessageString("請求契約カナ名", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_kei_kana"));
				subbean.sendMessageString("請求契約カナ名マスク保持", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_kei_kana"));
// ANK-4619-00-00 MOD START
				// 請求契約履歴リスト.請求先名 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.請求契約カナ名 もしくは
				// 請求契約履歴リスト.請求先名 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.クレジットカード名義ローマ字
				if(!JKKStringUtil.isNullBlank((String)childMap.get("crecard_nm_romaji")) && SEIKY_WAY_CD_CREDIT.equals(seikyuCd))
				{
					subbean.sendMessageString("請求先名", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("crecard_nm_romaji"));
				}
				else
				{
					subbean.sendMessageString("請求先名", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_kei_kana"));
				}
				// 請求契約履歴リスト.請求契約ローマ字 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.クレジットカード名義ローマ字
				subbean.sendMessageString("請求契約ローマ字", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("crecard_nm_romaji"));
				subbean.sendMessageString("請求契約ローマ字マスク保持", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("crecard_nm_romaji"));
// ANK-4619-00-00 MOD END
				// 請求契約履歴リスト.初回請求月 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.初回請求年月
				subbean.sendMessageString("初回請求月", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("first_seiky_ym"));
				subbean.sendMessageString("初回請求月マスク保持", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("first_seiky_ym"));
				// 請求契約履歴リスト.請求書発行要否コード ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.請求書発行要否
				subbean.sendMessageString("請求書発行要否コード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seikyus_hakko_yh"));
				// 請求契約履歴リスト.請求書発行要否 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.請求書発行要否名称
				subbean.sendMessageString("請求書発行要否", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seikyus_hakko_yh_nm"));
				// 請求契約履歴リスト.金融機関名 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.金融機関名
				subbean.sendMessageString("金融機関名", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("bank_nm"));
				subbean.sendMessageString("金融機関名マスク保持", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("bank_nm"));
				// 請求契約履歴リスト.支店名 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.金融機関支店名
				subbean.sendMessageString("支店名", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("bank_shiten_nm"));
				subbean.sendMessageString("支店名マスク保持", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("bank_shiten_nm"));
				// 請求契約履歴リスト.金融機関コード ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.金融機関コード
				subbean.sendMessageString("金融機関コード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("bank_cd"));
				subbean.sendMessageString("金融機関コードマスク保持", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("bank_cd"));
				// 請求契約履歴リスト.支店コード ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.金融機関支店コード
				subbean.sendMessageString("支店コード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("bank_shiten_cd"));
				subbean.sendMessageString("支店コードマスク保持", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("bank_shiten_cd"));
				// 請求契約履歴リスト.口座番号 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.口座番号
				subbean.sendMessageString("口座番号", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("koza_no"));
				subbean.sendMessageString("口座番号マスク保持", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("koza_no"));
				// 請求契約履歴リスト.預金種目コード ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.預金種目コード
				subbean.sendMessageString("預金種目コード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("yokin_shumoku_cd"));
				// 請求契約履歴リスト.預金種目 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.預金種目コード名称
				subbean.sendMessageString("預金種目", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("yokin_shumoku_cd_nm"));
				// 請求契約履歴リスト.通帳記号 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.通帳記号
				subbean.sendMessageString("通帳記号", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("tsucho_symbol"));
				subbean.sendMessageString("通帳記号マスク保持", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("tsucho_symbol"));
				// 請求契約履歴リスト.通帳番号 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.通帳番号
				subbean.sendMessageString("通帳番号", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("tsucho_no"));
				subbean.sendMessageString("通帳番号マスク保持", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("tsucho_no"));

				/* ++++++++++ v15.00.00 追加開始 ++++++++++ */
				// クレジットカード無効年月
				String mkYm =  (String)childMap.get("creca_mk_ym");
				// 有効性確認結果区分
				String ykDiv = (String)childMap.get("yk_cfm_rslt_div");
				/* ++++++++++ v15.00.00 追加終了 ++++++++++ */

				// 口座振替か郵便自動振込の場合の編集
				if("2".equals(seikyuCd) || "3".equals(seikyuCd))
				{
					// 請求契約履歴リスト.請求方法番号(口座) ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.請求方法番号(口座)
					subbean.sendMessageString("請求方法番号（口座）", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_way_no_koza"));
					
					// 請求契約履歴リスト.支払審査結果コード ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.支払い審査結果コード（口座）
					String sKekkaCd = (String)childMap.get("kk0501_pay_skekka_cd");
					subbean.sendMessageString("支払審査結果コード", X31CWebConst.DATABEAN_SET_VALUE, sKekkaCd);
					
					
					if("2".equals(seikyuCd))
					{
						// 支払審査結果が口座振替ＮＧの場合
						if(PAY_SKEKKA_CD_KOZA_NG.equals(sKekkaCd))
						{
							subbean.sendMessageString("支払審査結果", X31CWebConst.DATABEAN_SET_VALUE, MUKOU);
						}// 支払審査結果が口座振替ＯＫか口座振替ＮＧ解除の場合
						else if(PAY_SKEKKA_CD_KOZA_OK.equals(sKekkaCd) || PAY_SKEKKA_CD_KOZA_NGOK.equals(sKekkaCd))
						{
							subbean.sendMessageString("支払審査結果", X31CWebConst.DATABEAN_SET_VALUE, YUUKOU);
						}
					}
					else
					{
						// 支払審査結果が郵便自動振込申請ＮＧの場合
						if(PAY_SKEKKA_CD_POST_NG.equals(sKekkaCd))
						{
							subbean.sendMessageString("支払審査結果", X31CWebConst.DATABEAN_SET_VALUE, MUKOU);
						}// 支払審査結果が郵便自動振込ＯＫか郵便自動振込ＮＧ解除の場合
						else if(PAY_SKEKKA_CD_POST_OK.equals(sKekkaCd) || PAY_SKEKKA_CD_POST_NGOK.equals(sKekkaCd))
						{
							subbean.sendMessageString("支払審査結果", X31CWebConst.DATABEAN_SET_VALUE, YUUKOU);
						}
					}
				}
				// クレジットの場合
				else if("4".equals(seikyuCd))
				{
					String sKekkaCdCre = (String)childMap.get("kk0521_pay_skekka_cd");
					// クレジットカードステータス
					String crecard_stat = (String)childMap.get("crecard_stat");
// ANK-3846-00-00 ADD START
					setJKKCrecaPaySkaJdgResult(bean, subbean, childMap);
// ANK-3846-00-00 ADD END

// ANK-3846-00-00 DEL START
//					if("100".equals(crecard_stat))
//					{
//						/* ++++++++++ v15.00.00 変更開始 ++++++++++ */
////						subbean.sendMessageString("支払審査結果", X31CWebConst.DATABEAN_SET_VALUE, YUUKOU);
//						// 有効性確認結果区分が"1:有効性OK"か"2:有効性NG"か"3:照合エラー"か空の場合
//						if(JKKStringUtil.isNullBlank(ykDiv) || "1".equals(ykDiv) || "2".equals(ykDiv) || "3".equals(ykDiv))
//						{
//							if(!JKKStringUtil.isNullBlank(mkYm))
//							{
//								/* ++++++++++ v15.00.01 変更開始 ++++++++++ */
////								String aplyYmd = "";
////								if (!"".equals((String)childMap.get("rsv_aply_endymd")))
////								{
////									aplyYmd = (String)childMap.get("rsv_aply_endymd");
////								}
////								else
////								{
////									aplyYmd = (String)childMap.get("rsv_aply_ymd");
////								}
//								String unyoYmd = "";
//								String aplyYmd = "";
//								String aplyEndYmd = "";
//								unyoYmd = bean[0].sendMessageString(KKW01601SFConst.STDARDYMD, X31CWebConst.DATABEAN_GET_VALUE);
//								aplyYmd = (String)childMap.get("rsv_aply_ymd");
//								aplyEndYmd = (String)childMap.get("rsv_aply_endymd");
//								// 適用年月日が運用日より未来なら未来予約と判断する
//								if (!JPCUtilCommon.isFutureDate(aplyYmd, unyoYmd, "0"))
//								{
//									if ("".equals(aplyEndYmd))
//									{
//										// 適用年月日が運用日以下で終了年月日が入ってなければカレントと判断する
//										aplyYmd = unyoYmd;
//									}
//									else
//									{
//										if (JPCUtilCommon.isFutureDate(unyoYmd, aplyEndYmd, "0"))
//										{
//											// 適用年月日が運用日以下で終了年月日が入っていてかつ運用日が終了年月日より未来なら過去履歴と判断する
//											aplyYmd = aplyEndYmd;
//										}
//										else
//										{
//											// 適用年月日が運用日以下で終了年月日が入っていてかつ運用日が終了年月日以下ならカレントと判断する
//											aplyYmd = unyoYmd;
//										}
//									}
//								}
//								/* ++++++++++ v15.00.01 変更終了 ++++++++++ */
//								
//								if(JPCUtilCommon.isFutureDate(mkYm + "01", aplyYmd.substring(0, 6) + "01", "0"))
//								{
//									// 無効年月が運用日より未来なら審査結果を有効表示する
//									subbean.sendMessageString("支払審査結果", X31CWebConst.DATABEAN_SET_VALUE, YUUKOU);
//									
//								}
//								else
//								{
//									// 無効年月が運用日以下なら審査結果を無効表示する
//									subbean.sendMessageString("支払審査結果", X31CWebConst.DATABEAN_SET_VALUE, MUKOU);
//								}
//							}
//							else
//							{
//								// 無効年月が無ければを有効表示する
//								subbean.sendMessageString("支払審査結果", X31CWebConst.DATABEAN_SET_VALUE, YUUKOU);
//							}
//						}
//						/* ++++++++++ v15.00.00 変更終了 ++++++++++ */
//					}else if("190".equals(crecard_stat))
//					{
//						subbean.sendMessageString("支払審査結果", X31CWebConst.DATABEAN_SET_VALUE, MUKOU);
//					}
// ANK-3846-00-00 DEL END
					subbean.sendMessageString("支払審査結果コード", X31CWebConst.DATABEAN_SET_VALUE, sKekkaCdCre);
				}
				
				// 請求契約履歴リスト.カード種類コード ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.クレジットカード会社コード
				subbean.sendMessageString("カード種類コード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("crecard_comp_cd"));
				// 請求契約履歴リスト.カード種類 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.クレジット会社名
				subbean.sendMessageString("カード種類", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("crecard_comp_nm"));
				// 請求契約履歴リスト.カード番号 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.クレジットカード番号
				subbean.sendMessageString("カード番号", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("crecard_no"));
				subbean.sendMessageString("カード番号マスク保持", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("crecard_no"));
				// 請求契約履歴リスト.有効期限 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.クレジットカード有効期限
				subbean.sendMessageString("有効期限", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("crecard_yk_kigen"));
				subbean.sendMessageString("有効期限マスク保持", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("crecard_yk_kigen"));
// ANK-3846-00-00 ADD START
				// 請求契約履歴リスト.有効性確認結果区分 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.有効性確認結果区分
				subbean.sendMessageString("有効性確認結果区分", X31CWebConst.DATABEAN_SET_VALUE, ykDiv);
// ANK-3846-00-00 ADD END
				
// ANK-2565-00-00 ADD START
				// 請求契約履歴リスト.カード預りＩＤ ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.クレジットカード番号預りID
				subbean.sendMessageString(KKW01601SFConst.L_RIREKI_CARD_AZKRI_ID_02, X31CWebConst.DATABEAN_SET_VALUE,
						(String)childMap.get("crecard_no_azkri_id"));
				// 請求契約履歴リスト.カード預りＩＤマスク保持 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.クレジットカード番号預りID
				subbean.sendMessageString(KKW01601SFConst.L_RIREKI_CARD_AZKRI_ID_MSKB_02, X31CWebConst.DATABEAN_SET_VALUE,
						(String)childMap.get("crecard_no_azkri_id"));
				// 請求契約履歴リスト.仕向先会社コード ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.仕向先会社コード
				subbean.sendMessageString(KKW01601SFConst.SHIKOSAKI_COMP_CD_02, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("shikosaki_comp_cd"));
// ANK-2565-00-00 ADD END
// ANK-3846-00-00 ADD START
				subbean.sendMessageString(KKW01601SFConst.L_RIREKI_IDO_DIV, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("ido_div"));
				// 請求契約履歴リスト.支払い審査結果ＮＧ理由コード（口座） ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.支払い審査結果ＮＧ理由コード（口座）
				subbean.sendMessageString("支払い審査結果ＮＧ理由コード（口座）", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("kk0501_pay_skekka_ng_rsn_cd"));
				// 請求契約履歴リスト.支払い審査依頼年月日（口座） ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.支払い審査依頼年月日（口座）
				subbean.sendMessageString("支払い審査依頼年月日（口座）", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("kk0501_pay_judge_reqymd"));
				// 請求契約履歴リスト.支払い審査依頼年月日（クレジット） ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.支払い審査依頼年月日（クレジット）
				subbean.sendMessageString("支払い審査依頼年月日（クレジット）", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("kk0521_pay_judge_reqymd"));
// ANK-3846-00-00 ADD END

				// 請求契約履歴リスト.無効年月 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.クレジットカード無効年月
				subbean.sendMessageString("無効年月", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("creca_mk_ym"));
				// 請求契約履歴リスト.郵便番号 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.送付先郵便番号
				String pcd = (String)childMap.get("sohus_pcd");
				subbean.sendMessageString("郵便番号", X31CWebConst.DATABEAN_SET_VALUE, JPCUtilCommon.hyhunPcd(pcd));
				// 請求契約履歴リスト.住所コード ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.送付先住所コード
				String ad = (String)childMap.get("sohus_ad_cd");
				subbean.sendMessageString("住所コード", X31CWebConst.DATABEAN_SET_VALUE, JPCUtilCommon.hyhunAdCd(ad));
				StringBuilder str = new StringBuilder();
				String state = (String)childMap.get("sohus_state_nm");
				String city = (String)childMap.get("sohus_city_nm");
				String oaz = (String)childMap.get("sohus_oaztsu_nm");
				String cho = (String)childMap.get("sohus_azcho_nm");
				String ban = (String)childMap.get("sohus_bnchigo");
				String adr = (String)childMap.get("sohus_adrttm");
				String rrm = (String)childMap.get("sohus_adrrm");
				str.append(state);
				str.append(city);
				str.append(oaz);
				str.append(cho);
				str.append(ban);
				str.append(adr);
				str.append(rrm);
				// 請求契約履歴リスト.送付先住所都道府県 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.送付先都道府県名
				subbean.sendMessageString("送付先住所都道府県", X31CWebConst.DATABEAN_SET_VALUE, state);
				// 請求契約履歴リスト.送付先住所市区町村 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.送付先市区町村名
				subbean.sendMessageString("送付先住所市区町村", X31CWebConst.DATABEAN_SET_VALUE, city);
				// 請求契約履歴リスト.送付先住所大字通称 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.送付先大字通称名
				subbean.sendMessageString("送付先住所大字通称", X31CWebConst.DATABEAN_SET_VALUE, oaz);
				// 請求契約履歴リスト.送付先住所字丁目 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.送付先字丁目名
				subbean.sendMessageString("送付先住所字丁目", X31CWebConst.DATABEAN_SET_VALUE, cho);
				// 請求契約履歴リスト.送付先住所建物名 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.送付先住所補記・建物名
				subbean.sendMessageString("送付先住所建物名", X31CWebConst.DATABEAN_SET_VALUE, adr);
				// 請求契約履歴リスト.送付先住所部屋番号 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.送付先住所補記・部屋番号
				subbean.sendMessageString("送付先住所部屋番号", X31CWebConst.DATABEAN_SET_VALUE, rrm);
				// 請求契約履歴リスト.送付先住所番地号 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.送付先番地号
				subbean.sendMessageString("送付先住所番地号", X31CWebConst.DATABEAN_SET_VALUE, ban);
				// 請求契約履歴リスト.送付先住所 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.送付先住所
				subbean.sendMessageString("送付先住所", X31CWebConst.DATABEAN_SET_VALUE, str.toString());
				// 請求契約履歴リスト.送付先カナ名 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.送付先カナ名
				subbean.sendMessageString("送付先カナ名", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("shs_kana"));
				// 請求契約履歴リスト.送付先名 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.送付先名
				subbean.sendMessageString("送付先名", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("sohus_nm"));
				// 請求契約履歴リスト.部課名 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.送付先部課名
				subbean.sendMessageString("部課名", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("sohus_bkm"));
				// 請求契約履歴リスト.担当者名 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.送付先担当者名
				subbean.sendMessageString("担当者名", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("sohus_tntsha_nm"));
				// 請求契約履歴リスト.電話番号 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.送付先電話番号
				subbean.sendMessageString("電話番号", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("sohus_telno"));
				// 請求契約履歴リスト.初回支払申込書受領年月日 ← 請求契約履歴一覧照会マップ.初回支払申込書受領年月日
				subbean.sendMessageString("初回支払申込書受領年月日", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("first_pay_mskmsho_rcp_ymd"));
				// 請求契約履歴リスト.手動入力フラグ ← 請求契約履歴一覧照会マップ.送付先住所手動入力フラグ
				subbean.sendMessageString("手動入力フラグ", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("sohus_ad_man_input_flg"));
				// 請求契約履歴リスト.強制窓口 ← 請求契約履歴一覧照会マップ.強制窓口フラグ
				subbean.sendMessageString("強制窓口", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("kyosei_madoguchi_flg"));
				// 請求契約履歴リスト.強制窓口フラグ名称 ← 請求契約履歴一覧照会マップ.強制窓口フラグ名称
				subbean.sendMessageString("強制窓口フラグ名称", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("kyosei_madoguchi_flg_nm"));
				// 請求契約履歴リスト.送付先法人格種別コード ← 請求契約履歴一覧照会マップ.送付先法人格種別コード
				subbean.sendMessageString("法人格種別コード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("shs_hojin_sbt_cd"));
				// 請求契約履歴リスト.送付先法人格前後指定コード ← 請求契約履歴一覧照会マップ.送付先法人格前後指定コード
				subbean.sendMessageString("法人格前後指定コード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("shs_hojin_zengo_shitei_cd"));
				// 請求契約履歴リスト.最終更新年月時分秒請求契約 ← 請求契約履歴一覧照会マップ.最終更新年月時分秒
				subbean.sendMessageString("最終更新年月日時分秒請求契約", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("last_upd_dtm"));
				
// ANK-3846-00-00 ADD START
				// 請求契約履歴リスト.支払方法通知メール制御コード ← 請求契約履歴一覧照会マップ.支払方法通知メール制御コード
				subbean.sendMessageString(KKW01601SFConst.PAYWAYTCML_CTL_CD_02, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("paywaytcml_ctl_cd"));
// ANK-3846-00-00 ADD END
				
				subbean.sendMessageString("選択", X31CWebConst.DATABEAN_SET_VALUE, "choiceSeiKeiNo('" + i + "');");
				
				// 背景色設定
				if (i % 2 == 1)
				{
					subbean.sendMessageString("背景色", X31CWebConst.DATABEAN_SET_VALUE, "even");
				}
				else
				{
					subbean.sendMessageString("背景色", X31CWebConst.DATABEAN_SET_VALUE, "odd");
				}
				
// ANK-3846-00-00 ADD START
				String shikosakiCompCd = (String)childMap.get("shikosaki_comp_cd");
				// 請求カード会社リスト
				X31SDataBeanAccessArray listKKSV038108SC_seiky_crecard_comp_list = bean[0].getDataBeanArray(KKW01601SFConst.SEIKY_CRECARD_COMP_LIST);
				int size = listKKSV038108SC_seiky_crecard_comp_list.getCount();
				for(int j=0; j<size; j++)
				{
					X31SDataBeanAccess subbean2 = listKKSV038108SC_seiky_crecard_comp_list.getDataBean(j);
					String creditKokanCd = subbean2.sendMessageString(KKW01601SFConst.CREDIT_KOKAN_CD_08, X31CWebConst.DATABEAN_GET_VALUE);
					
					// 請求カード会社名← クレジットカード一意照会マップ.請求カード会社名
					if (creditKokanCd != null && creditKokanCd.equals(shikosakiCompCd) )
					{
						subbean.sendMessageString(KKW01601SFConst.L_RIREKI_SEIKY_CRECARD_COMP_NM, X31CWebConst.DATABEAN_SET_VALUE, subbean2.sendMessageString(KKW01601SFConst.CRECARD_COMP_NM_08, X31CWebConst.DATABEAN_GET_VALUE));
					}
				}
				
				String crecardSbtCdNm = (String)childMap.get("crecard_sbt_cd_nm");
				// 請求契約履歴リスト.カード種別 ← 請求契約履歴一覧照会マップ.カード種別
				if (crecardSbtCdNm.endsWith(CARDSTR))
				{
					int cardLength =  CARDSTR.length();
					crecardSbtCdNm = crecardSbtCdNm.substring(0, crecardSbtCdNm.length() - cardLength);
				}
				subbean.sendMessageString(KKW01601SFConst.L_RIREKI_CARD_SBT, X31CWebConst.DATABEAN_SET_VALUE, crecardSbtCdNm);
				// 請求契約履歴リスト.国内／海外 ← 請求契約履歴一覧照会マップ.国内／海外
				subbean.sendMessageString(KKW01601SFConst.L_RIREKI_KOKUNAI_KAIGAI, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("crdt_issuer_div_nm"));
// ANK-3846-00-00 ADD END
// ANK-4408-00-00 ADD START
				// 請求契約履歴リスト.口座支払方法受付区分コード ← 請求契約履歴一覧照会マップ.口座支払方法受付区分
				subbean.sendMessageString(KKW01601SFConst.L_RIREKI_KOZA_PAYWAY_UK_DIV_CD_02, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("koza_payway_uk_div"));
				// 請求契約履歴リスト.支払方法退避 ← 請求契約履歴一覧照会マップ.請求契約履歴一覧照会明細.請求方法コード名称
				subbean.sendMessageString(KKW01601SFConst.L_RIREKI_PAYWAY_BK_02, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_way_cd_nm"));
				// 請求契約履歴リスト.口座支払方法受付区分退避 ← 請求契約履歴一覧照会マップ.口座支払方法受付区分名称
				subbean.sendMessageString(KKW01601SFConst.L_RIREKI_KOZA_PAYWAY_UK_DIV_BK_02, X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("koza_payway_uk_div_nm"));
// ANK-4408-00-00 ADD END
			}
		}


		return bean;
	}

// ANK-3846-00-00 ADD START
	private void setJKKCrecaPaySkaJdgResult(X31SDataBeanAccess[] bean, X31SDataBeanAccess subbean, HashMap<String, String> childMap)
	{
		// 運用日
		String unyoYmd = bean[0].sendMessageString(KKW01601SFConst.STDARDYMD, X31CWebConst.DATABEAN_GET_VALUE);
		// 請求契約履歴ListBeanのrsv_aply_ymd
		String rsvAplyYmd = (String)childMap.get("rsv_aply_ymd");
		// 請求契約履歴ListBeanのrsv_aply_end_ymd
		String rsvAplyEndYmd = (String)childMap.get("rsv_aply_endymd");
		// 判定基準日
		String jdgstdDay = "";
		
		//運用日 < 適用年月日で判断
		if (JPCUtilCommon.isPastDate(unyoYmd, rsvAplyYmd, "0"))
		{
			/*
			 * 未来予約※2の場合は判定基準日=適用年月日
			 * ※2 未来予約の明細とは
			 * 運用日<適用年月日で判断
			 */
			jdgstdDay = rsvAplyYmd;
		}

		//上記以外で
		else
		{
			/*
			 * カレント※3の場合は判定基準日=運用日
			 * ※3 カレントの明細とは
			 * 上記以外で終了年月日が入っていない
			 * または終了年月日が入っていてかつ
			 * 運用日<=終了年月日で判断
			 */
			if (isNullBlank(rsvAplyEndYmd))
			{
				//終了年月日が入っていない
				jdgstdDay = unyoYmd;
			}
			
			else 
			{
				//運用日<=終了年月日で判断
				if (JPCUtilCommon.isPastDate(unyoYmd, rsvAplyEndYmd, "1"))
				{
					jdgstdDay = unyoYmd;
				}
				
				else
				{
					/*
					 * 過去履歴※4の場合は判定基準日=終了年月日
					 * 上記以外で終了年月日が入っていてかつ
					 * 運用日>終了年月日で判断
					 */
					jdgstdDay  = rsvAplyEndYmd;
				}
			}
		}
		
		// 有効性確認結果区分
		String ykCfmRsltDiv = (String)childMap.get("yk_cfm_rslt_div");
		// クレジットカードステータス
		String crecardStat = (String)childMap.get("crecard_stat");
		// 仕向先会社コード
		String shikosakiCompCd = (String)childMap.get("shikosaki_comp_cd");
		// クレジットカード無効年月
		String crecaMkYm = (String)childMap.get("creca_mk_ym");
		// クレジットカード有効期限
		String crecardYkKigen = (String)childMap.get("crecard_yk_kigen");
		// 異動区分
		String idoDiv = (String)childMap.get("ido_div");
		// オンライン運用日
		String opeDate = unyoYmd;
		
		// クレジットカード支払審査結果判定処理
		String jKKCrecaPaySkaJdgResult = JKKCrecaPaySkaJdg.doCrecaPaySkaJdg(jdgstdDay, ykCfmRsltDiv, crecardStat, 
				shikosakiCompCd, crecaMkYm, crecardYkKigen, idoDiv, opeDate);
		
		subbean.sendMessageString(KKW01601SFConst.PAYWAY_PAY_SKEKKA, X31CWebConst.DATABEAN_SET_VALUE, jKKCrecaPaySkaJdgResult);
	}
	
	/**
	 * 引数に値が設定されているか判定します。
	 * <br>
	 * @param arg0 判定する引数
	 * @return 引数に値が設定されていない場合はtrue
	 */
	private boolean isNullBlank(String arg0) 
	{
		if (arg0 == null) 
		{
			return true;
		}
		
		return 0 == arg0.toString().length();
	}
// ANK-3846-00-00 ADD END

}
