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

This commit is contained in:
Linksehat Staging Server
2024-02-22 08:38:39 +07:00
26 changed files with 1867 additions and 661 deletions

View File

@@ -380,9 +380,9 @@ class ClaimController extends Controller
DB::raw('
(Select persons.nik FROM persons WHERE persons.id = members.person_id LIMIT 1) AS nik
'),
DB::raw('
"LinkSehat" AS penjamin
'),
// DB::raw('
// "LinkSehat" AS penjamin
// '),
DB::raw('
(Select corporates.name FROM corporates
LEFT JOIN corporate_employees ON corporate_employees.corporate_id = corporates.id
@@ -426,6 +426,18 @@ class ClaimController extends Controller
)
->first();
//get penjamin
$penjamin = 'LinkSehat';
if(!empty($dataRumahSakit->corporate_id_partner))
{
$corporate_id_partners = explode(',', $dataRumahSakit->corporate_id_partner);
$valueToCheck = $dataMember->id_perusahaan;
if (in_array($valueToCheck, $corporate_id_partners)) {
$penjamin = $dataMember->nama_perusahaan;
}
}
//Nama Karyawan
$data['namaKaryawan'] = '';
if($dataMember->principal_id)
@@ -480,7 +492,7 @@ class ClaimController extends Controller
!empty($dataMember->name) ? $dataMember->name : '',
$data['namaKaryawan'],
!empty($dataMember->code_plan) ? $dataMember->code_plan : '',
'LinkSehat',
$penjamin,
!empty($dataMember->nama_perusahaan) ? $dataMember->nama_perusahaan : '',
!empty($dataMember->no_polis) ? $dataMember->no_polis : '',
($firtIndex == $index ? $item->tot_bill : ''),
@@ -513,7 +525,7 @@ class ClaimController extends Controller
!empty($dataMember->name) ? $dataMember->name : '',
$data['namaKaryawan'],
!empty($dataMember->code_plan) ? $dataMember->code_plan : '',
'LinkSehat',
$penjamin,
!empty($dataMember->nama_perusahaan) ? $dataMember->nama_perusahaan : '',
!empty($dataMember->no_polis) ? $dataMember->no_polis : '',
'',

View File

@@ -7,6 +7,9 @@ use App\Helpers\Helper;
use App\Models\ClaimRequest;
use App\Models\File;
use App\Models\Member;
use App\Models\RequestLog;
use App\Models\Organization;
use App\Services\ClaimRequestService;
use App\Services\ClaimService;
use Exception;
@@ -26,7 +29,7 @@ class ClaimRequestController extends Controller
* Display a listing of the resource.
* @return Renderable
*/
private static $code_prefix = 'CRQ-H';
private static $code_prefix = 'CLAIM';
public function index(request $request)
{
$claimRequests = ClaimRequest::query()
@@ -85,21 +88,26 @@ class ClaimRequestController extends Controller
else
{
$check_claim_requests = DB::table('claim_requests')
->where('claim_requests.request_log_id', '=', $request->request_logs_id)
->first();
->where('claim_requests.request_log_id', '=', $request->request_logs_id)
->first();
if(!$check_claim_requests)
{
try {
DB::beginTransaction();
$code = $this->getNextCode();
$code = $this->getNextCode($request->request_logs_id);
$member = Member::find($request->member_id);
$requestLogData = RequestLog::where('id',$request->request_logs_id)->first();
$organization = Organization::where(['id' => $requestLogData->organization_id, 'type' => 'hospital'])->first('code');
$provideCode = $organization ? $organization->code : '';
$newClaimRequest = ClaimRequestService::storeClaimRequest(
row: [],
code: $code,
member: $member,
paymentType: 'reimbursement',
paymentType: 'cashless',
serviceCode: $request->service_code,
requestLogID: $request->request_logs_id,
organization_code: $provideCode,
);
// Log History
$newClaimRequest->histories()->create([
@@ -228,21 +236,36 @@ class ClaimRequestController extends Controller
return $claimRequest;
}
public static function getNextCode()
public static function getNextCode($request_log_id = 0)
{
$last_number = ClaimRequest::withTrashed()->max('code');
$last_number_parts = explode('-', $last_number);
$next_number = count($last_number_parts) < 3 ? 1 : ((int) $last_number_parts[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');
// $next_number = 1;
if ($last_numeric_code) {
// // Jika ada kode sebelumnya, pecah kode dan tambahkan 1 ke angka terakhir
// $parts = explode('-', $last_code);
// $last_number = (int) end($parts);
$next_number = $last_numeric_code + 1;
} else {
$next_number = 1;
}
return self::makeCode($next_number, $request_log_id);
}
public static function makeCode($next_number)
public static function makeCode($next_number, $request_log_id)
{
// 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 . '-' . str_pad($next_number, 5, '0', STR_PAD_LEFT);
return self::$code_prefix . $sparator. 'H' . $sparator. $provideCode . $sparator. $date. $sparator . $member->currentPolicy->code . $sparator. $member->member_id . $sparator. str_pad($next_number, 5, '0', STR_PAD_LEFT);
return self::$code_prefix . '.' . str_pad($next_number, 6, '0', STR_PAD_LEFT);
}
public function get_claim_requests(Request $request)

View File

@@ -37,9 +37,18 @@ class ClaimRequestController extends Controller
->when($request->search, function ($q, $search) {
$q->where('code', 'LIKE', "%".$search."%");
$q->orWhereHas('member', function ($subQuery) use ($search) {
$subQuery->where('name', 'LIKE', "%".$search."");
$subQuery->where('name', 'LIKE', "%".$search."%");
});
})
->when($request->start_date, function ($q, $startDate) {
$q->where('submission_date', '>', $startDate);
})
->when($request->end_date, function ($q, $endDate) {
$q->where('submission_date', '<', $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);
@@ -262,12 +271,8 @@ class ClaimRequestController extends Controller
'claim',
'organization',
]);
$organization = Organization::where('code', $request->provider_code)->first();
if (!$organization) {
return response()->json(['error' => true, 'message' => 'Data tidak ditemukan'], 404);
}
$updateClaimRequest = ClaimRequestService::updateClaimRequest(organization_id: $organization->id, claim_request_id: $id);
$updateClaimRequest = ClaimRequestService::updateClaimRequest(reason: $request->reason, submission_date: $request->date, claim_request_id: $id);
ClaimRequested::dispatch($updateClaimRequest);
// Log History
@@ -511,89 +516,102 @@ class ClaimRequestController extends Controller
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;
// $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);
// return Helper::responseJson($results);
$claimRequest = ClaimRequest::findOrFail($claimRequestId);
$claimRequest->load([
'requestLog',
'requestLog.organization',
'requestLog.member',
'member.currentPlan' => function($memberPlan) {
$memberPlan->join('claim_requests', 'claim_requests.service_code', '=', 'plans.service_code');
},
'requestLog.files',
]);
return Helper::responseJson(data: ClaimRequestShowResource::make($claimRequest));
}
public function invoiceFiles(Request $request, $claim_id)

View File

@@ -395,6 +395,31 @@ class DailyMonitoringController extends Controller
}
}
/**
* Delete Listing Daily Monitoring
*/
public function deleteDetailMonitoringListRequestLog(Request $request, $id)
{
$listDailyMonitoring = RequestDailyMonitoring::find($id);
$listDailyMonitoring->reason = $request->reason;
$listDailyMonitoring->save();
if (!$listDailyMonitoring) {
return response()->json([
'error' => true,
'message' => "Data not found.",
], 404);
}
$listDailyMonitoring->delete();
return response()->json([
'error' => false,
'message' => "Delete success",
'data' => $listDailyMonitoring
], 200);
}
/**
* Update Status Request LOG
*/

View File

@@ -104,8 +104,8 @@ class ReportLogController extends Controller
*/
public function show($id)
{
$claimRequest = RequestLog::findOrFail($id);
$claimRequest->load([
$requestLog = RequestLog::findOrFail($id);
$requestLog->load([
'histories' => function ($history) {
$history->latest();
},
@@ -120,7 +120,7 @@ class ReportLogController extends Controller
]);
return Helper::responseJson(data: RequestLogShowResource::make($claimRequest));
return Helper::responseJson(data: RequestLogShowResource::make($requestLog));
}
/**

View File

@@ -441,6 +441,7 @@ class RequestLogController extends Controller
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
'reason' => $request->reason,
]);
}
}
@@ -878,6 +879,7 @@ class RequestLogController extends Controller
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
'reason' => $request->reason,
]);
}
}
@@ -893,6 +895,7 @@ class RequestLogController extends Controller
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
'reason' => $request->reason,
]);
}
}
@@ -908,6 +911,7 @@ class RequestLogController extends Controller
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
'reason' => $request->reason,
]);
}
}

View File

@@ -178,6 +178,7 @@ Route::prefix('internal')->group(function () {
Route::post('detail/{claim_code}/add', [DailyMonitoringController::class, 'AddDetailMonitoringList']);
Route::post('detail/{claim_code}/add-request', [DailyMonitoringController::class, 'AddDetailMonitoringListRequestLog']);
Route::post('detail/{claim_code}/update-status', [DailyMonitoringController::class, 'UpdateListRequestLog']);
Route::get('detail/{id}/delete', [DailyMonitoringController::class, 'deleteDetailMonitoringListRequestLog']);
});
// Laboratorium Result
@@ -312,7 +313,7 @@ Route::prefix('internal')->group(function () {
Route::post('claim-requests/{id}/approve', [ClaimRequestController::class, 'approve'])->name('claim-requests.approve');
Route::get('claim-requests/{id}', [ClaimRequestController::class, 'show'])->name('claim-requests.show');
Route::post('claim-requests', [ClaimRequestController::class, 'createNew']); // Bagaskoro, BSD 2 November 2023
Route::put('claim-requests/{id}', [ClaimRequestController::class, 'update'])->name('claim-requests.update');
Route::post('claim-requests/{id}/update', [ClaimRequestController::class, 'update']);
Route::post('claim-requests/import', [ClaimRequestController::class, 'importClaim'])->name('claim-requests.importClaim');
Route::get('claim-requests/detail/{id}', [ClaimRequestController::class, 'claimRequestDetail']);
Route::post('claim-requests/{id}/invoice-files', [ClaimRequestController::class, 'invoiceFiles']);

View File

@@ -4,6 +4,15 @@ namespace Modules\Internal\Transformers;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\Str;
use App\Models\Service;
use App\Models\MemberPlan;
use App\Models\Plan;
use App\Models\CorporateBenefit;
use App\Models\RequestLogBenefit;
use App\Models\CorporatePolicy;
use App\Models\RequestLogMedicine;
use App\Models\Organization;
use App\Helpers\Helper;
class ClaimRequestShowResource extends JsonResource
{
@@ -16,25 +25,57 @@ class ClaimRequestShowResource extends JsonResource
public function toArray($request)
{
$data = parent::toArray($request);
$corporateId = $data['member']['current_plan']['corporate_id'] ?? 0;
$planMember = MemberPlan::where('member_id', $data['member_id'])->get('plan_id');
// Map Histories to Group by Dates
$historiesGroupByDate = $this->histories->mapToGroups(function($history) {
return [$history->created_at->format('Y-m-d') => $history];
});
$data['histories_by_date'] = [];
foreach ($historiesGroupByDate as $date => $histories) {
$data['histories_by_date'][] = [
'date' => $date,
'histories' => $histories
];
$planId = Plan::whereIn('id', $planMember)->where('service_code', $data['service_code'])->first();
$benefit = CorporateBenefit::with('benefit')->where('plan_id', $planId->id)->get()->toArray();
$benefitDetailLog = RequestLogBenefit::with('benefit')->where('request_log_id', $data['request_log_id'])->get()->toArray();
$medicineDetailLog = RequestLogMedicine::where('request_log_id', $data['request_log_id'])->get()->toArray();
$benefitData = [];
if (count($benefit)){
foreach($benefit as $row){
array_push($benefitData, $row['benefit']);
}
}
// Map Files by type
$filesGroupByType = $this->files->mapToGroups(function($file) {
return [Str::slug($file->type, '_') => $file];
});
$data['files_by_type'] = $filesGroupByType;
// Policy Number
$policyNumber = CorporatePolicy::query()
->where('corporate_id', $corporateId)
->first();
return $data;
$response = [
'id' => $data['id'],
'code' => $data['code'],
'request_log_id' => $data['request_log_id'],
'provider' => $data['request_log']['organization']['name'],
'member_id' => $data['request_log']['member']['member_id'],
'policy_number' => $policyNumber->code ? $policyNumber->code : '-',
'name' => $data['request_log']['member']['name'],
'date_of_birth' => $data['request_log']['member']['birth_date'],
'gender' => $data['request_log']['member']['gender'],
'marital_status' => $data['request_log']['member']['status_marital'],
'member_type' => Helper::memberType($data['request_log']['member']['record_type']),
'principal_id' => $data['request_log']['member']['principal_id'] ? $data['request_log']['member']['principal_id'] : '-',
'principal_name' => $data['request_log']['member']['principal_id'] ? Helper::principalName($data['request_log']['member']['principal_id']) : '-',
'relation_with_principal' => Helper::relationWithPrincipal($data['request_log']['member']['relation_with_principal']),
'submission_date' => $data['submission_date'],
'no_identitas' => $data['request_log']['member']['nric'],
'keterangan' => $data['request_log']['keterangan'],
'hak_kamar_pasien' => $data['request_log']['hak_kamar_pasien'],
'penempatan_kamar' => $data['request_log']['penempatan_kamar'],
'catatan' => $data['request_log']['catatan'],
'service_type' => Helper::serviceName( $data['request_log']['service_code']),
'claim_method' => $data['request_log']['payment_type'],
'files' => $data['request_log']['files'],
'benefit' => $benefitData,
'benefit_data' => $benefitDetailLog,
];
return $response;
}
}