/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom  					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCHSeikyAddInfoMake
*	ソースファイル名	：JBSbatCHSeikyAddInfoMake.java
*	作成者				：富士通　
*	作成日				：2011年07月05日
*＜機能概要＞
*　請求登録情報作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者			修正内容
*	v1.00.00	2011/07/05	 富士通			新規作成
*	v3.00		2012/05/28   FJ）永田		【ANK-0024-04-00】
*	v3.01		2012/06/12   FJ）冨井		【ST2-2012-0001119】マッチング処理内容修正
*	v3.02		2012/08/11   FJ）後藤		【ST2-2012-0001479】工事遅延一意制約対応
*	v4.00		2012/09/27   FJ）後藤		【ANK-0546-00-00】更新・削除は抽出変換で絞らないよう修正
*	v4.01		2012/12/01   FJ）佐藤(智)	【TG1-2012-0000217】請求内訳、債権内訳をDELETE-INSERT方式に変更
*	v4.02		2012/12/12   FJ) 井上		【TG1-2012-0000287】性能改善（配列更新など）INSERT方式に変更
*	v4.03		2013/01/10   FJ) 後藤		【TG1-2012-0000287】シーケンス採番方法変更。java内でカウントアップし、加算数をファイル出力する。
*	v4.04		2013/01/31   FJ）佐藤(智)	【ST4-2012-0000377】請求内訳スキーマの請求年月追加（性能改善）
*	v4.05		2013/03/05   FJ）垣内		【ST2-2013-0001301】社内使用識別フラグ決定条件修正
*	v4.06		2013/03/07   FJ) 小柴		【ST2-2013-0001301】社内使用識別フラグの設定内容を再修正
*	v4.07		2013/04/04   FJ) 浜口		【内部管理番号-0000426】債権切り離し対象のデータが含まれる場合、債権取扱いコードを1(他社債権有)で登録
*	v4.08		2013/04/05   FJ) 小柴		【IKK-2013-0000783】文字化け対策のため、エンコード形式の変更
*	v4.09		2013/04/16   FJ) 浜口		【IKK-2013-0000962】マッチングキーから「請求年月」を削除
*	v5.00		2013/07/23   FJ) 後藤		【IT1-2013-0001424】請求内訳情報ファイルに出力する利用開始日・終了日をスケジュール定義から取得する
*	v5.01		2013/07/31	 FJ) 岡田		【IT1-2013-0001496】強制窓口フラグありの際、債権の請求方法を窓口登録とする
*	v5.02		2013/08/02	 FJ) 三浦		【IT1-2013-0001514】請求内訳情報ファイルに出力する利用開始日・終了日を請求内訳置換後情報から取得する。
*	v5.03		2013/08/13	 FJ) 後藤		【IT1-2013-0001583】前受金充当額（請求先単位））を債権内訳ファイルに出力する際の金額の符号を反転
*	v5.04		2013/09/06	 FJ) 小柴		【OM-2013-0001708】債権取扱いコード更新ファイルのファイル出力処理を追加
*	v5.05		2013/10/10	 FJ) 後藤		【OM-2013-0002850】入力ファイル変更。請求債権関連を入力ファイルから取得
*	v6.00		2013/12/26	 FJ) 後藤		【OM-2013-0005152】強制窓口抑止対応
*	v8.00		2013/12/17   FJ) 後藤		【ANK-1794-00-00】L2-MVNO対応（請求書電話番号表示（LC含む））
*	v8.01		2014/01/14   FJ) 伊藤		【IT1-2014-000XXXX】アプリ内のブレイクキーを退避漏れ
*	v9.00		2014/05/28   FJ) 安井		【IT1-2014-0000169】請求内訳番号採番時のキーにサービス詳細識別番号を追加
*	v20.00.00   2015/11/10   FJ) 山裾		【ANK-2565-00-00】「クレジットカード番号預りＩＤ」「仕向先会社コード」を追加
*	v25.00.00	2016/07/04   FJ) 中山		【OM-2016-0001645】シーケンスの桁あふれ対応
*   v37.00.00   2018/04/02   FJ)酒井         ANK-3366-00-00
*	v46.00.00	2019/10/14	 FJ)星野		 ANK-3586-00-00
*	v52.00.00	2020/10/21	 FJ) 三原		【ANK-3838-00-00】窓口払い手数料の顧客負担方式導入
*	v58.00.00	2022/06/07	 FJ) 中原		【ANK-3846-00-00】【クレカ】クリアパス→ペイジェント移行
*	v67.00.00	2023/06/27	 FJ) 原田		【ANK-4401-00-00】インボイス対応
*********************************************************************/
package eo.business.service;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;

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.JBSbatMatchServiceInterface;
import eo.business.common.JCCBatCommon;
import eo.business.common.JCHbatSeikyKaknoBusinessUtil;
import eo.business.util.file.JBSbatCHIFI005;
import eo.business.util.file.JBSbatCHIFM219;
import eo.business.util.table.JBSbatCH_M_PRC_KMK_CS_CHGE;
import eo.business.util.table.JBSbatCH_M_PRC_KMK_OPUT_NM;
import eo.business.util.table.JBSbatCH_M_PRC_SCHDL_TEIGI;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.constant.JZM0171Constant;
import eo.common.util.JPCUtilCommon;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatOutputFileUtil;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatAplConst;
import eo.framework.util.JBSbatBusinessFileUtil;

/**
 * 請求情報登録 <p>
 *<BR>
 * @author 富士通
 */
public class JBSbatCHSeikyAddInfoMake extends JBSbatBusinessService implements JBSbatMatchServiceInterface
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(料金項目抽出変換)*/
	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";

	/** SQL定義キー(CH_SELECT_015)*/
	private static final String CH_M_PRC_KMK_CS_CHGE_CH_SELECT_015 = "CH_SELECT_015";

	/** SQL定義キー(CH_SELECT_002)*/
	private static final String CH_M_PRC_SCHDL_TEIGI_CH_SELECT_002 = "CH_SELECT_002";
	
	/** SQL定義キー(CH_SELECT_017)*/
	private static final String CH_M_PRC_KMK_CS_CHGE_CH_SELECT_017 = "CH_SELECT_017";

	/** テーブルアクセスクラス(料金項目抽出変換)*/
	private JBSbatSQLAccess db_CH_M_PRC_KMK_CS_CHGE = null;

	/** テーブルアクセスクラス(料金スケジュール定義)*/
	private JBSbatSQLAccess db_CH_M_PRC_SCHDL_TEIGI = null;

	/** キーマッチ処理フラグ*/
	private boolean matchProcFlg;

	/** マスタファイル処理フラグ*/
	private boolean mastProcFlg;

	/** トランファイル処理フラグ*/
	private boolean tranProcFlg;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** シーケンス名（請求番号） */
	private static final String SEQ_NAME_SEQ_SEIKY_NO = "SEQ_SEIKY_NO";
	
	/** シーケンス名（債権番号） */
	private static final String SEQ_NAME_SEQ_SAIKEN_NO = "SEQ_SAIKEN_NO";

	/** シーケンス接頭辞（請求番号） */
	private static final String SEQ_PREFIX_SEQ_SEIKY_NO = "";
	
	/** シーケンス接頭辞（債権番号） */
	private static final String SEQ_PREFIX_SEQ_SAIKEN_NO = "";

	/** シーケンス桁数（請求番号） */
	private static final int SEQ_LEN_SEQ_SEIKY_NO = 12;
	
	/** シーケンス桁数（債権番号） */
	private static final int SEQ_LEN_SEQ_SAIKEN_NO = 12;
	
//OM-2016-0001645 MOD START
//	/** 請求番号（処理前（シーケンスから取得）） */
//	private int seqSeikyNoBef = 0;
//	
//	/** 債権番号（処理前（シーケンスから取得）） */
//	private int seqSaikenNoBef = 0;
//	
//	/** 請求番号（シーケンスから取得） */
//	private int seqSeikyNo = 0;
//	
//	/** 債権番号（シーケンスから取得） */
//	private int seqSaikenNo = 0;
	/** 請求番号（処理前（シーケンスから取得）） */
	private long seqSeikyNoBef = 0;
	
	/** 債権番号（処理前（シーケンスから取得）） */
	private long seqSaikenNoBef = 0;
	
	/** 請求番号（シーケンスから取得） */
	private long seqSeikyNo = 0;
	
	/** 債権番号（シーケンスから取得） */
	private long seqSaikenNo = 0;
//OM-2016-0001645 MOD END
	
	/** 待避キー */
	private String shelterKey = null;
	
	/** 料金項目マップ（請求） */
	private Set<String> seikyPrcKmkSet = null;
	
	/** 料金項目マップ（債権） */
	private Set<String> saikenPrcKmkSet = null;
	
	/** 料金項目マップ（前受金充当額（請求先単位）） */
	private Set<String> maeukJtPrcKmkSet = null;
	
	/** 当月 */
	private String togtu = null;
	
	/** 支払期限日 */
	private String payKigenYmd = null;
	
	/** 請求番号 */
	private String seikyNo = null;

	/** 債権番号 */
	private String saikenNo = null;
	
	/** 債権取扱コード */
	private String tmpSaikenToriCd = null;

	/** 出力件数（請求債権関連） */
	private int seikySknKnrnOutCnt = 0;

	/** 出力件数（請求） */
	private int seikyOutCnt = 0;
	
	/** 出力件数（債権） */
	private int saikenOutCnt = 0;
	
	/** 出力件数（請求内訳） */
	private int seikyUcwkOutCnt = 0;
	
	/** 出力件数（債権内訳） */
	private int saikenUcwkOutCnt = 0;
	
	/** 出力件数（債権取扱いコード更新） */
	private int saikenToriCdOutCnt = 0;

	/** 入力Ｍファイル名（請求情報（日次））*/
	private static final String MST_FILE_NM = "請求情報（日次）";
	
	/** 入力Ｔファイル名（請求内訳情報差分）*/
	private static final String TRN_FILE_NM = "請求内訳情報差分";

	/** 出力ファイル名（請求情報ファイル）*/
	private static final String SEIKY_FILE_NM = "請求情報ファイル";
	
	/** 出力ファイル名（債権情報ファイル）*/
	private static final String SAIKEN_FILE_NM = "債権情報ファイル";

	/** 出力ファイル名（請求内訳情報ファイル）*/
	private static final String SEIKY_UCWK_FILE_NM = "請求内訳情報ファイル";
	
	/** 出力ファイル名（債権内訳情報ファイル）*/
	private static final String SAIKEN_UCWK_FILE_NM = "債権内訳情報ファイル";

	/** 出力ファイル名（請求債権関連情報ファイル）*/
	private static final String SEIKY_SKN_KNRN_FILE_NM = "請求債権関連情報ファイル";
	
	/** 出力ファイル名（債権取扱いコード更新ファイル）*/
	private static final String SAIKEN_TORI_UPD_FILE_NM = "債権取扱いコード更新ファイル";

	/** 出力ファイル定義 */
	private static final String 		PRM_OTD 	= "OTD";

	/** システム日時 */
	private String sysTime = null;

	/** 登録処理ID */
	private String trnId = null;

	/** 料金グループコード */
	private String prcGrpCd;
	
	/** 料金コースコード */
	private String pcrsCd;
	
	/** 料金サービスコード */
	private String prcSvcCd;
	
	/** 料金項目コード */
	private String prcKmkCd;
	
	/** 請求債権関連情報ファイル */
	private JBSbatBusinessFileUtil seikySaikenFile = null;
	
	/** 債権情報ファイル */
	private JBSbatBusinessFileUtil saikenFile = null;
	
	/** 債権内訳情報ファイル */
	private JBSbatBusinessFileUtil saikenUcwkFile = null;
	
	/** 請求情報ファイル */
	private JBSbatBusinessFileUtil seikyFile = null;
	
	/** 請求内訳情報ファイル */
	private JBSbatBusinessFileUtil seikyUcwkFile = null;
	
	/** 請求シーケンス更新用ファイル */
	private JBSbatBusinessFileUtil seikySeqFile = null;
	
	/** 債権シーケンス更新用ファイル */
	private JBSbatBusinessFileUtil saikenSeqFile = null;
	
	/** 債権取扱いコード更新ファイル */
	private JBSbatBusinessFileUtil saikenToriCdUpdFile = null;
	
	/** フリー項目 */
	private String[] freeItems = null;
	
	/** 債権切り離し対象の料金項目マップ*/
	private HashSet<String> sknKrhnsMap = null;
	
	/** ヘッダ生成フラグ*/
	private Boolean hdCrFlg = false;
	
	/** 退避債権切り離し対象フラグ */
	private Boolean sknKiFlg = false;
	
	/** 料金スケジュール定義アクセス部品 */
	private JACbatSchdlUtil schdlUtil = null;
	
	/** 請求内訳番号 */
	private int seikyUcwkNo = 1;
	
	/** 退避．請求内訳番号採番キー */
	private String bkSeikyUcwkKey = null;
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		
		// DBアクセスクラスを生成します
		db_CH_M_PRC_KMK_CS_CHGE = 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 + "]");
		
		// 業務機能識別コード取得
		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		String seikySkbtCd 		= paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_WKS_SIKYAD_SIKYUW);
		String saikenSkbtCd 	= paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_WKS_SIKYAD_SKNUW);
		String maeukJtSiky 		= paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_WKS_MAEUK_JT_SIKY);
		paramUtil.close();
		
		// 請求内訳格納料金項目取得
		seikyPrcKmkSet = selectPrcKmkSet(seikySkbtCd);
		
		// 債権内訳格納料金項目取得
		saikenPrcKmkSet = selectPrcKmkSet(saikenSkbtCd);
		
		// 前受金充当額（請求先単位）料金項目取得
		maeukJtPrcKmkSet = selectPrcKmkSet(maeukJtSiky);
		
		// 請求年月取得
		JCHbatSeikyKaknoBusinessUtil seikyBusinessUtil = new JCHbatSeikyKaknoBusinessUtil(super.commonItem);
		this.togtu = seikyBusinessUtil.getSeikyYm(super.opeDate);
		seikyBusinessUtil.close();
		
		// 支払期限日取得
		payKigenYmd = selectPayKigenYmd();
		
		// システム日時
		this.sysTime = JCCBatCommon.getSysDateTimeStamp();
		
		// 登録処理ID
		this.trnId = JCCBatCommon.getTrnId();
		
		// シーケンスから請求番号、債権番号を取得
//OM-2016-0001645 MOD START
//		seqSeikyNoBef = Integer.parseInt(JCCBatCommon.getFormatedNextSeq(super.commonItem, SEQ_NAME_SEQ_SEIKY_NO, SEQ_PREFIX_SEQ_SEIKY_NO, SEQ_LEN_SEQ_SEIKY_NO));
//		seqSaikenNoBef = Integer.parseInt(JCCBatCommon.getFormatedNextSeq(super.commonItem, SEQ_NAME_SEQ_SAIKEN_NO, SEQ_PREFIX_SEQ_SAIKEN_NO, SEQ_LEN_SEQ_SAIKEN_NO));
		seqSeikyNoBef = Long.parseLong(JCCBatCommon.getFormatedNextSeq(super.commonItem, SEQ_NAME_SEQ_SEIKY_NO, SEQ_PREFIX_SEQ_SEIKY_NO, SEQ_LEN_SEQ_SEIKY_NO));
		seqSaikenNoBef = Long.parseLong(JCCBatCommon.getFormatedNextSeq(super.commonItem, SEQ_NAME_SEQ_SAIKEN_NO, SEQ_PREFIX_SEQ_SAIKEN_NO, SEQ_LEN_SEQ_SAIKEN_NO));
//OM-2016-0001645 MOD END
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][シーケンス番号（請求）" + seqSeikyNoBef + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][シーケンス番号（債権）" + seqSaikenNoBef + "]");
		
		seqSeikyNo = seqSeikyNoBef;
		seqSaikenNo = seqSaikenNoBef;
		
		// FREEITEMの取得
		this.freeItems = super.freeItem.split(JACStrConst.SEMI_COLON);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][freeItems=" + freeItems[0] + ", " + freeItems[1] + ", " + freeItems[2] + ", " + freeItems[3] + ", " + freeItems[4] + ", " + freeItems[5] + freeItems[6] + ", " + freeItems[7] + freeItems[8] + "]");
		
		// ファイル生成します。
		// 債権情報ファイル
		this.saikenFile = createFile(freeItems[1], freeItems[0]);
		
		// 債権内訳情報ファイル
		this.saikenUcwkFile = createFile(freeItems[3], freeItems[2]);
		
		// 請求債権関連情報ファイル
		this.seikySaikenFile = createFile(freeItems[5], freeItems[4]);
		
		// 請求情報ファイル
		this.seikyFile = createFile(freeItems[7], freeItems[6]);
		
		// 請求内訳情報ファイル
		this.seikyUcwkFile = createFile(freeItems[9], freeItems[8]);
		
		// 請求シーケンス更新用ファイル
		this.seikySeqFile = createFile(freeItems[11], freeItems[10]);
		
		// 債権シーケンス更新用ファイル
		this.saikenSeqFile = createFile(freeItems[12], freeItems[10]);
		
		// 債権更新用ファイル
		this.saikenToriCdUpdFile = createFile(freeItems[14], freeItems[13]);
		
		// 債権切り離し対象の料金項目を抽出
		makeSknKrhnsMap();
		
		// 料金スケジュール定義アクセス部品初期処理
		schdlUtil 		= new JACbatSchdlUtil(commonItem);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 支払期限日を取得します。
	 * @return 支払期限日
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private String selectPayKigenYmd() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectPayKigenYmd]");

		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
	
		// 料金スケジュール定義．料金スケジュール管理年月
		paramList.setValue(this.togtu);
		// 料金スケジュール定義．イベントコード
		paramList.setValue(JACStrConst.EVENT_CD_KOUZA_PAY_KIGEN_YMD);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectPayKigenYmd][paramList=" + paramList.getList().toString() + "]");

		// SQL実行
		executeCH_M_PRC_SCHDL_TEIGI_CH_SELECT_002(paramList.getList().toArray());
		
		// 取得結果判定
		String eventYmd = null;
		JBSbatCommonDBInterface prcSchdlTeigi = db_CH_M_PRC_SCHDL_TEIGI.selectNext();
		if (prcSchdlTeigi != null)
		{
			// イベント日時を取得
			eventYmd = prcSchdlTeigi.getString(JBSbatCH_M_PRC_SCHDL_TEIGI.EVENT_YMD);
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectPayKigenYmd][eventYmd=" + eventYmd + "]");
		}
		else
		{
			// マスタ未存在エラー
			String[] msgParam = new String[]
			{ JBSbatCH_M_PRC_SCHDL_TEIGI.TABLE_NAME, paramList.getList().toString() };
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECHB0270CH, msgParam);
		}

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectPayKigenYmd]");
		
		return eventYmd;
	}

	/**
	 * 料金項目情報を取得します。
	 * ※請求内訳格納料金項目取得または債権内訳格納料金項目取得に使用します。
	 * 
	 * @param workKinoSkbtCd 業務機能識別コード
	 * @return 料金項目情報マップ
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private Set<String> selectPrcKmkSet(String workKinoSkbtCd) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectPrcKmkMap][workKinoSkbtCd=" + workKinoSkbtCd + "]");

		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
	
		// 料金項目抽出変換．システムコード
		paramList.setValue(super.systemCode);
		// 料金項目抽出変換．業務機能識別コード
		paramList.setValue(workKinoSkbtCd);
		// 料金項目抽出変換．抽出変換コード
		paramList.setValue(JACStrConst.CHSHT_CHG_CD_CST);
		// 料金項目抽出変換．適用開始年月日
		paramList.setValue(super.opeDate);
		// 料金項目抽出変換．適用終了年月日
		paramList.setValue(super.opeDate);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectPrcKmkMap][paramList=" + paramList.getList().toString() + "]");

		// SQL実行
		executeCH_M_PRC_KMK_CS_CHGE_CH_SELECT_015(paramList.getList().toArray());
		JBSbatCommonDBInterface prcKmkCsChge = db_CH_M_PRC_KMK_CS_CHGE.selectNext();
		
		// 結果取得
		Set<String> prcKmkSet = new HashSet<String>();
		// キーセット
		StringBuffer bufKey = new StringBuffer();
		while (prcKmkCsChge != null)
		{
			bufKey.setLength(0);
			// 料金グループコード
			bufKey.append(prcKmkCsChge.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PRC_GRP_CD).trim()).append(JACStrConst.COMMA);
			// 料金コースコード
			bufKey.append(prcKmkCsChge.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PCRS_CD).trim()).append(JACStrConst.COMMA);
			// 料金サービスコード
			bufKey.append(prcKmkCsChge.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PRC_SVC_CD).trim()).append(JACStrConst.COMMA);
			// 料金項目コード
			bufKey.append(prcKmkCsChge.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PRC_KMK_CD).trim());

			// マップに保持
			prcKmkSet.add(bufKey.toString());
			
			prcKmkCsChge = db_CH_M_PRC_KMK_CS_CHGE.selectNext();
		}

		// データ件数をチェック
		if (prcKmkSet.size() <= 0)
		{
			// 該当データなし
			String[] msgParam = new String[]
			{ JBSbatCH_M_PRC_KMK_CS_CHGE.TABLE_NAME, paramList.getList().toString() };
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECHB0270CH, msgParam);
		}

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectPrcKmkMap]");
		
		return prcKmkSet;
	}
	
	/**
	 * 債権切り離し対象の料金項目マップを作成します。
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void makeSknKrhnsMap() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeSknKrhnsMap]");
		
		JBSbatCommonDBInterface whereParam = new JBSbatCommonDBInterface();
		
		whereParam.setValue(JZM0171Constant.CD01332); 				// コード種別コード（買取不可債権）
		whereParam.setValue(super.opeDate); 						// コード適用開始年月日
		whereParam.setValue(super.opeDate); 						// コード適用終了年月日
		whereParam.setValue(super.systemCode); 						// システムコード（"CH"（請求収納））
		whereParam.setValue(JACStrConst.CHSHT_CHG_CD_CST); 			// 抽出変換コード（"1"（抽出のみ））
		whereParam.setValue(super.opeDate); 						// 料金項目抽出変換適用開始年月日（バッチ運用日）
		whereParam.setValue(super.opeDate); 	 					// 料金項目抽出変換適用終了年月日（バッチ運用日）
		whereParam.setValue(super.opeDate); 						// 予約適用年月日（バッチ運用日）
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeSknKrhnsMap][whereParam=" + whereParam.getList().toString() + "]");
		
		// 料金項目抽出変換スキーマを検索します。
		executeCH_M_PRC_KMK_CS_CHGE_CH_SELECT_017(whereParam.getList().toArray());
		
		JBSbatCommonDBInterface dbMap = db_CH_M_PRC_KMK_CS_CHGE.selectNext();
		this.sknKrhnsMap = new HashSet<String>();

		String mapKey = null;
		
		// 取得できた場合
		if(null != dbMap)
		{
			// 取得件数分、処理を継続する
			while(null != dbMap)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeSknKrhnsMap][dbMap=" + dbMap.getMap().toString() + "]");
				
				// マップに設定するキーを作成(KEY:料金グループコード＋料金コースコード＋料金サービスコード＋料金項目コード)
				mapKey = makeStr(dbMap.getString(JBSbatCH_M_PRC_KMK_OPUT_NM.PRC_GRP_CD),
								dbMap.getString(JBSbatCH_M_PRC_KMK_OPUT_NM.PCRS_CD), 
								dbMap.getString(JBSbatCH_M_PRC_KMK_OPUT_NM.PRC_SVC_CD), 
								dbMap.getString(JBSbatCH_M_PRC_KMK_OPUT_NM.PRC_KMK_CD));
				
				// 値をマップに設定
				this.sknKrhnsMap.add(mapKey);
				
				dbMap = db_CH_M_PRC_KMK_CS_CHGE.selectNext();
			}
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeSknKrhnsMap]");
	}
	
	/**
	 * 文字を連結します
	 * @param string　文字
	 * @return strBuf　連結した文字列
	 */
	private String makeStr(String ...string)
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeStr]");
		
		StringBuffer strBuf = new StringBuffer();
		for(String str:string){
			strBuf.append(str);
		}
		assert strBuf != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeStr][strBuf = " + strBuf.toString() + "]") : true;
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeStr]");
		
		return strBuf.toString();
	}
	
	/**
	 * 主処理
	 * @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, "[S][execute]");
		assert mastMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][mastMap=" + mastMap.getMap().toString() + "]") : true;
		assert tranMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][tranMap=" + tranMap.getMap().toString() + "]") : true;
		
		String[] matchingKey = null;
		
		// 入力Ｔのみ存在する
		if (mastMap == null && tranMap != null)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力Ｔのみ存在する]");
			
			// システムエラーとする
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECHB0340CH,
					new String[] {TRN_FILE_NM, MST_FILE_NM});
		}

		// 入力Ｍのみ存在する
		if (mastMap != null && tranMap == null)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力Ｍのみ存在する]");
			// マスタブレイク時に内訳に紐づくヘッダファイルを出力
			if (hdCrFlg)
			{
				// 請求債権関連情報ファイル出力
				outputSeikySaiken();
				// 請求情報ファイル出力
				outputSeiky(mastMap);
				// 債権情報ファイル出力
				outputSaiken(mastMap);
				
				// ヘッダ生成フラグ初期化
				hdCrFlg = false;
			}
			else
			{
				// 債権取扱いコードに差異がある場合、債権更新ファイル出力を行う
				String sknToriCd = getSknToriCd();
				
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][債権．債権取扱いコード=" + tmpSaikenToriCd + "][出力時債権取扱いコード=" + sknToriCd + "]");
				
				if (tmpSaikenToriCd != null && !sknToriCd.equals(tmpSaikenToriCd))
				{
					outputSaikenToriUpd(mastMap, sknToriCd);
				}
			}
			// 債権切り離し対象チェックフラグ初期化
			this.sknKiFlg = false;

			this.setMastProcFlg(true);
			
		}
		// 入力Ｍ、入力Ｔともに存在する
		else
		{
			// マッチングキー取得
			matchingKey = getMatchingKey(mastMap, tranMap);
			
			// マッチング処理
			// 入力Ｍ＝入力Ｔ（マッチ）
			if (matchingKey[0].compareTo(matchingKey[1]) == 0)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力Ｍ、入力Ｔともに存在する][入力Ｍ＝入力Ｔ（マッチ）]");
				
				this.setMatchProcFlg(true);

				// 料金グループコード
				prcGrpCd = tranMap.getString(JBSbatCHIFI005.PRC_GRP_CD);
				// 料金コースコード
				pcrsCd = tranMap.getString(JBSbatCHIFI005.PCRS_CD);
				// 料金サービスコード
				prcSvcCd = tranMap.getString(JBSbatCHIFI005.PRC_SVC_CD);
				// 料金項目コード
				prcKmkCd = tranMap.getString(JBSbatCHIFI005.PRC_KMK_CD);
				
				// 債権切り離し対象チェック
				if(!this.sknKiFlg)
				{
					String key = makeStr(prcGrpCd, pcrsCd, prcSvcCd, prcKmkCd);
					chkSknKi(key);
				}
				// 請求番号、債権番号を取得
				outputSeikyInfo(matchingKey[0], mastMap, tranMap);
				
				// 請求内訳情報ファイル出力
				outputSeikyUcwkInfo(tranMap, outputInItem);
				
				// 債権内訳情報ファイル出力
				outputSaikenUcwkInfo(tranMap, outputInItem);

			}
			// 入力Ｍ＜入力Ｔ
			else if (matchingKey[0].compareTo(matchingKey[1]) < 0)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力Ｍ、入力Ｔともに存在する][入力Ｍ＜入力Ｔ]");
				// マスタブレイク時に内訳に紐づくヘッダファイルを出力
				if (hdCrFlg)
				{
					// 請求債権関連情報ファイル出力
					outputSeikySaiken();
					// 請求情報ファイル出力
					outputSeiky(mastMap);
					// 債権情報ファイル出力
					outputSaiken(mastMap);
					
					// ヘッダ生成フラグ初期化
					hdCrFlg = false;
				}
				else
				{
					
					// 債権取扱いコードに差異がある場合、債権更新ファイル出力を行う
					String sknToriCd = getSknToriCd();
					
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][債権．債権取扱いコード=" + tmpSaikenToriCd + "][出力時債権取扱いコード=" + sknToriCd + "]");
					
					if (tmpSaikenToriCd != null && !sknToriCd.equals(tmpSaikenToriCd))
					{
						outputSaikenToriUpd(mastMap, sknToriCd);
					}
				}
				// 債権切り離し対象チェックフラグ初期化
				this.sknKiFlg = false;
				
				this.setMastProcFlg(true);
			}
			// 入力Ｍ＞入力Ｔ
			else
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力Ｍ、入力Ｔともに存在する][入力Ｍ＞入力Ｔ]");
				
				// システムエラーとする
				throw new JBSbatBusinessException(JPCBatchMessageConstant.ECHB0340CH,
						new String[] {TRN_FILE_NM, MST_FILE_NM});
			}
		}
		
		assert outputInItem != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute][outputInItem=" + outputInItem.getOutMapList().toString() + "]") : true;
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		
		return outputInItem;
		
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * マッチングキーリストを取得します。
	 * @param mastMap 請求情報
	 * @param tranMap 請求内訳情報差分
	 * @return String[] 配列[0]:マッチングキー(マスタ)、配列[1]:マッチングキー(トラン) 
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private String[] getMatchingKey(JBSbatServiceInterfaceMap mastMap, JBSbatServiceInterfaceMap tranMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getMatchingKey]");
		
		// マッチングキーリスト(配列[0]:マッチングキー(マスタ) 、配列[1]:マッチングキー(トラン) 
		String[] macthKeyList = new String[2];
		
		if (mastMap != null)
		{
			// 請求契約番号
			macthKeyList[0] = mastMap.getString(JBSbatCHIFM219.SEIKY_KEI_NO);
		}
		
		if (tranMap != null)
		{
			// 請求契約番号
			macthKeyList[1] = tranMap.getString(JBSbatCHIFI005.SEIKY_KEI_NO);
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getMatchingKey][mastKey=" + macthKeyList[0] + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getMatchingKey][tranKey=" + macthKeyList[1] + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getMatchingKey]");
		
		return macthKeyList;
	}

	/**
	 *	請求番号、債権番号を取得、請求債権関連情報ファイルを出力します。
	 *	
	 * @param mastKey マッチングキー(マスタ)
	 * @param mastMap 請求情報
	 * @param tranMap 請求内訳情報差分
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void outputSeikyInfo(String mastKey, JBSbatServiceInterfaceMap mastMap, JBSbatServiceInterfaceMap tranMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][outputSeikyInfo]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][outputSeikyInfo][shelterKey=" + shelterKey + "]");
		
		// キー情報比較
		// 退避時の「キー情報」がNULL 又は 退避キーと現在の「キー情報」が一致しない場合
		if (shelterKey == null || !shelterKey.equals(mastKey))
		{
			shelterKey = mastKey;
		}
		// 退避キーと現在の「キー情報」が一致する場合
		else
		{
			return;
		}
		
		// 請求債権関連情報から請求番号、債権番号、債権取扱コードを取得
		seikyNo = mastMap.getString(JBSbatCHIFM219.SEIKY_NO);
		saikenNo = mastMap.getString(JBSbatCHIFM219.SAIKEN_NO);
		tmpSaikenToriCd = mastMap.getString(JBSbatCHIFM219.SAIKEN_TORIATSU_CD);
			
		// レコードが存在しない場合
		if(seikyNo.equals(JACStrConst.KARA_MOJI))
		{
			// シーケンスから請求番号、債権番号を取得
			seikyNo =  JPCUtilCommon.fillZero(String.valueOf(seqSeikyNo), SEQ_LEN_SEQ_SEIKY_NO, false);
			saikenNo = JPCUtilCommon.fillZero(String.valueOf(seqSaikenNo), SEQ_LEN_SEQ_SEIKY_NO, false);

			seqSeikyNo = getNextSeq(seqSeikyNo, 1);
			seqSaikenNo = getNextSeq(seqSaikenNo, 1);

			// 債権取扱コードにnullをセット
			tmpSaikenToriCd = null;

			// ヘッダファイル出力フラグ
			this.hdCrFlg = true;
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][resistSeikyInfo]");
	}

	/**
	 * 料金項目マップに対象の料金項目が存在するか判定します。
	 * 
	 * @param prcKmkSet 料金項目マップ
	 * @param tranMap 請求内訳情報差分
	 * @return true（存在する） or false（存在しない）
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private boolean existsPrcKmk(Set<String> prcKmkSet, JBSbatServiceInterfaceMap tranMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][existsPrcKmk]");
		
		// 料金項目マップ検索用の文字列を作成
		StringBuffer bufKey = new StringBuffer();

		// 料金グループコード
		bufKey.append(tranMap.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PRC_GRP_CD).trim()).append(JACStrConst.COMMA);
		// 料金コースコード
		bufKey.append(tranMap.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PCRS_CD).trim()).append(JACStrConst.COMMA);
		// 料金サービスコード
		bufKey.append(tranMap.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PRC_SVC_CD).trim()).append(JACStrConst.COMMA);
		// 料金項目コード
		bufKey.append(tranMap.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PRC_KMK_CD).trim());

		// 料金項目抽出マップに対象の料金項目が存在するか判定
		boolean hasPrcKmk = false;
		if (prcKmkSet.contains(bufKey.toString()))
		{
			hasPrcKmk = true;
		}

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][existsPrcKmk][hasPrcKmk=" + hasPrcKmk + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][existsPrcKmk]");
		
		return hasPrcKmk;
	}

//OM-2016-0001645 MOD START
//	/**
//	 * シーケンスを引数分加算します。
//	 * 
//	 * @param seqNo 加算対象シーケンス番号
//	 * @param num 加算数
//	 * @return int 加算済シーケンス番号
//	 * @throws Exception
//	 */
//	private int getNextSeq(int seqNo, int num) throws Exception
//	{
//		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getNextSeq]");
//		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getNextSeq][" + seqNo + " ＋ " + num + " ＝ " + seqNo + num + "]");
//		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getNextSeq]");
//		
//		//引数分加算する
//		return seqNo + num;
//	}
	
	/**
	 * シーケンスを引数分加算します。
	 * 
	 * @param seqNo 加算対象シーケンス番号
	 * @param num 加算数
	 * @return 加算済シーケンス番号
	 * @throws Exception
	 */
	private long getNextSeq(long seqNo, long num) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getNextSeq]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getNextSeq][" + seqNo + " ＋ " + num + " ＝ " + seqNo + num + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getNextSeq]");
		
		//引数分加算する
		return seqNo + num;
	}
//OM-2016-0001645 MOD END
	
	/**
	 * 請求内訳情報ファイルの出力を行います。
	 * 
	 * @param tranMap 請求内訳情報差分
	 * @param outputInItem 入力情報
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void outputSeikyUcwkInfo(JBSbatServiceInterfaceMap tranMap, JBSbatOutputItem outputInItem) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][outputSeikyUcwkInfo]");
		
		// 料金項目マスタに対象料金項目が存在しない場合、処理終了
		if (!existsPrcKmk(seikyPrcKmkSet, tranMap))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][outputSeikyUcwkInfo]");
			return;
		}
		
		// 整理番号
		String seiriNo = tranMap.getString(JBSbatCHIFI005.SEIRI_NO);
		// サービス番号
		String svcNo = tranMap.getString(JBSbatCHIFI005.SVC_NO);
		// 請求年月
		String gsanSeikyYm = tranMap.getString(JBSbatCHIFI005.SEIKY_YM);
//IT1-2014-0000169 MOD STA 安井
		// サービス詳細識別番号
		String svcDtlSkbtNo = tranMap.getString(JBSbatCHIFI005.SVC_DTL_SKBT_NO);
		
		// 請求内訳番号採番
//		String key = makeStr(seikyNo, seiriNo, svcNo, prcGrpCd, pcrsCd, prcSvcCd, prcKmkCd, gsanSeikyYm);
		String key = makeStr(seikyNo, seiriNo, svcNo, prcGrpCd, pcrsCd, prcSvcCd, prcKmkCd, gsanSeikyYm, svcDtlSkbtNo);
//IT1-2014-0000169 MOD END 安井
		if(key.equals(bkSeikyUcwkKey))
		{
			seikyUcwkNo++;
		}
		else
		{
			seikyUcwkNo = 1;
			bkSeikyUcwkKey = key;
		}
		
		ArrayList<Object> seikyUcwInfoList = new ArrayList<Object>();
		
		// 請求番号
		seikyUcwInfoList.add(seikyNo);
		// 請求契約番号
		seikyUcwInfoList.add(tranMap.getString(JBSbatCHIFI005.SEIKY_KEI_NO));
		// 請求年月
		seikyUcwInfoList.add(this.togtu);
		// 整理番号
		seikyUcwInfoList.add(seiriNo);
		// サービス契約番号
		seikyUcwInfoList.add(svcNo);
		// 料金グループコード
		seikyUcwInfoList.add(prcGrpCd);
		// 料金コースコード
		seikyUcwInfoList.add(pcrsCd);
		// 料金サービスコード
		seikyUcwInfoList.add(prcSvcCd);
		// 料金項目コード
		seikyUcwInfoList.add(prcKmkCd);
		// 合算請求年月
		seikyUcwInfoList.add(gsanSeikyYm);
		// 利用開始年月日
		seikyUcwInfoList.add(tranMap.getString(JBSbatCHIFI005.USE_STA_YMD));
		// 利用終了年月日
		seikyUcwInfoList.add(tranMap.getString(JBSbatCHIFI005.USE_END_YMD));
		// 金額
		seikyUcwInfoList.add(tranMap.getBigDecimal(JBSbatCHIFI005.AMNT));
		// 料金訂正登録フラグ
		seikyUcwInfoList.add(JACStrConst.PRC_TEISE_ADD_FLG_OFF);
		// 登録年月日時分秒
		seikyUcwInfoList.add(this.sysTime);
		// 更新年月日時分秒
		seikyUcwInfoList.add(this.sysTime);
		// 登録運用年月日
		seikyUcwInfoList.add(super.opeDate);
		// 登録処理ID
		seikyUcwInfoList.add(this.trnId);
		// 更新運用年月日
		seikyUcwInfoList.add(super.opeDate);
		// 更新処理ID
		seikyUcwInfoList.add(this.trnId);
		// サービス詳細識別番号
		seikyUcwInfoList.add(tranMap.getString(JBSbatCHIFI005.SVC_DTL_SKBT_NO));
		// 請求内訳番号
		seikyUcwInfoList.add(seikyUcwkNo);
		
		// 請求内訳情報ファイル出力
		JCCBatCommon.printBusinessFileUtil(this.seikyUcwkFile, seikyUcwInfoList);
		
		seikyUcwkOutCnt++;
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][outputSeikyUcwkInfo]");
		
	}
	
	/**
	 * 債権内訳情報ファイルの出力を行います。
	 * 
	 * @param tranMap 請求内訳情報差分
	 * @param outputInItem 入力情報
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void outputSaikenUcwkInfo(JBSbatServiceInterfaceMap tranMap, JBSbatOutputItem outputInItem) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][outputSaikenUcwkInfo]");
		
		// 料金項目マスタに対象料金項目が存在しない場合、処理終了
		if (!existsPrcKmk(saikenPrcKmkSet, tranMap))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][outputSaikenUcwkInfo]");
			return;
		}
		
		ArrayList<Object> saikenUcwInfoList = new ArrayList<Object>();
		
		BigDecimal amnt = null;
		// 前受金充当額（請求先単位））に存在した場合、金額の符号を反転させる
		if (!existsPrcKmk(maeukJtPrcKmkSet, tranMap))
		{
			 amnt = tranMap.getBigDecimal(JBSbatCHIFI005.AMNT);
		}
		else
		{
			 amnt = tranMap.getBigDecimal(JBSbatCHIFI005.AMNT).negate();
		}
		
		// 債権番号
		saikenUcwInfoList.add(saikenNo);
		// 料金グループコード
		saikenUcwInfoList.add(prcGrpCd);
		// 料金コースコード
		saikenUcwInfoList.add(pcrsCd);
		// 料金サービスコード
		saikenUcwInfoList.add(prcSvcCd);
		// 料金項目コード
		saikenUcwInfoList.add(prcKmkCd);
		// 金額
		saikenUcwInfoList.add(amnt);
		// 債権年月
		saikenUcwInfoList.add(this.togtu);
		// 登録年月日時分秒
		saikenUcwInfoList.add(this.sysTime);
		// 更新年月日時分秒
		saikenUcwInfoList.add(this.sysTime);
		// 登録運用年月日
		saikenUcwInfoList.add(super.opeDate);
		// 登録処理ID
		saikenUcwInfoList.add(this.trnId);
		// 更新運用年月日
		saikenUcwInfoList.add(super.opeDate);
		// 更新処理ID
		saikenUcwInfoList.add(this.trnId);
		
		// 債権内訳情報ファイル出力
		JCCBatCommon.printBusinessFileUtil(this.saikenUcwkFile, saikenUcwInfoList);
		
		saikenUcwkOutCnt++;
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][outputSaikenUcwkInfo]");
		
	}

	/**
	 * 請求情報ファイルの出力を行ないます。
	 * 
	 * @param mastMap 請求情報
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void outputSeiky(JBSbatServiceInterfaceMap mastMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][outputSeiky]");
		
		ArrayList<Object> seikyInfoList = new ArrayList<Object>();

		// 請求番号
		seikyInfoList.add(seikyNo);
		// 請求ステータス
		seikyInfoList.add(JACStrConst.SEIKY_STAT_KR_CALC);
		// 請求契約番号
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.SEIKY_KEI_NO));
		// 督促番号
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.TOKUSOKU_NO));
		// 請求年月
		seikyInfoList.add(this.togtu);
		// 請求確定年月日
		seikyInfoList.add("");
		// 請求種別コード
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.SEIKY_SBT_CD));
		// 契約請求方法コード
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.PAY_WAY_CD));
		// 請求方法コード
		seikyInfoList.add(mastMap.getString(JBSbatCHIFM219.SEIKY_WAY_CD));
		// 強制窓口フラグ
		seikyInfoList.add(mastMap.getString(JBSbatCHIFM219.KYOSEI_MADOGUCHI_FLG));
		// 請求依頼年月日
		seikyInfoList.add("");
		// 同封コード
		seikyInfoList.add("");
		// 請求書発行シーケンス
		seikyInfoList.add(JACStrConst.SKS_HAKKO_SEQ_INIT);
		// カスタマーバーコード
		seikyInfoList.add("");
		// インフォメーションパターンコード
		seikyInfoList.add("");
		// 請求同封物パターンコード
		seikyInfoList.add("");
		// 送付先住所コード
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.SOHUS_AD_CD));
		// 送付先郵便番号
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.SOHUS_PCD));
		// 送付先都道府県名
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.SOHUS_STATE_NM));
		// 送付先市区町村名
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.SOHUS_CITY_NM));
		// 送付先大字通称名
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.SOHUS_OAZTSU_NM));
		// 送付先字丁目名
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.SOHUS_AZCHO_NM));
		// 送付先住所番地号
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.SOHUS_BNCHIGO));
		// 送付先住所補記・建物名
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.SOHUS_ADRTTM));
		// 送付先住所補記・部屋番号
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.SOHUS_ADRRM));
		// 送付先電話番号
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.SOHUS_TELNO));
		// 送付先名
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.SOHUS_NM));
		// 送付先部課名
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.SOHUS_BKM));
		// 送付先担当者名
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.SOHUS_TNTSHA_NM));
		// 送付先法人格種別コード
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.SHS_HOJIN_SBT_CD));
		// 送付先法人格前後指定コード
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.SHS_HOJIN_ZENGO_SHITEI_CD));
		// 送付先カナ名
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.SHS_KANA));
		// 送付先メールアドレス
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.SOHUS_MLAD));
		// 請求契約配下サービス契約状態コード
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.SKHK_SVKEI_STAT_CD));
		// 請求契約配下サービス契約解約理由識別コード
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.SKHK_SVKEI_DLRE_SKBT_CD));
		// 請求書発行要否
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.SEIKYUS_HAKKO_YH));
		// 次回請求方法コード
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.NEXT_SEIKY_WAY_DIV));
		// 領収額出力有無
		seikyInfoList.add(JACStrConst.RECEIPT_AMNT_OUTPUT_UM_NON);
		// 支払期限年月日
		seikyInfoList.add(payKigenYmd);
		// 請求書引抜フラグ
		seikyInfoList.add("");
		// 請求書発行対象フラグ
		seikyInfoList.add(JACStrConst.SKS_HAK_TG_FLG_TG_GAI);
		// 請求書発行年月日
		seikyInfoList.add("");
		// 請求金額調整年月日
		seikyInfoList.add("");
		// 請求金額変更年月日
		seikyInfoList.add("");
		// 請求取消年月日
		seikyInfoList.add("");
		// 金融機関コード
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.BANK_CD));
		// 金融機関支店コード
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.BANK_SHITEN_CD));
		// 預金種目コード
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.YOKIN_SHUMOKU_CD));
		// 口座番号
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.KOZA_NO));
		// 新規コード
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.NEW_CD));
		// 通帳記号
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.TSUCHO_SYMBOL));
		// 通帳番号
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.TSUCHO_NO));
		// 口座名義人カナ名
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.KOZA_MEIGIN_KANA));
		// 口座振替結果返却年月日
		seikyInfoList.add("");
		// 口座振替結果コード
		seikyInfoList.add("");
		// フロアリミット超過フラグ
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.FLORLMT_ORVER_FLG));
		// クレジット会社コード
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.CRECARD_COMP_CD));
		// クレジットカード名義カナ名
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.CRECARD_NM_KANA));
		// クレジットカード名義（ローマ字）
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.CRECARD_NM_ROMAJI));
		// オーソリ結果フラグ
		seikyInfoList.add("");
		// 加盟店番号（１５桁）
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.MEMBSTR_NO_15));
		// クレジットカード番号
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.CRECARD_NO));
		// クレジットカード有効期限
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.CRECARD_YK_KIGEN));
		// クレジット交換コード
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.CREDIT_KOKAN_CD));
		// 取引年月日
		seikyInfoList.add("");
		// 売上オーソリ実施年月日時分秒
		seikyInfoList.add("");
		// オーソリ承認番号
		seikyInfoList.add("");
		// 取引識別番号
		seikyInfoList.add("");
		// 売上伝票番号
		seikyInfoList.add("");
		// 社内使用識別フラグ
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.USE_KEISHA_DIV));
		// EANバーコード
		seikyInfoList.add("");
		// EANメーカーコード
		seikyInfoList.add("");
		// EAN取扱期限年月日
		seikyInfoList.add("");
		// OCRバーコード
		seikyInfoList.add("");
		// 登録年月日時分秒
		seikyInfoList.add(this.sysTime);
		// 更新年月日時分秒
		seikyInfoList.add(this.sysTime);
		// 登録運用年月日
		seikyInfoList.add(super.opeDate);
		// 登録処理ID
		seikyInfoList.add(this.trnId);
		// 更新運用年月日
		seikyInfoList.add(super.opeDate);
		// 更新処理ID
		seikyInfoList.add(this.trnId);
		
		// 2015/11/12 ANK-2565-00-00 Add Start //
		// クレジットカード番号預りＩＤ
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.CRECARD_NO_AZKRI_ID));
		
		// 仕向先会社コード
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.SHIKOSAKI_COMP_CD));
		// 2015/11/12 ANK-2565-00-00 Add End //
		
// 2018/04/03 ANK-3366-00-00 ADD STA
		// 卸先事業者コード
		seikyInfoList.add(mastMap.get(JBSbatCHIFM219.ORSJGS_CD));
// 2018/04/03 ANK-3366-00-00 ADD END
// 20191014 ANK-3586-00-00 星野 ADD START
		// 隔月請求スキップフラグ（空白固定）
		seikyInfoList.add("");
// 20191014 ANK-3586-00-00 星野 ADD END
		// ANK-3838-00-00 ADD START
		// 手数料負担方式コード（空白固定）
		seikyInfoList.add("");
		// パーフェクト口座利用可否（空白固定）
		seikyInfoList.add("");
		// ANK-3838-00-00 ADD END
		// ANK-3846-00-00 ADD START
		// 決済ID（空白固定）
		seikyInfoList.add("");
		// マーチャント取引ID（空白固定）
		seikyInfoList.add("");
		// ANK-3846-00-00 ADD END
		// ANK-4401-00-00 ADD START
		// 料金変更フラグ（空白固定）
		seikyInfoList.add("");
		// ANK-4401-00-00 ADD END

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][outputSeiky][seikyInfoList=" + seikyInfoList.toString() + "]");

		JCCBatCommon.printBusinessFileUtil(this.seikyFile, seikyInfoList);
		seikyOutCnt++;

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][outputSeiky]");
	}

	/**
	 * 債権情報ファイルの出力を行ないます。
	 * 
	 * @param mastMap 請求情報
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void outputSaiken(JBSbatServiceInterfaceMap mastMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][outputSaiken]");
		
		ArrayList<Object> saikenInfoList = new ArrayList<Object>();

		// 債権番号
		saikenInfoList.add(saikenNo);
		// 請求契約番号
		saikenInfoList.add(mastMap.get(JBSbatCHIFM219.SEIKY_KEI_NO));
		// サービス契約番号
		saikenInfoList.add(JACStrConst.SPACE_1);
		// 債権年月
		saikenInfoList.add(this.togtu);
		// 債権ステータス
		saikenInfoList.add(JACStrConst.SAIKEN_STAT_MI_FIX);
		// 支払方法コード
		saikenInfoList.add(mastMap.get(JBSbatCHIFM219.SEIKY_WAY_CD));
		// 支払期限年月日
		saikenInfoList.add(payKigenYmd);
		// 変更支払期限年月日
		saikenInfoList.add("");
		// 請求種別コード
		saikenInfoList.add(mastMap.get(JBSbatCHIFM219.SEIKY_SBT_CD));
		
		// 請求内訳差分情報に、債権切り離し対象の料金が存在した場合
		if (this.sknKiFlg)
		{
			// 債権取扱いコード(買取不可他社債権あり)
			saikenInfoList.add(JACStrConst.SKN_TRAT_CD_TASHA_SKN);
		}
		else
		{
			// 債権取扱いコード(KOPT債権のみ)
			saikenInfoList.add(JACStrConst.SKN_TRAT_CD_KOPT_SKN);
		}
		// 債権確定年月日
		saikenInfoList.add("");
		// 最新債権充当年月日
		saikenInfoList.add("");
		// 債権調整年月日
		saikenInfoList.add("");
		// 債権変更年月日
		saikenInfoList.add("");
		// 充当完了年月日
		saikenInfoList.add("");
		// 債権償却年月日
		saikenInfoList.add("");
		// 償却理由コード
		saikenInfoList.add("");
		// 補償費扱い料金訂正有無
		saikenInfoList.add(JACStrConst.UM_NASHI);
		// 登録年月日時分秒
		saikenInfoList.add(this.sysTime);
		// 更新年月日時分秒
		saikenInfoList.add(this.sysTime);
		// 登録運用年月日
		saikenInfoList.add(super.opeDate);
		// 登録処理ID
		saikenInfoList.add(this.trnId);
		// 更新運用年月日
		saikenInfoList.add(super.opeDate);
		// 更新処理ID
		saikenInfoList.add(this.trnId);

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][outputSaiken][saikenInfoList=" + saikenInfoList.toString() + "]");

		JCCBatCommon.printBusinessFileUtil(this.saikenFile, saikenInfoList);
		saikenOutCnt++;

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][outputSaiken]");
	}

	/**
	 * 請求債権関連情報ファイルの出力を行ないます。
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void outputSeikySaiken() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][outputSeikySaiken]");
		
		ArrayList<Object> seikySaikenInfoList = new ArrayList<Object>();

		// 請求番号
		seikySaikenInfoList.add(seikyNo);
		// 債権番号
		seikySaikenInfoList.add(saikenNo);
		// 請求繰越フラグ
		seikySaikenInfoList.add(JACStrConst.SEIKY_KKSHI_FLG_NSI_SHKV);
		// 繰越回数
		seikySaikenInfoList.add("0");
		// 登録年月日時分秒
		seikySaikenInfoList.add(this.sysTime);
		// 更新年月日時分秒
		seikySaikenInfoList.add(this.sysTime);
		// 登録運用年月日
		seikySaikenInfoList.add(super.opeDate);
		// 登録処理ID
		seikySaikenInfoList.add(this.trnId);
		// 更新運用年月日
		seikySaikenInfoList.add(super.opeDate);
		// 更新処理ID
		seikySaikenInfoList.add(this.trnId);

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][outputSeikySaiken][seikySaikenInfoList=" + seikySaikenInfoList.toString() + "]");

		JCCBatCommon.printBusinessFileUtil(this.seikySaikenFile, seikySaikenInfoList);
		seikySknKnrnOutCnt++;

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][outputSeikySaiken]");
	}
	
	/**
	 * 更新用シーケンス番号をファイル出力します
	 * 
	 * @throws Exception
	 */
	private void outSeqNo() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][outSeqNo]");
		
		// シーケンスを100進める
		seqSeikyNo = getNextSeq(seqSeikyNo, 100);
		seqSaikenNo = getNextSeq(seqSaikenNo, 100);
		
		// 処理前との差分を算出
//OM-2016-0001645 MOD START
//		int updSeikyNoCnt = seqSeikyNo - seqSeikyNoBef;
//		int updSaikenNoCnt =  seqSaikenNo - seqSaikenNoBef;
		long updSeikyNoCnt = seqSeikyNo - seqSeikyNoBef;
		long updSaikenNoCnt =  seqSaikenNo - seqSaikenNoBef;
//OM-2016-0001645 MOD END
		
		// 請求シーケンス更新用ファイル出力
		ArrayList<Object> updSeikyNoList = new ArrayList<Object>();
		updSeikyNoList.add(updSeikyNoCnt);
		JCCBatCommon.printBusinessFileUtil(this.seikySeqFile, updSeikyNoList);

		// 債権シーケンス更新用ファイル出力
		ArrayList<Object> updSaikenNoList = new ArrayList<Object>();
		updSaikenNoList.add(updSaikenNoCnt);
		JCCBatCommon.printBusinessFileUtil(this.saikenSeqFile, updSaikenNoList);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][outSeqNo]");
	}
	
	/**
	 * 債権更新用ファイルの出力を行います
	 * 
	 * @throws Exception
	 */
	private void outputSaikenToriUpd(JBSbatServiceInterfaceMap mastMap, String sknToriCd) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][outSaikenUpd]");
		
		ArrayList<Object> saikenUpdInfoList = new ArrayList<Object>();

		// 債権番号
		saikenUpdInfoList.add(saikenNo);
		// 請求契約番号
		saikenUpdInfoList.add(mastMap.getString(JBSbatCHIFM219.SEIKY_KEI_NO));
		// 債権取扱コード
		saikenUpdInfoList.add(sknToriCd);

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][outputSeikySaiken][saikenUpdInfoList=" + saikenUpdInfoList.toString() + "]");

		JCCBatCommon.printBusinessFileUtil(this.saikenToriCdUpdFile, saikenUpdInfoList);
		saikenToriCdOutCnt++;
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][outSaikenUpd]");
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CH_M_PRC_KMK_CS_CHGE.close();
		db_CH_M_PRC_SCHDL_TEIGI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		schdlUtil.close();

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");

		// 請求シーケンス更新用ファイル出力
		this.outSeqNo();

		// 請求債権関連情報ファイルクローズ
		JCCBatCommon.closeBusinessFileUtil(this.seikySaikenFile);
		// 債権情報ファイルクローズ
		JCCBatCommon.closeBusinessFileUtil(this.saikenFile);
		// 債権内訳情報ファイルクローズ
		JCCBatCommon.closeBusinessFileUtil(this.saikenUcwkFile);
		// 請求情報ファイルクローズ
		JCCBatCommon.closeBusinessFileUtil(this.seikyFile);
		// 請求内訳情報ファイルクローズ
		JCCBatCommon.closeBusinessFileUtil(this.seikyUcwkFile);
		// 請求シーケンス更新用ファイルクローズ
		JCCBatCommon.closeBusinessFileUtil(this.seikySeqFile);
		// 債権シーケンス更新用ファイルクローズ
		JCCBatCommon.closeBusinessFileUtil(this.saikenSeqFile);

		// 出力件数（請求債権関連）をログ出力
		super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECHB1450AI,
				new String[] {SEIKY_SKN_KNRN_FILE_NM + "(" + this.freeItems[5] + ")", String.valueOf(seikySknKnrnOutCnt)});
		// 出力件数（請求）をログ出力
		super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECHB1450AI,
				new String[] {SEIKY_FILE_NM + "(" + this.freeItems[7] + ")", String.valueOf(seikyOutCnt)});
		// 出力件数（債権）をログ出力
		super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECHB1450AI,
				new String[] {SAIKEN_FILE_NM + "(" + this.freeItems[1] + ")", String.valueOf(saikenOutCnt)});
		// 出力件数（請求内訳）をログ出力
		super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECHB1450AI,
				new String[] {SEIKY_UCWK_FILE_NM + "(" + this.freeItems[9] + ")", String.valueOf(seikyUcwkOutCnt)});
		// 出力件数（債権内訳）をログ出力
		super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECHB1450AI,
				new String[] {SAIKEN_UCWK_FILE_NM + "(" + this.freeItems[3] + ")", String.valueOf(saikenUcwkOutCnt)});
		// 出力件数（債権取扱いコード更新）をログ出力
		super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECHB1450AI,
				new String[] {SAIKEN_TORI_UPD_FILE_NM + "(" + this.freeItems[14] + ")", String.valueOf(saikenToriCdOutCnt)});
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
	
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 * @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;
	}

	/**
	 * SQLKEY(CH_SELECT_015)で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_CH_SELECT_015(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());

		// DBアクセスを実行します
		db_CH_M_PRC_KMK_CS_CHGE.selectBySqlDefine(paramList, CH_M_PRC_KMK_CS_CHGE_CH_SELECT_015);
	}

	/**
	 * 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);
	}

	/**
	 * SQLKEY(CH_SELECT_017)で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_CH_SELECT_017(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());
		paramList.setValue(param[7].toString());

		// DBアクセスを実行します
		db_CH_M_PRC_KMK_CS_CHGE.selectBySqlDefine(paramList, CH_M_PRC_KMK_CS_CHGE_CH_SELECT_017);
	}

	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * ファイル出力
	 * 
	 * @param  filePath  ファイルパス
	 * @param  fileDef   ファイル定義
	 * @return fileUtil  ファイルインスタンス
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatBusinessFileUtil createFile(String filePath, String fileDef) throws Exception 
	{
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][createFile]");
		JBSbatOutputFileUtil trailerFile 	= new JBSbatOutputFileUtil(filePath);
		String tempFileDefName 				= JBSbatAplConst.getAplConstValue(PRM_OTD) + fileDef;
		JBSbatDefFileUtil trailerFileDef 	= new JBSbatDefFileUtil(tempFileDefName, trailerFile);
		
		// ファイルの生成
		JBSbatBusinessFileUtil fileUtil = JCCBatCommon.createBusinessFileUtil(filePath
																			, JACStrConst.ENCODE_MS932
																			, JACBatCommon.chgKaigyo(JACStrConst.LINE_LF)
																			, trailerFileDef.getDelimiter());
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][createFile]");
		return fileUtil;
	}

	/**
	 * 債権切り離し対象の料金項目コードか判定します。
	 * 
	 * @param key 料金内訳情報
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void chkSknKi(String key) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][chkSknKi]");
		
		// 債権切り離し対象の料金項目の場合
		if (this.sknKrhnsMap.contains(key))
		{
			this.sknKiFlg = true;
		}

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][chkSknKi][債権切り離し対象:" + key + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][chkSknKi]");
	}
	
	/**
	 * 債権取扱いコードを取得します
	 * @return 債権取扱いコード
	 */
	private String getSknToriCd()
	{
		// 債権切り離し対象料金の有無により、債権取扱いコードを決定する
		String sknToriCd = null;
		
		// 請求内訳差分情報に、債権切り離し対象の料金が存在した場合
		if (this.sknKiFlg)
		{
			// 債権取扱いコード(買取不可他社債権あり)
			sknToriCd = JACStrConst.SKN_TRAT_CD_TASHA_SKN;
		}
		else
		{
			// 債権取扱いコード(KOPT債権のみ)
			sknToriCd = JACStrConst.SKN_TRAT_CD_KOPT_SKN;
		}
		
		return sknToriCd;
	}
}
