/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatAKShukKmkHikakuKnsho
*	ソースファイル名	：JBSbatAKShukKmkHikakuKnsho.java
*	作成者				：富士通　
*	作成日				：2012年07月23日
*＜機能概要＞
*　集計料金項目比較検証部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v3.00.00	2012/07/23   FJ)田辺	新規作成
*	v5.00.00	2013/03/22   FJ)高橋	ST2-2013-0001607 対応
*	v5.01.00	2013/07/10   FJ)黒木	【ANK-1464-00-00】料金検証不具合対応　マッチングキーの変更
*	v8.00.00	2014/01/13   FJ)高橋	【ANK-1584-00-00】L2-MVNO対応
*	v8.01.00	2014/04/08   FJ)前田	【OM-2014-0001435】サービス詳細識別番号を空白埋めするように修正
*********************************************************************/
package eo.business.service;

import java.math.BigDecimal;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatMatchServiceInterface;
import eo.business.util.file.JBSbatAKIFM002;
import eo.business.util.file.JBSbatAKIFM011;
import eo.business.util.file.JBSbatAKIFM012;
import eo.common.constant.JACStrConst;
import eo.common.util.JPCUtilCommon;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatAKShukKmkHikakuKnsho extends JBSbatBusinessService implements JBSbatMatchServiceInterface
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** キーマッチ処理フラグ*/
	private boolean matchProcFlg;

	/** マスタファイル処理フラグ*/
	private boolean mastProcFlg;

	/** トランファイル処理フラグ*/
	private boolean tranProcFlg;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 比較キー　マスタ*/
	private String mastKey = JACStrConst.KARA_MOJI;
	
	/** 比較キー　トラン*/
	private String tranKey = JACStrConst.KARA_MOJI;
	
	/** 固定値用　調査検証合計金額 = "0"*/
	private static final String CHOSAKNS_GOKEI_AMNT_ZERO = "0";
	
	/** 固定値用　想定金額 = "0"*/
	private static final String SOTEI_AMNT_ZERO = "0"; 
	
	/** ワーク用　差額算出ワーク*/
	private BigDecimal tmpSagaku = BigDecimal.ZERO;
	
	/** 出力用　検証結果情報．金額*/
	private BigDecimal amnt = BigDecimal.ZERO; 
	
	/** 出力用　検証結果情報．存在比較結果コード*/
	private String sonzaiHikakuKekka = JACStrConst.KARA_MOJI;
	
	/** 出力用　検証結果情報．存在チェック結果コード*/
	private String sonzaiCheckKekka = JACStrConst.KARA_MOJI;
	
	/** 出力用　検証結果情報．金額比較結果*/
	private String amntHikakuKekka = JACStrConst.KARA_MOJI;
	
	/** 出力用　検証結果情報．金額チェック結果*/
	private String amntCheckKekka = JACStrConst.KARA_MOJI;
	
	/** 出力用　検証結果情報．利用年月*/
	private String riyoYm = JACStrConst.KARA_MOJI;
	
	/** 出力用　検証結果情報．利用開始年月日*/
	private String riyoStatYmd = JACStrConst.KARA_MOJI;
	
	/** 出力用　検証結果情報．利用終了年月日*/
	private String riyoEndYmd = JACStrConst.KARA_MOJI;
	
	/** 出力用　検証結果情報．サービス詳細識別番号*/
	private String svcDtlSkbtNo = JACStrConst.KARA_MOJI;

	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		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 + "]");
		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, "[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;
		
		// 入力Ｍのみ存在する
		if (mastMap != null && tranMap == null)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力Ｍのみ存在する]");
			
			// マスタファイルを次レコードに進める
			this.setMastProcFlg(true);
			
			// 存在チェック結果の設定
			this.sonzaiHikakuKekka = JACStrConst.SONZAI_HIKAKU_RSLT_CD_SOTEI;				// 存在比較結果に、"1"（想定請求内訳のみ）
			
			this.sonzaiCheckKekka  = JACStrConst.KNSHO_RSLT_NG;								// 存在チェック結果に、"2"（ＮＧ）
			
			// 金額チェック結果の設定
			this.tmpSagaku = mastMap.getBigDecimal(JBSbatAKIFM012.SOTEI_AMNT).negate();		// 差額に、マスタ．金額 * (-1)
			
			this.amntHikakuKekka   = JACStrConst.AMNT_HIKAKU_RSLT_CD_UNMATCH;				// 金額比較結果に、"1"（金額不一致）
			
			this.amntCheckKekka    = JACStrConst.KNSHO_RSLT_NG;								// 金額チェック結果に、"2"（ＮＧ）
			
			// 金額の設定（Ｍのみの場合、"0"を設定）
			this.amnt = BigDecimal.ZERO;
			this.riyoYm 		= mastMap.getString(JBSbatAKIFM012.USE_YM);		// 検証対象請求内訳．利用年月
			this.riyoStatYmd 	= null;											// 検証対象請求内訳．利用開始年月日
			this.riyoEndYmd		= null;											// 検証対象請求内訳．利用終了年月日
			this.svcDtlSkbtNo	= null;											// 検証対象請求内訳．サービス詳細識別番号
			
			// 検証結果情報を編集・出力（マッチ・Ｍのみ）
			mastOutputInfoEdit(outputInItem, mastMap);
			
		}
		// 入力Ｔのみ存在する
		else if (mastMap == null && tranMap != null)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力Ｔのみ存在する]");
			
			// トランファイルを次レコードに進める
			this.setTranProcFlg(true);
			
			// 存在チェック結果の設定
			this.sonzaiHikakuKekka = JACStrConst.SONZAI_HIKAKU_RSLT_CD_KNSHO;		// 存在比較結果に、"2"（検証対象請求内訳のみ）
			
			this.sonzaiCheckKekka  = JACStrConst.KNSHO_RSLT_PTN_GAI;				// 存在チェック結果に、"9"（パターン外）
			
			// 金額チェック結果の設定
			this.tmpSagaku = tranMap.getBigDecimal(JBSbatAKIFM002.AMNT);			// 差額に、トラン．金額
			
			this.amntHikakuKekka = JACStrConst.AMNT_HIKAKU_RSLT_CD_UNMATCH;			// 金額比較結果に、"1"（金額不一致）
			
			this.amntCheckKekka  = JACStrConst.KNSHO_RSLT_WRN;						// 金額チェック結果に、"1"（ワーニング）
			
			// 検証結果情報を編集・出力（Ｔのみ）
			tranOutputInInfoEdit(outputInItem, tranMap);
			
		}
		// 入力Ｍ、入力Ｔともに存在する
		else
		{
			// マッチングキー取得
			// 想定請求内訳（集計料金項目）からのマッチングキー
			// 請求年月＞請求契約番号＞利用年月＞サービス契約番号＞整理番号＞料金グループコード＞料金コースコード＞料金サービスコード＞料金項目コード
			this.mastKey = mastMap.getString(JBSbatAKIFM012.SEIKY_YM).
				concat(mastMap.getString(JBSbatAKIFM012.SEIKY_KEI_NO)).concat(mastMap.getString(JBSbatAKIFM012.USE_YM)).
				concat(mastMap.getString(JBSbatAKIFM012.SVC_KEI_NO)).concat(mastMap.getString(JBSbatAKIFM012.SEIRI_NO)).
				concat(mastMap.getString(JBSbatAKIFM012.PRC_GRP_CD)).concat(mastMap.getString(JBSbatAKIFM012.PCRS_CD)).
				concat(mastMap.getString(JBSbatAKIFM012.PRC_SVC_CD)).concat(mastMap.getString(JBSbatAKIFM012.PRC_KMK_CD));
			// 前受金充当結果情報からのマッチングキー
			// 請求年月＞請求契約番号＞利用年月＞サービス契約番号＞整理番号＞料金グループコード＞料金コースコード＞料金サービスコード＞料金項目コード
			this.tranKey = tranMap.getString(JBSbatAKIFM002.SEIKY_YM).
				concat(tranMap.getString(JBSbatAKIFM002.SEIKY_KEI_NO)).concat(tranMap.getString(JBSbatAKIFM002.USE_YM)).
				concat(tranMap.getString(JBSbatAKIFM002.SVC_KEI_NO)).concat(tranMap.getString(JBSbatAKIFM002.SEIRI_NO)).
				concat(tranMap.getString(JBSbatAKIFM002.PRC_GRP_CD)).concat(tranMap.getString(JBSbatAKIFM002.PCRS_CD)).
				concat(tranMap.getString(JBSbatAKIFM002.PRC_SVC_CD)).concat(tranMap.getString(JBSbatAKIFM002.PRC_KMK_CD));
			
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][mastKey=" + this.mastKey + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][tranKey=" + this.tranKey + "]");
			
			// 入力Ｍ＝入力Ｔ（マッチ）
			if (this.mastKey.compareTo(this.tranKey) == 0)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力Ｍ、入力Ｔともに存在する][入力Ｍ＝入力Ｔ（マッチ）]");
				
				// マスタ・トランファイルを次レコードに進める
				this.setMastProcFlg(true);
				
				this.setTranProcFlg(true);
				
				// 存在チェック結果の設定
				this.sonzaiHikakuKekka = JACStrConst.SONZAI_HIKAKU_RSLT_CD_SOTKNS;		// 存在比較結果に、"0"（想定・検証対象共にあり）
				
				this.sonzaiCheckKekka  = JACStrConst.KNSHO_RSLT_OK;						// 存在チェック結果に、"0"（ＯＫ）
				
				// 金額比較検証
				this.tmpSagaku = tranMap.getBigDecimal(JBSbatAKIFM002.AMNT).subtract(mastMap.getBigDecimal(JBSbatAKIFM012.SOTEI_AMNT));
				
				if(BigDecimal.ZERO.compareTo(this.tmpSagaku) == 0)
				{
					this.amntHikakuKekka = JACStrConst.AMNT_HIKAKU_RSLT_CD_MATCH;		// 金額比較結果に、"0"（金額一致）
					
					this.amntCheckKekka  = JACStrConst.KNSHO_RSLT_OK;					// 金額チェック結果に、"0"（ＯＫ）
					
				}
				else
				{
					this.amntHikakuKekka = JACStrConst.AMNT_HIKAKU_RSLT_CD_UNMATCH;		// 金額比較結果に、"1"（金額不一致）
					
					this.amntCheckKekka  = JACStrConst.KNSHO_RSLT_WRN;			// 金額チェック結果に、"1"（ワーニング）
				}
				
				// マッチ時出力項目の設定
				this.amnt 			= tranMap.getBigDecimal(JBSbatAKIFM002.AMNT);		// 検証対象請求内訳．金額を設定
				this.riyoYm 		= tranMap.getString(JBSbatAKIFM002.USE_YM);			// 検証対象請求内訳．利用年月
				this.riyoStatYmd 	= tranMap.getString(JBSbatAKIFM002.USE_STAYMD);		// 検証対象請求内訳．利用開始年月日
				this.riyoEndYmd		= tranMap.getString(JBSbatAKIFM002.USE_ENDYMD);		// 検証対象請求内訳．利用終了年月日
				this.svcDtlSkbtNo	= tranMap.getString(JBSbatAKIFM002.SVC_DTL_SKBT_NO);// 検証対象請求内訳．サービス詳細識別番号

				
				// 検証結果情報を編集・出力（マッチ・Ｍのみ）
				mastOutputInfoEdit(outputInItem, mastMap);
				
			}
			// 入力Ｍ＜入力Ｔ
			else if (this.mastKey.compareTo(this.tranKey) < 0)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力Ｍ、入力Ｔともに存在する][入力Ｍ＜入力Ｔ]");
				
				// マスタファイルを次レコードに進める
				this.setMastProcFlg(true);
				
				// 存在チェック結果の設定
				this.sonzaiHikakuKekka = JACStrConst.SONZAI_HIKAKU_RSLT_CD_SOTEI;				// 存在比較結果に、"1"（想定請求内訳のみ）
				
				this.sonzaiCheckKekka  = JACStrConst.KNSHO_RSLT_NG;						// 存在チェック結果に、"2"（ＮＧ）
				
				// 金額チェック結果の設定
				this.tmpSagaku = mastMap.getBigDecimal(JBSbatAKIFM012.SOTEI_AMNT).negate();		// 差額に、マスタ．金額 * (-1)
				
				this.amntHikakuKekka   = JACStrConst.AMNT_HIKAKU_RSLT_CD_UNMATCH;				// 金額比較結果に、"1"（金額不一致）
				
				this.amntCheckKekka    = JACStrConst.KNSHO_RSLT_NG;								// 金額チェック結果に、"2"（ＮＧ）
				
				// 金額の設定（Ｍのみの場合、"0"を設定）
				this.amnt = BigDecimal.ZERO;
				this.riyoYm 		= mastMap.getString(JBSbatAKIFM012.USE_YM);		// 検証対象請求内訳．利用年月
				this.riyoStatYmd 	= null;											// 検証対象請求内訳．利用開始年月日
				this.riyoEndYmd		= null;											// 検証対象請求内訳．利用終了年月日
				this.svcDtlSkbtNo	= null;											// 検証対象請求内訳．サービス詳細識別番号
				
				// 検証結果情報を編集・出力（マッチ・Ｍのみ）
				mastOutputInfoEdit(outputInItem, mastMap);
			}
			else
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力Ｍ、入力Ｔともに存在する][入力Ｍ＞入力Ｔ]");
				
				// トランファイルを次レコードに進める
				this.setTranProcFlg(true);
				
				// 存在チェック結果の設定
				this.sonzaiHikakuKekka = JACStrConst.SONZAI_HIKAKU_RSLT_CD_KNSHO;			// 存在比較結果に、"2"（検証対象請求内訳のみ）
				
				this.sonzaiCheckKekka  = JACStrConst.KNSHO_RSLT_PTN_GAI;					// 存在チェック結果に、"9"（パターン外）
				
				// 金額チェック結果の設定
				this.tmpSagaku = tranMap.getBigDecimal(JBSbatAKIFM002.AMNT);				// 差額に、トラン．金額
				
				this.amntHikakuKekka = JACStrConst.AMNT_HIKAKU_RSLT_CD_UNMATCH;				// 金額比較結果に、"1"（金額不一致）
				
				this.amntCheckKekka  = JACStrConst.KNSHO_RSLT_WRN;							// 金額チェック結果に、"1"（ワーニング）
				
				// 検証結果情報を編集・出力（Ｔのみ）
				tranOutputInInfoEdit(outputInItem, tranMap);
				
			}
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		
		
		
		return outputInItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 検証結果情報出力（Ｍのみまたは、マッチの場合）
	 * @param outputInItem　出力情報
	 * @param mastMap　想定請求内訳
	 * @throws Exception
	 */
	private void mastOutputInfoEdit(JBSbatOutputItem outputInItem, JBSbatServiceInterfaceMap mastMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeOutputInfo]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeOutputInfo][mastMap=" + mastMap.getMap().toString() + "]");
		
		// 検証結果情報作成
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		// 01.請求年月
		outMap.set(JBSbatAKIFM011.SEIKY_YM,						mastMap.get(JBSbatAKIFM012.SEIKY_YM));
				
		// 02.検証年月日
		outMap.set(JBSbatAKIFM011.KNSHO_YMD,					super.opeDate);
		
		// 03.ＳＹＳＩＤ
		outMap.set(JBSbatAKIFM011.SYSID,						mastMap.get(JBSbatAKIFM012.SYSID));
		
		// 04.請求契約番号
		outMap.set(JBSbatAKIFM011.SEIKY_KEI_NO,					mastMap.get(JBSbatAKIFM012.SEIKY_KEI_NO));
		
		// 05.サービス契約番号
		outMap.set(JBSbatAKIFM011.SVC_KEI_NO,					mastMap.get(JBSbatAKIFM012.SVC_KEI_NO));
		
		// 06.整理番号
		outMap.set(JBSbatAKIFM011.SEIRI_NO,						mastMap.get(JBSbatAKIFM012.SEIRI_NO));
		
		// 07.料金グループコード
		outMap.set(JBSbatAKIFM011.PRC_GRP_CD,					mastMap.get(JBSbatAKIFM012.PRC_GRP_CD));
		
		// 08.料金コースコード
		outMap.set(JBSbatAKIFM011.PCRS_CD,						mastMap.get(JBSbatAKIFM012.PCRS_CD));
		
		// 09.料金サービスコード
		outMap.set(JBSbatAKIFM011.PRC_SVC_CD,					mastMap.get(JBSbatAKIFM012.PRC_SVC_CD));
		
		// 10.料金検証契約状態コード
		outMap.set(JBSbatAKIFM011.PRCKNS_KEI_STAT_CD,			mastMap.get(JBSbatAKIFM012.PRCKNS_KEI_STAT_CD));
		
		// 11.請求パターンコード
		outMap.set(JBSbatAKIFM011.SEIKY_PTN_CD,					mastMap.get(JBSbatAKIFM012.SEIKY_PTN_CD));
		
		// 12.料金検証料金項目タイプコード
		outMap.set(JBSbatAKIFM011.SOTEI_AMNT,					null);
		
		// 13.料金項目コード
		outMap.set(JBSbatAKIFM011.PRC_KMK_CD,					mastMap.get(JBSbatAKIFM012.PRC_KMK_CD));
		
		// 14.想定金額
		outMap.set(JBSbatAKIFM011.SOTEI_AMNT,					mastMap.get(JBSbatAKIFM012.SOTEI_AMNT));
		
		// 15.金額
		outMap.set(JBSbatAKIFM011.AMNT,							this.amnt);
		
		// 16.比較検証差額
		outMap.set(JBSbatAKIFM011.HIKAKU_KNSHO_SAGAKU,			this.tmpSagaku);
		
		// 17.調査検証合計金額
		outMap.set(JBSbatAKIFM011.CHOSAKNS_GOKEI_AMNT,			JBSbatAKShukKmkHikakuKnsho.CHOSAKNS_GOKEI_AMNT_ZERO);
		
		// 18.存在比較結果コード
		outMap.set(JBSbatAKIFM011.SONZAI_HIKAKU_RSLT_CD,		this.sonzaiHikakuKekka);
		
		// 19.存在チェックレベルコード
		outMap.set(JBSbatAKIFM011.SONZAI_CHK_LV_CD,				null);
		
		// 20.存在チェック結果コード
		outMap.set(JBSbatAKIFM011.SONZAI_CHK_RSLT_CD,			this.sonzaiCheckKekka);
		
		// 21.金額比較結果コード
		outMap.set(JBSbatAKIFM011.AMNT_HIKAKU_RSLT_CD,			this.amntHikakuKekka);
		
		// 22.金額チェックレベルコード
		outMap.set(JBSbatAKIFM011.AMNT_CHK_LV_CD,				null);
		
		// 23.金額チェック結果コード
		outMap.set(JBSbatAKIFM011.AMNT_CHK_RSLT_CD,				this.amntCheckKekka);
		
		// 24.調査検証処理区分
		outMap.set(JBSbatAKIFM011.CHOSAKNS_TRAN_DIV,			null);
		
		// 25.調査検証結果（１Ｎ割引適用対象）
		outMap.set(JBSbatAKIFM011.CHOSAKNS_RSLT_1N_WRBAPL_TG,	null);
		
		// 26.調査検証結果（請求書発行手数料）
		outMap.set(JBSbatAKIFM011.CHOSAKNS_RSLT_SKS_HAK_CMS,	null);
		
		// 27.調査検証結果（外部料金ＰＴ外）
		outMap.set(JBSbatAKIFM011.CHOSAKNS_RSLT_OUTPRCPTNOT,	null);
		
		// 28.調査検証結果（外部料金ＰＴ内）
		outMap.set(JBSbatAKIFM011.CHOSAKNS_RSLT_OUTPRCPTNIN,	null);
		
		// 29.調査検証結果（通話料金）
		outMap.set(JBSbatAKIFM011.CHOSAKNS_RSLT_TUWA_PRC,		null);
		
		// 30.調査検証結果（パケット料金）
		outMap.set(JBSbatAKIFM011.CHOSAKNS_RSLT_PCT_PRC,		null);
		
		// 31.調査検証結果（ＦＴＴＨ通信料金）
		outMap.set(JBSbatAKIFM011.CHOSAKNS_RSLT_FTTH_TSPRC,		null);
		
		// 32.調査検証結果（投入一時金）
		outMap.set(JBSbatAKIFM011.CHOSAKNS_RSLT_TONYU_ICJKN,	null);
		
		// 33.調査検証結果（調整金）
		outMap.set(JBSbatAKIFM011.CHOSAKNS_RSLT_ADJ_PRC,		null);
		
		// 34.調査検証結果補足
		outMap.set(JBSbatAKIFM011.CHOSAKNS_RSLT_HSK,			null);
		
		// 35.請求ＰＴ検証エラーレベルコード
		outMap.set(JBSbatAKIFM011.SEIKY_PTN_KNSHO_ERR_LV_CD,	this.sonzaiCheckKekka.concat(this.amntCheckKekka));
		
		// 36.サービス開始年月日
		outMap.set(JBSbatAKIFM011.SVC_STA_YMD,					null);
		
		// 37.サービス終了年月日
		outMap.set(JBSbatAKIFM011.SVC_ENDYMD,					null);
		
		// 38.サービス課金開始年月日
		outMap.set(JBSbatAKIFM011.SVC_CHRG_STAYMD,				null);
		
		// 39.サービス課金終了年月日
		outMap.set(JBSbatAKIFM011.SVC_CHRG_ENDYMD,				null);
		
		// 40.プラン開始年月日
		outMap.set(JBSbatAKIFM011.PLAN_STAYMD,					null);
		
		// 41.プラン終了年月日
		outMap.set(JBSbatAKIFM011.PLAN_ENDYMD,					null);
		
		// 42.プラン課金開始年月日
		outMap.set(JBSbatAKIFM011.PLAN_CHRG_STAYMD,				null);
		
		// 43.プラン課金終了年月日
		outMap.set(JBSbatAKIFM011.PLAN_CHRG_ENDYMD,				null);
		
		// 44.プラン終了種別コード
		outMap.set(JBSbatAKIFM011.PLAN_END_SBT_CD,				null);
		
		// 45.違約金発生コード
		outMap.set(JBSbatAKIFM011.PNLTY_HASSEI_CD,				null);
		
		// 46.サービス解約年月日
		outMap.set(JBSbatAKIFM011.SVC_DSL_YMD,					null);
		
		// 47.サービス解約理由コード
		outMap.set(JBSbatAKIFM011.SVC_DLRE_CD,					null);
		
		// 48.サービス休止課金開始年月日
		outMap.set(JBSbatAKIFM011.SVC_PAUSE_CHRG_STA_YMD,		null);
		
		// 49.サービス休止解除年月日
		outMap.set(JBSbatAKIFM011.SVC_PAUSE_RLS_YMD,			null);
		
		// 50.回復年月日
		outMap.set(JBSbatAKIFM011.KAIHK_YMD,					null);
		
		// 51.マンションＩＤ
		outMap.set(JBSbatAKIFM011.MANSION_ID,					null);
		
		// 52.提供方式契約番号
		outMap.set(JBSbatAKIFM011.TK_HOSHIKI_KEI_NO,			null);
		
		// 53.加入契約支払方式コード
		outMap.set(JBSbatAKIFM011.KANYU_KEI_PAY_HOSHIKI_CD,		null);
		
		// 54.利用年月
		outMap.set(JBSbatAKIFM011.USE_YM,						this.riyoYm);
		
		// 55.利用開始年月日
		outMap.set(JBSbatAKIFM011.USE_STAYMD,					this.riyoStatYmd);
		
		// 56.利用終了年月日
		outMap.set(JBSbatAKIFM011.USE_ENDYMD,					this.riyoEndYmd);
		
		// 57.料金検証集計先パターンコード
		outMap.set(JBSbatAKIFM011.PRCKNS_SHUK_SAKI_PTN_CD,		null);
		
		// 58.料金検証集計元項目区分
		outMap.set(JBSbatAKIFM011.PRCKNS_SHUK_MOTO_KMK_DIV,		null);
		
		// 59.サービス詳細識別番号
		String bkSvcDtlSkbtNo = JACStrConst.KARA_MOJI;
		String umeSvcDtlSkbtNo = JACStrConst.KARA_MOJI;
		bkSvcDtlSkbtNo = this.svcDtlSkbtNo;
		
		if(null == (bkSvcDtlSkbtNo) || JACStrConst.KARA_MOJI.equals(bkSvcDtlSkbtNo))
		{
			// サービス詳細識別番号が空のときALLスペース（30桁）を設定
			umeSvcDtlSkbtNo = JACStrConst.SVC_DTL_SKBT_NO_ALLSP;
		}
		else
		{
			// 30桁まで空白埋めをする
			umeSvcDtlSkbtNo = JPCUtilCommon.fillHalfSpace(bkSvcDtlSkbtNo
							, JACStrConst.SVC_DTL_SKBT_NO_LENGTH, true);
		}
		
		outMap.setString(JBSbatAKIFM011.SVC_DTL_SKBT_NO, umeSvcDtlSkbtNo);
		
		// 出力フラグ設定
		outMap.setOutFlg(true);
		
		// 出力処理
		outputInItem.addOutMapList(outMap);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeOutputInfo][outputItem = " + outMap.getMap().toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeOutputInfo]");
	}
	
	
	/**
	 * 検証結果情報出力（Ｔのみまたは、入力Ｍ＞入力Ｔの場合）
	 * @param outputInItem　出力情報
	 * @param tranMap　検証対象請求内訳
	 * @throws Exception
	 */
	private void tranOutputInInfoEdit(JBSbatOutputItem outputInItem, JBSbatServiceInterfaceMap tranMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeOutputInfo]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeOutputInfo][tranMap=" + tranMap.getMap().toString() + "]");
		
		// 検証結果情報作成
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		// 01.請求年月
		outMap.set(JBSbatAKIFM011.SEIKY_YM,						tranMap.get(JBSbatAKIFM002.SEIKY_YM));
		
		// 02.検証年月日
		outMap.set(JBSbatAKIFM011.KNSHO_YMD,					super.opeDate);
		
		// 03.ＳＹＳＩＤ
		outMap.set(JBSbatAKIFM011.SYSID,						null);
		
		// 04.請求契約番号
		outMap.set(JBSbatAKIFM011.SEIKY_KEI_NO,					tranMap.get(JBSbatAKIFM002.SEIKY_KEI_NO));
		
		// 05.サービス契約番号
		outMap.set(JBSbatAKIFM011.SVC_KEI_NO,					tranMap.get(JBSbatAKIFM002.SVC_KEI_NO));
		
		// 06.整理番号
		outMap.set(JBSbatAKIFM011.SEIRI_NO,						tranMap.get(JBSbatAKIFM002.SEIRI_NO));
		
		// 07.料金グループコード
		outMap.set(JBSbatAKIFM011.PRC_GRP_CD,					tranMap.get(JBSbatAKIFM002.PRC_GRP_CD));
		
		// 08.料金コースコード
		outMap.set(JBSbatAKIFM011.PCRS_CD,						tranMap.get(JBSbatAKIFM002.PCRS_CD));
		
		// 09.料金サービスコード
		outMap.set(JBSbatAKIFM011.PRC_SVC_CD,					tranMap.get(JBSbatAKIFM002.PRC_SVC_CD));
		
		// 10.料金検証契約状態コード
		outMap.set(JBSbatAKIFM011.PRCKNS_KEI_STAT_CD,			null);
		
		// 11.請求パターンコード
		outMap.set(JBSbatAKIFM011.SEIKY_PTN_CD,					null);
		
		// 12.料金検証料金項目タイプコード
		outMap.set(JBSbatAKIFM011.SOTEI_AMNT,					null);
		
		// 13.料金項目コード
		outMap.set(JBSbatAKIFM011.PRC_KMK_CD,					tranMap.get(JBSbatAKIFM002.PRC_KMK_CD));
		
		// 14.想定金額
		outMap.set(JBSbatAKIFM011.SOTEI_AMNT,					JBSbatAKShukKmkHikakuKnsho.SOTEI_AMNT_ZERO);
		
		// 15.金額
		outMap.set(JBSbatAKIFM011.AMNT,							tranMap.get(JBSbatAKIFM002.AMNT));
		
		// 16.比較検証差額
		outMap.set(JBSbatAKIFM011.HIKAKU_KNSHO_SAGAKU,			this.tmpSagaku);
		
		// 17.調査検証合計金額
		outMap.set(JBSbatAKIFM011.CHOSAKNS_GOKEI_AMNT,			JBSbatAKShukKmkHikakuKnsho.CHOSAKNS_GOKEI_AMNT_ZERO);
		
		// 18.存在比較結果コード
		outMap.set(JBSbatAKIFM011.SONZAI_HIKAKU_RSLT_CD,		this.sonzaiHikakuKekka);
		
		// 19.存在チェックレベルコード
		outMap.set(JBSbatAKIFM011.SONZAI_CHK_LV_CD,				null);
		
		// 20.存在チェック結果コード
		outMap.set(JBSbatAKIFM011.SONZAI_CHK_RSLT_CD,			this.sonzaiCheckKekka);
		
		// 21.金額比較結果コード
		outMap.set(JBSbatAKIFM011.AMNT_HIKAKU_RSLT_CD,			this.amntHikakuKekka);
		
		// 22.金額チェックレベルコード
		outMap.set(JBSbatAKIFM011.AMNT_CHK_LV_CD,				null);
		
		// 23.金額チェック結果コード
		outMap.set(JBSbatAKIFM011.AMNT_CHK_RSLT_CD,				this.amntCheckKekka);
		
		// 24.調査検証処理区分
		outMap.set(JBSbatAKIFM011.CHOSAKNS_TRAN_DIV,			null);
		
		// 25.調査検証結果（１Ｎ割引適用対象）
		outMap.set(JBSbatAKIFM011.CHOSAKNS_RSLT_1N_WRBAPL_TG,	null);
		
		// 26.調査検証結果（請求書発行手数料）
		outMap.set(JBSbatAKIFM011.CHOSAKNS_RSLT_SKS_HAK_CMS,	null);
		
		// 27.調査検証結果（外部料金ＰＴ外）
		outMap.set(JBSbatAKIFM011.CHOSAKNS_RSLT_OUTPRCPTNOT,	null);
		
		// 28.調査検証結果（外部料金ＰＴ内）
		outMap.set(JBSbatAKIFM011.CHOSAKNS_RSLT_OUTPRCPTNIN,	null);
		
		// 29.調査検証結果（通話料金）
		outMap.set(JBSbatAKIFM011.CHOSAKNS_RSLT_TUWA_PRC,		null);
		
		// 30.調査検証結果（パケット料金）
		outMap.set(JBSbatAKIFM011.CHOSAKNS_RSLT_PCT_PRC,		null);
		
		// 31.調査検証結果（ＦＴＴＨ通信料金）
		outMap.set(JBSbatAKIFM011.CHOSAKNS_RSLT_FTTH_TSPRC,		null);
		
		// 32.調査検証結果（投入一時金）
		outMap.set(JBSbatAKIFM011.CHOSAKNS_RSLT_TONYU_ICJKN,	null);
		
		// 33.調査検証結果（調整金）
		outMap.set(JBSbatAKIFM011.CHOSAKNS_RSLT_ADJ_PRC,		null);
		
		// 34.調査検証結果補足
		outMap.set(JBSbatAKIFM011.CHOSAKNS_RSLT_HSK,			null);
		
		// 35.請求ＰＴ検証エラーレベルコード
		outMap.set(JBSbatAKIFM011.SEIKY_PTN_KNSHO_ERR_LV_CD,	this.sonzaiCheckKekka.concat(this.amntCheckKekka));
		
		// 36.サービス開始年月日
		outMap.set(JBSbatAKIFM011.SVC_STA_YMD,					null);
		
		// 37.サービス終了年月日
		outMap.set(JBSbatAKIFM011.SVC_ENDYMD,					null);
		
		// 38.サービス課金開始年月日
		outMap.set(JBSbatAKIFM011.SVC_CHRG_STAYMD,				null);
		
		// 39.サービス課金終了年月日
		outMap.set(JBSbatAKIFM011.SVC_CHRG_ENDYMD,				null);
		
		// 40.プラン開始年月日
		outMap.set(JBSbatAKIFM011.PLAN_STAYMD,					null);
		
		// 41.プラン終了年月日
		outMap.set(JBSbatAKIFM011.PLAN_ENDYMD,					null);
		
		// 42.プラン課金開始年月日
		outMap.set(JBSbatAKIFM011.PLAN_CHRG_STAYMD,				null);
		
		// 43.プラン課金終了年月日
		outMap.set(JBSbatAKIFM011.PLAN_CHRG_ENDYMD,				null);
		
		// 44.プラン終了種別コード
		outMap.set(JBSbatAKIFM011.PLAN_END_SBT_CD,				null);
		
		// 45.違約金発生コード
		outMap.set(JBSbatAKIFM011.PNLTY_HASSEI_CD,				null);
		
		// 46.サービス解約年月日
		outMap.set(JBSbatAKIFM011.SVC_DSL_YMD,					null);
		
		// 47.サービス解約理由コード
		outMap.set(JBSbatAKIFM011.SVC_DLRE_CD,					null);
		
		// 48.サービス休止課金開始年月日
		outMap.set(JBSbatAKIFM011.SVC_PAUSE_CHRG_STA_YMD,		null);
		
		// 49.サービス休止解除年月日
		outMap.set(JBSbatAKIFM011.SVC_PAUSE_RLS_YMD,			null);
		
		// 50.回復年月日
		outMap.set(JBSbatAKIFM011.KAIHK_YMD,					null);
		
		// 51.マンションＩＤ
		outMap.set(JBSbatAKIFM011.MANSION_ID,					null);
		
		// 52.提供方式契約番号
		outMap.set(JBSbatAKIFM011.TK_HOSHIKI_KEI_NO,			null);
		
		// 53.加入契約支払方式コード
		outMap.set(JBSbatAKIFM011.KANYU_KEI_PAY_HOSHIKI_CD,		null);
		
		// 54.利用年月
		outMap.set(JBSbatAKIFM011.USE_YM,						tranMap.get(JBSbatAKIFM002.USE_YM));
		
		// 55.利用開始年月日
		outMap.set(JBSbatAKIFM011.USE_STAYMD,					tranMap.get(JBSbatAKIFM002.USE_STAYMD));
		
		// 56.利用終了年月日
		outMap.set(JBSbatAKIFM011.USE_ENDYMD,					tranMap.get(JBSbatAKIFM002.USE_ENDYMD));
		
		// 57.料金検証集計先パターンコード
		outMap.set(JBSbatAKIFM011.PRCKNS_SHUK_SAKI_PTN_CD,		null);
		
		// 58.料金検証集計元項目区分
		outMap.set(JBSbatAKIFM011.PRCKNS_SHUK_MOTO_KMK_DIV,		null);
		
		// 59.サービス詳細識別番号
		outMap.set(JBSbatAKIFM011.SVC_DTL_SKBT_NO,				tranMap.get(JBSbatAKIFM002.SVC_DTL_SKBT_NO));
		
		// 出力フラグ設定
		outMap.setOutFlg(true);
		
		// 出力処理
		outputInItem.addOutMapList(outMap);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeOutputInfo][outputItem = " + outMap.getMap().toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeOutputInfo]");
	}
	

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * @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;
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
