Merge remote-tracking branch 'origin/staging' into origin/production

This commit is contained in:
Linksehat Staging Server
2024-03-05 13:41:28 +07:00
41 changed files with 3431 additions and 2144 deletions

View File

@@ -21,8 +21,18 @@ use Modules\Internal\Transformers\ClaimEditResource;
use Modules\Internal\Transformers\ClaimHistoryCareResource;
use Box\Spout\Reader\Common\Creator\ReaderEntityFactory;
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
use Box\Spout\Writer\Common\Creator\Style\StyleBuilder;
use Box\Spout\Common\Entity\Style\CellAlignment;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\View;
use Maatwebsite\Excel\Facades\Excel;
use Illuminate\Support\Facades\Storage;
use App\Exports\FailedRowsExport; // Import class export Excel
use Modules\Internal\Transformers\RequestLogResource;
use App\Models\RequestLog;
use PDF;
@@ -34,41 +44,436 @@ class ClaimController extends Controller
*/
public function index(Request $request)
{
// $serviceCode = 'IP';
$claims = Claim::with([
'member',
'member.currentCorporate',
'member.currentCorporate.currentPolicy',
// 'member.currentPlan' => function($memberPlan) use ($serviceCode) {
// $memberPlan->where('plans.service_code', $serviceCode);
// },
'member.currentPlan' => function($memberPlan) {
$memberPlan->join('claim_requests', 'claim_requests.service_code', '=', 'plans.service_code');
},
'diagnoses' => function ($diagnosis) {
$diagnosis->where('type', 'primary');
},
'diagnoses.icd',
'benefit',
'claimRequest',
'claimRequest.service',
])
->when($request->search, function ($q, $search) {
$q->where(function ($subQuery) use ($search) {
$subQuery->whereHas('claimRequest', function ($claimRequest) use ($search) {
$claimRequest->where('code', 'LIKE', "%" . $search . "%");
})
->orWhereHas('member', function ($member) use ($search) {
$member->where('name', 'LIKE', "%" . $search . "%");
});
$limit = $request->has('per_page') ? $request->input('per_page') : 10;
$results = DB::table('claim_requests')
->leftJoin('request_logs', 'claim_requests.request_log_id','=', 'request_logs.id')
->leftJoin('members', 'request_logs.member_id', '=', 'members.id')
// ->leftJoin('member_plans', 'member_plans.member_id', '=', 'members.id')
->when($request->input('search'), function ($query, $search) {
$query->where(function ($query) use ($search) {
$query->orWhere('members.name', 'like', "%" . $search . "%");
$query->orWhere('claim_requests.code', 'like', "%" . $search . "%");
$query->orWhere('members.member_id', 'like', "%" . $search . "%");
});
})
->where('status', '!=', 'requested') // Penjagaan agar approve baru masuk ke claim management
->latest()
->paginate(10);
->when($request->has('orderBy'), function ($query) use ($request) {
$orderBy = $request->orderBy;
$direction = $request->order ?? 'asc';
$query->orderBy($orderBy, $direction);
})
->when($request->input('start_date') , function ($query, $start_date) {
$query->where(function ($query) use ($start_date) {
$query->where('claim_requests.created_at', '>=', $start_date);
});
})
->when($request->input('end_date') , function ($query, $end_date) {
$query->where(function ($query) use ($end_date) {
$query->where('claim_requests.created_at', '<=', $end_date);
});
})
->when($request->input('provider') , function ($query, $provider) {
$query->where(function ($query) use ($provider) {
$query->where('request_logs.organization_id', '=', $provider);
});
})
->where('claim_management', '=', 1)
->select(
'claim_requests.id',
'request_logs.id AS id_log',
'claim_requests.code as code',
'members.name',
DB::raw('
(SELECT members.member_id FROM members WHERE members.id = claim_requests.member_id LIMIT 1) AS member_id
'),
'claim_requests.created_at',
// DB::raw('
// (SELECT plans.code FROM plans WHERE plans.id = member_plans.plan_id LIMIT 1) AS plan_code
// '),
DB::raw('
(SELECT plans.code
FROM plans
WHERE plans.id IN (
SELECT member_plans.plan_id
FROM member_plans
WHERE member_plans.member_id = claim_requests.member_id
)
AND plans.service_code = claim_requests.service_code) AS plan_code
'),
DB::raw('
(SELECT services.description FROM services WHERE services.code = claim_requests.service_code LIMIT 1) AS service_code
'),
DB::raw('
(SELECT corporate_policies.code FROM corporate_policies WHERE corporate_policies.id = claim_requests.policy_id LIMIT 1) AS corporate_policies
'),
DB::raw('
(SELECT organizations.name FROM organizations WHERE organizations.id = request_logs.organization_id LIMIT 1) AS provider
'),
DB::raw('
(Select SUM(request_log_benefits.amount_approved) as tot_bill FROM request_log_benefits
WHERE request_log_benefits.request_log_id = request_logs.id LIMIT 1) AS tot_bill
'),
'claim_requests.status_claim_management as status',
)
->paginate($limit);
return response()->json($claims);
return response()->json(Helper::paginateResources($results));
}
public function downloadTemplate()
{
return Helper::responseJson([
'file_name' => "Template - Claim - Management.xlsx",
"file_url" => url('files/Template - Claim - Management.xlsx')
]);
}
public function import(Request $request)
{
if ($request->hasFile('file')) {
$file = $request->file('file');
$data = Excel::toArray([], $file);
$processedData = $this->processCategoryNames($data);
$importedRows = 0;
$failedRows = [];
foreach ($processedData as $row) {
try {
$affectedRows = DB::table('claim_requests')
->where('code','=', $row['code'])
->where('claim_management','=', 1)
->update([
'status_claim_management' => $row['qc'] == 'Y' ? 'approved' : 'declined',
'reason_decline' => $row['reason'] ? $row['reason'] : null,
'approval_by_claim_management' => auth()->user()->id,
'approval_date_claim_management' => date('Y-m-d H:i:s'),
]);
if ($affectedRows === 0) {
$failedRows[] = $row;
} else {
$importedRows += $affectedRows;
}
} catch (\Exception $e) {
$failedRows[] = $row;
}
}
$response = [
'message' => 'File uploaded and data saved to database',
'data' => [
'total_success_row' => $importedRows,
'total_failed_row' => count($failedRows),
'failed_rows' => $failedRows,
],
];
return response()->json($response);
}
return response()->json(['error' => 'No file uploaded.']);
}
private function processCategoryNames($data)
{
$header = [];
$row = [];
for ($i = 1; $i < count($data[0]); $i++) {
$row[] = $data[0][$i];
$header[] = $data[0][0];
}
$filed = [];
foreach ($header[0] as $value)
{
$modelColumn = strtolower(preg_replace('/\s+/', '_', trim($value)));
$modelColumn = str_replace(['*', ' '], '', $modelColumn);
if($modelColumn)
{
$filed[] = $modelColumn;
}
}
$result = [];
foreach ($row as $subarray) {
$trimmedSubarray = [];
for ($i = 0; $i < count($filed); $i++) {
$trimmedSubarray[$filed[$i]] = $subarray[$i] ? $subarray[$i] : null;
}
$result[] = $trimmedSubarray;
}
return $result;
}
public function exportClaimManagement(Request $request)
{
$start_date = $request->input('start_date') ? $request->input('start_date') : 'all';
$end_date = $request->input('end_date') ? $request->input('end_date') : 'all';
$writer = WriterEntityFactory::createXLSXWriter();
$writer->openToFile(public_path('files/Report-Data-Claim-Management-'.$start_date.'-'.$end_date.'.xlsx'));
$header = [
'No',
'Code',
'Name',
'Member ID',
'Date Submission',
'Plan ID',
'Service',
'Policy Number',
'Provider',
'Total Billing',
];
$style = (new StyleBuilder())
->setFontBold()
// ->setFontSize(15)
// ->setFontColor(Color::BLUE)
// ->setShouldWrapText()
->setCellAlignment(CellAlignment::LEFT)
// ->setBackgroundColor(Color::YELLOW)
->build();
$headerRow = WriterEntityFactory::createRowFromArray($header, $style);
$writer->addRow($headerRow);
// ============================
$results = DB::table('claim_requests')
->leftJoin('request_logs', 'claim_requests.request_log_id','=', 'request_logs.id')
->leftJoin('members', 'request_logs.member_id', '=', 'members.id')
// ->leftJoin('member_plans', 'member_plans.member_id', '=', 'members.id')
->when($request->input('search'), function ($query, $search) {
$query->where(function ($query) use ($search) {
$query->orWhere('members.name', 'like', "%" . $search . "%");
$query->orWhere('claim_requests.code', 'like', "%" . $search . "%");
$query->orWhere('members.member_id', 'like', "%" . $search . "%");
});
})
->when($request->has('orderBy'), function ($query) use ($request) {
$orderBy = $request->orderBy;
$direction = $request->order ?? 'asc';
$query->orderBy($orderBy, $direction);
})
->when($request->input('start_date') , function ($query, $start_date) {
$query->where(function ($query) use ($start_date) {
$query->where('claim_requests.created_at', '>=', $start_date);
});
})
->when($request->input('end_date') , function ($query, $end_date) {
$query->where(function ($query) use ($end_date) {
$query->where('claim_requests.created_at', '<=', $end_date);
});
})
->when($request->input('provider') , function ($query, $provider) {
$query->where(function ($query) use ($provider) {
$query->where('request_logs.organization_id', '=', $provider);
});
})
->where('claim_management', '=', 1)
->select(
'claim_requests.id',
'request_logs.id AS id_log',
'claim_requests.code as code',
'members.name',
DB::raw('
(SELECT members.member_id FROM members WHERE members.id = claim_requests.member_id LIMIT 1) AS member_id
'),
'claim_requests.created_at',
DB::raw('
(SELECT plans.code
FROM plans
WHERE plans.id IN (
SELECT member_plans.plan_id
FROM member_plans
WHERE member_plans.member_id = claim_requests.member_id
)
AND plans.service_code = claim_requests.service_code) AS plan_code
'),
// DB::raw('
// (SELECT plans.code FROM plans WHERE plans.id = member_plans.plan_id LIMIT 1) AS plan_code
// '),
DB::raw('
(SELECT services.description FROM services WHERE services.code = claim_requests.service_code LIMIT 1) AS service_code
'),
DB::raw('
(SELECT corporate_policies.code FROM corporate_policies WHERE corporate_policies.id = claim_requests.policy_id LIMIT 1) AS corporate_policies
'),
DB::raw('
(SELECT organizations.name FROM organizations WHERE organizations.id = request_logs.organization_id LIMIT 1) AS provider
'),
DB::raw('
(Select SUM(request_log_benefits.amount_approved) as tot_bill FROM request_log_benefits
WHERE request_log_benefits.request_log_id = request_logs.id LIMIT 1) AS tot_bill
'),
'claim_requests.status_claim_management as status',
)
->get();
$no=0;
$gr_total = 0;
foreach($results as $item)
{
$gr_total += $item->tot_bill;
$no++;
$rowData = [
$no,
$item->code,
$item->name,
$item->member_id,
$item->created_at,
$item->plan_code,
$item->service_code,
$item->corporate_policies,
$item->provider,
$item->tot_bill ? $item->tot_bill : 0
];
$style = (new StyleBuilder())
//->setFontBold()
// ->setFontSize(15)
// ->setFontColor(Color::BLUE)
// ->setShouldWrapText()
->setCellAlignment(CellAlignment::LEFT)
// ->setBackgroundColor(Color::YELLOW)
->build();
$row = WriterEntityFactory::createRowFromArray($rowData, $style);
$writer->addRow($row);
}
$footer = [
'Grand Total',
'',
'',
'',
'',
'',
'',
'',
'',
$gr_total,
];
$style = (new StyleBuilder())
->setFontBold()
// ->setFontSize(15)
// ->setFontColor(Color::BLUE)
// ->setShouldWrapText()
->setCellAlignment(CellAlignment::LEFT)
// ->setBackgroundColor(Color::YELLOW)
->build();
$footerRow = WriterEntityFactory::createRowFromArray($footer, $style);
$writer->addRow($footerRow);
$writer->close();
return Helper::responseJson([
'file_name' => 'Report-Data-Claim-Management-'. $start_date.'-'.$end_date,
"file_url" => url('files/Report-Data-Claim-Management-'. $start_date.'-'.$end_date.'.xlsx')
]);
}
public function exportFiled(Request $request)
{
$writer = WriterEntityFactory::createXLSXWriter();
$writer->openToFile(public_path('files/Report-Data-Filed-Import.xlsx'));
$header = [
'Code*',
'QC*',
'Reason'
];
$style = (new StyleBuilder())
->setFontBold()
// ->setFontSize(15)
// ->setFontColor(Color::BLUE)
// ->setShouldWrapText()
->setCellAlignment(CellAlignment::LEFT)
// ->setBackgroundColor(Color::YELLOW)
->build();
$headerRow = WriterEntityFactory::createRowFromArray($header, $style);
$writer->addRow($headerRow);
// ============================
foreach($request->params as $item)
{
$rowData = [
$item['code'],
$item['qc'],
$item['reason']
];
$style = (new StyleBuilder())
//->setFontBold()
// ->setFontSize(15)
// ->setFontColor(Color::BLUE)
// ->setShouldWrapText()
->setCellAlignment(CellAlignment::LEFT)
// ->setBackgroundColor(Color::YELLOW)
->build();
$row = WriterEntityFactory::createRowFromArray($rowData, $style);
$writer->addRow($row);
}
$footer = [
'',
'',
'',
];
$style = (new StyleBuilder())
->setFontBold()
// ->setFontSize(15)
// ->setFontColor(Color::BLUE)
// ->setShouldWrapText()
->setCellAlignment(CellAlignment::LEFT)
// ->setBackgroundColor(Color::YELLOW)
->build();
$footerRow = WriterEntityFactory::createRowFromArray($footer, $style);
$writer->addRow($footerRow);
$writer->close();
return Helper::responseJson([
'file_name' => 'Report-Data-Filed-Import',
"file_url" => url('files/Report-Data-Filed-Import.xlsx')
]);
}
public function getProvider(Request $request)
{
$providers = DB::table('organizations')
->where('organizations.type', '=', 'hospital')
->where('organizations.status', '=', 'active')
->select(
'organizations.id',
'organizations.name'
)
->orderBy('name', 'asc')
->get();
return response()->json($providers);
}
public function cekStatus($id)
{
$cek = DB::table('claim_requests')
->where('claim_requests.id', '=', $id)
->select('claim_requests.status_claim_management as status')
->first();
$data['cek'] = $cek;
$member = DB::table('claim_requests')
->join('request_logs', 'claim_requests.request_log_id','=', 'request_logs.id')
->join('members', 'request_logs.member_id', '=', 'members.id')
->where('claim_requests.id', '=', $id)
->select('claim_requests.code','members.name','claim_requests.created_at', DB::raw('
(SELECT services.name FROM services WHERE services.code = request_logs.service_code LIMIT 1) AS service_type
'),)
->first();
$data['member'] = $member;
return response()->json($data);
}
/**
@@ -334,21 +739,18 @@ class ClaimController extends Controller
return Helper::responseJson([], message: "Diagnosis berhasil di update");
}
public function decline($id)
public function decline(Request $request, $id)
{
//Get claim request id
$data_claim_requests = DB::table('claim_requests')
->leftJoin('claims', 'claim_requests.id', '=', 'claims.claim_request_id')
->where('claims.id', $id)
->select('claim_requests.id')
->first();
$id = $data_claim_requests->id;
DB::table('claims')
->where('claim_request_id', $id)
DB::table('claim_requests')
->where('claim_requests.id', $id)
->update(
[
'status' => 'declined'
'status' => 'declined',
'status_claim_management' => 'declined',
'reason_decline' => $request->reasonDecline ? $request->reasonDecline : '',
'approval_date_claim_management' => date('Y-m-d H:i:s'),
'approval_by_claim_management' => auth()->user()->id
]
);
@@ -370,19 +772,14 @@ class ClaimController extends Controller
public function approve($id)
{
//Get claim request id
$data_claim_requests = DB::table('claim_requests')
->leftJoin('claims', 'claim_requests.id', '=', 'claims.claim_request_id')
->where('claims.id', $id)
->select('claim_requests.id')
->first();
$id = $data_claim_requests->id;
DB::table('claims')
->where('claim_request_id', $id)
DB::table('claim_requests')
->where('claim_requests.id', $id)
->update(
[
'status' => 'approved'
'status' => 'approved',
'status_claim_management' => 'approved',
'approval_date_claim_management' => date('Y-m-d H:i:s'),
'approval_by_claim_management' => auth()->user()->id
]
);

View File

@@ -17,15 +17,23 @@ use App\Services\ClaimRequestService;
use App\Exceptions\ImportRowException;
use App\Events\ClaimRequested;
use Box\Spout\Reader\Common\Creator\ReaderEntityFactory;
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
use Box\Spout\Writer\Common\Creator\Style\StyleBuilder;
use Box\Spout\Common\Entity\Style\CellAlignment;
use App\Models\File;
use App\Models\FilesMcu;
use Illuminate\Support\Facades\DB;
use App\Models\Member;
use App\Models\MemberPlan;
use App\Models\Plan;
use App\Models\RequestLogBenefit;
use Carbon\Carbon;
class ClaimRequestController extends Controller
{
private static $code_prefix = 'CRQ-C';
private static $code_prefix = 'CLAIM';
/**
* Display a listing of the resource.
@@ -41,11 +49,17 @@ class ClaimRequestController extends Controller
});
})
->when($request->start_date, function ($q, $startDate) {
$q->where('submission_date', '>', $startDate);
$q->where('submission_date', '>', Carbon::parse($startDate)->subDay());
})
->when($request->end_date, function ($q, $endDate) {
$q->where('submission_date', '<', $endDate);
->when($request->end_date, function ($q, $endDate) use ($request) {
// Jika tanggal akhir diberikan dan tidak sama dengan tanggal mulai
if ($request->start_date != $request->end_date) {
$q->where('submission_date', '<', Carbon::parse($endDate)->addDay());
} else {
$q->where('submission_date', '<', Carbon::parse($endDate)->addDay());
}
})
->when($request->service_code, function ($q, $serviceCode) {
$q->whereIn('service_code', $serviceCode);
})
@@ -62,7 +76,7 @@ class ClaimRequestController extends Controller
})
->with(['member', 'files', 'service', 'member.currentPolicy'])
->paginate();
return Helper::paginateResources(ClaimRequestResource::collection($claimRequests));
}
@@ -429,6 +443,7 @@ class ClaimRequestController extends Controller
$import = new ImportService();
$import->read($fileRead);
$import->write($fileWrite, 'xsls');
foreach ($import->sheetsIterator() as $sheetIndex => $sheet) {
if ($sheetIndex == 1) { // Rename First Sheet to Writer
$firstWriterSheet = $import->writer->getCurrentSheet();
@@ -445,6 +460,9 @@ class ClaimRequestController extends Controller
$result_headers = array_merge($result_headers, ['Ingest Code', 'Ingest Note']);
$import->addArrayToRow($result_headers);
$imported_claim_data = 0;
$failed_claim_data = [];
$doc_headers_indexes = [];
foreach ($sheet->getRowIterator() as $index => $row) {
if ($index == 1) { // First Row Must be Header
@@ -465,25 +483,28 @@ class ClaimRequestController extends Controller
}
try { // Process the Row Data
$claimRequestService = new ClaimRequestService();
$claimRequestService->handleClaimRequestRow($row_data);
// Write Success Result to File
// $import->read($fileRead);
// $import->write($fileWrite, 'xsls');
$result_headers = array_merge($row_data, ['Ingest Code' =>200, 'Ingest Note' => 'Success']);
// Mengambil tanggal dari objek DateTime
$dateSubmission = Helper::dateParser($result_headers['date_submission']); // Format tanggal sesuai kebutuhan
// Mengubah nilai date_submission menjadi string tanggal
$result_headers['date_submission'] = $dateSubmission;
// dd($result_headers);
$import->addArrayToRow($result_headers, $sheet->getName());
$imported_claim_data++;
} catch (ImportRowException $e) {
// Write Data Validation Error to File
// $import->read($fileRead);
// $import->write($fileWrite, 'xsls');
$import->addArrayToRow(array_merge($row_data, [
$new_claim_data = $import->addArrayToRow(array_merge($row_data, [
'Ingest Code' => $e->getCode(),
'Ingest Note' => $e->getMessage(),
]), $sheet->getName());
$failed_claim_data[] = ['row_number' => $index, 'error' => $e->getMessage(),'data' => $new_claim_data];
}
// catch (\Exception $e) {
// // throw new \Exception($e);
@@ -502,104 +523,20 @@ class ClaimRequestController extends Controller
$import->reader->close();
Storage::delete('temp/' . $file_name);
$import->writer->close();
return [
// 'total_successed_row' => $imported_plan_data,
// 'total_failed_row' => count($failed_plan_data),
// 'failed_row' => $failed_plan_data,
'result_file' => [
'url' => Storage::disk('public')->url('temp/result-' . $file_name),
'name' => 'result-' . $file_name,
'total_success_row' => $imported_claim_data,
'total_failed_row' => count($failed_claim_data),
'failed_row' => $failed_claim_data,
]
];
}
public function claimRequestDetail($claimRequestId)
{
// $status = DB::table('claim_requests')
// ->leftJoin('claims', 'claim_requests.id', '=', 'claims.claim_request_id')
// ->leftJoin('members', 'claim_requests.member_id', '=', 'members.id')
// ->leftJoin('corporate_employees', 'members.id', '=', 'corporate_employees.member_id')
// ->leftJoin('corporate_divisions', 'corporate_employees.division_id', '=', 'corporate_divisions.id')
// ->where('claim_requests.id', '=', $claimRequestId)
// ->select(
// 'claim_requests.submission_date',
// 'claim_requests.code',
// DB::raw('
// CASE
// WHEN claim_requests.status = "requested" THEN "requested"
// WHEN claim_requests.status = "approved" AND claims.status = "approved" THEN "approved"
// WHEN claim_requests.status = "approved" AND claims.status = "declined" THEN "declined"
// WHEN claim_requests.status = "approved" AND claims.status = "disbrusmented" THEN "disbrusmented"
// /*WHEN claim_requests.status = "approved" AND claims.status = "received" THEN "pending"*/
// WHEN claim_requests.status = "approved" AND claims.status = "received" THEN "reviewed"
// ELSE ""
// END AS status
// ')
// )
// ->first();
// $results['status'] = $status;
// $timeline = DB::table('claim_logs')
// ->where('claim_logs.claim_request_id', '=', $claimRequestId)
// ->select(
// DB::raw('
// CASE
// WHEN claim_logs.status = "requested" THEN "Request"
// WHEN claim_logs.status = "reviewed" THEN "Review"
// WHEN claim_logs.status = "approved" THEN "Approval"
// WHEN claim_logs.status = "declined" THEN "Decline"
// ELSE "-"
// END AS txt_status
// '),
// DB::raw('
// CASE
// WHEN claim_logs.status = "requested" THEN "#159C9C"
// WHEN claim_logs.status = "reviewed" THEN "#0C53B7"
// WHEN claim_logs.status = "approved" THEN "#229A16"
// WHEN claim_logs.status = "declined" THEN "#FF4842"
// ELSE "-"
// END AS txt_status_color
// '),
// DB::raw('
// CASE
// WHEN claim_logs.status = "requested" THEN "#00AB5529"
// WHEN claim_logs.status = "reviewed" THEN "#1890FF29"
// WHEN claim_logs.status = "approved" THEN "#54D62C29"
// WHEN claim_logs.status = "declined" THEN "#FF48427A"
// ELSE "-"
// END AS txt_status_backgroundColor
// '),
// 'claim_logs.date',
// 'claim_logs.description',
// 'claim_logs.status'
// )
// ->orderBy('claim_logs.id', 'desc')
// ->get();
// $results['timeline'] = $timeline;
// $request_files = DB::table('claim_request_files')
// ->where('claim_request_files.claim_request_id', '=', $claimRequestId)
// ->select(
// 'claim_request_files.*',
// DB::raw('(SELECT files.fileable_id FROM files WHERE files.fileable_id = claim_request_files.claim_request_id AND files.type = claim_request_files.type LIMIT 1) AS check_files'),
// )
// ->get();
// $results['request_files'] = $request_files;
// $documents = DB::table('files')
// ->where('fileable_type', 'App\Models\ClaimRequest')
// ->where('fileable_id', $claimRequestId)
// ->select('original_name', \DB::raw("CONCAT('" . env('APP_URL') . "/storage/', path) as path"), 'type')
// ->orderBy('id', 'desc')
// ->get();
// $results['documents'] = $documents;
// $dialog_submits = DB::table('claim_requests')
// ->leftJoin('members', 'claim_requests.member_id','=', 'members.id')
// ->where('claim_requests.id', $claimRequestId)
// ->select('claim_requests.code', 'members.name', 'claim_requests.submission_date', 'claim_requests.service_code','claim_requests.status')
// ->first();
// $results['dialog_submits'] = $dialog_submits;
// return Helper::responseJson($results);
$claimRequest = ClaimRequest::findOrFail($claimRequestId);
$claimRequest->load([
'requestLog',
@@ -704,10 +641,6 @@ class ClaimRequestController extends Controller
public static function getNextCode()
{
// $last_number = ClaimRequest::max('code');
// $next_number = empty($last_number) ? 1 : ((int) explode('-', $last_number)[2] + 1);
// return self::makeCode($next_number);
$last_numeric_code = ClaimRequest::select(DB::raw('MAX(CAST(SUBSTRING_INDEX(code, "-", -1) AS SIGNED)) as max_numeric_code'))
->whereRaw('SUBSTRING_INDEX(code, "-", -1) REGEXP "^[0-9]+$"')
->value('max_numeric_code');
@@ -725,11 +658,17 @@ class ClaimRequestController extends Controller
public static function makeCode($next_number)
{
// Pastikan $next_number adalah integer positif
$next_number = max(1, (int) $next_number);
// Menghasilkan kode dengan format yang diinginkan
return self::$code_prefix . '-' . str_pad($next_number, 5, '0', STR_PAD_LEFT);
// Pastikan $next_number adalah integer positif
$next_number = max(1, (int) $next_number);
$requestLogData = RequestLog::where('id', $request_log_id)->first();
$organization = Organization::where(['id' => $requestLogData->organization_id, 'type' => 'hospital'])->first('code');
$provideCode = $organization ? $organization->code : '';
$member = Member::with('currentCorporate')->where(['id' => $requestLogData->member_id])->first();
$sparator = '.';
$date = date('ymd');
// Menghasilkan kode dengan format yang diinginkan
return self::$code_prefix . $sparator. 'H' . $sparator. $provideCode . $sparator. $date. $sparator . $member->currentPolicy->code . $sparator. $member->member_id . $sparator. str_pad($next_number, 6, '0', STR_PAD_LEFT);
}
public function requestFiles(Request $request, $claim_id)
@@ -788,4 +727,309 @@ class ClaimRequestController extends Controller
return Helper::responseJson(data: $request->toArray(), message: 'Invoice Success Uploaded');
}
public function exportClaimRequest(Request $request)
{
$claimRequests = ClaimRequest::query()
->when($request->search, function ($q, $search) {
$q->where('code', 'LIKE', "%".$search."%");
$q->orWhereHas('member', function ($subQuery) use ($search) {
$subQuery->where('name', 'LIKE', "%".$search."%");
});
})
->when($request->start_date, function ($q, $startDate) {
$q->where('submission_date', '>', Carbon::parse($startDate)->subDay());
})
->when($request->end_date, function ($q, $endDate) use ($request) {
// Jika tanggal akhir diberikan dan tidak sama dengan tanggal mulai
if ($request->start_date != $request->end_date) {
$q->where('submission_date', '<', Carbon::parse($endDate)->addDay());
} else {
$q->where('submission_date', '<=', Carbon::parse($endDate));
}
})
->when($request->service_code, function ($q, $serviceCode) {
$q->whereIn('service_code', $serviceCode);
})
->when($request->orderBy, function ($q, $orderBy) use ($request) {
if (in_array($orderBy, ['submission_date', 'code'])) {
$q->orderBy($orderBy, $request->order);
}
})
->when(empty($request->orderBy), function ($q) {
$q->orderBy('created_at', 'desc');
})
->when($request->status, function($q, $status) {
$q->where('status', $status);
})
->with(['member', 'member.currentCorporate', 'files', 'service', 'member.currentPolicy', 'requestLog', 'requestLog.organization',])
->addSelect([
'tot_billing' => function ($query) {
$query->select(DB::raw('SUM(request_log_benefits.amount_approved)'))
->from('request_log_benefits')
->whereColumn('request_log_benefits.request_log_id', 'claim_requests.request_log_id')
->limit(1);
}
])
->get();
$writer = WriterEntityFactory::createXLSXWriter();
$writer->openToFile(public_path('files/Report-Data-Claim-Request.xlsx'));
$header = [
'No',
'Code Claim',
'Date Claim Submission',
'Code LOG',
'Date Submission',
'Date Admission',
'Date Discharge',
'Provider',
'Member ID (BN)',
'Member Name',
'Member Name Principal',
'Plan Code',
'Payor ID',
'Corporate name',
'Policy Number',
'Total Billing',
'Benefit Code',
'Benefit Desc',
'Amt Incurred',
'Amt Approved',
'Amt Not Approved',
'Excess Paid',
// 'Reason',
'Diagnosis',
'Keterangan',
'Catatan',
'Status',
'QC'
];
$style = (new StyleBuilder())
->setFontBold()
// ->setFontSize(15)
// ->setFontColor(Color::BLUE)
// ->setShouldWrapText()
->setCellAlignment(CellAlignment::LEFT)
// ->setBackgroundColor(Color::YELLOW)
->build();
$headerRow = WriterEntityFactory::createRowFromArray($header, $style);
$writer->addRow($headerRow);
$results = $claimRequests;
$no=0;
$gr_total = 0;
$rowData=[];
foreach($results as $item)
{
// $gr_total += $item->tot_bill;
// $requestLogData = RequestLogBenefit::selectRaw('*,
// (SELECT code FROM benefits WHERE benefits.id = request_log_benefits.benefit_id) AS benefit_code,
// (SELECT description FROM benefits WHERE benefits.id = request_log_benefits.benefit_id) AS benefit_description,
// sum(amount_incurred) AS total_incurred'
// )
// ->where(['request_log_id' => $item->request_log_id, 'deleted_at' => null])
// ->get()->toArray();
//Data Benefit
$requestLogData = DB::table('request_log_benefits')
->where('request_log_benefits.request_log_id', '=', $item->request_log_id)
->select(
'*',
// DB::raw('SUM(request_log_benefits.amount_incurred) AS total_incurred'),
DB::raw('
(Select benefits.description FROM benefits
WHERE benefits.id = request_log_benefits.benefit_id LIMIT 1) AS benefit_description
'),
DB::raw('
(Select benefits.code FROM benefits
WHERE benefits.id = request_log_benefits.benefit_id LIMIT 1) AS benefit_code
')
)
->get();
if ($item->member){
$member = Member::where('member_id', $item->member->principal_id)->first();
$memberPrincipal = $member->name;
$memberPlan = MemberPlan::where('member_id', $item->member->id)->get('plan_id')->toArray();
$plan= Plan::whereIn('id', $memberPlan)->where('service_code', $item->requestLog->service_code)->first();
$planCode = $plan->code;
if ($item->member->currentCorporate->id == $item->requestLog->organization->corporate_id_partner){
$payor = $item->member->currentCorporate->name;
} else {
$payor = 'LinkSehat';
}
} else {
$memberPrincipal = '-';
$planCode = '-';
$payor = '-';
}
if (!$requestLogData->isEmpty()){
foreach($requestLogData as $key => $data){
$no++;
if ($key == 0){
$gr_total += $item->tot_billing;
}
$rowItem = [
$no,
$item->code,
$item->submission_date ? $item->submission_date : '',
$item->requestLog ? $item->requestLog->code : '-',
$item->requestLog ? Helper::dateParser($item->requestLog->created_at) : '-', // submission = created_at
$item->requestLog ? $item->requestLog->submission_date : '-',
$item->requestLog ? $item->requestLog->discharge_date : '-',
$item->requestLog ? $item->requestLog->organization->name : '-',
$item->member ? $item->member->member_id : '-',
$item->member ? $item->member->name : '-',
$memberPrincipal,
$key == 0 ? $planCode : '',
$payor,
$item->member ? $item->member->currentCorporate->name : '-',
$item->member ? $item->member->currentPolicy->code : '-',
$key == 0 ? $item->tot_billing : '',
$data->benefit_code,
$data->benefit_description,
$data->amount_incurred ? $data->amount_incurred : '' ,
$data->amount_approved ? $data->amount_approved : '',
$data->amount_not_approved ? $data->amount_not_approved : '',
$data->excess_paid ? $data->excess_paid : '',
// $data->reason ? $data->reason : '',
$item->requestLog ? $item->requestLog->diagnosis : '-',
$item->requestLog ? $item->requestLog->keterangan : '-',
$item->requestLog ? $item->requestLog->catatan : '-',
$item->status ? $item->status : '-'
];
array_push($rowData,$rowItem);
}
} else {
$no++;
if ($item->member){
$member = Member::where('member_id', $item->member->principal_id)->first();
$memberPrincipal = $member->name;
$memberPlan = MemberPlan::where('member_id', $item->member->id)->get('plan_id')->toArray();
$plan= Plan::whereIn('id', $memberPlan)->where('service_code', $item->requestLog->service_code)->first();
$planCode = $plan->code;
if ($item->member->currentCorporate->id == $item->requestLog->organization->corporate_id_partner){
$payor = $item->member->currentCorporate->name;
} else {
$payor = 'LinkSehat';
}
} else {
$memberPrincipal = '-';
$planCode = '-';
$payor = '-';
}
$rowItem = [
$no,
$item->code,
$item->submission_date ? Helper::dateParser($item->submission_date) : '',
$item->requestLog ? $item->requestLog->code : '-',
$item->requestLog ? Helper::dateParser($item->requestLog->created_at) : '-', // submission = created_at
$item->requestLog ? $item->requestLog->submission_date : '-',
$item->requestLog ? $item->requestLog->discharge_date : '-',
$item->requestLog ? $item->requestLog->organization->name : '-',
$item->member ? $item->member->member_id : '-',
$item->member ? $item->member->name : '-',
$memberPrincipal,
$planCode,
$payor,
$item->member ? $item->member->currentCorporate->name : '-',
$item->member ? $item->member->currentPolicy->code : '-',
'',
'',
'',
'',
'',
'',
'',
// '',
$item->requestLog ? $item->requestLog->diagnosis : '-',
$item->requestLog ? $item->requestLog->keterangan : '-',
$item->requestLog ? $item->requestLog->catatan : '-',
$item->status ? $item->status : '-'
];
array_push($rowData,$rowItem);
}
}
$style = (new StyleBuilder())
//->setFontBold()
// ->setFontSize(15)
// ->setFontColor(Color::BLUE)
// ->setShouldWrapText()
->setCellAlignment(CellAlignment::LEFT)
// ->setBackgroundColor(Color::YELLOW)
->build();
foreach ($rowData as $rowItem) {
// if (is_numeric($rowItem[13])) {
// // Jumlahkan nilai angka ke total
// $grand_total_billing += $rowItem[13];
// }
$row = WriterEntityFactory::createRowFromArray($rowItem, $style);
$writer->addRow($row);
}
//Footer
$footer = [
'Total',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
$gr_total,
'',
'',
'',
'',
'',
'',
''
];
$style = (new StyleBuilder())
->setFontBold()
// ->setFontSize(15)
// ->setFontColor(Color::BLUE)
// ->setShouldWrapText()
->setCellAlignment(CellAlignment::LEFT)
// ->setBackgroundColor(Color::YELLOW)
->build();
$grand_total_billing = 0;
$footerRow = WriterEntityFactory::createRowFromArray($footer, $style);
$writer->addRow($footerRow);
$writer->close();
return Helper::responseJson([
'file_name' => 'Report-Data-Claim-Request',
"file_url" => url('files/Report-Data-Claim-Request.xlsx')
]);
}
public function submition($id){
$claimRequest = ClaimRequest::findOrFail($id);
$claimRequest->status = 'submission';
$claimRequest->claim_management = 1;
$claimRequest->status_claim_management = 'received';
$claimRequest->submission_date_claim_management = date('Y-m-d H:i:s');
$claimRequest->submission_by_claim_management = auth()->user()->id;
$claimRequest->save();
return response()->json([
'error' => false,
'message' => 'Update succses',
'data' => $claimRequest],
200);
}
}

View File

@@ -559,8 +559,8 @@ class CorporateController extends Controller
break;
case 'claim-request':
return Helper::responseJson([
'file_name' => "Template Format Claim.xlsx",
"file_url" => url('files/Template Format Claim.xlsx')
'file_name' => "Template Claim Request.xlsx",
"file_url" => url('files/Template Claim Request.xlsx')
]);
break;
case 'request-log':