calculate-benefit
This commit is contained in:
@@ -84,7 +84,9 @@ class MemberController extends Controller
|
||||
'benefits.description',
|
||||
'benefits.code',
|
||||
'corporate_benefits.corporate_id',
|
||||
'plans.service_code'
|
||||
'plans.service_code',
|
||||
'corporate_benefits.cashless_percentage',
|
||||
'corporate_benefits.reimbursement_percentage',
|
||||
)
|
||||
->get();
|
||||
$res_data['benefits'] = $benefits;
|
||||
@@ -203,4 +205,119 @@ class MemberController extends Controller
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public function calculateBenefit(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'member_id' => 'required|integer',
|
||||
'benefit_id' => 'required|integer',
|
||||
'biaya' => 'required|numeric|min:0'
|
||||
]);
|
||||
|
||||
$memberId = $request->member_id;
|
||||
$benefitId = $request->benefit_id;
|
||||
$biaya = $request->biaya;
|
||||
|
||||
// ===============================
|
||||
// Ambil member
|
||||
// ===============================
|
||||
$member = DB::table('members')->where('id', $memberId)->first();
|
||||
|
||||
if (!$member) {
|
||||
return ApiResponse::apiResponse("Data Not Found", [], "Member not found", 404);
|
||||
}
|
||||
|
||||
// ===============================
|
||||
// Ambil corporate employee
|
||||
// ===============================
|
||||
$corporateEmployee = DB::table('corporate_employees')
|
||||
->where('member_id', $memberId)
|
||||
->first();
|
||||
|
||||
if (!$corporateEmployee) {
|
||||
return ApiResponse::apiResponse("Data Not Found", [], "Corporate not found", 404);
|
||||
}
|
||||
|
||||
// ===============================
|
||||
// Ambil Plan OP
|
||||
// ===============================
|
||||
$planMember = MemberPlan::where('member_id', $memberId)->pluck('plan_id');
|
||||
|
||||
$plan = Plan::whereIn('id', $planMember)
|
||||
->where('service_code', 'OP')
|
||||
->first();
|
||||
|
||||
if (!$plan) {
|
||||
return ApiResponse::apiResponse("Data Not Found", [], "Plan OP not found", 404);
|
||||
}
|
||||
|
||||
// ===============================
|
||||
// Ambil Benefit
|
||||
// ===============================
|
||||
$corporateBenefit = CorporateBenefit::where('plan_id', $plan->id)
|
||||
->where('benefit_id', $benefitId)
|
||||
->first();
|
||||
|
||||
if (!$corporateBenefit) {
|
||||
return ApiResponse::apiResponse("Data Not Found", [], "Benefit not found", 404);
|
||||
}
|
||||
|
||||
// ===============================
|
||||
// Hitung Used Limit (PAKAI HELPER)
|
||||
// ===============================
|
||||
$benefitData = [
|
||||
[
|
||||
'id' => $benefitId,
|
||||
'limit_amount' => $corporateBenefit->limit_amount ?? 0,
|
||||
'limit_amount_plan' => $plan->limit_rules ?? 0,
|
||||
'family_plan' => $plan->family_plan ?? 'S',
|
||||
'max_frequency_period' => $corporateBenefit->max_frequency_period ?? 0
|
||||
]
|
||||
];
|
||||
|
||||
$memberUsage = Helper::getUsageMember(
|
||||
$corporateEmployee->corporate_id,
|
||||
$memberId,
|
||||
$benefitData
|
||||
);
|
||||
|
||||
$usedLimitArray = json_decode($memberUsage, true);
|
||||
$usedLimit = $usedLimitArray[$benefitId] ?? 0;
|
||||
|
||||
// ===============================
|
||||
// Limit Logic
|
||||
// ===============================
|
||||
$limitPlan = $plan->limit_rules ?? 0;
|
||||
$sisaLimit = $limitPlan - $usedLimit;
|
||||
|
||||
if ($sisaLimit < 0) {
|
||||
$sisaLimit = 0;
|
||||
}
|
||||
|
||||
// ===============================
|
||||
// Percentage Logic
|
||||
// ===============================
|
||||
$cashlessPercentage = $corporateBenefit->cashless_percentage ?? 0;
|
||||
|
||||
$ditanggungPercentage = ($biaya * $cashlessPercentage) / 100;
|
||||
|
||||
$ditanggungFinal = min($ditanggungPercentage, $sisaLimit);
|
||||
|
||||
$sisaBayar = $biaya - $ditanggungFinal;
|
||||
|
||||
// ===============================
|
||||
// Response
|
||||
// ===============================
|
||||
return ApiResponse::apiResponse("Success", [
|
||||
'member_id' => $memberId,
|
||||
'benefit_id' => $benefitId,
|
||||
'biaya' => $biaya,
|
||||
'cashless_percentage' => $cashlessPercentage,
|
||||
'limit_plan' => $limitPlan,
|
||||
'used_limit' => $usedLimit,
|
||||
'sisa_limit' => $sisaLimit,
|
||||
'ditanggung_asuransi' => $ditanggungFinal,
|
||||
'sisa_bayar_member' => $sisaBayar
|
||||
], "Calculation successful", 200);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,6 +40,8 @@ Route::prefix('v1')->group(function () {
|
||||
Route::post('request-log', 'requestLog');
|
||||
});
|
||||
|
||||
Route::post('calculate-benefit', [MemberController::class, 'calculateBenefit']);
|
||||
|
||||
Route::prefix('master')->group(function () {
|
||||
|
||||
Route::get('specialities', [MasterController::class, 'specialities']);
|
||||
|
||||
Reference in New Issue
Block a user