/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JCHModelCommon
*   ソースファイル名：JCHModelCommon.java
*   作成者          ：富士通
*   日付            ：2011年05月24日
*＜機能概要＞
*   モデル共通アクセッサー部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/05/24   FJ          新規作成
*   v5.00.00	2013/07/30  FJ) 垣内   【LT-2013-0000595】 前受け充当金対応
*	v5.00.01    2013/09/12  FJ) 林     【OM-2013-0001890】 前受け充当金対応 絶対値取得処理追加
*	v5.00.02    2013/09/16  FJ) 小野   【OM-2013-0001910】 債権内訳取得SQLを追加。
*	v5.00.03    2013/09/28	FJ) 小野   【OM-2013-0002342】 料金スケジュール定義を取得するSQLを追加。
*	v5.00.04    2013/10/18  FJ) 林     【OM-2013-0003273】 当月ご請求料金誤計算対応。初期費用等誤計算（２重計上）対応。
*	v5.00.05    2013/10/19	FJ) 小野   【OM-2013-0003186】 請求内訳画面の消費税表示変更対応。料金項目抽出変換取得処理（業務パラメータ管理と結合しない）を追加。
*	v6.00.00    2014/01/28	FJ) 小野   【OM-2014-0000223】 債権取得処理（請求契約番号）を追加。
*	v8.00.00    2014/02/14  FJ) 林     【OM-2013-0005255】 料金調整画面、請求作成機能追加。請求契約/スケジュール定義/口座/クレジットカード/請求抑止取得処理。
*	v8.00.01	2014/03/12	FJ) 林     【TG1-2014-0000004】消費税に伴う料金施策（増税対応）
*	v8.00.02	2014/03/25	FJ) 林     【OM-2014-0001075】当月合算請求金額反映対応
*	v9.00.00	2014/05/08	FJ) 林     【ANK-2054-00-00】スマートリンク端末補償対応
*	v9.00.01	2014/06/09	FJ) 中井   【OM-2014-0001815】前受金取り消したら料金再調整でABEND
*	v9.00.02	2014/06/16	FJ) 林     【OM-2013-0001905】マンション性能改善対応
*	v9.00.03	2014/07/09	FJ）小野   【OM-2014-0002397】料金変更時の支払約束日情報（督促）更新の不具合を対応。
*	v32.00.00	2017/04/05	FJ) 清原   【ANK-2996-00-00】ＳＭＳを利用した即時決済サービスの導入
*   v32.00.01	2017/05/29	FJ) 河邊    【OM-2017-0000488】オープンカーソルエラー
*
**********************************************************************/

package eo.ejb.common;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.model.base.CAANConnectionMgr;
import com.fujitsu.futurity.model.base.CAANException;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.ejb.common.JSYejbConnection;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.common.constant.JACStrConst;
import eo.common.util.JCCGetSystemDateUtil;
import eo.common.util.JCCOracleSeqUtil;
import eo.common.util.JPCEditString;
import eo.common.util.JPCUtilCommon;
import eo.ejb.cbm.entity.CH0501ETMsg;
import eo.ejb.cbm.entity.CH0501LE;
import eo.ejb.cbm.entity.ZM0321ETMsg;
import eo.ejb.cbm.entity.ZM0321LE;
import eo.ejb.common.edit.JCHejbCH0901NumberParts;
import eo.ejb.common.entity.JPCejbEntityChecker;

/**
 * モデル共通アクセッサー部品です。<p>
 * サービスインターフェイスで実装します。<p>
 * <BR>
 * @ author 富士通
 */
public class JCHModelCommon extends JPCUtilCommon
{
	/** パッケージ名 */
	private static final String PACKAGE_NAME = "eo.ejb.cbm.entity.";

	/** ETメッセージ接尾辞 */
	private static final String SUFFIX_ETMSG = "ETMsg";
	
	/** 半角スペース */
	private static final String SPACE = " ";
	
	// ▼▼ OCR情報取得 ▼▼
	
	/** OCRバージョン情報 */
	private static final String OCR_VER_INFO = "5";
	
	/** OCR発行月 */
	private static final String OCR_HAK_YM = "00";
	
	/** OCR発行シーケンス */
	private static final String OCR_HAK_SEQ = "00";
	
	/** OCR群番号 */
	private static final String OCR_GUN_NO = "6";
	
	/** OCRバージョン情報のindex */
	public static final int OCR_VER_INFO_ITEM_NO = 0;
	
	/** OCR請求年月のindex */
	public static final int OCR_SEI_YM_ITEM_NO = 1;
	
	/** OCR請求契約番号のindex */
	public static final int OCR_SEIKY_KEI_ITEM_NO = 2;
	
	/** OCR発行月のindex */
	public static final int OCR_HAK_YM_ITEM_NO = 3;
	
	/** OCR発行シーケンスのindex */
	public static final int OCR_HAK_SEQ_ITEM_NO = 4;
	
	/** OCR群番号のindex */
	public static final int OCR_GUN_NO_ITEM_NO = 5;
	
	/** OCR請求金額のindex */
	public static final int OCR_SEIKY_AMNT_ITEM_NO = 6;
	
	/** OCRCDのindex */
	public static final int OCR_CHKDIGIT_ITEM_NO = 7;
	
	// ▲▲ OCR情報取得 ▲▲
	
	// ▼▼ EANバーコード情報取得 ▼▼
	
	/** EANバーコード種別コード（通常） */
	private static final String EAN_BARCODE_SBT_NORM = "01";
	
	/** EAN群番号 */
	private static final String EAN_GUN_NO = "6";
	
	/** EANコード識別子（91） */
	private static final String EAN_SKBTS = "91";
	
	/** EANコード識別子（XX） */
	private static final String EAN_SKBTS_XX = "XX";
	
	/** EAN再発行区分 */
	private static final String EAN_SAIHAKKO_DIV = "0";
	
	/** EAN支払期限日ALL9 */
	private static final String EAN_PAY_KIGEN_DAY_9 = "999999";
	
	/** EAN印紙フラグ（不要） */
	private static final String EAN_INS_FRG_HUYO = "0";
	
	/** EAN印紙フラグ（200円） */
	private static final String EAN_INS_FRG_ARI = "1";
	
	/** EANバーコード取得処理判定フラグ */
	public static final int EAN_CODE = 0;
	
	/** EAN識別子のindex */
	public static final int EAN_SKBTS_ITEM_NO = 0;
	
	/** EANメーカコードのindex */
	public static final int EAN_MAKER_CD_ITEM_NO = 1;
	
	/** EAN会社コードのindex */
	public static final int EAN_COMP_CD_ITEM_NO = 2;
	
	/** EAN請求月のindex */
	public static final int EAN_SEI_MON_ITEM_NO = 3;
	
	/** EAN請求年のindex */
	public static final int EAN_SEI_YEAR_ITEM_NO = 4;
	
	/** EAN群番号のindex */
	public static final int EAN_GUN_ITEM_NO = 5;
	
	/** EAN発行シーケンスのindex */
	public static final int EAN_HSKKO_SEQ_ITEM_NO = 6;
	
	/** EAN請求契約番号のindex */
	public static final int EAN_SEIKY_KEI_NO_ITEM_NO = 7;
	
	/** EAN再発行区分のindex */
	public static final int EAN_SAIHAKKO_DIV_ITEM_NO = 8;
	
	/** EAN支払期限日のindex */
	public static final int EAN_PAY_KIGEN_DAY_ITEM_NO = 9;
	
	/** EAN印紙フラグのindex */
	public static final int EAN_INSHI_FLG_ITEM_NO = 10;
	
	/** EAN支払金額のindex */
	public static final int EAN_PAY_AMNT_ITEM_NO = 11;
	
	/** EANCDのindex */
	public static final int EAN_CHKDIGIT_ITEM_NO = 12;
	
	/** 印紙対象金額(業パラ設定値) */
	private static String CH_INSHI_TAX_TG_AMNT = "CH_INSHI_TAX_TG_AMNT";
	/** メーカーコード(通常)(業パラ設定値) **/
	private static String CH_MAKER_CODE_NORMAL = "CH_MAKER_CODE_NORMAL";
	/** メーカーコード(リアル)(業パラ設定値) **/
	private static String CH_MAKER_CODE_REAL = "CH_MAKER_CODE_REAL";
	/** 会社コード(通常)(業パラ設定値) **/
	private static String CH_COMP_CODE_NORMAL = "CH_COMP_CODE_NORMAL";
	/** 会社コード(リアル)(業パラ設定値) **/
	private static String CH_COMP_CODE_REAL = "CH_COMP_CODE_REAL";
	/** 発行シーケンス最大値(業パラ設定値) **/
	private static String CH_SKS_HAKKO_SEQ_MAX = "CH_SKS_HAKKO_SEQ_MAX";
	
	// ▲▲ EANバーコード情報取得 ▲▲

	/** 請求番号 */
	public static final String KEY_SEIKY_NO = "seiky_no";
	/** 請求年月 */
	public static final String KEY_SEIKY_YM = "seiky_ym";

	/** イベントコード */
	public static final String KEY_EVENT_CD = "event_cd";

	/**
	 * システム日時取得処理です。
	 * アプリケーションプロパティファイルの定義に基いて、
	 * OSの保持日時またはテスト用に擬似的に設定したテスト日時を返却します。
	 * 定義を省略した場合、OSの保持日時を返却します。
	 * 
	 * @return YYYYMMDDhhmmssSSS形式の日付
	 * @exception Exceptionがスローされます。
	 */
	public static String getSysDateTimeStamp() throws Exception
	{
		return JCCGetSystemDateUtil.getSystemDateTime().get(JCCGetSystemDateUtil.KEY_YYYYMMDDHHMMSS_SSS);
	}
	
	/**
	 * システム日時取得処理です。
	 * アプリケーションプロパティファイルの定義に基いて、
	 * OSの保持日時またはテスト用に擬似的に設定したテスト日時を返却します。
	 * 定義を省略した場合、OSの保持日時を返却します。
	 * 
	 * @return YYYYMMDDhhmmss形式の日付
	 * @exception Exceptionがスローされます。
	 */
	public static String getSysDateTime() throws Exception
	{
		return JCCGetSystemDateUtil.getSystemDateTime().get(JCCGetSystemDateUtil.KEY_YYYYMMDDHHMMSS);
	}
	
	/**
	 * システム日時取得処理です。
	 * アプリケーションプロパティファイルの定義に基いて、
	 * OSの保持日時またはテスト用に擬似的に設定したテスト日時を返却します。
	 * 定義を省略した場合、OSの保持日時を返却します。
	 * 
	 * @return YYYYMMDD形式の日付
	 * @exception Exceptionがスローされます。
	 */
	public static String getSysDate() throws Exception
	{
		return JCCGetSystemDateUtil.getSystemDateTime().get(JCCGetSystemDateUtil.KEY_YYYYMMDD);
	}
	
	/**
	 * <p>
	 * 請求システムのオンライン運用日時を取得します。
	 * </p>
	 * @param arg0 処理対象のメッセージキャリア
	 * @param arg1 Agentから渡されたAgentDispatchContext
	 * @return YYYYMMDDhhmmssSSS形式の共通オンライン運用日時
	 */
	public static Object getOpeDateTimeStamp(CAANMsg arg0, AgentDispatchContext arg1)
	{
		String opeDate = (String)JCCModelCommon.getOpeDate(arg0, arg1, null);
		if (null == opeDate)
		{
			return null;
		}
		String opeTimeStamp = JCCModelCommon.getSysDateTimeStamp();
		return opeDate + opeTimeStamp.substring(8, 17);
	}
	
	/**
	 * Oracleシーケンス取得処理です。
	 * Oracleのシーケンス採番値を返却します。
	 *
	 * @param arg0 シーケンス定義名
	 * @return 採番値
	 * @exception Exceptionがスローされます。
	 */
	public static String getNextSeq(String arg0) throws Exception
	{
// OM-2017-0000488 2017/05/29 MOD START
//		Connection con = JSYejbConnection.getConnection("DUAL");
//		return JCCOracleSeqUtil.getNextSeq(con, arg0);
		Connection con = null;
		try
		{
			con = JSYejbConnection.getConnection("DUAL");
			return JCCOracleSeqUtil.getNextSeq(con, arg0);
		}
		finally
		{
			if(con != null)
			{
				CAANConnectionMgr.getInstance().close(con);
			}
		}
// OM-2017-0000488 2017/05/29 MOD END
	}

	/**
	 * フォーマット化したOracleシーケンス取得処理です。
	 * フォーマット化したOracleのシーケンス採番値を返却します。
	 * Oracleシーケンスの採番値を取得し、引数の接頭辞の付与と接頭辞と採番値の間のゼロ埋めを行います。
	 * 
	 * @param arg0 シーケンス定義名
	 * @param arg1 接頭語
	 * @param arg2 桁数
	 * @return 採番値
	 */
	public static String getFormatedNextSeq(String arg0,String arg1,int arg2)
	{
		String value = null;
// OM-2017-0000488 2017/05/29 MOD START
//		try
//		{
//			Connection con = JSYejbConnection.getConnection("DUAL");
//			value = JCCOracleSeqUtil.getFormatedNextSeq(con, arg0, arg1, arg2);
//		}
//		catch (Exception e)
//		{
//			throw new CAANRuntimeException(e);
//		}
		Connection con = null;
		try
		{
			con = JSYejbConnection.getConnection("DUAL");
			value = JCCOracleSeqUtil.getFormatedNextSeq(con, arg0, arg1, arg2);
		}
		catch (Exception e)
		{
			throw new CAANRuntimeException(e);
		}
		finally
		{
			if(con != null)
			{
				CAANConnectionMgr.getInstance().close(con);
			}
		}
// OM-2017-0000488 2017/05/29 MOD END
		return value;
	}

	/**
	 * 指定された機能コードで処理が呼び出されているか判定します。
	 * <br>
	 * @param arg0 処理対象のメッセージキャリア
	 * @param arg1 Agentから渡されたAgentDispatchContext
	 * @param arg2 判定対象の機能コード
	 * @return メッセージの機能コードと引数の機能コードが一致する場合はtrue、一致しない場合はfalse
	 */
	public static boolean isFuncCd(CAANMsg arg0, AgentDispatchContext arg1, Object arg2)
	{
		return JPCModelCommon.isFuncCd(arg0, arg1, (String)arg2);
	}

	/**
	 * <p>
	 * 共通のオンライン運用日付を取得します。
	 * </p>
	 * @param arg0 処理対象のメッセージキャリア
	 * @return 共通オンライン運用日付
	 */
	public static String getOpeDate(CAANMsg arg0)
	{
		try
		{
			//return JCCModelCommon.getOpeDate(null);
			return "";
		}
		catch (Exception e)
		{
			throw new CAANRuntimeException(e);
		}
	}
	/**
	 * 排他モードタイムスタンプチェックを行います。
	 * <br>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param schemaID スキーマID
	 * @return 排他処理が成功した場合はtrue、成功しなかった場合はfalse
	 */
	public static boolean succeededExclusiveLock(CAANMsg inMsg, AgentDispatchContext inContext, Object schemaID)
	{
		// 排他モードタイムスタンプチェックを行う
		JPCejbEntityChecker ins = new JPCejbEntityChecker(PACKAGE_NAME + schemaID + SUFFIX_ETMSG);
		return ins.succeededExclusiveLock(inMsg, (String)schemaID);
	}

	/**
	 * EANバーコード情報取得を行います。
	 * 
	 * @param eanBarcodeSbtCd EANバーコード種別コード（10:通常、20:リアル）
	 * @param seiYm 請求年月（yyyyMM）
	 * @param seikyKeiNo 請求契約番号
	 * @param eanTratKigenEventCd EAN取扱期限日イベントコード
	 * @param seikyAmnt 請求金額（当月請求金額税込 ＋ 合算未納金額合計）
	 * @param hakkoSeq 発行シーケンス番号
	 * 
	 * @return ArrayList<String> EANバーコード情報のリスト
	 * 
	 * @throws Exception 例外が発生した場合
	 */
	public static ArrayList<String> getEanBarcodeInf(
			String eanBarcodeSbtCd, String seiYm, String seikyKeiNo, String eanTratKigenEventCd, long seikyAmnt, int hakkoSeq) throws Exception
	{
		// 初期値設定
		// 識別子
		String skbtsi = SPACE;
		// メーカコード
		String makerCd = SPACE;
		// 会社コード
		String compCd = SPACE;
		// 請求月
		String seiMon = SPACE;
		// 請求年
		String seiYear = SPACE;
		// 群番号
		String gunNo = SPACE;
		// 請求契約番号
		String outSeikyKeiNo = SPACE;
		// 再発行区分
		String saihakkoDiv = SPACE;
		// 支払期限日
		String payKigenDay = SPACE;
		// 印紙フラグ
		String inshiFlg = SPACE;
		// 支払金額
		String payAmnt = SPACE;
		// チェックデジット
		String chkdigit = SPACE;
		
		// クラスのインスタンス化
		JCHModelCommon jchCommon = new JCHModelCommon();
		
		// 請求金額1円以上100万円未満の場合
		if(1 <= seikyAmnt && seikyAmnt < 1000000)
		{
			// 識別子
			skbtsi = EAN_SKBTS;
			// EANバーコード種別コード　＝　"01"(通常)の場合
			if(EAN_BARCODE_SBT_NORM.equals(eanBarcodeSbtCd))
			{
				// 業パラ取得(メーカーコード（通常）)
				CAANMsg msgMakerCodeNm = jchCommon.getGyoumuParam(CH_MAKER_CODE_NORMAL);
				makerCd = msgMakerCodeNm.getString(ZM0321ETMsg.WORK_PARAM_SETTE_VALUE);
				// 業パラ取得(会社コード（通常）)
				CAANMsg msgCompCodeNm = jchCommon.getGyoumuParam(CH_COMP_CODE_NORMAL);
				compCd = msgCompCodeNm.getString(ZM0321ETMsg.WORK_PARAM_SETTE_VALUE);
			}
			// 上記以外の場合
			else
			{
				// 業パラ取得(メーカーコード（リアル）)
				CAANMsg msgMakerCodeNm = jchCommon.getGyoumuParam(CH_MAKER_CODE_REAL);
				makerCd = msgMakerCodeNm.getString(ZM0321ETMsg.WORK_PARAM_SETTE_VALUE);
				// 業パラ取得(会社コード（リアル）)
				CAANMsg msgCompCodeNm = jchCommon.getGyoumuParam(CH_COMP_CODE_REAL);
				compCd = msgCompCodeNm.getString(ZM0321ETMsg.WORK_PARAM_SETTE_VALUE);
			}
			// 請求月
			seiMon = JPCEditString.toMonthFromYm(seiYm);
			// 請求年（西暦の下2桁）
			seiYear = seiYm.substring(2, 4);
			// 群番号
			gunNo = EAN_GUN_NO;
			
			// 発行シーケンス
			hakkoSeq = getSksHakkoSeq(hakkoSeq);
			
			// 請求契約番号
			outSeikyKeiNo = seikyKeiNo;
			// 再発行区分
			saihakkoDiv = EAN_SAIHAKKO_DIV;
			
			// EAN取扱期限日イベントコード ≠ ""の場合
			if(!JACStrConst.KARA_MOJI.equals(eanTratKigenEventCd))
			{
				// 取得した支払期限日の下６桁（YYMMDD）を設定
				payKigenDay = jchCommon.getPayKigenDay(seiYm).substring(2, 8);
			}
			// 上記以外の場合
			else
			{
				// イベントコードに値が設定されていない場合、"999999"を設定する
				payKigenDay = EAN_PAY_KIGEN_DAY_9;
			}
			
			// 印紙税対象金額を取得
			CAANMsg msgZM0321 = jchCommon.getGyoumuParam(CH_INSHI_TAX_TG_AMNT);
			String inshiTaxTgAmnt = msgZM0321.getString(ZM0321ETMsg.WORK_PARAM_SETTE_VALUE);
			
			// 支払金額が印紙税対象金額未満のとき
			if(seikyAmnt < Long.valueOf(inshiTaxTgAmnt))
			{
				// 印紙フラグ（不要）
				inshiFlg = EAN_INS_FRG_HUYO;
			}
			// 上記以外の場合
			else
			{
				// 印紙フラグ（200円）
				inshiFlg = EAN_INS_FRG_ARI;
			}
			// 支払金額（下6桁）
			payAmnt = JPCEditString.fillZero(String.valueOf(seikyAmnt), 12, false);
			payAmnt = payAmnt.substring(payAmnt.length() - 6);
			
			StringBuffer bufData = new StringBuffer();
			
			// 上記項目を結合
			// 識別子
			bufData.append(skbtsi);
			
			// メーカーコード
			bufData.append(makerCd);
			// 会社コード
			bufData.append(compCd);
			// 請求月
			bufData.append(seiMon);
			// 請求年
			bufData.append(seiYear);
			// 群番号
			bufData.append(gunNo);
			// 発行シーケンス
			bufData.append(hakkoSeq);
			// 請求契約番号
			bufData.append(outSeikyKeiNo);
			// 再発行区分
			bufData.append(saihakkoDiv);
			// 支払期限日
			bufData.append(payKigenDay);
			// 印紙フラグ
			bufData.append(inshiFlg);
			// 支払金額
			bufData.append(payAmnt);
			// チェックデジット算出
			chkdigit = jchCommon.getChkdigitEan(bufData.toString());
		}
		// 請求金額が100万円以上の場合
		else if(1000000 <= seikyAmnt)
		{
			// 識別子
			skbtsi = EAN_SKBTS_XX;
		}
		ArrayList<String> eanInfoList = new ArrayList<String>();
		
		// 識別子
		eanInfoList.add(JPCEditString.fillHalfSpace(skbtsi, 2, true));
		// メーカーコード
		eanInfoList.add(JPCEditString.fillHalfSpace(makerCd, 6, true));
		// 会社コード
		eanInfoList.add(JPCEditString.fillHalfSpace(compCd, 5, true));
		// 請求月
		eanInfoList.add(JPCEditString.fillHalfSpace(seiMon, 2, true));
		// 請求年
		eanInfoList.add(JPCEditString.fillHalfSpace(seiYear, 2, true));
		// 群番号
		eanInfoList.add(gunNo);
		// 発行シーケンス
		eanInfoList.add(Integer.toString(hakkoSeq));
		// 請求先番号
		eanInfoList.add(JPCEditString.fillHalfSpace(outSeikyKeiNo, 10, true));
		// 再発行区分
		eanInfoList.add(saihakkoDiv);
		// 支払期限日
		eanInfoList.add(JPCEditString.fillHalfSpace(payKigenDay, 6, true));
		// 印紙フラグ
		eanInfoList.add(inshiFlg);
		// 支払金額
		eanInfoList.add(JPCEditString.fillHalfSpace(payAmnt, 6, true));
		// チェックデジット
		eanInfoList.add(chkdigit);
		
		return eanInfoList;
	}
	
	/**
	 * OCR情報の取得を行います。
	 * 
	 * @param seiYm 請求年月(yyyyMM)
	 * @param seikykeiNo 請求契約番号
	 * @param seikyAmnt 請求金額
	 * 
	 * @return ArrayList<String> OCR情報のリスト
	 * 
	 * @throws Exception 例外が発生した場合
	 */
	public static ArrayList<String> getOcrInf(String seiYm, String seikykeiNo, Long seikyAmnt) throws Exception
	{
		// クラスのインスタンス化
		JCHModelCommon jchCommon = new JCHModelCommon();

		// 桁数調整
		// OCR請求年月
		String ocrSeiYm = seiYm.substring(2, 6);
		// OCR請求金額（左ゼロパディング）
		String ocrSeikyAmnt = JPCEditString.fillZero(seikyAmnt.toString(), 12, false);
		
		// チェックディジット算出
		StringBuffer bufData = new StringBuffer();
		
		// OCRバージョン情報
		bufData.append(OCR_VER_INFO);
		// OCR請求年月
		bufData.append(ocrSeiYm);
		// OCR請求契約番号
		bufData.append(seikykeiNo);
		// OCR発行月
		bufData.append(OCR_HAK_YM);
		// OCR発行シーケンス
		bufData.append(OCR_HAK_SEQ);
		// OCR群番号
		bufData.append(OCR_GUN_NO);
		// OCR請求金額
		bufData.append(ocrSeikyAmnt);
		
		String chkdigtTrgData = bufData.toString();
		
		// 偶数桁と奇数桁の合計の算出
		String[] rslt = jchCommon.getDigGkData(chkdigtTrgData);
		// 奇数桁合計
		int kisu = Integer.parseInt(rslt[0]);
		// 偶数桁合計
		int gusu = Integer.parseInt(rslt[1]);
		
		// 奇数桁＋偶数桁の合計の下一桁よりチェックディジット算出
		int intChkdigt = (kisu + gusu) % 10;
		
		if(intChkdigt != 0)
		{
			intChkdigt = 10 - intChkdigt;
		}
		
		// OCR情報のリストに設定
		ArrayList<String> ocrInf = new ArrayList<String>();
		
		// OCRバージョン情報
		ocrInf.add(OCR_VER_INFO);
		// OCR請求年月
		ocrInf.add(ocrSeiYm);
		// OCR請求契約番号
		ocrInf.add(seikykeiNo);
		// OCR発行月
		ocrInf.add(OCR_HAK_YM);
		// OCR発行シーケンス
		ocrInf.add(OCR_HAK_SEQ);
		// OCR群番号
		ocrInf.add(OCR_GUN_NO);
		// OCR請求金額
		ocrInf.add(ocrSeikyAmnt);
		// OCRCD
		ocrInf.add(String.valueOf(intChkdigt));
		
		return ocrInf;
	}
	
	/**
	 * 空白で正規化する
	 * @param inMsg 対象のCBSメッセージ
	 * @param item  対象となる項目の項目名
	 * @param keta  正規化したい桁数
	 */
	public static void spaceNormalization(CAANMsg inMsg, String item, String keta)
	{
		if(null != inMsg.getString(item)){
			inMsg.set(item, inMsg.getString(item).format("%-" + keta + "s", inMsg.getString(item)));
		}
		else {
			inMsg.set(item, String.format("%-" + keta + "s", ""));
		}
	}
	
	/**
	 * SQL文生成（料金項目抽出変換）
	 * 
	 * @return StringBuffer
	 */
	public static StringBuffer getSQL_CH0401_1()
	{
		StringBuffer sql_Buff = new StringBuffer();
		
		sql_Buff.append(" SELECT ")
				.append("     CH0401.PRC_GRP_CD, ")
				.append("     CH0401.PCRS_CD, ")
				.append("     CH0401.PRC_SVC_CD, ")
				.append("     CH0401.PRC_KMK_CD ")
				.append("  FROM CH_M_PRC_KMK_CS_CHGE CH0401 ")
				.append(" WHERE CH0401.SYS_CD = ? ")
				.append("     AND CH0401.WORK_KINO_SKBT_CD = ? ")
				.append("     AND ? BETWEEN CH0401.PRC_KMK_CS_CHGE_TSTAYMD AND CH0401.PRC_KMK_CS_CHGE_TENDYMD ")
				.append("     AND CH0401.MK_FLG = '0' ")
				.append("     AND CH0401.RSV_APLY_YMD || CH0401.GENE_ADD_DTM = ")
				.append("         ( SELECT MAX(CH0401_GENE.RSV_APLY_YMD || CH0401_GENE.GENE_ADD_DTM) AS CH0401_MAX ")
				.append("             FROM CH_M_PRC_KMK_CS_CHGE CH0401_GENE ")
				.append("           WHERE CH0401_GENE.SYS_CD = CH0401.SYS_CD ")
				.append("               AND CH0401_GENE.WORK_KINO_SKBT_CD = CH0401.WORK_KINO_SKBT_CD ")
				.append("               AND CH0401_GENE.CHSHT_CHG_CD = CH0401.CHSHT_CHG_CD ")
				.append("               AND CH0401_GENE.PRC_GRP_CD = CH0401.PRC_GRP_CD ")
				.append("               AND CH0401_GENE.PCRS_CD = CH0401.PCRS_CD ")
				.append("               AND CH0401_GENE.PRC_SVC_CD = CH0401.PRC_SVC_CD ")
				.append("               AND CH0401_GENE.PRC_KMK_CD = CH0401.PRC_KMK_CD ")
				.append("               AND CH0401_GENE.OUTPUT_PRC_GRP_CD = CH0401.OUTPUT_PRC_GRP_CD ")
				.append("               AND CH0401_GENE.OUT_PCRS_CD = CH0401.OUT_PCRS_CD ")
				.append("               AND CH0401_GENE.OUT_PRC_SVC_CD = CH0401.OUT_PRC_SVC_CD ")
				.append("               AND CH0401_GENE.OUT_PRC_KMK_CD = CH0401.OUT_PRC_KMK_CD ")
				.append("               AND CH0401_GENE.RSV_APLY_YMD <= ? ")
				.append("               AND CH0401_GENE.MK_FLG = '0' )");
		
		return sql_Buff;
	}
	
	/**
	 * SQL文生成（料金項目抽出変換と業務パラメータ管理）
	 * 
	 * @return StringBuffer
	 */
	public static StringBuffer getSQL_CH0401_ZM0321_1()
	{
		StringBuffer sql_Buff = new StringBuffer();
		
		sql_Buff.append(" SELECT ")
				.append("     CH0401.PRC_GRP_CD, ")
				.append("     CH0401.PCRS_CD, ")
				.append("     CH0401.PRC_SVC_CD, ")
				.append("     CH0401.PRC_KMK_CD ")
				.append("  FROM CH_M_PRC_KMK_CS_CHGE CH0401 ")
				.append("     INNER JOIN ZM_M_WORK_PARAM_KNRI ZM0321 ")
				.append("        ON CH0401.WORK_KINO_SKBT_CD = ZM0321.WORK_PARAM_SETTE_VALUE ")
				.append("       AND ZM0321.WORK_PARAM_ID = ? ")
				.append("       AND ? BETWEEN ZM0321.WORK_PARAM_TSTAYMD AND ZM0321.WORK_PARAM_TENDYMD ")
				.append("       AND ZM0321.MK_FLG = '0' ")
				.append(" WHERE CH0401.SYS_CD = ? ")
				.append("     AND ? BETWEEN CH0401.PRC_KMK_CS_CHGE_TSTAYMD AND CH0401.PRC_KMK_CS_CHGE_TENDYMD ")
				.append("     AND CH0401.MK_FLG = '0' ")
				.append("     AND CH0401.RSV_APLY_YMD || CH0401.GENE_ADD_DTM = ")
				.append("         ( SELECT MAX(CH0401_GENE.RSV_APLY_YMD || CH0401_GENE.GENE_ADD_DTM) AS CH0401_MAX ")
				.append("             FROM CH_M_PRC_KMK_CS_CHGE CH0401_GENE ")
				.append("           WHERE CH0401_GENE.SYS_CD = CH0401.SYS_CD ")
				.append("               AND CH0401_GENE.WORK_KINO_SKBT_CD = CH0401.WORK_KINO_SKBT_CD ")
				.append("               AND CH0401_GENE.CHSHT_CHG_CD = CH0401.CHSHT_CHG_CD ")
				.append("               AND CH0401_GENE.PRC_GRP_CD = CH0401.PRC_GRP_CD ")
				.append("               AND CH0401_GENE.PCRS_CD = CH0401.PCRS_CD ")
				.append("               AND CH0401_GENE.PRC_SVC_CD = CH0401.PRC_SVC_CD ")
				.append("               AND CH0401_GENE.PRC_KMK_CD = CH0401.PRC_KMK_CD ")
				.append("               AND CH0401_GENE.OUTPUT_PRC_GRP_CD = CH0401.OUTPUT_PRC_GRP_CD ")
				.append("               AND CH0401_GENE.OUT_PCRS_CD = CH0401.OUT_PCRS_CD ")
				.append("               AND CH0401_GENE.OUT_PRC_SVC_CD = CH0401.OUT_PRC_SVC_CD ")
				.append("               AND CH0401_GENE.OUT_PRC_KMK_CD = CH0401.OUT_PRC_KMK_CD ")
				.append("               AND CH0401_GENE.RSV_APLY_YMD <= ? ")
				.append("               AND CH0401_GENE.MK_FLG = '0' )");
		
		return sql_Buff;
	}

	/**
	 * SQL文生成（料金項目抽出変換）
	 * 
	 * @return StringBuffer
	 */
	public static StringBuffer getSQL_CH0401_2()
	{
		StringBuffer sql_Buff = new StringBuffer();
		
		sql_Buff.append(" SELECT ")
				.append("     CH0401.PRC_GRP_CD, ")
				.append("     CH0401.PCRS_CD, ")
				.append("     CH0401.PRC_SVC_CD, ")
				.append("     CH0401.PRC_KMK_CD ")
				.append(" FROM ")
				.append("     CH_M_PRC_KMK_CS_CHGE CH0401 ")
				.append(" WHERE ")
				.append("     CH0401.SYS_CD = ? ")
				.append("     AND CH0401.WORK_KINO_SKBT_CD = ? ")
				.append("     AND CH0401.CHSHT_CHG_CD = ? ")
				.append("     AND CH0401.PRC_GRP_CD = ? ")
				.append("     AND CH0401.PCRS_CD = ? ")
				.append("     AND CH0401.PRC_SVC_CD = ? ")
				.append("     AND CH0401.PRC_KMK_CD = ? ")
				.append("     AND ? BETWEEN CH0401.PRC_KMK_CS_CHGE_TSTAYMD AND CH0401.PRC_KMK_CS_CHGE_TENDYMD ")
				.append("     AND CH0401.MK_FLG = '0' ");

		return sql_Buff;
	}
	
	/**
	 * SQL文生成（料金項目抽出変換）
	 * 
	 * @return StringBuffer
	 */
	public static StringBuffer getSQL_CH0401_3()
	{
		StringBuffer sql_Buff = new StringBuffer();

		sql_Buff.append(" SELECT ")
				.append("     CH0401.PRC_GRP_CD, ")
				.append("     CH0401.PCRS_CD, ")
				.append("     CH0401.PRC_SVC_CD, ")
				.append("     CH0401.PRC_KMK_CD ")
				.append(" FROM ")
				.append("     CH_M_PRC_KMK_CS_CHGE CH0401 ")
				.append(" WHERE ")
				.append("     CH0401.SYS_CD = ? ")
				.append("     AND CH0401.WORK_KINO_SKBT_CD = ? ")
				.append("     AND CH0401.CHSHT_CHG_CD = ? ")
				.append("     AND ? BETWEEN CH0401.PRC_KMK_CS_CHGE_TSTAYMD AND CH0401.PRC_KMK_CS_CHGE_TENDYMD ")
				.append("     AND CH0401.MK_FLG = '0' ");

		return sql_Buff;
	}
	
	/**
	 * SQL文生成（料金項目抽出変換と業務パラメータ管理）
	 * 
	 * @return StringBuffer
	 */
	public static StringBuffer getSQL_CH0401_ZM0321_2()
	{
		StringBuffer sql_Buff = new StringBuffer();
		
		sql_Buff.append(" SELECT ")
				.append("     CH0401.PRC_GRP_CD ")
				.append("   || CH0401.PCRS_CD ")
				.append("   || CH0401.PRC_SVC_CD ")
				.append("   || CH0401.PRC_KMK_CD  AS PRC_GRP_CD")
				.append("  FROM CH_M_PRC_KMK_CS_CHGE CH0401 ")
				.append("     INNER JOIN ZM_M_WORK_PARAM_KNRI ZM0321 ")
				.append("        ON CH0401.WORK_KINO_SKBT_CD = ZM0321.WORK_PARAM_SETTE_VALUE ")
				.append("       AND ZM0321.WORK_PARAM_ID = ? ")
				.append("       AND ? BETWEEN ZM0321.WORK_PARAM_TSTAYMD AND ZM0321.WORK_PARAM_TENDYMD ")
				.append("       AND ZM0321.MK_FLG = '0' ")
				.append(" WHERE CH0401.SYS_CD = ? ")
				.append("     AND ? BETWEEN CH0401.PRC_KMK_CS_CHGE_TSTAYMD AND CH0401.PRC_KMK_CS_CHGE_TENDYMD ")
				.append("     AND CH0401.MK_FLG = '0' ")
				.append("     AND CH0401.RSV_APLY_YMD || CH0401.GENE_ADD_DTM = ")
				.append("         ( SELECT MAX(CH0401_GENE.RSV_APLY_YMD || CH0401_GENE.GENE_ADD_DTM) AS CH0401_MAX ")
				.append("             FROM CH_M_PRC_KMK_CS_CHGE CH0401_GENE ")
				.append("           WHERE CH0401_GENE.SYS_CD = CH0401.SYS_CD ")
				.append("               AND CH0401_GENE.WORK_KINO_SKBT_CD = CH0401.WORK_KINO_SKBT_CD ")
				.append("               AND CH0401_GENE.CHSHT_CHG_CD = CH0401.CHSHT_CHG_CD ")
				.append("               AND CH0401_GENE.PRC_GRP_CD = CH0401.PRC_GRP_CD ")
				.append("               AND CH0401_GENE.PCRS_CD = CH0401.PCRS_CD ")
				.append("               AND CH0401_GENE.PRC_SVC_CD = CH0401.PRC_SVC_CD ")
				.append("               AND CH0401_GENE.PRC_KMK_CD = CH0401.PRC_KMK_CD ")
				.append("               AND CH0401_GENE.OUTPUT_PRC_GRP_CD = CH0401.OUTPUT_PRC_GRP_CD ")
				.append("               AND CH0401_GENE.OUT_PCRS_CD = CH0401.OUT_PCRS_CD ")
				.append("               AND CH0401_GENE.OUT_PRC_SVC_CD = CH0401.OUT_PRC_SVC_CD ")
				.append("               AND CH0401_GENE.OUT_PRC_KMK_CD = CH0401.OUT_PRC_KMK_CD ")
				.append("               AND CH0401_GENE.RSV_APLY_YMD <= ? ")
				.append("               AND CH0401_GENE.MK_FLG = '0' )");
		
		return sql_Buff;
	}
	
	/**
	 * SQL文生成（料金項目出力名称）
	 * 
	 * @return StringBuffer
	 */
	public static StringBuffer getPrcKmkOutPutNmSQL(){

		StringBuffer sql_Buff = new StringBuffer();
		sql_Buff.append(" SELECT ")
				.append("     CH0391.PRC_KMK_NM ")
				.append("    ,CH0391.UMKM_KMK_CD ")
				.append("    ,CH0391.UMKM_PRC_GRP_CD ")
				.append("    ,CH0391.UMKM_PCRS_CD ")
				.append("    ,CH0391.UMKM_PRC_SVC_CD ")
				.append("    ,CH0391.UMKM_PRC_KMK_CD ")
				.append("    ,CH0391.UMKM_PRC_NM_MOJI_HUKA_CD ")
				.append("    ,CH0391.DSP_JUN ")
				.append("    ,CH0391.INDENT_CNT ")
				.append("    ,CH0391.SKS_NO_RAN_DSP_CTRL_FLG ")
				.append("    ,CH0391.SVKEI_NO_DSP_CTRL_FLG ")
				.append("    ,CH0391.SEIKY_KEI_NO_DSP_CTRL_FLG ")
				.append("    ,CH0391.SEIRI_NO_DSP_CTRL_FLG ")
				.append("    ,CH0391.MANS_ID_DSP_CTRL_FLG ")
				.append("    ,CH0391.ADRRM_DSP_CTRL_FLG ")
				.append("    ,CH0391.USE_PRD_DSP_CTRL_FLG ")
				.append("    ,CH0391.PRC_CD_DSP_CTRL_FLG ")
				.append("    ,CH0391.AMNT_DSP_COLUM_CNT ")
				.append("    ,CH0391.TAX_DIV_DSP_FLG ")
				.append("    ,CH0391.COMMENT_DSP_FLG ")
				.append("    ,CH0391.N_0_YEN_DTL_DSP_CTRL_FLG ")
				.append("    ,CH0391.KUGYO_INS_FLG ")
				.append("    ,CH0451.CHUSHK_HENSHU_PATTERN_CD AS COMMENT_HENSHU_PATTERN_CD ")
				.append("    ,CH0451.SIKY_NYO_COMMENT ")
				.append("    ,CASE WHEN ( ")
				.append("          SELECT ")
				.append("              COUNT(1) ")
				.append("          FROM ")
				.append("              CH_M_PRC_KMK_CS_CHGE CH0401_SUB")
				.append("          WHERE ")
				.append("              CH0401_SUB.SYS_CD = ? ")
				.append("              AND CH0401_SUB.WORK_KINO_SKBT_CD = ? ")
				.append("              AND CH0401_SUB.CHSHT_CHG_CD = ? ")
				.append("              AND CH0401_SUB.PRC_GRP_CD = CH0391.PRC_GRP_CD ")
				.append("              AND CH0401_SUB.PCRS_CD = CH0391.PCRS_CD ")
				.append("              AND CH0401_SUB.PRC_SVC_CD = CH0391.PRC_SVC_CD ")
				.append("              AND CH0401_SUB.PRC_KMK_CD = CH0391.PRC_KMK_CD ")
				.append("              AND ? BETWEEN CH0401_SUB.PRC_KMK_CS_CHGE_TSTAYMD AND CH0401_SUB.PRC_KMK_CS_CHGE_TENDYMD ")
				.append("              AND CH0401_SUB.MK_FLG = '0' ")
				.append("              AND ROWNUM = 1 ")
				.append("               ) = 0 THEN '0' ELSE '1' END AS CH0401_EXIST ")
				.append(" FROM ")
				.append("     CH_M_PRC_KMK_OPUT_NM CH0391 ")
				.append("     LEFT JOIN")
				.append("     ( SELECT ")
				.append("            CH0451_SUB.SYS_CD ")
				.append("          , CH0451_SUB.PRC_GRP_CD ")
				.append("          , CH0451_SUB.PCRS_CD ")
				.append("          , CH0451_SUB.PRC_SVC_CD ")
				.append("          , CH0451_SUB.PRC_KMK_CD ")
				.append("          , CH0451_SUB.CHUSHK_HENSHU_TSTAYMD ")
				.append("          , CH0451_SUB.CHUSHK_HENSHU_TENDYMD ")
				.append("          , CH0451_SUB.CHUSHK_HENSHU_PATTERN_CD ")
				.append("          , CH0451_SUB.SIKY_NYO_COMMENT ")
				.append("          , CH0451_SUB.MK_FLG ")
				.append("        FROM ")
				.append("            CH_M_CHUSHK_HENSHU CH0451_SUB ")
				.append("       WHERE ")
				.append("            CH0451_SUB.SYS_CD = ?")
				.append("        AND ? BETWEEN CH0451_SUB.CHUSHK_HENSHU_TSTAYMD AND CH0451_SUB.CHUSHK_HENSHU_TENDYMD ")
				.append("        AND CH0451_SUB.MK_FLG = '0'")
				.append("      ) CH0451")
				.append("       ON CH0451.PRC_GRP_CD = CH0391.PRC_GRP_CD ")
				.append("      AND CH0451.PCRS_CD = CH0391.PCRS_CD ")
				.append("      AND CH0451.PRC_SVC_CD = CH0391.PRC_SVC_CD ")
				.append("      AND CH0451.PRC_KMK_CD = CH0391.PRC_KMK_CD ")
				.append(" WHERE ")
				.append("      CH0391.PRC_KMK_NM_SBT_CD = ?")
				.append("  AND CH0391.PRC_GRP_CD = ? ")
				.append("  AND CH0391.PCRS_CD = ? ")
				.append("  AND CH0391.PRC_SVC_CD = ? ")
				.append("  AND CH0391.PRC_KMK_CD = ?  ")
				.append("  AND ? BETWEEN CH0391.PRC_KMK_OPUT_NM_TSTAYMD AND CH0391.PRC_KMK_OPUT_NM_TENDYMD ")
				.append("  AND CH0391.MK_FLG = '0' ");

			return sql_Buff;
	}
	
	/**
	 * SQL文生成（料金項目抽出変換）
	 * 
	 * @return StringBuffer
	 */
	public static StringBuffer getPrcKmkOutPutNmSQL2(){

		StringBuffer sql_Buff = new StringBuffer();
		sql_Buff.append(" SELECT ")
				.append("     CH0401.PRC_GRP_CD, ")
				.append("     CH0401.PCRS_CD, ")
				.append("     CH0401.PRC_SVC_CD, ")
				.append("     CH0401.PRC_KMK_CD ")
				.append("  FROM CH_M_PRC_KMK_CS_CHGE CH0401 ")
				.append("     INNER JOIN ZM_M_WORK_PARAM_KNRI ZM0321 ")
				.append("        ON CH0401.WORK_KINO_SKBT_CD = ZM0321.WORK_PARAM_SETTE_VALUE ")
				.append("       AND ZM0321.WORK_PARAM_ID = ? ")
				.append("       AND ? BETWEEN ZM0321.WORK_PARAM_TSTAYMD AND ZM0321.WORK_PARAM_TENDYMD ")
				.append("       AND ZM0321.MK_FLG = '0' ")
				.append(" WHERE CH0401.SYS_CD = ? ")
				.append("     AND ? BETWEEN CH0401.PRC_KMK_CS_CHGE_TSTAYMD AND CH0401.PRC_KMK_CS_CHGE_TENDYMD ")
				.append("     AND CH0401.MK_FLG = '0' ")
				.append("     AND CH0401.RSV_APLY_YMD || CH0401.GENE_ADD_DTM = ")
				.append("         ( SELECT MAX(CH0401_GENE.RSV_APLY_YMD || CH0401_GENE.GENE_ADD_DTM) AS CH0401_MAX ")
				.append("             FROM CH_M_PRC_KMK_CS_CHGE CH0401_GENE ")
				.append("           WHERE CH0401_GENE.SYS_CD = CH0401.SYS_CD ")
				.append("               AND CH0401_GENE.WORK_KINO_SKBT_CD = CH0401.WORK_KINO_SKBT_CD ")
				.append("               AND CH0401_GENE.CHSHT_CHG_CD = CH0401.CHSHT_CHG_CD ")
				.append("               AND CH0401_GENE.PRC_GRP_CD = CH0401.PRC_GRP_CD ")
				.append("               AND CH0401_GENE.PCRS_CD = CH0401.PCRS_CD ")
				.append("               AND CH0401_GENE.PRC_SVC_CD = CH0401.PRC_SVC_CD ")
				.append("               AND CH0401_GENE.PRC_KMK_CD = CH0401.PRC_KMK_CD ")
				.append("               AND CH0401_GENE.OUTPUT_PRC_GRP_CD = CH0401.OUTPUT_PRC_GRP_CD ")
				.append("               AND CH0401_GENE.OUT_PCRS_CD = CH0401.OUT_PCRS_CD ")
				.append("               AND CH0401_GENE.OUT_PRC_SVC_CD = CH0401.OUT_PRC_SVC_CD ")
				.append("               AND CH0401_GENE.OUT_PRC_KMK_CD = CH0401.OUT_PRC_KMK_CD ")
				.append("               AND CH0401_GENE.RSV_APLY_YMD <= ? ")
				.append("               AND CH0401_GENE.MK_FLG = '0' )");

			return sql_Buff;
	}
	
	/**
	 * <p>
	 * 料金調整登録、料金変更登録、随時請求登録のメイン処理
	 * 料金集計マスタを検索する。
	 * </p>
	 * @return StringBuffer
	 */
	public static StringBuffer getAC_M_PRC_SHUK_SQL()
	{
		// SQL文_基本部1
		StringBuffer sql_Buff = new StringBuffer();
		sql_Buff.append(" SELECT ")
				.append("     AC0311.SHUK_MT_PRC_KMK_CD ")
				.append("    ,AC0311.SHUK_SK_PRC_KMK_CD ")
				.append("    ,AC0311.SHUK_TANI_CD ")
				.append("    ,AC0311.KAGEN_SKBT_CD ")
				.append("    ,AC0311.PRC_KMK_OPUT_SKBT_CD ")
				.append("    ,AC0311.SHUK_SK_0_YEN_OPUT_SKBT_CD ")
				.append("    ,AC0311.TAX_CALC_SKBT_CD ")
				.append("    ,AC0311.SHUK_SK_TRN_TMG_CTRL_CD ")
				.append("    ,AC0311.SHUK_WAY_CD ")
				.append("    ,AC0311.SHUK_GEND_AMNT ")
				.append("    ,AC0311.MAEUK_SOSAI_YUSEN_JUN ")
				.append("    ,AC0311.SHUK_SK_ROUND_WAY_CD ")
				.append("    ,AC0311.SHUK_SK_PRC_KMK_CKAN_CD ")
				.append(" FROM ")
				.append("     AC_M_PRC_SHUK AC0311 ")
				.append(" WHERE")
				.append("     AC0311.SYS_CD = ? ")
				.append(" AND AC0311.SHUK_MT_PRC_KMK_CD = ? ")
				.append(" AND AC0311.SHUK_SK_TRN_TMG_CTRL_CD = ? ")
				.append(" AND ? BETWEEN AC0311.PRC_SHUK_TSTAYMD AND AC0311.PRC_SHUK_TENDYMD ")
				.append(" AND AC0311.MK_FLG = '0' ");

		return sql_Buff;
	}

	/**
	 * <p>
	 * 料金調整登録、料金変更登録、随時請求登録のメイン処理
	 * 料金集計マスタを検索する。
	 * </p>
	 * @return StringBuffer
	 */
	public static StringBuffer getAC_M_PRC_SHUK_SQL2()
	{
		// SQL文_基本部1
		StringBuffer sql_Buff = new StringBuffer();
		sql_Buff.append(" SELECT ")
				.append("     DISTINCT SUBSTR(AC0311.SHUK_MT_PRC_KMK_CD, 0,9) AS SHUK_MT_PRC_KMK_CD")
				.append(" FROM ")
				.append("     AC_M_PRC_SHUK AC0311 ")
				.append(" WHERE")
				.append("     AC0311.SYS_CD = ? ")
				.append(" AND AC0311.SHUK_SK_PRC_KMK_CD = ? ")
				.append(" AND ? BETWEEN AC0311.PRC_SHUK_TSTAYMD AND AC0311.PRC_SHUK_TENDYMD ")
				.append(" AND AC0311.MK_FLG = '0' ");

		return sql_Buff;
	}

	/**
	 * チェックデジットを算出します。
	 * 
	 * @param trgStr 対象文字列
	 * @return String チェックデジット
	 * @throws Exception 例外が発生した場合
	 */
	private String getChkdigitEan(String trgStr) throws Exception
	{
		// 奇数桁
		int kisu = 0;
		// 偶数桁
		int gusu = 0;
		// 対象桁の値
		int trgData = 0;
		
		// 対象文字列桁数分以下の処理を繰り返す。
		for(int i = trgStr.length() - 1; i > -1; i--)
		{
			// 対象桁の値を取得
			trgData = Integer.parseInt(Character.toString(trgStr.charAt(i)));
			
			// 奇数桁
			if(i % 2 == 0)
			{
				kisu += trgData;
			}
			// 偶数桁
			else
			{
				gusu += trgData;
			}
		}
		// 
		int intChkdigt = kisu * 3 + gusu;
		
		intChkdigt = intChkdigt % 10;
		// 合算結果の一の位の値が０でない場合
		if(intChkdigt != 0)
		{
			// 10 - 合算結果をチェックデジットに設定
			intChkdigt = 10 - intChkdigt;
		}
		return String.valueOf(intChkdigt);
		
	}
	
	/**
	 * <p>
	 * 業務パラメータを取得する。
	 * </p>
	 * 
	 * @param id 条件となる業務パラメータID
	 * 
	 * @return 取得した業務パラメータのレコード
	 */
	public CAANMsg getGyoumuParam(String id)
	{
		CAANMsg msgZM0321 = new CAANMsg(ZM0321ETMsg.class.getName());
		ZM0321LE le = new ZM0321LE();
		
		msgZM0321.set(ZM0321ETMsg.WORK_PARAM_ID, id);
		msgZM0321.set(ZM0321ETMsg.MK_FLG, JACStrConst.MK_FLG_YK);
		
		CAANMsg retZM0321 = le.findByPrimaryKey(msgZM0321);
		
		return retZM0321;
	}
	
	/**
	 * 請求年月を基に支払期限日を取得します。
	 * @param seiYm 請求年月
	 * @return String 支払期限日
	 * @throws Exception 例外が発生した場合
	 */
	private String getPayKigenDay(String seiYm) throws Exception
	{
		CAANMsg msgCH0501 = new CAANMsg(CH0501ETMsg.class.getName());
		CAANMsg[] retCH0501List = null;
		CH0501LE le = new CH0501LE();
		
		// バイント変数のリストを生成します
		msgCH0501.set(CH0501ETMsg.SEIKY_YM, seiYm);
		msgCH0501.set(CH0501ETMsg.EVENT_CD, JACStrConst.EVENT_CD_KOUZA_PAY_KIGEN_YMD);
		
		// 料金スケジュール定義情報取得
		try
		{
			retCH0501List = le.findByCondition(msgCH0501);
		}
		catch (CAANException ce)
		{
			throw new CAANRuntimeException(ce);
		}
		
		// 取得結果判定
		String eventYmd = null;
		// 料金スケジュール定義情報を取得した場合
		if (retCH0501List.length != 0)
		{
			// 料金イベント年月日取得
			eventYmd = retCH0501List[0].getString(CH0501ETMsg.EVENT_YMD);
		}
		// 上記以外の場合
		else
		{
			// マスタ未存在エラー
			throw new CAANRuntimeException();
		}

		return eventYmd;
	}
	
	/**
	 * 入力情報の奇数桁と偶数桁の値の合計の算出を行います。
	 * 
	 * @param trgStr 対象文字列
	 * @return String[] 算出結果（0:奇数桁、1:偶数桁）
	 * @throws Exception 例外が発生した場合
	 */
	private String[] getDigGkData(String trgStr) throws Exception
	{
		// 偶数桁
		int kisu = 0;
		// 偶数桁
		int gusu = 0;
		// 対象桁の値
		int trgData = 0;
		
		// 対象文字列の桁数分以下の処理を繰り返す。
		for(int i = 0; i < trgStr.length(); i++)
		{
			// 対象桁の値を取得
			trgData = Integer.parseInt(Character.toString(trgStr.charAt(i)));
			
			// 奇数桁
			if(i % 2 == 0)
			{
				// 奇数桁の値の2倍の値が10以上の場合
				if((2 * trgData) >= 10)
				{
					// 対象桁数の一の位の値　＋　十の位の値
					kisu += (trgData * 2) % 10 + trgData * 2 / 10;
				}
				// 上記以外の場合
				else
				{
					kisu += trgData * 2;
				}
			}
			// 偶数桁
			else
			{
				gusu += trgData;
			}
		}
		
		String[] rtnData = new String[]{String.valueOf(kisu), String.valueOf(gusu)};
		
		return rtnData;
	}

	/**
	 * 発行シーケンスの値を求めます
	 * 
	 * @param trgStr 対象文字列
	 * @return String[] 結果
	 * @throws Exception 例外が発生した場合
	 */
	public static int getSksHakkoSeq(int hakkoSeq) throws Exception
	{
		// クラスのインスタンス化
		JCHModelCommon jchCommon = new JCHModelCommon();

		CAANMsg msghakkoSeqMax = jchCommon.getGyoumuParam(CH_SKS_HAKKO_SEQ_MAX);
		String hakkoSeqMax = msghakkoSeqMax.getString(ZM0321ETMsg.WORK_PARAM_SETTE_VALUE);
		if (hakkoSeq < Integer.parseInt(hakkoSeqMax))
		{
			// 発行シーケンス最大値を超えない場合は、+1
			hakkoSeq++;
		}
		else
		{
			// 発行シーケンス最大値を超える場合は、1
			hakkoSeq = 1;
		}
		
		return hakkoSeq;
	}

	/**
	 * <p>
	 * 業務パラメータを取得する。
	 * </p>
	 * 
	 * @param id 条件となる業務パラメータID
	 * 
	 * @return 取得した業務パラメータの業務パラメータ設定値
	 */
	public static String getWorkParam(String workParamId){

		CAANMsg msgZM0321 = new CAANMsg(ZM0321ETMsg.class.getName());
		ZM0321LE le = new ZM0321LE();

		msgZM0321.set(ZM0321ETMsg.WORK_PARAM_ID, workParamId);
		msgZM0321.set(ZM0321ETMsg.MK_FLG, JACStrConst.MK_FLG_YK);

		CAANMsg retZM0321 = le.findByPrimaryKey(msgZM0321);

		return retZM0321.getString(ZM0321ETMsg.WORK_PARAM_SETTE_VALUE);
	}

	/**
	 * <p>
	 * 債権取得処理。
	 * 意味的に主キーに相当する債権番号、債権年月により一意検索を行う。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param saikenYm 債権年月
	 * @param saikenNo 債権番号
	 * @return 取得した債権テーブルの情報(取得できなかった場合は長さが0の配列を返す)
	 */
	public static CAANMsg[] getSaikenUnique(CAANMsg inCBSMsg, AgentDispatchContext inContext, Object saikenYm, Object saikenNo)
	{
		return JCHSeikyUtil.getSaikenUnique(inCBSMsg, inContext, saikenYm, saikenNo);
	}

	/**
	 * <p>
	 * 債権取得処理（請求契約番号）。
	 * 請求契約番号により検索を行う。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param seikyKeiNo 請求契約番号
	 * @return 取得した債権テーブルの情報(取得できなかった場合は長さが0の配列を返す)
	 */
	public static CAANMsg[] getSaikenBySeikyKeiNo(CAANMsg inCBSMsg, AgentDispatchContext inContext, Object seikyKeiNo)
	{
		return JCHSeikyUtil.getSaikenBySeikyKeiNo(inCBSMsg, inContext, seikyKeiNo);
	}

	/**
	 * <p>
	 * 請求取得処理。
	 * 意味的に主キーに相当する請求番号、請求年月により一意検索を行う。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param seikyYm 請求年月
	 * @param seikyNo 請求番号
	 * @return 取得した請求テーブルの情報(取得できなかった場合は長さが0の配列を返す)
	 */
	public static CAANMsg[] getSeikyUnique(CAANMsg inCBSMsg, AgentDispatchContext inContext, Object seikyYm, Object seikyNo)
	{
		return JCHSeikyUtil.getSeikyUnique(inCBSMsg, inContext, seikyYm, seikyNo);
	}

	/**
	 * <p>
	 * 請求取得処理。
	 * 請求契約番号、請求年月により定例請求の検索を行う。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param seikyKeiNo 請求契約番号
	 * @param seikyYm 請求年月
	 * @return 取得した請求テーブルの情報(取得できなかった場合は長さが0の配列を返す)
	 */
	public static CAANMsg[] getSeikyBySeikyYm(CAANMsg inCBSMsg, AgentDispatchContext inContext, Object seikyKeiNo, Object seikyYm)
	{
		return JCHSeikyUtil.getSeikyBySeikyYm(inCBSMsg, inContext, seikyKeiNo, seikyYm);
	}

	/**
	 * 請求契約取得処理（カレント）。
	 * 
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param seikyKeiNo 請求契約番号
	 * @return 取得した請求契約テーブルの情報(取得できなかった場合はnullを返す)
	 */
	public static CAANMsg getSeikyKeiCurrent(CAANMsg inCBSMsg, AgentDispatchContext inContext, Object seikyKeiNo)
	{
		return JCHSeikyUtil.getSeikyKeiCurrent(inCBSMsg, inContext, seikyKeiNo);
	}

	/**
	 * 請求契約取得処理（カレント）。
	 * 
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param seikyKeiNo 請求契約番号
	 * @param standardDay 基準日
	 * @return 取得した請求契約テーブルの情報(取得できなかった場合はnullを返す)
	 */
	public static CAANMsg getSeikyKeiCurrent(CAANMsg inCBSMsg, Object seikyKeiNo, Object standardDay)
	{
		return JCHSeikyUtil.getSeikyKeiCurrent(inCBSMsg, seikyKeiNo, standardDay);
	}

	/**
	 * スケジュール定義取得処理（請求年月・イベントコード指定によりイベント年月日を取得する）。
	 * 
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param seikyYm 請求年月
	 * @param eventCd イベントコード
	 * @return 取得したスケジュール定義スキーマの情報(取得できなかった場合はnullを返す)
	 */
	public static CAANMsg getEventYmd(CAANMsg inCBSMsg, Object seikyYm, Object eventCd)
	{
		return JCHSeikyUtil.getEventYmd(inCBSMsg, seikyYm, eventCd);
	}

	/**
	 * 口座取得処理（最新世代）。
	 * 
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param seikyWayNo 請求方法番号
	 * @return 取得した口座スキーマの情報(取得できなかった場合はnullを返す)
	 */
	public static CAANMsg getKoza(CAANMsg inCBSMsg, AgentDispatchContext inContext, Object seikyWayNo)
	{
		return JCHSeikyUtil.getKoza(inCBSMsg, inContext, seikyWayNo);
	}

	/**
	 * クレジットカード取得処理（最新世代）。
	 * 
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param seikyWayNo 請求方法番号
	 * @return 取得したクレジットカードスキーマの情報(取得できなかった場合はnullを返す)
	 */
	public static CAANMsg getCreCard(CAANMsg inCBSMsg, AgentDispatchContext inContext, Object seikyWayNo)
	{
		return JCHSeikyUtil.getCreCard(inCBSMsg, inContext, seikyWayNo);
	}

	/**
	 * 請求抑止取得処理
	 * 
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param seikyKeiNo 請求契約番号
	 * @param seikyYoksiCd 請求抑止コード
	 * @return 取得した請求抑止スキーマの情報(取得できなかった場合はnullを返す)
	 */
	public static CAANMsg getSeikyYoksi(CAANMsg inCBSMsg, AgentDispatchContext inContext, Object seikyKeiNo, Object seikyYoksiCd)
	{
		return JCHSeikyUtil.getSeikyYoksi(inCBSMsg, inContext, seikyKeiNo, seikyYoksiCd);
	}

	/**
	 * <p>
	 * フロアリミットチェック実行処理。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param cardNo クレジットカード番号
	 * @return 超過しない場合:"0"、超過する場合:"1"
	 */
	public static String execFlrlmtChk(CAANMsg inCBSMsg, AgentDispatchContext inContext, String cardNo)
	{
		return JCHPrcChoseiHenkoUtil.execFlrlmtChk(inCBSMsg, inContext, cardNo);
	}

	/**
	 * <p>
	 * 指定された請求年月、イベントコードに紐づく利用開始年月日、利用終了年月日を取得し、<br>
	 * String配列でリターンする。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param funcCd "1":利用開始年月日のみ取得、"2":利用終了年月日のみ取得、"3":両方取得
	 * @param seikyYm 請求年月
	 * @return 配列の1番目の要素に利用開始年月日、2番目の要素に利用終了年月日を格納。
	 */
	public static String[] getUseYmd(CAANMsg inMsg, String funcCd, String seikyYm)
	{
		return JCHPrcChoseiHenkoUtil.getUseYmd(inMsg, funcCd, seikyYm);
	}

	/**
	 * <p>
	 * 金額マイナスチェック。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param inList 処理対象リスト
	 * @param workParamId 業務パラメータID
	 * @param itemNm 金額キー項目名
	 * @return 金額が0以下の場合:false、1以上の場合:true
	 */
	public static boolean execMinusChk(CAANMsg inCBSMsg, AgentDispatchContext inContext, ArrayList<CAANMsg> inList, String[] workParamId, String itemNm)
	{
		return JCHPrcChoseiHenkoUtil.execMinusChk(inCBSMsg, inContext, inList, workParamId, itemNm);
	}

	/**
	 * <p>
	 * 料金項目抽出変換に対象のレコードが存在するか判定するメソッドです。
	 * システムコード未設定の場合、デフォルトで"CH"を指定する。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param con1 コネクション
	 * @param pstmt1 プリペアステートメント
	 * @param rsltQuery リザルトセット
	 * @param inputMsg 入力データ
	 * @param opeDate 運用日
	 * @param workKinoSkbtCd 業務機能識別コード
	 * @return boolean true：存在する、false：存在しない
	 */
	public static boolean isExistsPrcKmkCd(CAANMsg inCBSMsg, AgentDispatchContext inContext,
			Connection con1, PreparedStatement pstmt1, ResultSet rsltQuery, CAANMsg inputMsg, String opeDate, String workKinoSkbtCd)
	{
		return JCHPrcChoseiHenkoUtil.isExistsPrcKmkCd(inCBSMsg, inContext, con1, pstmt1, rsltQuery, inputMsg, opeDate, workKinoSkbtCd);
	}

	/**
	 * <p>
	 * 料金項目抽出変換に対象のレコードが存在するか判定するメソッドです。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param con1 コネクション
	 * @param pstmt1 プリペアステートメント
	 * @param rsltQuery リザルトセット
	 * @param inputMsg 入力データ
	 * @param opeDate 運用日
	 * @param workKinoSkbtCd 業務機能識別コード
	 * @param sysCd システムコード
	 * @return boolean true：存在する、false：存在しない
	 */
	public static boolean isExistsPrcKmkCd(CAANMsg inCBSMsg, AgentDispatchContext inContext,
			Connection con1, PreparedStatement pstmt1, ResultSet rsltQuery, CAANMsg inputMsg, String opeDate, String workKinoSkbtCd, String sysCd)
	{
		return JCHPrcChoseiHenkoUtil.isExistsPrcKmkCd(inCBSMsg, inContext, con1, pstmt1, rsltQuery, inputMsg, opeDate, workKinoSkbtCd, sysCd);
	}

	/**
	 * <p>
	 * 機器提供サービス契約存在チェック処理。
	 * 機器提供サービス契約を取得し、存在するかどうかチェックする。
	 * 取得内容は機能的にEKK0341B518サービスIF(機器製造番号指定ありの場合)と同等の内容となる。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param targetDay 処理対象日付
	 * @return  boolean[true:正常、false:エラー]
	 */
	public static boolean isExistsKikiTkSvcKei(CAANMsg inCBSMsg, AgentDispatchContext inContext,  String targetDay)
	{
		return JCHSeikyUtil.isExistsKikiTkSvcKei(inCBSMsg, inContext, targetDay);
	}

	/**
	 * <p>
	 * 機器提供サービス契約存在チェック処理。
	 * 機器提供サービス契約を取得し、存在するかどうかチェックする。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param listName リスト名
	 * @param targetDay 処理対象日付
	 * @return  boolean[true:正常、false:エラー]
	 */
	public static boolean isExistsKikiTkSvcKei(CAANMsg inCBSMsg, AgentDispatchContext inContext, String listName, String targetDay)
	{
		return JCHSeikyUtil.isExistsKikiTkSvcKei(inCBSMsg, inContext, listName, targetDay);
	}

	/**
	 * 税額取得処理。
	 * 
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param sTaxTrgAmnt 計算対象金額
	 * @param calcSkbtCd 税計算識別コード
	 * @return 計算された税額
	 */
	public static String getTaxAmnt(CAANMsg inCBSMsg, AgentDispatchContext inContext, String sTaxTrgAmnt, String calcSkbtCd)
	{
		return JCHSeikyUtil.getTaxAmnt(inCBSMsg, inContext, sTaxTrgAmnt, calcSkbtCd);
	}

	/**
	 * <p>
	 * 税率マスタ取得処理。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param calcSkbtCd 税計算識別コード
	 * @return 税率マスタ
	 */
	public static CAANMsg getTaxRt(CAANMsg inCBSMsg, AgentDispatchContext inContext, String calcSkbtCd)
	{
		return JCHSeikyUtil.getTaxRt(inCBSMsg, inContext, calcSkbtCd);
	}

	/**
	 * <p>
	 * 料金項目抽出変換取得処理。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param multi trueの場合、件数を絞らずに取得する。 falseの場合、取得件数を1件に限定する（取得件数が1件であると業務的に保障される場合のみ使用する）
	 * @param workParamId 業務パラメータID
	 * @param sysCd システムコード
	 * @param standardDay 基準日
	 * @return  料金項目抽出変換
	 */
	public static HashMap<String, String> getPrcKmkCsChge(CAANMsg inCBSMsg, AgentDispatchContext inContext, boolean multi, String workParamId, String sysCd, String standardDay)
	{
		return JCHSeikyUtil.getPrcKmkCsChge(inCBSMsg, inContext, multi, workParamId, sysCd, standardDay);
	}
	
	/**
	 * <p>
	 * 料金項目抽出変換取得処理。
	 * 性能考慮のため必要な項目のみ取得する。(取得できなかった場合は長さが0の配列を返す)
	 * システムコード未設定の場合、デフォルトで"CH"を指定する。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param multi trueの場合、件数を絞らずに取得する。 falseの場合、取得件数を1件に限定する（取得件数が1件であると業務的に保障される場合のみ使用する）
	 * @param workParamId 業務パラメータID
	 * @return  料金項目抽出変換
	 */
	public static CAANMsg[] getPrcKmkCsChge(CAANMsg inCBSMsg, AgentDispatchContext inContext, boolean multi, String workParamId)
	{
		return JCHSeikyUtil.getPrcKmkCsChge(inCBSMsg, inContext, multi, workParamId);
	}

	/**
	 * <p>
	 * 料金項目抽出変換取得処理。
	 * 性能考慮のため必要な項目のみ取得する。(取得できなかった場合は長さが0の配列を返す)
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param multi trueの場合、件数を絞らずに取得する。 falseの場合、取得件数を1件に限定する（取得件数が1件であると業務的に保障される場合のみ使用する）
	 * @param workParamId 業務パラメータID
	 * @param sysCd システムコード
	 * 
	 * @return  料金項目抽出変換
	 */
	public static CAANMsg[] getPrcKmkCsChge(CAANMsg inCBSMsg, AgentDispatchContext inContext, boolean multi, String workParamId, String sysCd)
	{
		return JCHSeikyUtil.getPrcKmkCsChge(inCBSMsg, inContext, multi, workParamId, sysCd);
	}

	/**
	 * <p>
	 * 料金項目抽出変換取得処理。
	 * 性能考慮のため必要な項目のみ取得する。(取得できなかった場合は長さが0の配列を返す)
	 * システムコード未設定の場合、デフォルトで"CH"を指定する。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param multi trueの場合、件数を絞らずに取得する。 falseの場合、取得件数を1件に限定する（取得件数が1件であると業務的に保障される場合のみ使用する）
	 * @param workSkbtCd 業務機能識別コード
	 * @return  料金項目抽出変換
	 */
	public static CAANMsg[] getPrcKmkCsChge2(CAANMsg inCBSMsg, AgentDispatchContext inContext, boolean multi, String workSkbtCd)
	{
		return JCHSeikyUtil.getPrcKmkCsChge2(inCBSMsg, inContext, multi, workSkbtCd);
	}

	/**
	 * <p>
	 * 料金項目抽出変換取得処理。
	 * 性能考慮のため必要な項目のみ取得する。(取得できなかった場合は長さが0の配列を返す)
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param multi trueの場合、件数を絞らずに取得する。 falseの場合、取得件数を1件に限定する（取得件数が1件であると業務的に保障される場合のみ使用する）
	 * @param workParamId 業務パラメータID
	 * @param sysCd システムコード
	 * @param standardDay 基準日
	 * @return  料金項目抽出変換
	 */
	public static CAANMsg[] getPrcKmkCsChge2(CAANMsg inCBSMsg, AgentDispatchContext inContext, boolean multi, String workParamId, String sysCd, String standardDay)
	{
		return JCHSeikyUtil.getPrcKmkCsChge2(inCBSMsg, inContext, multi, workParamId, sysCd, standardDay);
	}

	/**
	 * <p>
	 * 料金項目抽出変換取得処理。
	 * 性能考慮のため必要な項目のみ取得する。(取得できなかった場合は長さが0の配列を返す)
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param multi trueの場合、件数を絞らずに取得する。 falseの場合、取得件数を1件に限定する（取得件数が1件であると業務的に保障される場合のみ使用する）
	 * @param workSkbtCd 業務機能識別コード
	 * @param sysCd システムコード
	 * @return  料金項目抽出変換
	 */
	public static CAANMsg[] getPrcKmkCsChge2(CAANMsg inCBSMsg, AgentDispatchContext inContext, boolean multi, String workSkbtCd, String sysCd)
	{
		return JCHSeikyUtil.getPrcKmkCsChge2(inCBSMsg, inContext, multi, workSkbtCd, sysCd);
	}

	/**
	 * <p>
	 * 料金項目抽出変換取得処理。
	 * 性能考慮のため必要な項目のみ取得する。(取得できなかった場合は長さが0の配列を返す)
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param multi trueの場合、件数を絞らずに取得する。 falseの場合、取得件数を1件に限定する（取得件数が1件であると業務的に保障される場合のみ使用する）
	 * @param workSkbtCd 業務機能識別コード
	 * @param sysCd システムコード
	 * @param chshtChgCd 抽出変換コード
	 * @return  料金項目抽出変換
	 */
	public static CAANMsg[] getPrcKmkCsChge3(CAANMsg inCBSMsg, AgentDispatchContext inContext, boolean multi, String workSkbtCd, String sysCd, String chshtChgCd)
	{
		return JCHSeikyUtil.getPrcKmkCsChge3(inCBSMsg, inContext, multi, workSkbtCd, sysCd, chshtChgCd);
	}

	/**
	 * <p>
	 * 前受金充当額訂正期間チェック。
	 * </p>
	 * @param inCBSMsg  処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param sSeikyYm  請求年月
	 * @param inList1   料金明細リスト
	 * @return 前受金充当額訂正可能な期間でなければfalseを返します。
	 */
	public static boolean isPrcAdjKikan(CAANMsg inCBSMsg, AgentDispatchContext inContext, String sSeikyYm, CAANMsg[] inList1)
	{
		return JCHSeikyUtil.isPrcAdjKikan(inCBSMsg, inContext, sSeikyYm, inList1);
	}

	/**
	 * <p>
	 * 督促取得処理（請求契約番号）。
	 * 性能考慮のため必要な項目のみ取得する。(取得できなかった場合は長さが0の配列を返す)
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param inSeikyKeiNo 請求契約番号
	 * @return 督促
	 */
	public static CAANMsg[] getTokusokuBySeikykeiNo(CAANMsg inCBSMsg, AgentDispatchContext inContext, String inSeikyKeiNo)
	{
		return JCHSeikyUtil.getTokusokuBySeikykeiNo(inCBSMsg, inContext, inSeikyKeiNo);
	}

	/**
	 * <p>
	 * サービス契約（カレント）存在チェック。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param inList 処理対象のリスト
	 * @return チェック対象のリストのうち、全て存在すればtrue、1件でも存在しなければfalseを返す。
	 */
	public static boolean isExistsSvcKeiCurrent(CAANMsg inCBSMsg, AgentDispatchContext inContext, ArrayList<CAANMsg> inList)
	{
		return JCHSeikyUtil.isExistsSvcKeiCurrent(inCBSMsg, inContext, inList);
	}

	/**
	 * <p>
	 * サービス契約（カレント）存在チェック。
	 * 未入居明細用サービス契約番号の場合はチェック対象外とする。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param inList 処理対象のリスト
	 * @return チェック対象のリストのうち、全て存在すればtrue、1件でも存在しなければfalseを返す。
	 */
	public static boolean isExistsSvcKeiCurrent2(CAANMsg inCBSMsg, AgentDispatchContext inContext, CAANMsg[] inList)
	{
		return JCHSeikyUtil.isExistsSvcKeiCurrent2(inCBSMsg, inContext, inList);
	}

	/**
	 * <p>
	 * 料金スケジュール定義を取得する。
	 * 運用日当日を含まない直前のレコードを取得する。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param eventCd イベントコード
	 * @return  料金スケジュール定義
	 */
	public static CAANMsg[] getPrcSchdlNotContain(CAANMsg inCBSMsg, AgentDispatchContext inContext, String eventCd)
	{
		return JCHSeikyUtil.getPrcSchdlNotContain(inCBSMsg, inContext, eventCd);
	}

	/**
	 * <p>
	 * 料金スケジュール定義を取得する。
	 * 運用日当日を含む、直後のレコードを取得する。
	 * 料金スケジュール定義一意照会サービスIFの機能コード2と同等の検索条件である。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param eventCd イベントコード
	 * @return  料金スケジュール定義
	 */
	public static CAANMsg[] getPrcSchdlContain(CAANMsg inCBSMsg, AgentDispatchContext inContext, String eventCd)
	{
		return JCHSeikyUtil.getPrcSchdlContain(inCBSMsg, inContext, eventCd);
	}

	/**
	 * 料金項目コード変換マップ取得
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param workKinoSkbtCd 業務機能識別コード
	 * @param keyFlg キーフラグ
	 * @return
	 */
	public static HashMap<String,String> getCnvCdMap(CAANMsg inCBSMsg, AgentDispatchContext inContext, String workKinoSkbtCd, boolean keyFlg)
	{
		return JCHSeikyUtil.getCnvCdMap(inCBSMsg, inContext, workKinoSkbtCd, keyFlg);
	}

	/**
	 * <p>
	 * 割賦契約番号取得処理。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param standardDay 基準日
	 * @return  割賦契約番号
	 */
	public static String getkapkeiNo(CAANMsg inCBSMsg, AgentDispatchContext inContext, String kktkSvcKeiNo, String standardDay)
	{
		return JCHSeikyUtil.getkapkeiNo(inCBSMsg, inContext, kktkSvcKeiNo, standardDay);
	}

	/**
	* <p>
	* 機器製造番号取得処理<br>
	* </p>
	* @param inCBSMsg  処理対象のメッセージキャリア
	* @param inContext Agentから渡されたAgentDispatchContext
	* @param kktkSvcKeiNo 機器提供サービス契約番号
	* @param standardDay 基準日
	* @return 配列の1番目の要素に機器製造番号、2番目の要素に宅内機器型式コードを格納
	*/
	public static String[] getKikiSeizoNo(CAANMsg inCBSMsg, AgentDispatchContext inContext, String kktkSvcKeiNo, String standardDay)
	{
		return JCHSeikyUtil.getKikiSeizoNo(inCBSMsg, inContext, kktkSvcKeiNo, standardDay);
	}

	/**
	* <p>
	* 通知書用宅内機器型式名取得処理<br>
	* </p>
	* @param inCBSMsg  処理対象のメッセージキャリア
	* @param inContext Agentから渡されたAgentDispatchContext
	* @param taknkikiModelCd 宅内機器型式コード
	* @param standardDay 基準日
	* @return 通知書用宅内機器型式名
	*/
	public static String getTchishoYoTkmdlNm(CAANMsg inCBSMsg, AgentDispatchContext inContext, String taknkikiModelCd, String standardDay)
	{
		return JCHSeikyUtil.getTchishoYoTkmdlNm(inCBSMsg, inContext, taknkikiModelCd, standardDay);
	}

	/**
	 * <p>
	 * 税率マスタを取得するSQLを作成する。<br>
	 * </p>
	 * @return StringBuffer
	 */
	public static StringBuffer getTaxRtSql()
	{
		return JCHSeikyUtil.getTaxRtSql();
	}

	/**
	 * <p>
	 * 料金項目抽出変換を取得するSQLを作成する。
	 * 業務パラメータ管理と結合する。
	 * </p>
	 * @param multi trueの場合、件数を絞らずに取得する。 falseの場合、取得件数を1件に限定する（取得件数が1件であると業務的に保障される場合のみ使用する）
	 * @return StringBuffer
	 */
	public static StringBuffer getPrcKmkCsChgeSql(boolean multi)
	{
		return JCHSeikyUtil.getPrcKmkCsChgeSql(multi);
	}

	/**
	 * <p>
	 * 料金項目抽出変換を取得するSQLを作成する。
	 * 業務パラメータ管理と結合しない。
	 * </p>
	 * @param multi trueの場合、件数を絞らずに取得する。 falseの場合、取得件数を1件に限定する（取得件数が1件であると業務的に保障される場合のみ使用する）
	 * @return StringBuffer
	 */
	public static StringBuffer getPrcKmkCsChgeSql2(boolean multi)
	{
		return JCHSeikyUtil.getPrcKmkCsChgeSql2(multi);
	}

	/**
	 * <p>
	 * 債権内訳取得SQLを作成する（業務機能識別コード指定）。
	 * </p>
	 * @return StringBuffer
	 */
	public static StringBuffer getSaikenUcwkSql()
	{
		return JCHSeikyUtil.getSaikenUcwkSql();
	}

	/**
	 * <p>
	 * 貸倒後入金の債権内訳取得SQLを作成する（請求契約番号指定）。
	 * 消込順序定義を結合する。
	 * </p>
	 * @param sortType ソートタイプ
	 * @return StringBuffer
	 */
	public static StringBuffer getKsdrSaikenUcwkSql(String sortType)
	{
		return JCHSeikyUtil.getKsdrSaikenUcwkSql(sortType);
	}

	/**
	 * <p>
	 * 貸倒後入金の債権内訳取得SQLを作成する（請求契約番号指定）。
	 * </p>
	 * @return StringBuffer
	 */
	public static StringBuffer getKsdrSaikenUcwkSql2()
	{
		return JCHSeikyUtil.getKsdrSaikenUcwkSql2();
	}

	/**
	 * <p>
	 * 料金項目抽出変換から料金項目コードが存在するかどうかチェックするSQLを作成する。
	 * </p>
	 * @return StringBuffer
	 */
	public static StringBuffer getExistsPrcKmkCdSql()
	{
		return JCHSeikyUtil.getExistsPrcKmkCdSql();
	}

	/**
	 * <p>
	 * 料金スケジュール定義を取得するSQLを作成する。
	 * 運用日当日を含まない直前のレコードを取得する。
	 * </p>
	 * @return StringBuffer
	 */
	public static StringBuffer getPrcSchdlNotContainSql()
	{
		return JCHSeikyUtil.getPrcSchdlNotContainSql();
	}

	/**
	 * <p>
	 * 料金スケジュール定義を取得するSQLを作成する。
	 * 運用日当日を含む、直後のレコードを取得する。
	 * 料金スケジュール定義一意照会サービスIFの機能コード2と同等の検索条件である。
	 * </p>
	 * @return StringBuffer
	 */
	public static StringBuffer getPrcSchdlContainSql()
	{
		return JCHSeikyUtil.getPrcSchdlContainSql();
	}

	/**
	 * <p>
	 * 督促を取得するSQLを作成する。<br>
	 * </p>
	 * @return StringBuffer
	 */
	public static StringBuffer getTokusokuBySeikyKeiNoSql()
	{
		return JCHSeikyUtil.getTokusokuBySeikyKeiNoSql();
	}

	/**
	 * <p>
	 * 機器提供サービス契約を取得するSQLを作成する。<br>
	 * </p>
	 * @return StringBuffer
	 */
	public static StringBuffer getKikiTkSvcKeiSql()
	{
		return JCHSeikyUtil.getKikiTkSvcKeiSql();
	}

	/**
	 * <p>
	 * 左辺と右辺を乗算します。
	 * </p>
	 * @return StringBuffer
	 */
	public static String calcMultiply(String str1, String str2, Boolean isNullToZero)
	{
		return JCHPrcChoseiHenkoUtil.calcMultiply(str1, str2, isNullToZero);
	}
	
	/**
	 * <p>
	 * 絶対値を取得します。
	 * </p>
	 * @return StringBuffer
	 */
	public static String getAbs(String strVal, Boolean isNullToZero)
	{
		return JCHPrcChoseiHenkoUtil.getAbs(strVal, isNullToZero);
	}
	
	// v32.00.00 Add Start
	/**
	 * <p>
	 * 決済代行会社入金情報受信-決済代行会社入金情報受信番号採番処理
	 * 	決済代行会社入金情報受信の決済代行会社入金情報受信番号を採番する。
	 * </p>
	 * @param arg0 処理対象のメッセージキャリア
	 * @param arg1 Agentから渡されたAgentDispatchContext
	 * @return 採番された番号。
	 */
	public static String getksdkcpNkifRcvNoCH0901(CAANMsg arg0, AgentDispatchContext arg1)
	{
		JCHejbCH0901NumberParts instance = new JCHejbCH0901NumberParts();
		return instance.getKsdkcpNkifRcvNo(arg0, arg1);
	}
	// v32.00.00 Add End

}
