/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKStdKjhZdkKanrListMake
*	ソースファイル名	：JBSbatKKStdKjhZdkKanrListMake.java
*	作成者				：富士通　
*	作成日				：2021年08月07日
*＜機能概要＞
*　標準工事費残高管理リスト作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v54.00.00	2021/08/07   FJ)麻生		新規作成【ANK-4098-00-00】標準工事費残高管理対応
*********************************************************************/
package eo.business.service;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCHbatSeikyKaknoBusinessUtil;
import eo.business.util.file.JBSbatACIFM352;
import eo.business.util.file.JBSbatACIFM353;
import eo.business.util.table.JBSbatZM_M_CD_NM_KANRI;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.constant.JZM0171Constant;
import eo.common.util.JKKStringUtil;
import eo.common.util.JPCUtilCommon;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatOutputFileUtil;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatAplConst;

/**
* 標準工事費残高管理リスト作成 <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKStdKjhZdkKanrListMake extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(コード名称管理)*/
	private static final String D_TBL_NAME_ZM_M_CD_NM_KANRI = "ZM_M_CD_NM_KANRI";

	/** SQL定義キー(AC_SELECT_00)*/
	private static final String ZM_M_CD_NM_KANRI_AC_SELECT_003 = "AC_SELECT_003";

	/** テーブルアクセスクラス(コード名称管理)*/
	private JBSbatSQLAccess db_ZM_M_CD_NM_KANRI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 契約者タイプ名称マップ */
	private Map<String, String> keishaTypeMap = null;
	
	/** サービス契約ステータス名称マップ */
	private Map<String, String> svcKeiStatMap = null;
	
	/** 請求年月 */
	private String seikyYm = null;
	
	/** ヘッダ編集用＿お客さまID */
	private static final String HEADER_SVC_KEI_NO = "お客さまID";

	/** ヘッダ編集用＿請求先番号 */
	private static final String HEADER_SEIKY_KEI_NO = "請求先番号";

	/** ヘッダ編集用＿料金グループ名 */
	private static final String HEADER_PRC_GRP_NM = "料金グループ名";

	/** ヘッダ編集用＿料金サービス名 */
	private static final String HEADER_PRC_SVC_NM = "料金サービス名";

	/** ヘッダ編集用＿契約者タイプ */
	private static final String HEADER_KEISHA_TYPE = "契約者タイプ";

	/** ヘッダ編集用＿契約状態 */
	private static final String HEADER_KEI_STATUS = "契約状態";

	/** ヘッダ編集用＿工事完了日 */
	private static final String HEADER_KOJI_FIN_YMD = "工事完了日";

	/** ヘッダ編集用＿課金開始月 */
	private static final String HEADER_CHRG_STA_YM = "課金開始月";

	/** ヘッダ編集用＿課金終了月 */
	private static final String HEADER_CHRG_END_YM = "課金終了月";

	/** ヘッダ編集用＿会計計上月 */
	private static final String HEADER_KAIK_KEIJO_YM = "会計計上月";

	/** ヘッダ編集用＿契約支払回数 */
	private static final String HEADER_KEI_PAY_CNT = "契約支払回数";

	/** ヘッダ編集用＿会計計上額 */
	private static final String HEADER_KAIK_KEIJO_AMNT = "会計計上額";

	/** ヘッダ編集用＿月額支払額 */
	private static final String HEADER_GTGK_PAY_AMNT = "月額支払額";

	/** ヘッダ編集用＿累計請求回数 */
	private static final String HEADER_RUIKE_SEIKY_CNT = "累計請求回数";

	/** ヘッダ編集用＿経過月数 */
	private static final String HEADER_KEIK_GESU = "経過月数";

	/** ヘッダ編集用＿差異 */
	private static final String HEADER_SAI = "差異";

	/** ヘッダ編集用＿当月請求額 */
	private static final String HEADER_TOGTU_SEIKY_AMNT = "当月請求額";

	/** ヘッダ編集用＿当月残債一括 */
	private static final String HEADER_TOGTU_ZANS_IKT_AMNT = "当月残債一括";

	/** ヘッダ編集用＿請求済金額 */
	private static final String HEADER_SEIKY_ZUMI_AMNT = "請求済金額";

	/** ヘッダ編集用＿未請求残額 */
	private static final String HEADER_MISEIKY_ZAN_AMNT = "未請求残額";

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_ZM_M_CD_NM_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_CD_NM_KANRI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		// 契約者タイプ名称マップ設定
		this.keishaTypeMap = this.getCdNmKnriInf(JZM0171Constant.CD00036);
		// サービス契約ステータス名称マップ設定
		this.svcKeiStatMap = this.getCdNmKnriInf(JZM0171Constant.CD00037);
		// DBアクセスクラスをクローズします
		db_ZM_M_CD_NM_KANRI.close();
		
		// フリー項目の取得
		String[] freeItem 	= super.freeItem.split(JACStrConst.FREE_DIV);
		// 請求年月を取得
		seikyYm = freeItem[0];
		// ファイル出力情報を取得
		String fileDef = freeItem[1];
		
		// ヘッダ情報編集・出力
		makeHeadder(fileDef);
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		
		// 入力電文を出力情報に設定
		outputBean.addOutMapList(createOutMap(inMap));
		
		return outputBean;
		/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_ZM_M_CD_NM_KANRI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 * SQLKEY(AC_SELECT_003)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	コード種別コード
	 *		 	適用開始年月日
	 *		 	適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_CD_NM_KANRI_AC_SELECT_003(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_ZM_M_CD_NM_KANRI.selectBySqlDefine(paramList, ZM_M_CD_NM_KANRI_AC_SELECT_003);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	
	/**
	 * コード名称管理から指定されたコード種別コードのコード区分名マップを取得する。
	 * @param cd　コード種別コード
	 * @return Map　コード名称マップ
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private Map<String, String> getCdNmKnriInf(String cd) throws Exception
	{
		JBSbatCommonDBInterface whereParam = new JBSbatCommonDBInterface();
		Map<String, String> hm = new HashMap<String, String>();
		
		
		whereParam.setValue(cd);				// コード種別コード
		whereParam.setValue(super.opeDate);		// 適用開始年月日
		whereParam.setValue(super.opeDate);		// 適用終了年月日
		
		// SQL実行
		executeZM_M_CD_NM_KANRI_AC_SELECT_003(whereParam.getList().toArray());
		
		JBSbatCommonDBInterface dbMap = db_ZM_M_CD_NM_KANRI.selectNext();
		
		// 取得できなかった場合
		if(dbMap == null)
		{
			// ログ出力
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EACB0250CE,
					new String[] {JBSbatZM_M_CD_NM_KANRI.TABLE_NAME, whereParam.getList().toString()});
		}
		// 上記以外の場合
		else
		{
			while(null != dbMap)
			{
				// コード名称管理情報マップに検索結果を設定（キー：コード区分）
				hm.put(dbMap.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV), dbMap.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV_NM));
				
				dbMap = db_ZM_M_CD_NM_KANRI.selectNext();
			}
		}
		
		
		return(hm);
	}
	
	/**
	 * ヘッダ情報編集・出力
	 * @param  fileDef   ファイル出力情報
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void makeHeadder(String fileDef) throws Exception
	{
		// ファイル出力部品を取得
		JBSbatOutputFileUtil fileUtil 		= super.commonItem.getOutPutFile();
		// 設定されているエンコード形式を退避
		String enc = fileUtil.getEncode();
		// encodeの形式がSHIFT-JISの場合、MS932に変換
		if (JACStrConst.ENCODE_SJIS.toUpperCase().equals(enc.toUpperCase()))
		{
			enc = JACStrConst.ENCODE_MS932;
		}

		// 出力定義ファイル名を取得する。
		String outFileDefName 				= JBSbatAplConst.getAplConstValue("OTD") + fileDef;
		// 出力定義ファイルオブジェクトを生成する
		JBSbatDefFileUtil outFileDef 		= new JBSbatDefFileUtil(outFileDefName, fileUtil);
		// 退避したエンコード形式を戻す（出力定義ファイルオブジェクト生成時に上書きが発生しているため）
		fileUtil.setEncode(enc);
		
		// 出力情報格納用マップ
		JBSbatServiceInterfaceMap headMap 	= new JBSbatServiceInterfaceMap();
		
		//項目を格納
		headMap.set(JBSbatACIFM353.SVC_KEI_NO, HEADER_SVC_KEI_NO);						// お客さまID
		headMap.set(JBSbatACIFM353.SEIKY_KEI_NO, HEADER_SEIKY_KEI_NO);					// 請求先番号
		headMap.set(JBSbatACIFM353.PRC_GRP_NM, HEADER_PRC_GRP_NM);						// 料金グループ名
		headMap.set(JBSbatACIFM353.PRC_SVC_NM, HEADER_PRC_SVC_NM);						// 料金サービス名
		headMap.set(JBSbatACIFM353.KEISHA_TYPE, HEADER_KEISHA_TYPE);					// 契約者タイプ
		headMap.set(JBSbatACIFM353.KEI_STATUS, HEADER_KEI_STATUS);						// 契約状態
		headMap.set(JBSbatACIFM353.KOJI_FIN_YMD, HEADER_KOJI_FIN_YMD);					// 工事完了日
		headMap.set(JBSbatACIFM353.CHRG_STA_YM, HEADER_CHRG_STA_YM);					// 課金開始月
		headMap.set(JBSbatACIFM353.CHRG_END_YM, HEADER_CHRG_END_YM);					// 課金終了月
		headMap.set(JBSbatACIFM353.KAIK_KEIJO_YM, HEADER_KAIK_KEIJO_YM);				// 会計計上月
		headMap.set(JBSbatACIFM353.KEI_PAY_CNT, HEADER_KEI_PAY_CNT);					// 契約支払回数
		headMap.set(JBSbatACIFM353.KAIK_KEIJO_AMNT, HEADER_KAIK_KEIJO_AMNT);			// 会計計上額
		headMap.set(JBSbatACIFM353.GTGK_PAY_AMNT, HEADER_GTGK_PAY_AMNT);				// 月額支払額
		headMap.set(JBSbatACIFM353.RUIKE_SEIKY_CNT, HEADER_RUIKE_SEIKY_CNT);			// 累計請求回数
		headMap.set(JBSbatACIFM353.KEIK_GESU, HEADER_KEIK_GESU);						// 経過月数
		headMap.set(JBSbatACIFM353.SAI, HEADER_SAI);									// 差異
		headMap.set(JBSbatACIFM353.TOGTU_SEIKY_AMNT, HEADER_TOGTU_SEIKY_AMNT);			// 当月請求額
		headMap.set(JBSbatACIFM353.TOGTU_ZANS_IKT_AMNT, HEADER_TOGTU_ZANS_IKT_AMNT);	// 当月残債一括
		headMap.set(JBSbatACIFM353.SEIKY_ZUMI_AMNT, HEADER_SEIKY_ZUMI_AMNT);			// 請求済金額
		headMap.set(JBSbatACIFM353.MISEIKY_ZAN_AMNT, HEADER_MISEIKY_ZAN_AMNT);			// 未請求残額
		
		fileUtil.print(headMap, outFileDef);
	}
	
	/**
	 * 入力ファイルを出力ファイルに成形します
	 * @param inMap
	 * @return JBSbatServiceInterfaceMap
	 * @throws Exception 
	 */
	private JBSbatServiceInterfaceMap createOutMap(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		// お客さまIDの設定 (初回請求サービス契約番号)
		outMap.set(JBSbatACIFM353.SVC_KEI_NO, inMap.get(JBSbatACIFM352.FIRST_SEIKY_SVC_KEI_NO));
		// 請求先番号の設定 (請求契約番号)
		outMap.set(JBSbatACIFM353.SEIKY_KEI_NO, inMap.get(JBSbatACIFM352.SEIKY_KEI_NO));
		// 料金グループ名の設定 (料金グループ名)
		outMap.set(JBSbatACIFM353.PRC_GRP_NM, inMap.get(JBSbatACIFM352.PRC_GRP_NM));
		// 料金サービス名の設定 (料金プラン名)
		outMap.set(JBSbatACIFM353.PRC_SVC_NM, inMap.get(JBSbatACIFM352.PPLAN_NM));
		// 契約者タイプの設定 (契約者タイプコードをキーにコード名称管理より取得（CD00036）)
		outMap.set(JBSbatACIFM353.KEISHA_TYPE, keishaTypeMap.get(inMap.get(JBSbatACIFM352.KEISHA_TYPE_CD)));
		// 契約状態の設定 (サービス契約ステータスをキーにコード名称管理より取得（CD00037）)
		outMap.set(JBSbatACIFM353.KEI_STATUS, svcKeiStatMap.get(inMap.get(JBSbatACIFM352.SVC_KEI_STAT)));
		// 工事完了日の設定 (工事案件実施年月日)
		outMap.set(JBSbatACIFM353.KOJI_FIN_YMD, JPCUtilCommon.formatDate(inMap.getString(JBSbatACIFM352.KOJIAK_JSSI_YMD)));
		// 課金開始月の設定 (割賦契約課金開始年月日の年月)
		String chrgStaYmd;
		String chrgStaYm;
		if (inMap.getString(JBSbatACIFM352.KAP_KEI_CHRG_STAYMD) == null || inMap.getString(JBSbatACIFM352.KAP_KEI_CHRG_STAYMD).length() != 8)
		{
			chrgStaYmd = "";
			chrgStaYm = "";
		}
		else
		{
			chrgStaYmd = inMap.getString(JBSbatACIFM352.KAP_KEI_CHRG_STAYMD);
			chrgStaYm = JCHbatSeikyKaknoBusinessUtil.formatDate(chrgStaYmd.substring(0, 6));
		}
		outMap.set(JBSbatACIFM353.CHRG_STA_YM, chrgStaYm);
		// 課金終了月の設定 (サービス課金終了年月日の年月)
		String chrgEndYm;
		if (inMap.getString(JBSbatACIFM352.SVC_CHRG_ENDYMD) == null || inMap.getString(JBSbatACIFM352.SVC_CHRG_ENDYMD).length() != 8
				|| JACStrConst.MAX_DATE.equals(inMap.getString(JBSbatACIFM352.SVC_CHRG_ENDYMD)))
		{
			chrgEndYm = "";
		}
		else
		{
			chrgEndYm = JCHbatSeikyKaknoBusinessUtil.formatDate(inMap.getString(JBSbatACIFM352.SVC_CHRG_ENDYMD).substring(0, 6));
		}
		outMap.set(JBSbatACIFM353.CHRG_END_YM, chrgEndYm);
		// 会計計上月の設定
		String kaikKeijoYmd;
		String kaikKeijoYm;
		if (JACStrConst.KAP_HAMBAI_FORM_CD_IKT.equals(inMap.get(JBSbatACIFM352.KAP_HAMBAI_FORM_CD)))
		{
			// 割賦販売形態コードが"01"（一括）の場合、割賦契約課金開始年月日の年月
			kaikKeijoYmd = inMap.getString(JBSbatACIFM352.KAP_KEI_CHRG_STAYMD);
		}
		else
		{
			// 上記以外の場合、割賦契約サービス開始年月日の年月
			kaikKeijoYmd = inMap.getString(JBSbatACIFM352.KAP_KEI_SVC_STAYMD);
		}
		if (kaikKeijoYmd == null || kaikKeijoYmd.length() != 8)
		{
			kaikKeijoYm = "";
		}
		else
		{
			kaikKeijoYm = JCHbatSeikyKaknoBusinessUtil.formatDate(kaikKeijoYmd.substring(0, 6));
		}
		outMap.set(JBSbatACIFM353.KAIK_KEIJO_YM, kaikKeijoYm);
		// 当月請求額の設定 (当月請求額)
		String togtuSeikyAmnt;
		if (JKKStringUtil.isNullBlank(inMap.getString(JBSbatACIFM352.TOGTU_SEIKY_AMNT)))
		{
			togtuSeikyAmnt = "0";
		}
		else
		{
			togtuSeikyAmnt = inMap.getString(JBSbatACIFM352.TOGTU_SEIKY_AMNT);
		}
		outMap.set(JBSbatACIFM353.TOGTU_SEIKY_AMNT, togtuSeikyAmnt);
		// 累計請求回数の設定 (割賦請求済回数 + (当月請求額 > 0 の場合1))
		String strRuikeSeikyCnt;
		if (JKKStringUtil.isNullBlank(inMap.getString(JBSbatACIFM352.KAP_SEIKY_ZUMI_CNT)))
		{
			strRuikeSeikyCnt = "0";
		}
		else
		{
			strRuikeSeikyCnt = inMap.getString(JBSbatACIFM352.KAP_SEIKY_ZUMI_CNT);
		}
		int ruikeSeikyCnt = Integer.parseInt(strRuikeSeikyCnt);
		if (new BigDecimal(togtuSeikyAmnt).compareTo(BigDecimal.ZERO) > 0)
		{
			ruikeSeikyCnt++;
		}
		outMap.set(JBSbatACIFM353.RUIKE_SEIKY_CNT, String.valueOf(ruikeSeikyCnt));
		// 契約支払回数の設定 (割賦支払い回数)
		outMap.set(JBSbatACIFM353.KEI_PAY_CNT, inMap.get(JBSbatACIFM352.KAP_PAY_CNT));
		// 会計計上額の設定 (割賦プラン総金額)
		outMap.set(JBSbatACIFM353.KAIK_KEIJO_AMNT, inMap.get(JBSbatACIFM352.KAP_PLAN_TTL_AMNT));
		// 月額支払額の設定
		if (ruikeSeikyCnt <= 1)
		{
			// 初回料金
			outMap.set(JBSbatACIFM353.GTGK_PAY_AMNT, inMap.get(JBSbatACIFM352.FIRST_PRC));
		}
		else
		{
			// 継続料金
			outMap.set(JBSbatACIFM353.GTGK_PAY_AMNT, inMap.get(JBSbatACIFM352.KEIZOKU_PRC));
		}
		// 経過月数の設定 (料金計算対象年月 - 課金開始月 + 1)
		String keikGesu;
		if ("".equals(chrgStaYmd))
		{
			keikGesu = "";
		}
		else
		{
			int workGesu = JPCUtilCommon.subtractMonth(seikyYm + "01", inMap.getString(JBSbatACIFM352.KAP_KEI_CHRG_STAYMD));
			workGesu++;
			keikGesu = String.valueOf(workGesu);
		}
		outMap.set(JBSbatACIFM353.KEIK_GESU, keikGesu);
		// 差異の設定 (累計請求回数 - 経過月数)
		String sai;
		if ("".equals(keikGesu))
		{
			sai = "";
		}
		else
		{
			int workSai = ruikeSeikyCnt - Integer.parseInt(keikGesu);
			sai = String.valueOf(workSai);
		}
		outMap.set(JBSbatACIFM353.SAI, sai);
		// 当月残債一括の設定 (当月残債一括額)
		String togtuZansIktAmnt;
		if (JKKStringUtil.isNullBlank(inMap.getString(JBSbatACIFM352.TOGTU_ZANS_IKT_AMNT)))
		{
			togtuZansIktAmnt = "0";
		}
		else
		{
			togtuZansIktAmnt = inMap.getString(JBSbatACIFM352.TOGTU_ZANS_IKT_AMNT);
		}
		outMap.set(JBSbatACIFM353.TOGTU_ZANS_IKT_AMNT, togtuZansIktAmnt);
		// 請求済金額の設定 (初回料金 + (継続料金 * （累計請求回数 - 1))、ただし累計請求回数が0の場合、0円)
		BigDecimal seikyZumiAmnt;
		if (ruikeSeikyCnt == 0)
		{
			seikyZumiAmnt = BigDecimal.ZERO;
		}
		else
		{
			BigDecimal firstPrc = new BigDecimal(inMap.getString(JBSbatACIFM352.FIRST_PRC));
			BigDecimal keizokuPrc = new BigDecimal(inMap.getString(JBSbatACIFM352.KEIZOKU_PRC));
			BigDecimal seikyCnt = BigDecimal.valueOf(ruikeSeikyCnt);
			seikyZumiAmnt = firstPrc.add(keizokuPrc.multiply(seikyCnt.subtract(BigDecimal.ONE)));
		}
		outMap.set(JBSbatACIFM353.SEIKY_ZUMI_AMNT, seikyZumiAmnt.toPlainString());
		// 未請求残額の設定 (会計計上額 - (請求済金額 + 当月残債一括額))
		BigDecimal kaikKeijoAmnt = new BigDecimal(inMap.getString(JBSbatACIFM352.KAP_PLAN_TTL_AMNT));
		BigDecimal tgtZansIktAmnt = new BigDecimal(togtuZansIktAmnt);
		BigDecimal miseikyZanAmnt = kaikKeijoAmnt.subtract(seikyZumiAmnt.add(tgtZansIktAmnt));
		outMap.set(JBSbatACIFM353.MISEIKY_ZAN_AMNT, miseikyZanAmnt.toPlainString());
		
		outMap.setOutFlg(true);
		
		return outMap;
	}
}
