/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCHMdgcNkinDataDchs
*	ソースファイル名	：JBSbatCHMdgcNkinDataDchs.java
*	作成者				：富士通　
*	作成日				：2011年09月26日
*＜機能概要＞
*　窓口入金データ抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/09/26   富士通		新規作成
*	v36.00.00	2018/02/14   富士通		【ANK-3339-00-00】請求先番号21番台枯渇による対応
*********************************************************************/
package eo.business.service;

import java.util.Arrays;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatParamUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCHbatSeikyKaknoBusinessUtil;
import eo.business.util.file.JBSbatCHIFE015;
import eo.business.util.file.JBSbatCHIFE018;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JPCUtilCommon;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;

/**
* 窓口入金データ抽出 <p>
*<BR>
* @author 富士通
*/
public class JBSbatCHMdgcNkinDataDchs extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** エラー判定用シーケンス番号 */
	private static final String ERR_SEQ_NO = "0000001";
	
	/** 抽出対象（コンシューマ） */
	private static final String CHSHT_TG_CONS = "1";
	
	/** 請求収納業務共通クラス */
	private JCHbatSeikyKaknoBusinessUtil seikyUtil = null;
	
	/** レコード区分エラー */
	private String mdgcNkinE0001 = null;
	
	/** レコード区分並び順エラー */
	private String mdgcNkinE0002 = null;

	/** 退避．前回レコード区分 */
	private String bkLastRecDiv = null;
	
	/** 退避．レコード区分 */
	private String bkRecDiv = null;
	
	/** 退避．読取りシーケンス番号 */
	private String bkSeqNo = null;
	
	/** 退避．その他 */
	private String bkOthers = null;
	
	/** 退避．ヘッダ処理フラグ */
	private boolean headFlg = false;
	
	/** 退避．カウンタ */
	private int count = 0;
	
	/** 抽出対象 */
	private String tgCst = null;
	
// ANK-3339-00-00 MOD START
//	/** 抽出設定値*/
//	private String tgCstValue = null;
	/** 抽出設定値（複数値）*/
	private String[] tgCstValues = null;
// ANK-3339-00-00 MOD END
	
	/**
	 * 初期処理
	 * @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 + "]");
		
		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		
		// 業務パラメータ取得
		mdgcNkinE0001 = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_MDGC_NKIN_E0001);
		mdgcNkinE0002 = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_MDGC_NKIN_E0002);
// ANK-3339-00-00 MOD START
//		tgCstValue = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_CSM_DATA_SKBT_CD);
		tgCstValues = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_CSM_DATA_SKBT_CD).split(",");
// ANK-3339-00-00 MOD END
		
		paramUtil.close();
		
		// フリー項目より取得
		tgCst = super.freeItem;
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][tgCst=" + tgCst + "]");
// ANK-3339-00-00 MOD START
//		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][tgCstValue=" + tgCstValue + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][tgCstValue=" + tgCstValues + "]");
// ANK-3339-00-00 MOD END		
		seikyUtil = new JCHbatSeikyKaknoBusinessUtil(commonItem);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][mdgcNkinE0001=" + mdgcNkinE0001 + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][mdgcNkinE0002=" + mdgcNkinE0002 + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @param outputInItem 入力情報
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputInItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		assert inMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][inMap=" + inMap.getMap().toString() + "]"): true;
		
		// 入力 ＝ null の場合
		if(inMap == null)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力 ＝ null]");
			// 退避．前回レコード区分 ＝ "0"（ヘッダ） かつ 退避．読取りシーケンス番号 ≠ "0000001" の場合
			if(bkLastRecDiv.equals(JACStrConst.REC_DIV_HEADER) && !bkSeqNo.equals(ERR_SEQ_NO))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][退避．前回レコード区分 ＝ 0（ヘッダ） かつ 退避．読取りシーケンス番号 ≠ 0000001]");
				// エラーログ出力（エラーコード："ECHB0500AE"（レコード区分並び順エラー））
				// ワーニングログを出力する
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECHB0500AE);
				
				// 窓口入金結果情報エラー出力
				setOutErrHeader(bkOthers, bkRecDiv, outputInItem);
			}
			else
			{
				// 窓口入金データ抽出処理
				mdgcNyukinChsht(inMap, outputInItem, null);
				
			}
			return outputInItem;
		}
		
		// 退避．前回レコード区分 ＝ null の場合、ダミーレコード作成
		if(bkLastRecDiv == null)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][退避．前回レコード区分 ＝ null]");
			outputInItem.addOutMapList(new JBSbatServiceInterfaceMap());
		}
		
		String inRecDiv = inMap.getString(JBSbatCHIFE015.RECORD_DIV);
		
		// 入力．レコード区分 ≠ "0"（ヘッダ） かつ "5"（データ） の場合
		if(!inRecDiv.equals(JACStrConst.REC_DIV_HEADER) && !inRecDiv.equals(JACStrConst.REC_DIV_DATA))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力．レコード区分 ≠ 0（ヘッダ） かつ 5（データ）]");
			// エラーログ出力（エラーコード："ECHB0490AE"（レコード区分エラー））
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECHB0490AE);
			
			// 窓口入金結果情報エラー出力
			setOutErrOthers(inMap.getString(JBSbatCHIFE015.OTHERS), inRecDiv, outputInItem);
			
			// 退避処理
			bkLastRecDiv = inRecDiv;
			
			return outputInItem;
		}
		
		// 退避．レコード区分 ＝ null かつ 入力．レコード区分 ＝  "5"（データ） の場合
		if(bkRecDiv == null && inRecDiv.equals(JACStrConst.REC_DIV_DATA))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][退避．レコード区分 ＝ null かつ 入力．レコード区分 ＝  5（データ）]");
			// エラーログ出力（エラーコード："ECHB0500AE"（レコード区分並び順エラー））
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECHB0500AE);
			
			// 窓口入金結果情報エラー出力
			setOutErrData(inMap.getString(JBSbatCHIFE015.OTHERS), inRecDiv, outputInItem);
			
			// 退避処理
			bkLastRecDiv = inRecDiv;
			
			return outputInItem;
		}
		// 退避．前回レコード区分 ＝ "0"（ヘッダ） かつ 入力．レコード区分 ＝  "0"（ヘッダ） の場合
		else if(bkLastRecDiv != null && bkLastRecDiv.equals(JACStrConst.REC_DIV_HEADER) && inRecDiv.equals(JACStrConst.REC_DIV_HEADER))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][避．前回レコード区分 ＝ 0（ヘッダ） かつ 入力．レコード区分 ＝  0（ヘッダ）]");
			// エラーログを出力する。（エラーコード："ECHB0500AE"（レコード区分並び順エラー））
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECHB0500AE);
			
			// 窓口入金結果情報エラー出力
			setOutErrHeader(inMap.getString(JBSbatCHIFE015.OTHERS), inRecDiv, outputInItem);
			
			// 退避処理
			bkLastRecDiv = inRecDiv;
			
			return outputInItem;
		}
		
		// 退避処理
		bkLastRecDiv = inRecDiv;
		
		// 窓口入金データ抽出処理
		mdgcNyukinChsht(inMap , outputInItem, inRecDiv);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		
		return outputInItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		seikyUtil.close();
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 *  窓口入金データ抽出処理を行います。
	 *  
	 * @param inMap 入力電文
	 * @param outputItem 出力電文
	 * @param inRecDiv 入力．レコード区分
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void mdgcNyukinChsht(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputItem, String inRecDiv) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][mdgcNyukinChsht]");
		// 入力 ＝ null の場合
		if(inMap == null)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力 ＝ null]");
			// 退避．カウンタ ＝ 0 の場合
			if(count == 0)
			{
				count++;

				// 窓口入金結果情報受信コンシューマ（0件）
				setOutCons(outputItem, JACStrConst.REC_DIV_HEADER, 
						seikyUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, JACStrConst.KARA_MOJI, 72, false));
			}
		}
		// 入力．レコード区分 ＝ "0"（ヘッダ） の場合（ヘッダレコード退避処理）
		else if(inRecDiv.equals(JACStrConst.REC_DIV_HEADER))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][ 入力．レコード区分 ＝ 0（ヘッダ）]");
			bkRecDiv 	= inRecDiv;
			bkOthers 	= inMap.getString(JBSbatCHIFE015.OTHERS);
			bkSeqNo 	= inMap.getString(JBSbatCHIFE015.OTHERS).substring(0, 7);
			headFlg 	= true;
		}
		// 入力．レコード区分 ＝ "5"（データ） の場合（データレコード抽出判定処理）
		else if(inRecDiv.equals(JACStrConst.REC_DIV_DATA))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][ 入力．レコード区分 ＝ 5（データ）]");
			String chshtValue = inMap.getString(JBSbatCHIFE015.OTHERS).substring(11, 13);
// ANK-3339-00-00 MOD START
//			// フリー項目の抽出対象 ＝ "1"（コンシューマ） かつ 入力．その他（12〜13byte） ≠ フリー項目の抽出設定値（"21"） の場合
//			if(tgCst.equals(CHSHT_TG_CONS) && !chshtValue.equals(tgCstValue))
			// フリー項目の抽出対象 ＝ "1"（コンシューマ） かつ 入力．その他（12〜13byte）
			//                        ≠ 業務パラメータ設定値（コンシューマデータ識別コード（請求契約番号上2桁））の場合
			if(tgCst.equals(CHSHT_TG_CONS) && !Arrays.asList(tgCstValues).contains(chshtValue))
// ANK-3339-00-00 MOD END
			{
				// 処理なし
// ANK-3339-00-00 MOD START
//				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][ フリー項目の抽出対象 ＝ 1（コンシューマ） かつ 入力．その他（12〜13byte） ≠ フリー項目の抽出設定値（21）]");
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, 
						"[L][execute][ フリー項目の抽出対象 ＝ 1（コンシューマ） かつ " +
						"入力．その他（12〜13byte） ≠ 業務パラメータ設定値（コンシューマデータ識別コード（請求契約番号上2桁））]");
// ANK-3339-00-00 MOD END
			}
// ANK-3339-00-00 MOD START
//			// フリー項目の抽出対象 ≠ "1"（コンシューマ） かつ 入力．その他（12〜13byte） ＝ フリー項目の抽出設定値（"21"） の場合
//			else if(!tgCst.equals(CHSHT_TG_CONS) && chshtValue.equals(tgCstValue))
			// フリー項目の抽出対象 ≠ "1"（コンシューマ） かつ 入力．その他（12〜13byte）
			//                        ＝ 業務パラメータ設定値（コンシューマデータ識別コード（請求契約番号上2桁）） の場合
			else if(!tgCst.equals(CHSHT_TG_CONS) && Arrays.asList(tgCstValues).contains(chshtValue))
// ANK-3339-00-00 MOD END
			{
				// 処理なし
// ANK-3339-00-00 MOD START
//				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][フリー項目の抽出対象 ≠ 1（コンシューマ） かつ 入力．その他（12〜13byte） ＝ フリー項目の抽出設定値（21）]");
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, 
						"[L][execute][フリー項目の抽出対象 ≠ 1（コンシューマ） かつ " +
						"入力．その他（12〜13byte） ＝ 業務パラメータ設定値（コンシューマデータ識別コード（請求契約番号上2桁））]");
// ANK-3339-00-00 MOD END
			}
			else
			{
				// ヘッダ処理フラグ ＝ true
				if(headFlg)
				{
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][ヘッダ処理フラグ ＝ true]");
					count++;
					
					// 窓口入金結果情報受信コンシューマ（ヘッダ）
					setOutCons(outputItem, bkRecDiv, bkOthers.substring(7));
					
				}
				count++;
				
				// 窓口入金結果情報受信コンシューマ（データ）
				setOutCons(outputItem, inRecDiv, inMap.getString(JBSbatCHIFE015.OTHERS).substring(7));
			}
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][mdgcNyukinChsht]");
	}
	
	/**
	 * 窓口入金結果情報受信コンシューマに出力項目を設定します。
	 * 
	 * @param outputItem 出力電文
	 * @param recDiv レコード区分
	 * @param others その他
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void setOutCons(JBSbatOutputItem outputItem, String recDiv, String others) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setOutCons]");
		JBSbatServiceInterfaceMap consMap = new JBSbatServiceInterfaceMap();
		
		StringBuffer buf = new StringBuffer();
		buf.append(seikyUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.Zero, String.valueOf(count), 7, false)); 	// その他（1〜7バイト）
		buf.append(others);																								// その他（8〜79バイト）
		
		consMap.setString(JBSbatCHIFE015.RECORD_DIV, recDiv);		// レコード区分
		consMap.setString(JBSbatCHIFE015.OTHERS, buf.toString());	// その他
		
		// 出力フラグ　←　true
		consMap.setOutFlg(true);
		
		outputItem.addOutMapList(consMap);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setOutCons]");
	}
	
	/**
	 * 窓口入金結果情報エラーに出力項目を設定します。
	 * 
	 * @param others その他
	 * @param recDiv レコード区分
	 * @param outputItem 出力電文
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void setOutErrOthers(String others, String recDiv, JBSbatOutputItem outputItem) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setOutErrOthers]");
		JBSbatServiceInterfaceMap errMap = new JBSbatServiceInterfaceMap();
		
		errMap.setString(JBSbatCHIFE018.ERRKIND, 		JACStrConst.ERR_KUBUN_ERR);		// エラー種類
		errMap.setString(JBSbatCHIFE018.ERRNAIYO, 		mdgcNkinE0001);					// エラー内容
		errMap.setString(JBSbatCHIFE018.RECORD, 		JACStrConst.KARA_MOJI);			// レコード
		errMap.setString(JBSbatCHIFE018.SHEETNO, 		JACStrConst.KARA_MOJI);			// シートNO
		errMap.setString(JBSbatCHIFE018.BANKKIKAN, 		JACStrConst.KARA_MOJI);			// 金融機関
		errMap.setString(JBSbatCHIFE018.RECEIPTDAY, 	JACStrConst.KARA_MOJI);			// 領収日
		errMap.setString(JBSbatCHIFE018.NYUKIN_DAY, 	JACStrConst.KARA_MOJI);			// 入金日
		errMap.setString(JBSbatCHIFE018.JIGSHO_CD, 		JACStrConst.KARA_MOJI);			// 事業所コード
		errMap.setString(JBSbatCHIFE018.EMP_CD, 		JACStrConst.KARA_MOJI);			// 社員コード
		errMap.setString(JBSbatCHIFE018.SEIKY_YM, 		JACStrConst.KARA_MOJI);			// 請求年月
		errMap.setString(JBSbatCHIFE018.SEIKY_SAKI_NO, 	JACStrConst.KARA_MOJI);			// 請求契約年月
		errMap.setString(JBSbatCHIFE018.HAKKO_MON,	 	JACStrConst.KARA_MOJI);			// 発行月
		errMap.setString(JBSbatCHIFE018.HAKKO_SEQ,	 	JACStrConst.KARA_MOJI);			// 発行シーケンス
		errMap.setString(JBSbatCHIFE018.GUN,	 		JACStrConst.KARA_MOJI);			// 群
		errMap.setString(JBSbatCHIFE018.NYUKIN_AMNT, 	JACStrConst.KARA_MOJI);			// 入金額
		errMap.setString(JBSbatCHIFE018.ERR_RECORD, 	recDiv.concat(others));			// エラーコード
		
		errMap.setMap(JCHbatSeikyKaknoBusinessUtil.quote(errMap.getMap(), JACStrConst.DOUBLE_QUOTE, JACStrConst.DOUBLE_QUOTE));
		
		// 出力フラグ　←　true
		errMap.setOutFlg(true);
		
		outputItem.addOutMapList_2(errMap);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setOutErrOthers]");
	}
	
	/**
	 * 窓口入金結果情報エラーに出力項目を設定します。
	 * 
	 * @param others その他
	 * @param recDiv レコード区分
	 * @param outputItem 出力電文
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void setOutErrHeader(String others, String recDiv, JBSbatOutputItem outputItem) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setOutErrHeader]");
		JBSbatServiceInterfaceMap errMap = new JBSbatServiceInterfaceMap();
		
		errMap.setString(JBSbatCHIFE018.ERRKIND, 		JACStrConst.ERR_KUBUN_ERR);																// エラー種類
		errMap.setString(JBSbatCHIFE018.ERRNAIYO, 		mdgcNkinE0002);																			// エラー内容
		errMap.setString(JBSbatCHIFE018.RECORD, 		recDiv);																				// レコード
		errMap.setString(JBSbatCHIFE018.SHEETNO, 		others.substring(0, 7));																// シートNO
		errMap.setString(JBSbatCHIFE018.BANKKIKAN, 		others.substring(7, 11).concat(JACStrConst.HYPHEN).concat(others.substring(11, 14)));	// 金融機関
		errMap.setString(JBSbatCHIFE018.RECEIPTDAY, 	seikyUtil.formatYmd(others.substring(14, 20)));											// 領収日
		errMap.setString(JBSbatCHIFE018.NYUKIN_DAY, 	seikyUtil.formatYmd(others.substring(20, 26)));											// 入金日
		errMap.setString(JBSbatCHIFE018.JIGSHO_CD, 		others.substring(26, 31));																// 事業所コード
		errMap.setString(JBSbatCHIFE018.EMP_CD, 		others.substring(31, 35));																// 社員コード
		errMap.setString(JBSbatCHIFE018.SEIKY_YM, 		JACStrConst.KARA_MOJI);																	// 請求年月
		errMap.setString(JBSbatCHIFE018.SEIKY_SAKI_NO, 	JACStrConst.KARA_MOJI);																	// 請求契約年月
		errMap.setString(JBSbatCHIFE018.HAKKO_MON,	 	JACStrConst.KARA_MOJI);																	// 発行月
		errMap.setString(JBSbatCHIFE018.HAKKO_SEQ,	 	JACStrConst.KARA_MOJI);																	// 発行シーケンス
		errMap.setString(JBSbatCHIFE018.GUN,	 		JACStrConst.KARA_MOJI);																	// 群
		errMap.setString(JBSbatCHIFE018.NYUKIN_AMNT, 	JACStrConst.KARA_MOJI);																	// 入金額
		errMap.setString(JBSbatCHIFE018.ERR_RECORD, 	JACStrConst.KARA_MOJI);																	// エラーコード
		
		errMap.setMap(JCHbatSeikyKaknoBusinessUtil.quote(errMap.getMap(), JACStrConst.DOUBLE_QUOTE, JACStrConst.DOUBLE_QUOTE));
		
		// 出力フラグ　←　true
		errMap.setOutFlg(true);
		
		outputItem.addOutMapList_2(errMap);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setOutErrHeader]");
	}
	
	/**
	 * 窓口入金結果情報エラーに出力項目を設定します。
	 * 
	 * @param others その他
	 * @param recDiv レコード区分
	 * @param outputItem 出力電文
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void setOutErrData(String others, String recDiv, JBSbatOutputItem outputItem) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setOutErrData]");
		JBSbatServiceInterfaceMap errMap = new JBSbatServiceInterfaceMap();
		
		errMap.setString(JBSbatCHIFE018.ERRKIND, 		JACStrConst.ERR_KUBUN_ERR);								// エラー種類
		errMap.setString(JBSbatCHIFE018.ERRNAIYO, 		mdgcNkinE0002);											// エラー内容
		errMap.setString(JBSbatCHIFE018.RECORD, 		recDiv);												// レコード
		errMap.setString(JBSbatCHIFE018.SHEETNO, 		others.substring(0, 7));								// シートNO
		errMap.setString(JBSbatCHIFE018.BANKKIKAN, 		JACStrConst.KARA_MOJI);									// 金融機関
		errMap.setString(JBSbatCHIFE018.RECEIPTDAY, 	JACStrConst.KARA_MOJI);									// 領収日
		errMap.setString(JBSbatCHIFE018.NYUKIN_DAY, 	JACStrConst.KARA_MOJI);									// 入金日
		errMap.setString(JBSbatCHIFE018.JIGSHO_CD, 		JACStrConst.KARA_MOJI);									// 事業所コード
		errMap.setString(JBSbatCHIFE018.EMP_CD, 		JACStrConst.KARA_MOJI);									// 社員コード
		errMap.setString(JBSbatCHIFE018.SEIKY_YM, 		seikyUtil.formatYm(others.substring(7, 11)));			// 請求年月
		errMap.setString(JBSbatCHIFE018.SEIKY_SAKI_NO, 	others.substring(11, 21));								// 請求契約年月
		errMap.setString(JBSbatCHIFE018.HAKKO_MON,	 	others.substring(21, 23));								// 発行月
		errMap.setString(JBSbatCHIFE018.HAKKO_SEQ,	 	others.substring(24, 25));								// 発行シーケンス
		errMap.setString(JBSbatCHIFE018.GUN,	 		others.substring(25, 26));								// 群
		errMap.setString(JBSbatCHIFE018.NYUKIN_AMNT, 	JPCUtilCommon.formatNumber(others.substring(26, 38)));	// 入金額
		errMap.setString(JBSbatCHIFE018.ERR_RECORD, 	JACStrConst.KARA_MOJI);									// エラーコード
		
		errMap.setMap(JCHbatSeikyKaknoBusinessUtil.quote(errMap.getMap(), JACStrConst.DOUBLE_QUOTE, JACStrConst.DOUBLE_QUOTE));
		
		// 出力フラグ　←　true
		errMap.setOutFlg(true);
		
		outputItem.addOutMapList_2(errMap);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setOutErrData]");
	}
	
	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
