diff --git a/Modules/HospitalPortal/Http/Controllers/Api/RequestLogController.php b/Modules/HospitalPortal/Http/Controllers/Api/RequestLogController.php index a3d8ea35..a347a99b 100644 --- a/Modules/HospitalPortal/Http/Controllers/Api/RequestLogController.php +++ b/Modules/HospitalPortal/Http/Controllers/Api/RequestLogController.php @@ -10,6 +10,8 @@ use Illuminate\Support\Facades\DB; use Modules\Internal\Http\Controllers\Api\RequestLogController as primeCenterRequestLog; use App\Helpers\Helper; use App\Models\File; +use Dompdf\Dompdf; +use Dompdf\Options; class RequestLogController extends Controller { @@ -99,6 +101,7 @@ class RequestLogController extends Controller }) ->select( 'request_logs.id', + 'request_logs.member_id', 'request_logs.final_log', 'request_logs.code', 'members.name as full_name', @@ -281,4 +284,97 @@ class RequestLogController extends Controller } } } + + public function downlodLog($request_log_id) + { + $dataRequestLog = DB::table('request_logs') + ->where('request_logs.id', '=', $request_log_id) + ->first(); + $dataMember = DB::table('members') + ->where('members.id', '=', $dataRequestLog->member_id) + ->select( + 'members.principal_id', + 'members.name', + 'members.birth_date', + 'members.member_id', + 'members.gender', + DB::raw(' + (Select persons.nik FROM persons WHERE persons.id = members.person_id LIMIT 1) AS nik + '), + DB::raw(' + "Link Sehat" AS penjamin + '), + DB::raw(' + (Select corporates.name FROM corporates + INNER JOIN corporate_employees ON corporate_employees.corporate_id = corporates.id + WHERE corporate_employees.member_id = members.id LIMIT 1) AS nama_perusahaan + '), + DB::raw(' + (Select member_policies.policy_id FROM member_policies WHERE member_policies.member_id = members.member_id LIMIT 1) AS no_polis + '), + DB::raw(' + (Select member_policies.status FROM member_policies WHERE member_policies.member_id = members.member_id LIMIT 1) AS status_polis + '), + DB::raw(' + (Select plans.code FROM member_plans + INNER JOIN plans ON plans.id = member_plans.plan_id + WHERE member_plans.member_id = members.id LIMIT 1) AS code_plan + '), + DB::raw(' + (Select plans.limit_rules FROM member_plans + INNER JOIN plans ON plans.id = member_plans.plan_id + WHERE member_plans.member_id = members.id LIMIT 1) AS limit_rules + '), + DB::raw(' + "IDR" AS mata_uang + '), + 'members.members_effective_date AS mulai', + 'members.members_expire_date AS akhir' + ) + ->first(); + $data['namaKaryawan'] = ''; + if($dataMember->principal_id) + { + $dataNamaKaryawan = DB::table('members') + ->where('members.member_id', '=', $dataMember->principal_id) + ->select('members.name') + ->limit(1) + ->first(); + $data['namaKaryawan'] = $dataNamaKaryawan->name; + } + else{ + $data['namaKaryawan'] = $dataMember->name; + } + + $data['dataMember'] = $dataMember; + + $data['request_logs'] = $dataRequestLog; + + $pdf = new Dompdf(); + + $options = new Options(); + $options->set('isHtml5ParserEnabled', true); + $options->set('isPhpEnabled', true); + $options->set(['isRemoteEnabled' => true]); + $pdf->setOptions($options); + + // Halaman 1 + $html1 = view('pdf.req_log_page_1', $data); + + // Halaman 2 + $html2 = view('pdf.req_log_page_2', $data); + + // Gabung konten HTML dari dua tampilan + $htmlCombined = $html1 . $html2; + + $pdf->loadHtml($htmlCombined); + $pdf->render(); + + $headers = [ + 'Content-Type' => 'application/pdf', + 'Content-Disposition' => 'inline; filename="file.pdf"', + ]; + + return response($pdf->output(), 200, $headers); + } } diff --git a/Modules/HospitalPortal/Routes/api.php b/Modules/HospitalPortal/Routes/api.php index fabf81c9..f0717cc0 100644 --- a/Modules/HospitalPortal/Routes/api.php +++ b/Modules/HospitalPortal/Routes/api.php @@ -54,6 +54,7 @@ Route::prefix('v1')->group(function() { Route::get('get-request-log', 'getRequestLog'); Route::get('get-final-log', 'getFinalLog'); Route::post('request-final-log', 'requestFinalLog'); + Route::get('download-log/{request_log_id}', 'downlodLog'); }); //Notification Route::controller(NotificationController::class)->group(function() { diff --git a/frontend/hospital-portal/src/routes/index.tsx b/frontend/hospital-portal/src/routes/index.tsx index b3006919..a0165145 100644 --- a/frontend/hospital-portal/src/routes/index.tsx +++ b/frontend/hospital-portal/src/routes/index.tsx @@ -98,8 +98,8 @@ export default function Router() { element: , }, { - path: '/detail/:id', - element: , + path: '/claim/detail/:id', + element: , }, ], }, @@ -126,3 +126,4 @@ const Claim = Loadable(lazy(() => import('@/pages/Claim'))); const NotFound = Loadable(lazy(() => import('@/pages/Page404'))); const DetailClaimReport = Loadable(lazy(()=> import('@/sections/dashboard/Detail'))); +const DetailClaim = Loadable(lazy(()=> import('@/sections/claim/Detail'))); diff --git a/frontend/hospital-portal/src/sections/claim/Detail.tsx b/frontend/hospital-portal/src/sections/claim/Detail.tsx new file mode 100644 index 00000000..9c1ed9b8 --- /dev/null +++ b/frontend/hospital-portal/src/sections/claim/Detail.tsx @@ -0,0 +1,69 @@ +// mui +import { Container, Grid, Stack, Typography } from '@mui/material'; +// components +import Page from '../../components/Page'; +// utils +import useSettings from '../../hooks/useSettings'; +// section +import CardFamilyInformation from '../../sections/alarm-center/user-profile/CardFamilyInformation'; +// react +import { useNavigate, useParams } from 'react-router-dom'; +import ButtonBack from '../../components/ButtonBack'; +import { useEffect, useState, useContext } from 'react'; +import axios from '../../utils/axios'; +// pages +import DetailTimeline from '../../sections/dashboard/DetailTimeline'; +import DetailStepper from '../../sections/dashboard/DetailStepper'; +import { format } from 'date-fns'; +import ArrowBackIosIcon from '@mui/icons-material/ArrowBackIos'; +import { LanguageContext } from '@/contexts/LanguageContext'; + +// ---------------------------------------------------------------------- + +export default function Detail() { + const { localeData }: any = useContext(LanguageContext); + const navigate = useNavigate(); + const { themeStretch } = useSettings(); + const [data, setData] = useState(); + + const { id } = useParams(); + + useEffect(() => { + axios + .get('/detail-claim-requests/' + id) + .then((response) => { + setData(response.data); + }) + .catch((error) => { + console.error(error); + }); + + }, []); + + return ( + + + + navigate(-1)} sx={{cursor:'pointer'}}/> + Detail + {data ? ( + + {localeData.txtDialogMember5} + {(data && data.data) ? format(new Date(data.data.status.submission_date), "d MMM yyyy") : ''} + + ) : ''} + + {data ? ( + + + + + + + + + ) : ''} + + + ); +} \ No newline at end of file diff --git a/frontend/hospital-portal/src/sections/claim/DetailStepper.tsx b/frontend/hospital-portal/src/sections/claim/DetailStepper.tsx new file mode 100644 index 00000000..18dc959a --- /dev/null +++ b/frontend/hospital-portal/src/sections/claim/DetailStepper.tsx @@ -0,0 +1,58 @@ +import * as React from 'react'; +import Box from '@mui/material/Box'; +import Stepper from '@mui/material/Stepper'; +import Step from '@mui/material/Step'; +import StepLabel from '@mui/material/StepLabel'; +import { useEffect, useState } from 'react'; +import ClearIcon from '@mui/icons-material/Clear'; + +const steps = [ + 'Request', + 'Review', + 'Approval', + 'Decline', +]; + +export default function HorizontalLinearAlternativeLabelStepper({data}) { + const [active, setActive] = useState(0); + const [status, SetStatus] = useState(null); + let updatedSteps = [...steps]; + useEffect(() => { + if (data && data.data) { + if (data.data.status.status === 'requested') { + setActive(1); + updatedSteps = updatedSteps.filter(step => step !== 'Decline'); + } + else if (data.data.status.status === 'reviewed') { + setActive(2); + updatedSteps = updatedSteps.filter(step => step !== 'Decline'); + } + else if (data.data.status.status === 'approved') + { + setActive(3); + updatedSteps = updatedSteps.filter(step => step !== 'Decline'); + } + else if(data.data.status.status === 'declined') + { + setActive(4) + updatedSteps = updatedSteps.filter(step => step !== 'Approval'); + } + } + SetStatus(updatedSteps); + }, [data]); + + + + + return ( + + + {status?.map((label) => ( + + : ''}>{label} + + ))} + + + ); +} diff --git a/frontend/hospital-portal/src/sections/claim/DetailTimeline.tsx b/frontend/hospital-portal/src/sections/claim/DetailTimeline.tsx new file mode 100644 index 00000000..9d8b7b7f --- /dev/null +++ b/frontend/hospital-portal/src/sections/claim/DetailTimeline.tsx @@ -0,0 +1,386 @@ +import * as React from 'react'; +import Timeline from '@mui/lab/Timeline'; +import TimelineItem, { timelineItemClasses } from '@mui/lab/TimelineItem'; +import TimelineSeparator from '@mui/lab/TimelineSeparator'; +import TimelineConnector from '@mui/lab/TimelineConnector'; +import TimelineContent from '@mui/lab/TimelineContent'; +import TimelineDot from '@mui/lab/TimelineDot'; +import {Typography, Card, Stack, ButtonBase, Box, Divider} from '@mui/material'; +import { styled } from '@mui/material/styles'; +import Paper from '@mui/material/Paper'; +import Button from '@mui/material/Button'; +import AddIcon from '@mui/icons-material/Add'; +import Iconify from '../../components/Iconify'; +import { useEffect, useState, useRef } from 'react'; +import { format } from 'date-fns'; +import { LoadingButton } from '@mui/lab'; +import axios from '../../utils/axios'; +import { makeFormData } from '@/utils/jsonToFormData'; +import { enqueueSnackbar } from 'notistack'; +import { useParams} from 'react-router-dom'; +import InsertDriveFileIcon from '@mui/icons-material/InsertDriveFile'; + +const Item1 = styled(Paper)(({ theme }) => ({ + ...theme.typography.body2, + padding: theme.spacing(1), + textAlign: 'center', + backgroundColor: '#919EAB29', + color: '#637381', + width: 'fit-content', + marginRight: 'auto', +})); + +const Item2 = styled(Paper)(({ theme }) => ({ + backgroundColor: theme.palette.mode === 'dark' ? '#1A2027' : '#fff', + ...theme.typography.body2, + padding: theme.spacing(1), + textAlign: 'center', + color: theme.palette.text.secondary, + width: 'fit-content', + marginLeft: 'auto', +})); + +export default function NoOppositeContent({data}) { + const [timeline, setTimeline] = useState(null); + const [requestFile, setRequestFile] = useState(null); + useEffect(() => { + if (data && data.data) { + setTimeline(data.data.timeline); + setRequestFile(data.data.request_files); + } + + }, [data]); + + // Diagnosis + const fileRequestDocumentInputDiagnosis = useRef(null); + const [fileDiagnosis, setFileDiagnosis] = useState([]); + const handleRequestDocumentInputChangeDiagnosis = (event) => { + if (event.target.files[0]) { + setFileDiagnosis([...fileDiagnosis, ...event.target.files]); + } + }; + const removeFileDiagnois = (filesState, index) => { + setFileDiagnosis( + filesState.filter((file, fileIndex) => { + return fileIndex != index; + }) + ); + }; + // Kondisi + const fileRequestDocumentInputKondisi = useRef(null); + const [fileKondisi, setFileKondisi] = useState([]); + const handleRequestDocumentInputChangeKondisi = (event) => { + if (event.target.files[0]) { + setFileKondisi([...fileKondisi, ...event.target.files]); + } + }; + const removeFileKondisi = (filesState, index) => { + setFileKondisi( + filesState.filter((file, fileIndex) => { + return fileIndex != index; + }) + ); + }; + // Result + const fileRequestDocumentInputResult = useRef(null); + const [fileResult, setFileResult] = useState([]); + const handleRequestDocumentInputChangeResult = (event) => { + if (event.target.files[0]) { + setFileResult([...fileResult, ...event.target.files]); + } + }; + const removeFileResult = (filesState, index) => { + setFileResult( + filesState.filter((file, fileIndex) => { + return fileIndex != index; + }) + ); + }; + const { id } = useParams(); + const [submitLoading, setSubmitLoading] = useState(false); + const submitRequestFiles = () => { + setSubmitLoading(true); + const formData = makeFormData({ + fileDiagnosis: fileDiagnosis, + fileKondisis: fileKondisi, + fileResults: fileResult + }); + axios + .post('claim-requests/'+id+'/request-files', formData) + .then((response) => { + window.location.reload(); + }) + .catch(({ response }) => { + enqueueSnackbar(response.data.message ?? 'Something Went Wrong', { variant: 'error' }); + }); + } + const submitButton = requestFile?.find((dataRequestFile) => dataRequestFile.check_files === null); + return ( + <> + {timeline?.map((dataTimeline, index) => ( + + {dataTimeline.date ? format(new Date(dataTimeline.date), "d MMM yyyy") : ''} + + + + + + + + + + {dataTimeline.date ? format(new Date(dataTimeline.date), "HH : mm") : ''} + {dataTimeline.txt_status} + + + Detail: + {dataTimeline.description} + + {dataTimeline.status === 'reviewed' && requestFile ? ( + <> + {submitButton ? ( + Request Document + ) : ( + Request Document Success Uploaded + )} + {/* Diagnosis */} + {requestFile?.map((dataRequestFile, index) => { + if(dataRequestFile.type !== 'claim-diagnosis' || dataRequestFile.check_files !== null){ + return null; + } + return ( + + + Diagnosis + + } + spacing={1} + sx={{ marginY: 2 }} + > + {fileDiagnosis && + fileDiagnosis.map((file, index) => ( + + + + {file.name ? file.name : '-'} + + { + removeFileDiagnois(fileDiagnosis, index); + }} + sx={{cursor: 'pointer'}} + > + + ))} + + fileRequestDocumentInputDiagnosis.current?.click()} + > + + + + Add Result + + + handleRequestDocumentInputChangeDiagnosis(event)} + accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel, text/plain, application/pdf" + /> + + + ); + })} + {/* Kondisi */} + {requestFile?.map((dataRequestFile, index) => { + if(dataRequestFile.type !== 'claim-kondisi' || dataRequestFile.check_files !== null){ + return null; + } + return ( + + + Condition + + } + spacing={1} + sx={{ marginY: 2 }} + > + {fileKondisi && + fileKondisi.map((file, index) => ( + + + + {file.name ? file.name : '-'} + + { + removeFileKondisi(fileKondisi, index); + }} + sx={{cursor: 'pointer'}} + > + + ))} + + fileRequestDocumentInputKondisi.current?.click()} + > + + + + Add Result + + + handleRequestDocumentInputChangeKondisi(event)} + accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel, text/plain, application/pdf" + /> + + + ); + })} + {/* Supporting Result */} + {requestFile?.map((dataRequestFile, index) => { + if(dataRequestFile.type !== 'claim-result' || dataRequestFile.check_files !== null){ + return null; + } + return ( + + + Supporting Result + + } + spacing={1} + sx={{ marginY: 2 }} + > + {fileResult && + fileResult.map((file, index) => ( + + + + {file.name ? file.name : '-'} + + { + removeFileResult(fileResult, index); + }} + sx={{cursor: 'pointer'}} + > + + ))} + + fileRequestDocumentInputResult.current?.click()} + > + + + + Add Result + + + handleRequestDocumentInputChangeResult(event)} + accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel, text/plain, application/pdf" + /> + + + ); + })} + {submitButton ? ( + { + submitRequestFiles(); + }} + loading={submitLoading} + > + Submit + + ) : ''} + + ) : ''} + + + + + + ))} + + ); +} diff --git a/frontend/hospital-portal/src/sections/claim/TableList.tsx b/frontend/hospital-portal/src/sections/claim/TableList.tsx index 513ea292..61badfaf 100644 --- a/frontend/hospital-portal/src/sections/claim/TableList.tsx +++ b/frontend/hospital-portal/src/sections/claim/TableList.tsx @@ -313,7 +313,7 @@ export default function TableList() { action: - + navigate ('/claim/detail/'+obj.claim_request_id)}> View diff --git a/frontend/hospital-portal/src/sections/dashboard/FormRequestLog.tsx b/frontend/hospital-portal/src/sections/dashboard/FormRequestLog.tsx index 9110d837..1f6433c2 100644 --- a/frontend/hospital-portal/src/sections/dashboard/FormRequestLog.tsx +++ b/frontend/hospital-portal/src/sections/dashboard/FormRequestLog.tsx @@ -44,7 +44,6 @@ export default function FormRequestClaim({ member, handleSubmitSuccess }: FormRe axios .post('/request-log', formData) .then((response) => { - console.log(response); if (response && response.data && response.data.meta) { enqueueSnackbar(response.data.meta.message, { variant: 'success' }); handleSubmitSuccess(); diff --git a/frontend/hospital-portal/src/sections/dashboard/TableList.tsx b/frontend/hospital-portal/src/sections/dashboard/TableList.tsx index b1575b08..b3f95ca0 100644 --- a/frontend/hospital-portal/src/sections/dashboard/TableList.tsx +++ b/frontend/hospital-portal/src/sections/dashboard/TableList.tsx @@ -51,23 +51,16 @@ function handleChangeTab(event: React.SyntheticEvent, newValue: string) { const [data, setData] = useState([]); // Download LOG - async function handleDownloadLog(claimRequest:any) { + async function handleDownloadLog(request_log_id:any) { return axios - .get(`claim-requests/${claimRequest}/log`, { + .get(`download-log/${request_log_id}`, { responseType: 'blob', }) .then((response) => { - window.open(URL.createObjectURL(response.data)); - // setLoadingLog(false); + window.open(URL.createObjectURL(response.data), '_blank'); }) - // .then((blobFile) => { - // new File([blobFile], 'asdads.pdf', { type: blobFile.type }) - // setLoadingLog(false); - // }) .catch((response) => { - console.log(response); enqueueSnackbar(response.message, { variant: 'error' }); - // setLoadingLog(false); }); } @@ -357,13 +350,13 @@ function handleChangeTab(event: React.SyntheticEvent, newValue: string) { View - {obj.status === 'approved' ? ( - handleDownloadLog(obj.claim_request_id)}> + {/* {obj.status === 'approved' ? ( */} + handleDownloadLog(obj.id)}> Download LOG - ):''} - {obj.final_log === 0 ? ( + {/* ):''} */} + {obj.final_log === 0 && obj.status === 'approved' ? ( handleRequestFinalLog(obj.id, obj.full_name, obj.no_polis, obj.submission_date) }> Request Final LOG diff --git a/frontend/hospital-portal/src/sections/dashboard/TableListFinalLog.tsx b/frontend/hospital-portal/src/sections/dashboard/TableListFinalLog.tsx index 06dc44d8..4a71e61d 100644 --- a/frontend/hospital-portal/src/sections/dashboard/TableListFinalLog.tsx +++ b/frontend/hospital-portal/src/sections/dashboard/TableListFinalLog.tsx @@ -355,7 +355,7 @@ export default function TableListFinalLog() { Download LOG ):''} - {!obj.check_claim ? ( + {!obj.check_claim && obj.status === 'approved' ? ( handleRequestClaimSubmit(obj.member_id, obj.service_code, obj.id, obj.full_name, obj.no_polis, obj.submission_date) }> Submit Claim diff --git a/resources/views/pdf/req_log_page_1.blade.php b/resources/views/pdf/req_log_page_1.blade.php new file mode 100644 index 00000000..768e27dd --- /dev/null +++ b/resources/views/pdf/req_log_page_1.blade.php @@ -0,0 +1,268 @@ + + + + + + + + +
+
+
+
+ The Future Of Healthcare At Your Fingertips +
+ +
+
+ SURAT JAMINAN +
+
+ (SURAT JAMINAN INI HARUS DITANDATANGANI OLEH PASIEN) +
+
+ + + + + + + + + + + + + + + + + +
No. Klaim:{{$request_logs->code}}Tanggal:{{ \Carbon\Carbon::parse($request_logs->submission_date)->format('d M Y') }}
Kepada:{{ $dataMember->name }}Plan Polis:{{ $dataMember->code_plan }}
+
+ (HOT LINE LINK SEHAT) +
+
+ Link Sehat bertindak mewakili perusahaan asuransi/penanggung untuk mengeluarkan Surat Jaminan Awal untuk peserta dibawah ini : +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Jenis Surat Jaminan:SURAT JAMINAN AWALPenjamin:{{ $dataMember->penjamin }}
Nama Peserta:{{ $dataMember->name }}Nama Perusahaan:{{ $dataMember->nama_perusahaan }}
Nama Karyawan:{{ $namaKaryawan }}No. Polis:{{ $dataMember->code_plan }}
Tanggal Lahir:{{ \Carbon\Carbon::parse($dataMember->birth_date)->format('d M Y') }}Produk:{{ $dataMember->no_polis }}
Jenis Kelamin:{{ $dataMember->gender == 'male' ? 'Laki-Laki' : 'Perempuan' }}Tipe:{{ $dataMember->limit_rules == '999999999' ? 'As Charge' : 'Max Amount, Rp '.number_format($dataMember->limit_rules, 2, ',', '.') }}
Member ID:{{ $dataMember->member_id }}Status Polis:{{ $dataMember->status_polis == 'active' ? 'Aktif' : 'Tidak Aktif' }}
Identitas Peserta:{{ $dataMember->nik }}Tanggal Mulai Akhir:{{ \Carbon\Carbon::parse($dataMember->mulai)->format('d M Y') }} - {{ \Carbon\Carbon::parse($dataMember->akhir)->format('d M Y') }}
Hak Kamar Pasien:Mata Uang:{{ $dataMember->mata_uang }}
Tanggal Pembayaran:Rumah Sakit:
Alamat:
+
+ Surat Jaminan ini dinyatakan berlaku apabila disertai surat jaminan akhir dengan nominal yang tertera pada akhir perawatan. +
+
+ The Future Of Healthcare At Your Fingertips +
+
+ PT Link Medis Sehat
+ Primaya Hospital Corporate
+ Graha Cempaka Mas Blok D5-6
+ Jl. Let. Jend. Suprapto, Jakarta Pusat 10640, Indonesia
+ Telp (021) 4217746/47 +
+
+ + \ No newline at end of file diff --git a/resources/views/pdf/req_log_page_2.blade.php b/resources/views/pdf/req_log_page_2.blade.php new file mode 100644 index 00000000..ea7a1425 --- /dev/null +++ b/resources/views/pdf/req_log_page_2.blade.php @@ -0,0 +1,254 @@ + + + + + + + + +
+
+
+
+ The Future Of Healthcare At Your Fingertips +
+ +
+
SYARAT DAN KETENTUAN
+ + + + + + + + + + + + + + + + + + + + + + + + + +
1. Surat jaminan ini hanya berlaku untuk diagnosa yang tercantum diatas. + Apabila ditemukan adanya perubahan atau penambahan diagnosa, maka Link Sehat berhak membatalkan surat jaminan. + Mohon untuk menghubungi Link Sehat apabila ada perubahan diagnosa dan diagnosa tambahan.
2. Surat jaminan ini dinyatakan berlaku apabila disertai surat jaminan akhir dengan + nominal yang tertera pada kolom diatas.
3. Surat jaminan ini tidak berlaku untuk biaya diluar medis seperti makan/minum + diluar ketentuan, tagihan telepon, binatu, dan lain-lain. Mohon ditagihkan langsung kepeserta.
4. Rumah sakit harap segera menghubungi Link Sehat apabila biaya rumah sakit melebihi batas tertanggung diatas.
5. Rumah sakit wajib menghubungi Link Sehat sebelum pasien meninggalkan rumah sakit + dapat menghubungi biaya apa saja yang dijamin oleh Link Sehat. Jika peserta meninggalkan rumah sakit sebelum mengkonfirmasikan ke Link Sehat, + maka Link Sehat tidak bertanggung jawab atas biaya yang tidak dijamin oleh pihak asuransi.
6. Peserta bertanggung jawab untuk menyelesaikan secara langsung kepada pihak rumah sakit dan penyedia jasa medis + apabila terjadi selisih biaya (ekses) atas seluruh biaya perawatan, biaya medis, dan yang lain yang telah terjadi sehubungan + dengan rawat inap, maupun atas perihal perawatan medis yang tidak tercakup dalam polis asuransi dikarenakan karena alasan apapun. + Apabila biaya-biaya tersebut telah dijamin oleh Link Sehat atas nama nasabah, maka peserta akan membayar kembali ke pihak Link Sehat + secara penuh termasuk biaya berhubungan dengan penagihan (apabila ada) yang terjadi ke pihak Link Sehat atas biaya yang tidak termasuk dalam manfaat polis.
7. Dengan ini perserta menyatakan mengetahui dan menyetujui ketentuan selisih biaya yang telah disebutkan diatas.
8. Dalam hal surat jaminan ini tidak ditandatangani oleh peserta yang bersangkutan maka rumah sakit berkewajiban untuk menyampaikan keadaan tersebut + kepada Link Sehat dalam kurun waktu paling lambat 1x24 jam, dalam hal tidak ada perubahan dalam jangka waktu yang telah ditentukan tersebut + maka dianggap peserta yang bersangkutan telah setuju dengan ketentuan yang terdapat dalam surat jaminan ini.
+
+ +
+ Hormat Kami,
+ Acknowledged, +
+
+ [..................................................] +
+
+ [{{ $dataMember->name }}] +
+
+ The Future Of Healthcare At Your Fingertip +
+
+ PT Link Medis Sehat
+ Primaya Hospital Corporate
+ Graha Cempaka Mas Blok D5-6
+ Jl. Let. Jend. Suprapto, Jakarta Pusat 10640, Indonesia
+ Telp (021) 4217746/47 +
+
+ + \ No newline at end of file diff --git a/resources/views/pdf/view.blade.php b/resources/views/pdf/view.blade.php new file mode 100644 index 00000000..dd2e4a16 --- /dev/null +++ b/resources/views/pdf/view.blade.php @@ -0,0 +1,37 @@ + + + + + + + + Ivan Julian + + + + + + + +

Hello, {{ $key }}

+

This is a simple example for generating PDF in Laravel using Dompdf.

+ +