diff --git a/Modules/HospitalPortal/Http/Controllers/Api/ClaimRequestController.php b/Modules/HospitalPortal/Http/Controllers/Api/ClaimRequestController.php index 3d27eb3a..ace8d239 100644 --- a/Modules/HospitalPortal/Http/Controllers/Api/ClaimRequestController.php +++ b/Modules/HospitalPortal/Http/Controllers/Api/ClaimRequestController.php @@ -133,10 +133,21 @@ class ClaimRequestController extends Controller if ($request->hasFile('additional_files')) { foreach ($request->additional_files as $file) { - $pathFile = File::storeFile('additional-files', $newClaimRequest->id, $file); - $newClaimRequest->files()->updateOrCreate([ + $pathFile = File::storeFile('additional-files', $request->request_logs_id, $file); + // $newClaimRequest->files()->updateOrCreate([ + // 'type' => 'additional-files', + // 'name' => File::getFileName('additional-files', $newClaimRequest->id, $file), + // 'original_name' => $file->getClientOriginalName(), + // 'extension' => $file->getClientOriginalExtension(), + // 'path' => $pathFile, + // 'created_by' => auth()->user()->id, + // 'updated_by' => auth()->user()->id, + // ]); + File::updateOrCreate([ + 'fileable_type' => 'App\Models\RequestLog', + 'fileable_id' => $request->request_logs_id, 'type' => 'additional-files', - 'name' => File::getFileName('additional-files', $newClaimRequest->id, $file), + 'name' => File::getFileName('additional-files', $request->request_logs_id, $file), 'original_name' => $file->getClientOriginalName(), 'extension' => $file->getClientOriginalExtension(), 'path' => $pathFile, diff --git a/Modules/HospitalPortal/Http/Controllers/Api/RequestLogController.php b/Modules/HospitalPortal/Http/Controllers/Api/RequestLogController.php index 5105d85f..b7a07ebe 100644 --- a/Modules/HospitalPortal/Http/Controllers/Api/RequestLogController.php +++ b/Modules/HospitalPortal/Http/Controllers/Api/RequestLogController.php @@ -244,6 +244,7 @@ class RequestLogController extends Controller $results = DB::table('request_logs') ->leftJoin('members', 'request_logs.member_id', '=', 'members.id') + ->where('request_logs.deleted_at', null) ->when($request->input('search'), function ($query, $search) { $query->where(function ($query) use ($search) { $query->orWhere('request_logs.code', 'like', "%" . $search . "%") diff --git a/Modules/Internal/Http/Controllers/Api/ClaimRequestController.php b/Modules/Internal/Http/Controllers/Api/ClaimRequestController.php index b74a79be..c2ea4c9b 100644 --- a/Modules/Internal/Http/Controllers/Api/ClaimRequestController.php +++ b/Modules/Internal/Http/Controllers/Api/ClaimRequestController.php @@ -516,90 +516,6 @@ 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; - - // return Helper::responseJson($results); - $claimRequest = ClaimRequest::findOrFail($claimRequestId); $claimRequest->load([ 'requestLog', @@ -788,4 +704,22 @@ class ClaimRequestController extends Controller return Helper::responseJson(data: $request->toArray(), message: 'Invoice Success Uploaded'); } + + 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); + + } } diff --git a/Modules/Internal/Routes/api.php b/Modules/Internal/Routes/api.php index 20541d8a..d5f58fda 100644 --- a/Modules/Internal/Routes/api.php +++ b/Modules/Internal/Routes/api.php @@ -311,6 +311,7 @@ Route::prefix('internal')->group(function () { Route::get('claim-requests', [ClaimRequestController::class, 'index'])->name('claim-requests.index'); Route::get('claim-requests/list-member', [ClaimRequestController::class, 'getClaimMemberInfiniteScroll']); // Bagaskoro, BSD 31 Oktober 2023 Route::post('claim-requests/{id}/approve', [ClaimRequestController::class, 'approve'])->name('claim-requests.approve'); + Route::post('claim-requests/{id}/submition', [ClaimRequestController::class, 'submition'])->name('claim-requests.submition'); 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::post('claim-requests/{id}/update', [ClaimRequestController::class, 'update']); diff --git a/Modules/Internal/Transformers/ClaimRequestShowResource.php b/Modules/Internal/Transformers/ClaimRequestShowResource.php index 39923a97..cbb7e109 100644 --- a/Modules/Internal/Transformers/ClaimRequestShowResource.php +++ b/Modules/Internal/Transformers/ClaimRequestShowResource.php @@ -75,6 +75,7 @@ class ClaimRequestShowResource extends JsonResource $response = [ 'id' => $data['id'], 'code' => $data['code'], + 'status' => $data['status'], 'request_log_id' => $data['request_log_id'], 'request_log' => $requestLogData, 'provider' => $data['request_log']['organization']['name'], diff --git a/app/Models/ClaimRequest.php b/app/Models/ClaimRequest.php index cfed961a..0bf6d685 100644 --- a/app/Models/ClaimRequest.php +++ b/app/Models/ClaimRequest.php @@ -26,6 +26,15 @@ class ClaimRequest extends Model 'service_code', 'policy_id', 'status', + // New field for claim management + 'claim_management', + 'status_claim_management', + 'submission_date_claim_management', + 'submission_by_claim_management', + 'approval_date_claim_management', + 'approval_by_claim_management', + 'reason_decline', + // 'claim_id', 'organization_id', 'code', diff --git a/database/migrations/2024_02_23_091725_add_coloumn_to_claim_request_table.php b/database/migrations/2024_02_23_091725_add_coloumn_to_claim_request_table.php new file mode 100644 index 00000000..be2a049e --- /dev/null +++ b/database/migrations/2024_02_23_091725_add_coloumn_to_claim_request_table.php @@ -0,0 +1,47 @@ +integer('claim_management') + ->default(0) + ->after('status') + ->comment('untuk flag request masuk ke final, jika 0 masih request dan 1 itu sudah masuk ke finallog'); + $table->string('status_claim_management')->after('claim_management')->nullable(); + $table->dateTime('submission_date_claim_management')->after('status_claim_management')->nullable(); + $table->string('submission_by_claim_management')->after('submission_date_claim_management')->nullable(); + $table->dateTime('approval_date_claim_management')->after('submission_by_claim_management')->nullable(); + $table->string('approval_by_claim_management')->after('approval_date_claim_management')->nullable(); + $table->string('reason_decline')->after('approval_by_claim_management')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('claim_requests', function (Blueprint $table) { + $table->dropColumn('claim_management'); + $table->dropColumn('status_claim_management'); + $table->dropColumn('submission_date_claim_management'); + $table->dropColumn('submission_by_claim_management'); + $table->dropColumn('approval_date_claim_management'); + $table->dropColumn('approval_by_claim_management'); + $table->dropColumn('reason_decline'); + }); + } +}; diff --git a/frontend/dashboard/src/pages/ClaimRequests/Components/DialogConfirmation.tsx b/frontend/dashboard/src/pages/ClaimRequests/Components/DialogConfirmation.tsx index ce78fa0b..259ffed7 100644 --- a/frontend/dashboard/src/pages/ClaimRequests/Components/DialogConfirmation.tsx +++ b/frontend/dashboard/src/pages/ClaimRequests/Components/DialogConfirmation.tsx @@ -1,35 +1,30 @@ import MuiDialog from "@/components/MuiDialog"; -import { Autocomplete, Button, Card, Checkbox, DialogActions, Grid, TextField, Typography } from "@mui/material"; +import { Button, Card, Checkbox, DialogActions, Grid, TextField, TextareaAutosize, Typography } from "@mui/material"; import { Paper } from "@mui/material"; import { Stack } from '@mui/material'; import React, { useEffect, useState } from 'react'; -import { ClaimRequest, Files } from '@/@types/claims'; -import { fDateOnly, fDateTimesecond, toTitleCase } from "@/utils/formatTime"; +import { DetailClaimRequest } from "../Model/Types"; +import { fDateTimesecond, toTitleCase } from "@/utils/formatTime"; import axios from "@/utils/axios"; -import { enqueueSnackbar, useSnackbar } from "notistack"; +import { enqueueSnackbar } from "notistack"; import { useNavigate } from "react-router"; -import * as Yup from 'yup'; -import { yupResolver } from '@hookform/resolvers/yup'; +import { RHFTextField } from "@/components/hook-form"; + type DialogConfirmationType = { openDialog: boolean; setOpenDialog: any; onSubmit?: void; approve: string; - claimRequest: ClaimRequest|undefined; + requestLog: DetailClaimRequest|undefined; } -export default function DialogConfirmation({claimRequest, setOpenDialog, openDialog, approve, onSubmit} : DialogConfirmationType ) { - +export default function DialogConfirmation({requestLog, setOpenDialog, openDialog, approve, onSubmit} : DialogConfirmationType ) { const navigate = useNavigate(); - const { enqueueSnackbar } = useSnackbar(); - + const [formData, setFormData] = useState({ - date: claimRequest?.date, - id: claimRequest?.id, - reason: claimRequest?.reason + }); - const handleChange = (field, value) => { setFormData((prevData) => ({ ...prevData, @@ -38,24 +33,28 @@ export default function DialogConfirmation({claimRequest, setOpenDialog, openDia }; + const handleApprove = () => { + setFormData((prevData) => ({ + ...prevData, + status: approve, + })); + handleSubmit(); + }; + + const handleSubmit = () => { axios - .post(`customer-service/request/final-log`, formData) + .post(`claim-requests/${requestLog?.id}/submition`, formData) .then((response) => { - enqueueSnackbar('Verification Request LOG Success', { variant: 'success' }); + enqueueSnackbar('Submition Claim Request Success', { variant: 'success' }); setOpenDialog(false); - if (requestLog?.service_type == 'Inpatient'){ - navigate('/case_management/inpatient_monitoring'); - } else { - navigate('/custormer-service/final-log'); - } + navigate('/claim-requests') }) .catch(({ response }) => { enqueueSnackbar(response.data.message ?? 'Something went wrong!', { variant: 'error' }); }); } - const style1 = { color: '#919EAB', width: '30%' @@ -66,34 +65,57 @@ export default function DialogConfirmation({claimRequest, setOpenDialog, openDia const marginBottom1 = { marginBottom: 1, } + const marginBottom2 = { marginBottom: 2, } + + const resetForm = () => { + setFormData({ + status: approve, + no_identitas: requestLog?.no_identitas ?? '', + keterangan: '', + hak_kamar_pasien: '', + penempatan_kamar: '', + }); + }; + const handleCloseDialog = () => { setOpenDialog(false); + resetForm(); } - + const handleNumericInput = (input: any) => { + const numericInput = input.replace(/\D/g, ''); + return numericInput; + }; + const handleKeyPress = (e:any) => { + if (e.key === 'Enter' && !e.shiftKey) { + // Menghentikan default "Enter" (tidak membuat baris baru) + e.preventDefault(); + + // Menambahkan karakter baris baru + handleChange('keterangan', `${formData.keterangan}\n`); + } + }; + + console.log(approve, 'test') const getContent = () => ( - Are you sure to {approve == 'approved' ? 'approve' : 'deciline'} this final log ? + Are you sure to submit this claim ? - Member ID - {requestLog?.member_id} - - - Policy Number - {requestLog?.policy_number} + Code + {requestLog?.code} Name {requestLog?.name} - Submission Date + Date Submission {requestLog?.submission_date ? fDateTimesecond(requestLog?.submission_date) : '-'} @@ -105,58 +127,10 @@ export default function DialogConfirmation({claimRequest, setOpenDialog, openDia {requestLog?.service_type} - - - - Discharge Date - handleChange('discharge_date', e.target.value)} - /> - - - Catatan - handleChange('catatan', e.target.value)} - /> - - - Diagnosis ICD - X - option.label} - fullWidth - value={icdOptions.filter((icd) => formData.icdCodes.includes(icd.value))} - onChange={(e, newValues) => handleChange('icdCodes', newValues.map((value) => value.value))} - renderInput={(params) => ( - - )} - /> - - - - {approve == 'approved' ? ( - - ) : ( - - ) } - + ); @@ -168,7 +142,7 @@ export default function DialogConfirmation({claimRequest, setOpenDialog, openDia openDialog={openDialog} setOpenDialog={setOpenDialog} content={getContent()} - maxWidth="xl" + maxWidth="md" /> ); } \ No newline at end of file diff --git a/frontend/dashboard/src/pages/ClaimRequests/Detail.tsx b/frontend/dashboard/src/pages/ClaimRequests/Detail.tsx index a4d31d16..38a23045 100644 --- a/frontend/dashboard/src/pages/ClaimRequests/Detail.tsx +++ b/frontend/dashboard/src/pages/ClaimRequests/Detail.tsx @@ -38,6 +38,8 @@ import DialogDeleteFileLog from './Components/DialogDeleteFileLog'; import DialogBenefit from '../CustomerService/FinalLog/Components/DialogBenefit'; import DialogDeleteBenefit from '../CustomerService/FinalLog/Components/DialogDeleteBenefit'; import DialogEditBenefit from '../CustomerService/FinalLog/Components/DialogEditBenefit'; +import DialogConfirmation from './Components/DialogConfirmation'; + // ---------------------------------------------------------------------- @@ -49,6 +51,7 @@ export default function Detail() { const navigate = useNavigate(); const { themeStretch } = useSettings(); const [claimRequests, setClaimRequest] = useState(); + const [openDialogSubmit, setOpenDialogSubmit] = useState(false); const { id } = useParams(); @@ -421,7 +424,7 @@ export default function Detail() { - + Total Benefit @@ -436,12 +439,12 @@ export default function Detail() { - + Amount Incurred - + {totalAmountIncurred ? fNumber(totalAmountIncurred) : '0'} @@ -452,12 +455,12 @@ export default function Detail() { - + Amount Approved - + {totalAmountApproved ? fNumber(totalAmountApproved) : '0'} @@ -468,12 +471,12 @@ export default function Detail() { - + Amount Not Approved - + {totalAmountNotApproved ? fNumber(totalAmountNotApproved) : 0} @@ -484,12 +487,12 @@ export default function Detail() { - + Excess Paid - + {totalExcessPaid ? fNumber(totalExcessPaid) : 0} @@ -497,6 +500,23 @@ export default function Detail() { + + + + Biaya disetujui + + + + + {totalAmountApproved ? fNumber(totalAmountApproved) : '0'} + + + + + Nominal diatas 1 juta akan menunggu persetujuan senior analyst + + + @@ -504,6 +524,8 @@ export default function Detail() { : ( null )} + + @@ -542,6 +564,42 @@ export default function Detail() { requestLog={requestLog} openDialog={openDialogEditDetail} /> */} + + {(claimRequests?.status === 'requested') || (claimRequests?.status === 'decline') ? ( + + +
{/* Perubahan sintaksis disini */} + +
+
+ +
+ + +
+
+ ) : null}
diff --git a/frontend/dashboard/src/pages/ClaimRequests/List.tsx b/frontend/dashboard/src/pages/ClaimRequests/List.tsx index c2df449c..43a779ad 100644 --- a/frontend/dashboard/src/pages/ClaimRequests/List.tsx +++ b/frontend/dashboard/src/pages/ClaimRequests/List.tsx @@ -468,8 +468,12 @@ export default function List() { {row.service_name} {row.payment_type_name} - { row.status == "requested" ? + { row.status == "requested" ? () : + row.status == "submission" ? + () : + row.status == "decline" ? + () : () } diff --git a/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogBenefit.tsx b/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogBenefit.tsx index c2e82765..9e0d9f6b 100644 --- a/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogBenefit.tsx +++ b/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogBenefit.tsx @@ -189,7 +189,7 @@ export default function DialogBenefit({requestLog, setOpenDialog, openDialog, cl const submitHandler = async (data: BenefitConfigurationListType) => { const mapData = data.benefit_data.map((item) => ({ ...item, - reason: item.reason.value + reason: item.reason ? item.reason.value : null })); const newData = {