Files
thinkyu/Web/App_Code/Calculate/Bhif.cs
T
sryang 577060bc78 chore: 首次簽入 Thinkyu ASP.NET 專案
- 加入 Visual Studio / ASP.NET .gitignore
- 排除建置輸出、IDE 設定、NuGet packages、大型 MSI 安裝檔
2026-09-10 09:42:37 +08:00

184 lines
4.8 KiB
C#

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.Common;
using Wellan.Data;
using Wellan.Common;
/// <summary>
/// 計算健保費
/// </summary>
public class Bhif : LaborAndHealthFee
{
private double _healthInsuranceFeeRate;
private double _healthInsuranceAverageFamily;
private double _oldHealthInsuranceFeeRate;
public Bhif(DateTime aDate) : base(aDate)
{
_bftyp = 2;
_tableName = "BHIF";
_healthInsuranceFeeRate = 0.0455d;
_oldHealthInsuranceFeeRate = 0.0455d;
}
/// <summary>
/// 健保費率
/// </summary>
public double HealthInsuranceFeeRate
{
get
{
return _healthInsuranceFeeRate;
}
set
{
_healthInsuranceFeeRate = value;
}
}
/// <summary>
/// 健保平均眷口數
/// </summary>
public double HealthInsuranceAverageFamily
{
get
{
return _healthInsuranceAverageFamily;
}
set
{
_healthInsuranceAverageFamily = value;
}
}
public HealthInsuranceFee GetFee(int salary, int family, int family25, int family50, string disabled, bool hasHIF, string employeeType)
{
// 找出投保薪資
HealthInsuranceFee fee = new HealthInsuranceFee();
fee.Init();
// 不投健保,直接回傳
if (!hasHIF)
return fee;
// 新費率投保薪資
double bsamt = GetAmont(salary);
// 舊費率投保薪資
double oldbsamt = GetAmont(new DateTime(2010, 3, 1) ,salary);
fee.InsuranceSalary = (Int32)bsamt;
if (bsamt > 0)
{
// 計算公司保費
// 員工身份是雇主
if (employeeType == "1")
fee.CompanyFee = 0;
// 員工身份是受雇員工
else
fee.CompanyFee = Convert.ToInt32(Math.Round(bsamt * _healthInsuranceFeeRate * 0.6d * (1d + _healthInsuranceAverageFamily), MidpointRounding.AwayFromZero));
// 計算個人保費
double personalFee = 0;
double oldPersonalFee = 0;
// 員工身份是雇主
if (employeeType == "1")
{
personalFee = bsamt * _healthInsuranceFeeRate;
oldPersonalFee = oldbsamt * _oldHealthInsuranceFeeRate;
}
// 員工身份是受雇員工
else
{
personalFee = bsamt * _healthInsuranceFeeRate * 0.3d;
oldPersonalFee = oldbsamt * _oldHealthInsuranceFeeRate * 0.3d;
}
/*
99/4/1 到 101/12/31 實施差額補助
投保金額等級 所得水準 補助比率
40,100元(含)以下 約5萬1千元(含)以下 100%
42,000元至50,600元 約5萬3千元至6萬5千元 20%
53,000元(含)以上 約6萬8千元(含)以上 0%
*/
if (_baseDate.ToString("yyyyMM", WGuard1.InvariantCulture).CompareTo("201004") >= 0 &&
_baseDate.ToString("yyyyMM", WGuard1.InvariantCulture).CompareTo("201301") < 0)
{
// 以月投保薪資計算補助比率
if (bsamt <= 40100)
{
personalFee = oldPersonalFee;
}
else if (bsamt > 40100 && bsamt < 53000)
{
personalFee = personalFee - Convert.ToInt32(Math.Round((personalFee - oldPersonalFee) * 0.2d, MidpointRounding.AwayFromZero));
}
}
int noDiscountFee = Convert.ToInt32(Math.Round(personalFee, MidpointRounding.AwayFromZero));
int discount25Fee = Convert.ToInt32(Math.Truncate(Math.Round(personalFee, MidpointRounding.AwayFromZero) * 0.75d));
int discount50Fee = Convert.ToInt32(Math.Truncate(Math.Round(personalFee, MidpointRounding.AwayFromZero) * 0.5d));
int remainFamily = 3;
switch (disabled)
{
case "0": // 無
fee.PersonalFee = noDiscountFee;
break;
case "1": // 輕度
fee.PersonalFee = discount25Fee;
break;
case "2": // 中度
fee.PersonalFee = discount50Fee;
break;
case "3": // 重度
fee.PersonalFee = 0;
break;
}
// 加上一般眷口
fee.PersonalFee += noDiscountFee * (family > remainFamily ? (remainFamily > 0 ? remainFamily : 0) : family);
remainFamily -= family;
// 加上減免25%眷口
fee.PersonalFee += (discount25Fee) * (family25 > remainFamily ? (remainFamily > 0 ? remainFamily : 0) : family25);
remainFamily -= family25;
// 加上減免50%眷口
fee.PersonalFee += (discount50Fee) * (family50 > remainFamily ? (remainFamily > 0 ? remainFamily : 0) : family50);
}
return fee;
}
}
public struct HealthInsuranceFee
{
public int InsuranceSalary;
public int PersonalFee;
public int CompanyFee;
public void Init()
{
InsuranceSalary = 0;
PersonalFee = 0;
CompanyFee = 0;
}
public void Assign(HealthInsuranceFee fee)
{
InsuranceSalary = fee.InsuranceSalary;
PersonalFee = fee.PersonalFee;
CompanyFee = fee.CompanyFee;
}
}