package jp.mosp.payroll.base;

import java.sql.SQLException;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import jp.mosp.common.CommonConst;
import jp.mosp.common.common.MospConst;
import jp.mosp.common.common.MospException;
import jp.mosp.common.common.MospUtility;
import jp.mosp.common.dto.MosPConfDto;
import jp.mosp.common.part.DatePart;
import jp.mosp.payroll.bonus.dao.PhBounsDao;
import jp.mosp.payroll.bonus.dao.PmDetailBaDao;
import jp.mosp.payroll.bonus.dao.PmDetailBdDao;
import jp.mosp.payroll.bonus.dao.PmDetailBsDao;
import jp.mosp.payroll.bonus.dto.PhBounsDto;
import jp.mosp.payroll.bonus.dto.PmDetailBaDto;
import jp.mosp.payroll.bonus.dto.PmDetailBdDto;
import jp.mosp.payroll.bonus.dto.PmDetailBsDto;
import jp.mosp.payroll.dao.CdSocInsuranceDao;
import jp.mosp.payroll.dao.CmMidwayEnterDao;
import jp.mosp.payroll.dao.CmSocInsuranceDao;
import jp.mosp.payroll.dao.PdPayAllowanceDao;
import jp.mosp.payroll.dao.PdPayDeductionDao;
import jp.mosp.payroll.dao.PdPayTimeDao;
import jp.mosp.payroll.dao.PhPaymentDao;
import jp.mosp.payroll.dao.PmDetailPaDao;
import jp.mosp.payroll.dao.PmDetailPdDao;
import jp.mosp.payroll.dao.PmDetailPsDao;
import jp.mosp.payroll.dao.PmDetailPtDao;
import jp.mosp.payroll.dto.CdSocInsuranceDto;
import jp.mosp.payroll.dto.CmMidwayEnterDto;
import jp.mosp.payroll.dto.CmSocInsuranceDto;
import jp.mosp.payroll.dto.DetailMoneyDto;
import jp.mosp.payroll.dto.DetailPaDto;
import jp.mosp.payroll.dto.DetailPdDto;
import jp.mosp.payroll.dto.DetailTimeDto;
import jp.mosp.payroll.dto.PhPaymentDto;

public abstract class CalculateAction extends AttendanceTotalAction {
//	
//	// フィールド
	// 計算処理実行インスタンス
//	protected UdPaymentDto udPaymentDto;	// 処理対象給与データ
	PdPayAllowanceDao pdPayAllowanceDao;    // 処理対象給与(明細支給情報)データ
	PdPayDeductionDao pdPayDeductionDao;    // 処理対象給与(明細控除情報)データ
		// 計算処理実行インスタンス(賞与)
//	protected UdBonusDto udBonusDto;	// 処理対象賞与データ
//	// 個別計算時利用変数

	//	private   int taxFree     = 0;	// 非課税額
//	private   int socInsFree  = 0;	// 非社会保険対象額
//	protected int bank1Amount = 0;	// 銀行1振込額

	//	protected int bank2Amount = 0;	// 銀行2振込額
//	protected int cashAmount  = 0;	// 現金支給額
	// 明細設定(共通)
	protected 	Map<String, DetailPaDto>	mapDetailALL_Pa;
	protected 	Map<String, DetailPdDto>	mapDetailALL_Pd;
	protected 	Map<String, DetailMoneyDto>	mapDetailALL_Ps;
	protected 	Map<String, DetailTimeDto>	mapDetailALL_Pt;

	//	// 計算式設定(共通)
//	protected Map<String, Map<String, CsExpressionDto>> mapExpressAll;

	//	// 明細設定(賞与共通)
	protected 	Map<String, PmDetailBaDto>	mapDetailALL_Ba;
	protected 	Map<String, PmDetailBdDto>	mapDetailALL_Bd;
	protected 	Map<String, PmDetailBsDto>	mapDetailALL_Bs;

	// 会社情報(共通)
	protected float  ratioHealthPremium   = 0;	// 健康保険料率 
	protected float  ratioNursingPremium  = 0;	// 介護保険料率
	protected float  ratioPensionPremium  = 0;	// 厚生年金料率
	protected float  ratioFundPremium     = 0;	// 厚生年金基金料率
	protected float  ratioUnemployPremium = 0;	// 雇用保険料率
	protected String fundParticipation    = "";	// 厚生年金基金加入
	// 単価設定(共通)
	protected Map<String, String> mapFamilyAllowance;	// 扶養手当単価
	// 条件設定(共通)
	protected int familyAllowanceLimit = 0;	// 扶養手当支給上限欠勤日数
//	// 明細設定MAP
//	Map<String, UsDetailDto> mapPaymentDetail;
//	// 給与支給日(UD_PAYMENT用)
//	protected Date payDay;
//	
	protected Date startDateOfYear;	// 年開始日
	protected Date lastDateOfYear ;	// 年最終日

	protected int befkotei  = 0;
	protected int nowkotei  = 0;

	protected int befhikotei  = 0;
	protected int nowhikotei  = 0;

	// 旧給与報酬金額
	protected int 	oldPremium			= 0;
	
	// 旧給与健康保険料
	Date oldHealthDate					= null;
	protected int oldHealthPremium		= 0;

	// 旧給与介護保険料
	Date oldNursingDate					= null;
	protected int oldNursingPremium	= 0;

	// 旧給与厚生年金保険料
	Date oldoldPensionDate				= null;
	protected int oldPensionPremium	= 0;

	// 旧給与厚生年金基金保険料
	Date oldFundDate					= null;
	protected int oldFundPremium		= 0;

	// 旧給与社会保険金額
	Date oldSocInsDate					= null;
	protected int oldSocInsPremium		= 0;
	
	
	
//	// 賞与対象年月健康保険料(対象日以外)
//	protected int befHealthPremium   = 0;
//	// 賞与対象年月介護保険料(対象日以外)
//	protected int befNursingPremium  = 0;
//	// 賞与対象年月厚生年金保険料(対象日以外)
//	protected int befPensionPremium  = 0;
//	// 賞与対象年月厚生年金基金保険料(対象日以外)
//	protected int befFundPremium     = 0;
//	// 賞与対象年月社会保険金額(対象日以外)
//	protected int befSocInsPremium = 0;
//	
	// 社会保険等級
	protected int[] arySocInsGrade = {
			1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
			, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29
			, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47
	};
	// 標準報酬月額
	protected int[] aryStandardPayment = {
			58000, 68000, 78000, 88000, 98000, 104000, 110000, 118000, 126000, 134000, 142000
			, 150000, 160000, 170000, 180000, 190000, 200000, 220000, 240000, 260000, 280000
			, 300000, 320000, 340000, 360000, 380000, 410000, 440000, 470000, 500000, 530000
			, 560000, 590000, 620000, 650000, 680000, 710000, 750000, 790000, 830000, 880000
			, 930000, 980000, 1030000, 1090000, 1150000, 1210000
	};
	// 報酬月額配列
	protected int[] aryPaymentOver = {
			0,63000,73000,83000,93000,101000,107000,114000,122000,130000,138000,146000,155000
			,165000,175000,185000,195000,210000,230000,250000,270000,290000,310000,330000,350000
			,370000,395000,425000,455000,485000,515000,545000,575000,605000,635000,665000,695000
			,730000,770000,810000,855000,905000,955000,1005000,1055000,1115000,1175000
	};
	// 報酬月額配列
	protected int[] aryPaymentUnder = {
			63000,73000,83000,93000,101000,107000,114000,122000,130000,138000,146000,155000
			,165000,175000,185000,195000,210000,230000,250000,270000,290000,310000,330000,350000
			,370000,395000,425000,455000,485000,515000,545000,575000,605000,635000,665000,695000
			,730000,770000,810000,855000,905000,955000,1005000,1055000,1115000,11750000,0
	};

	protected CdSocInsuranceDao	cdSocInsuranceDao;	// 社会保険計算データ	
	protected CdSocInsuranceDto	cdSocInsuranceDto;	// 社会保険計算データ

	protected PhPaymentDto      phSocInsPayment  ;
	
	static String[][]      aryPrefecture = CommonConst.getPrefectureArray();

//	
//	private String[][] aryRatioOvertime     ;
//	private String[][] aryRatioLateNight    ;
//	private String[][] aryRatioWorkOnHoliday;
//	
//	//　前月の課税対象額取得用年月
//	Date befTargetMonth;
//	
//	
//	/**
//	 * 計算月確認
//	 * @param date 対象年月
//	 * @throws Exception 
//	 */
//	protected void checkCalcCurrent(Date date) throws Exception {
//		if (getCalcCurrent().compareTo(date) != 0) {
//			String errMessage = MospUtility.getMessage(msg, UnicConst.MSG_NOT_CURRENT, "");
//			addErrMessage(errMessage);
//			throw new MospException(UnicConst.EX_NOT_CURRENT, errMessage);
//		}
//	}
//	
//	/**
//	 * 計算月確認(計算年月以降)
//	 * @param date 対象年月
//	 * @throws Exception 
//	 */
//	protected void checkCalcCurrentAfter(Date date) throws Exception {
//		if (getCalcCurrent().compareTo(date) > 0) {
//			String errMessage = MospUtility.getMessage(msg, UnicConst.MSG_NOT_CURRENT, "");
//			addErrMessage(errMessage);
//			throw new MospException(UnicConst.EX_NOT_CURRENT, errMessage);
//		}
//	}
//	
//	/**
//	 * 給与計算(勤怠及び人事情報から取得可能な情報のみ設定)
//	 * @throws Exception
//	 */
//	protected void calcPayment() throws Exception {
//		// 勤怠データ取得
//		getAttendanceList(kCode, targetMonth);
//		// 日集計データ取得
//		getAttendanceDaily();
//		// 日集計データ成果時間設定
//		setEffort();
//		// 日集計データ時間設定
//		setHours();
//		// 日集計データ日付手当設定
//		setDateAllowance();
//		// 月集計
//		attendanceMonthlyDto = totalAttendanceDaily();
//		// 明細設定初期化
//		setDetailData();
//		// アップロードデータ設定(給与データが既に存在する場合)
//		setUploadedData();
//		// 減額金、役職減額設定確認
//		chkCutAmount();
//		// 給与データ設定
//		// (基本給、職能手当、時間外手当、扶養手当、通勤費、単価項目)
//		setPaymentData();
//		// 計算式による計算
//		calcExpression();
//		// 給与支給日設定
//		attendanceMonthlyDto.setPayday(payDay);
//		// ステータス設定(データ作成)
//		attendanceMonthlyDto.setCalcStatus(UnicConst.CALC_STATUS_CRE);
//	}
//
//	/**
//	 * 明細設定取得
//	 * @throws NoSuchFieldException 
//	 * @throws IllegalAccessException 
//	 * @throws SQLException 
//	 */
//	protected void setDetailData() throws SQLException, IllegalAccessException, NoSuchFieldException {
//		udPaymentDto = new PhPaymentDto();
//		udPaymentDto.setKCode(attendanceMonthlyDto.getKCode());
//		udPaymentDto.setEmploymentType(attendanceMonthlyDto.getEmploymentType());
//		udPaymentDto.setPositionCode(attendanceMonthlyDto.getPositionCode());
//		mapPaymentDetail = getMapDetail();
//	}
//
//	/**
//	 * 役職減額、基本減額設定
//	 * @throws NoSuchFieldException 
//	 * @throws IllegalAccessException 
//	 * @throws SQLException 
//	 */
//	protected void chkCutAmount() {
//		// 皆勤減額設定確認
//		UsDetailDto usDetailDto = mapPaymentDetail.get(UnicConst.DTL_PAY_ALLOWANCE_07);
//		if (usDetailDto == null) {
//			// 皆勤減額を0円に設定
//			attendanceMonthlyDto.setCutForMissing(0);
//		}
//		// 役職減額設定確認
//		usDetailDto = mapPaymentDetail.get(UnicConst.DTL_PAY_ALLOWANCE_08);
//		if (usDetailDto == null) {
//			// 役職減額を0円に設定
//			attendanceMonthlyDto.setCutForShort(0);
//		}
//		// 基本減額設定確認
//		usDetailDto = mapPaymentDetail.get(UnicConst.DTL_PAY_ALLOWANCE_20);
//		// 計算社員に明細設定が存在しない場合
//		if (usDetailDto == null) {
//			// 基本減額を0円に設定
//			attendanceMonthlyDto.setCutFromBasic(0);
//		}
//	}
//	
//	/**
//	 * 法定控除計算(社会保険料及び税金の設定)
//	 * @throws Exception
//	 */
//	protected void calcLegalDeduction() throws Exception {
//		// 明細設定による金額計算(非課税額及び社会保険非対象額)
//		calcFreeAmount();
//		// 社会保険対象額設定
//		udPaymentDto.setAmountToSocIns(
//				udPaymentDto.calcAllowanceTotal() - socInsFree);
//		// 社会保険料設定
//		setSocialInsurance();
//		// 課税対象額設定
//		int taxation = udPaymentDto.calcAllowanceTotal() -
//				udPaymentDto.calcSocialInsurance() -
//				taxFree - udPaymentDto.getCommutationFree();
//		udPaymentDto.setAmountToTaxation(taxation > 0 ? taxation : 0);
//				
//		// 所得税設定
//		setIncomeTax();
//		// 住民税設定
//		setResidenceTax();
//		// 確定項目初期化
//		udPaymentDto.setAllowanceTotal(0);
//		udPaymentDto.setDeductionTotal(0);
//		udPaymentDto.setPaymentTotal  (0);
//		udPaymentDto.setBank1PayAmount(0);
//		udPaymentDto.setBank2PayAmount(0);
//		udPaymentDto.setCashPayAmount (0);
//		// ステータス設定(税金計算済み)
//		udPaymentDto.setCalcStatus(UnicConst.CALC_STATUS_TAX);
//	}
//	
	/**
	 * 確定計算(合計及び銀行振分)
	 * @throws Exception
	 */
	protected void calcTotal(boolean needCalcIncomeTax) throws Exception {
		// 明細設定による金額計算(非課税額及び社会保険非対象額)
//		calcFreeAmount();
		// 課税対象額設定
//		int taxation = udPaymentDto.calcAllowanceTotal() -
//				udPaymentDto.calcSocialInsurance() -
//				taxFree - udPaymentDto.getCommutationFree();
//		udPaymentDto.setAmountToTaxation(taxation > 0 ? taxation : 0);
		// 所得税計算
//		if (needCalcIncomeTax) {
//			setIncomeTax();
//		}
		// 合計計算準備
//		int allowance = 0;	// 総支給額
//		int deduction = 0;	// 総控除額
//		int total     = 0;	// 差引支給額
		// 総支給額取得
//		allowance = udPaymentDto.calcAllowanceTotal();
		// 総控除額取得
//		deduction = udPaymentDto.calcDeductionTotal();
		// 差引支給額計算(総支給額-総控除額)
//		total = allowance - deduction; 
		// 銀行振分
//		divideAmongAccounts(total, UnicConst.ALLOWANCE_TYPE_SALARY);
		// 確定情報設定
//		udPaymentDto.setAllowanceTotal(allowance  );
//		udPaymentDto.setDeductionTotal(deduction  );
//		udPaymentDto.setPaymentTotal  (total      );
		// 差引支給額がマイナスの場合は銀行1、銀行2、現金の値を0に設定する
//		if (total < 0) {
//			udPaymentDto.setBank1PayAmount(0);
//			udPaymentDto.setBank2PayAmount(0);
//			udPaymentDto.setCashPayAmount (total);
//		} else {
//			udPaymentDto.setBank1PayAmount(bank1Amount);
//			udPaymentDto.setBank2PayAmount(bank2Amount);
//			udPaymentDto.setCashPayAmount (cashAmount );
//		}
		// ステータス設定(確定処理済み)
//		udPaymentDto.setCalcStatus(UnicConst.CALC_STATUS_FIX);
	}
	
	
	/**
	 * 確定計算(合計及び銀行振分)(賞与)
	 * @throws Exception
	 */
	protected void calcBonusTotal() throws Exception {
//		// 所得税設定
//		setBonusIncomeTax();
//		// 確定計算準備
//		int allowance = 0;	// 総支給額
//		int deduction = 0;	// 総控除額
//		int total     = 0;	// 差引支給額
//		// 総支給額取得
//		allowance = udBonusDto.calcBonusAllowanceTotal();
//		// 総控除額取得
//		deduction = udBonusDto.calcBonusDeductionTotal();
//		// 差引支給額計算(総支給額-総控除額)
//		total = allowance - deduction; 
//		// 銀行振分
//		divideAmongAccounts(total, UnicConst.ALLOWANCE_TYPE_BONUS);
//		// 確定情報設定
//		udBonusDto.setAllowanceTotal(allowance  );
//		udBonusDto.setDeductionTotal(deduction  );
//		udBonusDto.setPaymentTotal  (total      );
//		// 差引支給額がマイナスの場合は銀行1、銀行2、現金の値を0に設定する
//		if (total < 0) {
//			udBonusDto.setBank1PayAmount(0);
//			udBonusDto.setBank2PayAmount(0);
//			udBonusDto.setCashPayAmount (total);
//		} else {
//			udBonusDto.setBank1PayAmount(bank1Amount);
//			udBonusDto.setBank2PayAmount(bank2Amount);
//			udBonusDto.setCashPayAmount (cashAmount );
//		}
//		// ステータス設定(確定処理済み)
//		udBonusDto.setCalcStatus(UnicConst.CALC_STATUS_FIX);
	}
	
//	/**
//	 * 支給日(休日考慮)取得
//	 * @param targetMonth 対象年月
//	 * @throws NoSuchFieldException 
//	 * @throws IllegalAccessException 
//	 * @throws SQLException 
//	 * @throws MospException 
//	 */
//	public Date getPayDay(
//			Date targetMonth
//	) throws SQLException, IllegalAccessException, NoSuchFieldException, MospException {
//		// 取得準備
//		Date payDay = null;
//		Calendar payCal = Calendar.getInstance();
//		// 対象年月をカレンダーに設定
//		payCal.setTime(targetMonth);
//		// Confから取得した支給日、支給間隔を設定した支給日を取得
//		payDay = setSettingPaymentDate(payCal);
//		// 休日確認
//		while (!chkDateHoliday(payDay).equals("")){
//			// 休日の場合は支給日をマイナス1して再び確認
//			payCal.add(Calendar.DATE, -1);
//			payDay = payCal.getTime();
//		}
//		// 支給日の設定(休日考慮)
//		return payDay;
//	}
//	
//	/**
//	 * 休日確認
//	 * @param targetDate　対象年月
//	 * @return 休日の名称
//	 * @throws MospException
//	 */
//	private String chkDateHoliday(Date targetDate) throws MospException {
//		// 確認準備
//		Calendar targetCal = Calendar.getInstance();
//		String holidayName = "";
//		// 確認のためカレンダーに設定
//		targetCal.setTime(targetDate);
//		// 祝日確認
//		holidayName = chkLegalHoliday(targetDate);
//		if (holidayName.equals("")) {
//			// 対象日が国民の休日
//			holidayName = chkNationHoliday(targetDate);
//			if (holidayName.equals("")) 
//			{
//				// 対象日が振替休日
//				holidayName = chkTransferHoliday(targetDate);
//			} else {
//				return holidayName;
//			}
//		}
//		if (holidayName.equals("")) {
//			if (targetCal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
//				// 対象日が土曜日
//				holidayName = "土";
//			}
//			if  (targetCal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
//				// 対象日が日曜日
//				holidayName = "日";
//			}
//		} else {
//			return holidayName;
//
//		}
//		return holidayName;
//	}
//	
//	/**
//	 * 祝日確認
//	 * @param targetDate　対象年月
//	 * @return　祝日名称
//	 * @throws MospException
//	 */
//	private String chkNationHoliday(Date targetDate) throws MospException {
//		// 計算準備
//		String holidayName = "";
//		Calendar targetCal = Calendar.getInstance();
//		// 対象日の前日を取得
//		targetCal.setTime(targetDate);
//		targetCal.add(Calendar.DATE, 1);
//		Date befTargetDate = targetCal.getTime();
//		// 対象日の後日を取得
//		targetCal.setTime(targetDate);
//		targetCal.add(Calendar.DATE, -1);
//		Date aftTargetDate = targetCal.getTime();
//		// 前の日が休日でなければ国民の休日ではない
//		if (!chkLegalHoliday(befTargetDate).equals("")) {
//			// 次の日が平日なら国民の休日ではない
//			if (chkLegalHoliday(aftTargetDate).equals("")) {
//				holidayName = "";
//			} else {
//				// 対象日の前日、次の日が休日の場合のみ国民の休日適用
//				holidayName = "国民の休日";
//			}
//		} else {
//			holidayName = "";
//		}
//		return holidayName;
//	}
//
//	/**
//	 * 振替休日確認
//	 * @param targetDate　対象年月
//	 * @return　祝日名称
//	 * @throws MospException
//	 */
//	private String chkTransferHoliday(Date targetDate) throws MospException {
//		// 計算準備
//		String holidayName = "";
//		Calendar targetCal = Calendar.getInstance();
//		targetCal.setTime(targetDate);
//		// 対象週を取得
//		int targetWeek =  targetCal.get(Calendar.DAY_OF_WEEK_IN_MONTH);
//		// 対象週の日曜日が休日か判断
//		targetCal.set(Calendar.DAY_OF_WEEK_IN_MONTH, targetWeek);
//		targetCal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
//		holidayName =  chkLegalHoliday(targetCal.getTime());
//		
//		while (!holidayName.equals("")) {
//			targetCal.add(Calendar.DATE, 1);
//			holidayName = chkLegalHoliday(targetCal.getTime());
//		}
//		
//		if (targetCal.getTime().compareTo(targetDate) == 0) {
//			holidayName = "振替休日";
//		} else {
//			holidayName = "";
//		}
//			
//		
//		return holidayName;
//		
//	}
//	
//	/**
//	 * 祝日確認
//	 * @param targetDate　対象年月
//	 * @return　祝日名称
//	 * @throws MospException
//	 */
//	private String chkLegalHoliday(Date targetDate) throws MospException {
//		String legalHolidayName = "";
//		// 祝日配列取得(指定した年の祝日)
//		LegalHolidayUtility legalHolidayUtility = new LegalHolidayUtility(MospUtility.getYear(targetDate));
//		String [][] aryHoliday = legalHolidayUtility.getArySyuku();
//		// 対象日が祝日
//		for (int i= 0; i < aryHoliday.length; i++) {
//			// 日付確認のためStringからDateに
//			Date holiday = MospUtility.getDate(aryHoliday[i][0]);
//			if (holiday.compareTo(targetDate) == 0) {
//				// 日付が一致したら名称を返す
//				legalHolidayName = aryHoliday[i][1];
//				break;
//			}
//		}
//		
//		return legalHolidayName;
//	}
//	
//	/**
//	 * 設定支給日取得
//	 * @param payCal　対象年月(カレンダー)
//	 * @return　設定支給日
//	 * @throws SQLException
//	 * @throws IllegalAccessException
//	 * @throws NoSuchFieldException
//	 */
//	private Date setSettingPaymentDate(Calendar payCal)  throws SQLException, IllegalAccessException, NoSuchFieldException{
//		// 返還準備
//		Date payDay = null;
//		// CONFテーブルから支給日と支給間隔を取得
//		String[][] aryPayDay      = getConfArray(UnicConst.CONF_ID_PAY_DAY);
//		String[][] aryPayInterval = getConfArray(UnicConst.CONF_ID_PAY_ITBL);
//		
//		payCal.add(Calendar.MONTH, Integer.parseInt(aryPayInterval[0][1]));
//		payCal.set(Calendar.DATE, Integer.parseInt(aryPayDay[0][1]));
//		payDay = payCal.getTime();
//		
//		return payDay;
//		
//		
//		
//	}
//	/**
//	 * 給与データ設定(基本給、職能手当、時間外手当、扶養手当、通勤費、単価項目)
//	 * @throws Exception 
//	 */
//	private void setPaymentData() throws Exception {
//		// DAO準備
//		CmCommutationDao    cmCommutationDao    = new CmCommutationDao   ();
//		CmUnitAmountDao     cmUnitAmountDao     = new CmUnitAmountDao    ();
//		UsAbiliAllowanceDao usAbiliAllowanceDao = new UsAbiliAllowanceDao();
//		cmCommutationDao   .initDao(cfg, cmd, aspUser, user, conn);
//		cmUnitAmountDao    .initDao(cfg, cmd, aspUser, user, conn);
//		usAbiliAllowanceDao.initDao(cfg, cmd, aspUser, user, conn);
//		// 基本給設定
//		setBasicSalary();
//		// 職能手当1設定
//		attendanceMonthlyDto.setAbility1Allowance(uhIndividualDto.getAbilityAllowance());
//		// 職能手当2設定
//		attendanceMonthlyDto.setAbility2Allowance(uhIndividualDto.getAbilityAllowance2());
//		// 単価情報設定
//		List<CmUnitAmountDto> listUnitAmount = cmUnitAmountDao.findForEmployee(kCode);
//		setUnitAmount(listUnitAmount);
//		// 通勤費設定
//		setCmCommutationAmount(cmCommutationDao.findForEmployee(kCode));
//		// 時間外手当設定
//		setOvertimeAllowance(listUnitAmount);
//		// 扶養手当設定
//		setFamilyAllowance();
//	}
//	
//	/**
//	 * 計算単価設定
//	 * @param listUnitAmount 単価情報リスト
//	 */
//	private void setUnitAmount(List<CmUnitAmountDto> listUnitAmount) {
//		for (Iterator<CmUnitAmountDto> it = listUnitAmount.iterator(); it.hasNext();) {
//			CmUnitAmountDto dto = it.next();
//			int ceilAmount  = (int)round(dto.getUnitAmount(), 0, BigDecimal.ROUND_CEILING);
//			int floorAmount = (int)round(dto.getUnitAmount(), 0, BigDecimal.ROUND_FLOOR  );
//			if (needUnitAmount(dto, UnicConst.DTL_PAY_ALLOWANCE_05)) {
//				attendanceMonthlyDto.setAllowance_05(ceilAmount);
//			} else if (needUnitAmount(dto, UnicConst.DTL_PAY_ALLOWANCE_06)) {
//				attendanceMonthlyDto.setAllowance_06(ceilAmount);
//			} else if (needUnitAmount(dto, UnicConst.DTL_PAY_ALLOWANCE_09)) {
//				attendanceMonthlyDto.setAllowance_09(ceilAmount);
//			} else if (needUnitAmount(dto, UnicConst.DTL_PAY_ALLOWANCE_10)) {
//				attendanceMonthlyDto.setAllowance_10(ceilAmount);
//			} else if (needUnitAmount(dto, UnicConst.DTL_PAY_ALLOWANCE_11)) {
//				attendanceMonthlyDto.setAllowance_11(ceilAmount);
//			} else if (needUnitAmount(dto, UnicConst.DTL_PAY_ALLOWANCE_12)) {
//				attendanceMonthlyDto.setAllowance_12(ceilAmount);
//			} else if (needUnitAmount(dto, UnicConst.DTL_PAY_ALLOWANCE_13)) {
//				attendanceMonthlyDto.setAllowance_13(ceilAmount);
//			} else if (needUnitAmount(dto, UnicConst.DTL_PAY_ALLOWANCE_15)) {
//				attendanceMonthlyDto.setAllowance_15(ceilAmount);
//			} else if (needUnitAmount(dto, UnicConst.DTL_PAY_ALLOWANCE_16)) {
//				attendanceMonthlyDto.setAllowance_16(ceilAmount);
//			} else if (needUnitAmount(dto, UnicConst.DTL_PAY_ALLOWANCE_17)) {
//				attendanceMonthlyDto.setAllowance_17(ceilAmount);
//			} else if (needUnitAmount(dto, UnicConst.DTL_PAY_DEDUCTION_08)) {
//				attendanceMonthlyDto.setDeduction_08(floorAmount);
//			} else if (needUnitAmount(dto, UnicConst.DTL_PAY_DEDUCTION_09)) {
//				attendanceMonthlyDto.setDeduction_09(floorAmount);
//			} else if (needUnitAmount(dto, UnicConst.DTL_PAY_DEDUCTION_10)) {
//				attendanceMonthlyDto.setDeduction_10(floorAmount);
//			} else if (needUnitAmount(dto, UnicConst.DTL_PAY_DEDUCTION_11)) {
//				attendanceMonthlyDto.setDeduction_11(floorAmount);
//			} else if (needUnitAmount(dto, UnicConst.DTL_PAY_DEDUCTION_12)) {
//				attendanceMonthlyDto.setDeduction_12(floorAmount);
//			} else if (needUnitAmount(dto, UnicConst.DTL_PAY_DEDUCTION_13)) {
//				attendanceMonthlyDto.setDeduction_13(floorAmount);
//			} else if (needUnitAmount(dto, UnicConst.DTL_PAY_DEDUCTION_14)) {
//				attendanceMonthlyDto.setDeduction_14(floorAmount);
//			} else if (needUnitAmount(dto, UnicConst.DTL_PAY_DEDUCTION_15)) {
//				attendanceMonthlyDto.setDeduction_15(floorAmount);
//			} else if (needUnitAmount(dto, UnicConst.DTL_PAY_DEDUCTION_16)) {
//				attendanceMonthlyDto.setDeduction_16(floorAmount);
//			} else if (needUnitAmount(dto, UnicConst.DTL_PAY_DEDUCTION_17)) {
//				attendanceMonthlyDto.setDeduction_17(floorAmount);
//			} else if (needUnitAmount(dto, UnicConst.DTL_PAY_DEDUCTION_18)) {
//				attendanceMonthlyDto.setDeduction_18(floorAmount);
//			} else if (needUnitAmount(dto, UnicConst.DTL_PAY_DEDUCTION_19)) {
//				attendanceMonthlyDto.setDeduction_19(floorAmount);
//			} else if (needUnitAmount(dto, UnicConst.DTL_PAY_DEDUCTION_20)) {
//				attendanceMonthlyDto.setDeduction_20(floorAmount);
//			}
//		}
//	}
//	
//	private boolean needUnitAmount(CmUnitAmountDto dto, String unitType) {
//		if (dto.getUnitType().equals(unitType) && dto.getUnitAmount() != 0D) {
//			return true;
//		}
//		return false;
//
//	}
//	
//	/**
//	 * 基本給を設定する。<br>
//	 */
//	private void setBasicSalary() {
//		// 基本給取得
//		int basicSalary = uhIndividualDto.getBasicSalary();
//		// 時給者
//		if (uhIndividualDto.getPaymentType().equals(UnicConst.PAYMENT_PER_HOUR)) {
//			// 基本 * 出勤時間(2008.10.02 野島 修正)
//			basicSalary = (int)round(basicSalary * attendanceMonthlyDto.getPaymentHours(),0 , BigDecimal.ROUND_HALF_UP);
//		} else if (uhIndividualDto.getPaymentType().equals(UnicConst.PAYMENT_PER_DAY)) {
//			// 日給者
//			basicSalary = basicSalary * (attendanceMonthlyDto.getPresence()
//					+ attendanceMonthlyDto.getWorkOnHoliday()
//					+ attendanceMonthlyDto.getParticularHoliday()
//					+ attendanceMonthlyDto.getPaidHoliday());
//		}
//		attendanceMonthlyDto.setBasicSalary(basicSalary);
//	}
//
//	
//	/**
//	 * 時間外割増率取得
//	 * @throws NoSuchFieldException 
//	 * @throws IllegalAccessException 
//	 * @throws SQLException 
//	 */
//	private void setOvertimeRatio(
//			) throws SQLException, IllegalAccessException, NoSuchFieldException {
//		// 取得済確認
//		if (aryRatioOvertime != null) {
//			return;
//		}
//		// UM_CONFから値を取得
//		aryRatioOvertime      = getConfArray(UnicConst.CONF_ID_RATIO_OT);
//		aryRatioLateNight     = getConfArray(UnicConst.CONF_ID_RATIO_LN);
//		aryRatioWorkOnHoliday = getConfArray(UnicConst.CONF_ID_RATIO_WH);
//	}
//	
//	/**
//	 * アップロード項目設定
//	 * @throws NoSuchFieldException 
//	 * @throws IllegalAccessException 
//	 * @throws SQLException 
//	 */
//	private void setUploadedData(
//	) throws SQLException, IllegalAccessException, NoSuchFieldException {
//		// DAO準備
//		PhPaymentDao dao = new PhPaymentDao();
//		dao.initDao(cfg, cmd, aspUser, user, conn);
//		// 給与データ取得
//		PhPaymentDto dto = dao.findForKey(kCode, targetMonth);
//		if (dto == null) {
//			return;
//		}
//		// アップロード項目設定
//		attendanceMonthlyDto.setAllowance_05(dto.getAllowance_05());
//		attendanceMonthlyDto.setAllowance_09(dto.getAllowance_09());
//		attendanceMonthlyDto.setAllowance_10(dto.getAllowance_10());
//		attendanceMonthlyDto.setAllowance_11(dto.getAllowance_11());
//		attendanceMonthlyDto.setAllowance_12(dto.getAllowance_12());
//		attendanceMonthlyDto.setAllowance_13(dto.getAllowance_13());
//		attendanceMonthlyDto.setAllowance_15(dto.getAllowance_15());
//		attendanceMonthlyDto.setAllowance_16(dto.getAllowance_16());
//		attendanceMonthlyDto.setAllowance_17(dto.getAllowance_17());
//		attendanceMonthlyDto.setDeduction_08(dto.getDeduction_08());
//		attendanceMonthlyDto.setDeduction_09(dto.getDeduction_09());
//		attendanceMonthlyDto.setDeduction_10(dto.getDeduction_10());
//		attendanceMonthlyDto.setDeduction_12(dto.getDeduction_12());
//		attendanceMonthlyDto.setDeduction_13(dto.getDeduction_13());
//	}
//	
//	/**
//	 * 設定値取得(float)
//	 * @return 設定値(float)
//	 */
//	private float getConfValueFloat(String[][] aryConf, String confId) {
//		float confValue = 0F;
//		if (aryConf == null) {
//			return confValue;
//		}
//		for (int i = 0; i < aryConf.length; i++) {
//			if (aryConf[i][0].equals(confId)) {
//				return Float.parseFloat(aryConf[i][1]);
//			}
//		}
//		return confValue;
//	}
//	
//	/**
//	 * 時間単価取得。<br>
//	 * @return 時間単価
//	 * @throws NoSuchFieldException 
//	 * @throws IllegalAccessException 
//	 * @throws SQLException 
//	 * @throws ClassNotFoundException 
//	 * @throws Exception 
//	 */
//	protected float getAmountPerHour() throws ClassNotFoundException, SQLException, IllegalAccessException, NoSuchFieldException {
//		// 時間単価取得
//		setHoursPerDay();
//		setPrescribedCalendar();
//		float amountPerHour = 0F;
//		if (uhIndividualDto.getPaymentType().equals(UnicConst.PAYMENT_PER_MONTH)) {
//			amountPerHour = (
//					uhIndividualDto.getBasicSalary      () +
//					uhIndividualDto.getAbilityAllowance () +
//					uhIndividualDto.getAbilityAllowance2()
//					) / (prescribedDays * hoursPerDay);
//		} else if (uhIndividualDto.getPaymentType().equals(UnicConst.PAYMENT_PER_DAY)) {
//			amountPerHour = uhIndividualDto.getBasicSalary() / hoursPerDay;
//		} else if (uhIndividualDto.getPaymentType().equals(UnicConst.PAYMENT_PER_HOUR)) {
//			amountPerHour = uhIndividualDto.getBasicSalary();
//		}
//		return amountPerHour;
//	}
//	
//	/**
//	 * 時間外手当計算
//	 * @return 時間外手当
//	 * @throws NoSuchFieldException 
//	 * @throws IllegalAccessException 
//	 * @throws SQLException 
//	 * @throws ClassNotFoundException 
//	 */
//	private void setOvertimeAllowance(
//			List<CmUnitAmountDto> listUnitAmount
//	) throws ClassNotFoundException, SQLException, IllegalAccessException, NoSuchFieldException {
//		// デフォルト所定労働時間、時間外割増率取得
//		setHoursPerDay();
//		setOvertimeRatio();
//		// 時間単価取得
//		float amountPerHour = getAmountPerHour();
//		// 残業、成果手当
//		double effortAllowance = 0D;
//		// 割増単価取得
//		Float effortUnit = getUnitRatio(listUnitAmount, UnicConst.UNIT_OVERTIME);
//		// 割増単価が存在しない場合
//		if (effortUnit == null) {
//			// 割増単価 = 割増率 * 時間単価
//			effortUnit = new Float(getConfValueFloat(
//					aryRatioOvertime, uhIndividualDto.getPaymentType()) * amountPerHour);
//		}
//		if (attendanceMonthlyDto.getEffortTime() > 0) {
//			// 残業、成果手当 = 残業、成果時間 * 割増単価
//			effortAllowance = attendanceMonthlyDto.getEffortTime() * effortUnit.floatValue();
//		}
//		attendanceMonthlyDto.setEffortUnit(effortUnit.floatValue());
//		attendanceMonthlyDto.setEffortAllowance(
//				(int)round(effortAllowance, 0, BigDecimal.ROUND_CEILING));
//		// 深夜手当
//		double lateNightAllowance = 0D;
//		// 割増単価取得
//		Float lateNightUnit = getUnitRatio(listUnitAmount, UnicConst.UNIT_LATE_NIGHT);
//		// 割増単価が存在しない場合
//		if (lateNightUnit == null) {
//			// 割増単価 = 割増率 * 時間単価
//			lateNightUnit = new Float(getConfValueFloat(
//					aryRatioLateNight, uhIndividualDto.getPaymentType()) * amountPerHour);
//		}
//		if (attendanceMonthlyDto.getLateNight() > 0) {
//			// 深夜手当 = 深夜時間 * 割増単価
//			lateNightAllowance = attendanceMonthlyDto.getLateNight() * lateNightUnit.floatValue();
//		}
//		attendanceMonthlyDto.setLateNightUnit(lateNightUnit.floatValue());
//		attendanceMonthlyDto.setLateNightAllowance(
//				(int)round(lateNightAllowance, 0, BigDecimal.ROUND_CEILING));
//		// 深夜残業手当
//		double overLateAllowance = 0D;
//		if (attendanceMonthlyDto.getOverLate() > 0) {
//			// 深夜手当 = 深夜時間 * 割増単価
//			overLateAllowance = attendanceMonthlyDto.getOverLate() * effortUnit.floatValue();
//		}
//		attendanceMonthlyDto.setOverLateAllowance(
//				(int)round(overLateAllowance, 0, BigDecimal.ROUND_CEILING));
//		// 休日出勤手当
//		double holidayAllowance = 0D;
//		// 割増率取得
//		Float holidayUnit = getUnitRatio(listUnitAmount, UnicConst.UNIT_WORK_ON_HOLIDAY);
//		// 割増単価が存在しない場合
//		if (holidayUnit == null) {
//			// 割増単価 = 割増率 * 時間単価
//			holidayUnit = new Float(getConfValueFloat(
//					aryRatioWorkOnHoliday, uhIndividualDto.getPaymentType()) * amountPerHour);
//		}
//		if (attendanceMonthlyDto.getHolidayTime() > 0) {
//			// 休日手当 = 休日時間 * 割増単価
//			holidayAllowance = attendanceMonthlyDto.getHolidayTime() * holidayUnit.floatValue();
//		}
//		attendanceMonthlyDto.setHolidayUnit(holidayUnit.floatValue());
//		attendanceMonthlyDto.setHolidayAllowance(
//				(int)round(holidayAllowance, 0, BigDecimal.ROUND_CEILING));
//		// 成・深・休
//		attendanceMonthlyDto.setOvertimeAllowance(
//				attendanceMonthlyDto.getEffortAllowance   () +
//				attendanceMonthlyDto.getLateNightAllowance() +
//				attendanceMonthlyDto.getOverLateAllowance () +
//				attendanceMonthlyDto.getHolidayAllowance  ()
//		);
//	}
//	
//	/**
//	 * 単価取得(割増率)
//	 * @return 単価()
//	 * @throws Exception
//	 */
//	private Float getUnitRatio(List<CmUnitAmountDto> listUnitAmount, String unitType) {
//		for (int i = 0; i < listUnitAmount.size(); i++) {
//			CmUnitAmountDto dto = listUnitAmount.get(i);
//			if (dto.getUnitType().equals(unitType)) {
//				return new Float((float)dto.getUnitAmount());
//			}
//		}
//		return null;
//	}
//	
//	/**
//	 * 扶養手当を設定する。<br>
//	 * @throws Exception 
//	 */
//	private void setFamilyAllowance() throws Exception {
//		// 扶養手当初期化
//		attendanceMonthlyDto.setFamilyAllowance(0);
//		// 扶養設定確認
//		UsDetailDto usDetailDto = mapPaymentDetail.get(UnicConst.DTL_PAY_ALLOWANCE_04);
//		if (usDetailDto == null) {
//			// 設定がない社員は0円
//			return;
//		}
//		// 入社日確認
//		if (uhBasisDto.getEntranceDate().compareTo(startDate) > 0) {
//			// 支給無し(入社日が計算月初日より後の場合)
//			return;
//		}
//		// 退社日確認
//		if (uhBasisDto.getRetirementDate() != null) {
//			if (uhBasisDto.getRetirementDate().compareTo(endDate) < 0) {
//				// 支給無し(退社日が計算月最終日より前の場合)
//				return;
//			}
//		}
//		// 扶養手当支給下限出勤日数取得
//		if (familyAllowanceLimit == 0) {
//			familyAllowanceLimit =
//				(int)getConfValueDouble(UnicConst.CONF_ID_FAMILIY_LM, "");
//		}
//		// 扶養手当支給上限欠勤日数確認
//		if (attendanceMonthlyDto.getAbsence() > familyAllowanceLimit) {
//			// 支給無し(出勤日数が扶養手当支給上限欠勤日数より多い場合)
//			return;
//		}
//		// 扶養手当単価設定取得
//		if (mapFamilyAllowance == null) {
//			mapFamilyAllowance = getConfMap(UnicConst.CONF_ID_FAMILIY_AW);
//		}
//		// 家族(保険)情報取得
//		CmFamilyInsureDao dao = new CmFamilyInsureDao();
//		dao.initDao(cfg, cmd, aspUser, user, conn);
//		List<CmFamilyInsureDto> list = dao.findForEmployee(kCode);
//		// 扶養手当対象者数取得
//		int cntFamily = 0;
//		for (Iterator<CmFamilyInsureDto> it = list.iterator(); it.hasNext();) {
//			CmFamilyInsureDto dto = it.next();
//			// 健康保険被扶養者資格取得日無しの場合
//			if (dto.getHeaQualifiedDate() == null) {
//				// 扶養手当対象外
//				continue;
//			}
//			// 健康保険被扶養者資格取得日 > 計算月初日
//			if (dto.getHeaQualifiedDate().compareTo(startDate) > 0) {
//				// 扶養手当対象外
//				continue;
//			}
//			// 剥奪日有り 且つ 剥奪日 <= 計算月最終日
//			if (dto.getHeaDisqualifiedDate() != null &&
//					dto.getHeaDisqualifiedDate().compareTo(endDate) <= 0) {
//				// 扶養手当対象外
//				continue;
//			}
//			++cntFamily;
//		}
//		// 扶養手当計算
//		int familyAllowance = 0;
//		for (int i = 0; i < cntFamily; i++) {
//			// 単価取得
//			int unitAmount = 0;
//			String strAmount = mapFamilyAllowance.get(String.valueOf(i + 1));
//			if (strAmount == null) {
//				// 0の単価を用いる(単価設定が存在しない場合)
//				strAmount = mapFamilyAllowance.get(String.valueOf(0));
//			}
//			if (strAmount == null) {
//				unitAmount = 0;
//			} else {
//				unitAmount = Integer.parseInt(strAmount);
//			}
//			// 扶養手当加算
//			familyAllowance += unitAmount;
//		}
//		// 扶養手当設定
//		attendanceMonthlyDto.setFamilyAllowance(familyAllowance);
//	}
//	
//	/**
//	 * 通勤費設定
//	 * @param listCommutation 通勤費情報リスト
//	 */
//	private void setCmCommutationAmount(List<CmCommutationDto> listCommutation) {
//		// 変数宣言
//		int commuteAmount = 0;	// 支給通勤手当
//		int monthlyAmount = 0;	// 当月通勤手当
//		int monthlyTaxed  = 0;	// 当月課税通勤費
//		// 給与情報取得
//		for (Iterator<CmCommutationDto> it = listCommutation.iterator(); it.hasNext();) {
//			// 変数宣言
//			int amount = 0    ;	// 個別当月通勤手当
//			int taxed  = 0    ;	// 個別当月課税通勤費
//			// データ取得
//			CmCommutationDto cmCommutationDto = it.next();
//			// 当月通勤手当取得
//			if (cmCommutationDto.getPaymentInterval().equals("1")) {
//				// 支給間隔：毎月
//				amount = cmCommutationDto.getCommuteAmount();
//				taxed  = cmCommutationDto.getCommuteTaxed ();
//				// 当月通勤手当及び当月課税通勤費加算
//				monthlyAmount += amount;
//				monthlyTaxed  += taxed ;
//				// 支給通勤手当加算
//				commuteAmount += amount;
//			} else if (cmCommutationDto.getPaymentInterval().equals("5")) {
//				// 支給間隔：毎日(通勤費×出勤日数(休出含む))
//				amount = cmCommutationDto.getCommuteAmount() * attendanceMonthlyDto.getPresenceAtt();
//				taxed  = cmCommutationDto.getCommuteTaxed () * attendanceMonthlyDto.getPresenceAtt();
//				// 当月通勤手当及び当月課税通勤費加算
//				monthlyAmount += amount;
//				monthlyTaxed  += taxed ;
//				// 支給通勤手当加算
//				commuteAmount += amount;
//			} else {
//				// 支給間隔：2ヶ月、3ヶ月、6ヶ月
//				int interval     ;	// 支給間隔
//				int payStartMonth;	// 支給開始月
//				int currentMonth ;	// 計算対象月
//				// 支給間隔取得
//				if (cmCommutationDto.getPaymentInterval().equals("2")) {
//					interval = 2;
//				} else if (cmCommutationDto.getPaymentInterval().equals("3")) {
//					interval = 3;
//				} else {
//					interval = 6;
//				}
//				// 支給開始月取得
//				payStartMonth = MospUtility.getMonth(cmCommutationDto.getPayStartMonth());
//				// 計算対象月取得
//				currentMonth  = MospUtility.getMonth(targetMonth);
//				// 個別当月通勤手当設定
//				amount = (int)round(
//						cmCommutationDto.getCommuteAmount() / (double)interval, 0, BigDecimal.ROUND_FLOOR);
//				// 個別当月課税通勤費設定
//				taxed  = (int)round(
//						cmCommutationDto.getCommuteTaxed () / (double)interval, 0, BigDecimal.ROUND_FLOOR);
//				// 通勤手当支給月判断
//				if (isAllowMonth(interval, payStartMonth, currentMonth)) {
//					// 当月通勤手当、当月課税通勤費再設定
//					amount += cmCommutationDto.getCommuteAmount() - amount * interval;
//					taxed  += cmCommutationDto.getCommuteTaxed () - taxed  * interval;
//				}
//				// 当月通勤手当及び当月課税通勤費加算
//				monthlyAmount += amount;
//				monthlyTaxed  += taxed ;
//				// 支給通勤手当加算
//				if (cmCommutationDto.getLumpMonthlyType().equals("1")) {
//					// 一括区分：一括
//					if (isAllowMonth(interval, payStartMonth, currentMonth)) {
//						// 支給月の場合
//						commuteAmount += cmCommutationDto.getCommuteAmount();
//					}
//				} else {
//					// 一括区分：月割
//					commuteAmount += amount;
//				}
//			}
//			// 交通用具利用者の限度額超過による課税通勤費
//			// 課税しない(独自仕様)
//			/*
//			if (cmCommutationDto.getCommuteType().equals(UnicConst.COMMUTE_TYPE_CAR)) {
//				float distance = cmCommutationDto.getCommuteDistance();
//				// 2km未満の場合は2kmとする(独自仕様)
//				distance = distance < 2F ? 2F : distance;
//				// 課税通勤費取得
//				monthlyTaxed += LegalUtility.getTaxationForCarCommute(
//						amount - taxed, distance);
//			}
//			*/
//		}
//		// 通勤手当の限度額超過による課税通勤費
//		monthlyTaxed  += LegalUtility.getTaxationForCommutation(
//				monthlyAmount - monthlyTaxed);
//		// 給与情報設定
//		attendanceMonthlyDto.setCommutation   (commuteAmount);
//		attendanceMonthlyDto.setCommutationTax(monthlyTaxed);
//	}
//	
//	/**
//	 * 支給月判定
//	 * @param paymetInterval 支給間隔
//	 * @param payStartMonth  支給開始月
//	 * @param currentMonth   判定対象月
//	 * @return 支給月判定結果(true：支給月、false：支給月でない)
//	 */
//	private boolean isAllowMonth(
//			int paymetInterval, int payStartMonth, int currentMonth
//	) {
//		int allowMonth = payStartMonth;
//		do {
//			allowMonth += paymetInterval;
//			if (12 < allowMonth) {
//				allowMonth -= 12;
//			}
//			if (currentMonth == allowMonth) {
//				return true;
//			}
//		} while (payStartMonth != allowMonth);
//		return false;
//	}
//	
//	/**
//	 * 社会保険料設定
//	 * @throws NoSuchFieldException 
//	 */
//	private void setSocialInsurance() throws SQLException, IllegalAccessException, NoSuchFieldException {
//		int health   = 0;	// 健康保険料
//		int nursing  = 0;	// 介護保険料
//		int pension  = 0;	// 厚生年金料
//		int fund     = 0;	// 厚生年金基金料
//		int unemploy = 0;	// 雇用保険料
//		// 人事給与情報(保険)取得
//		CmSocInsuranceDao dao = new CmSocInsuranceDao();
//		dao.initDao(cfg, cmd, aspUser, user, conn);
//		CmSocInsuranceDto dto = dao.findForEmployee(kCode, targetMonth);
//		// 人事給与情報(保険)確認
//		if (dto == null) {
//			// 社会保険料設定
//			udPaymentDto.setHealthInsurance  (health  );
//			udPaymentDto.setNursingInsurance (nursing );
//			udPaymentDto.setPensionInsurance (pension );
//			udPaymentDto.setPensionFund      (fund    );
//			udPaymentDto.setEmployeeInsurance(unemploy);
//			return;
//		}
//		// 社会保険料計算
//		if (dto.getCalcInsType().equals(LegalConst.CALC_INS)) {
//			// 健康保険、介護保険計算対象確認
//			if (dto.getHealthLostType().equals("")) {
//				// 健康保険料計算
//				health = LegalUtility.calcPremium(dto.getHealthPayment(),
//						ratioHealthPremium, BigDecimal.ROUND_HALF_UP);
//				// 介護保険計算対象確認
//				if(chkCalcNursingInsType(dto.getNursingInsType())) {
//					// 介護保険料計算
//					nursing = LegalUtility.calcPremium(dto.getHealthPayment(),
//							ratioNursingPremium, BigDecimal.ROUND_HALF_UP);
//				}
//			}
//			// 厚生年金、厚生年金基金計算対象確認
//			if (dto.getPensionLostType().equals("")) {
//				// 厚生年金料計算
//				pension = LegalUtility.calcPremium(dto.getPensionPayment(),
//						ratioPensionPremium, BigDecimal.ROUND_HALF_DOWN);
//				// 厚生年金基金料計算(厚生年金基金加入区分が「加入」の場合)
//				if (fundParticipation.equals(LegalConst.FUND_PARTICIPATION_ON)) {
//					fund = LegalUtility.calcPremium(dto.getPensionPayment(),
//							ratioFundPremium, BigDecimal.ROUND_HALF_UP);
//				}
//			}
//		}
//		// 雇用保険料計算(雇用保険区分が「計算する」の場合)
//		if (dto.getCalcUnemployType().equals(LegalConst.CALC_UNEMPLOY)) {
//			// 雇用保険料計算対象確認
//			if (dto.getUnemployLostType().equals("")) {
//				unemploy = LegalUtility.calcPremium(
//						udPaymentDto.getAmountToSocIns(),
//						ratioUnemployPremium / 1000, BigDecimal.ROUND_HALF_DOWN);
//			}
//		}
//		// 社会保険料設定
//		udPaymentDto.setHealthInsurance  (health  );
//		udPaymentDto.setNursingInsurance (nursing );
//		udPaymentDto.setPensionInsurance (pension );
//		udPaymentDto.setPensionFund      (fund    );
//		udPaymentDto.setEmployeeInsurance(unemploy);
//	}
//	
//	/**
//	 * 介護保険計算対象確認
//	 * @param nursingInsType　介護保険区分
//	 * @return　計算対象確認フラグ
//	 * @throws SQLException
//	 * @throws IllegalAccessException
//	 * @throws NoSuchFieldException
//	 */
//	public boolean chkCalcNursingInsType(String nursingInsType) throws SQLException, IllegalAccessException, NoSuchFieldException {
//		boolean isCalc = false;
//		// 介護保険料計算(介護保険区分が「対象(自動)」の場合)
//		if (nursingInsType.equals(LegalConst.NURSING_INS_AUTO)) {
//			// 年齢で計算対象か判断
//			isCalc = chkCalcNusingInsAuto();
//		}
//		// 介護保険料計算(介護保険区分が「対象」の場合)
//		if (nursingInsType.equals(LegalConst.NURSING_INS_MANUAL)) {
//			isCalc = true;
//		}
//		return isCalc;
//	}
//	
//	/**
//	 * 介護保険計算対象確認(区分：計算対象(自動))
//	 * @return 計算対象確認フラグ
//	 * @throws SQLException
//	 * @throws IllegalAccessException
//	 * @throws NoSuchFieldException
//	 */
//	public boolean chkCalcNusingInsAuto() throws SQLException, IllegalAccessException, NoSuchFieldException {
//		// 計算対象確認フラグ
//		boolean isCalc = false;
//		// DAO準備
//		UmExtraDao umExtraDao = new UmExtraDao();
//		umExtraDao.initDao(cfg, cmd, aspUser, user, conn);
//		// 年齢取得準備
//		int age = 0;
//		// 対象年月最終日+1日取得
//		Date targetDate = addDay(getEndDate(targetMonth), 1);
//		// 管理情報取得
//		UmExtraDto umExtraDto = umExtraDao.findForKey(kCode);
//		// 管理データが存在しない社員は対象外
//		if (umExtraDto == null) {
//			isCalc = false;
//			return isCalc;
//		}
//		// 誕生日が設定されていない社員は対象外
//		if (umExtraDto.getBirthDate() == null) {
//			isCalc = false;
//			return isCalc;
//		}
//		// 年齢取得(対象年月最終日+1日で判断)
//		age = getAge(umExtraDto.getBirthDate(), targetDate);
//		// 40歳以上65歳未満は計算対象
//		if (age >= 40) {
//			isCalc = true;
//		}
//		if (age >= 65 ) {
//			isCalc = false;
//		}
//		return isCalc;
//		
//	}
	
	/**
	 * 明細設定による金額計算(非課税額及び社会保険非対象額)
	 * @throws NoSuchFieldException 
	 * @throws IllegalAccessException 
	 * @throws SQLException 
	 */
//	private void calcFreeAmount(
//	) throws SQLException, IllegalAccessException, NoSuchFieldException {
//		// 初期化
//		taxFree    = 0;
//		socInsFree = 0;
//		// 明細設定取得
//		Map<String, DetailPaDto > mapDetail = getMapDetail();
//		if (mapDetail == null) {
//			return;
//		}
//		// 明細設定項目毎に確認(KS18(通勤費)はケースにより非課税上限が変わるため設定は無視)
//		setFreeAmount(mapDetail.get(UnicConst.DTL_PAY_ALLOWANCE_01), udPaymentDto.getBasicSalary      ());	// 給与・支給01(KS01)
//		setFreeAmount(mapDetail.get(UnicConst.DTL_PAY_ALLOWANCE_02), udPaymentDto.getAbility1Allowance());	// 給与・支給02(KS02)
//		setFreeAmount(mapDetail.get(UnicConst.DTL_PAY_ALLOWANCE_03), udPaymentDto.getAbility2Allowance());	// 給与・支給03(KS03)
//		setFreeAmount(mapDetail.get(UnicConst.DTL_PAY_ALLOWANCE_04), udPaymentDto.getFamilyAllowance  ());	// 給与・支給04(KS04)
//		setFreeAmount(mapDetail.get(UnicConst.DTL_PAY_ALLOWANCE_05), udPaymentDto.getAllowance_05     ());	// 給与・支給05(KS05)
//		setFreeAmount(mapDetail.get(UnicConst.DTL_PAY_ALLOWANCE_06), udPaymentDto.getAllowance_06     ());	// 給与・支給06(KS06)
//		setFreeAmount(mapDetail.get(UnicConst.DTL_PAY_ALLOWANCE_07), udPaymentDto.getCutForMissing    ());	// 給与・支給07(KS07)
//		setFreeAmount(mapDetail.get(UnicConst.DTL_PAY_ALLOWANCE_08), udPaymentDto.getCutForShort      ());	// 給与・支給08(KS08)
//		setFreeAmount(mapDetail.get(UnicConst.DTL_PAY_ALLOWANCE_09), udPaymentDto.getAllowance_09     ());	// 給与・支給09(KS09)
//		setFreeAmount(mapDetail.get(UnicConst.DTL_PAY_ALLOWANCE_10), udPaymentDto.getAllowance_10     ());	// 給与・支給10(KS10)
//		setFreeAmount(mapDetail.get(UnicConst.DTL_PAY_ALLOWANCE_11), udPaymentDto.getAllowance_11     ());	// 給与・支給11(KS11)
//		setFreeAmount(mapDetail.get(UnicConst.DTL_PAY_ALLOWANCE_12), udPaymentDto.getAllowance_12     ());	// 給与・支給12(KS12)
//		setFreeAmount(mapDetail.get(UnicConst.DTL_PAY_ALLOWANCE_13), udPaymentDto.getAllowance_13     ());	// 給与・支給13(KS13)
//		setFreeAmount(mapDetail.get(UnicConst.DTL_PAY_ALLOWANCE_14), udPaymentDto.getDateAllowance    ());	// 給与・支給14(KS14)
//		setFreeAmount(mapDetail.get(UnicConst.DTL_PAY_ALLOWANCE_15), udPaymentDto.getAllowance_15     ());	// 給与・支給15(KS15)
//		setFreeAmount(mapDetail.get(UnicConst.DTL_PAY_ALLOWANCE_16), udPaymentDto.getAllowance_16     ());	// 給与・支給16(KS16)
//		setFreeAmount(mapDetail.get(UnicConst.DTL_PAY_ALLOWANCE_17), udPaymentDto.getAllowance_17     ());	// 給与・支給17(KS17)
//		setFreeAmount(mapDetail.get(UnicConst.DTL_PAY_ALLOWANCE_19), udPaymentDto.getOvertimeAllowance());	// 給与・支給19(KS20)
//		setFreeAmount(mapDetail.get(UnicConst.DTL_PAY_ALLOWANCE_20), udPaymentDto.getCutFromBasic     ());	// 給与・支給20(KS20)
//	}
	
	/**
	 * 明細設定による金額設定(非課税額及び社会保険非対象額)
	 * @param detail       明細設定DTO
	 * @param targetAmount 対象金額
	 */
//	private void setFreeAmount(DetailPaDto detail, int targetAmount) {
//		// 設定要否確認
//		if (targetAmount == 0 || detail == null) {
//			return;
//		}
//		// 課税対象区分確認
//		if (detail.getTaxObjectType().equals(LegalConst.TAX_OBJECT_FREE)) {
//			if (detail.getTaxFreeUpperLimit() == 0) {
				// 全額非課税
//				taxFree += targetAmount;
//			} else if (targetAmount > detail.getTaxFreeUpperLimit()) {
				// 非課税上限額までは非課税(課税対象の場合)
//				taxFree += detail.getTaxFreeUpperLimit();
//			} else {
				// 上限に達しない場合は全額非課税
//				taxFree += targetAmount;
//			}
//		}
		// 社会保険対象区分確認
//		if (detail.getSocInsObjectType().equals(LegalConst.SOC_INS_OBJECT_FREE)) {
			// 全額非社会保険対象
//			socInsFree += targetAmount;
//		}
//	}
	
//	/**
//	 * 社会保険個人負担料率取得
//	 * @throws SQLException
//	 * @throws IllegalAccessException
//	 * @throws NoSuchFieldException
//	 */
//	public void setSocInsRatio(
//	) throws SQLException, IllegalAccessException, NoSuchFieldException {
//		// 初期化
//		ratioHealthPremium   = 0;	// 健康保険料率 
//		ratioNursingPremium  = 0;	// 介護保険料率
//		ratioPensionPremium  = 0;	// 厚生年金料率
//		ratioFundPremium     = 0;	// 厚生年金基金料率
//		ratioUnemployPremium = 0;	// 雇用保険料率
//		fundParticipation    = LegalConst.FUND_PARTICIPATION_OFF;	// 厚生年金基金加入区分
//		// 会社情報取得
//		CmCompanyDao cmCompanyDao = new CmCompanyDao();
//		cmCompanyDao.initDao(cfg, cmd, aspUser, user, conn);
//		CmCompanyDto cmCompanyDto = cmCompanyDao.findAll();
//		if (cmCompanyDto == null) {
//			return;
//		}
//		// 社会保険個人負担料率取得
//		ratioHealthPremium   = cmCompanyDto.getHealthPremiumRate  ();	// 健康保険料率  
//		ratioNursingPremium  = cmCompanyDto.getNursingPremiumRate ();	// 介護保険料率
//		ratioPensionPremium  = cmCompanyDto.getPensionPremiumRate ();	// 厚生年金料率
//		ratioFundPremium     = cmCompanyDto.getFundPremiumRate    ();	// 厚生年金基金料率
//		ratioUnemployPremium = cmCompanyDto.getUnemployPremiumRate();	// 雇用保険料率
//		fundParticipation    = cmCompanyDto.getFundParticipation  ();	// 厚生年金基金加入区分
//	}
//	
//	/**
//	 * 住民税設定
//	 * @throws IllegalAccessException 
//	 * @throws SQLException 
//	 * @throws NoSuchFieldException 
//	 */
//	public void setResidenceTax(
//	) throws SQLException, IllegalAccessException {
//		// 人事給与情報(住民税)取得
//		CmResidenceTaxDao dao = new CmResidenceTaxDao();
//		dao.initDao(cfg, cmd, aspUser, user, conn);
//		CmResidenceTaxDto dto = dao.findForEmployeeDate(kCode, targetMonth);
//		if (dto == null) {
//			udPaymentDto.setResidenceTax(0);
//			return;
//		}
//		// 対象月住民税取得(対象月+1)
//		int residenceTax = 0;
//		int month = MospUtility.getMonth(targetMonth) + 1;
//		if (month == 13) {
//			month = 1;
//		}
//		switch (month) {
//			case 6:
//				residenceTax = dto.getJuneAmount    ();
//				break;
//			case 7:
//				residenceTax = dto.getJulyAmount    ();
//				break;
//			case 8:
//				residenceTax = dto.getAugustAmount  ();
//				break;
//			case 9:
//				residenceTax = dto.getSeptemberAmount();
//				break;
//			case 10:
//				residenceTax = dto.getOctoberAmount ();
//				break;
//			case 11:
//				residenceTax = dto.getNovemberAmount();
//				break;
//			case 12:
//				residenceTax = dto.getDecemberAmount();
//				break;
//			case 1:
//				residenceTax = dto.getJanuaryAmount ();
//				break;
//			case 2:
//				residenceTax = dto.getFebruaryAmount();
//				break;
//			case 3:
//				residenceTax = dto.getMarchAmount   ();
//				break;
//			case 4:
//				residenceTax = dto.getAprilAmount   ();
//				break;
//			case 5:
//				residenceTax = dto.getMayAmount     ();
//				break;
//			default:
//				residenceTax = 0;
//		}
//		udPaymentDto.setResidenceTax(residenceTax);
//	}

	/**
	 * 所得税設定
	 * @throws IllegalAccessException 
	 * @throws SQLException 
	 */
	public void setIncomeTax() throws SQLException, IllegalAccessException {
//		// 人事給与情報(所得税)取得
//		CmIncomeTaxDao cmIncomeTaxDao = new CmIncomeTaxDao();
//		cmIncomeTaxDao.initDao(cfg, cmd, aspUser, user, conn);
//		CmIncomeTaxDto dto = cmIncomeTaxDao.findForEmployeeDate(kCode, targetMonth);
//		// 人事給与情報(所得税)が存在しない場合は0を設定
//		if (dto == null) {
//			// 所得税額計算及び設定
//			udPaymentDto.setIncomeTax(0);
//			// 扶養等の数設定
//			udPaymentDto.setDependentCount(0);
//			return;
//		}
//		// 扶養等の数取得
//		int dependent = dto.getDependentCount();
//		// 課税区分取得
//		String incomeTaxType = dto.getIncomeTaxType();
//		// 社会保険料等控除後の給与等の金額取得
//		int taxation = udPaymentDto.getAmountToTaxation();
//		// 所得税額計算及び設定
//		udPaymentDto.setIncomeTax(
//				LegalUtility.calcIncomeTax(incomeTaxType, taxation, dependent));
//		// 扶養等の数設定
//		udPaymentDto.setDependentCount(dependent);
	}
	
	/**
	 * 所得税設定(賞与)
	 * @throws Exception 
	 */
	public void setBonusIncomeTax() throws Exception {
//		// 人事給与情報(所得税)取得
//		CmIncomeTaxDao cmIncomeTaxDao = new CmIncomeTaxDao();
//		cmIncomeTaxDao.initDao(cfg, cmd, aspUser, user, conn);
//		// 給与情報取得準備
//		PhPaymentDao udPaymentDao = new PhPaymentDao();
//		udPaymentDao.initDao(cfg, cmd, aspUser, user, conn);
//		// 給与支払間隔取得(翌月払いなら1)
//		String interval = getConfValue(UnicConst.CONF_ID_PAY_ITBL, UnicConst.CONF_CD_ADJUST_PAY);
//		// 対象年月の前月の日付を取得
//		befTargetMonth = addMonth(targetMonth, -1 - Integer.parseInt(interval));
//		CmIncomeTaxDto dto = cmIncomeTaxDao.findForEmployeeDate(kCode, befTargetMonth);
//		// 人事給与情報(所得税)が存在しない場合は0を設定
//		if (dto == null) {
//			// 所得税額計算及び設定
//			udBonusDto.setIncomeTax(0);
//			// 扶養等の数設定
//			udBonusDto.setDependentCount(0);
//			return;
//		}
//		// 扶養等の数取得
//		int dependent = dto.getDependentCount();
//		// 課税区分取得
//		String incomeTaxType = dto.getIncomeTaxType();
//		udPaymentDto = udPaymentDao.findForUpdate(kCode, befTargetMonth);
//		// 社会保険料等控除後の給与等の金額取得
//		int payTaxation = udPaymentDto != null ? udPaymentDto.getAllowanceTotal() - udPaymentDto.calcSocialInsurance() : 0;
//		// 課税対象額(賞与)
//		int bonusTaxation = udBonusDto.calcBonusAllowanceTotal() - udBonusDto.calcBonusSocialInsurance();
//		// 税率取得用配列取得
//		double[] aryIncomeTax = LegalUtility.getBonIncomeTaxArray(incomeTaxType, dependent);
//		// 所得税率設定
//		udBonusDto.setIncomeRate((float)LegalUtility.getBonusIncomeRate(aryIncomeTax, payTaxation));
//		
//		// 所得税額計算及び設定
//		udBonusDto.setIncomeTax(
//				LegalUtility.calcBonusIncomeTax(incomeTaxType, payTaxation, bonusTaxation, dependent));
//		// 扶養等の数設定
//		udBonusDto.setDependentCount(dependent);
//		// 前月の給与等の金額設定
//		udBonusDto.setLastMonthTaxation(payTaxation);
	}
	
//	/**
//	 * 銀行振分
//	 * @param total         差引支給額
//	 * @param allowanceType 支給区分(1：給与、2：賞与)
//	 * @throws SQLException
//	 * @throws IllegalAccessException
//	 * @throws NoSuchFieldException
//	 */
//	protected void divideAmongAccounts(
//			int total, String allowanceType
//	) throws SQLException, IllegalAccessException, NoSuchFieldException {
//		// 初期化
//		bank1Amount = 0;
//		bank2Amount = 0;
//		cashAmount  = 0;
//		// DAO準備
//		CmPaymentMeansDao dao = new CmPaymentMeansDao();
//		dao.initDao(cfg, cmd, aspUser, user, conn);
//		// 支給方法情報取得(支給方法連番順)
//		List<CmPaymentMeansDto> list;
//		list = dao.findForEmployeeAllowance(kCode, allowanceType);
//		// 支給情報毎の処理
//		int currentAmount = total;
//		for (Iterator<CmPaymentMeansDto> it = list.iterator(); it.hasNext();) {
//			CmPaymentMeansDto dto = it.next();
//			// 振分金額取得
//			int amount = getdividedAmount(dto, total, currentAmount);
//			// 振分金額設定
//			if (dto.getPaymentMeans().equals(UnicConst.PAYMENT_MEANS_ACCOUNT)) {
//				// 振込の場合
//				if (dto.getMeansSequence() == UnicConst.PAYMENT_MEANS_SEQ_1
//						|| dto.getMeansSequence() == UnicConst.PAYMENT_MEANS_SEQ_3) {
//					bank1Amount += amount;
//				} else {
//					bank2Amount += amount;
//				}
//			} else {
//				// 振込以外(現金)の場合
//				cashAmount += amount;
//			}
//			// 残額計算
//			currentAmount -= amount;
//		}
//		// 残額を現金に設定
//		cashAmount += currentAmount;
//	}
//	
//	/**
//	 * 振分支給額取得
//	 * @param dto           支給方法DTO
//	 * @param totalAmount   振分総額
//	 * @param currentAmount 振分元金額(残額)
//	 */
//	private int getdividedAmount(
//			CmPaymentMeansDto dto, int totalAmount, int currentAmount
//	) {
//		// 支給情報が設定されていない場合
//		if (dto == null) {
//			return 0;
//		}
//		// 全額の場合
//		if (dto.getAmountType().equals(UnicConst.AMOUNT_TYPE_ALL)) {
//			return currentAmount;
//		}
//		// 残額の場合
//		if (dto.getAmountType().equals(UnicConst.AMOUNT_TYPE_REST)) {
//			return currentAmount;
//		}
//		// 振分支給額
//		int dividingAmount = 0;
//		// 金額区分毎の処理
//		if (dto.getAmountType().equals(UnicConst.AMOUNT_TYPE_AMOUNT)) {
//			// 定額の場合
//			dividingAmount = dto.getFixedAmount();
//		} else if (dto.getAmountType().equals(UnicConst.AMOUNT_TYPE_RATIO)) {
//			// 定率の場合
//			// 振分総額 * 振分率 / 100
//			dividingAmount = (int)round(
//					dto.getFixedAmount() / 100 * totalAmount,
//					0, BigDecimal.ROUND_HALF_UP);
//		}
//		// 振分元金額以上の場合
//		if (dividingAmount > currentAmount) {
//			dividingAmount = currentAmount;
//		}
//		return dividingAmount;
//	}
	
	/**
	 * 給与支払部の明細設定を取得する。<br>
	 * @return 明細設定
	 * @throws SQLException
	 * @throws IllegalAccessException
	 * @throws NoSuchFieldException
	 */
	protected Map<String, DetailPaDto> getMapDetail_Pa(
	) throws SQLException, IllegalAccessException, NoSuchFieldException {
		List<DetailPaDto> listDetailALL_Pa;
		DetailPaDto dto;
		// 明細設定取得
		if (mapDetailALL_Pa == null) {
			mapDetailALL_Pa = new HashMap<String, DetailPaDto>();
			PmDetailPaDao pmDetailPaDao = new PmDetailPaDao(cfg, cmd, aspUser, user, conn);
			listDetailALL_Pa = pmDetailPaDao.findAll();
			for(int i = 0; i < listDetailALL_Pa.size() ; i++){
				dto = listDetailALL_Pa.get(i);
				mapDetailALL_Pa.put(dto.getDetailCode(), dto);
			}
		}
		return mapDetailALL_Pa;
	}
	
	/**
	 * 給与控除部の明細設定を取得する。<br>
	 * @return 明細設定
	 * @throws SQLException
	 * @throws IllegalAccessException
	 * @throws NoSuchFieldException
	 */
	protected Map<String, DetailPdDto> getMapDetail_Pd(
	) throws SQLException, IllegalAccessException, NoSuchFieldException {
		List<DetailPdDto> listDetailALL_Pd;
		DetailPdDto dto;
		// 明細設定取得
		if (mapDetailALL_Pd == null) {
			mapDetailALL_Pd = new HashMap<String, DetailPdDto>();
			PmDetailPdDao pmDetailPdDao = new PmDetailPdDao(cfg, cmd, aspUser, user, conn);
			listDetailALL_Pd = pmDetailPdDao.findAll();
			for(int i = 0; i < listDetailALL_Pd.size() ; i++){
				dto = listDetailALL_Pd.get(i);
				mapDetailALL_Pd.put(dto.getDetailCode(), dto);
			}
		}
		return mapDetailALL_Pd;
	}
	
	/**
	 * 給与合計部の明細設定を取得する。<br>
	 * @return 明細設定
	 * @throws SQLException
	 * @throws IllegalAccessException
	 * @throws NoSuchFieldException
	 */
	protected Map<String , DetailMoneyDto> getMapDetail_Ps(
	) throws SQLException, IllegalAccessException, NoSuchFieldException {
		// 明細設定取得
		if (mapDetailALL_Ps == null) {
			PmDetailPsDao pmDetailPsDao = new PmDetailPsDao(cfg, cmd, aspUser, user, conn);
			List<DetailMoneyDto> listDetailAll_Ps = pmDetailPsDao.findAll();
			mapDetailALL_Ps = new HashMap<String, DetailMoneyDto>();
			for(int i = 0; i < listDetailAll_Ps.size(); i++){
				DetailMoneyDto dto = listDetailAll_Ps.get(i);
				mapDetailALL_Ps.put(dto.getDetailCode(), dto);
			}
		}
	    return mapDetailALL_Ps;
	}

	/**
	 * 給与勤怠部の明細設定を取得する。<br>
	 * @return 明細設定
	 * @throws SQLException
	 * @throws IllegalAccessException
	 * @throws NoSuchFieldException
	 */
	protected Map<String , DetailTimeDto> getMapDetail_Pt(
	) throws SQLException, IllegalAccessException, NoSuchFieldException {
		// 明細設定取得
		if (mapDetailALL_Pt == null) {
			PmDetailPtDao pmDetailPtDao = new PmDetailPtDao(cfg, cmd, aspUser, user, conn);
			List<DetailTimeDto> listDetailAll_Pt = pmDetailPtDao.findAll();
			mapDetailALL_Pt = new HashMap<String, DetailTimeDto>();
			for(int i = 0; i < listDetailAll_Pt.size(); i++){
				DetailTimeDto dto = listDetailAll_Pt.get(i);
				mapDetailALL_Pt.put(dto.getDetailCode(), dto);
			}
		}
	    return mapDetailALL_Pt;
	}


	/**
	 * 賞与支払部の明細設定を取得する。<br>
	 * @return 明細設定
	 * @throws SQLException
	 * @throws IllegalAccessException
	 * @throws NoSuchFieldException
	 */
	protected Map<String, PmDetailBaDto> getMapDetail_Ba(
	) throws SQLException, IllegalAccessException, NoSuchFieldException {
		List<PmDetailBaDto> listDetailALL_Ba;
		// 明細設定取得
		if (mapDetailALL_Ba == null) {
			mapDetailALL_Ba = new HashMap<String, PmDetailBaDto>();
			PmDetailBaDao pmDetailBaDao = new PmDetailBaDao(cfg, cmd, aspUser, user, conn);
			listDetailALL_Ba = pmDetailBaDao.findAll();
			for(int i = 0; i < listDetailALL_Ba.size() ; i++){
				PmDetailBaDto dto = listDetailALL_Ba.get(i);
				mapDetailALL_Ba.put(dto.getDetailCode(), dto);
			}
		}
		return mapDetailALL_Ba;
	}
	
	/**
	 * 賞与控除部の明細設定を取得する。<br>
	 * @return 明細設定
	 * @throws SQLException
	 * @throws IllegalAccessException
	 * @throws NoSuchFieldException
	 */
	protected Map<String, PmDetailBdDto> getMapDetail_Bd(
	) throws SQLException, IllegalAccessException, NoSuchFieldException {
		List<PmDetailBdDto> listDetailALL_Bd;
		// 明細設定取得
		if (mapDetailALL_Bd == null) {
			mapDetailALL_Bd = new HashMap<String, PmDetailBdDto>();
			PmDetailBdDao pmDetailBdDao = new PmDetailBdDao(cfg, cmd, aspUser, user, conn);
			listDetailALL_Bd = pmDetailBdDao.findAll();
			for(int i = 0; i < listDetailALL_Bd.size() ; i++){
				PmDetailBdDto dto = listDetailALL_Bd.get(i);
				mapDetailALL_Bd.put(dto.getDetailCode(), dto);
			}
		}
		return mapDetailALL_Bd;
	}

	
	/**
	 * 賞与合計部の明細設定を取得する。<br>
	 * @return 明細設定
	 * @throws SQLException
	 * @throws IllegalAccessException
	 * @throws NoSuchFieldException
	 */
	protected Map<String, PmDetailBsDto> getMapDetail_Bs(
	) throws SQLException, IllegalAccessException, NoSuchFieldException {
		List<PmDetailBsDto> listDetailALL_Bs;
		// 明細設定取得
		if (mapDetailALL_Bs == null) {
			mapDetailALL_Bs = new HashMap<String, PmDetailBsDto>();
			PmDetailBsDao pmDetailBsDao = new PmDetailBsDao(cfg, cmd, aspUser, user, conn);
			listDetailALL_Bs = pmDetailBsDao.findAll();
			for(int i = 0; i < listDetailALL_Bs.size() ; i++){
				PmDetailBsDto dto = listDetailALL_Bs.get(i);
				mapDetailALL_Bs.put(dto.getDetailCode(), dto);
			}
		}
		return mapDetailALL_Bs;
	}
	
	//	/**
//	 * 計算式設定を取得する。<br>
//	 * @return 計算式設定
//	 * @throws SQLException
//	 * @throws IllegalAccessException
//	 * @throws NoSuchFieldException
//	 */
//	protected Map<String, CsExpressionDto> getMapExpress(
//	) throws SQLException, IllegalAccessException, NoSuchFieldException {
//		// 計算式設定取得
//		if (mapExpressAll == null) {
//			CsExpressionDao csExpressionDao = new CsExpressionDao();
//			csExpressionDao.initDao(cfg, cmd, aspUser, user, conn);
//			mapExpressAll = csExpressionDao.findAllAsMap();
//		}
//		// 明細設定キー文字列
//		String key = udPaymentDto.getEmploymentType() + PayrollConst.KEY_SEPARATOR;
//		// キー+職位コードで明細設定を取得
//		Map<String, CsExpressionDto> mapExpress =
//				mapExpressAll.get(key + udPaymentDto.getPositionCode());
//		// キー+職位コードで明細設定が見つからない場合
//		if (mapExpress == null) {
//			// キー+設定なし文字列で明細設定を取得
//			mapExpress = mapExpressAll.get(key + PayrollConst.SETTING_NONE);
//		}
//		return mapExpress;
//	}
//
//	/**
//	 * 計算式による明細項目計算。<br>
//	 * @throws NoSuchFieldException 
//	 * @throws IllegalAccessException 
//	 * @throws SQLException 
//	 * @throws MospException 
//	 *
//	 */
//	private void calcExpression(
//	) throws SQLException, IllegalAccessException, NoSuchFieldException, MospException {
//		// 計算式ユーティリティー確認
//		if (!hasMospExpressJar()) {
//			return;
//		}
//		// 計算式設定取得
//		Map<String, CsExpressionDto> mapExpress = getMapExpress();
//		if (mapExpress == null) {
//			return;
//		}
//		// テーブル設定取得(未実装のため仮)
//		Map<String, String[][]> mapTable = new HashMap<String, String[][]>();
//		// パラメータ準備
//		Map<String, String> mapParam = new HashMap<String, String>();
//		mapParam.put(PayrollConst.DTL_PAY_ATTENDANCE_01, String.valueOf(attendanceMonthlyDto.getPresence         ()));	// 給与・勤怠01(KN01)
//		mapParam.put(PayrollConst.DTL_PAY_ATTENDANCE_02, String.valueOf(attendanceMonthlyDto.getWorkOnHoliday    ()));	// 給与・勤怠02(KN02)
//		mapParam.put(PayrollConst.DTL_PAY_ATTENDANCE_03, String.valueOf(attendanceMonthlyDto.getParticularHoliday()));	// 給与・勤怠03(KN03)
//		mapParam.put(PayrollConst.DTL_PAY_ATTENDANCE_04, String.valueOf(attendanceMonthlyDto.getPaidHoliday      ()));	// 給与・勤怠04(KN04)
//		mapParam.put(PayrollConst.DTL_PAY_ATTENDANCE_05, String.valueOf(attendanceMonthlyDto.getAbsence          ()));	// 給与・勤怠05(KN05)
//		mapParam.put(PayrollConst.DTL_PAY_ATTENDANCE_06, String.valueOf(attendanceMonthlyDto.getPaidHolidayRest  ()));	// 給与・勤怠06(KN06)
//		mapParam.put(PayrollConst.DTL_PAY_ATTENDANCE_07, String.valueOf(attendanceMonthlyDto.getPaymentHours     ()));	// 給与・勤怠07(KN07)
//		mapParam.put(PayrollConst.DTL_PAY_ATTENDANCE_08, String.valueOf(attendanceMonthlyDto.getArriveLate       ()));	// 給与・勤怠08(KN08)
//		mapParam.put(PayrollConst.DTL_PAY_ATTENDANCE_09, String.valueOf(attendanceMonthlyDto.getEffortTime       ()));	// 給与・勤怠09(KN09)
//		mapParam.put(PayrollConst.DTL_PAY_ATTENDANCE_10, String.valueOf(attendanceMonthlyDto.getLateNight        ()));	// 給与・勤怠10(KN10)
//		mapParam.put(PayrollConst.DTL_PAY_ATTENDANCE_11, String.valueOf(attendanceMonthlyDto.getOverLate         ()));	// 給与・勤怠12(KN12)
//		mapParam.put(PayrollConst.DTL_PAY_ATTENDANCE_12, String.valueOf(attendanceMonthlyDto.getHolidayTime      ()));	// 給与・勤怠11(KN11)
//		mapParam.put(PayrollConst.DTL_PAY_ATTENDANCE_13, String.valueOf(attendanceMonthlyDto.getAttendance_13    ()));	// 給与・勤怠13(KN13)
//		mapParam.put(PayrollConst.DTL_PAY_ATTENDANCE_14, String.valueOf(attendanceMonthlyDto.getAttendance_14    ()));	// 給与・勤怠14(KN14)
//		mapParam.put(PayrollConst.DTL_PAY_ALLOWANCE_01 , String.valueOf(attendanceMonthlyDto.getBasicSalary      ()));	// 給与・支給01(KS01)
//		mapParam.put(PayrollConst.DTL_PAY_ALLOWANCE_02 , String.valueOf(attendanceMonthlyDto.getAbility1Allowance()));	// 給与・支給02(KS02)
//		mapParam.put(PayrollConst.DTL_PAY_ALLOWANCE_03 , String.valueOf(attendanceMonthlyDto.getAbility2Allowance()));	// 給与・支給03(KS03)
//		mapParam.put(PayrollConst.DTL_PAY_ALLOWANCE_04 , String.valueOf(attendanceMonthlyDto.getFamilyAllowance  ()));	// 給与・支給04(KS04)
//		mapParam.put(PayrollConst.DTL_PAY_ALLOWANCE_05 , String.valueOf(attendanceMonthlyDto.getAllowance_05     ()));	// 給与・支給05(KS05)
//		mapParam.put(PayrollConst.DTL_PAY_ALLOWANCE_06 , String.valueOf(attendanceMonthlyDto.getAllowance_06     ()));	// 給与・支給06(KS06)
//		mapParam.put(PayrollConst.DTL_PAY_ALLOWANCE_07 , String.valueOf(attendanceMonthlyDto.getCutForMissing    ()));	// 給与・支給07(KS07)
//		mapParam.put(PayrollConst.DTL_PAY_ALLOWANCE_08 , String.valueOf(attendanceMonthlyDto.getCutForShort      ()));	// 給与・支給08(KS08)
//		mapParam.put(PayrollConst.DTL_PAY_ALLOWANCE_09 , String.valueOf(attendanceMonthlyDto.getAllowance_09     ()));	// 給与・支給09(KS09)
//		mapParam.put(PayrollConst.DTL_PAY_ALLOWANCE_10 , String.valueOf(attendanceMonthlyDto.getAllowance_10     ()));	// 給与・支給10(KS10)
//		mapParam.put(PayrollConst.DTL_PAY_ALLOWANCE_11 , String.valueOf(attendanceMonthlyDto.getAllowance_11     ()));	// 給与・支給11(KS11)
//		mapParam.put(PayrollConst.DTL_PAY_ALLOWANCE_12 , String.valueOf(attendanceMonthlyDto.getAllowance_12     ()));	// 給与・支給12(KS12)
//		mapParam.put(PayrollConst.DTL_PAY_ALLOWANCE_13 , String.valueOf(attendanceMonthlyDto.getAllowance_13     ()));	// 給与・支給13(KS13)
//		mapParam.put(PayrollConst.DTL_PAY_ALLOWANCE_14 , String.valueOf(attendanceMonthlyDto.getDateAllowance    ()));	// 給与・支給14(KS14)
//		mapParam.put(PayrollConst.DTL_PAY_ALLOWANCE_15 , String.valueOf(attendanceMonthlyDto.getAllowance_15     ()));	// 給与・支給15(KS15)
//		mapParam.put(PayrollConst.DTL_PAY_ALLOWANCE_16 , String.valueOf(attendanceMonthlyDto.getAllowance_16     ()));	// 給与・支給16(KS16)
//		mapParam.put(PayrollConst.DTL_PAY_ALLOWANCE_17 , String.valueOf(attendanceMonthlyDto.getAllowance_17     ()));	// 給与・支給17(KS17)
//		mapParam.put(PayrollConst.DTL_PAY_ALLOWANCE_18 , String.valueOf(attendanceMonthlyDto.getCommutation      ()));	// 給与・支給18(KS18)
//		mapParam.put(PayrollConst.DTL_PAY_ALLOWANCE_19 , String.valueOf(attendanceMonthlyDto.getOvertimeAllowance()));	// 給与・支給19(KS19)
//		mapParam.put(PayrollConst.DTL_PAY_ALLOWANCE_20 , String.valueOf(attendanceMonthlyDto.getCutFromBasic     ()));	// 給与・支給20(KS20)
//		mapParam.put(PayrollConst.DTL_PAY_DEDUCTION_08 , String.valueOf(attendanceMonthlyDto.getDeduction_08     ()));	// 給与・控除08(KK08)
//		mapParam.put(PayrollConst.DTL_PAY_DEDUCTION_09 , String.valueOf(attendanceMonthlyDto.getDeduction_09     ()));	// 給与・控除09(KK09)
//		mapParam.put(PayrollConst.DTL_PAY_DEDUCTION_10 , String.valueOf(attendanceMonthlyDto.getDeduction_10     ()));	// 給与・控除10(KK10)
//		mapParam.put(PayrollConst.DTL_PAY_DEDUCTION_11 , String.valueOf(attendanceMonthlyDto.getDeduction_11     ()));	// 給与・控除11(KK11)
//		mapParam.put(PayrollConst.DTL_PAY_DEDUCTION_12 , String.valueOf(attendanceMonthlyDto.getDeduction_12     ()));	// 給与・控除12(KK12)
//		mapParam.put(PayrollConst.DTL_PAY_DEDUCTION_13 , String.valueOf(attendanceMonthlyDto.getDeduction_13     ()));	// 給与・控除13(KK13)
//		mapParam.put(PayrollConst.DTL_PAY_DEDUCTION_14 , String.valueOf(attendanceMonthlyDto.getDeduction_14     ()));	// 給与・控除14(KK14)
//		mapParam.put(PayrollConst.DTL_PAY_DEDUCTION_15 , String.valueOf(attendanceMonthlyDto.getDeduction_15     ()));	// 給与・控除15(KK15)
//		mapParam.put(PayrollConst.DTL_PAY_DEDUCTION_16 , String.valueOf(attendanceMonthlyDto.getDeduction_16     ()));	// 給与・控除16(KK16)
//		mapParam.put(PayrollConst.DTL_PAY_DEDUCTION_17 , String.valueOf(attendanceMonthlyDto.getDeduction_17     ()));	// 給与・控除17(KK17)
//		mapParam.put(PayrollConst.DTL_PAY_DEDUCTION_18 , String.valueOf(attendanceMonthlyDto.getDeduction_18     ()));	// 給与・控除17(KK18)
//		mapParam.put(PayrollConst.DTL_PAY_DEDUCTION_19 , String.valueOf(attendanceMonthlyDto.getDeduction_19     ()));	// 給与・控除19(KK19)
//		mapParam.put(PayrollConst.DTL_PAY_DEDUCTION_20 , String.valueOf(attendanceMonthlyDto.getDeduction_20     ()));	// 給与・控除20(KK20)
//		// 計算対象明細準備
//		String[] target = {
//			PayrollConst.DTL_PAY_ALLOWANCE_05 ,
//			PayrollConst.DTL_PAY_ALLOWANCE_06 ,
//			PayrollConst.DTL_PAY_ALLOWANCE_09 ,
//			PayrollConst.DTL_PAY_ALLOWANCE_10 ,
//			PayrollConst.DTL_PAY_ALLOWANCE_11 ,
//			PayrollConst.DTL_PAY_ALLOWANCE_12 ,
//			PayrollConst.DTL_PAY_ALLOWANCE_13 ,
//			PayrollConst.DTL_PAY_ALLOWANCE_15 ,
//			PayrollConst.DTL_PAY_ALLOWANCE_16 ,
//			PayrollConst.DTL_PAY_ALLOWANCE_17 ,
//			PayrollConst.DTL_PAY_DEDUCTION_08 ,
//			PayrollConst.DTL_PAY_DEDUCTION_09 ,
//			PayrollConst.DTL_PAY_DEDUCTION_10 ,
//			PayrollConst.DTL_PAY_DEDUCTION_11 ,
//			PayrollConst.DTL_PAY_DEDUCTION_12 ,
//			PayrollConst.DTL_PAY_DEDUCTION_13 ,
//			PayrollConst.DTL_PAY_DEDUCTION_14 ,
//			PayrollConst.DTL_PAY_DEDUCTION_15 ,
//			PayrollConst.DTL_PAY_DEDUCTION_16 ,
//			PayrollConst.DTL_PAY_DEDUCTION_17 ,
//			PayrollConst.DTL_PAY_DEDUCTION_18 ,
//			PayrollConst.DTL_PAY_DEDUCTION_19 ,
//			PayrollConst.DTL_PAY_DEDUCTION_20
//		};
//		// 計算式設定項目毎に計算
//		for (int i = 0; i < target.length; i++) {
//			// DTO取得
//			CsExpressionDto dto = mapExpress.get(target[i]);
//			// DTO存在確認
//			if (dto == null) {
//				continue;
//			}
//			// 計算式存在確認
//			String expression = dto.getExpression();
//			if (expression == null || expression.equals("")) {
//				continue;
//			}
//			// 計算
//			int answer = 0;
//			try {
//				answer = (int)round(jp.mosp.express.ExpressUtility.calculate(
//						expression, mapParam, mapTable), 0, BigDecimal.ROUND_HALF_UP);
//			} catch (MospException e) {
//				addErrMessage(e.getExMessage());
//				throw e;
//			}
//			// 計算結果の適用
//			if (target[i].equals(PayrollConst.DTL_PAY_ALLOWANCE_05)) {
//				attendanceMonthlyDto.setAllowance_05(answer);
//			} else if (target[i].equals(PayrollConst.DTL_PAY_ALLOWANCE_06)) {
//				attendanceMonthlyDto.setAllowance_06(answer);
//			} else if (target[i].equals(PayrollConst.DTL_PAY_ALLOWANCE_09)) {
//				attendanceMonthlyDto.setAllowance_09(answer);
//			} else if (target[i].equals(PayrollConst.DTL_PAY_ALLOWANCE_10)) {
//				attendanceMonthlyDto.setAllowance_10(answer);
//			} else if (target[i].equals(PayrollConst.DTL_PAY_ALLOWANCE_11)) {
//				attendanceMonthlyDto.setAllowance_11(answer);
//			} else if (target[i].equals(PayrollConst.DTL_PAY_ALLOWANCE_12)) {
//				attendanceMonthlyDto.setAllowance_12(answer);
//			} else if (target[i].equals(PayrollConst.DTL_PAY_ALLOWANCE_13)) {
//				attendanceMonthlyDto.setAllowance_13(answer);
//			} else if (target[i].equals(PayrollConst.DTL_PAY_ALLOWANCE_15)) {
//				attendanceMonthlyDto.setAllowance_15(answer);
//			} else if (target[i].equals(PayrollConst.DTL_PAY_ALLOWANCE_16)) {
//				attendanceMonthlyDto.setAllowance_16(answer);
//			} else if (target[i].equals(PayrollConst.DTL_PAY_ALLOWANCE_17)) {
//				attendanceMonthlyDto.setAllowance_17(answer);
//			} else if (target[i].equals(PayrollConst.DTL_PAY_DEDUCTION_08)) {
//				attendanceMonthlyDto.setDeduction_08(answer);
//			} else if (target[i].equals(PayrollConst.DTL_PAY_DEDUCTION_09)) {
//				attendanceMonthlyDto.setDeduction_09(answer);
//			} else if (target[i].equals(PayrollConst.DTL_PAY_DEDUCTION_10)) {
//				attendanceMonthlyDto.setDeduction_10(answer);
//			} else if (target[i].equals(PayrollConst.DTL_PAY_DEDUCTION_11)) {
//				attendanceMonthlyDto.setDeduction_11(answer);
//			} else if (target[i].equals(PayrollConst.DTL_PAY_DEDUCTION_12)) {
//				attendanceMonthlyDto.setDeduction_12(answer);
//			} else if (target[i].equals(PayrollConst.DTL_PAY_DEDUCTION_13)) {
//				attendanceMonthlyDto.setDeduction_13(answer);
//			} else if (target[i].equals(PayrollConst.DTL_PAY_DEDUCTION_14)) {
//				attendanceMonthlyDto.setDeduction_14(answer);
//			} else if (target[i].equals(PayrollConst.DTL_PAY_DEDUCTION_15)) {
//				attendanceMonthlyDto.setDeduction_15(answer);
//			} else if (target[i].equals(PayrollConst.DTL_PAY_DEDUCTION_16)) {
//				attendanceMonthlyDto.setDeduction_16(answer);
//			} else if (target[i].equals(PayrollConst.DTL_PAY_DEDUCTION_17)) {
//				attendanceMonthlyDto.setDeduction_17(answer);
//			} else if (target[i].equals(PayrollConst.DTL_PAY_DEDUCTION_18)) {
//				attendanceMonthlyDto.setDeduction_18(answer);
//			} else if (target[i].equals(PayrollConst.DTL_PAY_DEDUCTION_19)) {
//				attendanceMonthlyDto.setDeduction_19(answer);
//			} else if (target[i].equals(PayrollConst.DTL_PAY_DEDUCTION_20)) {
//				attendanceMonthlyDto.setDeduction_20(answer);
//			}
//		}
//	}
//	
//	
//
////----------------
//	
//	
//	/**
//	 * 法定控除計算(社会保険料及び税金の設定)(賞与)
//	 * @throws Exception
//	 */
//	protected void calcBonusLegalDeduction() throws Exception {
//		// 明細設定による金額計算(非課税額及び社会保険非対象額)
//		// 社会保険対象額設定
//		// 社会保険料設定
//		setBonusSocialInsurance();
//		// 所得税設定
//		setBonusIncomeTax();
//		// 住民税設定は行わない
//		// 確定項目初期化
//		udBonusDto.setAllowanceTotal(0);
//		udBonusDto.setDeductionTotal(0);
//		udBonusDto.setPaymentTotal  (0);
//		udBonusDto.setBank1PayAmount(0);
//		udBonusDto.setBank2PayAmount(0);
//		udBonusDto.setCashPayAmount (0);
//		// ステータス設定(税金計算済み)
//		udBonusDto.setCalcStatus(PayrollConst.CALC_STATUS_TAX);
//	}
//	
//	/**
//	 * 社会保険料設定(賞与)
//	 * @throws NoSuchFieldException 
//	 */
//	private void setBonusSocialInsurance() throws SQLException, IllegalAccessException, NoSuchFieldException {
//		int basisHealth   = 0;	// 健康保険計算基準額
//		int basisNursing  = 0;	// 介護保険計算基準額
//		int basisPension  = 0;	// 厚生年金計算基準額
//		//int basisFund     = 0;	// 厚生年金基金計算基準額
//		int basisUnemploy = 0;	// 雇用保険計算基準額
//		
//		int health   = 0;	// 健康保険料
//		int nursing  = 0;	// 介護保険料
//		int pension  = 0;	// 厚生年金料
//		//int fund     = 0;	// 厚生年金基金料
//		int unemploy = 0;	// 雇用保険料
//		
//		// 総支給額を取得(1000円未満切り捨て)
//		int bonusAllowance = (int)round(udBonusDto.calcBonusAllowanceTotal(), - 3, BigDecimal.ROUND_HALF_DOWN); 
//		// 年度累計総支給額(今回の支給を含まない)
//		int totalBonusAmount = (int)round(calcAmountToYearTotal(), - 3, BigDecimal.ROUND_HALF_DOWN);
//		// 対象月支給額取得
//		int targetMonthBonusAmount = (int)round(calcTargetMonthBonusAmount(), - 3, BigDecimal.ROUND_HALF_DOWN);
//		
//		// 人事給与情報(保険)取得
//		CmSocInsuranceDao dao = new CmSocInsuranceDao();
//		dao.initDao(cfg, cmd, aspUser, user, conn);
//		CmSocInsuranceDto dto = dao.findForEmployee(kCode, targetMonth);
//		// 人事給与情報(保険)確認
//		if (dto == null) {
//			// 社会保険料設定
//			udBonusDto.setHealthInsurance  (health  );
//			udBonusDto.setNursingInsurance (nursing );
//			udBonusDto.setPensionInsurance (pension );
//			udBonusDto.setEmployeeInsurance(unemploy);
//			// 年度累計額設定
//			udBonusDto.setTotalYearBonus(totalBonusAmount);
//			return;
//		}
//		// 健康保険計算基準額取得
//		basisHealth   = LegalUtility.getBasisHealthPayment(totalBonusAmount, targetMonthBonusAmount);
//		// 介護保険計算基準額取得
//		basisNursing  =  LegalUtility.getBasisNursingPayment(totalBonusAmount, targetMonthBonusAmount);
//		// 厚生年金計算基準額取得
//		basisPension  =  LegalUtility.getBasisPensionPayment(targetMonthBonusAmount);
///*		// 厚生年金基金計算基準額取得
//		basisFund     =  LegalUtility.getBasisFundPayment(targetMonthBonusAmount);
//*/		// 雇用保険計算基準額取得
//		basisUnemploy =  LegalUtility.getBasisUnemployPayment(bonusAllowance);
//		// 雇保対象基準額設定
//		udBonusDto.setEmpInsBasic(basisUnemploy * 1000);
//		// 社会保険料計算
//		if (dto.getCalcInsType().equals(LegalConst.CALC_INS)) {
//			// 健康保険計算対象確認
//			if (dto.getHealthLostType().equals("") &&
//					dto.getBonusHealthType().equals(LegalConst.BONUS_HEALTH_CALC)) {
//				// 健康保険料計算
//				health = LegalUtility.calcPremium(basisHealth,
//						ratioHealthPremium, BigDecimal.ROUND_HALF_UP);
//				// 介護保険料計算(介護保険区分「対象」「対象(自動)(第２号被保険者のみ)」の場合)
//				if(chkCalcNursingInsType(dto.getNursingInsType())) {
//					nursing = LegalUtility.calcPremium(basisNursing,
//							ratioNursingPremium, BigDecimal.ROUND_HALF_UP);
//				}
//			}
//			// 厚生年金料計算(厚年賞与区分が「計算する」の場合)
//			if(dto.getPensionLostType().equals("") &&
//					dto.getBonusPensionType().equals(LegalConst.BONUS_PENSION_CALC)) {
//				pension = LegalUtility.calcPremium(basisPension,
//						ratioPensionPremium, BigDecimal.ROUND_HALF_UP);
//				/*
//				// 厚生年金基金料計算(厚生年金基金加入区分が「加入」の場合)
//				if (fundParticipation.equals(LegalConst.FUND_PARTICIPATION_ON)) {
//					fund = LegalUtility.calcPremium(basisFund,
//							ratioFundPremium, BigDecimal.ROUND_HALF_UP);
//				}
//				*/
//			}
//		}
//		// 雇用保険料計算(雇用保険区分が「計算する」の場合)
//		if (dto.getUnemployLostType().equals("") &&
//				dto.getCalcUnemployType().equals(LegalConst.CALC_UNEMPLOY)) {
//			unemploy = LegalUtility.calcPremium(
//					basisUnemploy,
//					ratioUnemployPremium, BigDecimal.ROUND_HALF_DOWN);
//		}
//		// 対象月に複数支給されている場合は以前の保険料を差し引いて金額を設定
//		if (0 < befSocInsPremium) {
//			health   -= befHealthPremium  ;
//			nursing  -= befNursingPremium ;
//			pension  -= befPensionPremium ;
//		//	fund     -= befFundPremium    ;
//		}
//		// 社会保険料設定
//		udBonusDto.setHealthInsurance  (health  );
//		udBonusDto.setNursingInsurance (nursing );
//		udBonusDto.setPensionInsurance (pension );
//		udBonusDto.setEmployeeInsurance(unemploy);
//		// 年度累計額設定
//		udBonusDto.setTotalYearBonus(totalBonusAmount);
//	}
//
//	/**
//	 * 年度累計賞与額取得
//	 * @param vo
//	 * @return 年度累計賞与額取得
//	 * @throws SQLException
//	 * @throws IllegalAccessException
//	 * @throws NoSuchFieldException
//	 */
//	public int calcAmountToYearTotal() throws SQLException, IllegalAccessException {
//		int allBonusAllowance = 0;
//		List <UdBonusDto> listBonusDto;
//		UdBonusDao dao = new UdBonusDao();
//		dao.initDao(cfg, cmd, aspUser, user, conn);
//		// 検索準備
//		Date startDate;
//		Date endDate;
//		Calendar cal = Calendar.getInstance();
//		// 対象年月設定
//		cal.setTime(targetMonth);
//		// 年度 = 対象年4月1日〜翌年3月最終日
//		// 検索対象開始日取得
//		cal.set(Calendar.MONTH, Calendar.APRIL);
//		cal.set(Calendar.DATE, 1);
//		startDate = cal.getTime();
//		// 検索対象最終日取得
//		cal.set(Calendar.MONTH, Calendar.MARCH);
//		cal.set(Calendar.DATE, cal.getMaximum(Calendar.DATE));
//		cal.add(Calendar.YEAR, 1);
//		endDate = cal.getTime();
//		// 今年度総支給額取得
//		listBonusDto = dao.selectTheYear(kCode,startDate, endDate);
//		if (listBonusDto.size() != 0) {
//			for (int i = 0; i < listBonusDto.size(); i ++) {
//				UdBonusDto udBonusDto = listBonusDto.get(i);
//				// 今回支給分は追加しない。
//				if (udBonusDto.getPayday().compareTo(this.udBonusDto.getPayday()) != 0) {
//					// 今回の支給日より以降は追加しない
//					if (udBonusDto.getPayday().compareTo(this.udBonusDto.getPayday()) < 0) {
//						// 今までの総支給額を取得
//						allBonusAllowance += udBonusDto.getAllowanceTotal();
//					}
//				}
//			}
//		}
//		return allBonusAllowance;
//	}
//	
//	/**
//	 * 対象月支給額取得
//	 * @return 対象月総支給額
//	 * @throws SQLException
//	 * @throws IllegalAccessException
//	 * @throws NoSuchFieldException 
//	 * @throws NoSuchFieldException
//	 */
//	public int calcTargetMonthBonusAmount() throws SQLException, IllegalAccessException, NoSuchFieldException {
//		int targetMonthBonusAmount = 0;
//		List <UdBonusDto> listBonusDto;
//		UdBonusDao dao = new UdBonusDao();
//		dao.initDao(cfg, cmd, aspUser, user, conn);
//		// 今年度総支給額取得
//		listBonusDto = dao.findForCalcDate(targetMonth, kCode);
//		if (listBonusDto.size() != 0) {
//			for (int i = 0; i < listBonusDto.size(); i ++) {
//				UdBonusDto udBonusDto = listBonusDto.get(i);
//				// 対象年月日以前の社会保険料取得
//				if (this.udBonusDto.getPayday().compareTo(udBonusDto.getPayday()) > 0) {
//					befHealthPremium   = udBonusDto.getHealthInsurance  ();
//					befNursingPremium  = udBonusDto.getNursingInsurance ();
//					befPensionPremium  = udBonusDto.getPensionInsurance ();
//					// 社会保険料合計(比較用)
//					befSocInsPremium   = befHealthPremium + befNursingPremium + befPensionPremium + befFundPremium;
//				}
//				// 対象年月の総支給額を設定
//				targetMonthBonusAmount += udBonusDto.calcBonusAllowanceTotal();
//			}
//		}
//		return targetMonthBonusAmount;
//	}
//	
//	/**
//	 * 給与ヘッダ項目設定
//	 */
//	protected String[][] getPaymentCalcDetailItem() {
//		ArrayList<String> listItem = new ArrayList<String>();
//		listItem.add(PayrollConst.DTL_PAY_ALLOWANCE_03  );
//		listItem.add(PayrollConst.DTL_PAY_ALLOWANCE_05  );
//		listItem.add(PayrollConst.DTL_PAY_ALLOWANCE_06  );
//		listItem.add(PayrollConst.DTL_PAY_ALLOWANCE_09  );
//		listItem.add(PayrollConst.DTL_PAY_ALLOWANCE_10  );
//		listItem.add(PayrollConst.DTL_PAY_ALLOWANCE_11  );
//		listItem.add(PayrollConst.DTL_PAY_ALLOWANCE_12  );
//		listItem.add(PayrollConst.DTL_PAY_ALLOWANCE_13  );
//		listItem.add(PayrollConst.DTL_PAY_ALLOWANCE_15  );
//		listItem.add(PayrollConst.DTL_PAY_ALLOWANCE_16  );
//		listItem.add(PayrollConst.DTL_PAY_ALLOWANCE_17  );
//		String[][] aryItem = new String[listItem.size()][2];
//		for (int i = 0; i < listItem.size(); i++) {
//			aryItem[i][0] = String.valueOf(i);
//			aryItem[i][1] = listItem.get(i);
//		}
//		return aryItem;
//	}
//	
//	/**
//	 * 賞与ヘッダ項目設定
//	 */
//	protected String[][] getBonusCalcDetailItem() {
//		ArrayList<String> listItem = new ArrayList<String>();
//		listItem.add(PayrollConst.UP_BONUS_ALLOWANCE_01);
//		listItem.add(PayrollConst.UP_BONUS_ALLOWANCE_02);
//		listItem.add(PayrollConst.UP_BONUS_ALLOWANCE_03);
//		listItem.add(PayrollConst.UP_BONUS_ALLOWANCE_04);
//		listItem.add(PayrollConst.UP_BONUS_ALLOWANCE_05);
//		listItem.add(PayrollConst.UP_BONUS_ALLOWANCE_06);
//		listItem.add(PayrollConst.UP_BONUS_ALLOWANCE_07);
//		listItem.add(PayrollConst.UP_BONUS_ALLOWANCE_08);
//		listItem.add(PayrollConst.UP_BONUS_ALLOWANCE_09);
//		listItem.add(PayrollConst.UP_BONUS_ALLOWANCE_10);
//		listItem.add(PayrollConst.UP_BONUS_ALLOWANCE_11);
//		listItem.add(PayrollConst.UP_BONUS_ALLOWANCE_12);
//		listItem.add(PayrollConst.UP_BONUS_ALLOWANCE_13);
//		listItem.add(PayrollConst.UP_BONUS_ALLOWANCE_14);
//		listItem.add(PayrollConst.UP_BONUS_ALLOWANCE_15);
//		listItem.add(PayrollConst.UP_BONUS_ALLOWANCE_16);
//		listItem.add(PayrollConst.UP_BONUS_ALLOWANCE_17);
//		listItem.add(PayrollConst.UP_BONUS_ALLOWANCE_18);
//		listItem.add(PayrollConst.UP_BONUS_ALLOWANCE_19);
//		listItem.add(PayrollConst.UP_BONUS_ALLOWANCE_20);
//		String[][] aryItem = new String[listItem.size()][2];
//		for (int i = 0; i < listItem.size(); i++) {
//			aryItem[i][0] = String.valueOf(i);
//			aryItem[i][1] = listItem.get(i);
//		}
//		return aryItem;
//	}
///*	
	/**
	 * 給与情報、支払基礎日数取得
	 * @param targetKCode
	 * @param targetMonth
	 * @throws NoSuchFieldException 
	 * @throws IllegalAccessException 
	 * @throws SQLException 
	 * @throws MospException 
	 */
	public void calcPayBasicDate(String targetKCode, Date targetMonth) throws SQLException, IllegalAccessException, NoSuchFieldException, MospException {
		cdSocInsuranceDto	= new CdSocInsuranceDto();

		//取得用旧控除年月を未来日に設定
		Calendar tmpCal = Calendar.getInstance();
		tmpCal.set(2099, 12, 31,0,0,0);
		oldHealthDate = oldNursingDate = oldoldPensionDate =	oldFundDate = oldSocInsDate = tmpCal.getTime();
		
		oldHealthPremium  = 0; // 旧給与健康保険料
		oldNursingPremium = 0; // 旧給与介護保険料
		oldPensionPremium = 0; // 旧給与厚生年金保険料
		oldFundPremium    = 0; // 旧給与厚生年金基金保険料
		oldSocInsPremium  = 0; // 旧給与社会保険金額

		// 対象年月より以前の日付を取得
		int beforeYear4  = 0;   //befor 4 month
		int beforeMonth4 = 0;
		int beforeYear3  = 0;   //befor 3 month
		int beforeMonth3 = 0;
		int beforeYear2  = 0;   //befor 2 month
		int beforeMonth2 = 0;
		int beforeYear1  = 0;   //befor 1 month
		int beforeMonth1 = 0;
		
		//６月
		beforeYear1 = MospUtility.getYear(targetMonth);
		beforeMonth1 = MospUtility.getMonth(targetMonth) - 1;
		if (beforeMonth1 == 0) {
			beforeMonth1 = 12;
			beforeYear1 = MospUtility.getYear(targetMonth) - 1;
		}
		//５月
		beforeYear2 = beforeYear1;
		beforeMonth2 = beforeMonth1 - 1;
		if (beforeMonth2 == 0) {
			beforeMonth2 = 12;
			beforeYear2 = beforeYear1 - 1;
		}
		//４月
		beforeYear3 = beforeYear2;
		beforeMonth3 = beforeMonth2 - 1;
		if (beforeMonth3 == 0) {
			beforeMonth3 = 12;
			beforeYear3 = beforeYear2 - 1;
		}
		//３月
		beforeYear4 = beforeYear3;
		beforeMonth4 = beforeMonth3 - 1;	
		if (beforeMonth4 == 0) {
			beforeMonth4 = 12;	
			beforeYear4 = beforeYear3 - 1;
		}
		
		// 支払基礎日数(月)設定
		cdSocInsuranceDto.setPayBasicMonth1(beforeMonth1);
		cdSocInsuranceDto.setPayBasicMonth2(beforeMonth2);
		cdSocInsuranceDto.setPayBasicMonth3(beforeMonth3);
		
		// 昇（降）給前月給与情報取得
		oldPremium = getMonthlyPaymentData(targetKCode, beforeYear4, beforeMonth4);
		
		// 固定賃金取得
		getBefFixedWage(targetKCode, beforeYear4, beforeMonth4);

		int payment1 = getMonthlyPaymentData(targetKCode, beforeYear1, beforeMonth1);
		// 支払基礎日数取得
		int payBasicDate1 = getPaymentBaiscDay(targetKCode, beforeYear1, beforeMonth1);
		// 支払基礎日数取得
		int payment2 = getMonthlyPaymentData(targetKCode, beforeYear2, beforeMonth2);
		// 支払基礎日数取得
		int payBasicDate2 = getPaymentBaiscDay(targetKCode, beforeYear2, beforeMonth2);
		// 支払基礎日数取得
		int payment3 = getMonthlyPaymentData(targetKCode, beforeYear3, beforeMonth3);
		// 支払基礎日数取得
		int payBasicDate3 = getPaymentBaiscDay(targetKCode, beforeYear3, beforeMonth3);
		// 固定賃金取得
		getNowFixedWage(targetKCode, beforeYear3, beforeMonth3);

		// 中途入社
		CmMidwayEnterDao cmMidwayEnterDao = new CmMidwayEnterDao();
		cmMidwayEnterDao.initDao(cfg, cmd, aspUser, user, conn);
		CmMidwayEnterDto cmMidwayEnterDto ;
		
		// 計算対象社員確認
		cmMidwayEnterDto = cmMidwayEnterDao.findForKey(targetKCode);
		if (cmMidwayEnterDto != null) {
			// 途中入社は対象としない
			if (cmMidwayEnterDto.getMidwayType().equals("1")) {
				if (MospUtility.getYear(DatePart.convIntegerDateToDate(mKihonDto.getNyDate())) == beforeYear1
						&&  MospUtility.getMonth(DatePart.convIntegerDateToDate(mKihonDto.getNyDate())) == beforeMonth1){
					payment1 = 0;
					payBasicDate1 = 0;
				}
				if (MospUtility.getYear(DatePart.convIntegerDateToDate(mKihonDto.getNyDate())) == beforeYear2
						&&  MospUtility.getMonth(DatePart.convIntegerDateToDate(mKihonDto.getNyDate())) == beforeMonth2){
							payment2 = 0;
							payBasicDate2 = 0;
				}
				if (MospUtility.getYear(DatePart.convIntegerDateToDate(mKihonDto.getNyDate())) == beforeYear3
						&& MospUtility.getMonth(DatePart.convIntegerDateToDate(mKihonDto.getNyDate())) == beforeMonth3){
							payment2 = 0;
							payBasicDate2 = 0;
				}
			}
		}
		
		// 昇降給情報取得
		if (befkotei != nowkotei) {
			// 固定賃金に差額が生じたら
			cdSocInsuranceDto.setRaiseDownSalaryBasis(befkotei - nowkotei);
			Calendar cal1 = Calendar.getInstance();
			cal1.set(beforeYear4, beforeMonth4 - 1, PayrollConst.TIME_DEFAULT_DAY,0,0,0);
			Date payBasicDate4 = cal1.getTime();
			cdSocInsuranceDto.setRaiseDownSalaryDate(payBasicDate4);
		}
		
		
		cdSocInsuranceDto.setPayAmount1(payment1);
		cdSocInsuranceDto.setPayBasicDay1(payBasicDate1);
		cdSocInsuranceDto.setPayAmount2(payment2);
		cdSocInsuranceDto.setPayBasicDay2(payBasicDate2);
		cdSocInsuranceDto.setPayAmount3(payment3);
		cdSocInsuranceDto.setPayBasicDay3(payBasicDate3);

	
	
		cdSocInsuranceDto.setRewardTotal1(payment1);	// 報酬合計1
		cdSocInsuranceDto.setRewardTotal2(payment2);	// 報酬合計2
		cdSocInsuranceDto.setRewardTotal3(payment3);	// 報酬合計3

		cdSocInsuranceDto.setHealthBefPremium(oldHealthPremium);    // 健保従前保険料
		cdSocInsuranceDto.setPensionBefPremium(oldPensionPremium);  // 厚年従前保険料
	}

	/**
	 * 比較前月固定賃金取得
	 * @throws NoSuchFieldException 
	 * @throws IllegalAccessException 
	 * @throws SQLException 
	 * @throws SQLException
	 * @throws NoSuchFieldException
	 * @throws IllegalAccessException
	 */
	public void getBefFixedWage(String targetKCode, int targetYear, int targetMonth) throws SQLException, IllegalAccessException, NoSuchFieldException {
		Date paymentDate;
		phSocInsPayment = new PhPaymentDto();
		Calendar cal1 = Calendar.getInstance();
		cal1.set(targetYear, targetMonth - 1, PayrollConst.TIME_DEFAULT_DAY,0,0,0);
		paymentDate = cal1.getTime();
		PhPaymentDao PhPaymentDao = new PhPaymentDao(cfg, cmd, aspUser, user, conn);
		phSocInsPayment = PhPaymentDao.findForKey(targetKCode, paymentDate);
		pdPayAllowanceDao = new PdPayAllowanceDao(cfg, cmd, aspUser, user, conn);

		List<DetailMoneyDto> list = pdPayAllowanceDao.find(targetKCode, paymentDate);

		for (int i = 0; i < list.size(); i++) {
			befhikotei += list.get(i).getAmount();
		}		
	}
	
	/**
	 * 比較当月固定賃金取得
	 * @throws SQLException
	 * @throws NoSuchFieldException
	 * @throws IllegalAccessException
	 */
	public void getNowFixedWage(String targetKCode, int targetYear, int targetMonth) {
		// 明細設定テーブルから取得
//		UsDetailDao dao = new UsDetailDao();
//		dao.initDao(cfg, cmd, aspUser, user, conn);
//		List<DetailMoneyDto> list = dao.findForEmployeeAll(mKihonDto.getEmploymentType());
//
//	
//		nowkotei   = phSocInsPayment != null ? phSocInsPayment.getBasicSalary() : 0;
//		nowhikotei = phSocInsPayment != null ? phSocInsPayment.getOvertimeAllowance() : 0;
//		for (int i = 0; i < list.size(); i++) {
//			if (list.get(i).getSocInsObjectType().equals(LegalConst.SOC_INS_OBJECT_TAX) &&
//					list.get(i).getDetailCode().equals(PayrollConst.DTL_PAY_ATTENDANCE_13)) {
//				nowhikotei += phSocInsPayment.getAttendance_13();
//				continue;
//			} else if (list.get(i).getSocInsObjectType().equals(LegalConst.SOC_INS_OBJECT_TAX) &&
//					list.get(i).getDetailCode().equals(PayrollConst.DTL_PAY_ATTENDANCE_14)) {
//				nowhikotei += phSocInsPayment.getAttendance_14();
//				continue;
//			}
//		}
		
	}
	
	/**
	 * 報酬月額取得
	 * @param targetKCode　対象社員
	 * @param targetYear　対象年
	 * @param targetMonth　対象月
	 * @return　報酬月額
	 * @throws SQLException
	 * @throws IllegalAccessException
	 * @throws NoSuchFieldException
	 * @throws MospException
	 */
	
	public int getMonthlyPaymentData(String targetKCode, int targetYear, int targetMonth) throws SQLException, IllegalAccessException, NoSuchFieldException, MospException {
		Date paymentDate;
		phSocInsPayment = new PhPaymentDto();
		Calendar cal1 = Calendar.getInstance();
		cal1.set(targetYear, targetMonth - 1, PayrollConst.TIME_DEFAULT_DAY,0,0,0);
		paymentDate = cal1.getTime();
		PhPaymentDao PhPaymentDao = new PhPaymentDao(cfg, cmd, aspUser, user, conn);
		phSocInsPayment = PhPaymentDao.findForKey(targetKCode, paymentDate);
		pdPayAllowanceDao = new PdPayAllowanceDao(cfg, cmd, aspUser, user, conn);
		pdPayDeductionDao = new PdPayDeductionDao(cfg, cmd, aspUser, user, conn);
		DetailMoneyDto pdPayAllowanceDto = 
			pdPayAllowanceDao.find_detailCode(targetKCode, paymentDate, PayrollConst.DTL_COMMUTATION);

		int Commutation = 0; // 通勤手当
		if(null != pdPayAllowanceDto){
			Commutation = pdPayAllowanceDto.getAmount();
		}

		int payment = 0;
		if (phSocInsPayment != null) {
			// 総支給額 - 通勤費
			payment = phSocInsPayment.getAllowanceTotal() - Commutation;
		} else {
			// 給与情報取得エラー
			String errMessage = MospUtility.getMessage(msg, "WU1121", targetYear + "," + targetMonth);
			addErrMessage(errMessage);
			throw new MospException(MospConst.EX_PARAMS_INVALID);

		}

		//旧給与健康保険料
		DetailMoneyDto detailDeductionDto = 
		pdPayDeductionDao.find_detailCode(targetKCode, paymentDate, PayrollConst.DTL_HEALTH_INS);
		if(null != detailDeductionDto){
			if(paymentDate.before(oldHealthDate)){
				oldHealthDate    = paymentDate;
				oldHealthPremium = detailDeductionDto.getAmount();
			}
		}

		//旧給与介護保険料
		detailDeductionDto = 
		pdPayDeductionDao.find_detailCode(targetKCode, paymentDate, PayrollConst.DTL_NURSING_INS);
		if(null != detailDeductionDto){
			if(paymentDate.before(oldNursingDate)){
				oldNursingDate    = paymentDate;
				oldNursingPremium = detailDeductionDto.getAmount();
			}
		}
		
		//旧給与厚生年金保険料
		detailDeductionDto = 
		pdPayDeductionDao.find_detailCode(targetKCode, paymentDate, PayrollConst.DTL_PENSION_INS);
		if(null != detailDeductionDto){
			if(paymentDate.before(oldoldPensionDate)){
				oldoldPensionDate = paymentDate;
				oldPensionPremium = detailDeductionDto.getAmount();
			}
		}
		
		//旧給与厚生年金基金保険料
		detailDeductionDto = 
		pdPayDeductionDao.find_detailCode(targetKCode, paymentDate, PayrollConst.DTL_PENSION_FUND);
		if(null != detailDeductionDto){
			if(paymentDate.before(oldFundDate)){
				oldFundDate = paymentDate;
				oldFundPremium = detailDeductionDto.getAmount();
			}
		}
		
		//旧給与社会保険金額
		detailDeductionDto = 
		pdPayDeductionDao.find_detailCode(targetKCode, paymentDate, PayrollConst.DTL_PENSION_FUND);
		if(null != detailDeductionDto){
			if(paymentDate.before(oldSocInsDate)){
				oldSocInsDate = paymentDate;
				oldSocInsPremium = detailDeductionDto.getAmount();
			}
		}
		return payment;
	}
	
	/**
	 * 支払基礎日数取得
	 * @param targetYear　対象年
	 * @param targetMonth　対象月
	 * @return
	 * @throws IllegalAccessException 
	 * @throws NoSuchFieldException 
	 * @throws SQLException 
	 */
	public int getPaymentBaiscDay(String targetKCode, int Year, int Month) throws SQLException, NoSuchFieldException, IllegalAccessException {
		int payBasicDate;
		DetailTimeDto detailTimeDto; 
		Date paymentDate;
		Calendar cal1 = Calendar.getInstance();
		cal1.set(Year, Month, PayrollConst.TIME_DEFAULT_DAY,0,0,0);
		paymentDate = cal1.getTime();
		PdPayTimeDao pdPayTimeDao = new PdPayTimeDao(cfg, cmd, aspUser, user, conn);
		
		//月給者は基礎日数
		if (mKihonDto.getKyKubun().equals(PayrollConst.PAYMENT_MONTH)) {
			detailTimeDto = 
				pdPayTimeDao.find_detailCode(targetKCode, paymentDate, PayrollConst.DTL_PAY_TIME_12); // 欠勤日数取得
			float tmp_kekkin = 0;
			if(null != detailTimeDto ){
				tmp_kekkin = detailTimeDto.getAmount();
			}
			payBasicDate = calPayBasicDate(Year, Month);                 //支払基礎日数
			//日給月給は基礎日数−欠勤日数
			payBasicDate -= tmp_kekkin;
		} else if (mKihonDto.getKyKubun().equals(PayrollConst.PAYMENT_HOUR)) {
			detailTimeDto = 
				pdPayTimeDao.find_detailCode(targetKCode, paymentDate, PayrollConst.DTL_PAY_TIME_01); // 出勤日数取得
			//時給者は出勤日数になる
			payBasicDate = 0;
			if(null != detailTimeDto ){
				payBasicDate = (int)detailTimeDto.getAmount();
			}
		} else {
			detailTimeDto = 
				pdPayTimeDao.find_detailCode(targetKCode, paymentDate, PayrollConst.DTL_PAY_TIME_12); // 欠勤日数取得
			int tmp_kekkin = 0;
			if(null != detailTimeDto ){
				tmp_kekkin = (int)detailTimeDto.getAmount();
			}
			payBasicDate = calPayBasicDate(Year, Month);                 //支払基礎日数
			//日給月給は基礎日数−欠勤日数
			payBasicDate -= tmp_kekkin;

			detailTimeDto = 
				pdPayTimeDao.find_detailCode(targetKCode, paymentDate, PayrollConst.DTL_PAY_TIME_09); // 有休日数取得
			int tmp_yukyu = 0;
			if(null != detailTimeDto ){
				tmp_yukyu = (int)detailTimeDto.getAmount();
			}
			//日給者は出勤日数＋有給休暇になる
			payBasicDate += tmp_yukyu;
		}
		return payBasicDate;
	}
	
	/**
	 * 支払基礎日数取得
	 * @param yy　対象年
	 * @param mm　対象月
	 * @param dd　対象日
	 * @return
	 */
	public int calPayBasicDate(int Year, int Month) {
		//支払基礎日数
		int retInt = 0;
		Date date = getLastDateOfMonth(	String.valueOf(Year), String.valueOf(Month)
				);
		// 暦の最終日を取得
		retInt = MospUtility.getDay(date);
		return retInt;
	}
	
	/**
	 * 標準報酬月額取得
	 * @param targetKCode　対象社員
	 * @param targetMonth　対象年月
	 * @throws SQLException　
	 * @throws IllegalAccessException
	 * @throws NoSuchFieldException 
	 */
	public void getStandardPayment(String targetKCode, Date targetMonth) throws SQLException, IllegalAccessException, NoSuchFieldException {
		// 標準報酬月額を取得する
		int wdiv = 0;
		int whosyu = 0;
		int wHealth_payment  = 0;	//健康保険標準報酬月額
		int sPension_payment = 0;	//厚生年金標準報酬月額
		if (mKihonDto.getPtKubun().equals("1")) {	//正社員
			if (cdSocInsuranceDto.getPayBasicDay1() >= 17) {wdiv += 1; whosyu += (cdSocInsuranceDto.getPayAmount1() + cdSocInsuranceDto.getGoodsAmount1());}
			if (cdSocInsuranceDto.getPayBasicDay2() >= 17) {wdiv += 1; whosyu += (cdSocInsuranceDto.getPayAmount2() + cdSocInsuranceDto.getGoodsAmount2());}	
			if (cdSocInsuranceDto.getPayBasicDay3() >= 17) {wdiv += 1; whosyu += (cdSocInsuranceDto.getPayAmount3() + cdSocInsuranceDto.getGoodsAmount3());}
			// 全てが17日未満。
			if (cdSocInsuranceDto.getPayBasicDay1() < 17 && cdSocInsuranceDto.getPayBasicDay2() < 17 && cdSocInsuranceDto.getPayBasicDay3() < 17) {
				if (cdSocInsuranceDto.getPayBasicDay1() >= 15) {wdiv += 1; whosyu += (cdSocInsuranceDto.getPayAmount1() + cdSocInsuranceDto.getGoodsAmount1());}
				if (cdSocInsuranceDto.getPayBasicDay1() >= 15) {wdiv += 1; whosyu += (cdSocInsuranceDto.getPayAmount2() + cdSocInsuranceDto.getGoodsAmount2());}
				if (cdSocInsuranceDto.getPayBasicDay3() >= 15) {wdiv += 1; whosyu += (cdSocInsuranceDto.getPayAmount3() + cdSocInsuranceDto.getGoodsAmount3());}
			}
		}else{	//パート
			//正社員と同じ値を仮設定
			if (cdSocInsuranceDto.getPayBasicDay1() >= 17) {wdiv += 1; whosyu += (cdSocInsuranceDto.getPayAmount1() + cdSocInsuranceDto.getGoodsAmount1());}
			if (cdSocInsuranceDto.getPayBasicDay2() >= 17) {wdiv += 1; whosyu += (cdSocInsuranceDto.getPayAmount2() + cdSocInsuranceDto.getGoodsAmount2());}	
			if (cdSocInsuranceDto.getPayBasicDay3() >= 17) {wdiv += 1; whosyu += (cdSocInsuranceDto.getPayAmount3() + cdSocInsuranceDto.getGoodsAmount3());}
			// 全てが17日未満。
			if (cdSocInsuranceDto.getPayBasicDay1() < 17 && cdSocInsuranceDto.getPayBasicDay2() < 17 && cdSocInsuranceDto.getPayBasicDay3() < 17) {
				if (cdSocInsuranceDto.getPayBasicDay1() >= 15) {wdiv += 1; whosyu += (cdSocInsuranceDto.getPayAmount1() + cdSocInsuranceDto.getGoodsAmount1());}
				if (cdSocInsuranceDto.getPayBasicDay1() >= 15) {wdiv += 1; whosyu += (cdSocInsuranceDto.getPayAmount2() + cdSocInsuranceDto.getGoodsAmount2());}
				if (cdSocInsuranceDto.getPayBasicDay3() >= 15) {wdiv += 1; whosyu += (cdSocInsuranceDto.getPayAmount3() + cdSocInsuranceDto.getGoodsAmount3());}
			}
		}

		int average;
		if (wdiv > 0) {
			average  = whosyu / wdiv;
		} else  {
			average		= 0;
		}
		cdSocInsuranceDto.setAverageThreeMonths(average);
		cdSocInsuranceDto.setRewardTotalSum( whosyu );

		// 旧標準報酬月額取得
		CmSocInsuranceDao cmSocInsuranceDao = new CmSocInsuranceDao();
		cmSocInsuranceDao.initDao(cfg, cmd, aspUser, user, conn);
		CmSocInsuranceDto cmSocInsuranceDto = cmSocInsuranceDao.findForEmployee(targetKCode);
		if( null !=  cmSocInsuranceDto ){
			wHealth_payment  = 	cmSocInsuranceDto.getHealthPayment() * 1000; //健康保険標準報酬月額
			sPension_payment = 	cmSocInsuranceDto.getPensionPayment()* 1000; //厚生年金標準報酬月額
		}

		//旧健保の等級、標準月額報酬取得
		for (int i = 0; i < aryStandardPayment.length; i++) {
			if (wHealth_payment < aryPaymentUnder[i] ) {
				cdSocInsuranceDto.setHealthBefGrade(arySocInsGrade[i]);
				cdSocInsuranceDto.setHealthBefPremium(aryStandardPayment[i]);
				break;
			}
		}

		//旧厚年の等級、標準月額報酬取得
		for (int i = 0; i < aryStandardPayment.length; i++) {
			if (sPension_payment < aryPaymentUnder[i] ) {
				if (arySocInsGrade[i] - 4 < 0) {
					cdSocInsuranceDto.setPensionBefGrade(arySocInsGrade[i]);
				} else {
					cdSocInsuranceDto.setPensionBefGrade(arySocInsGrade[i] - 4);
				}
				cdSocInsuranceDto.setPensionBefPremium(aryStandardPayment[i]);
				break;
			}
		}
		
		// 新等級、標準報酬月額取得
		for (int i = 0; i < aryPaymentOver.length; i++) {
			if (average < aryPaymentUnder[i]) {
				cdSocInsuranceDto.setHealthDecGrade(arySocInsGrade[i]);
				cdSocInsuranceDto.setHealthDecPremium(aryStandardPayment[i]);
				if (arySocInsGrade[i] - 4 < 0) {
					cdSocInsuranceDto.setPensionDecGrade(arySocInsGrade[i]);
				} else {
					cdSocInsuranceDto.setPensionDecGrade(arySocInsGrade[i] - 4);
				}
				cdSocInsuranceDto.setPensionDecPremium(aryStandardPayment[i]);
				break;
			}
		}
	}

	/**
	 * 月変、除外判断
	 */
//	public void calcJudgment() {
//		// 従前、決定の等級差を取得
//		int kenposa = cdSocInsuranceDto.getHealthDecGrade() - cdSocInsuranceDto.getHealthBefGrade();
//		int konensa = cdSocInsuranceDto.getPensionDecGrade() - cdSocInsuranceDto.getPensionBefGrade();
//		//	手引き内のパターン1
//		if (nowkotei != befkotei && befkotei != 0) {                   //固定賃金変動有り
//			if (nowkotei > befkotei) {                                      //固定賃金↑
//				if (nowhikotei >= befhikotei) {                                //非固定賃金↑
//					// 支払基礎日数
//					if (cdSocInsuranceDto.getPayBasicDay1() >= 17
//							&& cdSocInsuranceDto.getPayBasicDay2() >= 17
//							&& cdSocInsuranceDto.getPayBasicDay3() >= 17)	{     //基礎日数
//						if (kenposa >= 2 || konensa >= 2) {                      //等級
//							cdSocInsuranceDto.setCalcResult(2); //月変
//						}
//					}
//				}
//			}
//		}
//		//	手引き内のパターン2
//		if (nowkotei != befkotei && befkotei != 0) {                   //固定賃金変動有り
//			if  (nowkotei > befkotei) {                                      //固定賃金↑
//				if  (nowhikotei < befhikotei) {                                 //非固定賃金↓
//					// 支払基礎日数
//					if (cdSocInsuranceDto.getPayBasicDay1() >= 17
//							&& cdSocInsuranceDto.getPayBasicDay2() >= 17
//							&& cdSocInsuranceDto.getPayBasicDay3() >= 17) {     //基礎日数
//						if (kenposa >= 2 || konensa >= 2) {                      //等級
//							cdSocInsuranceDto.setCalcResult(2); //月変
//						}
//					}
//				}
//			}
//		}
//		//	手引き内のパターン3
//		if (nowkotei != befkotei && befkotei != 0) {                   //固定賃金変動有り
//			if (nowkotei < befkotei) {                                      //固定賃金↓
//				if (nowhikotei < befhikotei) {                                 //非固定賃金↓
//					// 支払基礎日数
//					if (cdSocInsuranceDto.getPayBasicDay1() >= 17
//							&& cdSocInsuranceDto.getPayBasicDay2() >= 17
//							&& cdSocInsuranceDto.getPayBasicDay3() >= 17) {     //基礎日数
//						if (kenposa <= -2 || konensa <= -2) {                    //等級
//							cdSocInsuranceDto.setCalcResult(2); //月変
//						}
//					}
//				}
//			}
//		}
//		//	手引き内のパターン4
//		if (nowkotei != befkotei && befkotei != 0) {                   //固定賃金変動有り
//			if (nowkotei < befkotei) {                                      //固定賃金↓
//				if (nowhikotei >= befhikotei) {                                //非固定賃金↑
//					// 支払基礎日数
//					if (cdSocInsuranceDto.getPayBasicDay1() >= 17
//							&& cdSocInsuranceDto.getPayBasicDay2() >= 17
//							&& cdSocInsuranceDto.getPayBasicDay3() >= 17) {     //基礎日数
//						if (kenposa <= -2 || konensa <= -2) {                    //等級
//							cdSocInsuranceDto.setCalcResult(2); //月変
//						}
//					}
//				}
//			}
//		}
//		//	手引き内のパターン(特別な場合)
//		if (nowkotei != befkotei && befkotei != 0) {                                      //固定賃金
//			// 支払基礎日数
//			if (cdSocInsuranceDto.getPayBasicDay1() >= 17
//					&& cdSocInsuranceDto.getPayBasicDay2() >= 17
//					&& cdSocInsuranceDto.getPayBasicDay3() >= 17) {      //基礎日数
//				if (cdSocInsuranceDto.getHealthBefGrade() == 46 && cdSocInsuranceDto.getHealthDecGrade() == 47  ) {	//等級
//					cdSocInsuranceDto.setCalcResult(2); //月変
//				}
//				if (cdSocInsuranceDto.getHealthBefGrade() == 1  && cdSocInsuranceDto.getHealthDecGrade() == 2   ) {	//等級
//					cdSocInsuranceDto.setCalcResult(2); //月変
//				}
//				if (cdSocInsuranceDto.getHealthBefGrade() == 47 && cdSocInsuranceDto.getHealthDecGrade() == 46  ) {	//等級
//					cdSocInsuranceDto.setCalcResult(2); //月変
//				}
//				if (cdSocInsuranceDto.getHealthBefGrade() == 2  && cdSocInsuranceDto.getHealthDecGrade() == 1   ) {	//等級
//					cdSocInsuranceDto.setCalcResult(2); //月変
//				}
//				if (cdSocInsuranceDto.getPensionBefGrade() == 29 && cdSocInsuranceDto.getPensionDecGrade() == 30) {	//等級
//					cdSocInsuranceDto.setCalcResult(2); //月変
//				}
//				if (cdSocInsuranceDto.getPensionBefGrade() == 1  && cdSocInsuranceDto.getPensionDecGrade() == 2 ) {	//等級
//					cdSocInsuranceDto.setCalcResult(2); //月変
//				}
//				if (cdSocInsuranceDto.getPensionBefGrade() == 30 && cdSocInsuranceDto.getPensionDecGrade() == 29) {	//等級
//					cdSocInsuranceDto.setCalcResult(2); //月変
//				}
//				if (cdSocInsuranceDto.getPensionBefGrade() == 2  && cdSocInsuranceDto.getPensionDecGrade() == 1 ) {	//等級
//					cdSocInsuranceDto.setCalcResult(2);	//月変
//				}
//			}
//		}
//		// 除外のままなら情報初期化
//		if (cdSocInsuranceDto.getCalcResult() == 0) {
//			// データ初期化
//			setInitCalcData();
//		}
//	}
//	
//	/**
//	 * 適用年月取得
//	 * @param targetMonth　対象年月
//	 */
//	//適用年月
//	public void  getExpectedDate(Date targetMonth) {
//		// 算定
//		if (cdSocInsuranceDto.getCalcResult() == 1) {
//			Calendar cal1 = Calendar.getInstance();
//			cal1.set(MospUtility.getYear(targetMonth), 9 - 1, PayrollConst.TIME_DEFAULT_DAY,0,0,0);
//			cdSocInsuranceDto.setExpectedDate(cal1.getTime());
//		}
//		// 月変
//		if (cdSocInsuranceDto.getCalcResult() == 2) {
//			int month = MospUtility.getMonth(targetMonth);
//			int year  = MospUtility.getYear(targetMonth);
//			if (month <= 6) {
//				month = 8;
//			} else {
//				month = 8;
//				year -= 1; 
//			}
//			Calendar cal1 = Calendar.getInstance();
//			cal1.set(year, month - 1, PayrollConst.TIME_DEFAULT_DAY,0,0,0);
//			cdSocInsuranceDto.setExpectedDate(cal1.getTime());
//		}
//	}
//	
//	/**
//	 * 社会保険情報初期化
//	 */
//	public void setInitCalcData () {
//		// 計算除外者なら全て空に
//		cdSocInsuranceDto = new cdSocInsuranceDto();
//		cdSocInsuranceDto.setCalcResult(0);
//		Calendar cal1 = Calendar.getInstance();
//		cal1.set(1901,0,1,0,0,0);
//		cdSocInsuranceDto.setExpectedDate(cal1.getTime());
//		cdSocInsuranceDto.setRaiseDownSalaryDate(cal1.getTime());
//	}
	
	public boolean checkBonusCount(String targetKCode, String year) throws SQLException, IllegalAccessException, NoSuchFieldException, MospException {
		// 年開始日取得
		startDateOfYear = getStartDateOfYear(Integer.parseInt(year));
		// 年最終日取得
		lastDateOfYear = getLastDateOfYear(Integer.parseInt(year));
		// 社員コード取得
		kCode = targetKCode;
		
		// DAO準備
		PhBounsDao dao = new PhBounsDao(cfg, cmd, aspUser, user, conn);
		// 対象年の賞与データを取得
		List<PhBounsDto> list = dao.findForPaydayOfYear(kCode, startDateOfYear, lastDateOfYear);
		
		// 対象年のデータが4回以上なら賞与登録にはならない
		if (PayrollConst.UPPER_BONUS_REGIST  <= list.size()) {
			// データ作成対象外の場合はエラー
			String errMessage = MospUtility.getMessage(msg, PayrollConst.MSG_EXC_REG_BONUS, year + PayrollConst.KEY_SEPARATOR + kCode);
			addErrMessage(errMessage);
			return false;
		}
		return true;
	}

	/**
	 * 年開始日取得
	 * @param year 年
	 * @return 年最終日
	 */
	protected Date getStartDateOfYear(int year) {
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, year);
		cal.set(Calendar.MONTH, 0);
		cal.set(Calendar.DAY_OF_MONTH, 1);
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		return cal.getTime();
	}
	
	/**
	 * 年最終日取得
	 * @param year 年
	 * @return 年最終日
	 */
	protected Date getLastDateOfYear(int year) {
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, year + 1);
		cal.set(Calendar.MONTH, 0);
		cal.set(Calendar.DAY_OF_MONTH, 1);
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		cal.add(Calendar.DAY_OF_MONTH, -1);
		return cal.getTime();
	}
	
	/**
	 * 月初日取得
	 * @param year  取得対象年
	 * @param month 取得対象月
	 * @return 月初日
	 */
	protected Date getFirstDateOfMonth(String year, String month) {
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, Integer.parseInt(year));
		cal.set(Calendar.MONTH, Integer.parseInt(month) - 1);
		cal.set(Calendar.DAY_OF_MONTH, 1);
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		return cal.getTime();
	}

	/**
	 * 月操作
	 * @param date   操作日付
	 * @param amount 増減月数
	 * @return 操作後日付
	 */
	protected Date addMonth(Date date, int amount) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		cal.add(Calendar.MONTH, amount);
		return cal.getTime();
	}

	/**
	 * 年月取得
	 * @param year  年
	 * @param month 月
	 * @return 年月
	 */
	protected Date getYearMonth(String year, String month) {
		Calendar cal = Calendar.getInstance();
		cal.set(Integer.parseInt(year), Integer.parseInt(month) -1, 1, 0, 0, 0);
		cal.set(Calendar.MILLISECOND, 0);
		return cal.getTime();
	}

	/**
	 * 和暦取得
	 * @param list 和暦情報リスト
	 * @param date 日付
	 * @return 日付配列
	 * @throws MospException 
	 */
	public String[] getJpImperialCal(List<MosPConfDto> list, Date date) throws MospException {
		String[] aryJpDate = new String[4];
		if (date == null) {
			return aryJpDate;
		}
		for (Iterator<MosPConfDto> it = list.iterator(); it.hasNext();) {
			MosPConfDto dto = it.next();
			Date startDate = getDate(dto.getConfCode ());
			Date endDate   = getDate(dto.getConfValue());
			if (startDate.compareTo(date) <= 0 && endDate.compareTo(date) >= 0) {
				int year = MospUtility.getYear(date) - MospUtility.getYear(startDate) + 1;
				aryJpDate[0] = dto.getConfId();
				aryJpDate[1] = String.valueOf(year);
				aryJpDate[2] = String.valueOf(MospUtility.getMonth(date));
				aryJpDate[3] = String.valueOf(MospUtility.getDay  (date));
				return aryJpDate;
			}
		}
		throw new MospException(MospConst.EX_DATE_INVALID);
	}

	/**
	 * 日付取得(/無し文字列用)
	 * @param strDate 日付文字列
	 * @return 日付
	 * @throws MospException 
	 */
	public Date getDate(String strDate) throws MospException {
		if (strDate == null || strDate.length() != 8) {
			throw new MospException(MospConst.EX_DATE_INVALID);
		}
		return MospUtility.getDate(
				strDate.substring(0, 4) + PayrollConst.SEPARATOR_DATE +
				strDate.substring(4, 6) + PayrollConst.SEPARATOR_DATE +
				strDate.substring(6, 8)
		);
	}


	/**
	 * システム日付取得
	 * @return システム日付
	 */
	protected Date getSystemDate() {
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		return cal.getTime();
	}


	/**
	 * 月最終日取得
	 * @param year  取得対象年
	 * @param month 取得対象月
	 * @return 月最終日
	 */
	protected Date getLastDateOfMonth(String year, String month) {
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, Integer.parseInt(year));
		cal.set(Calendar.MONTH, Integer.parseInt(month));
		cal.set(Calendar.DAY_OF_MONTH, 1);
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		cal.add(Calendar.DAY_OF_MONTH, -1);
		return cal.getTime();
	}
	
	
	/**
	 * 名称取得
	 * @param code  取得対象コード
	 * @return コード名称
	 */
	protected String getCodeName(String code, String[][] array) {
		String codeName = code;
		if (array == null) {
			return codeName;
		}
		for (int i = 0; i < array.length; i++) {
			if (code.equals(array[i][0])) {
				codeName = array[i][1];
				break;
			}
		}
		return codeName;
	}

	/**
	 * 年齢取得
	 * @param birthDay
	 * @param targetDay
	 * @return 年齢
	 */
	protected int getAge(Date birthDay, Date targetDay) {
		// 取得準備
		int age = 0;
		// 年齢取得
		age = MospUtility.getYear(targetDay) - MospUtility.getYear(birthDay);
		// 対象年月が誕生年よりなら0
		if (age < 0) {
			age = 0;
			return age;
		}
		// 対象月が誕生月以降
		if (MospUtility.getMonth(targetDay) - MospUtility.getMonth(birthDay) > 0) {
			return age;
		} else if (MospUtility.getMonth(targetDay) - MospUtility.getMonth(birthDay) == 0) {
			// 対象日が誕生日以降
			if (MospUtility.getDay(targetDay) - MospUtility.getDay(birthDay) > 0) {
				return age;
			} else if (MospUtility.getDay(targetDay) - MospUtility.getDay(birthDay) == 0) {
				// 対象日が誕生日
				return age;
			} else {
				// 対象日が誕生日以前
				return age - 1;
			}
		} else {
			// 対象月が誕生月以前
			return age - 1;
		}
	}

	/**
	 * 健康保険等級を取得
	 * @param intIn 取得対象の報酬金額
	 * @return 等級
	 */
	public int getHealthDecGrade(int intIn){
		int rtnNum = 0;
		// 新等級、標準報酬月額取得
		for (int i = 0; i < aryPaymentOver.length; i++) {
			if (intIn < aryPaymentUnder[i]) {
				rtnNum = arySocInsGrade[i];
				break;
			}
		}
		return rtnNum;
	}

	/**
	 * 厚生年金等級を取得
	 * @param intIn 取得対象の報酬金額
	 * @return 等級
	 */
	public int getPensionDecGrade(int intIn){
		int rtnNum = 0;
		// 新等級、標準報酬月額取得
		for (int i = 0; i < aryPaymentOver.length; i++) {
			if (intIn < aryPaymentUnder[i]) {
				if (arySocInsGrade[i] - 4 < 0) {
					rtnNum = arySocInsGrade[i];
				} else {
					rtnNum = arySocInsGrade[i] - 4;
				}
				break;
			}
		}
		return rtnNum;

	}

	/**
	 * 健康保険標準報酬額を取得
	 * @param intIn 取得対象の報酬金額
	 * @return 等級
	 */
	public int getHealthDecPremium(int intIn){
		int rtnNum = 0;
		// 新等級、標準報酬月額取得
		for (int i = 0; i < aryPaymentOver.length; i++) {
			if (intIn < aryPaymentUnder[i]) {
				rtnNum = aryStandardPayment[i];
				break;

			}
		}	
		return rtnNum;
	}

	/**
	 * 厚生年金標準報酬額を取得
	 * @param intIn 取得対象の報酬金額
	 * @return 等級
	 */
	public int getPensionDecPremium(int intIn){
		int rtnNum = 0;
		// 新等級、標準報酬月額取得
		for (int i = 0; i < aryPaymentOver.length; i++) {
			if (intIn < aryPaymentUnder[i]) {
				rtnNum = aryStandardPayment[i];
				break;
			}
		}
		return rtnNum;
	}
	
	/**
	 * 件名検索
	 * @param prefecture　住所コード
	 * @return 件名
	 */
	public static String getPrefecture(int prefecture) {
		// 件名分回す
		for (int i = 0; i < aryPrefecture.length;i++){
			if (aryPrefecture[i][0].equals(String.valueOf(prefecture))){
				return aryPrefecture[i][1];
			}
		}
		// 一番若いコードを返す
		return aryPrefecture[0][1];
	}
}
