0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【保険商品管理システムの開発】火災保険の見積もり計算を行うAPIコントローラーの解説(3)

Posted at

3. Calculate メソッドの流れ

3. 基本保険料計算

Controllers/FireInsuranceController.cs
var basePremium = (request.BuildingCoverage * 10000 + request.HouseholdCoverage * 10000) * rate.BaseRate;

• 建物補償金額と家財補償金額を合計(万円→円に変換)し、基本料率を掛けて年間基本保険料を算出

4. 建物年数による補正

Controllers/FireInsuranceController.cs
decimal buildingAgeFactor = request.BuildingAge switch
{
    <= 5 => 1.00m,
    <= 10 => 1.05m,
    <= 20 => 1.10m,
    _ => 1.20m
};

• 建物が古くなるほど保険料が高くなるよう補正

1. request.BuildingAge switch

• switch 式 は、C# 8.0 以降で使える新しい構文です。
• switch に渡された値(ここでは request.BuildingAge)を条件に照らして一致するパターンを探し、その結果を返します。

2. <= 5 => 1.00m

• 「もし BuildingAge が 5以下 なら 1.00m を返す」という意味です。
• 1.00m の m は「decimal型の定数ですよ」という印です。

3. 他の条件

<= 10 => 1.05m, // 10以下なら 1.05
<= 20 => 1.10m, // 20以下なら 1.10

• 順番に上から評価され、最初にマッチしたものが採用されます。

4. _ => 1.20m

• _ は「ワイルドカード(何でも)」です。
• つまり「上記のどの条件にも当てはまらなかった場合は 1.20m を返す」という意味です。

5. オプション加算

Controllers/FireInsuranceController.cs
decimal optionFactor = 1.00m;
if (request.IncludeEarthquake) optionFactor += 0.30m;
if (request.IncludeFlood) optionFactor += 0.10m;

• 地震特約(+30%)
• 水害特約(+10%)

6. 免責額による割引

Controllers/FireInsuranceController.cs
decimal deductibleDiscount = request.Deductible switch
{
    >= 100000 => 0.95m,
    >= 50000 => 0.97m,
    _ => 1.00m
};

• 免責額が高いほど保険料が安くなる(例:10万円免責 → 5%割引)

1. >= 100000 => 0.95m

• もし Deductible(免責金額)が 100,000円以上 なら 0.95 を返します。
• これは「保険料を 95% にする」という意味で、5% 割引のことです。

2. >= 50000 => 0.97m

• もし 50,000円以上 かつ 100,000円未満 の場合は 0.97(3% 割引)を返します。
• 先に >= 100000 がチェックされるので、50,000〜99,999 の範囲だけが該当します。

7. 年間保険料・総保険料計算

Controllers/FireInsuranceController.cs
decimal annualPremium = basePremium * rate.AgeFactor * rate.CoverageFactor * buildingAgeFactor * optionFactor * deductibleDiscount;
decimal totalPremium = annualPremium * request.Years;

• 年間保険料を算出し、契約年数分掛けて総額を計算

8. 計算詳細メッセージ作成

Controllers/FireInsuranceController.cs
string details = $"構造: {request.StructureType}, 地域: {region}, 基本料率: {rate.BaseRate:P}, 建物年数補正: {buildingAgeFactor}, オプション補正: {optionFactor}, 免責割引: {deductibleDiscount}";

9. レスポンス返却

Controllers/FireInsuranceController.cs
return new FireInsuranceCalculationResult
{
    AnnualPremium = Math.Round(annualPremium, 0),
    TotalPremium = Math.Round(totalPremium, 0),
    Details = details
};
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?