/*********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名			：eo顧客基幹システム
 *	モジュール名		：JBSbatACSksHakCommisionChrgJdg
 *	ソースファイル名	：JBSbatACSksHakCommisionChrgJdg.java
 *	作成者				：富士通　
 *	作成日				：2011年08月04日
 *＜機能概要＞
 *　請求書発行手数料課金判定（課金対象サービス）部品です。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2011/08/04   富士通		新規作成
 *	v4.00		2013/01/23   FJ）高田	【ST4-2012-0000219】性能修正　処理の簡略化
 *	v4.01		2013/02/25   FJ）小柴	【TG1-2013-0000055】請求書発行年月を業務日付-1月で取得する処理を削除
 *	v4.02		2013/03/05   FJ）狭間	【ST4-2013-0000163】水平展開。
 *	v4.03		2013/04/14   FJ) 早崎	【TG1-2013-0000137】対応
 *	v4.04		2013/04/23   FJ) 小柴	【TG1-2013-0000137】対象外判定時の請求方法コード取得元を請求．請求方法コードから請求．契約時請求方法コードに修正
 *	v4.05		2013/04/26   FJ) 小柴	【TG1-2013-0000137】請求内訳情報取得時の処理対象外判定を修正
 *	v4.06		2013/05/02   FJ) 小柴	【TG1-2013-0000154】v4.04の取得元変更対応を元に戻す
 *	v4.07		2013/05/08   FJ) 小柴	【TG1-2013-0000137】通話明細送付サービス契約をしている請求先の判定処理SQLを修正
 *	v4.08		2013/05/09   FJ) 小柴	【TG1-2013-0000137】請求内訳情報取得時の処理対象外判定を再度修正
 *	v4.09		2013/05/18   FJ) 小柴	【TG1-2013-0000xxx】オプションサービス契約の存在チェック処理を修正
 *	v4.10		2013/05/22   FJ) 小柴	【TG1-2013-0000472】窓口請求時の発行手数料金額判定の処理方法を変更
 *	v4.11		2013/06/07   FJ) 藤田	【ST4-2013-0000447】通話明細送付サービス判定をjavaではおこなわずシェルで行うように変更する
 *	v5.00		2013/07/08   FJ) 小柴	【IT1-2013-0001528】性能改善：料金項目抽出変換、定額料金マスタからのデータ取得をMapで行うように修正
 *															請求内訳データの取得を、請求データ取得と同時に行うように修正
 *	v5.01		2013/08/29   FJ) 小柴	【OM-2013-0001194】督促ステータスによる対象外判定のSQL修正に伴う処理修正、料金スケジュール定義の取得処理追加
 *	v8.00		2013/12/13   FJ) 鈴木	【ANK-1794-00-00】L2-MVNO対応（請求書電話番号表示（LC含む））
 *	v8.01		2014/03/10   FJ) 伊藤	【TG1-2014-0000001】マスタ参照年月日対応
 *	v12.00.00	2015/01/15   FJ) 寺村	【OM-2014-0004025】手数料対象外判定に「ネット」契約が存在しない請求先を追加
 *	v15.00.00	2015/08/18   FJ) 大山	【OM-2015-0001848】性能対応
 *	v24.00.00   2015/09/03   FJ）酒井	【ANK-2691-00-00】請求書発行手数料の課金方式の変更
 *	v22.00.00   2016/01/12   FJ）岡田	【OM-2016-0000102】請求書発行手数料（調整分）の対応
 *	v23.00.00   2016/03/16   FJ）岡田	【OM-2016-0000141】性能改善
 *	v38.00.00   2018/09/10   FJ）麻生	【ANK-3361-00-00】振込用紙発行手数料の変更
 *	v45.00.00   2019/07/19   FJ）大崎	【ANK-3607-00-00】料金収納手数料課金抑止の残課題対応について
 *	v53.00.00   2021/05/17   FJ）吉田	【ANK-4028-00-00】発行手数料の課金判定見直し対応
 *********************************************************************/
package eo.business.service;


import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JACBatCommon;
import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatParamUtil;
import eo.business.common.JACbatSchdlUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatInterface;
import eo.business.common.JBSbatMatchServiceInterface;
import eo.business.common.JCCBatCommon;
import eo.business.util.file.JBSbatACIFI011;
import eo.business.util.file.JBSbatACIFI016;
import eo.business.util.file.JBSbatACIFM230;
import eo.business.util.table.JBSbatAC_M_TEGAK_PRC;
import eo.business.util.table.JBSbatCH_M_PRC_KMK_CS_CHGE;
import eo.business.util.table.JBSbatCH_M_PRC_SCHDL_TEIGI;
import eo.business.util.table.JBSbatCH_T_SEIKY;
import eo.business.util.table.JBSbatCH_T_SEIKY_UCWK;
import eo.business.util.table.JBSbatCH_T_TOKUSOKU_IDO;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACSksHakCommisionChrgJdg extends JBSbatBusinessService implements JBSbatMatchServiceInterface
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
// v23.00.00 2016/03/16 DEL START 
// v12.00.00 2015/01/29 MOD START 
//	/** テーブル(オプションサービス契約)*/
//	private static final String D_TBL_NAME_KK_T_SEIKY_KEI = "KK_T_SEIKY_KEI";
//	/** テーブル(サービス契約)*/
//	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";
// v12.00.00 2015/01/29 MOD END 
// v23.00.00 2016/03/16 DEL END 

	/** テーブル(定額料金)*/
	private static final String D_TBL_NAME_AC_M_TEGAK_PRC = "AC_M_TEGAK_PRC";

	/** テーブル(請求)*/
	private static final String D_TBL_NAME_CH_T_SEIKY = "CH_T_SEIKY";

	/** テーブル(督促異動)*/
	private static final String D_TBL_NAME_CH_T_TOKUSOKU_IDO = "CH_T_TOKUSOKU_IDO";

	/** テーブル(料金項目抽出変換)*/
	private static final String D_TBL_NAME_CH_M_PRC_KMK_CS_CHGE = "CH_M_PRC_KMK_CS_CHGE";
	
	/** テーブル(料金スケジュール定義)*/
	private static final String D_TBL_NAME_CH_M_PRC_SCHDL_TEIGI = "CH_M_PRC_SCHDL_TEIGI";

// v23.00.00 2016/03/16 DEL START 
// v12.00.00 2015/01/29 ADD START 
//	/** SQL定義キー(AC_SELECT_038)*/
//	private static final String KK_T_SVC_KEI_AC_SELECT_038 = "AC_SELECT_038";
// v12.00.00 2015/01/29 ADD END 
// v23.00.00 2016/03/16 DEL END 

	// ANK-3361-00-00 DEL START
//	/** SQL定義キー(AC_SELECT_004)*/
//	private static final String AC_M_TEGAK_PRC_AC_SELECT_004 = "AC_SELECT_004";
	// ANK-3361-00-00 DEL END

	/** SQL定義キー(AC_SELECT_005)*/
	private static final String CH_T_SEIKY_AC_SELECT_005 = "AC_SELECT_005";

	/** SQL定義キー(AC_SELECT_001)*/
	private static final String CH_T_TOKUSOKU_IDO_AC_SELECT_001 = "AC_SELECT_001";

	/** SQL定義キー(AC_SELECT_010)*/
	private static final String CH_M_PRC_KMK_CS_CHGE_AC_SELECT_010 = "AC_SELECT_010";

	/** SQL定義キー(AC_SELECT_007)*/
	private static final String CH_M_PRC_KMK_CS_CHGE_AC_SELECT_007 = "AC_SELECT_007";
	
	/** SQL定義キー(CH_SELECT_002)*/
	private static final String CH_M_PRC_SCHDL_TEIGI_CH_SELECT_002 = "CH_SELECT_002";

// v23.00.00 2016/03/16 DEL START 
// v12.00.00 2015/01/29 MOD START 
//	/** テーブルアクセスクラス(オプションサービス契約)*/
//	private JBSbatSQLAccess db_KK_T_SEIKY_KEI = null;
//	/** テーブルアクセスクラス(サービス契約)*/
//	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;
// v12.00.00 2015/01/29 MOD END 
// v23.00.00 2016/03/16 DEL END 


	/** テーブルアクセスクラス(定額料金)*/
	private JBSbatSQLAccess db_AC_M_TEGAK_PRC = null;

	/** テーブルアクセスクラス(請求)*/
	private JBSbatSQLAccess db_CH_T_SEIKY = null;

	/** テーブルアクセスクラス(督促異動)*/
	private JBSbatSQLAccess db_CH_T_TOKUSOKU_IDO = null;

	/** テーブルアクセスクラス(料金項目抽出変換)*/
	private JBSbatSQLAccess db_CH_M_PRC_KMK_CS_CHGE = null;

	/** テーブルアクセスクラス(料金項目抽出変換（請求書発行手数料） */
	private JBSbatSQLAccess db_CH_M_PRC_KMK_CS_CHGE_2 = null;
	
	/** テーブルアクセスクラス(料金スケジュール定義） */
	private JBSbatSQLAccess db_CH_M_PRC_SCHDL_TEIGI = null;

	/** キーマッチ処理フラグ*/
	private boolean matchProcFlg;

	/** マスタファイル処理フラグ*/
	private boolean mastProcFlg;

	/** トランファイル処理フラグ*/
	private boolean tranProcFlg;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 業務機能識別コード(請求書発行手数料) */
	private String wKinoSkbtHak 	= null;
	
	/** 業務機能識別コード(請求書再発行手数料) */
	private String wKinoSkbtReHak 	= null;
	
	/** 業務機能識別コード(当月請求額合計) */
	private String wTskgkPrc = null;
	
	/** 業務機能識別コード(当月請求額合計料金項目) */
	private String wSkgkPrc = null;
	
	/** 業務機能識別コード(月名付き請求年月) ＋ 請求書発行月 */
	private String wKinoSkbtMon 	= null;

// v23.00.00 2016/03/16 DEL START 
// v12.00.00 2015/01/29 ADD START 
//	/** 業務パラメータID：請求書発行手数料課金サービス */
//	private String wSkhakChrgSvc = null;
//	
//	/** 業務パラメータID：請求書発行手数料非課金料金グループ */
//	private String wSkhakHchrgPrgp = null;
// v12.00.00 2015/01/29 ADD END 
// v23.00.00 2016/03/16 DEL END 
	
	/** 請求書発行手数料 */
	private ArrayList<String> listKinoSkbtHak = null;
	
	/** 請求書再発行手数料 */
	private ArrayList<String> listKinoSkbtReHak = null;
	
	/** 出力料金項目コード変換マップ */
	private HashMap<String, String> mapPrcKmkCd = null;
	
	// ANK-3361-00-00 DEL START
//	/** 定額料金マップ */
//	private HashMap<String, ArrayList<JBSbatCommonDBInterface>> mapTegakPrc = null;
	// ANK-3361-00-00 DEL END
	
	/** 固定文字列（請求内訳．請求番号） */
	private static final String UCWK_SEIKY_NO = "UCWK_SEIKY_NO";
	
	/** 前月請求書処理日 */
	private String prevSeikyTrnYmd = null;
	
// v23.00.00 2016/03/16 DEL START 
// v12.00.00 2015/01/29 ADD START 
//	/** 請求年月初日 */
//	private String seikyStaYmd = null;
// v12.00.00 2015/01/29 ADD END 
// v23.00.00 2016/03/16 DEL END 
	// ANK-3361-00-00 DEL START
//	/** 請求年月末日 */
//	private String seikyEndYmd = null;
	// ANK-3361-00-00 DEL END
	
	/**
	 * 初期処理
	 * @param commonItem バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/

		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
// v23.00.00 2016/03/16 DEL START 
// v12.00.00 2015/01/29 MOD START 
//		db_KK_T_SEIKY_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SEIKY_KEI);
//		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
// v12.00.00 2015/01/29 MOD END 
// v23.00.00 2016/03/16 DEL END 
		db_AC_M_TEGAK_PRC = new JBSbatSQLAccess(commonItem, D_TBL_NAME_AC_M_TEGAK_PRC);
		db_CH_T_SEIKY = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_SEIKY);
		db_CH_T_TOKUSOKU_IDO = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_TOKUSOKU_IDO);
		db_CH_M_PRC_KMK_CS_CHGE = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_PRC_KMK_CS_CHGE);
		db_CH_M_PRC_KMK_CS_CHGE_2 = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_PRC_KMK_CS_CHGE);
		db_CH_M_PRC_SCHDL_TEIGI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_PRC_SCHDL_TEIGI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][opeDate=" + super.opeDate + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][freeItem=" + super.freeItem + "]");

		// パラメータ取得クラス生成
		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		
		try
		{
			// 業務機能識別コードを取得する
			// 請求書発行手数料
			this.wKinoSkbtHak 		= paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_WKS_SKS_HAK_CMS);
			// 請求書再発行手数料
			this.wKinoSkbtReHak 	= paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_WKS_SKS_RE_HK_CMS);
			// 当月請求額合計
			this.wTskgkPrc			= paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_WKS_TSKGK_PRC);
			// 請求額合計料金項目コード
			this.wSkgkPrc			= paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_WKS_SKGK_PRC);
			paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_WKS_TW_DTL_SH_SV);
			// 月名付き請求年月
			this.wKinoSkbtMon 		= paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_WKS_MON_NM_SEIYM);
// v23.00.00 2016/03/16 DEL START 
// v12.00.00 2015/01/29 ADD START 
//			// 請求書発行手数料課金サービス
//			this.wSkhakChrgSvc		= paramUtil.getGyoumuParameter(JACStrConst.WKPARA_KK_SKSHAK_CHRG_SVC);
//			// 請求書発行手数料非課金料金グループ
//			this.wSkhakHchrgPrgp	= paramUtil.getGyoumuParameter(JACStrConst.WKPARA_KK_SKSHAK_HCHRG_PRGP);
// v12.00.00 2015/01/29 ADD END 
// v23.00.00 2016/03/16 DEL END 
		}
		finally
		{
			paramUtil.close();
		}
			
		// 料金スケジュール定義
		JACbatSchdlUtil su = new JACbatSchdlUtil(commonItem);
		
		// 請求書発行年月（請求年月）を取得する
		String seikyYm 	= su.getBillDate(super.opeDate, JACStrConst.EVENT_CD_PRC_CALC_DAY);
		String hakkoYm = seikyYm.substring(4, 6);
		
		// ANK-3361-00-00 DEL START
//		// 請求年月から請求年月初日、末日を取得
//		String[] ymd = su.getUseStrEnd(seikyYm, JACStrConst.EVENT_CD_USE_STAYMD, JACStrConst.EVENT_CD_USE_ENDYMD);
		// ANK-3361-00-00 DEL END
// v23.00.00 2016/03/16 DEL START 
// v12.00.00 2015/01/29 ADD START 
//		seikyStaYmd = ymd[0];
// v12.00.00 2015/01/29 ADD END 
// v23.00.00 2016/03/16 DEL END 
		// ANK-3361-00-00 DEL START
//		seikyEndYmd = ymd[1];
		// ANK-3361-00-00 DEL END
		
		// 料金スケジュール定義クローズ
		su.close();
		
		// 業務機能識別コード(月名付き請求年月) ＋ 請求書発行月
		StringBuffer workKinoSbtBuf = new StringBuffer(wKinoSkbtMon);
		workKinoSbtBuf.append(hakkoYm);  			// 請求書発行月
		
		this.wKinoSkbtMon 		= workKinoSbtBuf.toString();
		
		// 前月請求年月の請求書処理日を取得する
		String zenSeikyYm = JCCBatCommon.addMonth(seikyYm.concat("01"), -1).substring(0, 6);
		prevSeikyTrnYmd = getEventYmd(zenSeikyYm, JACStrConst.EVENT_CD_SIKY_TRN_DAY);
		
		// 出力料金項目コード変換マップの作成を行う
		mapPrcKmkCd = new HashMap<String, String>();
		getPrcKmkCsChge();
		
		// ANK-3361-00-00 DEL START
//		// 定額料金マップの作成を行う
//		mapTegakPrc = new HashMap<String, ArrayList<JBSbatCommonDBInterface>>();
//		getTegakPrc();
		// ANK-3361-00-00 DEL END
		
		// 請求書発行手数料、請求書再発行手数料、当月請求額合計の料金項目コード一覧を取得
		listKinoSkbtHak = new ArrayList<String>();
		listKinoSkbtReHak = new ArrayList<String>();
		
		getPrcKmkCsChge2(wKinoSkbtHak, listKinoSkbtHak);
		getPrcKmkCsChge2(wKinoSkbtReHak, listKinoSkbtReHak);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial]業務識別コード：" + wKinoSkbtMon);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");

	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param mastMap 入力電文
	 * @param tranMap 入力電文
	 * @param outputInItem  入力情報
	 * @return JBSbatOutputItem 出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap mastMap, JBSbatServiceInterfaceMap tranMap, JBSbatOutputItem outputInItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[execute][S]");
		assert mastMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute]mastMap："+mastMap.getMap().toString()) : true;
		assert tranMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute]tranMap："+tranMap.getMap().toString()) : true;
		
		// 出力情報
		JBSbatOutputItem outItem = outputInItem;
		
		// 請求年月
		String skyYm = null;
		
		// 請求月前月
		String prevSkyYm = null;
		
		if(mastMap == null && tranMap == null)
		// 入力M、入力T共にNullの場合は処理を抜ける。
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");

			return(outputInItem);
		}
		else if(mastMap == null)
		// 入力MのみNullの場合
		{
			// トランファイル処理フラグを設定する
			this.setTranProcFlg(true);
			
			// 請求年月
			skyYm = tranMap.getString(JBSbatACIFI016.SEIKY_YM);
			
			// 請求月前月
			prevSkyYm = JBSbatInterface.adjustMonth(skyYm.concat("01"), -1).substring(0, 6);

			// 残りの処理を行う
			outItem = doProc(prevSkyYm, tranMap);
			if(outItem == null)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");

				return(outputInItem);
			}
			
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");

			return(outItem);
		}
		else if(tranMap == null)
		// 入力TのみNullの場合
		{
			// マスタファイル処理フラグを設定する
			this.setMastProcFlg(true);

			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");

			return(outputInItem);
		}
		
		// 請求年月
		skyYm = tranMap.getString(JBSbatACIFI016.SEIKY_YM);
		
		// 請求月前月
		prevSkyYm = JBSbatInterface.adjustMonth(skyYm.concat("01"), -1).substring(0, 6);
		
		// マッチングキーリスト(配列[0]:マッチングキー(マスタ) 、配列[1]:マッチングキー(トラン) 
		String[] macthKeyList = new String[2];
		
		// マッチングキー取得
		macthKeyList = this.getMacthKey(mastMap, tranMap, prevSkyYm);

		// 入力M = 入力T
		if(macthKeyList[0].equals(macthKeyList[1]))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute]入力M = 入力T");

			// キーマッチ処理フラグを設定する
			this.setMatchProcFlg(true);
			
			// 請求書発行手数料抑止かどうか
			String yokusi = mastMap.getString(JBSbatACIFI011.HAK_YOKSI_CD);
			if(!yokusi.equals(JACStrConst.SEIKY_YOKSI_CD_SP))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute]請求書発行手数料抑止データとして除外：発行抑止コード ：" + yokusi);
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");

				// 請求書発行手数料抑止データとして除外
				return(outputInItem);
			}
			
			// 残りの処理を行う
			outItem = doProc(prevSkyYm, tranMap);
			if(outItem == null)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute]outItem == null");
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");

				return(outputInItem);
			}
		}
		// 入力M > 入力T
		else if(macthKeyList[0].compareTo(macthKeyList[1]) > 0)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute]入力M > 入力T");

			// トランファイル処理フラグを設定する
			this.setTranProcFlg(true);
			
			// 残りの処理を行う
			outItem = doProc(prevSkyYm, tranMap);
			if(outItem == null)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute]outItem == null");
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");

				return(outputInItem);
			}
		}
		// 入力M < 入力T
		else
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute]入力M < 入力T");

			// マスタファイル処理フラグを設定する
			this.setMastProcFlg(true);
			
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");

			return(outputInItem);
		}

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");

		return(outItem);
		
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
// v23.00.00 2016/03/16 DEL START 
// v12.00.00 2015/01/29 MOD START 
//		db_KK_T_SEIKY_KEI.close();
//		db_KK_T_SVC_KEI.close();
// v12.00.00 2015/01/29 MOD END 
// v23.00.00 2016/03/16 DEL END 
		db_AC_M_TEGAK_PRC.close();
		db_CH_T_SEIKY.close();
		db_CH_T_TOKUSOKU_IDO.close();
		db_CH_M_PRC_KMK_CS_CHGE.close();
		db_CH_M_PRC_KMK_CS_CHGE_2.close();
		db_CH_M_PRC_SCHDL_TEIGI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 * @return mastProcFlg を戻します。
	 */
	public boolean isMastProcFlg()
	{
		return mastProcFlg;
	}

	/**
	 * @return matchProcFlg を戻します。
	 */
	public boolean isMatchProcFlg()
	{
		return matchProcFlg;
	}

	/**
	 * @return tranProcFlg を戻します。
	 */
	public boolean isTranProcFlg()
	{
		return tranProcFlg;
	}

	/**
	 * @param mast_ProcFlg 設定する mastProcFlg。
	 */
	public void setMastProcFlg(boolean mast_ProcFlg)
	{
		this.mastProcFlg = mast_ProcFlg;
	}

	/**
	 * @param match_ProcFlg 設定する matchProcFlg。
	 */
	public void setMatchProcFlg(boolean match_ProcFlg)
	{
		this.matchProcFlg = match_ProcFlg;
	}

	/**
	 * @param tran_ProcFlg 設定する tranProcFlg。
	 */
	public void setTranProcFlg(boolean tran_ProcFlg)
	{
		this.tranProcFlg = tran_ProcFlg;
	}
	

// v23.00.00 2016/03/16 DEL START 
// v12.00.00 2015/01/29 ADD START 
//	/**
//	 * SQLKEY(AC_SELECT_038)でDBアクセスを行います。<br>
//	 * <p>
//	 * <b>処理フロー</b><br>
//	 * <pre>
//	 * 1.引数でバイント変数を設定します。<br>
//	 *
//	 * 2.DBアクセスを実行します。<br>
//	 * 
//	 * 3.メソッドの呼び出し方です。<br>
//	 *		引数:
//	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
//	 *			予約適用年月日
//	 *			予約適用年月日
//	 *			予約適用年月日
//	 *			請求契約番号
//	 *			請求書発行手数料課金サービス 
//	 *			請求書発行手数料非課金料金グループ 
//	 *			サービス開始年月日     
//	 *			サービス解約起算年月日   
//	 *			
//	 * </pre>
//	 * <p>
//	 * @param param バイント変数の値配列。
//	 * @throws Exception 業務サービス内で発生した例外全般。
//	 */
//	private void executeKK_T_SVC_KEI_AC_SELECT_038(Object[] param) throws Exception
//	{
//		// バイント変数のリストを生成します
//		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
//		paramList.setValue(param[0].toString());
//		paramList.setValue(param[1].toString());
//		paramList.setValue(param[2].toString());
//		paramList.setValue(param[3].toString());
//		paramList.setValue(param[4].toString());
//		paramList.setValue(param[5].toString());
//		paramList.setValue(param[6].toString());
//		// 2015/8/18 OM-2015-0001848 DEL START
////		paramList.setValue(param[7].toString());
//		// 2015/8/18 OM-2015-0001848 DEL END
//
//		// DBアクセスを実行します
//		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_AC_SELECT_038);
//	}
// v12.00.00 2015/01/29 ADD END 
// v23.00.00 2016/03/16 DEL END 

	// ANK-3361-00-00 DEL START
//	/**
//	 * SQLKEY(AC_SELECT_004)でDBアクセスを行います。<br>
//	 * <p>
//	 * <b>処理フロー</b><br>
//	 * <pre>
//	 * 1.引数でバイント変数を設定します。<br>
//	 *
//	 * 2.DBアクセスを実行します。<br>
//	 * 
//	 * 3.メソッドの呼び出し方です。<br>
//	 *		引数:
//	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
//	 *		 	システムコード
//	 *			請求年月末日
//	 *			請求年月末日
//	 * </pre>
//	 * <p>
//	 * @param param バイント変数の値配列。
//	 * @throws Exception 業務サービス内で発生した例外全般。
//	 */
//	private void executeAC_M_TEGAK_PRC_AC_SELECT_004(Object[] param) throws Exception
//	{
//		// バイント変数のリストを生成します
//		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
//		paramList.setValue(param[0].toString());
//		paramList.setValue(param[1].toString());
//		paramList.setValue(param[2].toString());
//
//		// DBアクセスを実行します
//		db_AC_M_TEGAK_PRC.selectBySqlDefine(paramList, AC_M_TEGAK_PRC_AC_SELECT_004);
//	}
	// ANK-3361-00-00 DEL END

	/**
	 * SQLKEY(AC_SELECT_005)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	請求契約番号
	 *		 	請求年月
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_T_SEIKY_AC_SELECT_005(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CH_T_SEIKY.selectBySqlDefine(paramList, CH_T_SEIKY_AC_SELECT_005);
	}

	/**
	 * SQLKEY(AC_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *			督促異動年月日
	 *		 	督促番号
	 *			督促異動年月日
	 *			督促番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_T_TOKUSOKU_IDO_AC_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());

		// DBアクセスを実行します
		db_CH_T_TOKUSOKU_IDO.selectBySqlDefine(paramList, CH_T_TOKUSOKU_IDO_AC_SELECT_001);
	}

	/**
	 * SQLKEY(AC_SELECT_007)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	システムコード
	 *		 	業務機能識別機能
	 *		 	抽出変換コード
	 *		 	バッチ実行日付
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_M_PRC_KMK_CS_CHGE_AC_SELECT_007(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());

		// DBアクセスを実行します
		db_CH_M_PRC_KMK_CS_CHGE_2.selectBySqlDefine(paramList, CH_M_PRC_KMK_CS_CHGE_AC_SELECT_007);
	}
	
	/**
	 * SQLKEY(AC_SELECT_010)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	システムコード
	 *		 	業務機能識別機能
	 *		 	適用年月
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_M_PRC_KMK_CS_CHGE_AC_SELECT_010(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		// DBアクセスを実行します
		db_CH_M_PRC_KMK_CS_CHGE.selectBySqlDefine(paramList, CH_M_PRC_KMK_CS_CHGE_AC_SELECT_010);
	}

	/**
	 * SQLKEY(CH_SELECT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	料金スケジュール定義．スケジュール年月
	 *		 	料金スケジュール定義．イベントコード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_M_PRC_SCHDL_TEIGI_CH_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CH_M_PRC_SCHDL_TEIGI.selectBySqlDefine(paramList, CH_M_PRC_SCHDL_TEIGI_CH_SELECT_002);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * マッチングキーリストを取得。
	 * 
	 * @param mastMap マスタ
	 * @param tranMap トラン
	 * @param prevSkyYm トラン.請求月前月
	 * @return String[] 配列[0]:マッチングキー(マスタ)、配列[1]:マッチングキー(トラン) 
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private String[] getMacthKey(JBSbatServiceInterfaceMap mastMap, JBSbatServiceInterfaceMap tranMap, String prevSkyYm) throws Exception
	{
		// マッチングキーリスト(配列[0]:マッチングキー(マスタ) 、配列[1]:マッチングキー(トラン) 
		String[] macthKeyList = new String[2];
		
		StringBuffer keyBufMast = new StringBuffer();
		keyBufMast.append(mastMap.getString(JBSbatACIFI011.SEIKY_KEI_NO)); 	// 請求契約番号
		keyBufMast.append(mastMap.getString(JBSbatACIFI011.SEIKY_YM)); 		// 請求年月
		macthKeyList[0] = keyBufMast.toString(); 							// マッチングキー（マスタ）生成
		
		StringBuffer keyBufTran = new StringBuffer();
		keyBufTran.append(tranMap.getString(JBSbatACIFI016.SEIKY_KEI_NO)); 	// 請求契約番号
		keyBufTran.append(prevSkyYm); 										// 請求年月
		macthKeyList[1] = keyBufTran.toString(); 							// マッチングキー（トラン）生成
		

		return(macthKeyList);
	}
	
	/**
	 * 請求書発行手数料抑止データ除外処理後の処理
	 * 
	 * @param prevSkyYm 請求月前月
	 * @param tranMap トラン
	 * @return String[] 出力データ
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private JBSbatOutputItem doProc(String prevSkyYm, JBSbatServiceInterfaceMap tranMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][doProc]");

		// 請求書発行手数料課金対象外
		if(this.tgJdg(prevSkyYm, tranMap))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][doProc]");
			
			return(null);
		}
		
		// ANK-3361-00-00 DEL START
//		// ↓定額料金情報取得
//		
//		// 相対番号
//		String aitaiNo = JACStrConst.AITAI_NO_SP;
//		String aitDiv = tranMap.getString(JBSbatACIFI016.AIT_DIV);
//		if(aitDiv.equals(JACStrConst.AITAIKBN_SEIKYU))
//		{
//			aitaiNo = tranMap.getString(JBSbatACIFI016.SEIKY_KEI_NO);
//		}
//		else if(aitDiv.equals(JACStrConst.AITAIKBN_SVC))
//		{
//			aitaiNo = tranMap.getString(JBSbatACIFI016.SVC_NO);
//		}
		// ANK-3361-00-00 DEL END
		
		// 料金コースコード
		String pcrsCd = tranMap.getString(JBSbatACIFI016.PCRS_CD);
		
		// 料金サービスコード
		String prcSvcCd = tranMap.getString(JBSbatACIFI016.PRC_SVC_CD);
		
		// ANK-3361-00-00 ADD START
		// 料金項目コード
		String prcKmkCd = tranMap.getString(JBSbatACIFI016.PRC_KMK_CD);
		// ANK-3361-00-00 ADD END
		
		// ANK-3361-00-00 DEL START
//		// 定額料金マップよりデータを取得
//		StringBuffer workKey = new StringBuffer();
//		workKey.append(pcrsCd);
//		workKey.append(prcSvcCd);
//		workKey.append(aitaiNo);
//		
//		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][doProc][PCRS_CD=" + pcrsCd + "][PRC_SVC_CD=" + prcSvcCd + "][AITAI_NO=" + aitaiNo + "]");
//		
//		ArrayList<JBSbatCommonDBInterface> workList = mapTegakPrc.get(workKey.toString());
//		
//		// 取得できなかった場合、相対番号をスペース固定値に置き換えて再度取得
//		if (workList == null)
//		{
//			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][doProc][相対番号をスペース化して再実行");
//			workKey = new StringBuffer();
//			workKey.append(pcrsCd);
//			workKey.append(prcSvcCd);
//			workKey.append(JACStrConst.AITAI_NO_SP);
//			workList = mapTegakPrc.get(workKey.toString());
//			
//			// 再取得結果もnullの場合、マスタ未存在エラーとする
//			if (workList == null)
//			{
//				String[] msgParam = new String[]
//				{ JBSbatAC_M_TEGAK_PRC.TABLE_NAME, workKey.toString() };
//				throw new JBSbatBusinessException(JPCBatchMessageConstant.ECHB0270CH, msgParam);
//			}
//		}
//		
//		
//		JBSbatCommonDBInterface recTgkPrc = null;
//		
//		// 取得データの日付判定を行う
//		for (int i = 0; i < workList.size(); i++)
//		{
//			// リストから定額料金データを取得
//			recTgkPrc = workList.get(i);
//			
//			// 開始、終了年月日を取得
//			String staYmd = recTgkPrc.getString(JBSbatAC_M_TEGAK_PRC.TEGAKPRC_TSTAYMD);
//			String endYmd = recTgkPrc.getString(JBSbatAC_M_TEGAK_PRC.TEGAKPRC_TENDYMD);
//			
//			// 開始、終了、判定日付のいずれかがnullの場合はスキップ
//			if (staYmd == null || endYmd == null)
//			{
//				recTgkPrc = null;
//				continue;
//			}
//			// 判定日付が開始、終了日付の期間内のデータであれば使用する
//			else if (staYmd.compareTo(seikyEndYmd) <= 0 && seikyEndYmd.compareTo(endYmd) <= 0)
//			{
//				break;
//			}
//			
//			// 対象外データの場合、nullに置き換える
//			recTgkPrc = null;
//		}
		// ANK-3361-00-00 DEL END
		
		// 料金項目コード（月名付き請求年月）変換
		// ANK-3361-00-00 MOD START
//		workKey = new StringBuffer();
		StringBuffer workKey = new StringBuffer();
		// ANK-3361-00-00 MOD END
		workKey.append(pcrsCd);
		workKey.append(prcSvcCd);
		// ANK-3361-00-00 MOD START
//		workKey.append(recTgkPrc.getString(JBSbatAC_M_TEGAK_PRC.PRC_KMK_CD));
		workKey.append(prcKmkCd);
		
//		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][doProc][PCRS_CD=" + pcrsCd + "][PRC_SVC_CD=" + prcSvcCd + "][PRC_KMK_CD=" + recTgkPrc.getString(JBSbatAC_M_TEGAK_PRC.PRC_KMK_CD) + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][doProc][PCRS_CD=" + pcrsCd + "][PRC_SVC_CD=" + prcSvcCd + "][PRC_KMK_CD=" + prcKmkCd + "]");
		
		String recPrcKmkCc = mapPrcKmkCd.get(workKey.toString());
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][doProc]");
		
		// 利用料金情報（請求書発行手数料情報）（料金徴収判定前）作成
//		return(this.makeOutItem(tranMap, recTgkPrc, recPrcKmkCc));
		return(this.makeOutItem(tranMap, recPrcKmkCc));
		// ANK-3361-00-00 MOD END
	}
	
	/**
	 * 請求書発行手数料課金対象外判定処理
	 * 
	 * @param prevSkyYm 請求月前月
	 * @param tranMap トラン
	 * @return boolean true:課金対象外
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private boolean tgJdg(String prevSkyYm, JBSbatServiceInterfaceMap tranMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][tgJdg]");
		
		boolean skyJdgFlg = true;
// v23.00.00 2016/03/16 DEL START 
// v12.00.00 2015/01/29 ADD START 
//		boolean scvJdgFlg = true;
// v12.00.00 2015/01/29 ADD END 
// v23.00.00 2016/03/16 DEL END 
		
		// 請求情報取得
		JBSbatCommonDBInterface recSky = null;
		
		// 入力ファイルの「請求契約番号（料金計算時）」より、料金計算日時点での
		// 請求対象の請求契約番号を取得する
		String prcSeikyKeiNo = tranMap.getString(JBSbatACIFM230.PRC_SEIKY_KEI_NO);
		
		// 取得できなかった場合、通常の請求契約番号を使用する
		if (prcSeikyKeiNo == null || prcSeikyKeiNo.isEmpty())
		{
			prcSeikyKeiNo = tranMap.getString(JBSbatACIFM230.SEIKY_KEI_NO);
		}
		
		// 請求情報を取得する処理を実行。
		this.getSeiky(prcSeikyKeiNo, prevSkyYm);
		recSky = this.db_CH_T_SEIKY.selectNext();
		
		// 請求情報なし
		if(recSky == null)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][tgJdg]請求情報なし");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][tgJdg]return(true:課金対象外)");

			return(true);
		}
		
		// 請求書発行対象フラグ
		String skyHakTgFlg = recSky.getString(JBSbatCH_T_SEIKY.SEIKYUS_HAKKO_TG_FLG);
		
// v24.00.00 ANK-2691-00-00 DEL STA
//		// 請求書を発行していない請求先
//		if(skyHakTgFlg.equals(JACStrConst.SKS_HAK_TG_FLG_TG_GAI))
//		{
//			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][tgJdg]請求書を発行していない請求先");
//			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][tgJdg]return(true:課金対象外)");
//
//			return(true);
//		}
// v24.00.00 ANK-2691-00-00 DEL END
		
		// 請求方法コード
		String skyWayCd = recSky.getString(JBSbatCH_T_SEIKY.SEIKY_WAY_CD);
		
		// ANK-3361-00-00 ADD START
		// 請求方法が窓口以外
		if (!JACStrConst.SEIKY_MADOGUCHI.equals(skyWayCd))
		{
// v45.00.00 ANK-3607-00-00 ADD START
			// 料金明細類発行手数料はマンションオーナーに課金しない
			if (!JACBatCommon.isNull(tranMap.getString(JBSbatACIFM230.SVC_KEI_NO_MOWNER)))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][tgJdg]料金明細類発行手数料はマンションオーナーに課金しない");
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][tgJdg]return(true:課金対象外)");

				return(true);
			}
// v45.00.00 ANK-3607-00-00 ADD END
			// 通話明細送付サービスを契約
			if (!JACBatCommon.isNull(tranMap.getString(JBSbatACIFM230.DTL_SOHU_SEIKY_KEI_NO)))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][tgJdg]請求方法が窓口以外で通話明細送付サービスを契約している請求先");
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][tgJdg]return(true:課金対象外)");

				return(true);
			}
			// ANK-4028-00-00 DEL START
//			// 有効なネット契約またはmineo契約がない
//			if (JACBatCommon.isNull(tranMap.getString(JBSbatACIFM230.SVC_KEI_NO)))
//			{
//				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][tgJdg]請求方法が窓口以外で通話明細送付サービスを契約している請求先");
//				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][tgJdg]return(true:課金対象外)");
//
//				return(true);
//			}
			// ANK-4028-00-00 DEL END
		}
		// ANK-3361-00-00 ADD END
		
// ANK-4028-00-00 DEL START
//// v45.00.00 ANK-3607-00-00 ADD START
//		// 請求方法が窓口かつマンションオーナー以外で権利付与地域サービスを契約
//		if (JACStrConst.SEIKY_MADOGUCHI.equals(skyWayCd) && JACBatCommon.isNull(tranMap.getString(JBSbatACIFM230.SVC_KEI_NO_MOWNER))
//				&& !JACBatCommon.isNull(tranMap.getString(JBSbatACIFM230.SEIKY_KEI_NO_LCNS_AREA)))
//		{
//			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][tgJdg]請求方法が窓口かつマンションオーナー以外で権利付与地域サービスを契約している請求先");
//			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][tgJdg]return(true:課金対象外)");
//
//			return(true);
//		}
//// v45.00.00 ANK-3607-00-00 ADD END
// ANK-4028-00-00 DEL END
// ANK-4028-00-00 ADD START
		// 手数料負担方式コードが企業負担
		if(JACStrConst.COMMISION_FTN_HSK_CD_KIGYO.equals(recSky.getString(JBSbatCH_T_SEIKY.COMMISION_FTN_HSK_CD)))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][tgJdg]手数料負担方式コードが企業負担の請求先");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][tgJdg]return(true:課金対象外)");

			return(true);
		}
// ANK-4028-00-00 ADD END
		
		// 支払方法が口振、郵振、クレジットのいずれかで請求書が発行されている請求先
		if(recSky.getString(JBSbatCH_T_SEIKY.SEIKYUS_HAKKO_YH).equals(JACStrConst.SKS_HAK_YH_H) && skyHakTgFlg.equals(JACStrConst.SKS_HAK_TG_FLG_TG))
		{
			if(skyWayCd.equals(JACStrConst.SEIKY_KHRI) || skyWayCd.equals(JACStrConst.SEIKY_YUFUIRI) || skyWayCd.equals(JACStrConst.SEIKY_CREDIT))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][tgJdg]支払方法が口振、郵振、クレジットのいずれかで請求書が発行されている請求先");
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][tgJdg]return(true:課金対象外)");

				return(true);
			}
		}
// v23.00.00 2016/03/16 DEL START 
// v12.00.00 2015/01/29 ADD START 
//		// 有効なサービス契約を判断
//		scvJdgFlg = this.isYukouScvKei(super.opeDate, prcSeikyKeiNo, this.seikyStaYmd);
//		if (scvJdgFlg == false)
//		{
//			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][tgJdg]「ネット」契約が存在しない請求先");
//			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][tgJdg]return(true:課金対象外)");
//
//			return(true);
//		}
// v12.00.00 2015/01/29 ADD END 
// v23.00.00 2016/03/16 DEL END 
		// 督促異動情報取得
		// 督促番号がnull、空文字の場合はスキップする
		String tokusokuNo = recSky.getString(JBSbatCH_T_SEIKY.TOKUSOKU_NO);
		
		if (tokusokuNo != null && !tokusokuNo.isEmpty())
		{
			this.getTokusokuIdo(tokusokuNo, prevSeikyTrnYmd);
		
			// 督促ステータスが「強制解約済」以上の請求先
			JBSbatCommonDBInterface tokMap = this.db_CH_T_TOKUSOKU_IDO.selectNext();
			if(tokMap != null)
			{
				// 督促ステータスを取得
				String tokStat = tokMap.getString(JBSbatCH_T_TOKUSOKU_IDO.TOKUSOKU_STAT);
				
				// 「30:強制解約済」以上の場合、課金対象外とする
				if (JACStrConst.TOKUSOKU_STAT_KYS_KYK_ZUMI.compareTo(tokStat) <= 0)
				{
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][tgJdg]督促ステータスが「強制解約済」以上の請求先");
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][tgJdg]return(true:課金対象外)");
		
					return(true);
				}
			}
		}
		
		// 請求内訳情報取得
		skyJdgFlg = this.getSeikyUcwk(recSky, skyWayCd, prevSkyYm);
		
		// 請求情報が課金対象外である場合
		if(skyJdgFlg == false)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][tgJdg]請求情報が課金対象外である場合");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][tgJdg]return(true:課金対象外)");

			return(true);
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][tgJdg]return(false:課金対象)");

		return(false);
	}
	
	/**
	 * 請求情報取得
	 * 
	 * @param skyKeiNo 請求契約番号
	 * @param prevSkyYm 請求月前月
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void getSeiky(String skyKeiNo, String prevSkyYm) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getSeiky]");
		
		// ＤＢアクセス用のパラメータ定義
		JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();
		
		// 対象キーの設定
		dbList.setValue(skyKeiNo);		// 請求契約番号
		dbList.setValue(prevSkyYm);		// 請求月前月
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getSeiky][請求情報取得][SEIKY_KEI_NO = " + skyKeiNo + ", SEIKY_YM = " + prevSkyYm + "]");
		
		// 請求情報取得
		this.executeCH_T_SEIKY_AC_SELECT_005(dbList.getList().toArray());
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getSeiky]");
	}
	
// v23.00.00 2016/03/16 DEL START 
// v12.00.00 2015/01/29 ADD START 
//	/**
//	 * 請求に対するサービス契約(「ネット」契約)の有無を判断
//	 * 
//	 * @param 予約適用年月日
//	 * @param 予約適用年月日
//	 * @param 予約適用年月日
//	 * @param 請求契約番号
//	 * @param 請求書発行手数料課金サービス 
//	 * @param 請求書発行手数料非課金料金グループ 
//	 * @param サービス開始年月日     
//	 * @param サービス解約起算年月日   
//	 * @throws Exception 業務サービス内で発生した例外全般
//	 */
//	private boolean isYukouScvKei(String opeYmd, String skyKeiNo, String seikyStaYmd) throws Exception
//	{
//		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[isYukouScvKei][S]");
//		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[isYukouScvKei][L][請求番号＝" + skyKeiNo + "]");
//		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[isYukouScvKei][L][適用日＝" + opeYmd + "]");
//		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[isYukouScvKei][L][請求日＝" + seikyStaYmd + "]");
//		
//		// ＤＢアクセス用のパラメータ定義
//		JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();
//		
//		// 対象キーの設定
//		dbList.setValue(opeYmd);				// 予約適用年月日
//		dbList.setValue(opeYmd);				// 予約適用年月日
//		// 2015/8/18 OM-2015-0001848 DEL START
////		dbList.setValue(opeYmd);				// 予約適用年月日
//		// 2015/8/18 OM-2015-0001848 DEL END
//		dbList.setValue(skyKeiNo);				// 請求契約番号
//		dbList.setValue(this.wSkhakChrgSvc);	// 請求書発行手数料課金サービス 
//		dbList.setValue(this.wSkhakHchrgPrgp);	// 請求書発行手数料非課金料金グループ 
//		dbList.setValue(seikyStaYmd);			// サービス開始年月日     
//		dbList.setValue(seikyStaYmd);			// サービス解約起算年月日   
//		
//		// サービス契約の有無
//		this.executeKK_T_SVC_KEI_AC_SELECT_038(dbList.getList().toArray());
//		JBSbatCommonDBInterface recSvcKei = db_KK_T_SVC_KEI.selectNext();
//		if (null != recSvcKei) {
//			BigDecimal recSvcKeiCnt = recSvcKei.getBigDecimal("CNT");
//			if (BigDecimal.ZERO.compareTo(recSvcKeiCnt) == 0) {
//				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[isYukouScvKei][L][該当サービス契約 0 件]");
//				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[isYukouScvKei][E]");
//				return false;
//			} else {
//				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[isYukouScvKei][L][該当サービス契約 "+ recSvcKeiCnt.toString() +" 件]");
//			}
//		} else {
//			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[isYukouScvKei][L][該当サービス契約なし]");
//			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[isYukouScvKei][E]");
//			return false;
//		}
//		
//		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[isYukouScvKei][E]");
//		return true;
//				
//	}
// v12.00.00 2015/01/29 ADD END 
// v23.00.00 2016/03/16 DEL END 

	
	/**
	 * 督促異動情報取得
	 * 
	 * @param tokusokuNo 督促番号
	 * @param prevSkyTrnYmd  前月請求書処理日
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void getTokusokuIdo(String tokusokuNo, String prevSkyTrnYmd) throws Exception
	{
		// ＤＢアクセス用のパラメータ定義
		JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();
		
		// 対象キーの設定
		dbList.setValue(prevSkyTrnYmd);		// 前月請求書処理日
		dbList.setValue(tokusokuNo);		// 督促番号
		dbList.setValue(prevSkyTrnYmd);		// 前月請求書処理日
		dbList.setValue(tokusokuNo);		// 督促番号
		
		// 督促異動情報取得
		this.executeCH_T_TOKUSOKU_IDO_AC_SELECT_001(dbList.getList().toArray());
	}
	
	/**
	 * 請求内訳情報取得
	 * 
	 * @param  recSky    請求取得マップ
	 * @param  skyWayCd  請求方法コード
	 * @param  prevSkyYm 請求月前月
	 * @return 対象外データの場合false
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private boolean getSeikyUcwk(JBSbatCommonDBInterface recSky, String skyWayCd, String prevSkyYm) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][S]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][L][請求番号＝" + recSky.getString(JBSbatCH_T_SEIKY.SEIKY_NO) + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][L][支払方法コード＝" + skyWayCd + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][L][前月請求年月＝" + prevSkyYm + "]");

		JBSbatCommonDBInterface dbMap = recSky;
		
		//v22.00.00 MOD START
		//BigDecimal amntKinoSkbtHak = null;
		//BigDecimal amntKinoSkbtReHak = null;
		//BigDecimal amntKinoSkbtHak_2 = null;
		//BigDecimal amntKinoSkbtReHak_2 = null;
		BigDecimal amntKinoSkbtHak = BigDecimal.ZERO;
		BigDecimal amntKinoSkbtReHak = BigDecimal.ZERO;
		BigDecimal amntKinoSkbtHak_2 = BigDecimal.ZERO;
		BigDecimal amntKinoSkbtReHak_2 = BigDecimal.ZERO;
		//v22.00.00 MOD END
		BigDecimal amntTskgkPrc = null;
		BigDecimal amntSkgkPrc = null;
		boolean dataFlg = false;
		
		// 請求内訳のデータが取得できていない場合、処理をスキップする
		String tmpSeikyNo = dbMap.getString(UCWK_SEIKY_NO);
		if (tmpSeikyNo == null || tmpSeikyNo.isEmpty())
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][E]");
			return true;
		}
		
		while(dbMap != null)
		{
			String dbKmkCd = dbMap.getString(JBSbatCH_T_SEIKY_UCWK.PRC_GRP_CD).concat(
								dbMap.getString(JBSbatCH_T_SEIKY_UCWK.PCRS_CD)).concat(
								dbMap.getString(JBSbatCH_T_SEIKY_UCWK.PRC_SVC_CD)).concat(
								dbMap.getString(JBSbatCH_T_SEIKY_UCWK.PRC_KMK_CD));
			String gsanSeikyYm = dbMap.getString(JBSbatCH_T_SEIKY_UCWK.GSAN_SEIKY_YM);

			// 合算請求年月＝前月請求年月でない場合はチェック対象外
			if(prevSkyYm.equals(gsanSeikyYm))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][L][合算請求年月＝前月請求年月]");
				
				// 料金サービスコードが空文字以外、かつ料金項目コード末尾が01であるかをチェック
				if (!JACStrConst.KARA_MOJI.equals(dbMap.getString(JBSbatCH_T_SEIKY_UCWK.PRC_SVC_CD).trim())
				 && "01".equals(dbKmkCd.substring(dbKmkCd.length() - 2)))
				{
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][L][料金項目コード判定対象][料金サービスコード＝" + dbMap.getString(JBSbatCH_T_SEIKY_UCWK.PRC_SVC_CD)
							+ "][料金項目コード＝" + dbMap.getString(JBSbatCH_T_SEIKY_UCWK.PRC_KMK_CD) + "]");
					
					// 対象データの料金項目コードを確認
					// 請求書発行手数料
					if (listKinoSkbtHak.contains(dbKmkCd))
					{
						assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][L][料金項目コード＝請求書発行手数料][" + dbKmkCd + "]");
						// 金額を退避する
						//v22.00.00 MOD START
						//amntKinoSkbtHak = dbMap.getBigDecimal(JBSbatCH_T_SEIKY_UCWK.AMNT);
						amntKinoSkbtHak = amntKinoSkbtHak.add(dbMap.getBigDecimal(JBSbatCH_T_SEIKY_UCWK.AMNT));
						//v22.00.00 MOD END
					}
					// 請求書再発行手数料
					else if (listKinoSkbtReHak.contains(dbKmkCd))
					{
						assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][L][料金項目コード＝請求書再発行手数料][" + dbKmkCd + "]");
						// 金額を退避する
						//v22.00.00 MOD START
						//amntKinoSkbtReHak = dbMap.getBigDecimal(JBSbatCH_T_SEIKY_UCWK.AMNT);
						amntKinoSkbtReHak = amntKinoSkbtReHak.add(dbMap.getBigDecimal(JBSbatCH_T_SEIKY_UCWK.AMNT));
						//v22.00.00 MOD END
					}
					// その他の料金項目コード
					else
					{
						// 当月請求額合計の料金項目コードの場合はスキップ
						if (!wTskgkPrc.equals(dbMap.getString(JBSbatCH_T_SEIKY_UCWK.PRC_KMK_CD)))
						{
							assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][L][料金項目コード＝その他][" + dbKmkCd + "]");
							// 対象外データ存在フラグをtrueにする
							dataFlg = true;
						}
					}
				}
				
				// 当月請求額合計
				if (wTskgkPrc.equals(dbMap.getString(JBSbatCH_T_SEIKY_UCWK.PRC_KMK_CD)))
				{
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][L][料金項目コード＝当月請求額合計");
					// 金額を退避する
					amntTskgkPrc = dbMap.getBigDecimal(JBSbatCH_T_SEIKY_UCWK.AMNT);
				}
			}
			
			// 支払方法コード＝窓口でない場合はチェック対象外
			if (JACStrConst.SEIKY_MADOGUCHI.equals(skyWayCd))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][L][支払方法コード＝窓口]");
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][L][料金項目コード判定対象][料金サービスコード＝" + dbMap.getString(JBSbatCH_T_SEIKY_UCWK.PRC_SVC_CD)
						+ "][料金項目コード＝" + dbMap.getString(JBSbatCH_T_SEIKY_UCWK.PRC_KMK_CD) + "]");
				// 対象データの料金項目コードを確認
				// 請求書発行手数料
				if (listKinoSkbtHak.contains(dbKmkCd))
				{
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][L][料金項目コード＝請求書発行手数料][" + dbKmkCd + "]");
					// 金額を退避する
					//v22.00.00 MOD START
					//amntKinoSkbtHak_2 = dbMap.getBigDecimal(JBSbatCH_T_SEIKY_UCWK.AMNT);
					amntKinoSkbtHak_2 = amntKinoSkbtHak_2.add(dbMap.getBigDecimal(JBSbatCH_T_SEIKY_UCWK.AMNT));
					//v22.00.00 MOD END
				}
				// 請求書再発行手数料
				else if (listKinoSkbtReHak.contains(dbKmkCd))
				{
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][L][料金項目コード＝請求書再発行手数料][" + dbKmkCd + "]");
					// 金額を退避する
					//v22.00.00 MOD START
					//amntKinoSkbtReHak_2 = dbMap.getBigDecimal(JBSbatCH_T_SEIKY_UCWK.AMNT);
					amntKinoSkbtReHak_2 = amntKinoSkbtReHak_2.add(dbMap.getBigDecimal(JBSbatCH_T_SEIKY_UCWK.AMNT));
					//v22.00.00 MOD END
				}
				// 請求額合計
				else if (wSkgkPrc.equals(dbMap.getString(JBSbatCH_T_SEIKY_UCWK.PRC_KMK_CD)))
				{
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][L][料金項目コード＝請求額合計");
					// 金額を退避する
					amntSkgkPrc = dbMap.getBigDecimal(JBSbatCH_T_SEIKY_UCWK.AMNT);
				}
			}
			
			// 次の行を読み込み
			dbMap = this.db_CH_T_SEIKY.selectNext();
		}
		
		
		// 発行手数料以外のレコードがある場合はチェック対象外
		if (!dataFlg)
		{
			// 発行手数料・再発行手数料のいずれか一方と、当月請求額合計の値を取得できなかった場合、金額判定をスキップする
			if ( (amntKinoSkbtHak != null || amntKinoSkbtReHak != null) && amntTskgkPrc != null)
			{
				// nullの変数は0で初期化しておく
				if (amntKinoSkbtHak == null)
				{
					amntKinoSkbtHak = BigDecimal.ZERO;
				}
				if (amntKinoSkbtReHak == null)
				{
					amntKinoSkbtReHak = BigDecimal.ZERO;
				}
				
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][L][金額チェック実施][当月請求額合計＝" + amntTskgkPrc
						+ "][発行手数料合計＝" + amntKinoSkbtHak.add(amntKinoSkbtReHak).toString() + "]");
				// 当月請求額合計が0円の場合、対象外
				if (amntTskgkPrc.compareTo(BigDecimal.ZERO) == 0)
				{
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][L][対象外：当月請求額合計が0円]");
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][E]");
					return false;
				}
				// 当月請求額合計の値と発行手数料＋再発行手数料の値が一致する場合、対象外
				else if (amntTskgkPrc.compareTo(amntKinoSkbtHak.add(amntKinoSkbtReHak)) == 0)
				{
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][L][対象外：発行手数料レコード以外未存在]");
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][E]");
					return false;
				}
			}
		}
		
		// 窓口請求時のみ判定する
		if (JACStrConst.SEIKY_MADOGUCHI.equals(skyWayCd))
		{
			// 発行手数料・再発行手数料のいずれか一方と、請求額合計の値を取得できなかった場合、金額判定をスキップする
			if ( (amntKinoSkbtHak_2 != null || amntKinoSkbtReHak_2 != null) && amntSkgkPrc != null)
			{
				// nullの変数を0で初期化しておく
				if (amntKinoSkbtHak_2 == null)
				{
					amntKinoSkbtHak_2 = BigDecimal.ZERO;
				}
				if (amntKinoSkbtReHak_2 == null)
				{
					amntKinoSkbtReHak_2 = BigDecimal.ZERO;
				}
				
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][L][金額チェック実施][請求額合計＝" + amntSkgkPrc
						+ "][発行手数料合計＝" + amntKinoSkbtHak_2.add(amntKinoSkbtReHak_2).toString() + "]");
				
				// 請求額合計が0円の場合、対象外
				if (amntSkgkPrc.compareTo(BigDecimal.ZERO) == 0)
				{
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][L][対象外：請求額合計が0円]");
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][E]");
					return false;
				}
				// 請求額合計の値が発行手数料＋再発行手数料の値以下の場合、対象外
				else if(amntSkgkPrc.compareTo(amntKinoSkbtHak_2.add(amntKinoSkbtReHak_2)) <= 0)
				{
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][L][対象外：請求額合計が手数料の合算金額以下]");
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][E]");
					return false;
				}
			}
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[getSeikyUcwk][E]");
		return true;
	}
	
	// ANK-3361-00-00 DEL START
//	/**
//	 * 定額料金情報取得
//	 * 
//	 * @throws Exception 業務サービス内で発生した例外全般
//	 */
//	private void getTegakPrc() throws Exception
//	{
//		// ＤＢアクセス用のパラメータ定義
//		JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();
//		
//		// 対象キーの設定
//		dbList.setValue(super.systemCode);	// システムコード
//		dbList.setValue(seikyEndYmd);			// 請求年月末日
//		dbList.setValue(seikyEndYmd);			// 請求年月末日
//		
//		// 定額料金情報取得
//		this.executeAC_M_TEGAK_PRC_AC_SELECT_004(dbList.getList().toArray());
//		
//		// 取得したデータをMapに保存
//		JBSbatCommonDBInterface tempDB = db_AC_M_TEGAK_PRC.selectNext();
//		String tempKey = null;
//		ArrayList<JBSbatCommonDBInterface> listDB = new ArrayList<JBSbatCommonDBInterface>();
//		
//		while(tempDB != null)
//		{
//			StringBuffer workKey = new StringBuffer();
//			workKey.append(tempDB.getString(JBSbatAC_M_TEGAK_PRC.PCRS_CD));
//			workKey.append(tempDB.getString(JBSbatAC_M_TEGAK_PRC.PRC_SVC_CD));
//			workKey.append(tempDB.getString(JBSbatAC_M_TEGAK_PRC.AITAI_NO));
//			
//			// キーブレイクしたらListをMapに保存
//			if (tempKey != null && !tempKey.equals(workKey.toString()))
//			{
//				mapTegakPrc.put(tempKey, listDB);
//				listDB = new ArrayList<JBSbatCommonDBInterface>();
//			}
//			
//			// 同一キーのデータはListに保存する
//			listDB.add(tempDB);
//			
//			tempDB = db_AC_M_TEGAK_PRC.selectNext();
//			tempKey = workKey.toString();
//		}
//		
//		// 最終行を含むデータをMapに登録する
//		mapTegakPrc.put(tempKey, listDB);
//	}
	// ANK-3361-00-00 DEL END

	/**
	 * 料金項目抽出変換情報取得
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void getPrcKmkCsChge() throws Exception
	{
		// ＤＢアクセス用のパラメータ定義
		JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();
		
		// 対象キーの設定
		dbList.setValue(super.systemCode);			// システムコード
		dbList.setValue(this.wKinoSkbtMon);			// 業務機能識別コード
		dbList.setValue(super.opeDate);				// バッチ運用日
		
		// 料金項目抽出変換情報取得
		this.executeCH_M_PRC_KMK_CS_CHGE_AC_SELECT_010(dbList.getList().toArray());
		
		// 取得したデータをMapに保存
		JBSbatCommonDBInterface tempDB = db_CH_M_PRC_KMK_CS_CHGE.selectNext();
		
		while(tempDB != null)
		{
			StringBuffer workKey = new StringBuffer();
			workKey.append(tempDB.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PCRS_CD));
			workKey.append(tempDB.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PRC_SVC_CD));
			workKey.append(tempDB.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PRC_KMK_CD));
			
			mapPrcKmkCd.put(workKey.toString(), tempDB.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.OUT_PRC_KMK_CD));
			tempDB = db_CH_M_PRC_KMK_CS_CHGE.selectNext();
		}
	}
	
	/**
	 * 料金項目抽出変換情報取得
	 * 
	 * @param skbtCd 業務機能識別コード
	 * @param list 結果保持用リスト
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void getPrcKmkCsChge2(String skbtCd, ArrayList<String> list) throws Exception
	{
		// ＤＢアクセス用のパラメータ定義
		JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();
		
		// 対象キーの設定
		dbList.setValue(super.systemCode);				// システムコード
		dbList.setValue(skbtCd);						// 業務機能識別コード
		dbList.setValue(JACStrConst.CHSHT_CHG_CD_CST);	// 抽出変換コード
		dbList.setValue(super.opeDate);					// バッチ運用日
		
		// 料金項目抽出変換情報取得
		this.executeCH_M_PRC_KMK_CS_CHGE_AC_SELECT_007(dbList.getList().toArray());
		
		// 取得結果をリストに保持
		JBSbatCommonDBInterface dbMap = this.db_CH_M_PRC_KMK_CS_CHGE_2.selectNext();
		while(dbMap != null)
		{
			String dbKmkCd = dbMap.getString(JBSbatCH_T_SEIKY_UCWK.PRC_GRP_CD).concat(
					dbMap.getString(JBSbatCH_T_SEIKY_UCWK.PCRS_CD)).concat(
					dbMap.getString(JBSbatCH_T_SEIKY_UCWK.PRC_SVC_CD)).concat(
					dbMap.getString(JBSbatCH_T_SEIKY_UCWK.PRC_KMK_CD));
			
			list.add(dbKmkCd);
			dbMap = this.db_CH_M_PRC_KMK_CS_CHGE_2.selectNext();
		}
	}

	// ANK-3361-00-00 MOD START
	/**
	 * 出力情報作成
	 * 
	 * @param inMap トラン
	 * @param recPrcKmkCc 料金項目抽出変換
	 * @return JBSbatOutputItem 出力情報
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
//	private JBSbatOutputItem makeOutItem(JBSbatServiceInterfaceMap inMap, JBSbatCommonDBInterface recTgkPrc,
//			String recPrcKmkCc) throws Exception
	private JBSbatOutputItem makeOutItem(JBSbatServiceInterfaceMap inMap, String recPrcKmkCc) throws Exception
	// ANK-3361-00-00 MOD END
	{
		JBSbatOutputItem outputItem = new JBSbatOutputItem();
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		// 料金計算日時点での請求対象の請求契約番号を取得
		String prcSeikyKeiNo = inMap.getString(JBSbatACIFM230.PRC_SEIKY_KEI_NO);
		
		// 取得できなかった場合、通常の請求契約番号を使用する
		if (prcSeikyKeiNo == null || prcSeikyKeiNo.isEmpty())
		{
			prcSeikyKeiNo = inMap.getString(JBSbatACIFM230.SEIKY_KEI_NO);
		}
		
		outMap.setString(JBSbatACIFI016.SEIKY_KEI_NO,
				prcSeikyKeiNo);														// 請求先番号
		outMap.setString(JBSbatACIFI016.SEIKY_YM,
				inMap.getString(JBSbatACIFI016.SEIKY_YM));							// 請求年月
		outMap.setString(JBSbatACIFI016.SEIRI_NO,
				inMap.getString(JBSbatACIFI016.SEIRI_NO)); 							// 整理番号
		outMap.setString(JBSbatACIFI016.WRIB_SVC_KEI_NO,
				inMap.getString(JBSbatACIFI016.WRIB_SVC_KEI_NO));					// 割引サービス契約番号
		outMap.setString(JBSbatACIFI016.WRISVC_TRGT_KEI_NO,
				inMap.getString(JBSbatACIFI016.WRISVC_TRGT_KEI_NO));				// 割引サービス対象契約番号
		outMap.setString(JBSbatACIFI016.SVC_NO,
				inMap.getString(JBSbatACIFI016.SVC_NO));							// サービス番号
		outMap.setString(JBSbatACIFI016.OP_SVKEI_NO,
				inMap.getString(JBSbatACIFI016.OP_SVKEI_NO)); 						// オプションサービス契約番号
		outMap.setString(JBSbatACIFI016.SVC_SKBT_CD,
				inMap.getString(JBSbatACIFI016.SVC_SKBT_CD));						// 料金サービス識別コード
		outMap.setString(JBSbatACIFI016.PRC_GRP_CD,
				inMap.getString(JBSbatACIFI016.PRC_GRP_CD)); 						// 料金グループコード
		outMap.setString(JBSbatACIFI016.PCRS_CD,
				inMap.getString(JBSbatACIFI016.PCRS_CD));							// 料金コースコード
		outMap.setString(JBSbatACIFI016.PRC_SVC_CD,
				inMap.getString(JBSbatACIFI016.PRC_SVC_CD));						// 料金サービスコード
		outMap.setString(JBSbatACIFI016.PRC_KMK_CD,
				recPrcKmkCc);														// 料金項目コード
		// ANK-3361-00-00 MOD START
//		outMap.setString(JBSbatACIFI016.COLLECT_PATTERN_CD,
//				recTgkPrc.getString(JBSbatAC_M_TEGAK_PRC.COLLECT_PATTERN_CD));		// 徴収パターンコード
		outMap.setString(JBSbatACIFI016.COLLECT_PATTERN_CD,
				inMap.getString(JBSbatACIFI016.COLLECT_PATTERN_CD));				// 徴収パターンコード
//		// 入力Ｔ.料金 ＝ 0の場合は定額料金を設定する。
//		BigDecimal zero = new BigDecimal(0);
//		if(zero.compareTo(inMap.getBigDecimal(JBSbatAC_M_TEGAK_PRC.PRC)) == 0)
//		{
//			outMap.setBigDecimal(JBSbatACIFI016.PRC,
//					recTgkPrc.getBigDecimal(JBSbatAC_M_TEGAK_PRC.PRC));					// 料金
//		}
//		else
//		{
//			// 入力Ｔ.料金が ≠ 0の場合は入力Ｔ.料金を設定する。
//			outMap.setBigDecimal(JBSbatACIFI016.PRC,
//					inMap.getBigDecimal(JBSbatAC_M_TEGAK_PRC.PRC));					// 料金
//		}
		outMap.setBigDecimal(JBSbatACIFI016.PRC,
				inMap.getBigDecimal(JBSbatAC_M_TEGAK_PRC.PRC));						// 料金
		// ANK-3361-00-00 MOD END
		outMap.setString(JBSbatACIFI016.USE_STAYMD,
				inMap.getString(JBSbatACIFI016.USE_STAYMD));						// 利用開始日
		outMap.setString(JBSbatACIFI016.USE_ENDYMD,
				inMap.getString(JBSbatACIFI016.USE_ENDYMD));						// 利用終了日
		outMap.setString(JBSbatACIFI016.SVC_STAYMD,
				inMap.getString(JBSbatACIFI016.SVC_STAYMD));						// サービス開始日
		outMap.setString(JBSbatACIFI016.FIRST_CHRG_STAYMD,
				inMap.getString(JBSbatACIFI016.FIRST_CHRG_STAYMD));					// 初回課金開始日
		outMap.setString(JBSbatACIFI016.SVC_DSL_YMD,
				inMap.getString(JBSbatACIFI016.SVC_DSL_YMD));						// サービス解約日
		outMap.setString(JBSbatACIFI016.SVC_DLRE,
				inMap.getString(JBSbatACIFI016.SVC_DLRE));							// サービス解約理由
		outMap.setString(JBSbatACIFI016.SVC_KAIHK_DAY,
				inMap.getString(JBSbatACIFI016.SVC_KAIHK_DAY));						// サービス回復日
		outMap.setBigDecimal(JBSbatACIFI016.USE_DAY_CNT,
				inMap.getBigDecimal(JBSbatACIFI016.USE_DAY_CNT));					// 利用日数
		outMap.setBigDecimal(JBSbatACIFI016.USE_FAIL_DAY_CNT,
				inMap.getBigDecimal(JBSbatACIFI016.USE_FAIL_DAY_CNT));				// 利用不可日数
		outMap.setString(JBSbatACIFI016.AIT_DIV,
				inMap.getString(JBSbatACIFI016.AIT_DIV));							// 相対区分
		outMap.setString(JBSbatACIFI016.SIME_DAY,
				inMap.getString(JBSbatACIFI016.SIME_DAY));							// 締め日
		// ANK-3361-00-00 MOD START
		//		outMap.setString(JBSbatACIFI016.USE_APLY_KH_CD,
//				recTgkPrc.getString(JBSbatAC_M_TEGAK_PRC.USE_FAIL_APLY_WAY_CD));	// 利用不可適用可否
		outMap.setString(JBSbatACIFI016.USE_APLY_KH_CD,
				inMap.getString(JBSbatACIFI016.USE_APLY_KH_CD));					// 利用不可適用可否
		// ANK-3361-00-00 MOD END
		outMap.setString(JBSbatACIFI016.MAE_YUSEN_JUN,
				JACStrConst.MAEUK_SOSAI_YUSEN_JUN_0);								// 前受相殺優先順位
		outMap.setString(JBSbatACIFI016.WRIB_YUSEN_JUN,
				JACStrConst.WRIB_YUSEN_JUN_0);										// 割引優先順位
		outMap.setString(JBSbatACIFI016.UPPL_JUDGE_YUSEN_JUN,		
				JACStrConst.KARA_MOJI); 											// 上限判定優先順位
		outMap.setString(JBSbatACIFI016.WRIB_KKSHI_KH,
				JACStrConst.WRIB_KKS_H); 											// 割引繰越可否
		outMap.setString(JBSbatACIFI016.SVC_DTL_SKBT_NO,
				inMap.getString(JBSbatACIFI016.SVC_DTL_SKBT_NO));					// サービス詳細識別番号
		
		// レコード出力判定フラグの設定
		outMap.setOutFlg(true);
		
		// 出力レコード情報を設定する
		outputItem.addOutMapList(outMap);
		
		
		return(outputItem);
	}
	
	/**
	 * 引数で渡された請求年月、イベントコードを基に、
	 * 料金スケジュール定義を検索し、その結果を返却します。
	 * 
	 * @param sikyYm 請求年月
	 * @param eventCd イベントコード
	 * @return String 取得した請求年月
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String getEventYmd(String sikyYm, String eventCd) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getEventYmd]");
		
		JBSbatCommonDBInterface whereParam = new JBSbatCommonDBInterface();
		
		// 請求年月
		whereParam.setValue(sikyYm);
		// イベントコード
		whereParam.setValue(eventCd);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getEventYmd][whereParam=" + whereParam.getList().toString() + "]");
		
		// SQL実行
		this.executeCH_M_PRC_SCHDL_TEIGI_CH_SELECT_002(whereParam.getList().toArray());
		
		// 検索結果取得
		JBSbatCommonDBInterface dbMap = this.db_CH_M_PRC_SCHDL_TEIGI.selectNext();
		
		// 取得結果なしの場合
		if(null == dbMap)
		{
			// 異常終了
			String[] msgParam = new String[]
			{ JBSbatCH_M_PRC_SCHDL_TEIGI.TABLE_NAME, whereParam.getList().toString() };
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECHB0270CH, msgParam);
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getEventYmd][eventYmd=" + dbMap.getMap().toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getEventYmd]");
		
		// イベント年月日を返却
		return dbMap.getString(JBSbatCH_M_PRC_SCHDL_TEIGI.EVENT_YMD);
	}
}
