From d6a84ce9f27f09e55df8b867f46738e29f170c61 Mon Sep 17 00:00:00 2001 From: ivan-sim Date: Thu, 13 Feb 2025 13:41:57 +0700 Subject: [PATCH] Add Spesialis & DPPJ --- .../Http/Controllers/Api/MemberController.php | 26 +++++-- .../Controllers/Api/RequestLogController.php | 26 ++++--- .../Controllers/Api/RequestLogController.php | 12 ++- .../Transformers/RequestLogShowResource.php | 13 +++- app/Models/RequestLog.php | 4 +- app/Services/RequestLogService.php | 24 +++--- ...column_specialities_id_to_request_logs.php | 36 +++++++++ ...105939_add_column_dppj_to_request_logs.php | 36 +++++++++ .../pages/CustomerService/FinalLog/Detail.tsx | 8 ++ .../CustomerService/FinalLog/Model/Types.tsx | 2 + .../pages/CustomerService/Request/Detail.tsx | 24 ++++-- .../CustomerService/Request/Model/Types.tsx | 4 +- frontend/hospital-portal/src/lang/en-US.json | 4 +- frontend/hospital-portal/src/lang/id-ID.json | 4 +- .../src/sections/dashboard/FormRequestLog.tsx | 77 +++++++++++++++---- 15 files changed, 239 insertions(+), 61 deletions(-) create mode 100644 database/migrations/2025_02_13_102948_add_column_specialities_id_to_request_logs.php create mode 100644 database/migrations/2025_02_13_105939_add_column_dppj_to_request_logs.php diff --git a/Modules/HospitalPortal/Http/Controllers/Api/MemberController.php b/Modules/HospitalPortal/Http/Controllers/Api/MemberController.php index 8f95823b..f38a6f1c 100755 --- a/Modules/HospitalPortal/Http/Controllers/Api/MemberController.php +++ b/Modules/HospitalPortal/Http/Controllers/Api/MemberController.php @@ -44,12 +44,12 @@ class MemberController extends Controller ->select( 'members.id', 'members.name', - 'members.member_id', + 'members.member_id', 'member_policies.policy_id', - 'persons.nik', - 'members.email', - 'members.birth_date', - 'members.gender', + 'persons.nik', + 'members.email', + 'members.birth_date', + 'members.gender', 'members.marital_status', 'members.language', 'members.race', @@ -119,14 +119,26 @@ class MemberController extends Controller $res_data['companies'] = $companies; - + + // specialities + $specialities = DB::table('specialities') + ->select( + 'specialities.id', + 'specialities.name' + ) + ->orderBy('specialities.name','asc') + ->get(); + + $res_data['specialities'] = $specialities; + + return ApiResponse::apiResponse("Success", $res_data, trans('Message.success'), 200); } else { return ApiResponse::apiResponse("Data Not Found", $data, trans('Message.not_found'), 404); } - + } } } diff --git a/Modules/HospitalPortal/Http/Controllers/Api/RequestLogController.php b/Modules/HospitalPortal/Http/Controllers/Api/RequestLogController.php index 44c9e01e..f50be414 100755 --- a/Modules/HospitalPortal/Http/Controllers/Api/RequestLogController.php +++ b/Modules/HospitalPortal/Http/Controllers/Api/RequestLogController.php @@ -36,6 +36,8 @@ class RequestLogController extends Controller 'address_provider' => !empty($request->address_provider) ? $request->address_provider : null, 'submission_date' => $request->submission_date, 'corporate_id_partner' => !empty($request->corporate_id_partner) ? $request->corporate_id_partner : [], + 'specialities_id' => $request->specialities_id, + 'dppj' => $request->dppj ]; $validator = Validator::make($request->all(), [ 'member_id' => 'required', @@ -119,7 +121,7 @@ class RequestLogController extends Controller $requestLogControllerInstance = new PrimeCenterRequestLog(); try { $response = $requestLogControllerInstance->createNew($request); - + if($response->original['statusCode'] == 200) { //send email @@ -361,7 +363,7 @@ class RequestLogController extends Controller ->update([ 'status_final_log' => 'requested', 'final_log' => 1, - 'discharge_date' => $request->discharge_date, + 'discharge_date' => $request->discharge_date, 'created_final_by'=> auth()->user()->id, 'created_final_at'=> date('Y-m-d H:i:s'), ]); @@ -785,7 +787,7 @@ class RequestLogController extends Controller $dataDiagnosis = []; if($dataRequestLog->diagnosis) { - $dataDiagnosiCodes = explode(',', $dataRequestLog->diagnosis); + $dataDiagnosiCodes = explode(',', $dataRequestLog->diagnosis); foreach ($dataDiagnosiCodes as $diagnosisCode) { $diagnoisis = DB::table('icd') @@ -796,8 +798,8 @@ class RequestLogController extends Controller } } - $data['dataDiagnosis'] = $dataDiagnosis; - + $data['dataDiagnosis'] = $dataDiagnosis; + $pdf = new Dompdf(); @@ -848,7 +850,7 @@ class RequestLogController extends Controller ->where('id', '=', $request_logs_id) ->select('id', 'member_id', 'service_code') ->first(); - + $check_claim_requests = DB::table('claim_requests') ->where('claim_requests.request_log_id', '=', $request_logs_id) ->first(); @@ -860,12 +862,12 @@ class RequestLogController extends Controller $requestLogData = RequestLog::where('id',$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: 'cashless', + row: [], + code: $code, + member: $member, + paymentType: 'cashless', serviceCode: $data_req_logs->service_code, requestLogID: $request_logs_id, organization_code: $provideCode, @@ -877,7 +879,7 @@ class RequestLogController extends Controller 'type' => 'info', 'system_origin' => 'hospital-portal' ]); - + // Claim Log DB::table('claim_logs') ->insert([ diff --git a/Modules/Internal/Http/Controllers/Api/RequestLogController.php b/Modules/Internal/Http/Controllers/Api/RequestLogController.php index 09d5b923..328ef515 100755 --- a/Modules/Internal/Http/Controllers/Api/RequestLogController.php +++ b/Modules/Internal/Http/Controllers/Api/RequestLogController.php @@ -149,7 +149,9 @@ class RequestLogController extends Controller // status: 'approved', status: 'requested', // di nonaktifkan dulu auto approved organization_id: $request->organization_id, - source: $request->source + source: $request->source, + specialities_id: $request->specialities_id, + dppj: $request->dppj ); DB::commit(); @@ -171,7 +173,9 @@ class RequestLogController extends Controller submissionDate: $request->submission_date, status: 'requested', organization_id: $request->organization_id, - source: $request->source + source: $request->source, + specialities_id: $request->specialities_id, + dppj: $request->dppj ); DB::commit(); @@ -489,11 +493,11 @@ class RequestLogController extends Controller if (!empty($request->reason)) { $requestLog->reason_final = $request->reason; } - + if (!empty($request->type_of_member)){ $requestLog->type_of_member = $request->type_of_member; } - + $requestLog->final_log = 1; $requestLog->approved_final_log_by = auth()->user()->id; $requestLog->approved_final_log_at = Carbon::now(); diff --git a/Modules/Internal/Transformers/RequestLogShowResource.php b/Modules/Internal/Transformers/RequestLogShowResource.php index 8aa77dfb..a785e51c 100755 --- a/Modules/Internal/Transformers/RequestLogShowResource.php +++ b/Modules/Internal/Transformers/RequestLogShowResource.php @@ -13,6 +13,7 @@ use App\Models\Benefit; use App\Models\Exclusion; use App\Models\ClaimRequest; use App\Models\Icd; +use App\Models\Speciality; use App\Helpers\Helper; use App\Models\CorporatePolicy; use Illuminate\Http\Resources\Json\JsonResource; @@ -117,12 +118,20 @@ class RequestLogShowResource extends JsonResource } $memberUsage = Helper::getUsageMember($corporateId, $requestLog['member']['id'], $benefitData); - // dd($memberLimitUsage); + if($requestLog['specialities_id']) + { + $spesialis = Speciality::query() + ->where('id', $requestLog['specialities_id']) + ->select('name') + ->first(); + } $data = [ 'id' => $requestLog['id'], 'code' => $requestLog['code'], 'invoice_no' => $requestLog['invoice_no'], 'billing_no' => $requestLog['billing_no'], + 'specialities_id' => $spesialis['name'], + 'dppj' => $requestLog['dppj'], 'code' => $requestLog['code'], 'code_claim' => $claimCode, 'member_id' => $requestLog['member']['member_id'], @@ -161,7 +170,7 @@ class RequestLogShowResource extends JsonResource 'reason' => $requestLog['reason'], 'diagnosis' => $icd, 'is_reversal' => $isReversal, // untuk penjagaan, jika true tidak bisa di edit/hapus lagi - + ]; diff --git a/app/Models/RequestLog.php b/app/Models/RequestLog.php index 08e45eb7..bd180522 100755 --- a/app/Models/RequestLog.php +++ b/app/Models/RequestLog.php @@ -51,6 +51,8 @@ class RequestLog extends Model 'approved_final_log_at', 'created_final_at', 'created_final_by', + 'specialities_id', + 'dppj', 'type_of_member' ]; @@ -82,7 +84,7 @@ class RequestLog extends Model "Keterangan IGL" => "keterangan", "Catatan FGL" => "catatan", "QC 1" => "status_final_log", - "Ingestion Code" => "ingestion_code", + "Ingestion Code" => "ingestion_code", "Ingestion Status" => "ingestion_status", ]; diff --git a/app/Services/RequestLogService.php b/app/Services/RequestLogService.php index 415a7ed2..1b821865 100755 --- a/app/Services/RequestLogService.php +++ b/app/Services/RequestLogService.php @@ -21,14 +21,16 @@ use Str; class RequestLogService{ public static function storeRequestLog( - $row = null, - $code, - $member, - $paymentType, - $serviceCode, - $submissionDate, - $status, $organization_id = null, - $source + $row = null, + $code, + $member, + $paymentType, + $serviceCode, + $submissionDate, + $status, $organization_id = null, + $source, + $specialities_id, + $dppj ) { try { @@ -55,6 +57,8 @@ class RequestLogService{ 'policy_id' => $member->currentPolicy->id ?? null, 'organization_id' => $organization ? $organization->id : 0, 'source' => $source, + 'specialities_id' => $specialities_id, + 'dppj' => $dppj ]; $requestLog = RequestLog::create($requestLogData); @@ -109,7 +113,7 @@ class RequestLogService{ DB::commit(); return $claimManagement; - + } catch (\Exception $error) { DB::rollBack(); @@ -168,4 +172,4 @@ class RequestLogService{ } } -} \ No newline at end of file +} diff --git a/database/migrations/2025_02_13_102948_add_column_specialities_id_to_request_logs.php b/database/migrations/2025_02_13_102948_add_column_specialities_id_to_request_logs.php new file mode 100644 index 00000000..bbf14e00 --- /dev/null +++ b/database/migrations/2025_02_13_102948_add_column_specialities_id_to_request_logs.php @@ -0,0 +1,36 @@ +bigInteger('specialities_id')->after('created_final_by')->nullable(); + }); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + if(!Schema::hasColumn('request_logs', 'specialities_id')) { + Schema::table('request_logs', function (Blueprint $table) { + $table->dropColumn('specialities_id'); + }); + } + } +}; diff --git a/database/migrations/2025_02_13_105939_add_column_dppj_to_request_logs.php b/database/migrations/2025_02_13_105939_add_column_dppj_to_request_logs.php new file mode 100644 index 00000000..0e8447da --- /dev/null +++ b/database/migrations/2025_02_13_105939_add_column_dppj_to_request_logs.php @@ -0,0 +1,36 @@ +string('dppj', '255')->after('specialities_id')->nullable(); + }); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + if(!Schema::hasColumn('request_logs', 'dppj')) { + Schema::table('request_logs', function (Blueprint $table) { + $table->dropColumn('dppj'); + }); + } + } +}; diff --git a/frontend/dashboard/src/pages/CustomerService/FinalLog/Detail.tsx b/frontend/dashboard/src/pages/CustomerService/FinalLog/Detail.tsx index 902e9272..86952c26 100755 --- a/frontend/dashboard/src/pages/CustomerService/FinalLog/Detail.tsx +++ b/frontend/dashboard/src/pages/CustomerService/FinalLog/Detail.tsx @@ -250,6 +250,14 @@ export default function Detail() { Penempatan Kamar {requestLog?.penempatan_kamar ? requestLog?.penempatan_kamar : '-'} + + Spesialis + {requestLog?.specialities_id ? requestLog?.specialities_id : '-'} + + + DPPJ + {requestLog?.dppj ? requestLog?.dppj : '-'} + Catatan {requestLog?.catatan ? requestLog?.catatan : '-'} diff --git a/frontend/dashboard/src/pages/CustomerService/FinalLog/Model/Types.tsx b/frontend/dashboard/src/pages/CustomerService/FinalLog/Model/Types.tsx index 6401a2b4..be8ac1ba 100755 --- a/frontend/dashboard/src/pages/CustomerService/FinalLog/Model/Types.tsx +++ b/frontend/dashboard/src/pages/CustomerService/FinalLog/Model/Types.tsx @@ -24,6 +24,8 @@ export type FinalLogType = { provider : string, status : string, files_by_type : files_by_type, + specialities_id : number, + dppj: string } diff --git a/frontend/dashboard/src/pages/CustomerService/Request/Detail.tsx b/frontend/dashboard/src/pages/CustomerService/Request/Detail.tsx index 6ba7f378..d192b013 100755 --- a/frontend/dashboard/src/pages/CustomerService/Request/Detail.tsx +++ b/frontend/dashboard/src/pages/CustomerService/Request/Detail.tsx @@ -34,7 +34,7 @@ export default function Detail() { const navigate = useNavigate(); const { themeStretch } = useSettings(); const [requestLog, setRequestLog] = useState(); - + const { id } = useParams(); @@ -70,9 +70,9 @@ export default function Detail() { const handleCloseDialogSubmit = () => { setOpenDialogSubmit(false); } - + const [approve, setApprove] = useState('') - + const [openDialogEdit, setOpenDialogEdit] = useState(false); return ( @@ -84,7 +84,7 @@ export default function Detail() { - + Detail @@ -106,7 +106,7 @@ export default function Detail() { /> ) : null} - + Provider Name @@ -157,6 +157,14 @@ export default function Detail() { Penempatan Kamar {requestLog?.penempatan_kamar ? requestLog?.penempatan_kamar : '-'} + + Spesialis + {requestLog?.specialities_id ? requestLog?.specialities_id : '-'} + + + DPPJ + {requestLog?.dppj ? requestLog?.dppj : '-'} + @@ -217,13 +225,13 @@ export default function Detail() { openDialog={openDialogSubmit} approve={approve} > - + ) : null} - - + diff --git a/frontend/dashboard/src/pages/CustomerService/Request/Model/Types.tsx b/frontend/dashboard/src/pages/CustomerService/Request/Model/Types.tsx index 209fab3a..a446cbcf 100755 --- a/frontend/dashboard/src/pages/CustomerService/Request/Model/Types.tsx +++ b/frontend/dashboard/src/pages/CustomerService/Request/Model/Types.tsx @@ -57,7 +57,9 @@ export type DetailRequestLogType = { benefit : Benefit[], reason : string, type_of_member : string, - corporate_id : number + corporate_id : number, + specialities_id : number, + dppj: string } export type Benefit = { diff --git a/frontend/hospital-portal/src/lang/en-US.json b/frontend/hospital-portal/src/lang/en-US.json index 88f5da3a..2de517d8 100755 --- a/frontend/hospital-portal/src/lang/en-US.json +++ b/frontend/hospital-portal/src/lang/en-US.json @@ -138,7 +138,9 @@ "txtButtonClose": "Close", "txtLabelFailed": "Failed", "txtAttention": "Attention", - "txtAttentionInfo": "There are pending orders that require approval." + "txtAttentionInfo": "There are pending orders that require approval.", + "txtDPPJ": "DPPJ", + "txtSpecialist": "Specialist" } diff --git a/frontend/hospital-portal/src/lang/id-ID.json b/frontend/hospital-portal/src/lang/id-ID.json index ac3e7f70..2b6edfce 100755 --- a/frontend/hospital-portal/src/lang/id-ID.json +++ b/frontend/hospital-portal/src/lang/id-ID.json @@ -138,5 +138,7 @@ "txtButtonClose": "Tutup", "txtLabelFailed": "Gagal Pengiriman", "txtAttention": "Perhatian", - "txtAttentionInfo": "Terdapat pesanan pending mohon untuk segera di approve." + "txtAttentionInfo": "Terdapat pesanan pending mohon untuk segera di approve.", + "txtDPPJ": "DPPJ", + "txtSpecialist": "Spesialis" } diff --git a/frontend/hospital-portal/src/sections/dashboard/FormRequestLog.tsx b/frontend/hospital-portal/src/sections/dashboard/FormRequestLog.tsx index 70bb881a..3858fa54 100755 --- a/frontend/hospital-portal/src/sections/dashboard/FormRequestLog.tsx +++ b/frontend/hospital-portal/src/sections/dashboard/FormRequestLog.tsx @@ -1,18 +1,18 @@ import { LoadingButton } from '@mui/lab'; -import -{ +import +{ Avatar, FormControl, InputLabel, Select, FormHelperText, - MenuItem + MenuItem } from '@mui/material'; import { Card } from '@mui/material'; import { Stack, Typography } from '@mui/material'; import axios from '@/utils/axios'; import { enqueueSnackbar } from 'notistack'; -import { useRef, useState, useContext, useEffect } from 'react'; +import React, { useRef, useState, useContext, useEffect } from 'react'; import { makeFormData } from '@/utils/jsonToFormData'; import { format } from 'date-fns'; import { LanguageContext } from '@/contexts/LanguageContext'; @@ -28,6 +28,7 @@ interface MemberType { services: any; providers:any; companies:any; + specialities:any; } interface FormRequestClaimProps { member: MemberType; @@ -37,6 +38,8 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }: FormRe const { localeData }: any = useContext(LanguageContext); const [serviceCode, setServiceCode] = useState(''); const [idProvider, setIdProvider] = useState(0); + const [idSpecialities, setIdSpecialities] = useState(0); + const [inputDppj, setInputDppj] = useState(''); //Submission date const [submissionDate, setSubmissionDate] = useState(format(new Date(), "yyyy MMM d HH:mm:ss")); @@ -47,7 +50,7 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }: FormRe setCorporateIdPartner(member?.companies?.map((item: { id: any; name: any; }) => ({ value: item.id, label: item.name }))); }, []); const [selectedCorporatID, setSelectedCorporateID] = useState([]); - + const handleSelectChangePatner = (event:any, selectedOptions:any) => { const selectedValues = selectedOptions.map((option: { value: any; }) => option.value); setSelectedCorporateID(selectedValues); @@ -77,24 +80,26 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }: FormRe organization_name : name, address_provider: alamat, submission_date: fPostFormat(submissionDate, 'yyyy-MM-dd HH:mm:ss'), - corporate_id_partner: selectedCorporatID + corporate_id_partner: selectedCorporatID, + specialities_id: idSpecialities, + dppj: inputDppj }; axios .post('/request-log', formData) .then((response) => { if (response && response.data && response.data.meta) { - setTimeout(() => { - window.location.reload(); - }, 1500); + // setTimeout(() => { + // window.location.reload(); + // }, 1500); enqueueSnackbar(response.data.meta.message, { variant: 'success' }); handleSubmitSuccess(); - - } + + } }) .catch(({ response }) => { if (response && response.data && response.data.meta) { enqueueSnackbar(response.data.meta.message, { variant: 'error' }); - } + } }) .then(() => { setSubmitLoading(false); @@ -111,6 +116,11 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }: FormRe name: string; } + interface Specialities { + id: number; + name: string; + } + const [showAddNewForm, setShowAddNewForm] = useState(false); const [name, setName] = useState(''); const [alamat, setAlamat] = useState(''); @@ -191,7 +201,7 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }: FormRe - + {localeData.txtDialogMember1} * @@ -215,6 +225,45 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }: FormRe + {/* Specialist */} + + + {localeData.txtSpecialist} + option.name || ''} + value={member?.specialities.find((item: Specialities) => item.id === idSpecialities) || null} + onChange={(event: React.ChangeEvent<{}>, newValue : Specialities | null) => { + setIdSpecialities(newValue?.id || 0); + }} + renderInput={(params) => ( + + )} + /> + + + + + + + { localeData.txtDPPJ } + { + setInputDppj(event.target.value); + }} + fullWidth + /> + + + {localeData.txtDialogMember5} * @@ -226,7 +275,7 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }: FormRe setSubmissionDate( (newValue)); }} inputFormat="dd-MM-yyyy HH:mm" - renderInput={(params) => } + renderInput={(params) => } />