update penjagaan limit level plan

This commit is contained in:
2024-07-01 10:52:58 +07:00
parent 4ceaf41a7d
commit 97b1b841d3
6 changed files with 208 additions and 59 deletions

View File

@@ -34,7 +34,7 @@ class RequestLogShowResource extends JsonResource
$planMember = MemberPlan::where('member_id', $member_id)->get('plan_id'); $planMember = MemberPlan::where('member_id', $member_id)->get('plan_id');
$planId = Plan::whereIn('id', $planMember)->where('service_code', $requestLog['service_code'])->first(); $planId = Plan::whereIn('id', $planMember)->where('service_code', $requestLog['service_code'])->first();
$benefit = CorporateBenefit::with('benefit')->where('plan_id', $planId->id)->get()->toArray(); $benefit = CorporateBenefit::with(['benefit', 'plan'])->where('plan_id', $planId->id)->get()->toArray();
$benefitDetailLog = RequestLogBenefit::with('benefit')->where('request_log_id', $requestLog['id'])->get()->toArray(); $benefitDetailLog = RequestLogBenefit::with('benefit')->where('request_log_id', $requestLog['id'])->get()->toArray();
$medicineDetailLog = RequestLogMedicine::where('request_log_id', $requestLog['id'])->get()->toArray(); $medicineDetailLog = RequestLogMedicine::where('request_log_id', $requestLog['id'])->get()->toArray();
$provider = Organization::where('id', $requestLog['organization_id'])->first(); $provider = Organization::where('id', $requestLog['organization_id'])->first();
@@ -66,8 +66,12 @@ class RequestLogShowResource extends JsonResource
$benefitData = []; $benefitData = [];
if (count($benefit)){ if (count($benefit)){
foreach($benefit as $data){ foreach($benefit as $data){
$data['benefit']['plan_id'] = $data['plan_id'];
$data['benefit']['limit_amount'] = $data['limit_amount']; $data['benefit']['limit_amount'] = $data['limit_amount'];
$data['benefit']['family_plan'] = $planId->family_plan; $data['benefit']['family_plan'] = $planId->family_plan;
$data['benefit']['max_frequency_period'] = $data['max_frequency_period'];
$data['benefit']['limit_amount_plan'] = $data['plan']['limit_rules'];
$data['benefit']['family_plan_plans'] = $data['plan']['family_plan'];
array_push($benefitData, $data['benefit']); array_push($benefitData, $data['benefit']);
} }
} }
@@ -111,8 +115,9 @@ class RequestLogShowResource extends JsonResource
->select('code', 'name') ->select('code', 'name')
->get(); ->get();
} }
$memberUsage = Helper::getUsageMember($corporateId, $requestLog['member']['id'], $benefitData);
$memberLimit = Helper::getLimitMember($corporateId, $requestLog['member']['id'], $benefitData); // dd($memberLimitUsage);
$data = [ $data = [
'id' => $requestLog['id'], 'id' => $requestLog['id'],
'code' => $requestLog['code'], 'code' => $requestLog['code'],
@@ -128,7 +133,7 @@ class RequestLogShowResource extends JsonResource
'gender' => $requestLog['member']['gender'], 'gender' => $requestLog['member']['gender'],
'marital_status' => $requestLog['member']['status_marital'], 'marital_status' => $requestLog['member']['status_marital'],
'member_type' => Helper::memberType($requestLog['member']['record_type']), 'member_type' => Helper::memberType($requestLog['member']['record_type']),
'member_usage' => json_decode($memberLimit), 'member_usage_benefit' => json_decode($memberUsage),
'principal_id' => $requestLog['member']['principal_id'] ? $requestLog['member']['principal_id'] : '-', 'principal_id' => $requestLog['member']['principal_id'] ? $requestLog['member']['principal_id'] : '-',
'principal_name' => $requestLog['member']['principal_id'] ? Helper::principalName($requestLog['member']['principal_id']) : '-', 'principal_name' => $requestLog['member']['principal_id'] ? Helper::principalName($requestLog['member']['principal_id']) : '-',
'relation_with_principal' => Helper::relationWithPrincipal($requestLog['member']['relation_with_principal']), 'relation_with_principal' => Helper::relationWithPrincipal($requestLog['member']['relation_with_principal']),

View File

@@ -536,32 +536,106 @@ class Helper
} }
} }
public static function getLimitMember($corporateId, $id, $benefitData) { public static function getUsageMember($corporateId, $id, $benefitData) {
// Menghitung jumlah total approved dan mengkategorikan berdasarkan benefit_id // Menghitung jumlah total approved dan mengkategorikan berdasarkan benefit_id
$amountApprovedByBenefit = []; $amountApprovedByBenefit = [];
foreach($benefitData as $benefit) { foreach($benefitData as $benefit) {
if ($benefit['family_plan'] == 'S' || $benefit['family_plan'] == 'F'){ // Menghitung usage per family if ($benefit['limit_amount'] != 999999999) {
$memberFamilys = Helper::getMemberFamily($id); if ($benefit['family_plan'] == 'S' || $benefit['family_plan'] == 'F'){ // Menghitung usage per family
$usageLogs = RequestLogBenefit::query() $memberFamilys = Helper::getMemberFamily($id);
->whereHas('requestLog', function ($query) use ($benefit, $memberFamilys) { $usageLogs = 0;
$query->where('benefit_id', $benefit['id'])
->whereIn('member_id', $memberFamilys); $today = date('Y-m-d');
}) $periods = [
->sum('amount_approved'); 0 => [
'start' => '2024-01-05',
// Mengkategorikan sum berdasarkan benefit_id 'end' => '2025-01-05'
$amountApprovedByBenefit[$benefit['id']] = $usageLogs; ],
} else { // Menghitung usage permember 1 => [
$usageLog = RequestLogBenefit::query() 'start' => $today,
->whereHas('requestLog', function ($query) use ($benefit, $id) { 'end' => $today
$query->where('benefit_id', $benefit['id']) ]
->where('member_id', $id); // Tambahkan kondisi lainnya jika diperlukan
}) ];
->sum('amount_approved');
if (array_key_exists($benefit['max_frequency_period'], $periods)) {
// Mengkategorikan sum berdasarkan benefit_id $usageLogs = RequestLogBenefit::query()
$amountApprovedByBenefit[$benefit['id']] = $usageLog; ->whereHas('requestLog', function ($query) use ($benefit, $memberFamilys, $periods) {
} $period = $periods[$benefit['max_frequency_period']];
$query->where('benefit_id', $benefit['id'])
// ->where('submission_date', '>=', $period['start'])
// ->where('submission_date', '<=', $period['end'])
->whereIn('member_id', $memberFamilys);
})
->sum('amount_approved');
}
// Mengkategorikan sum berdasarkan benefit_id
$amountApprovedByBenefit[$benefit['id']] = $usageLogs;
} else { // Menghitung usage permember
$usageLog = RequestLogBenefit::query()
->whereHas('requestLog', function ($query) use ($benefit, $id) {
$query->where('benefit_id', $benefit['id'])
->where('member_id', $id);
})
->sum('amount_approved');
// Mengkategorikan sum berdasarkan benefit_id
$amountApprovedByBenefit[$benefit['id']] = $usageLog;
}
}
}
return json_encode($amountApprovedByBenefit);
}
public static function getLimitMemberService($corporateId, $id, $benefitData) {
// Menghitung jumlah total approved dan mengkategorikan berdasarkan benefit_id
$amountApprovedByBenefit = [];
foreach($benefitData as $benefit) {
if ($benefit['limit_amount'] != 999999999) {
if ($benefit['family_plan'] == 'S' || $benefit['family_plan'] == 'F'){ // Menghitung usage per family
$memberFamilys = Helper::getMemberFamily($id);
$usageLogs = 0;
$today = date('Y-m-d');
$periods = [
0 => [
'start' => '2024-01-05',
'end' => '2025-01-05'
],
1 => [
'start' => $today,
'end' => $today
]
// Tambahkan kondisi lainnya jika diperlukan
];
if (array_key_exists($benefit['max_frequency_period'], $periods)) {
$usageLogs = RequestLogBenefit::query()
->whereHas('requestLog', function ($query) use ($benefit, $memberFamilys, $periods) {
$period = $periods[$benefit['max_frequency_period']];
$query->where('benefit_id', $benefit['id'])
// ->where('submission_date', '>=', $period['start'])
// ->where('submission_date', '<=', $period['end'])
->whereIn('member_id', $memberFamilys);
})
->sum('amount_approved');
}
// Mengkategorikan sum berdasarkan benefit_id
$amountApprovedByBenefit[$benefit['id']] = $usageLogs;
} else { // Menghitung usage permember
$usageLog = RequestLogBenefit::query()
->whereHas('requestLog', function ($query) use ($benefit, $id) {
$query->where('benefit_id', $benefit['id'])
->where('member_id', $id);
})
->sum('amount_approved');
// Mengkategorikan sum berdasarkan benefit_id
$amountApprovedByBenefit[$benefit['id']] = $usageLog;
}
}
} }
return json_encode($amountApprovedByBenefit); return json_encode($amountApprovedByBenefit);

View File

@@ -41,7 +41,10 @@ type BenefitSelected = {
description: string, description: string,
benefit_id: number, benefit_id: number,
family_plan: string, family_plan: string,
family_plan_plans: string,
limit_amount: number, limit_amount: number,
limit_amount_plan: number,
max_frequency_period: number,
} }
@@ -189,30 +192,52 @@ export default function DialogBenefit({requestLog, setOpenDialog, openDialog, cl
} }
const handleOnChangeNominal = (key) => { const handleOnChangeNominal = (key) => {
if (benefitSelected[key].family_plan == 'S' || benefitSelected[key].family_plan == 'F'){ if (benefitSelected[key].family_plan == 'S' || benefitSelected[key].family_plan == 'F'){
if (requestLog?.member_usage && benefitSelected[key] && benefitData[key]) { if (requestLog?.member_usage_benefit && benefitSelected[key] && benefitData[key]) {
// Konversi nilai ke angka dengan aman
let memberUsage = Number(requestLog.member_usage[benefitSelected[key].id]) || 0;
let amountApproved = Number(benefitData[key].amount_approved) || 0;
let limitAmount = Number(benefitSelected[key].limit_amount) || 0; let limitAmount = Number(benefitSelected[key].limit_amount) || 0;
let limitAmountPlan = Number(benefitSelected[key].limit_amount_plan) || 0;
// Hitung penggunaan waktu nyata // Periksa apakah limitAmount Benefit lebih besar dari realTimeUsage
let realTimeUsage = memberUsage + amountApproved; if (limitAmountPlan != 999999999){
let realTimeUsage = 0;
// Periksa apakah limitAmount lebih besar dari realTimeUsage for (let key in requestLog?.member_usage_benefit) {
if (limitAmount < realTimeUsage) { if (requestLog?.member_usage_benefit.hasOwnProperty(key)) {
setError(`benefit_data.${key}.amount_approved`, { message: `Total Amount Approve sudah melebihi limit ${ fNumber(limitAmount) } , silakan isikan di Amount Excess` }); realTimeUsage += requestLog?.member_usage_benefit[key];
} else if (totalAll().totalAmountApproved > totalAll().totalAmountIncurred) { }
setError(`benefit_data.${key}.amount_approved`, { message: 'Total Amount Approve tidak boleh lebih dari Total Amount Incurred' }); }
let amountApproved = Number(benefitData[key].amount_approved) || 0;
// Hitung penggunaan waktu nyata
realTimeUsage += amountApproved;
if (limitAmountPlan < realTimeUsage) {
setError(`benefit_data.${key}.amount_approved`, { message: `Total Amount Approve sudah melebihi limit ${ fNumber(limitAmountPlan) } , silakan isikan di Amount Excess` });
} else if (totalAll().totalAmountApproved > totalAll().totalAmountIncurred) {
setError(`benefit_data.${key}.amount_approved`, { message: 'Total Amount Approve tidak boleh lebih dari Total Amount Incurred' });
} else {
clearErrors(`benefit_data.${key}.amount_approved`);
}
} else if (limitAmount != 999999999) { // Periksa apakah limitAmount Benefit lebih besar dari realTimeUsage
// Konversi nilai ke angka dengan aman
let memberUsage = Number(requestLog.member_usage_benefit[benefitSelected[key].id]) || 0;
let amountApproved = Number(benefitData[key].amount_approved) || 0;
// Hitung penggunaan waktu nyata
let realTimeUsage = memberUsage + amountApproved;
if (limitAmount < realTimeUsage) {
setError(`benefit_data.${key}.amount_approved`, { message: `Total Amount Approve sudah melebihi limit ${ fNumber(limitAmount) } , silakan isikan di Amount Excess` });
} else if (totalAll().totalAmountApproved > totalAll().totalAmountIncurred) {
setError(`benefit_data.${key}.amount_approved`, { message: 'Total Amount Approve tidak boleh lebih dari Total Amount Incurred' });
} else {
clearErrors(`benefit_data.${key}.amount_approved`);
}
} else { } else {
clearErrors(`benefit_data.${key}.amount_approved`); if (totalAll().totalAmountApproved > totalAll().totalAmountIncurred) {
setError(`benefit_data.${key}.amount_approved`, { message: 'Total Amount Approve tidak boleh lebih dari Total Amount Incurred' });
} else {
clearErrors(`benefit_data.${key}.amount_approved`);
}
} }
} }
} else { } else {
if (totalAll().totalAmountApproved > totalAll().totalAmountIncurred){ if (totalAll().totalAmountApproved > totalAll().totalAmountIncurred){
// setValue(`benefit_data.${key}.amount_approved`, 0);
setError(`benefit_data.${key}.amount_approved`, {message: 'Amount Approve tidak boleh lebih dari Amount Incurred'}); setError(`benefit_data.${key}.amount_approved`, {message: 'Amount Approve tidak boleh lebih dari Amount Incurred'});
} else { } else {
clearErrors(`benefit_data.${key}.amount_approved`); clearErrors(`benefit_data.${key}.amount_approved`);
@@ -220,6 +245,13 @@ export default function DialogBenefit({requestLog, setOpenDialog, openDialog, cl
} }
} }
const handleOnChangeNotApprove = (key, value) => {
setValue(`benefit_data.${key}.excess_paid`, value);
if (totalAll().totalAmountApproved + totalAll().totalAmountNotApproved === totalAll().totalAmountIncurred) {
clearErrors(`benefit_data.${key}.amount_approved`);
}
};
// Submit Form // Submit Form
// ===================================== // =====================================
const submitHandler = async (data: BenefitConfigurationListType) => { const submitHandler = async (data: BenefitConfigurationListType) => {
@@ -363,6 +395,10 @@ export default function DialogBenefit({requestLog, setOpenDialog, openDialog, cl
name={`benefit_data.${index}.amount_not_approved`} name={`benefit_data.${index}.amount_not_approved`}
placeholder='Amount Not Approved' placeholder='Amount Not Approved'
required required
onChange={(event) => {
setValue(`benefit_data.${index}.amount_not_approved`, event.target.value)
handleOnChangeNotApprove(index, event.target.value)}
}
/> />
</Grid> </Grid>
</Grid> </Grid>

View File

@@ -102,25 +102,42 @@ export default function DialogEditBenefit({id, data, setOpenDialog, openDialog,
let benefitData = findItemById(data?.benefit_id) let benefitData = findItemById(data?.benefit_id)
if (benefitData.family_plan == 'S' || benefitData.family_plan == 'F'){ if (benefitData.family_plan == 'S' || benefitData.family_plan == 'F'){
// Konversi nilai ke angka dengan aman // Konversi nilai ke angka dengan aman
let memberUsage = Number(total.totalLimit[benefitData.id]) || 0;
let amountApproved = Number(parseFloat(watch('amount_approved'))) || 0;
let limitAmount = Number(benefitData.limit_amount) || 0; let limitAmount = Number(benefitData.limit_amount) || 0;
// Hitung penggunaan waktu nyata let limitAmountPlan = Number(benefitData.limit_amount_plan) || 0;
let realTimeUsage = memberUsage + amountApproved;
console.log(limitAmount, realTimeUsage) if (limitAmountPlan != 999999999){
// Periksa apakah limitAmount lebih besar dari realTimeUsage let realTimeUsage = totalAll().totalAmountApproved;
if (limitAmount < realTimeUsage) { console.log(limitAmountPlan, 'test')
setError(`amount_approved`, { message: `Total Amount Approve sudah melebihi limit ${ fNumber(limitAmount) } , silakan isikan di Amount Excess` }); if (limitAmountPlan < realTimeUsage) {
} else if (totalAll().totalAmountApproved > totalAll().totalAmountIncurred){ setError(`amount_approved`, { message: `Total Amount Approve sudah melebihi limit ${ fNumber(limitAmountPlan) } , silakan isikan di Amount Excess` });
// setValue(`benefit_data.${key}.amount_approved`, 0); } else if (totalAll().totalAmountApproved > totalAll().totalAmountIncurred) {
setError(`amount_approved`, {message: 'Amount Approve tidak boleh lebih dari Amount Incurred'}); setError(`amount_approved`, { message: 'Total Amount Approve tidak boleh lebih dari Total Amount Incurred' });
} else {
clearErrors(`amount_approved`);
}
} else if (limitAmount != 999999999) {
let memberUsage = Number(total.totalLimit[benefitData.id]) || 0;
let amountApproved = Number(parseFloat(watch('amount_approved'))) || 0;
// Hitung penggunaan waktu nyata
let realTimeUsage = memberUsage + amountApproved;
// Periksa apakah limitAmount lebih besar dari realTimeUsage
if (limitAmount < realTimeUsage) {
setError(`amount_approved`, { message: `Total Amount Approve sudah melebihi limit ${ fNumber(limitAmount) } , silakan isikan di Amount Excess` });
} else if (totalAll().totalAmountApproved > totalAll().totalAmountIncurred){
// setValue(`benefit_data.${key}.amount_approved`, 0);
setError(`amount_approved`, {message: 'Amount Approve tidak boleh lebih dari Amount Incurred'});
} else {
clearErrors(`amount_approved`);
}
} else { } else {
clearErrors(`amount_approved`); if (totalAll().totalAmountApproved > totalAll().totalAmountIncurred) {
setError(`amount_approved`, { message: 'Total Amount Approve tidak boleh lebih dari Total Amount Incurred' });
} else {
clearErrors(`amount_approved`);
}
} }
} else { } else {
if (totalAll().totalAmountApproved > totalAll().totalAmountIncurred){ if (totalAll().totalAmountApproved > totalAll().totalAmountIncurred){
// setValue(`benefit_data.${key}.amount_approved`, 0);
setError(`amount_approved`, {message: 'Amount Approve tidak boleh lebih dari Amount Incurred'}); setError(`amount_approved`, {message: 'Amount Approve tidak boleh lebih dari Amount Incurred'});
} else { } else {
clearErrors(`amount_approved`); clearErrors(`amount_approved`);
@@ -128,6 +145,19 @@ export default function DialogEditBenefit({id, data, setOpenDialog, openDialog,
} }
} }
const handleOnChangeNotApprove = (key, value) => {
let amountApproved = Number(parseFloat(watch('amount_approved'))) || 0;
let amountNotApproved = Number(parseFloat(watch('amount_not_approved'))) || 0;
let amountIncurred = Number(parseFloat(watch('amount_incurred'))) || 0;
setValue(`excess_paid`, value);
console.log(amountApproved + amountNotApproved, amountIncurred, 'test')
if ((amountApproved + amountNotApproved) !== amountIncurred) {
setError(`amount_not_approved`, {message: 'Amount Not Approve tidak sama dengan total Amount Incurred'});
} else {
clearErrors(`amount_not_approved`);
}
};
// if (totalAmountIncurred !== (totalAmountApproved+totalAmountNotApproved)){ // if (totalAmountIncurred !== (totalAmountApproved+totalAmountNotApproved)){
// // alert('Total Incurred tidak sama dengan Total Approve + Total Not Approve') // // alert('Total Incurred tidak sama dengan Total Approve + Total Not Approve')
// // setValue('amount_approved', data?.amount_approved) // // setValue('amount_approved', data?.amount_approved)
@@ -237,6 +267,10 @@ export default function DialogEditBenefit({id, data, setOpenDialog, openDialog,
name={`amount_not_approved`} name={`amount_not_approved`}
placeholder='Amount Not Approved' placeholder='Amount Not Approved'
required required
onChange={(event) => {
setValue(`amount_not_approved`, event.target.value)
handleOnChangeNotApprove(id, event.target.value)}
}
/> />
</Grid> </Grid>
</Grid> </Grid>

View File

@@ -140,7 +140,7 @@ export default function Detail() {
totalAmountApproved : totalAmountApprove, totalAmountApproved : totalAmountApprove,
totalAmountNotApproved : totalAmountNotApprove, totalAmountNotApproved : totalAmountNotApprove,
totalExcessPaid : totalExcessPaid, totalExcessPaid : totalExcessPaid,
totalLimit : requestLog?.member_usage, totalLimit : requestLog?.member_usage_benefit,
benefit : requestLog?.benefit, benefit : requestLog?.benefit,
} }
// Handle Delete File LOG // Handle Delete File LOG

View File

@@ -60,7 +60,7 @@ export type DetailFinalLogType = {
exclusion : Exclusion[], exclusion : Exclusion[],
medicine : Medicine[], medicine : Medicine[],
files : file[], files : file[],
member_usage : number member_usage_benefit : number
} }
export type Diagnosis = { export type Diagnosis = {