diff --git a/Modules/Primaya/Http/Controllers/Api/MemberController.php b/Modules/Primaya/Http/Controllers/Api/MemberController.php index 19cee3f0..f27a2075 100644 --- a/Modules/Primaya/Http/Controllers/Api/MemberController.php +++ b/Modules/Primaya/Http/Controllers/Api/MemberController.php @@ -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); + } } diff --git a/Modules/Primaya/Routes/api.php b/Modules/Primaya/Routes/api.php index a90a9e7b..7af136b3 100644 --- a/Modules/Primaya/Routes/api.php +++ b/Modules/Primaya/Routes/api.php @@ -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']);