/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCHTwDtlInfoKumi
*	ソースファイル名	：JBSbatCHTwDtlInfoKumi.java
*	作成者				：富士通　
*	作成日				：2011年08月23日
*＜機能概要＞
*　通話明細情報組立処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/08/23   富士通		新規作成
*	v3.00		2012/06/05   FJ）冨井	【ANK-0024-04-00】処理見直しによる修正
*	v3.00		2012/06/26   FJ）冨井	【ST2-2012-0001216】ファイル項目・請求年月追加（戻し）
*	v3.01		2012/09/24   FJ）岡田	【IT1-2012-0001012】請求書印刷データ項目追加対応
*	v4.00		2012/12/03   FJ）後藤	マッチングに修正
*	v4.01		2013/01/22   FJ) 小柴	【ST3-2013-0000172】内訳情報組立処理・口振警告終了
*	v4.02		2013/02/01   FJ) 小柴	【内部管理番号-0000697】印刷枚数オーバーフラグが1のとき、マスタデータを次に進めるフラグ立てが漏れていたのを修正
*	v4.03		2013/02/28   FJ) 小柴	【】出力項目に支払方法コード（ソート用）を追加
*********************************************************************/
package eo.business.service;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatParamUtil;
import eo.business.common.JACbatRknBusinessUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatMatchServiceInterface;
import eo.business.common.JCHbatSeikyKaknoBusinessUtil;
import eo.business.util.file.JBSbatCHIFM081;
import eo.business.util.file.JBSbatCHIFM091;
import eo.business.util.file.JBSbatCHIFM147;
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;
import eo.framework.util.JBSbatCheckUtil;

/**
* 通話明細情報組立処理 <p>
*<BR>
* @author 富士通
*/
public class JBSbatCHTwDtlInfoKumi extends JBSbatBusinessService implements JBSbatMatchServiceInterface
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** キーマッチ処理フラグ*/
	private boolean matchProcFlg;

	/** マスタファイル処理フラグ*/
	private boolean mastProcFlg;

	/** トランファイル処理フラグ*/
	private boolean tranProcFlg;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**  支払方法 */
	private HashSet<String> payWaySet = null;
	
	/** 明細＿発着区分（固定値） */
	private String dtlHtckDivDef = null;

	/** 明細＿電話区分（固定値） */
	private String dtlTelDivDef = null;

	/** 明細＿予備（固定値） */
	private String dtlYobiDef = null;

	/** 合計＿枚数（固定値） */
	private String gokeiPageCntDef = null;

	/** 合計＿表裏区分（固定値） */
	private String gokeiUrDivDef = null;

	/** 合計＿行（固定値） */
	private String gokeiRowDef = null;

	/** 合計＿表示区分（固定値） */
	private String gokeiDspDivDef = null;

	/** 合計＿名称１（固定値） */
	private String gokeiNm1Def = null;

	/** 合計＿通話数（固定値） */
	private String gokeiTuwaCntDef = null;

	/** 合計＿名称２（固定値） */
	private String gokeiNm2Def = null;

	/** 合計＿予備１（固定値） */
	private String gokeiYobi1Def = null;

	/** 合計＿料金表示フラグ（固定値） */
	private String gokeiPrcDspFlgDef = null;

	/** 合計＿通話料（固定値） */
	private String gokeiTuwaPrcDef = null;

	/** 合計＿備考（固定値） */
	private String gokeiBikoDef = null;

	/** 合計＿予備２・共通（固定値） */
	private String gokeiYobi2CmnDef = null;
	
	/** 合計＿予備２（固定値） */
	private String gokeiYobi2Def = null;
	
	/** 管理＿お客様ＩＤ（固定値） */
	private String knriCustIdDef = null;
	
	/** 管理＿編集方法（固定値） */
	private String knriHenshuDef = null;
	
	/** 管理＿予備（固定値） */
	private String knriYobiDef = null;
	
	/** 管理＿レコードＳＥＱ（固定値） */
	private String knriRecSeqDef = null;
	
	/** レコードＳＥＱ（固定値） */
	private String recSeqDef = null;
	
	/** 同封物種別（固定値） */
	private String dohubtSbtDef = null;
	
	/** 同封物種別部数（固定値） */
	private String dohubtSbtCntDef = null;
	
	/** 明細＿予備２（固定値） */
	private String dtlYobi2Def = null;

	/** 同封コード（桁数） */
	private static final int DOFU_CODE_LENGTH = 12;

	/** 同封制御請求契約番号（桁数） */
	private static final int DOFU_CTRL_SEIKY_KEI_NO_LENGTH = 12;

	/** 組立連番（桁数） */
	private static final int KUMI_RENBAN_LENGTH = 5;

	/** 支払方法コード（ソート順） */
	private static final int PAY_WAY_SORT_LENGTH = 1;
	
	/** 同封制御＿サービス契約番号（桁数） */
	private static final int DOFU_SVC_KEI_NO_LENGTH = 10;

	/** 同封制御＿課金先電話番号（桁数） */
	private static final int DOFU_KAKINS_TELNO_LENGTH = 12;

	/** レコード区分（桁数） */
	private static final int REC_DIV_LENGTH = 3;

	/** シーケンス番号（桁数） */
	private static final int SEQ_NO_LENGTH = 5;

	/** 請求契約番号（桁数） */
	private static final int SEIKY_KEI_NO_LENGTH = 10;

	/** 電話番号（桁数） */
	private static final int TEL_NO_LENGTH = 12;

	/** 郵便番号（桁数） */
	private static final int PCD_LENGTH = 8;

	/** 封書区分（桁数） */
	private static final int FUSHO_DIV_LENGTH = 2;
	
	/** 同封物種別（桁数） */
	private static final int DOHUBT_SBT_LENGTH = 3;

	/** 同封物種別部数（桁数） */
	private static final int DOHUBT_SBT_CNT_LENGTH = 1;

	/** 管理＿お客様ＩＤ（桁数） */
	private static final int KNRI_CUST_ID_LENGTH = 10;

	/** 管理＿電話番号編集（桁数） */
	private static final int KNRI_TELNO_HENSHU_LENGTH = 14;

	/** 管理＿請求年月西暦（桁数） */
	private static final int KNRI_SIKY_YM_AD_LENGTH = 6;

	/** 管理＿明細出力行数（桁数） */
	private static final int KNRI_DTL_OUT_CNT_LENGTH = 6;

	/** 管理＿合計出力行数（桁数） */
	private static final int KNRI_GOKEI_OUT_CNT_LENGTH = 6;

	/** 管理＿明細面数（桁数） */
	private static final int KNRI_DTL_MEN_LENGTH = 5;

	/** 管理＿編集方法（桁数） */
	private static final int KNRI_HENSHU_LENGTH = 1;

	/** 管理＿予備（桁数） */
	private static final int KNRI_YOBI_LENGTH = 1135;

	/** 管理＿レコードＳＥＱ（桁数） */
	private static final int KNRI_REC_SEQ_LENGTH = 7;

	/** 明細＿枚数（桁数） */
	private static final int DTL_PAGE_CNT_LENGTH = 5;

	/** 明細＿行（桁数） */
	private static final int DTL_ROW_LENGTH = 2;

	/** 明細＿通話開始月日（桁数） */
	private static final int DTL_TW_STA_MD_LENGTH = 4;

	/** 明細＿通話開始曜日（桁数） */
	private static final int DTL_TW_STA_DOW_LENGTH = 1;

	/** 明細＿通話開始時間（桁数） */
	private static final int DTL_TW_STA_TIME_LENGTH = 7;

	/** 明細＿通話時間（桁数） */
	private static final int DTL_TUWA_TIME_LENGTH = 7;

	/** 明細＿発着区分（桁数） */
	private static final int DTL_HTCK_DIV_LENGTH = 2;

	/** 明細＿電話区分（桁数） */
	private static final int DTL_TEL_DIV_LENGTH = 12;

	/** 明細＿電話番号編集（桁数） */
	private static final int DTL_TEL_NO_HENSHU_LENGTH = 22;

	/** 明細＿免税区分（桁数） */
	private static final int DTL_TAX_DIV_LENGTH = 1;
	
	/** 明細＿通話料（桁数） */
	private static final int DTL_TUWA_PRC_LENGTH = 11;

	/** 明細＿通話種別（桁数） */
	private static final int DTL_PCALL_SBT_LENGTH = 5;

	/** 明細＿備考（桁数） */
	private static final int DTL_BIKO_LENGTH = 10;

	/** 明細＿予備（桁数） */
	private static final int DTL_YOBI_LENGTH = 131;

	/** 明細＿予備２（桁数） */
	private static final int DTL_YOBI2_LENGTH = 218;

	/** 合計＿枚数（桁数） */
	private static final int GOKEI_PAGE_CNT_LENGTH = 5;

	/** 合計＿表裏区分（桁数） */
	private static final int GOKEI_UR_DIV_LENGTH = 1;

	/** 合計＿行（桁数） */
	private static final int GOKEI_ROW_LENGTH = 2;

	/** 合計＿表示区分（桁数） */
	private static final int GOKEI_DSP_DIV_LENGTH = 2;

	/** 合計＿名称１（桁数） */
	private static final int GOKEI_NM1_LENGTH = 6;

	/** 合計＿通話数（桁数） */
	private static final int GOKEI_TUWA_CNT_LENGTH = 6;

	/** 合計＿名称２（桁数） */
	private static final int GOKEI_NM2_LENGTH = 2;

	/** 合計＿予備１（桁数） */
	private static final int GOKEI_YOBI1_LENGTH = 27;

	/** 合計＿料金表示フラグ（桁数） */
	private static final int GOKEI_PRC_DSP_FLG_LENGTH = 1;

	/** 合計＿通話料（桁数） */
	private static final int GOKEI_TUWA_PRC_LENGTH = 11;

	/** 合計＿備考（桁数） */
	private static final int GOKEI_BIKO_LENGTH = 10;

	/** 合計＿予備２（桁数） */
	private static final int GOKEI_YOBI2_LENGTH = 218;
	
	/** 合計＿予備２（桁数） */
	private static final int GOKEI_YOBI2_CMN_LENGTH = 149;

	/** レコードＳＥＱ（桁数） */
	private static final int REC_SEQ_LENGTH = 7;

	/** 2 */
	private static final BigDecimal DEC2 = new BigDecimal("2");

	/** 固定値：0 */
	private static final String ZERO = "0";

	/** 処理件数 */
	private int count = 0;
	
	/** 明細出力行数 */
	private int detailOutRow = 0;
	
	/** 合計出力行数 */
	private int totalOutRow = 0;
	
	/** 通話明細格納数 */
	private int tuwadetailCnt = 0;
	
	/** 課税分名称 */
	private String kazeiNm = null;
	
	/** 免税分名称 */
	private String menzeiNm = null;
	
	/** 通話分名称 */
	private String tuwaNm = null;
	
	/** 明細面数 */
	private String dtlMen = null;
	
	/** 前回．入力 */
	private JBSbatServiceInterfaceMap lastMap = null;
	
	/** 管理レコード */
	private JBSbatServiceInterfaceMap kanriMap = null;
	
	/** 出力レコード */
	private JBSbatServiceInterfaceMap outMap = null;
	
	/** 請求収納業務共通クラス */
	private JCHbatSeikyKaknoBusinessUtil chBusinessUtil = null;
	
	/** 明細行キーリスト */
	private ArrayList<String> detailKeyList = null;
	
	/** 明細行出力リスト */
	private ArrayList<String> detailValueList = null;
	
	/** 合計行キーリスト */
	private ArrayList<String> totalKeyList = null;
	
	/** 合計行出力リスト */
	private ArrayList<String> totalValueList = null;
	
	/** 退避．前回ＫＥＹ１（同封コード＋請求契約番号＋サービス契約番号＋課金先電話番号） */
	private String tihBfKey1 = null;
	
	/** 退避．前回ＫＥＹ２（同封コード＋請求契約番号） */
	private String tihBfKey2 = null;
	
	/** 退避．前回ＫＥＹ３（請求契約番号） */
	private String tihBfKey3 = null;
	
	/** 退避．明細格納数 */
	private int dtlKaknoCnt = 0;
	
	/** 退避．合計格納数 */
	private int gkKaknoCnt = 0;

	/** 退避．組立連番 */
	private int kumiRenBan = 0;
	
	/** シーケンス番号 */
	private int seqNo = 0;
	
	/** 管理フラグ */
	boolean kanriFlg = true;
	
	/** 入力Ｍファイル名（請求内訳印刷データ） */
	private static final String TRN_FILE_NM = "通話明細印刷データ";
	
	/** 入力Ｔファイル名（請求書面数データ） */
	private static final String MST_FILE_NM = "請求書面数データ";
	
	/** 処理終了判定フラグ */
	private boolean endFlg = true;
	
	/** BigDecimal 100 */
	private BigDecimal HUNDRED = new BigDecimal(100);
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial]");
		
		chBusinessUtil = new JCHbatSeikyKaknoBusinessUtil(commonItem);
		
		// パラメータ取得クラス生成
		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		
		// FREEITEMの取得
		payWaySet = new HashSet<String>();
		
		// バッチ共通パラメータ．フリー項目から支払方法を取得
		if (super.freeItem != null)
		{
			String[] payWayArray = super.freeItem.split(JACStrConst.FREE_DIV);
			
			for (int i = 0; i < payWayArray.length; i++)
			{
				payWaySet.add(payWayArray[i]);
			}
		}
		
		// システムパラメータ情報を取得する
		// 通話明細格納数取得
		tuwadetailCnt = Integer.parseInt(paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_TUWA_OCCURS_CNT));
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "通話明細格納数：" + tuwadetailCnt);
		
		// 課税分名称取得
		kazeiNm = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_KAZEI_NM);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "課税分名称：" + kazeiNm);
		
		// 免税分名称取得
		menzeiNm = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_MENZEI_NM);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "免税分名称：" + menzeiNm);
		
		// 通話分名称取得
		tuwaNm = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_TUWA_NM);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "通話分名称：" + tuwaNm);
		
		paramUtil.close();
		
		// 明細行キーリスト 
		detailKeyList = new ArrayList<String>();
		
		// 明細行出力リスト 
		detailValueList = new ArrayList<String>();
		
		// 合計行キーリスト 
		totalKeyList = new ArrayList<String>();
		
		// 合計行出力リスト
		totalValueList = new ArrayList<String>();

		// 明細＿発着区分（空白）
		dtlHtckDivDef = chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, JACStrConst.KARA_MOJI, DTL_HTCK_DIV_LENGTH, true);

		// 明細＿電話区分（空白）
		dtlTelDivDef = chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, JACStrConst.KARA_MOJI, DTL_TEL_DIV_LENGTH, true);

		// 明細＿予備（空白）
		dtlYobiDef = chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, JACStrConst.KARA_MOJI, DTL_YOBI_LENGTH, true);

		// 合計＿枚数（空白）
		gokeiPageCntDef = chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, JACStrConst.KARA_MOJI, GOKEI_PAGE_CNT_LENGTH, true);

		// 合計＿表裏区分（空白）
		gokeiUrDivDef = chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, JACStrConst.KARA_MOJI, GOKEI_UR_DIV_LENGTH, true);

		// 合計＿行（空白）
		gokeiRowDef = chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, JACStrConst.KARA_MOJI, GOKEI_ROW_LENGTH, true);

		// 合計＿表示区分（空白）
		gokeiDspDivDef = chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, JACStrConst.KARA_MOJI, GOKEI_DSP_DIV_LENGTH, true);

		// 合計＿名称１（空白）
		gokeiNm1Def = chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.Space, JACStrConst.KARA_MOJI, GOKEI_NM1_LENGTH, true);

		// 合計＿通話数（空白）
		gokeiTuwaCntDef = chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, JACStrConst.KARA_MOJI, GOKEI_TUWA_CNT_LENGTH, true);

		// 合計＿名称２（空白）
		gokeiNm2Def = chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.Space, JACStrConst.KARA_MOJI, GOKEI_NM2_LENGTH, true);

		// 合計＿予備１（空白）
		gokeiYobi1Def = chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, JACStrConst.KARA_MOJI, GOKEI_YOBI1_LENGTH, true);

		// 合計＿料金表示フラグ（空白）
		gokeiPrcDspFlgDef = chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, JACStrConst.KARA_MOJI, GOKEI_PRC_DSP_FLG_LENGTH, true);

		// 合計＿通話料（空白）
		gokeiTuwaPrcDef = chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, JACStrConst.KARA_MOJI, GOKEI_TUWA_PRC_LENGTH, true);

		// 合計＿備考（空白）
		gokeiBikoDef = chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.Space, JACStrConst.KARA_MOJI, GOKEI_BIKO_LENGTH , true);

		// 合計＿予備２（空白）
		gokeiYobi2Def = chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, JACStrConst.KARA_MOJI, GOKEI_YOBI2_LENGTH, true);
		
		// 管理＿お客様ＩＤ
		knriCustIdDef = chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, JACStrConst.KARA_MOJI, KNRI_CUST_ID_LENGTH, true);
		
		// 管理＿編集方法
		knriHenshuDef = chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, JACStrConst.KARA_MOJI, KNRI_HENSHU_LENGTH, true);
		
		// 管理＿予備
		knriYobiDef = chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, JACStrConst.KARA_MOJI, KNRI_YOBI_LENGTH, true);
		
		// 管理＿レコードＳＥＱ
		knriRecSeqDef = chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, JACStrConst.KARA_MOJI, KNRI_REC_SEQ_LENGTH, true);
		
		// レコードＳＥＱ
		recSeqDef = chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, JACStrConst.KARA_MOJI, REC_SEQ_LENGTH, true);
		
		// 同封物種別
		dohubtSbtDef = chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, JACStrConst.KARA_MOJI, DOHUBT_SBT_LENGTH, true);
		
		// 同封物種別部数
		dohubtSbtCntDef = chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, JACStrConst.KARA_MOJI, DOHUBT_SBT_CNT_LENGTH, true);
		
		// 明細＿予備２
		dtlYobi2Def = chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, JACStrConst.KARA_MOJI, DTL_YOBI2_LENGTH, true);
		
		// 合計＿予備２（共通）
		gokeiYobi2CmnDef = chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, JACStrConst.KARA_MOJI, GOKEI_YOBI2_CMN_LENGTH, true);
		
		// 出力レコード
		outMap = new JBSbatServiceInterfaceMap();
		
		// 管理レコード
		kanriMap = new JBSbatServiceInterfaceMap();
		
		// 前回レコード
		lastMap = new JBSbatServiceInterfaceMap();
		
		// 明細行キー設定
		detailKeyList.add(JBSbatCHIFM091.DTL_PAGE_CNT_1);		// 明細＿枚数＿１
		detailKeyList.add(JBSbatCHIFM091.DTL_UR_DIV_1);			// 明細＿表裏区分＿１
		detailKeyList.add(JBSbatCHIFM091.DTL_ROW_1);			// 明細＿行＿１
		detailKeyList.add(JBSbatCHIFM091.DTL_DSP_DIV_1);		// 明細＿表示区分＿１
		detailKeyList.add(JBSbatCHIFM091.DTL_TW_STA_MD_1);		// 明細＿通話開始月日＿１
		detailKeyList.add(JBSbatCHIFM091.DTL_TW_STA_DOW_1);		// 明細＿通話開始曜日＿１
		detailKeyList.add(JBSbatCHIFM091.DTL_TW_STA_TIME_1);	// 明細＿通話開始時間＿１
		detailKeyList.add(JBSbatCHIFM091.DTL_TUWA_TIME_1);		// 明細＿通話時間＿１
		detailKeyList.add(JBSbatCHIFM091.DTL_HTCK_DIV_1);		// 明細＿発着区分＿１
		detailKeyList.add(JBSbatCHIFM091.DTL_TEL_DIV_1);		// 明細＿電話区分＿１
		detailKeyList.add(JBSbatCHIFM091.DTL_TEL_NO_HENSHU_1);	// 明細＿電話番号編集＿１
		detailKeyList.add(JBSbatCHIFM091.DTL_PRC_DSP_FLG_1);	// 明細＿料金表示フラグ＿１
		detailKeyList.add(JBSbatCHIFM091.DTL_TAX_DIV_1);		// 明細＿免税区分＿１
		detailKeyList.add(JBSbatCHIFM091.DTL_TUWA_PRC_1);		// 明細＿通話料＿１
		detailKeyList.add(JBSbatCHIFM091.DTL_PCALL_SBT_1);		// 明細＿通話種別＿１
		detailKeyList.add(JBSbatCHIFM091.DTL_BIKO_1);			// 明細＿備考＿１
		detailKeyList.add(JBSbatCHIFM091.DTL_YOBI_1);			// 明細＿予備＿１
		detailKeyList.add(JBSbatCHIFM091.DTL_PAGE_CNT_2);		// 明細＿枚数＿２
		detailKeyList.add(JBSbatCHIFM091.DTL_UR_DIV_2);			// 明細＿表裏区分＿２
		detailKeyList.add(JBSbatCHIFM091.DTL_ROW_2);			// 明細＿行＿２
		detailKeyList.add(JBSbatCHIFM091.DTL_DSP_DIV_2);		// 明細＿表示区分＿２
		detailKeyList.add(JBSbatCHIFM091.DTL_TW_STA_MD_2);		// 明細＿通話開始月日＿２
		detailKeyList.add(JBSbatCHIFM091.DTL_TW_STA_DOW_2);		// 明細＿通話開始曜日＿２
		detailKeyList.add(JBSbatCHIFM091.DTL_TW_STA_TIME_2);	// 明細＿通話開始時間＿２
		detailKeyList.add(JBSbatCHIFM091.DTL_TUWA_TIME_2);		// 明細＿通話時間＿２
		detailKeyList.add(JBSbatCHIFM091.DTL_HTCK_DIV_2);		// 明細＿発着区分＿２
		detailKeyList.add(JBSbatCHIFM091.DTL_TEL_DIV_2);		// 明細＿電話区分＿２
		detailKeyList.add(JBSbatCHIFM091.DTL_TEL_NO_HENSHU_2);	// 明細＿電話番号編集＿２
		detailKeyList.add(JBSbatCHIFM091.DTL_PRC_DSP_FLG_2);	// 明細＿料金表示フラグ＿２
		detailKeyList.add(JBSbatCHIFM091.DTL_TAX_DIV_2);		// 明細＿免税区分＿２
		detailKeyList.add(JBSbatCHIFM091.DTL_TUWA_PRC_2);		// 明細＿通話料＿２
		detailKeyList.add(JBSbatCHIFM091.DTL_PCALL_SBT_2);		// 明細＿通話種別＿２
		detailKeyList.add(JBSbatCHIFM091.DTL_BIKO_2);			// 明細＿備考＿２
		detailKeyList.add(JBSbatCHIFM091.DTL_YOBI_2);			// 明細＿予備＿２
		detailKeyList.add(JBSbatCHIFM091.DTL_PAGE_CNT_3);		// 明細＿枚数＿３
		detailKeyList.add(JBSbatCHIFM091.DTL_UR_DIV_3);			// 明細＿表裏区分＿３
		detailKeyList.add(JBSbatCHIFM091.DTL_ROW_3);			// 明細＿行＿３
		detailKeyList.add(JBSbatCHIFM091.DTL_DSP_DIV_3);		// 明細＿表示区分＿３
		detailKeyList.add(JBSbatCHIFM091.DTL_TW_STA_MD_3);		// 明細＿通話開始月日＿３
		detailKeyList.add(JBSbatCHIFM091.DTL_TW_STA_DOW_3);		// 明細＿通話開始曜日＿３
		detailKeyList.add(JBSbatCHIFM091.DTL_TW_STA_TIME_3);	// 明細＿通話開始時間＿３
		detailKeyList.add(JBSbatCHIFM091.DTL_TUWA_TIME_3);		// 明細＿通話時間＿３
		detailKeyList.add(JBSbatCHIFM091.DTL_HTCK_DIV_3);		// 明細＿発着区分＿３
		detailKeyList.add(JBSbatCHIFM091.DTL_TEL_DIV_3);		// 明細＿電話区分＿３
		detailKeyList.add(JBSbatCHIFM091.DTL_TEL_NO_HENSHU_3);	// 明細＿電話番号編集＿３
		detailKeyList.add(JBSbatCHIFM091.DTL_PRC_DSP_FLG_3);	// 明細＿料金表示フラグ＿３
		detailKeyList.add(JBSbatCHIFM091.DTL_TAX_DIV_3);		// 明細＿免税区分＿３
		detailKeyList.add(JBSbatCHIFM091.DTL_TUWA_PRC_3);		// 明細＿通話料＿３
		detailKeyList.add(JBSbatCHIFM091.DTL_PCALL_SBT_3);		// 明細＿通話種別＿３
		detailKeyList.add(JBSbatCHIFM091.DTL_BIKO_3);			// 明細＿備考＿３
		detailKeyList.add(JBSbatCHIFM091.DTL_YOBI_3);			// 明細＿予備＿３
		detailKeyList.add(JBSbatCHIFM091.DTL_PAGE_CNT_4);		// 明細＿枚数＿４
		detailKeyList.add(JBSbatCHIFM091.DTL_UR_DIV_4);			// 明細＿表裏区分＿４
		detailKeyList.add(JBSbatCHIFM091.DTL_ROW_4);			// 明細＿行＿４
		detailKeyList.add(JBSbatCHIFM091.DTL_DSP_DIV_4);		// 明細＿表示区分＿４
		detailKeyList.add(JBSbatCHIFM091.DTL_TW_STA_MD_4);		// 明細＿通話開始月日＿４
		detailKeyList.add(JBSbatCHIFM091.DTL_TW_STA_DOW_4);		// 明細＿通話開始曜日＿４
		detailKeyList.add(JBSbatCHIFM091.DTL_TW_STA_TIME_4);	// 明細＿通話開始時間＿４
		detailKeyList.add(JBSbatCHIFM091.DTL_TUWA_TIME_4);		// 明細＿通話時間＿４
		detailKeyList.add(JBSbatCHIFM091.DTL_HTCK_DIV_4);		// 明細＿発着区分＿４
		detailKeyList.add(JBSbatCHIFM091.DTL_TEL_DIV_4);		// 明細＿電話区分＿４
		detailKeyList.add(JBSbatCHIFM091.DTL_TEL_NO_HENSHU_4);	// 明細＿電話番号編集＿４
		detailKeyList.add(JBSbatCHIFM091.DTL_PRC_DSP_FLG_4);	// 明細＿料金表示フラグ＿４
		detailKeyList.add(JBSbatCHIFM091.DTL_TAX_DIV_4);		// 明細＿免税区分＿４
		detailKeyList.add(JBSbatCHIFM091.DTL_TUWA_PRC_4);		// 明細＿通話料＿４
		detailKeyList.add(JBSbatCHIFM091.DTL_PCALL_SBT_4);		// 明細＿通話種別＿４
		detailKeyList.add(JBSbatCHIFM091.DTL_BIKO_4);			// 明細＿備考＿４
		detailKeyList.add(JBSbatCHIFM091.DTL_YOBI_4);			// 明細＿予備＿４

		// 合計行キー設定
		totalKeyList.add(JBSbatCHIFM091.GOKEI_PAGE_CNT_1);		// 合計＿枚数＿１
		totalKeyList.add(JBSbatCHIFM091.GOKEI_UR_DIV_1);		// 合計＿表裏区分＿１
		totalKeyList.add(JBSbatCHIFM091.GOKEI_ROW_1);			// 合計＿行＿１
		totalKeyList.add(JBSbatCHIFM091.GOKEI_DSP_DIV_1);		// 合計＿表示区分＿１
		totalKeyList.add(JBSbatCHIFM091.GOKEI_NM1_1);			// 合計＿名称１＿１
		totalKeyList.add(JBSbatCHIFM091.GOKEI_TUWA_CNT_1);		// 合計＿通話数＿１
		totalKeyList.add(JBSbatCHIFM091.GOKEI_NM2_1);			// 合計＿名称２＿１
		totalKeyList.add(JBSbatCHIFM091.GOKEI_YOBI1_1);			// 合計＿予備１＿１
		totalKeyList.add(JBSbatCHIFM091.GOKEI_PRC_DSP_FLG_1);	// 合計＿料金表示フラグ＿１
		totalKeyList.add(JBSbatCHIFM091.GOKEI_TUWA_PRC_1);		// 合計＿通話料＿１
		totalKeyList.add(JBSbatCHIFM091.GOKEI_BIKO_1);			// 合計＿備考＿１
		totalKeyList.add(JBSbatCHIFM091.GOKEI_YOBI2_1);			// 合計＿予備２＿１
		totalKeyList.add(JBSbatCHIFM091.GOKEI_PAGE_CNT_2);		// 合計＿枚数＿２
		totalKeyList.add(JBSbatCHIFM091.GOKEI_UR_DIV_2);		// 合計＿表裏区分＿２
		totalKeyList.add(JBSbatCHIFM091.GOKEI_ROW_2);			// 合計＿行＿２
		totalKeyList.add(JBSbatCHIFM091.GOKEI_DSP_DIV_2);		// 合計＿表示区分＿２
		totalKeyList.add(JBSbatCHIFM091.GOKEI_NM1_2);			// 合計＿名称１＿２
		totalKeyList.add(JBSbatCHIFM091.GOKEI_TUWA_CNT_2);		// 合計＿通話数＿２
		totalKeyList.add(JBSbatCHIFM091.GOKEI_NM2_2);			// 合計＿名称２＿２
		totalKeyList.add(JBSbatCHIFM091.GOKEI_YOBI1_2);			// 合計＿予備１＿２
		totalKeyList.add(JBSbatCHIFM091.GOKEI_PRC_DSP_FLG_2);	// 合計＿料金表示フラグ＿２
		totalKeyList.add(JBSbatCHIFM091.GOKEI_TUWA_PRC_2);		// 合計＿通話料＿２
		totalKeyList.add(JBSbatCHIFM091.GOKEI_BIKO_2);			// 合計＿備考＿２
		totalKeyList.add(JBSbatCHIFM091.GOKEI_YOBI2_2);			// 合計＿予備２＿２
		totalKeyList.add(JBSbatCHIFM091.GOKEI_PAGE_CNT_3);		// 合計＿枚数＿３
		totalKeyList.add(JBSbatCHIFM091.GOKEI_UR_DIV_3);		// 合計＿表裏区分＿３
		totalKeyList.add(JBSbatCHIFM091.GOKEI_ROW_3);			// 合計＿行＿３
		totalKeyList.add(JBSbatCHIFM091.GOKEI_DSP_DIV_3);		// 合計＿表示区分＿３
		totalKeyList.add(JBSbatCHIFM091.GOKEI_NM1_3);			// 合計＿名称１＿３
		totalKeyList.add(JBSbatCHIFM091.GOKEI_TUWA_CNT_3);		// 合計＿通話数＿３
		totalKeyList.add(JBSbatCHIFM091.GOKEI_NM2_3);			// 合計＿名称２＿３
		totalKeyList.add(JBSbatCHIFM091.GOKEI_YOBI1_3);			// 合計＿予備１＿３
		totalKeyList.add(JBSbatCHIFM091.GOKEI_PRC_DSP_FLG_3);	// 合計＿料金表示フラグ＿３
		totalKeyList.add(JBSbatCHIFM091.GOKEI_TUWA_PRC_3);		// 合計＿通話料＿３
		totalKeyList.add(JBSbatCHIFM091.GOKEI_BIKO_3);			// 合計＿備考＿３
		totalKeyList.add(JBSbatCHIFM091.GOKEI_YOBI2_3);			// 合計＿予備２＿３
		totalKeyList.add(JBSbatCHIFM091.GOKEI_PAGE_CNT_4);		// 合計＿枚数＿４
		totalKeyList.add(JBSbatCHIFM091.GOKEI_UR_DIV_4);		// 合計＿表裏区分＿４
		totalKeyList.add(JBSbatCHIFM091.GOKEI_ROW_4);			// 合計＿行＿４
		totalKeyList.add(JBSbatCHIFM091.GOKEI_DSP_DIV_4);		// 合計＿表示区分＿４
		totalKeyList.add(JBSbatCHIFM091.GOKEI_NM1_4);			// 合計＿名称１＿４
		totalKeyList.add(JBSbatCHIFM091.GOKEI_TUWA_CNT_4);		// 合計＿通話数＿４
		totalKeyList.add(JBSbatCHIFM091.GOKEI_NM2_4);			// 合計＿名称２＿４
		totalKeyList.add(JBSbatCHIFM091.GOKEI_YOBI1_4);			// 合計＿予備１＿４
		totalKeyList.add(JBSbatCHIFM091.GOKEI_PRC_DSP_FLG_4);	// 合計＿料金表示フラグ＿４
		totalKeyList.add(JBSbatCHIFM091.GOKEI_TUWA_PRC_4);		// 合計＿通話料＿４
		totalKeyList.add(JBSbatCHIFM091.GOKEI_BIKO_4);			// 合計＿備考＿４
		totalKeyList.add(JBSbatCHIFM091.GOKEI_YOBI2_4);			// 合計＿予備２＿４

		
		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)
			// 入力MのみNullの場合
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力MのみNull]");
			// トランファイル処理フラグを設定する
			this.setTranProcFlg(true);
			if(!endFlg)
			{

				count++;

				// 出力
				// 4. 通話明細情報組立ファイル（通話明細情報レコード）出力
				outPutDtlInfo(outputInItem, mastMap);
				
				this.kumiRenBan = 1;
				
				kanriMap.setString(JBSbatCHIFM091.KUMI_RENBAN, chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.Zero,
						String.valueOf(kumiRenBan), KUMI_RENBAN_LENGTH, false));

				// 5. 通話明細情報組立ファイル（通話明細管理情報レコード）出力
				outPutDtlKanriInfo(outputInItem);
				endFlg = true;
			}

		}
		else if(tranMap == null)
			// 入力TのみNullの場合
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力TのみNull]");
			String[] msgParam = new String[] {TRN_FILE_NM, MST_FILE_NM};
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECHB1470KW, msgParam);	
			// マスタファイル処理フラグを設定する
			this.setMastProcFlg(true);
		}
		else
		{

			// 出力対象チェック
			// 起動引数の支払方法と請求方法コードが一致しない場合、
			String seikyWayCd = mastMap.getString(JBSbatCHIFM081.PAY_WAY_CD);
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][seikyWayCd：" + seikyWayCd + "]");
			if (!payWaySet.contains(seikyWayCd))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][処理対象外]");
				// マスタファイル処理フラグを設定する
				this.setMastProcFlg(true);
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
				return outputInItem;
			}
		
			// マッチングキー設定
			// マスタキー
			String mastKey = mastMap.getString(JBSbatCHIFM081.PAY_WAY_CD).concat(mastMap.getString(JBSbatCHIFM081.DOFU_CD)).concat(mastMap.getString(JBSbatCHIFM081.SEIKY_KEI_NO));
			// トランキー
			String tranKey = tranMap.getString(JBSbatCHIFM147.SEIKY_WAY_CD).concat(tranMap.getString(JBSbatCHIFM147.DOFU_CD)).concat(tranMap.getString(JBSbatCHIFM147.SEIKY_KEI_NO));;
			
			// マッチした場合
			if(mastKey.equals(tranKey))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力Ｍ　＝　入力Ｔ]");
				// 印刷枚数オーバーフラグ　＝　'1'印刷枚数オーバーフラグ（上限以下）の場合
				if(tranMap.getString(JBSbatCHIFM147.PRINT_CNT_OVER_FLG).equals(JACStrConst.PRINT_CNT_OVER_FLG_OVER))
				{
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][処理対象外]");
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
					
					// マスタファイル処理フラグを設定する
					this.setMastProcFlg(true);
					
					return outputInItem;
				}
				// 入力ＫＥＹ２（通話明細印刷データ．同封コード＋通話明細印刷データ．請求契約番号）
				String inKey2 = makeStr(this.lastMap.getString(JBSbatCHIFM081.DOFU_CD), this.lastMap.getString(JBSbatCHIFM081.SEIKY_KEI_NO));
				endFlg = false;
				if(this.tihBfKey2 == null || !inKey2.equals(this.tihBfKey2))
				{
					kanriFlg = true;
					
				}
				// 退避．ＫＥＹ２ ＝ 入力ＫＥＹ２ の場合
				else
				{
					kanriFlg = false;
				}
				
				// 入力キー（通話明細印刷データ．同封コード＋通話明細印刷データ．請求契約番号＋通話明細印刷データ．サービス契約番号＋通話明細印刷データ．課金先電話番号））
				String inKey = makeStr(mastMap.getString(JBSbatCHIFM081.DOFU_CD), mastMap.getString(JBSbatCHIFM081.SEIKY_KEI_NO), 
										mastMap.getString(JBSbatCHIFM081.SVC_KEI_NO), mastMap.getString(JBSbatCHIFM081.KAKINS_TELNO));
				
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力キー＝" + inKey + "]");
				
				// 退避．ＫＥＹ１ ≠ 入力ＫＥＹ１ の場合
				if(this.tihBfKey1 == null || !this.tihBfKey1.equals(inKey))
				{
					
					// 退避．処理件数 + 1
					count++;
					
					if(this.tihBfKey1 == null)
					{
						assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][初回]");
						
						this.kumiRenBan = 1;
						
						// ダミーレコード作成
						outputInItem.addOutMapList(new JBSbatServiceInterfaceMap());
					}
					else
					{
						assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][キーブレイク]");
						
						// 4. 通話明細情報組立ファイル（通話明細情報レコード）出力
						outPutDtlInfo(outputInItem, mastMap);
						
						this.kumiRenBan = 1;
						
						// 退避．ＫＥＹ２ ← 入力ＫＥＹ２
						this.tihBfKey2 = inKey2;
						
						kanriMap.setString(JBSbatCHIFM091.KUMI_RENBAN, chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.Zero,
								String.valueOf(kumiRenBan), KUMI_RENBAN_LENGTH, false));
						
						// 5. 通話明細情報組立ファイル（通話明細管理情報レコード）出力
						outPutDtlKanriInfo(outputInItem);
						
						// 明細or合計項目設定
						//setOutKmk(mastMap);
						
					}
					// 退避．修理件数 ← 1
					count = 1;
					
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][1件目]");
					// 明細or合計項目設定
					setOutKmk(mastMap, tranMap);
					
					// 退避．前回出力キー情報 ← 通話明細印刷データ．同封コード：請求契約番号：サービス契約番号：課金先電話番号
					this.tihBfKey1 = inKey;
				}
				
				// 退避．ＫＥＹ１ ＝ 入力ＫＥＹ１ の場合
				else
				{
					// 退避．処理件数 + 1
					count++;
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][" + count + "件目]");
					// 通信明細格納明細 ＜ 退避．修理件数 の場合、ファイル出力
					if(tuwadetailCnt < count)
					{
						// 明細or合計行出力
						// 通話明細情報組立ファイル（通話明細情報レコード）出力
						outPutDtlInfo(outputInItem, mastMap);
						
						// 退避．修理件数 ← 1
						count = 1;
						
					}
					// 明細or合計項目設定
					setOutKmk(mastMap, tranMap);
					
				}
				
				// mastMapを退避
				lastMap.getMap().putAll(mastMap.getMap());
				// マスタファイル処理フラグを設定する
				this.setMastProcFlg(true);
			}
			// マスタ＞トランの場合
			else if(mastKey.compareTo(tranKey) > 0)
			{
				// トランファイル処理フラグを設定する
				this.setTranProcFlg(true);
			}
			// 上記以外の場合（マスタ＜トランの場合）
			else
			{
				String[] msgParam = new String[] {TRN_FILE_NM, MST_FILE_NM};
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECHB1470KW, msgParam);	
				// マスタファイル処理フラグを設定する
				this.setMastProcFlg(true);
			}
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return outputInItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		chBusinessUtil.close();
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 *入力情報（通話明細印刷データ）の単項目チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.単項目チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		rsMap:(項目、値)を(key、value)として、データをrsMapに入れます
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 * </pre>
	 * <p>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isSingleCheckCHIFM081_INF1(HashMap<String, String> rsMap)
	{
		// 単項目チェックを行います
		String strValue = null;
		
		// 明細＿通話開始時分秒項目チェック
		strValue = (String)rsMap.get("DTL_PCALL_STA_HMS");
		
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "7"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0640CW", new String[]{});
			// 通話開始時分秒（桁あふれした先頭部分を切り捨て）
			int len = strValue.length();
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckCHIFM081_INF1][変更前" + strValue + "]");
			strValue = strValue.substring(len - DTL_TUWA_TIME_LENGTH, len);
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][isSingleCheckCHIFM081_INF1][変更後" + strValue + "]");
			rsMap.put(JBSbatCHIFM081.DTL_PCALL_STA_HMS, strValue);
			return false;
		}

		return true;
	}
	
	/**
	 * @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;
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * 出力項目を設定します。
	 * 
	 * @param mastMap 入力電文
	 * @param tranMap 入力電文
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void setOutKmk(JBSbatServiceInterfaceMap mastMap, JBSbatServiceInterfaceMap tranMap)throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setOutKmk]");
		if(count == 1)
		{
			// 同封項目設定
			setDohuKmk(mastMap, outMap);
			
			// kanriMap ← outMap
			setDohuKmk(mastMap, kanriMap);
			
			this.dtlKaknoCnt 	= 0;	// 退避．明細格納数 ← 0
			this.gkKaknoCnt 	= 0;	// 退避．合計格納数 ← 0
		}
		
		// エリア区分 = "エリア区分（明細）"の時
		if(mastMap.getString(JBSbatCHIFM081.AREA_DIV).equals(JACStrConst.AREA_DIV_DTL))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutKmk][明細行]");
			// 明細行

			// 明細面数  
			dtlMen = tranMap.getString(JBSbatCHIFM147.PRINT_PAGE_TTL);
			
			// 配列に設定
			setDetailKmk(mastMap, tranMap);

			// 明細出力行数 
			// 退避．明細出力行数　＋　１
			// 退避．明細格納数　　＋　１

			this.detailOutRow++;
			this.dtlKaknoCnt++;
		}
		else
		{
			// 合計行
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutKmk]合計行]");

			// 明細面数 
			dtlMen = tranMap.getString(JBSbatCHIFM147.PRINT_PAGE_TTL);
			
			// 配列に設定
			setTotalKmk(mastMap);
			
			// 退避．合計出力行数　＋　１
			// 退避．合計格納数　　＋　１
			this.totalOutRow++;
			this.gkKaknoCnt++;
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setOutKmk]");
	}

	/**
	 * 出力処理を行います。（通話明細情報レコード）
	 * 
	 * @param outputInItem 出力電文
	 * @param mastMap 入力電文
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void outPutDtlInfo(JBSbatOutputItem outputInItem, JBSbatServiceInterfaceMap mastMap)throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][outPutDtlInfo]");
		
		// 入力ＫＥＹ３（通話明細印刷データ．請求契約番号）
		String inKey3 = this.lastMap.getString(JBSbatCHIFM081.SEIKY_KEI_NO).concat(this.lastMap.getString(JBSbatCHIFM081.KAKINS_TELNO));

		this.kumiRenBan++;

		// 退避．組立連番を退避．通話明細情報レコードの組立連番に設定。
		outMap.setString(JBSbatCHIFM091.KUMI_RENBAN, chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.Zero, 
				String.valueOf(this.kumiRenBan), KUMI_RENBAN_LENGTH, false));

		// シーケンス番号の設定
		// 退避．ＫＥＹ３ ≠ 入力ＫＥＹ３ の場合
		
		if(this.tihBfKey3 == null || !inKey3.equals(this.tihBfKey3))
		{
			this.seqNo = 1;
		}
		// 退避．ＫＥＹ３ ＝ 入力ＫＥＹ３ の場合
		else
		{
			this.seqNo++;
		}
		
		// 退避．シーケンス番号を退避．通話明細情報レコードのシーケンス番号に設定
		outMap.setString(JBSbatCHIFM091.SEQ_NO, chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.Zero, 
				String.valueOf(this.seqNo), SEQ_NO_LENGTH, false));
		
		// 退避．ＫＥＹ３ ← 入力ＫＥＹ３
		this.tihBfKey3 = inKey3;
		
		String setKey = null;
		// 退避．明細格納 ＞ 0 の場合（明細行）
		if(this.dtlKaknoCnt > 0)
		{
			//setDetailKuhaku();
			
			Iterator<String> detailKeyIte = detailKeyList.iterator();
			
			for(String detailValue: detailValueList)
			{
				setKey = detailKeyIte.next();
				// 項目を設定
				outMap.setString(setKey, detailValue);
			}
			
		}
		// 退避．合計格納 ＞ 0 の場合（合計）
		
		// パディング処理
		setTotalKuhaku();
		
		Iterator<String> totalKeyIte = totalKeyList.iterator();
		
		for(String totalValue: totalValueList)
		{
			setKey = totalKeyIte.next();
			// 項目を設定
			outMap.setString(setKey, totalValue);
			
		}
	
		outMap.setOutFlg(true);
		outputInItem.addOutMapList(outMap);
		
		
		// 次処理のために初期化
		outMap = new JBSbatServiceInterfaceMap();
		detailValueList.clear();
		totalValueList.clear();
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][outPutDtlInfo]");
	}
	
	/**
	 * 出力処理を行います。（通話明細管理情報レコード）
	 * 
	 * @param outputInItem 出力電文
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void outPutDtlKanriInfo(JBSbatOutputItem outputInItem)throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][outPutDtlKanriInfo]");
		
		
		// 明細or合計行の出力フラグ ← true
		// 次処理のために初期化
		outMap = new JBSbatServiceInterfaceMap();
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][outPutDtlKanriInfo][管理行出力]");

		// 管理項目設定
		setKanriKmk();
		
		// 管理行の出力フラグ ← true
		kanriMap.setOutFlg(true);
		outputInItem.addOutMapList(kanriMap);

		// 次処理のために初期化
		kanriMap = new JBSbatServiceInterfaceMap();
		detailOutRow 	= 0;
		totalOutRow 	= 0;
		dtlMen 			= ZERO;
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][outPutDtlKanriInfo]");
	}
	
	/**
	 * 同封項目を設定します。
	 * 
	 * @param mastMap 入力電文
	 * @param map 出力設定用マップ
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void setDohuKmk(JBSbatServiceInterfaceMap mastMap, JBSbatServiceInterfaceMap map)throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setDohuKmk]");
		//同封項目編集;
		map.setString(JBSbatCHIFM091.PAY_WAY_SORT, chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, 
				mastMap.getString(JBSbatCHIFM081.PAY_WAY_CD), PAY_WAY_SORT_LENGTH, true));											// 支払方法コード（ソート順）
		
		map.setString(JBSbatCHIFM091.DOFU_CTRL_REC_DIV, chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, 
				mastMap.getString(JBSbatCHIFM081.REC_DIV), REC_DIV_LENGTH, true));											// 同封制御レコード区分
		
		map.setString(JBSbatCHIFM091.DOFU_CODE, chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, 
				mastMap.getString(JBSbatCHIFM081.DOFU_CD), DOFU_CODE_LENGTH, true));											// 同封コード

		map.setString(JBSbatCHIFM091.DOFU_CTRL_SEIKY_KEI_NO, chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, 
				mastMap.getString(JBSbatCHIFM081.SEIKY_KEI_NO), DOFU_CTRL_SEIKY_KEI_NO_LENGTH, true));						// 同封制御請求契約番号
		
		map.setString(JBSbatCHIFM091.KUMI_SBT, JACStrConst.KUMI_SBT_TUWA_DTL_ARI);											// 組立種別

		map.setString(JBSbatCHIFM091.KUMI_RENBAN, chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.Zero,
				String.valueOf(kumiRenBan), KUMI_RENBAN_LENGTH, false));													// 組立連番

		map.setString(JBSbatCHIFM091.DOFU_REC_SBT, JACStrConst.REC_SBT_DATA);												// 同封制御レコード種別

		map.setString(JBSbatCHIFM091.DOFU_SVC_KEI_NO, chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, 
				mastMap.getString(JBSbatCHIFM081.SVC_KEI_NO), DOFU_SVC_KEI_NO_LENGTH, true));									// 同封制御＿サービス契約番号 
		
		map.setString(JBSbatCHIFM091.DOFU_KAKINS_TELNO, chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, 
				mastMap.getString(JBSbatCHIFM081.KAKINS_TELNO), DOFU_KAKINS_TELNO_LENGTH, true));								// 同封制御＿課金先電話番号
		map.setString(JBSbatCHIFM091.SEIKY_YM, mastMap.getString(JBSbatCHIFM081.SEIKY_YM));							// 請求年月 
		
		map.setString(JBSbatCHIFM091.REC_DIV, chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, 
				mastMap.getString(JBSbatCHIFM081.REC_DIV), REC_DIV_LENGTH, true));											// レコード区分 
		
		map.setString(JBSbatCHIFM091.SEQ_NO, chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.Zero, 
				Integer.toString(this.seqNo), SEQ_NO_LENGTH, false));														// シーケンス番号 
		
		map.setString(JBSbatCHIFM091.SEIKY_KEI_NO, chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, 
				mastMap.getString(JBSbatCHIFM081.SEIKY_KEI_NO), SEIKY_KEI_NO_LENGTH, true));									// 請求契約番号
		
		map.setString(JBSbatCHIFM091.TEL_NO, chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, 
				mastMap.getString(JBSbatCHIFM081.KAKINS_TELNO), TEL_NO_LENGTH, true));										// 電話番号
		
		map.setString(JBSbatCHIFM091.PCD, chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, 
				mastMap.getString(JBSbatCHIFM081.PCD), PCD_LENGTH, true));													// 郵便番号
		
		map.setString(JBSbatCHIFM091.FUSHO_DIV, chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, 
				mastMap.getString(JBSbatCHIFM081.FUSHO_DIV), FUSHO_DIV_LENGTH, true));										// 封書区分
		
		map.setString(JBSbatCHIFM091.DOHUBT_SBT1, 		dohubtSbtDef);														// 同封物種別１ 
	
		map.setString(JBSbatCHIFM091.DOHUBT_SBT1_CNT, 	dohubtSbtCntDef);													// 同封物種別１部数 
		
		map.setString(JBSbatCHIFM091.DOHUBT_SBT2, 		dohubtSbtDef);														// 同封物種別２ 
		
		map.setString(JBSbatCHIFM091.DOHUBT_SBT2_CNT, 	dohubtSbtCntDef);													// 同封物種別２部数 
		
		map.setString(JBSbatCHIFM091.DOHUBT_SBT3, 		dohubtSbtDef);														// 同封物種別３ 
		
		map.setString(JBSbatCHIFM091.DOHUBT_SBT3_CNT, 	dohubtSbtCntDef);													// 同封物種別３部数 
		
		map.setString(JBSbatCHIFM091.DOHUBT_SBT4, 		dohubtSbtDef);														// 同封物種別４ 
		
		map.setString(JBSbatCHIFM091.DOHUBT_SBT4_CNT, 	dohubtSbtCntDef);													// 同封物種別４部数 
		
		map.setString(JBSbatCHIFM091.DOHUBT_SBT5, 		dohubtSbtDef);														// 同封物種別５ 
	
		map.setString(JBSbatCHIFM091.DOHUBT_SBT5_CNT, 	dohubtSbtCntDef);													// 同封物種別５部数 
		
		map.setString(JBSbatCHIFM091.DOHUBT_SBT6, 		dohubtSbtDef);														// 同封物種別６ 
		
		map.setString(JBSbatCHIFM091.DOHUBT_SBT6_CNT, 	dohubtSbtCntDef);													// 同封物種別６部数

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setDohuKmk]");
	}
	
	/**
	 *  明細項目を設定します。
	 * 
	 * @param mastMap 入力電文
	 * @param tranMap 入力電文
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void setDetailKmk(JBSbatServiceInterfaceMap mastMap, JBSbatServiceInterfaceMap tranMap)throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setDetailKmk]");
		// 明細＿１項目編集
		
		detailValueList.add(chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.Zero, 
				tranMap.getString(JBSbatCHIFM147.PRINT_PAGE_TTL), DTL_PAGE_CNT_LENGTH, false));								// 明細＿枚数

		detailValueList.add(getUrDiv(mastMap.getString(JBSbatCHIFM081.MEN_NO)));														// 明細＿表裏区分

		detailValueList.add(chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.Zero, 
				mastMap.getString(JBSbatCHIFM081.ROW_NO), DTL_ROW_LENGTH, false));												// 明細＿行

		detailValueList.add(JACStrConst.DPS_DIV_TUWA);																			// 明細＿表示区分

		detailValueList.add(chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, 
				getTwStaMd(mastMap.getString(JBSbatCHIFM081.DTL_PCALL_STAYMD)), DTL_TW_STA_MD_LENGTH, true));						// 明細＿通話開始月日

		detailValueList.add(chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.Space,
				getDay(mastMap.getString(JBSbatCHIFM081.DTL_PCALL_STAYMD)), DTL_TW_STA_DOW_LENGTH, true));						// 明細＿通話開始曜日

		detailValueList.add(chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, 
				chBusinessUtil.editTuwaStartTime(mastMap.getString(JBSbatCHIFM081.DTL_PCALL_STA_HMS)), DTL_TW_STA_TIME_LENGTH, true));		// 明細＿通話開始時間

		detailValueList.add(chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, 
				editTuwaTime(String.valueOf(mastMap.getBigDecimal(JBSbatCHIFM081.DTL_PCALL_SEC_CNT))), DTL_TUWA_TIME_LENGTH, true));	// 明細＿通話時間

		detailValueList.add(dtlHtckDivDef);																						// 明細＿発着区分

		detailValueList.add(dtlTelDivDef);																						// 明細＿電話区分

		detailValueList.add(chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, 
				mastMap.getString(JBSbatCHIFM081.DTL_INCOMING_TELNO), DTL_TEL_NO_HENSHU_LENGTH, true));								// 明細＿電話番号編集

		detailValueList.add(JACStrConst.PRC_DSP_FLG_DSP);																		// 明細＿料金表示フラグ

		detailValueList.add(chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace,
				mastMap.getString(JBSbatCHIFM081.DTL_MENZEI_DIV), DTL_TAX_DIV_LENGTH, true));										// 明細＿免税区分

		// 明細＿通話料
		BigDecimal prc = JACbatRknBusinessUtil.round(JACStrConst.ROUND_DOWN, mastMap.getBigDecimal(JBSbatCHIFM081.DTL_PCALL_PRC).multiply(HUNDRED), 0);
		detailValueList.add(chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.Zero, 
				String.valueOf(prc), DTL_TUWA_PRC_LENGTH, false));																// 明細＿通話料

		detailValueList.add(chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.Space, 
				mastMap.getString(JBSbatCHIFM081.DTL_PCALL_SBT), DTL_PCALL_SBT_LENGTH, true));									// 明細＿通話種別

		detailValueList.add(chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.Space, 
				mastMap.getString(JBSbatCHIFM081.DTL_BIKO), DTL_BIKO_LENGTH, true));												// 明細＿通話種別

		detailValueList.add(dtlYobiDef);																						// 明細＿予備
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setDetailKmk]");
	}

	/**
	 * 合計項目を設定します。
	 * 
	 * @param mastMap 入力電文
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void setTotalKmk(JBSbatServiceInterfaceMap mastMap)throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setTotalKmk]");
		
		totalValueList.add(gokeiPageCntDef);																	// 合計＿枚数
		
		totalValueList.add(getUrDiv(mastMap.getString(JBSbatCHIFM081.MEN_NO)));																					// 合計＿表裏区分 
		
		totalValueList.add(chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.Zero, 
				mastMap.getString(JBSbatCHIFM081.ROW_NO), GOKEI_ROW_LENGTH, false));										// 合計＿行 
		
		totalValueList.add(JACStrConst.DPS_DIV_GOKEI);																	// 合計＿表示区分 
		
		totalValueList.add(chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.Space, 
				getGokeiNm(mastMap.getString(JBSbatCHIFM081.AREA_DIV)), GOKEI_NM1_LENGTH, true));							// 合計＿名称１ 
		
		totalValueList.add(chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.Zero, 
				mastMap.getString(JBSbatCHIFM081.GOKEI_GOKEI_PCALL_CNT), GOKEI_TUWA_CNT_LENGTH, false));					// 合計＿合計通話数 
		
		totalValueList.add(chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.Space, 
				this.tuwaNm, GOKEI_NM2_LENGTH, false));																// 合計＿名称２
		
		totalValueList.add(gokeiYobi1Def);																				// 合計＿予備１ 
		
		totalValueList.add(JACStrConst.PRC_DSP_FLG_DSP);   																// 合計＿料金表示フラグ 
		
		// 合計＿合計通話料 
		BigDecimal prc = mastMap.getBigDecimal(JBSbatCHIFM081.GOKEI_GOKEI_PCALL_PRC);
		// 小数以下は空白変換
		prc = JACbatRknBusinessUtil.round(JACStrConst.ROUND_DOWN, prc, 0);
		totalValueList.add(chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.Zero, 
				String.valueOf(prc), GOKEI_TUWA_PRC_LENGTH, false));													// 合計＿合計通話料 
		
		totalValueList.add(chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.Space,
				mastMap.getString(JBSbatCHIFM081.GOKEI_BIKO), GOKEI_BIKO_LENGTH, true));									// 合計＿備考 
		totalValueList.add(gokeiYobi2CmnDef);																			// 合計＿予備２
		
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setTotalKmk]");
	}

	/**
	 * 合計項目に空白パディングします。
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void setTotalKuhaku()throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setTotalKuhaku]");
		
		int gkCnt = this.dtlKaknoCnt + this.gkKaknoCnt;
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "通話明細格納数：" + tuwadetailCnt);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "明細合計格納数：" + gkCnt);
		
		// 明細欄が埋まっていた場合
		if(this.dtlKaknoCnt == this.tuwadetailCnt)
		{
			outMap.setString(JBSbatCHIFM091.DTL_YOBI2, 			dtlYobi2Def);	// 明細＿予備２
		}
		// 合計欄を一つでも使用した場合
		if(0 < this.gkKaknoCnt || gkCnt < this.tuwadetailCnt)
		{
			outMap.setString(JBSbatCHIFM091.GOKEI_YOBI2, 		gokeiYobi2Def);	// 合計＿予備２
		}
		
		// 明細・合計欄を使用していた場合
		if(0 < this.dtlKaknoCnt || 0 < this.gkKaknoCnt)
		{
			outMap.setString(JBSbatCHIFM091.REC_SEQ, 			recSeqDef);		// レコードＳＥＱ
		}
		// 空白パディング
		while(gkCnt < this.tuwadetailCnt)
		{
			totalValueList.add(gokeiPageCntDef);		// 合計＿枚数
			totalValueList.add(gokeiUrDivDef);			// 合計＿表裏区分
			totalValueList.add(gokeiRowDef);			// 合計＿行
			totalValueList.add(gokeiDspDivDef);			// 合計＿表示区分
			totalValueList.add(gokeiNm1Def);			// 合計＿名称１
			totalValueList.add(gokeiTuwaCntDef);		// 合計＿通話数
			totalValueList.add(gokeiNm2Def);			// 合計＿名称２
			totalValueList.add(gokeiYobi1Def);			// 合計＿予備１
			totalValueList.add(gokeiPrcDspFlgDef);		// 合計＿料金表示フラグ
			totalValueList.add(gokeiTuwaPrcDef);		// 合計＿通話料
			totalValueList.add(gokeiBikoDef);			// 合計＿備考
			totalValueList.add(gokeiYobi2CmnDef);		// 合計＿予備２
			gkCnt += 1;
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setTotalKuhaku]");
	}

	/**
	 * 管理項目を設定します。
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void setKanriKmk()throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setKanriKmk]");
		
		// 同封制御レコード区分
		kanriMap.setString(JBSbatCHIFM091.DOFU_CTRL_REC_DIV, JACStrConst.TUWA_MANAG_INF_REC);
		
		// レコード区分
		kanriMap.setString(JBSbatCHIFM091.REC_DIV, JACStrConst.TUWA_MANAG_INF_REC);
		
		// シーケンス番号
		kanriMap.setString(JBSbatCHIFM091.SEQ_NO, JACStrConst.KARA_MOJI);
		
		// 管理項目編集;
		kanriMap.setString(JBSbatCHIFM091.KNRI_CUST_ID, knriCustIdDef);													// 管理＿お客様ＩＤ 
		
		String telNo = JPCUtilCommon.trim(lastMap.getString(JBSbatCHIFM081.KAKINS_TELNO));		
		kanriMap.setString(JBSbatCHIFM091.KNRI_TELNO_HENSHU, chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, 
				telNo, KNRI_TELNO_HENSHU_LENGTH, true));																	// 管理＿電話番号編集 
		
		kanriMap.setString(JBSbatCHIFM091.KNRI_SIKY_YM_AD, chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.HalfSpace, 
				chBusinessUtil.delZero(lastMap.getString(JBSbatCHIFM081.SEIKY_YM)), KNRI_SIKY_YM_AD_LENGTH, true));			// 管理＿請求年月西暦
		
		kanriMap.setString(JBSbatCHIFM091.KNRI_DTL_OUT_CNT, chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.Zero, 
				Integer.toString(this.detailOutRow), KNRI_DTL_OUT_CNT_LENGTH, false));										// 管理＿明細出力行数

		kanriMap.setString(JBSbatCHIFM091.KNRI_GOKEI_OUT_CNT, chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.Zero, 
				Integer.toString(this.totalOutRow), KNRI_GOKEI_OUT_CNT_LENGTH, false));									// 管理＿合計出力行数 
		
		kanriMap.setString(JBSbatCHIFM091.KNRI_DTL_MEN, chBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.Zero, 
				this.dtlMen, KNRI_DTL_MEN_LENGTH, false));																	// 管理＿明細面数
		
		kanriMap.setString(JBSbatCHIFM091.KNRI_HENSHU, knriHenshuDef);	
		
		kanriMap.setString(JBSbatCHIFM091.KNRI_YOBI, knriYobiDef);															// 管理＿予備 
		
		kanriMap.setString(JBSbatCHIFM091.KNRI_REC_SEQ, knriRecSeqDef);														// 管理＿レコードＳＥＱ
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setKanriKmk]");
	}
	
	/**
	 * 通話時間を時分秒形式に変換します。
	 * 
	 * @param second 秒数
	 * @return String 時分秒
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private String editTuwaTime(String second)throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][editTuwaTime]");
		
		// 時分秒形式に変換
		String time = chBusinessUtil.timeEdit(second);
		
		// 単項目チェック用
		HashMap<String, String> dataMap = new HashMap<String, String>();
		dataMap.put(JBSbatCHIFM081.DTL_PCALL_STA_HMS, time);
		
		if(!isSingleCheckCHIFM081_INF1(dataMap))
		{
			time = dataMap.get(JBSbatCHIFM081.DTL_PCALL_STA_HMS);
		}
		
		// ゼロサプレス
		String retTime = chBusinessUtil.editTuwaTime(time);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][editTuwaTime][通話時間（時分秒形式）＝" + retTime + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][editTuwaTime]");
		return retTime;
	}
	
	/**
	 * 年月日を月日にしてゼロサプレスします。
	 * 
	 * @param ymd 年月日
	 * @return String 月日
	 * @throws Exception
	 */
	private String getTwStaMd(String ymd)throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getTwStaMd]");
		if(ymd.length() < 4)
		{
			return ymd;
		}
		// ゼロサプレス
		String md = chBusinessUtil.delZero(ymd.substring(4, 8));
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getTwStaMd]");
	return md;
	}
	
	/**
	 * 曜日を算出します。
	 * 
	 * @param date 年月日
	 * @return String 曜日
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private String getDay(String date)throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getDay]");
		
		// 曜日算出
		String day = JPCUtilCommon.getDayOfWeek(date);
		
		// 漢字に変換
		String dayKanji = chBusinessUtil.formatDayKanji(day);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getDay][曜日＝" + dayKanji + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getDay]");
		return dayKanji;
	}

	
	/**
	 * 合計＿名称を設定します。
	 * 
	 * @param areaDiv エリア区分
	 * @return String 合計＿名称
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private String getGokeiNm(String areaDiv)throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getGokeiNm]");
		
		String gokeiNm = null;
		
		// エリア区分 = 表示区分（合計行） の場合
		if(areaDiv.equals(JACStrConst.DPS_DIV_GOKEI))
		{
			gokeiNm = kazeiNm;
		}
		// 上記以外
		else
		{
			gokeiNm = menzeiNm;
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getGokeiNm][合計＿名称＝" + gokeiNm + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getGokeiNm]");
		return gokeiNm;
	}
	
	/**
	 * 面数から表裏区分を判定します
	 * 
	 * @param menNo 明細面数
	 * @return String 表裏区分
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private String getUrDiv(String menNo)throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getUrDiv]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getUrDiv][面数" + menNo +"]");
		
		int tmpurDiv = Integer.parseInt(menNo) % 2;
		if(tmpurDiv == 1)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getUrDiv][表裏区分：'1'表]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getUrDiv]");
			return JACStrConst.UR_DIV_FRONT;
		}
		else
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getUrDiv][表裏区分：'2'裏]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getUrDiv]");
			return JACStrConst.UR_DIV_BACK;
		}
	}
	
	/**
	 * 文字を連結します
	 * @param  string 文字
	 * @return strBuf 連結した文字列
	 */
	private String makeStr(String ...string)
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeStr]");
		
		StringBuffer strBuf = new StringBuffer();
		for(String str:string)
		{
			if(str == null)
			{
				strBuf.append(JACStrConst.KARA_MOJI);
			}
			else
			{
				strBuf.append(str);
			}
		}
		
		assert strBuf != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][strBuf][strBuf = " + strBuf.toString() + "]") : true;
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeStr]");
		
		return strBuf.toString();
	}
}
