calculate-benefit
This commit is contained in:
@@ -84,7 +84,9 @@ class MemberController extends Controller
|
|||||||
'benefits.description',
|
'benefits.description',
|
||||||
'benefits.code',
|
'benefits.code',
|
||||||
'corporate_benefits.corporate_id',
|
'corporate_benefits.corporate_id',
|
||||||
'plans.service_code'
|
'plans.service_code',
|
||||||
|
'corporate_benefits.cashless_percentage',
|
||||||
|
'corporate_benefits.reimbursement_percentage',
|
||||||
)
|
)
|
||||||
->get();
|
->get();
|
||||||
$res_data['benefits'] = $benefits;
|
$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('request-log', 'requestLog');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Route::post('calculate-benefit', [MemberController::class, 'calculateBenefit']);
|
||||||
|
|
||||||
Route::prefix('master')->group(function () {
|
Route::prefix('master')->group(function () {
|
||||||
|
|
||||||
Route::get('specialities', [MasterController::class, 'specialities']);
|
Route::get('specialities', [MasterController::class, 'specialities']);
|
||||||
|
|||||||
Reference in New Issue
Block a user