diff --git a/Modules/Client/Http/Controllers/Api/ClaimController.php b/Modules/Client/Http/Controllers/Api/ClaimController.php
index 8e0fd282..6935c5e4 100644
--- a/Modules/Client/Http/Controllers/Api/ClaimController.php
+++ b/Modules/Client/Http/Controllers/Api/ClaimController.php
@@ -336,7 +336,9 @@ class ClaimController extends Controller
'request_logs.member_id',
'request_logs.service_code',
'request_logs.code',
- 'request_logs.diagnosis'
+ 'request_logs.diagnosis',
+ 'request_logs.keterangan',
+ 'request_logs.catatan'
)
->orderBy('request_logs.submission_date')
->get();
diff --git a/Modules/Internal/Http/Controllers/Api/OptionController.php b/Modules/Internal/Http/Controllers/Api/OptionController.php
index 2d46b506..51608ea8 100644
--- a/Modules/Internal/Http/Controllers/Api/OptionController.php
+++ b/Modules/Internal/Http/Controllers/Api/OptionController.php
@@ -20,7 +20,7 @@ class OptionController extends Controller
{
$request->validate([
'type' => 'required',
- 'search' => 'required'
+ // 'search' => 'required'
]);
switch ($request->type) {
diff --git a/Modules/Internal/Http/Controllers/Api/RequestLogController.php b/Modules/Internal/Http/Controllers/Api/RequestLogController.php
index 06e6b84d..e8e2ec81 100644
--- a/Modules/Internal/Http/Controllers/Api/RequestLogController.php
+++ b/Modules/Internal/Http/Controllers/Api/RequestLogController.php
@@ -5,6 +5,7 @@ namespace Modules\Internal\Http\Controllers\Api;
use App\Helpers\Helper;
use App\Models\RequestLog;
use App\Models\Organization;
+use App\Models\Icd;
use App\Services\ClaimService;
use App\Services\ImportService;
use Illuminate\Contracts\Support\Renderable;
@@ -193,6 +194,20 @@ class RequestLogController extends Controller
return Helper::responseJson(data: RequestLogShowResource::make($claimRequest));
}
+ public function diagnosis(){
+ $icds = Icd::query()
+ ->get();
+
+ $manipulatedIcds = $icds->map(function ($icd) {
+ // Contoh manipulasi, tambahkan atau ubah properti sesuai kebutuhan
+ return [
+ 'value' => $icd->code, // Ganti dengan properti yang sesuai dari model Icd
+ 'label' => $icd->code . ' - ' .$icd->name, // Ganti dengan properti yang sesuai dari model Icd
+ ];
+ });
+ return Helper::responseJson(data: $manipulatedIcds);
+ }
+
/**
* Show the form for editing the specified resource.
* @param int $id
@@ -366,14 +381,32 @@ class RequestLogController extends Controller
// Update Request LOG untuk lanjut ke Final LOG
- $requestLog->catatan = $request->catatan;
+ if (!empty($request->catatan)) {
+ $requestLog->catatan = $request->catatan;
+ }
+ if ($request->discharge_date) {
+ $requestLog->discharge_date = $request->discharge_date;
+ }
+ if (!empty($request->icdCodes)) {
+ $diagnosis = implode(',', $request->icdCodes);
+
+ $requestLog->diagnosis = $diagnosis;
+ }
+ if (!empty($request->status)) {
+ $requestLog->status_final_log = $status;
+ }
+
+ if (!empty($request->reason)) {
+ $requestLog->reason_final = $request->reason;
+ }
+
$requestLog->final_log = 1;
- $requestLog->status_final_log = $status;
$requestLog->approved_final_log_by = auth()->user()->id;
$requestLog->approved_final_log_at = Carbon::now();
- if($requestLog->service_code != 'IP'){
- $requestLog->discharge_date = Carbon::now();
- }
+ // if($requestLog->service_code != 'IP'){
+ // $requestLog->discharge_date = Carbon::now();
+ // }
+
$requestLog->save();
diff --git a/Modules/Internal/Routes/api.php b/Modules/Internal/Routes/api.php
index 86bde176..30556c0e 100644
--- a/Modules/Internal/Routes/api.php
+++ b/Modules/Internal/Routes/api.php
@@ -263,7 +263,10 @@ Route::prefix('internal')->group(function () {
Route::get('customer-service/request/data', [RequestLogController::class, 'generateDataRequestLogExcel']);
Route::post('customer-service/request/final-log', [RequestLogController::class, 'updateFinalLog']);
-
+
+ // search diagnosis
+ Route::get('diagnosis', [RequestLogController::class, 'diagnosis']);
+
// insert benefit
Route::post('customer-service/request/insert-benefit', [RequestLogBenefitController::class, 'store']);
Route::delete('customer-service/request/benefit_data/{id}', [RequestLogBenefitController::class, 'destroy']);
diff --git a/Modules/Internal/Transformers/RequestLogShowResource.php b/Modules/Internal/Transformers/RequestLogShowResource.php
index 91a98752..3b7e774f 100644
--- a/Modules/Internal/Transformers/RequestLogShowResource.php
+++ b/Modules/Internal/Transformers/RequestLogShowResource.php
@@ -82,11 +82,21 @@ class RequestLogShowResource extends JsonResource
->where('corporate_id', $corporateId)
->first();
+ // Diagnosis
+ $icd = [];
+ if($requestLog['diagnosis']){
+ $diagnosis = explode(',', $requestLog['diagnosis']);
+ $icd = Icd::query()
+ ->whereIn('code', $diagnosis)
+ ->select('code', 'name')
+ ->get();
+ }
$data = [
'id' => $requestLog['id'],
'code' => $requestLog['code'],
'member_id' => $requestLog['member']['member_id'],
+ 'corporate_id' => $corporateId,
'policy_number' =>$policyNumber->code ? $policyNumber->code : '-',
'name' => $requestLog['member']['name'],
'date_of_birth' => $requestLog['member']['birth_date'],
@@ -97,6 +107,7 @@ class RequestLogShowResource extends JsonResource
'principal_name' => $requestLog['member']['principal_id'] ? Helper::principalName($requestLog['member']['principal_id']) : '-',
'relation_with_principal' => Helper::relationWithPrincipal($requestLog['member']['relation_with_principal']),
'submission_date' => $requestLog['submission_date'],
+ 'discharge_date' => $requestLog['discharge_date'],
'service_type' => Helper::serviceName($requestLog['service_code']),
'claim_method' => $requestLog['payment_type'],
'status' => $requestLog['status'],
@@ -114,7 +125,7 @@ class RequestLogShowResource extends JsonResource
'penempatan_kamar' => $requestLog['penempatan_kamar'],
'catatan' => $requestLog['catatan'],
'reason' => $requestLog['reason'],
-
+ 'diagnosis' => $icd,
];
diff --git a/app/Models/RequestLog.php b/app/Models/RequestLog.php
index def92923..62165f5b 100644
--- a/app/Models/RequestLog.php
+++ b/app/Models/RequestLog.php
@@ -39,6 +39,7 @@ class RequestLog extends Model
'diagnosis',
'code',
'reason',
+ 'reason_final',
'approved_by',
'approved_at',
'approved_final_log_by',
diff --git a/database/migrations/2024_01_23_165408_add_column_reason_final_to_request_logs.php b/database/migrations/2024_01_23_165408_add_column_reason_final_to_request_logs.php
new file mode 100644
index 00000000..ff941b4a
--- /dev/null
+++ b/database/migrations/2024_01_23_165408_add_column_reason_final_to_request_logs.php
@@ -0,0 +1,32 @@
+string('reason_final')->after('reason')->default(null);
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::table('request_logs', function (Blueprint $table) {
+ $table->dropColumn('reason_final');
+ });
+ }
+};
diff --git a/frontend/dashboard/src/pages/CustomerService/Components/CardDetail.tsx b/frontend/dashboard/src/pages/CustomerService/Components/CardDetail.tsx
deleted file mode 100644
index 7faf7ed8..00000000
--- a/frontend/dashboard/src/pages/CustomerService/Components/CardDetail.tsx
+++ /dev/null
@@ -1,82 +0,0 @@
-import { Card, Typography } from "@mui/material";
-import { Stack } from '@mui/material';
-import { DetailFinalLogType } from "../FinalLog/Model/Types";
-import { fDate, fDateTimesecond, toTitleCase } from "@/utils/formatTime";
-
-
-type CardDetail = {
- requestLog: DetailFinalLogType|undefined;
-}
-
-const style1 = {
- color: '#919EAB',
- width: '30%'
-}
-const style2 = {
- width: '70%'
-}
-const marginBottom1 = {
- marginBottom: 1,
-}
-const marginBottom2 = {
- marginBottom: 2,
-}
-
-
-export default function CardDetail({requestLog} : CardDetail ) {
- return (
-
- Detail
-
- Provider
- {requestLog?.provider}
-
-
- Member ID
- {requestLog?.member_id}
-
-
- Policy Number
- {requestLog?.policy_number}
-
-
- Name
- {requestLog?.name}
-
-
- Date Of Birth
- {requestLog?.date_of_birth ? fDate(requestLog?.date_of_birth) : '-'}
-
-
- Marital Status
- {requestLog?.marital_status}
-
-
- Submission Date
- {requestLog?.submission_date ? fDateTimesecond(requestLog?.submission_date) : '-'}
-
-
-
- No KTP
- {requestLog?.no_identitas ? requestLog?.no_identitas : '-'}
-
-
- Keterangan
- {requestLog?.keterangan ? requestLog?.keterangan : '-'}
-
-
- Hak Kamar Pasien
- {requestLog?.hak_kamar_pasien ? requestLog?.hak_kamar_pasien : '-'}
-
-
- Penempatan Kamar
- {requestLog?.penempatan_kamar ? requestLog?.penempatan_kamar : '-'}
-
-
- Catatan
- {requestLog?.catatan ? requestLog?.catatan : '-'}
-
-
- )
-
-}
\ No newline at end of file
diff --git a/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogConfirmation.tsx b/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogConfirmation.tsx
index a6d6b5de..4ff76dd6 100644
--- a/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogConfirmation.tsx
+++ b/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogConfirmation.tsx
@@ -1,10 +1,10 @@
import MuiDialog from "@/components/MuiDialog";
-import { Button, Card, Checkbox, DialogActions, Grid, TextField, Typography } from "@mui/material";
+import { Autocomplete, Button, Card, Checkbox, DialogActions, Grid, TextField, Typography } from "@mui/material";
import { Paper } from "@mui/material";
import { Stack } from '@mui/material';
import React, { useEffect, useState } from 'react';
import { DetailFinalLogType } from "../Model/Types";
-import { fDateTimesecond, toTitleCase } from "@/utils/formatTime";
+import { fDateOnly, fDateTimesecond, toTitleCase } from "@/utils/formatTime";
import axios from "@/utils/axios";
import { enqueueSnackbar } from "notistack";
import { useNavigate } from "react-router";
@@ -22,11 +22,29 @@ export default function DialogConfirmation({requestLog, setOpenDialog, openDialo
const navigate = useNavigate();
const [formData, setFormData] = useState({
+ discharge_date: requestLog?.discharge_date,
id: requestLog?.id,
status: approve || '',
catatan: '',
+ icdCodes: requestLog?.diagnosis.length ? requestLog.diagnosis.map(diagnosis => ({ value: diagnosis.id, label: diagnosis.name })) : []
});
+
+ const [icdOptions, setIcdOptions] = useState([
+ { value: '-', label: '-' }
+ ]);
+ useEffect(() => {
+ // Ambil data dari API dan atur opsi ICD
+ axios.get('diagnosis')
+ .then((response) => {
+ setIcdOptions(response.data.data);
+ })
+ .catch((error) => {
+ console.error('Error fetching ICD options:', error);
+ });
+ }, []); // useEffect dijalankan hanya sekali saat komponen dimount
+
+
useEffect(() => {
// Update formData setiap kali approve berubah
setFormData(prevData => ({
@@ -87,6 +105,8 @@ export default function DialogConfirmation({requestLog, setOpenDialog, openDialo
setOpenDialog(false);
}
+
+
const getContent = () => (
Are you sure to {approve == 'approved' ? 'approve' : 'deciline'} this final log ?
@@ -119,6 +139,17 @@ export default function DialogConfirmation({requestLog, setOpenDialog, openDialo
+
+ 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) => (
+
+ )}
+ />
+
diff --git a/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogEditFinalLOG.tsx b/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogEditFinalLOG.tsx
new file mode 100644
index 00000000..f7a61920
--- /dev/null
+++ b/frontend/dashboard/src/pages/CustomerService/FinalLog/Components/DialogEditFinalLOG.tsx
@@ -0,0 +1,261 @@
+import MuiDialog from "@/components/MuiDialog";
+import { Autocomplete, Button, Card, Checkbox, DialogActions, Grid, TextField, Typography } from "@mui/material";
+import { Paper } from "@mui/material";
+import { Stack } from '@mui/material';
+import React, { useEffect, useState } from 'react';
+import { DetailFinalLogType } from "../Model/Types";
+import { fDateOnly, fDateTimesecond, toTitleCase } from "@/utils/formatTime";
+import axios from "@/utils/axios";
+import { enqueueSnackbar } from "notistack";
+import { useNavigate } from "react-router";
+
+
+type DialogConfirmationType = {
+ openDialog: boolean;
+ setOpenDialog: any;
+ onSubmit?: void;
+ requestLog: DetailFinalLogType|undefined;
+}
+
+export default function DialogEditFinalLOG({requestLog, setOpenDialog, openDialog, onSubmit} : DialogConfirmationType ) {
+
+ const navigate = useNavigate();
+ const [formData, setFormData] = useState({
+ discharge_date: requestLog?.discharge_date,
+ id: requestLog?.id,
+ catatan: requestLog?.catatan,
+ icdCodes: requestLog?.diagnosis
+ ? requestLog?.diagnosis.map(diagnosis => diagnosis.code)
+ : [],
+ reason: requestLog?.reason
+ });
+
+ const [icdOptions, setIcdOptions] = useState([
+ { value: '-', label: '-' }
+ ]);
+
+ useEffect(() => {
+ // Ambil data dari API dan atur opsi ICD
+ axios.get('diagnosis')
+ .then((response) => {
+ setIcdOptions(response.data.data);
+ })
+ .catch((error) => {
+ console.error('Error fetching ICD options:', error);
+ });
+ }, []); // useEffect dijalankan hanya sekali saat komponen dimount
+
+ useEffect(() => {
+ if (requestLog) {
+ setFormData({
+ discharge_date: requestLog.discharge_date,
+ id: requestLog.id,
+ catatan: requestLog.catatan,
+ icdCodes: requestLog.diagnosis
+ ? requestLog.diagnosis.map(diagnosis => diagnosis.code)
+ : [],
+ reason: requestLog.reason
+ });
+ }
+ }, [requestLog]);
+
+ const handleChange = (field, value) => {
+ setFormData((prevData) => ({
+ ...prevData,
+ [field]: value,
+ }));
+ if (field === 'reason') {
+ setIsReasonSelected(!!value);
+ }
+
+ };
+
+ const handleApprove = () => {
+ setFormData((prevData) => ({
+ ...prevData,
+ }));
+ handleSubmit();
+ };
+
+
+ const handleSubmit = () => {
+ if (isReasonSelected && formData.reason !== '') {
+ axios
+ .post(`customer-service/request/final-log`, formData)
+ .then((response) => {
+ enqueueSnackbar('Verification Request LOG Success', { variant: 'success' });
+ setOpenDialog(false);
+ if (requestLog?.service_type == 'Inpatient'){
+ navigate('/case_management/inpatient_monitoring');
+ } else {
+ navigate('/custormer-service/final-log');
+ }
+ })
+ .catch(({ response }) => {
+ enqueueSnackbar(response.data.message ?? 'Something went wrong!', { variant: 'error' });
+ });
+ } else {
+ setIsReasonSelected(false);
+ alert('Silakan pilih alasan sebelum mengirimkan data.');
+ }
+ }
+
+
+ const style1 = {
+ color: '#919EAB',
+ width: '30%'
+ }
+ const style2 = {
+ width: '70%'
+ }
+ const marginBottom1 = {
+ marginBottom: 1,
+ }
+ const marginBottom2 = {
+ marginBottom: 2,
+ }
+
+ const resetForm = () => {
+ setFormData({
+ discharge_date: requestLog?.discharge_date,
+ id: requestLog?.id,
+ catatan: requestLog?.catatan,
+ icdCodes: requestLog?.diagnosis
+ ? requestLog?.diagnosis.map(diagnosis => diagnosis.code)
+ : [],
+ reason: requestLog?.reason
+ });
+ };
+
+ const [isReasonSelected, setIsReasonSelected] = useState(true);
+
+ const handleCloseDialog = () => {
+ setOpenDialog(false);
+ resetForm();
+ }
+
+ const reasons = [
+ { value: 'agreement', label: 'Agreement changed' },
+ { value: 'endorsement', label: 'Endorsement' },
+ { value: 'renewal', label: 'Renewal' },
+ { value: 'wrong_setting', label: 'Wrong Setting' },
+ // Add more options as needed
+ ];
+
+
+
+ const getContent = () => (
+
+ Are you sure to edit this final log ?
+
+
+
+ Member ID
+ {requestLog?.member_id}
+
+
+ Policy Number
+ {requestLog?.policy_number}
+
+
+ Name
+ {requestLog?.name}
+
+
+ Submission Date
+ {requestLog?.submission_date ? fDateTimesecond(requestLog?.submission_date) : '-'}
+
+
+ Claim Method
+ {requestLog?.claim_method ? toTitleCase(requestLog?.claim_method) : '-'}
+
+
+ Service Type
+ {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) => {
+ const selectedCodes = newValues.map((value) => value.value);
+ setFormData({ ...formData, icdCodes: selectedCodes });
+ }}
+ renderInput={(params) => (
+
+ )}
+ />
+
+
+ Reason*
+ option.label}
+ fullWidth
+ value={reasons.find((r) => r.value === formData.reason) || null} // Use find to match the default value
+ onChange={(e, newValue) => handleChange('reason', newValue?.value)}
+ renderInput={(params) => (
+
+ )}
+ />
+
+
+
+
+
+
+
+
+ );
+
+
+ return (
+
+ );
+}
\ No newline at end of file
diff --git a/frontend/dashboard/src/pages/CustomerService/FinalLog/Detail.tsx b/frontend/dashboard/src/pages/CustomerService/FinalLog/Detail.tsx
index 080a8885..3dd6be43 100644
--- a/frontend/dashboard/src/pages/CustomerService/FinalLog/Detail.tsx
+++ b/frontend/dashboard/src/pages/CustomerService/FinalLog/Detail.tsx
@@ -54,6 +54,7 @@ import { fNumber } from '@/utils/formatNumber';
import palette from '@/theme/palette';
import CardMedicine from '../Components/CardMedicine';
import CardFile from '../Components/CardFile';
+import DialogEditFinalLOG from './Components/DialogEditFinalLOG';
// ----------------------------------------------------------------------
@@ -84,6 +85,10 @@ export default function Detail() {
color: '#919EAB',
width: '30%'
}
+ const style3 = {
+ color: '#919EAB',
+ width: '35%'
+ }
const style2 = {
width: '70%'
}
@@ -95,7 +100,7 @@ export default function Detail() {
}
const [openDialogSubmit, setOpenDialogSubmit] = useState(false);
- const [openDialogHospital, setDialogHospital] = useState(false);
+ const [openDialogEditDetail, setDialogDEditDetail] = useState(false);
const [openDialogBenefit, setDialogBenefit] = useState(false);
const [openDialogMedicine, setDialogMedicine] = useState(false);
@@ -121,10 +126,104 @@ export default function Detail() {
{/* Detail */}
-
+
+
+
+ Detail
+
+
+
+
+
+ >
+ }
+ />
+
+
+
+
+ Provider
+ {requestLog?.provider}
+
+
+ Member ID
+ {requestLog?.member_id}
+
+
+ Policy Number
+ {requestLog?.policy_number}
+
+
+ Name
+ {requestLog?.name}
+
+
+ Date Of Birth
+ {requestLog?.date_of_birth ? fDate(requestLog?.date_of_birth) : '-'}
+
+
+ Marital Status
+ {requestLog?.marital_status}
+
+
+ Submission Date
+ {requestLog?.submission_date ? fDateTimesecond(requestLog?.submission_date) : '-'}
+
+
+
+ Discharge Date
+ {requestLog?.discharge_date ? fDateTimesecond(requestLog?.discharge_date) : '-'}
+
+
+
+ No KTP
+ {requestLog?.no_identitas ? requestLog?.no_identitas : '-'}
+
+
+ Keterangan
+ {requestLog?.keterangan ? requestLog?.keterangan : '-'}
+
+
+ Hak Kamar Pasien
+ {requestLog?.hak_kamar_pasien ? requestLog?.hak_kamar_pasien : '-'}
+
+
+ Penempatan Kamar
+ {requestLog?.penempatan_kamar ? requestLog?.penempatan_kamar : '-'}
+
+
+ Catatan
+ {requestLog?.catatan ? requestLog?.catatan : '-'}
+
+
+ Diagnosis
+
+ {requestLog?.diagnosis?.length > 0 ? (
+
+ {requestLog.diagnosis.map((diagnosisItem, index) => (
+ - {diagnosisItem.code} - {diagnosisItem.name}
+ // Replace 'name' with the property you want to display
+ ))}
+
+ ) : (
+ No diagnosis available.
+ )}
+
+
+ {/*
-
+ openDialog={openDialogEdit}
+ /> */}
+
{/* Service */}
@@ -138,10 +237,10 @@ export default function Detail() {
{/* Exclusion */}
-
-
+ */}
{/* Hospital Care */}
@@ -313,7 +412,6 @@ export default function Detail() {
>
*/}
-
+ />
-
{/* Dialog Delete */}
+
+ {/* Dialog Edit Detai; */}
+
{/* Medicine */}
diff --git a/frontend/dashboard/src/pages/CustomerService/FinalLog/Model/Types.tsx b/frontend/dashboard/src/pages/CustomerService/FinalLog/Model/Types.tsx
index bad6c293..fe0aeefb 100644
--- a/frontend/dashboard/src/pages/CustomerService/FinalLog/Model/Types.tsx
+++ b/frontend/dashboard/src/pages/CustomerService/FinalLog/Model/Types.tsx
@@ -45,6 +45,9 @@ export type DetailFinalLogType = {
hak_kamar_pasien : string,
penempatan_kamar : string,
catatan : string,
+ discharge_date : string,
+ reason : string,
+ diagnosis : Diagnosis[],
benefit : Benefit[],
benefit_data : BenefitData[],
config_service : ConfigService,
@@ -53,6 +56,12 @@ export type DetailFinalLogType = {
files : file[],
}
+export type Diagnosis = {
+ id : number,
+ name : string,
+ code : string
+}
+
export type BenefitData = {
amount_incurred : number,
amount_approved : number,