878 Commits

Author SHA1 Message Date
9456e9ccb7 add email example dan mempertahankan addHeaderKey 2026-05-15 14:44:37 +07:00
6e22cfbe29 test(postman): add route test and postman collections 2026-05-15 11:44:16 +07:00
6d58cc8585 feat(provider-online): add billingsementara endpoint and mapping fixes 2026-05-15 11:42:14 +07:00
2aca3693f3 feat(provider-integrations): move ProviderOnline endpoints to new module 2026-05-15 11:41:35 +07:00
8cd1385a21 chore: update hospital portal route mappings for bridging endpoints 2026-05-14 16:00:25 +07:00
46ac5c8651 fix: guard missing logo files in request/final log PDF templates 2026-05-14 15:58:21 +07:00
4fea68e542 feat: align ProviderOnline bridging flows and LOG code generation 2026-05-14 15:57:58 +07:00
4027d6f687 feat: add provider model and bridging schemas 2026-05-14 15:57:40 +07:00
f343f31075 docs: add AGENTS and sync AI agent guides for ASO 2026-05-14 15:57:24 +07:00
Iqbal
7a72e6674f remove console log 2026-05-12 13:46:11 +07:00
Fadila
a7b1c78cc5 handle corporate code pada benevit 2026-05-12 13:27:56 +07:00
Iqbal
843ddd0201 Merge branch 'feature/report-primayan' 2026-05-11 15:25:02 +07:00
Iqbal
80204a7abb feat: add Indonesian log type mapping and color chips to report 2026-05-11 15:01:44 +07:00
Iqbal
682edcd50e Update signature logic for VALEIND with LinkSehat penjamin 2026-05-11 13:45:23 +07:00
Iqbal
d96e439b2a Update Primayan Medicare report search and layout 2026-05-11 11:36:13 +07:00
Iqbal
21a909aacb Add Primayan Medicare report frontend and navigation 2026-05-11 09:10:33 +07:00
Iqbal
5dc04d01e2 Add Primayan Medicare report with LOG codes and aggregated amounts 2026-05-11 09:10:13 +07:00
Iqbal
429ef68f09 Merge branch 'feature/report-primayan' 2026-05-09 13:07:15 +07:00
Iqbal
d935445ebc fix: update signature logic for VALEIND with LinkSehat penjamin 2026-05-09 13:06:55 +07:00
Iqbal
597e52dc56 remove debugbar 2026-05-09 12:27:24 +07:00
Iqbal
9cbc65ade9 add prune 2026-05-09 12:24:30 +07:00
Iqbal
4160021ffb Add Laravel Telescope for debugging and monitoring 2026-05-09 10:59:17 +07:00
Fadila
8e375c2764 menampilkan keterangan nama pasien 2026-05-08 14:29:25 +07:00
Iqbal
eddfcd2b21 Merge branch 'feature/flag-log-status' into staging 2026-05-07 13:24:18 +07:00
Iqbal
0ee868e071 fix: update log_type from final to consultation in final log table and sync command 2026-05-07 13:23:48 +07:00
Iqbal
7478064d5f Merge branch 'feature/flag-log-status' into staging 2026-05-06 19:57:21 +07:00
Iqbal
2ae56ce039 filter flag final type log 2026-05-06 19:57:07 +07:00
Iqbal
63698bc1d1 Merge branch 'feature/flag-log-status' into staging 2026-05-05 14:35:21 +07:00
Iqbal
0938444926 feat: add log type column to final log table 2026-05-05 14:07:48 +07:00
Iqbal
ff11db177f feat: add sync command for log_type from telemedicine 2026-05-05 14:07:33 +07:00
Iqbal
89506b8491 feat: save log_type when creating request log from Primaya 2026-05-05 14:07:17 +07:00
Iqbal
51018456bc feat: add log type and final log status columns to request log table 2026-05-05 13:44:39 +07:00
Iqbal
ad111bc61f feat: add translation keys for log type and final log status 2026-05-05 13:44:15 +07:00
Iqbal
e494fbb800 feat: return log_type field in getRequestLog API 2026-05-05 13:44:01 +07:00
Iqbal
c32e0dd779 feat: add log_type column to request_logs table 2026-05-05 13:43:35 +07:00
Iqbal
f42266258f fix sign 2026-04-28 14:50:41 +07:00
Fadila
18edec5393 tambah keterangan at pada approved dan approved final log 2026-04-25 08:29:38 +07:00
ivan-sim
14e0182709 update revisi 2026-04-14 16:23:22 +07:00
ivan-sim
7dad4e8004 add edit provider prime center 2026-04-13 14:48:29 +07:00
ivan-sim
5dbad1f6a2 update benefit import 2026-04-10 13:52:02 +07:00
ivan-sim
88be6605c2 DPPJ 2026-04-09 16:16:01 +07:00
ivan-sim
8eba77dc2f edit final log update 2026-04-09 14:22:47 +07:00
ivan-sim
63de17a98f Edit Final LOG 2026-04-09 14:20:29 +07:00
ivan-sim
e4a6a58e17 update member 2026-04-08 16:42:10 +07:00
ivan-sim
5725178c1f ketinggalan konflik 2026-04-08 10:46:45 +07:00
ivan-sim
492bdf6cc6 Update Serice member bug 2026-04-08 10:31:23 +07:00
Server D3 Linksehat
daddb3ba74 Ketinggalan konflik 2026-04-07 21:21:22 +07:00
ivan-sim
f119948c63 Merge branch 'feature/add-input-benefit-hsp' 2026-04-07 20:57:18 +07:00
ivan-sim
8de1f2baa0 Merge branch 'feature/primaya' 2026-04-07 20:51:26 +07:00
ivan-sim
f98c3c836c add approved_at request log awal 2026-04-07 20:45:28 +07:00
ivan-sim
4ed1a3246e add approved_at request log awal 2026-04-07 20:45:04 +07:00
R
e62d0b2181 Fix Makassar 2026-04-02 16:51:07 +07:00
Iqbal
5a4257e22a Merge branch 'feature/primaya' 2026-04-01 21:32:39 +07:00
Iqbal
d3d47292dd Merge branch 'feature/primaya' into staging 2026-04-01 21:32:10 +07:00
Iqbal
cd3d285082 update status to approved 2026-04-01 21:31:14 +07:00
Iqbal
256a630872 Merge branch 'feature/primaya' 2026-04-01 21:00:40 +07:00
Iqbal
9c01a5fdf7 Merge branch 'feature/primaya' into staging 2026-04-01 20:59:29 +07:00
Iqbal
25453eeeda feat: add image 2026-04-01 20:56:42 +07:00
Iqbal
63117263a6 feat: add pdf for primayan medicare 2026-04-01 20:56:34 +07:00
R
8b50b8d14a Merge commit '23e201d50ca14ecb3cb4dee157304c730062589d' 2026-04-01 20:02:33 +07:00
ivan-sim
23e201d50c Update ReqLogAwal 2026-04-01 17:07:49 +07:00
R
31b0a7811b Hotfix 2026-04-01 02:07:07 +07:00
R
5bf5a05698 Hotfix 2026-04-01 02:06:09 +07:00
Server D3 Linksehat
5994aae990 ignore 2026-03-31 14:00:05 +07:00
Server D3 Linksehat
0c9ec123fb fix public folder after wrong gitignore 2026-03-31 13:59:42 +07:00
Server D3 Linksehat
ebafd8697d resolve conflict keep env.development 2026-03-31 13:47:39 +07:00
Server D3 Linksehat
19c7fdd3e0 git ignore 2026-03-31 13:44:13 +07:00
Server D3 Linksehat
97a68e3d4f update 2026-03-31 13:43:46 +07:00
Server D3 Linksehat
3554e680ce detail kurang 2026-03-31 13:33:01 +07:00
ivan-sim
85200b27ba Merge branch 'feature/add-input-benefit-hsp' into staging 2026-03-31 13:29:58 +07:00
ivan-sim
3d9fe9cec0 Merge branch 'feature/primaya' into staging 2026-03-31 13:29:08 +07:00
ivan-sim
36653c4751 update sisa limit 2026-03-31 13:15:57 +07:00
ivan-sim
20fa3fbc02 update Hide Approve dan Persetujuan 2026-03-31 11:43:34 +07:00
ivan-sim
765d1a5ef3 Update ENV 2026-03-31 10:02:29 +07:00
ivan-sim
48bd2af847 hide persetujuan tindakan 2026-03-31 10:02:13 +07:00
ivan-sim
63c169ae61 Merge branch 'feature/add-input-benefit-hsp' into staging 2026-03-30 08:47:55 +07:00
ivan-sim
0370302fe6 Update Organitation 2026-03-02 11:01:35 +07:00
ivan-sim
b0b34df1b0 calculate-benefit 2026-03-02 09:38:49 +07:00
ivan-sim
928cb37289 update hospital 2026-02-27 16:08:57 +07:00
ivan-sim
ba4fba8380 update 2026-02-27 16:05:11 +07:00
ivan-sim
e889eaadbf update 2026-02-27 15:39:31 +07:00
R
30e8dd3cda Merge branch 'feature/primaya' into staging 2026-02-26 14:08:43 +07:00
R
77c8d7200d Change LMS for Primaya jwt generate diluar 2026-02-26 14:08:13 +07:00
R
7c2a8496af Merge remote-tracking branch 'origin/feature/primaya' into staging 2026-02-26 08:35:27 +07:00
ivan-sim
6ffc1bcfa5 Update Request LOG 2026-02-25 14:05:08 +07:00
ivan-sim
d81d38ada4 jwt 2026-02-24 15:55:37 +07:00
ivan-sim
2bb8091082 Update authenticate 2026-02-24 11:07:33 +07:00
ivan-sim
f82c6177a3 Update JWT Token 2026-02-24 07:51:20 +07:00
Server D3 Linksehat
7bae2cee54 Rebuild git tracking based on .gitignore 2026-02-20 10:08:35 +07:00
ivan-sim
8eb82a171c Add Middlewhere 2026-02-20 10:01:20 +07:00
ivan-sim
3534818c60 Update Pisah API 2026-02-20 09:03:50 +07:00
ivan-sim
bc8a088d8b feature primaya 2026-02-20 08:55:03 +07:00
ivan-sim
127ef3ff50 Update Add Input Hospital Portal 2026-02-10 10:05:06 +07:00
ivan-sim
8084a83c3d Update Add Input Hospital Portal 2026-02-10 10:03:28 +07:00
Server D3 Linksehat
7e42a5ecfd Merge branch 'origin/production' of https://dev.sismedika.online/tubagus/aso into origin/production 2026-02-04 14:40:21 +07:00
Server D3 Linksehat
8077284d3b Server Changes, Ambil semuanya 2026-02-04 14:39:20 +07:00
ivan-sim
f10589eb85 Update Dashboard Client Portal 2026-01-21 17:13:45 +07:00
ivan-sim
b8a72b8119 TEst Update Search claim 2026-01-13 10:48:37 +07:00
ivan-sim
e81998cbe2 Update benefit deleted is null 2026-01-13 10:39:10 +07:00
ivan-sim
833e158c19 update cek invoice jg 2026-01-13 10:33:01 +07:00
ivan-sim
37d96ddb37 Update jg cek deleted by create invoice 2026-01-13 10:29:15 +07:00
ivan-sim
8d84b123f7 cek deleted by di claim management 2026-01-13 10:12:53 +07:00
ivan-sim
eaf7c94f7a Principal id name 2026-01-05 15:59:19 +07:00
ivan-sim
e178682fcf Export Excel Invoice & Imporve Invoice 2025-12-18 09:53:01 +07:00
ivan-sim
9333e37dfe update gitignore 2025-12-11 15:01:42 +07:00
Fadila
9976e8e438 tambah kolom kode livechat export mountly report livechat 2025-10-22 10:17:13 +07:00
Fadila
14ddbf48f3 tambah kolom kode livechat 2025-10-21 16:08:07 +07:00
Fadila
c6d0015c07 ubah alamat menjadi .com ketika update no sjp 2025-09-29 16:38:56 +07:00
ivan-sim
d547b6d374 Update Status Livechat 2025-09-25 14:16:07 +07:00
Server D3 Linksehat
179f4b3088 Merge remote-tracking branch 'origin/staging' into origin/production 2025-09-22 16:07:43 +07:00
Server D3 Linksehat
04752ffcd7 update 2025-09-22 16:02:58 +07:00
Fadila
42ea2e108d tambah table log update np sjp 2025-09-22 09:19:52 +07:00
Fadila
a29c39086a set cron job update no sjp 2025-09-22 09:04:00 +07:00
b27682f5b3 update 2025-09-15 15:13:13 +07:00
acfc8d1288 update approval di list approval 2025-09-12 11:28:15 +07:00
c65a95ce09 list dan detail approval pov apporoval 2025-09-12 09:29:31 +07:00
6a885c84ac penyesuaian url 2025-09-11 10:03:01 +07:00
3c9066edc6 backend dan penyesian upload file dinamis approval notifikasi 2025-09-11 09:47:42 +07:00
6a4aaff628 frontend approval 2025-09-04 08:37:21 +07:00
Server D3 Linksehat
ff5c1de363 Merge remote-tracking branch 'origin/staging' into origin/production 2025-09-02 08:40:50 +07:00
Server D3 Linksehat
5f701af321 update composer 2025-09-02 08:39:39 +07:00
Server D3 Linksehat
14f2da6909 Merge remote-tracking branch 'origin/staging' into origin/production 2025-09-02 08:38:49 +07:00
Server D3 Linksehat
b2580c49ab update path daily monitoring 2025-09-01 11:37:56 +07:00
Server D3 Linksehat
ea4059766e update import tetap dari local 2025-09-01 10:05:07 +07:00
Server D3 Linksehat
a9423e8b0a bugs fix ambil path di list provider 2025-08-27 16:30:44 +07:00
Server D3 Linksehat
9900c00b8d updat bugs fix upload dan tampil file di dailymonitoring 2025-08-27 11:23:50 +07:00
Server D3 Linksehat
633c9aeae0 update migrasi upload file to s3 amazon 2025-08-25 10:29:46 +07:00
Server D3 Linksehat
ba2490147f migrasi upload file ke s3 amazon 2025-08-25 09:14:11 +07:00
Server D3 Linksehat
fa29494a67 Merge remote-tracking branch 'origin/staging' into origin/production 2025-08-19 09:42:45 +07:00
Server D3 Linksehat
9634b12f11 update 2025-08-19 09:39:37 +07:00
df02dc0c5f tambah flag untuk file 2025-08-19 09:33:26 +07:00
Fadila
80fe484b09 tambah data total_premi dan limit_rules pada page request log halaman dashboard 2025-07-24 16:31:51 +07:00
60f5f38ffe update status manual jika ada cancel / waiting billing 2025-07-18 09:59:27 +07:00
05bed90598 cronjob update status otomatis 2025-07-18 09:22:33 +07:00
Server D3 Linksehat
b6e8bbb79b Merge commit '664f2a7faa1345f59f91b68e09449be6d39f5548' into staging 2025-06-05 09:27:55 +07:00
Server D3 Linksehat
664f2a7faa tambah field livechat 2025-06-05 09:25:17 +07:00
Server D3 Linksehat
bec3c2bf17 penyesuaian report livechat 2025-05-26 09:07:29 +07:00
Server D3 Linksehat
5482ca3ae8 Merge remote-tracking branch 'origin/staging' into origin/production 2025-05-13 08:44:52 +07:00
eaa508ad74 add image 2025-05-13 08:43:51 +07:00
Server D3 Linksehat
eb0c34293e Merge remote-tracking branch 'origin/staging' into origin/production 2025-05-13 08:41:49 +07:00
a480b6e133 update 2025-05-13 08:41:16 +07:00
Server D3 Linksehat
2a4a6f2ca2 Merge remote-tracking branch 'origin/staging' into origin/production 2025-05-13 08:37:27 +07:00
84caa2265d update final log 2025-05-13 08:36:41 +07:00
Server D3 Linksehat
202df9064f update 2025-05-06 14:28:17 +07:00
Server D3 Linksehat
8b06eb77d1 Merge remote-tracking branch 'origin/staging' into origin/production 2025-05-05 11:25:21 +07:00
Server D3 Linksehat
9bc2ecac96 update 2025-05-05 11:24:46 +07:00
a3e0c72908 update penjagaan import member 2025-05-05 10:38:46 +07:00
06bba125c8 update 2025-05-05 10:00:37 +07:00
Server D3 Linksehat
7ae6a89ff9 Merge remote-tracking branch 'origin/staging' into origin/production 2025-04-21 16:16:04 +07:00
e657e3f75a prescription 2025-04-21 15:56:58 +07:00
Server D3 Linksehat
45aeb8faee Merge remote-tracking branch 'origin/staging' into origin/production 2025-04-03 10:32:00 +07:00
af20355b31 update 2025-04-03 10:24:33 +07:00
Server D3 Linksehat
b9f0bffbc3 Merge remote-tracking branch 'origin/staging' into origin/production 2025-04-03 10:03:12 +07:00
8597ce1fff Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2025-04-03 09:22:05 +07:00
efc46c0f92 update 2025-04-03 09:21:18 +07:00
Server D3 Linksehat
86ed6b5bb1 report monthly 2025-03-27 17:11:26 +07:00
Server D3 Linksehat
6ffd34a409 update 2025-03-24 13:25:45 +07:00
Server D3 Linksehat
61ed988f50 Merge remote-tracking branch 'refs/remotes/origin/staging' into staging 2025-03-24 13:22:41 +07:00
Server D3 Linksehat
29eb4fd3ef drugs list 2025-03-24 13:22:13 +07:00
Server D3 Linksehat
277802c708 Merge remote-tracking branch 'origin/staging' into origin/production 2025-03-24 13:19:45 +07:00
ab3d850bd4 view report prescription 2025-03-24 10:06:19 +07:00
dc2f40e5ad navigation seeder 2025-03-24 10:05:33 +07:00
e2c9a4bad0 prescription 2025-03-24 10:04:02 +07:00
Server D3 Linksehat
a661ee7f25 Merge remote-tracking branch 'origin/staging' into origin/production 2025-03-14 15:16:21 +07:00
b587e53f7a bug fix 2025-03-14 15:15:16 +07:00
Server D3 Linksehat
ad93252997 Merge remote-tracking branch 'origin/staging' into origin/production 2025-03-14 14:36:58 +07:00
c8efb2d82b report monthly 2025-03-14 14:21:28 +07:00
Server D3 Linksehat
418631380a report 2025-03-14 13:43:35 +07:00
e3369542f4 permision dan navigation 2025-03-11 08:37:34 +07:00
58d2c70839 Merge commit '21dc2a8df8671b269eae9b6d9eff94a482cb3ffa' into staging 2025-03-11 08:24:13 +07:00
Fadila
21dc2a8df8 buat path menjadi daily-monitoring 2025-03-06 16:17:25 +07:00
1644002c11 Merge remote-tracking branch 'origin/feature/daily-monitoring-client-portal' into staging 2025-03-06 16:00:16 +07:00
Fadila
47ab0d2d61 tambah menu daily monitoring pada client portal 2025-03-06 15:23:54 +07:00
8956804351 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2025-03-06 11:24:17 +07:00
ca2c397c51 update dashboard 2025-03-06 11:24:03 +07:00
ivan-sim
6c170c19de Update filter 2025-02-28 09:33:39 +07:00
ivan-sim
6deaf27bca Invoice Payment 2025-02-27 16:55:36 +07:00
Server D3 Linksehat
3fc44c56f5 Merge remote-tracking branch 'origin/staging' into origin/production 2025-02-26 16:53:26 +07:00
Server D3 Linksehat
dc02745c5a autocomplite 2025-02-26 16:48:42 +07:00
Server D3 Linksehat
246fc11438 Merge remote-tracking branch 'origin/staging' into origin/production 2025-02-25 15:00:22 +07:00
4e3bf6d11e update penambahan specialist dan dppj di request final log 2025-02-25 14:43:19 +07:00
9811ccd92d maping drugs 2025-02-25 11:30:27 +07:00
Server D3 Linksehat
6fdc228b6f Merge remote-tracking branch 'origin/staging' into origin/production 2025-02-24 17:47:39 +07:00
6e2e630780 update 2025-02-24 17:44:38 +07:00
Server D3 Linksehat
e856a5873d Merge remote-tracking branch 'origin/staging' into origin/production 2025-02-24 17:00:29 +07:00
46c7c5c0cb update 2025-02-24 16:59:31 +07:00
Server D3 Linksehat
b66494194e Merge remote-tracking branch 'origin/staging' into origin/production 2025-02-24 16:03:57 +07:00
Server D3 Linksehat
66762055da update 2025-02-24 16:01:49 +07:00
ccd39e4d77 update 2025-02-24 15:54:03 +07:00
51ce855408 Update 2025-02-24 15:28:44 +07:00
9810a28774 update 2025-02-24 10:33:57 +07:00
ce2c417045 update 2025-02-24 10:18:38 +07:00
8ed6700339 bugs fix approve 2025-02-24 09:20:23 +07:00
74acd90709 bugs fix 2025-02-20 17:09:45 +07:00
1a90cefb04 update 2025-02-20 16:57:47 +07:00
cfab2f37ea update 2025-02-20 16:17:32 +07:00
a0a7c3b735 maping drugs 2025-02-20 16:17:05 +07:00
e56910e0c1 update 2025-02-20 08:26:40 +07:00
cb2a335989 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2025-02-18 11:16:26 +07:00
ffaef03945 view, search dan tambah daily monitoring 2025-02-18 11:07:55 +07:00
ivan-sim
d6a84ce9f2 Add Spesialis & DPPJ 2025-02-13 13:42:11 +07:00
Server D3 Linksehat
7ed8acd064 Merge remote-tracking branch 'origin/staging' into origin/production 2025-02-12 10:10:02 +07:00
a7c7dd8d8f update 2025-02-12 09:57:18 +07:00
9090c16a6a export code log 2025-02-12 09:49:16 +07:00
b163ba5547 tambah kolom dan fitur search code log 2025-02-12 09:38:56 +07:00
Server D3 Linksehat
5a8fa432d2 Merge remote-tracking branch 'origin/staging' into origin/production 2025-01-23 15:41:30 +07:00
Server D3 Linksehat
7470f01466 update navigation 2025-01-23 15:41:00 +07:00
7e41f543ae bugs fix 2025-01-23 15:32:06 +07:00
f75f8ddb51 tambah fitur dokter online 2025-01-23 14:55:58 +07:00
Server D3 Linksehat
4fde6fa756 Merge remote-tracking branch 'origin/staging' into origin/production 2025-01-21 15:43:59 +07:00
d297fc6ab2 update 2025-01-21 15:39:28 +07:00
3b228a96fb update delete member by id 2025-01-21 15:02:08 +07:00
Server D3 Linksehat
ac4e59996d Merge remote-tracking branch 'origin/staging' into origin/production 2024-12-18 16:22:26 +07:00
c8994caaf5 bugs fix export excel 2024-12-18 16:20:49 +07:00
Server D3 Linksehat
43065ed30c Merge remote-tracking branch 'origin/staging' into origin/production 2024-12-18 16:08:49 +07:00
67b6b3a605 Tambah kolom Deskripsi Diagnosis 2024-12-18 15:59:56 +07:00
a94972d14d tambah form edit tom 2024-12-18 15:59:15 +07:00
Server D3 Linksehat
9db7037c31 Merge remote-tracking branch 'origin/staging' into origin/production 2024-12-17 17:10:29 +07:00
7dcc816af1 validasi code otomatis 2024-12-17 16:58:26 +07:00
Server D3 Linksehat
922551a2b8 Merge remote-tracking branch 'origin/staging' into origin/production 2024-12-11 16:55:38 +07:00
ced9e6ac32 tambah kolom type of member 2024-12-11 16:53:36 +07:00
5c1befd7ab update validasi 2024-12-11 16:47:26 +07:00
Server D3 Linksehat
6689449fb0 Merge remote-tracking branch 'origin/staging' into origin/production 2024-12-11 15:34:33 +07:00
5b869a4ee8 validasi wajib type of member 2024-12-09 15:25:01 +07:00
33bfb8ede9 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-12-09 14:28:53 +07:00
2860f44d10 update type member 2024-12-09 14:25:52 +07:00
Server D3 Linksehat
118ce107ec Merge remote-tracking branch 'origin/staging' into origin/production 2024-12-05 16:11:15 +07:00
Server D3 Linksehat
a2fbabf457 Merge remote-tracking branch 'refs/remotes/origin/staging' into staging 2024-12-05 15:54:29 +07:00
Server D3 Linksehat
e0b58e23b2 update backend 2024-12-05 15:53:54 +07:00
59278de3a6 Merge remote-tracking branch 'refs/remotes/origin/staging' into staging 2024-12-05 15:52:48 +07:00
c629765afd update omt / non omt 2024-12-05 15:51:51 +07:00
Server D3 Linksehat
697c41eb70 update 2024-12-05 14:41:08 +07:00
ivan-sim
d211bb7924 Update 2024-10-17 15:09:10 +07:00
ivan-sim
8e9492f98b Update 2024-10-17 15:00:53 +07:00
ivan-sim
7a885ef4a1 Update 2024-10-17 14:55:36 +07:00
ivan-sim
888a364a22 Update 2024-10-17 14:35:42 +07:00
ivan-sim
e4253756e4 Update 2024-10-17 14:14:05 +07:00
ivan-sim
81a47bfb07 Update 2024-10-17 14:08:14 +07:00
Server D3 Linksehat
f6dfef61e3 Merge remote-tracking branch 'origin/staging' into origin/production 2024-10-16 14:14:14 +07:00
ivan-sim
5cb26d9553 Update 2024-10-16 12:02:33 +07:00
Server D3 Linksehat
fc8cf3f6b1 Merge remote-tracking branch 'origin/staging' into origin/production 2024-10-16 10:56:59 +07:00
2bbbbc8fef update 2024-10-16 10:53:02 +07:00
0ab8ec85d3 filter dan flag file di inpatient monitoring 2024-10-16 10:52:29 +07:00
a436f8550b Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-10-16 10:38:14 +07:00
de2a481bbe update 2024-10-16 10:38:05 +07:00
Server D3 Linksehat
f521e8b6fa Merge remote-tracking branch 'origin/staging' into origin/production 2024-10-16 10:33:14 +07:00
ivan-sim
de86988cf0 Update 2024-10-16 10:30:51 +07:00
979c1e06d2 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-10-16 10:26:27 +07:00
5f7893c8de tambah filter dan flag files 2024-10-16 10:26:18 +07:00
ivan-sim
b69588ae65 Update 2024-10-16 09:01:06 +07:00
Server D3 Linksehat
18e0b13335 Merge remote-tracking branch 'origin/staging' into origin/production 2024-10-16 08:37:01 +07:00
de644e5db8 update role client porta 2024-10-15 15:01:16 +07:00
fb70bc4206 update permission 2024-10-15 14:33:45 +07:00
ivan-sim
828910752a Update Hospital Portal 2024-10-15 13:57:50 +07:00
ivan-sim
e430c446fd Update 2024-10-15 08:30:47 +07:00
Server D3 Linksehat
3a76e7f7cf Merge remote-tracking branch 'origin/staging' into origin/production 2024-10-14 11:31:59 +07:00
Server D3 Linksehat
5bd8e4d8e7 update 2024-10-14 11:14:53 +07:00
Server D3 Linksehat
e5c647bb7c update 2024-10-14 11:11:36 +07:00
Server D3 Linksehat
9128ff3b86 update 2024-10-14 10:55:36 +07:00
Server D3 Linksehat
659b28fde7 update 2024-10-14 10:37:57 +07:00
Server D3 Linksehat
013c57d00a update 2024-10-14 10:35:21 +07:00
Server D3 Linksehat
67e4306f10 Merge remote-tracking branch 'refs/remotes/origin/staging' into staging 2024-10-14 10:13:46 +07:00
Server D3 Linksehat
6225c1c0e4 record log delivery 2024-10-14 10:13:09 +07:00
4c72d9ab21 penjagaan organisasi dan apotek 2024-10-11 16:47:33 +07:00
f3fd02671f update corporate manager nya 2024-10-11 15:49:21 +07:00
772c91ef00 update role penjagaan file 2024-10-11 14:25:27 +07:00
55a1ae3c71 tambah permission 2024-10-11 13:29:06 +07:00
Server D3 Linksehat
7bc76bf1fd Merge remote-tracking branch 'refs/remotes/origin/staging' into staging 2024-10-10 08:50:33 +07:00
Server D3 Linksehat
999ba3eb61 update root 2024-10-10 08:50:03 +07:00
ivan-sim
5e79feabb9 Update 2024-10-09 15:03:30 +07:00
Server D3 Linksehat
a8bfde8132 Merge remote-tracking branch 'refs/remotes/origin/staging' into staging 2024-10-09 14:34:33 +07:00
Server D3 Linksehat
8c66a4cd31 update 2024-10-09 14:34:11 +07:00
ivan-sim
0233058e66 Update 2024-10-09 11:05:55 +07:00
ivan-sim
9a4e9db798 Update 2024-10-09 10:31:33 +07:00
ivan-sim
0c8feec075 Update 2024-10-07 17:01:00 +07:00
ivan-sim
3fb8dbb091 Update 2024-10-07 15:22:53 +07:00
ivan-sim
39bc02b224 Update 2024-10-07 15:11:49 +07:00
ivan-sim
82eca4b58a Update 2024-10-07 15:04:50 +07:00
ivan-sim
f676f4a244 Update 2024-10-07 13:35:16 +07:00
ivan-sim
c57605b554 update 2024-10-07 12:00:17 +07:00
ivan-sim
9e0507690a Update 2024-10-07 11:38:54 +07:00
ivan-sim
8d5c7e4cb4 Update 2024-10-04 10:46:03 +07:00
ivan-sim
2663a7bfbe Update 2024-10-04 09:00:59 +07:00
ivan-sim
d46e40e7b1 update 2024-10-04 08:57:19 +07:00
ivan-sim
0f30c9c4b8 Update 2024-10-03 16:32:19 +07:00
ivan-sim
d184ba07b6 Update 2024-10-03 16:19:33 +07:00
ivan-sim
0758a70434 GRAB X APOTEK X Hospital PORTAL 2024-10-03 16:14:11 +07:00
Server D3 Linksehat
611689235b update report livechat 2024-09-30 11:52:42 +07:00
ivan-sim
15138f7edf Update 2024-09-23 09:20:20 +07:00
Server D3 Linksehat
59e38b969e update 2024-09-13 16:07:18 +07:00
Muhammad Fajar
ac5bd92fe2 update excel inhealth organization 2024-09-13 09:42:15 +07:00
Muhammad Fajar
578a8847a2 Update Data Organization Inhealth 2024-09-13 09:41:05 +07:00
Server D3 Linksehat
99478f2b2c Merge remote-tracking branch 'refs/remotes/origin/staging' into staging 2024-09-02 17:37:44 +07:00
Server D3 Linksehat
d534d94e6f update api drugs 2024-09-02 17:35:22 +07:00
ivan-sim
c3e1e4061e Update 2024-09-02 16:11:43 +07:00
Server D3 Linksehat
bfa21b97e4 mandiri inhealth 2024-08-31 15:03:52 +07:00
Server D3 Linksehat
3087d30e16 update bugs impor member 2024-08-24 07:15:48 +07:00
Server D3 Linksehat
4381fe6141 update 2024-08-21 14:37:06 +07:00
Server D3 Linksehat
4034db6323 Merge remote-tracking branch 'refs/remotes/origin/staging' into staging 2024-08-21 14:26:12 +07:00
Server D3 Linksehat
fc0b004fbd update 2024-08-21 14:20:53 +07:00
e4d54ab78c update 2024-08-21 13:44:24 +07:00
ff05c31914 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-07-22 10:54:53 +07:00
9c396d1b36 improvement add/edit dialog 2024-07-22 10:54:39 +07:00
Server D3 Linksehat
f6d068c91b ignore /public/files 2024-07-18 16:06:30 +07:00
Server D3 Linksehat
1bf608b1ed Server 103 Commit 2024-07-18 16:05:33 +07:00
Linksehat Staging Server
6473788765 report excel 2024-07-12 10:47:41 +07:00
195265deee Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-07-12 08:56:34 +07:00
836fab1c9a update report rujukan online 2024-07-12 08:53:44 +07:00
Linksehat Staging Server
4f4a2e7136 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-07-12 08:48:13 +07:00
Linksehat Staging Server
70fc1579e7 update 2024-07-12 08:41:18 +07:00
48f63ede25 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-07-12 08:27:14 +07:00
8e8aa9cb41 update report resep online 2024-07-12 08:23:11 +07:00
ivan-sim
6d56e5cdf0 Update 2024-07-10 10:11:19 +07:00
ivan-sim
4287f7a436 Update 2024-07-09 14:23:12 +07:00
ivan-sim
d08acc5645 Update 2024-07-09 14:05:22 +07:00
18946128aa update 2024-07-09 09:29:22 +07:00
ee067f8080 Report Riwayat Medis Pasien dan excel 2024-07-09 09:27:39 +07:00
ebcba27eee Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-07-09 09:24:55 +07:00
59efa4a140 tambah field untuk phone number perusahaan, phone alarm center dan deskripsi alarm center 2024-07-09 09:24:48 +07:00
ivan-sim
514fa323be Update 2024-07-09 09:11:15 +07:00
ivan-sim
b144cbd1a9 update 2024-07-09 09:01:40 +07:00
ivan-sim
517455fd34 Update 2024-07-09 08:51:17 +07:00
ivan-sim
dc4bc41864 Update git ignire 2024-07-08 11:01:28 +07:00
ivan-sim
7f904b2449 Update 2024-07-08 10:38:44 +07:00
ivan-sim
e3609a69b8 Update 2024-07-08 09:46:12 +07:00
ivan-sim
29180eee15 Update 2024-07-05 13:43:37 +07:00
ivan-sim
ee6a1afc4b Add user access user role client portal 2024-07-05 13:29:29 +07:00
ivan-sim
9b643cd7dd Update E Card Client Portal 2024-07-04 14:45:02 +07:00
3ef3132251 update dialog isi otomatis not approve dan excess 2024-07-02 11:46:02 +07:00
f941903dcd bugs fix hitung realtime 2024-07-02 09:16:03 +07:00
bb57d7f69a update 2024-07-02 08:46:35 +07:00
740eae1a58 update perhitungan limit 2024-07-02 08:29:26 +07:00
f67ab6897c update limit 2024-07-01 17:54:34 +07:00
de62cfff31 update penjagaan limit 2024-07-01 14:42:56 +07:00
97b1b841d3 update penjagaan limit level plan 2024-07-01 10:52:58 +07:00
4ceaf41a7d update login dan password 2024-06-27 14:43:01 +07:00
32a45814b8 perhitungan realtime ketika di delete 2024-06-26 10:23:39 +07:00
0252664e63 update penjagaan delete item 2024-06-26 09:53:57 +07:00
pajri
493076a71b delete comment 2024-06-25 16:52:13 +07:00
pajri
851cf7b435 up 2024-06-25 16:49:42 +07:00
pajri
0411f8c7e5 dashboard 2024-06-25 16:29:13 +07:00
13d54063e4 penjagaan limit realtime 2024-06-25 13:29:40 +07:00
150216fb87 update 2024-06-21 09:02:07 +07:00
fd7b31dfac Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-06-21 08:52:26 +07:00
e7163c5a13 update import member 2024-06-21 08:52:19 +07:00
Linksehat Staging Server
18732053a1 update enrollment 2024-06-20 16:11:10 +07:00
Linksehat Staging Server
5ae872a5be Merge remote-tracking branch 'origin/staging' into origin/production 2024-06-20 16:10:13 +07:00
ivan-sim
e18afa93bf Update ASO 2024-06-20 11:03:03 +07:00
18a1350787 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-06-20 09:47:50 +07:00
fdf87ef59a tambah api list hospital 2024-06-20 09:46:35 +07:00
ivan-sim
46f3dec3a6 Update 2024-06-19 16:31:44 +07:00
ivan-sim
b1185093f1 Update 2024-06-19 16:04:15 +07:00
ivan-sim
f0c996ee80 Update 2024-06-19 16:02:13 +07:00
ivan-sim
8ad9e870b9 Update 2024-06-19 15:01:31 +07:00
Linksehat Staging Server
20a10b4c23 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-06-19 11:04:37 +07:00
Linksehat Staging Server
721e318997 update 2024-06-19 11:01:13 +07:00
ivan-sim
533f63c6e7 Update client Portal 2024-06-19 10:55:26 +07:00
pajri
c3341eef8d verification code 2024-06-19 10:53:59 +07:00
ivan-sim
3fcaa6a4be Update hapus debug 2024-06-19 08:46:46 +07:00
pajri
0ddf3ee1d8 Add data user to db old lms 2024-06-18 17:44:24 +07:00
ivan-sim
cff897aee2 Update 2024-06-18 16:57:23 +07:00
ivan-sim
4ab48219ab Update 2024-06-18 16:38:06 +07:00
ivan-sim
605fc72e89 Dashboard Client - Portal 2024-06-18 08:51:33 +07:00
Linksehat Staging Server
0690eae429 Merge remote-tracking branch 'origin/staging' into origin/production 2024-06-14 08:32:47 +07:00
pajri
c886cfa801 Url Out sanctum 2024-06-10 10:37:41 +07:00
8474c59834 kirim notification 2024-06-10 10:05:33 +07:00
03d94905fa update 2024-06-10 10:01:00 +07:00
8956d8c13f update message summary 2024-06-10 10:00:46 +07:00
36ca4925d9 update data seeder 2024-06-09 13:04:52 +07:00
377a9002b4 update bugs fix 2024-06-09 12:59:33 +07:00
58740ece16 path nullable 2024-06-09 12:53:20 +07:00
fce657412e User access dan user role dinamis 2024-06-09 12:49:40 +07:00
1eb6eb9cf3 imporve first message 2024-06-03 11:09:51 +07:00
Linksehat Staging Server
6f711b592e resep dokter 2024-06-03 09:14:21 +07:00
Linksehat Staging Server
4b7337f7cb bugs fix send notification 2024-06-03 09:09:16 +07:00
Linksehat Staging Server
5e0d0cac1b tambah kolom import drugs 2024-06-03 09:08:11 +07:00
Linksehat Staging Server
6ce4282a3b bugs fix livechat 2024-06-03 09:07:12 +07:00
Linksehat Staging Server
490ec57b06 Merge remote-tracking branch 'origin/staging' into origin/production 2024-05-30 13:54:16 +07:00
6fb7034e2e update komisi 2024-05-30 13:52:17 +07:00
Linksehat Staging Server
1a7515e478 Merge remote-tracking branch 'origin/staging' into origin/production 2024-05-30 13:47:21 +07:00
8b797f7a29 penyesuaian perhitungan komisi 2024-05-30 13:46:03 +07:00
36b16d71b0 update fitur export report 2024-05-30 11:33:00 +07:00
Linksehat Staging Server
a1c21e2abf Merge remote-tracking branch 'origin/staging' into origin/production 2024-05-30 10:40:08 +07:00
a8beac0f90 update 2024-05-30 10:37:02 +07:00
Linksehat Staging Server
9c185908da Merge remote-tracking branch 'origin/staging' into origin/production 2024-05-30 10:35:29 +07:00
53f0fd725b update data 2024-05-30 10:33:36 +07:00
Linksehat Staging Server
8f23ee34e3 Merge remote-tracking branch 'origin/staging' into origin/production 2024-05-30 10:28:04 +07:00
3c5bdbdece Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-05-30 10:26:39 +07:00
aa32540fd8 update report 2024-05-30 10:22:27 +07:00
Linksehat Staging Server
6c712d15d2 Merge remote-tracking branch 'origin/staging' into origin/production 2024-05-28 10:56:28 +07:00
Linksehat Staging Server
bec92fc641 update catatan 2024-05-28 10:56:03 +07:00
Linksehat Staging Server
151248d448 update bugs user notification 2024-05-28 09:00:27 +07:00
2645a7d785 tambah field fcm token 2024-05-27 09:18:27 +07:00
5b9514fa77 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-05-24 09:43:29 +07:00
59524159b6 update package fcm 2024-05-24 09:43:20 +07:00
Linksehat Staging Server
fdfc8113f8 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-05-24 09:13:36 +07:00
Linksehat Staging Server
35c1a2be50 update 2024-05-24 09:13:03 +07:00
8af376cd37 update send notification fcm 2024-05-24 09:09:21 +07:00
Linksehat Staging Server
8ae6e44680 bugs fix callback 2024-05-22 14:17:01 +07:00
Linksehat Staging Server
ebd880d9c8 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-05-22 10:02:30 +07:00
Linksehat Staging Server
492c3a2b05 update notification 2024-05-22 10:02:22 +07:00
ivan-sim
117b81f92f Update Import Billing & Invoice 2024-05-22 09:43:47 +07:00
ivan-sim
6fef852e2c Update Import Billing & Invoice 2024-05-21 17:02:18 +07:00
pajri
81311928da api token firebase 2024-05-21 14:49:24 +07:00
ivan-sim
f50a4f6409 Update Add user hospital portal 2024-05-21 10:36:39 +07:00
ivan-sim
0cd2cf71fc Update Add user hospital portal 2024-05-20 11:35:31 +07:00
ivan-sim
6c2a4dae1b Update Add user hospital portal 2024-05-20 11:33:57 +07:00
Linksehat Staging Server
ffb7e0bc08 Merge remote-tracking branch 'origin/staging' into origin/production 2024-05-20 08:49:14 +07:00
Linksehat Staging Server
15cc88403f update prod 2024-05-20 08:46:04 +07:00
f83a7954aa update 2024-05-17 15:59:51 +07:00
664f015c94 update autocomplite 2024-05-17 15:40:27 +07:00
ba55866203 update pagination livechat 2024-05-17 14:00:24 +07:00
504f152876 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-05-16 17:13:00 +07:00
f838b37045 update 2024-05-16 17:12:51 +07:00
0ac3e4d451 api chat, send summary, health sertificate, callback duitku 2024-05-16 17:12:29 +07:00
ivan-sim
fa160aa2de Update 2024-05-15 15:13:10 +07:00
ivan-sim
4cc3df9859 Update 2024-05-15 14:58:25 +07:00
ivan-sim
c4cf1bc64e Update Formularium 2024-05-15 14:44:14 +07:00
8bcc3fe15d fixing private channel 2024-05-15 10:13:05 +07:00
9d116e8765 fixing 2024-05-15 10:04:46 +07:00
b8fdaf2ada fix private channel 2024-05-15 09:56:18 +07:00
86034f6e5e Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-05-14 15:11:40 +07:00
04fb81c1f2 update 2024-05-14 15:11:31 +07:00
ivan-sim
3ede40b559 Add Column Price to Table Drug 2024-05-14 15:10:41 +07:00
db0850b835 public channel 2024-05-14 15:01:39 +07:00
f4a6a65e83 update 2024-05-14 14:34:54 +07:00
4264eb71cb update 2024-05-14 14:20:42 +07:00
7fc28d775d update 2024-05-14 14:13:32 +07:00
afdd92a0f2 update channel private 2024-05-14 14:01:21 +07:00
c07241397f update pusher 2024-05-14 13:22:16 +07:00
cd9fff3265 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-05-14 11:08:32 +07:00
e113802776 API Chat 2024-05-14 11:07:57 +07:00
ivan-sim
e67b48a8da Penambahan kondisi tebus obat atau tidak 2024-05-14 09:33:25 +07:00
618fd9bf91 tambah mendelete request item 2024-05-06 14:00:55 +07:00
2317d36779 update 2024-05-06 11:47:23 +07:00
7ee4aceaa6 update 2024-05-06 11:44:38 +07:00
092b8375d9 update 2024-05-06 11:36:22 +07:00
9d79118e47 update 2024-05-06 11:16:04 +07:00
5dd0f24af9 update 2024-05-06 10:58:05 +07:00
daa7176ff5 update 2024-05-06 10:46:49 +07:00
15df89e703 update eprescription 2024-05-06 10:46:26 +07:00
7516e475d6 update home dokter 2024-05-06 08:15:58 +07:00
738bba88a5 livechat 2024-05-03 14:22:39 +07:00
a7bce13ec3 filter dokter only yang bisa merespkan 2024-05-02 15:08:49 +07:00
8cb30ddedd update 2024-05-02 11:33:13 +07:00
9f55783508 update 2024-05-02 10:56:23 +07:00
3ed0242963 update 2024-05-02 10:25:34 +07:00
04b0b2943d update 2024-05-02 08:21:56 +07:00
9168af67b6 fixing add prescription 2024-04-30 17:03:44 +07:00
f3064d306c Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-04-30 10:11:20 +07:00
8aa67c1864 update create e-prescription 2024-04-30 10:11:11 +07:00
ivan-sim
2b9553d003 Update 2024-04-29 08:52:43 +07:00
ivan-sim
15295ea963 Update case sensitif 2024-04-29 08:50:49 +07:00
ivan-sim
6a13d7aa1f Update case sensitif 2024-04-26 14:03:51 +07:00
2c4fe723dc tambah field invoice biiling di client portal 2024-04-26 08:57:57 +07:00
60af8f21ce tambah field invoice no dan billing no 2024-04-25 17:05:00 +07:00
0b7a8191bf Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-04-24 16:47:43 +07:00
85544a7f0e api duitku dan profile add 2024-04-24 16:47:25 +07:00
ivan-sim
1cb3b2d3f0 API APP DOCTOR 2024-04-23 16:30:55 +07:00
2cf00ac927 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-04-22 11:26:14 +07:00
a424721d89 payment api 2024-04-22 11:26:00 +07:00
ivan-sim
5bc4158cfb Update redirect duitku 2024-04-18 15:31:32 +07:00
ivan-sim
fe486b1593 Update payload check status duitku 2024-04-18 15:06:57 +07:00
ivan-sim
d242339635 Update insert callbak ke api logs 2024-04-18 13:51:47 +07:00
ivan-sim
b55fcaf235 Testing callback on server 2024-04-18 11:24:40 +07:00
3cfca98846 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-04-18 08:47:10 +07:00
1f26289b7a API Home dan Linking 2024-04-18 08:46:49 +07:00
ivan-sim
9710ce9977 Download zip 2024-04-16 16:00:23 +07:00
Linksehat Staging Server
6c4317b800 Merge remote-tracking branch 'origin/staging' into origin/production 2024-04-15 10:25:07 +07:00
ivan-sim
de59a1e69e update 2024-04-15 10:24:35 +07:00
Linksehat Staging Server
d5ccd04cdf Merge remote-tracking branch 'origin/staging' into origin/production 2024-04-15 10:22:54 +07:00
ivan-sim
e8dd5134c1 update export excel 2024-04-15 10:22:24 +07:00
Linksehat Staging Server
07ddcd91c2 Merge remote-tracking branch 'origin/staging' into origin/production 2024-04-15 10:17:36 +07:00
ivan-sim
df5fa2dc95 Update export client portal 2024-04-15 10:08:35 +07:00
Linksehat Staging Server
7be9d12504 Merge remote-tracking branch 'origin/staging' into origin/production 2024-04-15 09:43:13 +07:00
ivan-sim
4dc5fdbd2c Update exportexcel bug date 2024-04-15 09:35:59 +07:00
Linksehat Staging Server
f3e3d24153 Merge remote-tracking branch 'origin/staging' into origin/production 2024-04-04 14:36:08 +07:00
666712f015 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-04-04 14:34:06 +07:00
a92f62c5a3 update tarif layanan 2024-04-04 14:33:57 +07:00
Linksehat Staging Server
f1447d2783 Merge remote-tracking branch 'origin/staging' into origin/production 2024-04-02 08:36:04 +07:00
ivan-sim
f816ebd839 Bug SUM Approved 2024-04-02 08:34:46 +07:00
Linksehat Staging Server
7cd38a637a Merge remote-tracking branch 'origin/staging' into origin/production 2024-04-01 08:17:40 +07:00
ivan-sim
6d5421e664 Menambahkan service di export excel client portal 2024-03-26 08:27:55 +07:00
Linksehat Staging Server
ace40b0baa Merge remote-tracking branch 'origin/staging' into origin/production 2024-03-18 13:39:20 +07:00
ivan-sim
fdac5feac4 Remove example value 2024-03-18 13:38:21 +07:00
Linksehat Staging Server
4698acb7c9 Merge remote-tracking branch 'origin/staging' into origin/production 2024-03-18 10:20:32 +07:00
ivan-sim
c7aa8ad493 Remove Title Case di Provider 2024-03-18 10:20:06 +07:00
Linksehat Staging Server
5f0c794ac6 Merge remote-tracking branch 'origin/staging' into origin/production 2024-03-18 10:11:28 +07:00
ivan-sim
72ca483f1c Rubah nama submission ke admission 2024-03-18 10:08:11 +07:00
Linksehat Staging Server
ae1269a9ab Merge remote-tracking branch 'origin/staging' into origin/production 2024-03-13 14:18:35 +07:00
e0f6ebef8f file upload sama dengan nana file nya 2024-03-13 14:15:33 +07:00
Linksehat Staging Server
d31602fea1 Merge remote-tracking branch 'origin/staging' into origin/production 2024-03-12 15:55:17 +07:00
f19eb5743f update view texteditor 2024-03-12 15:23:42 +07:00
ace5035879 service monitoring 2024-03-12 10:34:32 +07:00
8ed2425a55 update texteditor 2024-03-12 10:16:03 +07:00
Linksehat Staging Server
7baca28205 Merge remote-tracking branch 'origin/staging' into origin/production 2024-03-12 09:05:39 +07:00
9f42583e9d update 2024-03-12 09:00:20 +07:00
58a1f4c95a input jadi textarea 2024-03-12 08:44:08 +07:00
8e947c3949 input images 2024-03-12 08:17:05 +07:00
Linksehat Staging Server
01166dfc4f Merge remote-tracking branch 'origin/staging' into origin/production 2024-03-08 15:30:38 +07:00
9206189434 rename 2024-03-08 15:27:42 +07:00
Linksehat Staging Server
1245e44178 Merge remote-tracking branch 'origin/staging' into origin/production 2024-03-08 14:09:39 +07:00
0c65434c29 ordering 2024-03-08 14:05:15 +07:00
8294542f98 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-03-08 11:20:53 +07:00
b09a225a58 update 2024-03-08 11:20:46 +07:00
Linksehat Staging Server
aaeea495a5 Merge remote-tracking branch 'origin/staging' into origin/production 2024-03-08 11:12:01 +07:00
Linksehat Staging Server
802fb7d16a Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-03-08 11:04:41 +07:00
Linksehat Staging Server
0a4e534ba2 update 2024-03-08 11:04:02 +07:00
150aba4b0f update list inpatient monitoring 2024-03-08 11:00:48 +07:00
6369e07d95 fixing tombol cancel 2024-03-07 16:22:42 +07:00
a964e243e6 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-03-07 16:11:56 +07:00
e1bab4dd8e add fitur delete file dan update daily monitoring 2024-03-07 16:11:46 +07:00
ivan-sim
44c8e3e5f3 Update 2024-03-07 10:21:41 +07:00
a056915ae1 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-03-06 11:58:30 +07:00
bc95fbd51c update header reason 2024-03-06 11:58:23 +07:00
ivan-sim
5bd2195081 Update import 2024-03-06 11:14:47 +07:00
Linksehat Staging Server
59d9f22e67 Merge remote-tracking branch 'origin/staging' into origin/production 2024-03-06 09:08:32 +07:00
39398d718b bugs fix tampil data diagnosis 2024-03-06 08:55:50 +07:00
Linksehat Staging Server
cc75e54028 bugs fix export claim request 2024-03-05 14:48:55 +07:00
Linksehat Staging Server
ccbded5e4e Merge remote-tracking branch 'origin/staging' into origin/production 2024-03-05 13:41:28 +07:00
Linksehat Staging Server
3fbc4c2cd1 bugs fixi di production 2024-03-05 13:20:35 +07:00
Linksehat Staging Server
c1b1270972 Merge remote-tracking branch 'origin/staging' into origin/production 2024-03-05 13:14:56 +07:00
339eec9727 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-03-05 11:37:48 +07:00
e358623716 tambah keterangan di detail alarm center 2024-03-05 11:37:36 +07:00
ivan-sim
e3f08a44f3 Update import claim management 2024-03-05 10:36:01 +07:00
ivan-sim
39ccf2a0b5 Update Hospital portal 2024-03-04 09:54:09 +07:00
3bae411dc6 fitur is reversal 2024-03-04 09:36:26 +07:00
ab65d53aca update 2024-03-01 11:08:07 +07:00
7ff889919d update if data null 2024-03-01 10:45:44 +07:00
e138e9553f update 2024-03-01 10:27:35 +07:00
e74ab0cbd4 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-03-01 10:20:11 +07:00
28e11ac0e7 update 2024-03-01 10:20:03 +07:00
Linksehat Staging Server
874c510fc5 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-03-01 10:14:48 +07:00
Linksehat Staging Server
99e53fed81 update 2024-03-01 10:14:27 +07:00
0c9a0aebc6 filter tanggal sama 2024-03-01 10:11:16 +07:00
1937a3e572 update 2024-03-01 09:26:36 +07:00
19bddcdd22 export import claim request 2024-03-01 09:17:30 +07:00
547ecc0271 update tombol submit claim 2024-02-29 16:13:36 +07:00
c57b4e63a9 bugs fix export excel 2024-02-29 12:12:42 +07:00
b8cdfc1d74 update bugs fix hospital 2024-02-29 09:30:46 +07:00
c60d1bfe65 Update status 2024-02-29 09:15:10 +07:00
72a97957b5 update listing 2024-02-28 09:43:32 +07:00
e7d0cf2400 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-27 15:22:36 +07:00
41449fa6b1 update filter 2024-02-27 15:22:30 +07:00
ivan-sim
a0aa57ebe4 Update 2024-02-27 15:13:09 +07:00
ivan-sim
e612309347 Update 2024-02-27 15:06:40 +07:00
5c2eba0c19 update 2024-02-27 13:44:32 +07:00
be122a1162 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-27 13:37:45 +07:00
ivan-sim
c82bd31d57 Update Bulk request claim 2024-02-27 14:20:08 +07:00
82a715d9f1 update import 2024-02-27 13:37:38 +07:00
7c5fdaef78 update template 2024-02-27 12:26:40 +07:00
26e3cd5ac9 update template claim 2024-02-27 11:30:19 +07:00
5c4e1e6c96 update 2024-02-27 11:27:16 +07:00
f043165b15 Import Claim Request 2024-02-27 10:47:25 +07:00
40fb595673 tambah upload extensen img 2024-02-27 10:45:41 +07:00
9de0edd4f1 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-27 10:32:33 +07:00
cdb7873986 bugs fix search 2024-02-27 10:32:18 +07:00
ivan-sim
3ba4889713 Update code claim management 2024-02-26 21:55:45 +07:00
ivan-sim
79a097c958 Update claim management migrasi table 2024-02-23 16:05:23 +07:00
841a26e22d Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-23 14:53:26 +07:00
1af8e0d27d update penjagaan 2024-02-23 14:53:19 +07:00
ivan-sim
bca43e3030 Claim Management Report 2024-02-23 13:48:39 +07:00
4dfbb8f867 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-23 11:01:41 +07:00
ccf7bee67a bugs fix dan fitur submission di claim request 2024-02-23 11:01:25 +07:00
ivan-sim
09c976ce3b Update 2024-02-22 17:01:02 +07:00
a8dd5f866c update softdelete 2024-02-22 15:29:02 +07:00
abc1c92c50 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-22 15:28:42 +07:00
0e7d9467ce update kalkulator, edit benefit item, dan delete benefit item 2024-02-22 15:28:32 +07:00
Linksehat Staging Server
2c9977c860 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-22 14:38:19 +07:00
ivan-sim
f2365922fc Update sortir xport xcel 2024-02-22 14:14:41 +07:00
Linksehat Staging Server
1299a03cdc Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-22 13:38:22 +07:00
ivan-sim
693c7db324 Update xport xc tot bill 0 dan log req 2024-02-22 13:36:27 +07:00
dcf1eead2d update bugs 2024-02-22 11:23:46 +07:00
1e49344207 update bugs fix 2024-02-22 11:06:31 +07:00
9667961b8c Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-22 10:59:50 +07:00
d7a78337fa bugs fix edit hospital 2024-02-22 10:59:42 +07:00
Linksehat Staging Server
2a0aadadb2 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-22 09:15:19 +07:00
ivan-sim
4eba294f5a Update 2024-02-22 09:14:53 +07:00
Linksehat Staging Server
5e87495439 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-22 09:07:40 +07:00
ivan-sim
d6197330d3 Update 2024-02-22 09:07:12 +07:00
Linksehat Staging Server
917822506f Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-22 08:52:24 +07:00
ivan-sim
b493b8c0a6 Update loading terus menerus 2024-02-22 08:51:49 +07:00
Linksehat Staging Server
8faab96fb1 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-22 08:38:39 +07:00
ivan-sim
16e6aa08dd Update penjamin export excel 2024-02-22 08:36:37 +07:00
2b38a904d0 detail dan add document dan hapus di claim request 2024-02-21 11:25:37 +07:00
806e6d2749 delete daily monitoring 2024-02-20 16:42:17 +07:00
2c868c00ec add fitur search, edit dan filter claim request 2024-02-20 14:54:02 +07:00
8895311a8f penyesuaian kode claim 2024-02-20 09:00:36 +07:00
Linksehat Staging Server
be0544b31b Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-19 16:30:48 +07:00
9cfbfec8c0 update 2024-02-19 15:41:54 +07:00
a79b7b53e3 update bugs fix 2024-02-19 15:18:00 +07:00
1e7576a5ce tambah field objective 2024-02-19 13:57:45 +07:00
Linksehat Staging Server
35cffa9928 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-19 10:34:35 +07:00
15a99b95b9 update daily monitoring 2024-02-19 10:29:13 +07:00
Linksehat Staging Server
4781bb146e update bugs fix 2024-02-19 09:49:13 +07:00
Linksehat Staging Server
cf85af68fe bugs fix search dan daily monitoring 2024-02-19 08:50:22 +07:00
Linksehat Staging Server
785f20e235 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-18 09:54:29 +07:00
8f904a8ce8 update penjagaan date di alarm center 2024-02-18 08:36:40 +07:00
Linksehat Staging Server
f8021fbd0b Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-17 11:28:16 +07:00
4b0b68b58d update import 2024-02-17 11:25:54 +07:00
Linksehat Staging Server
b8f6532cfb Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-17 10:40:12 +07:00
99bab5e75d update 2024-02-16 10:14:56 +07:00
688e5db39e update set custom upload 2024-02-16 09:51:25 +07:00
Linksehat Staging Server
40ad1ecc82 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-15 14:57:44 +07:00
Linksehat Staging Server
baa45b9ea7 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-15 14:00:19 +07:00
e64b243fd6 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-15 14:00:05 +07:00
b500c9244b optimize daily monitoring 2024-02-15 13:59:42 +07:00
ivan-sim
dd72af8cc9 Update bug final LOG 2024-02-15 13:57:51 +07:00
Linksehat Staging Server
c1047ee8d1 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-15 13:54:38 +07:00
Linksehat Staging Server
47e3d248b7 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-15 13:29:15 +07:00
c90095d4ca update 2024-02-15 12:52:45 +07:00
f37657b154 tambah informasi provider 2024-02-15 12:26:48 +07:00
14949a47f9 tambah pagination dan search daily monitoring 2024-02-15 10:43:32 +07:00
814eb014f7 sort di final log dan menampilkan admission 2024-02-13 11:40:35 +07:00
ccb374da85 update function sort di client portal 2024-02-13 11:32:00 +07:00
Linksehat Staging Server
1d666e81ef Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-12 17:17:55 +07:00
f1f4fed33c update filter sesuai tanggal admission 2024-02-12 17:16:18 +07:00
Linksehat Staging Server
be99463417 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-12 15:27:46 +07:00
7474d199e4 update perhitungan document qty 2024-02-12 14:49:42 +07:00
Linksehat Staging Server
3d9fe45989 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-12 13:09:44 +07:00
ef1b3d1301 add member link document 2024-02-12 12:14:53 +07:00
Linksehat Staging Server
44cc8ccb74 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-12 11:20:37 +07:00
98f5d04b4d update seeder link dokument 2024-02-12 11:17:04 +07:00
Linksehat Staging Server
4891162765 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-12 08:50:36 +07:00
aec0b75a5b update migration database 2024-02-12 08:47:21 +07:00
Linksehat Staging Server
1f7a945432 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-11 07:23:15 +07:00
Linksehat Staging Server
1e7468fc02 penyesuaian ambil data submission ke created at 2024-02-11 07:19:18 +07:00
2dad400486 add fitur delete dan upload ulang file di FINAL log 2024-02-09 16:58:03 +07:00
Linksehat Staging Server
f8f9356d4d Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-09 14:49:57 +07:00
7809e8828f update name hasil penunjang 2024-02-09 14:33:47 +07:00
5d3a41c81b Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-09 10:10:05 +07:00
7b7b24c842 update file name 2024-02-09 10:09:59 +07:00
ivan-sim
7effdd3429 Update Test 2024-02-09 09:57:28 +07:00
81ad0f4dc6 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-09 09:47:31 +07:00
fd5ad65487 Update improvement client portal daily monitoring 2024-02-09 09:47:24 +07:00
ivan-sim
e2e0fc52fc test erro 2024-02-09 09:46:50 +07:00
ivan-sim
90c7460c7b test error 2024-02-09 09:45:00 +07:00
ivan-sim
f7e45bd155 Update 2024-02-09 09:42:49 +07:00
ivan-sim
323e7fa2de Bug 2024-02-09 09:39:23 +07:00
ivan-sim
6ed3e0c382 Update 2024-02-09 09:36:48 +07:00
ivan-sim
37e61e4ae0 Update 2024-02-09 09:17:24 +07:00
ivan-sim
cc44f1f84e Update 2024-02-09 09:16:01 +07:00
ivan-sim
984232a926 Update 2024-02-09 09:13:41 +07:00
ivan-sim
d7fe8a8d83 Update 2024-02-09 09:07:47 +07:00
ivan-sim
6ceceb65ce Update file format image 2024-02-09 08:57:08 +07:00
ivan-sim
c3a39cedd0 Update Keterangan Kebalik dengan Catatan 2024-02-09 08:30:49 +07:00
Linksehat Staging Server
0b4f5fd478 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-07 15:08:35 +07:00
0c9f92a1fb update penjagaan approved 2024-02-07 13:58:12 +07:00
Linksehat Staging Server
1acd57bf66 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-07 11:17:27 +07:00
a8b712e3a1 update soft delete request log 2024-02-07 11:15:48 +07:00
Linksehat Staging Server
c2e2e5d0df Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-07 11:12:01 +07:00
a68e3d0cd4 update reflek diagnosis 2024-02-07 10:57:00 +07:00
16a93b23ee bugs fix 2024-02-07 10:36:36 +07:00
f389ec2438 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-07 10:29:27 +07:00
22d2410508 bugs fix 2024-02-07 10:29:20 +07:00
Linksehat Staging Server
c4388bd473 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-07 10:09:28 +07:00
ivan-sim
dd81dbaa6f Update Export excel alrm Center 2024-02-07 10:06:34 +07:00
062d70d3c2 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-06 13:48:59 +07:00
af53a504da [Improvement] input Daily Monitoring 2024-02-06 13:48:48 +07:00
Linksehat Staging Server
e6556e5a90 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-06 13:48:01 +07:00
ivan-sim
a0b0e47b4d Upload file max size 2024-02-06 13:46:55 +07:00
Linksehat Staging Server
02cecd1f41 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-06 11:04:54 +07:00
ivan-sim
1c52addf99 Test Update 2024-02-06 11:04:25 +07:00
Linksehat Staging Server
61138b823d Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-06 11:02:07 +07:00
ivan-sim
9b96c38b6f Update 2024-02-06 11:00:58 +07:00
Linksehat Staging Server
664bbc2c5a Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-06 10:42:06 +07:00
ivan-sim
dba3e9a542 Update setting PHP ini 2024-02-06 10:40:26 +07:00
Linksehat Staging Server
6d51ac6417 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-06 10:28:16 +07:00
ivan-sim
975cd46f58 Max size upload file 2024-02-06 10:27:10 +07:00
826d4eb2a3 teupdate data submission date 2024-02-06 09:40:17 +07:00
3f151f7753 update bugs 2024-02-05 17:08:00 +07:00
b9a9b53918 tambah listing file di client portal 2024-02-05 16:57:52 +07:00
Linksehat Staging Server
7103d74314 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-05 09:03:27 +07:00
ivan-sim
a9c14088c6 Update 2024-02-05 09:02:48 +07:00
Linksehat Staging Server
3769c05ac2 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-02 15:09:57 +07:00
adf97d049a update kolom approve gl 2024-02-02 15:05:16 +07:00
Linksehat Staging Server
25a3ace8e2 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-02 14:55:43 +07:00
f83d07db84 tombol loading 2024-02-02 14:46:29 +07:00
Linksehat Staging Server
6a57849705 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-02 14:36:06 +07:00
73411013c6 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-02 14:22:44 +07:00
8caed2469c menambahkan filter report request log 2024-02-02 14:22:36 +07:00
Linksehat Staging Server
806ce91998 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-02 13:36:13 +07:00
ivan-sim
74d5da95a4 Create Rekanan Hospital Portal 2024-02-02 13:31:22 +07:00
Linksehat Staging Server
951125b5b6 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-01 17:03:55 +07:00
1dc7b99d42 tambah informasi partner / rekanan hospital 2024-02-01 15:54:29 +07:00
Linksehat Staging Server
92c6957be8 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-01 11:59:24 +07:00
0657448ef8 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-01 11:51:07 +07:00
177896a5aa role akses admin 2024-02-01 11:51:01 +07:00
Linksehat Staging Server
78ec25e660 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-01 11:05:31 +07:00
ivan-sim
e3ea1a3854 Update Penjamin 2024-02-01 11:04:58 +07:00
Linksehat Staging Server
2845588300 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-01 10:54:43 +07:00
5e38fdf154 submision date 2024-02-01 10:46:49 +07:00
12fee09c65 penyesuaian approved at 2024-02-01 10:43:40 +07:00
Linksehat Staging Server
525d7db795 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-01 10:37:56 +07:00
8a7fac07ff update type script dan nambah kolom member code 2024-02-01 10:31:38 +07:00
Linksehat Staging Server
0ed5ad7e48 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-01 10:18:37 +07:00
254e9e0624 update 2024-02-01 10:16:29 +07:00
Linksehat Staging Server
910622f5d6 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-01 10:05:05 +07:00
Linksehat Staging Server
85749e4743 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-01 09:52:37 +07:00
30cb0d7eeb update 2024-02-01 09:50:43 +07:00
53763674fd add kolom import system 2024-02-01 09:42:43 +07:00
135c0987ab Update tambah field rekanan di hospital 2024-02-01 09:07:54 +07:00
Linksehat Staging Server
64cca9bca0 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-31 15:28:17 +07:00
Linksehat Staging Server
7e56fb4b77 update export excel request log 2024-01-31 14:52:04 +07:00
0e9694101f update migration 2024-01-31 14:38:20 +07:00
Linksehat Staging Server
932b20eba6 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-31 13:58:11 +07:00
Linksehat Staging Server
10852a22e9 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-31 13:24:14 +07:00
Linksehat Staging Server
1d5b5ee19b Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-31 13:18:16 +07:00
dd57cb45fb time zone asia/jakarta 2024-01-31 13:00:47 +07:00
f8e6ba0c51 update php ini 2024-01-31 12:24:49 +07:00
a544ed442f update helper service name 2024-01-31 12:13:10 +07:00
Linksehat Staging Server
a7618b5bfe Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-31 11:55:54 +07:00
1721631ae6 [New Feature] Export Excel Request LOG 2024-01-31 11:51:57 +07:00
Linksehat Staging Server
e0aadace17 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-31 10:34:24 +07:00
3ccb9c0a4c update 2024-01-31 10:32:08 +07:00
914e907e0c update list 2024-01-31 10:24:37 +07:00
26519cb895 update 2024-01-31 10:07:33 +07:00
a794379973 update list 2024-01-31 09:47:01 +07:00
aaac2f0a87 update submit fgl 2024-01-31 09:26:59 +07:00
f23d6ab476 update fgl create 2024-01-31 09:20:00 +07:00
c734a8ce6c bugs fix create at final log 2024-01-31 08:50:50 +07:00
529cb5c483 update start date menghitung final log 2024-01-30 16:54:54 +07:00
1cd65a9077 update 2024-01-30 14:52:15 +07:00
88aa3459cb update file report 2024-01-30 14:50:08 +07:00
db9f07932e update 2024-01-30 14:48:38 +07:00
a80bbf4a43 update 2024-01-30 14:44:49 +07:00
e83121bbb4 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-30 14:26:47 +07:00
d92e2aba2e Report Request LOG dan Final LOG 2024-01-30 14:26:14 +07:00
Linksehat Staging Server
217d793a7b Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-30 14:10:06 +07:00
ivan-sim
f34498ced5 Update Tanggal 2024-01-30 14:09:23 +07:00
Linksehat Staging Server
55ff788dd6 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-29 17:06:41 +07:00
c41181b93b [improvement] update quick member 2024-01-29 10:55:54 +07:00
c9d0e85449 update penjagaan edit log 2024-01-29 10:46:05 +07:00
2ce4a1efd1 bugs fix 2024-01-26 13:00:06 +07:00
9b225289a6 update 2024-01-26 12:47:22 +07:00
74f87e150a [Improvement] add fitur delete request log 2024-01-26 11:07:13 +07:00
Linksehat Staging Server
ccbc515686 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-25 17:06:39 +07:00
908a8aff0a update key 2024-01-25 15:52:17 +07:00
a6dd301fbb Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-25 14:57:21 +07:00
f8be2ce0be tambah fitur kalkulator / total benefit 2024-01-25 14:57:13 +07:00
Linksehat Staging Server
aa1579707c Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-25 14:42:49 +07:00
ivan-sim
82d41265fc Update 2024-01-25 14:42:11 +07:00
Linksehat Staging Server
4e24f104f8 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-25 13:28:54 +07:00
Linksehat Staging Server
453ff3ec90 bugs fix 2024-01-25 13:27:42 +07:00
Linksehat Staging Server
d0b8c25b7d Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-25 13:24:50 +07:00
ivan-sim
1c688806ff Update 2024-01-25 11:56:18 +07:00
ivan-sim
1d6c952487 Update Final LOG 2024-01-25 11:41:23 +07:00
3d4aa9ec8a Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-25 11:11:57 +07:00
423fe7b182 update template import request log 2024-01-25 11:11:41 +07:00
Linksehat Staging Server
1878455d7d Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-25 10:49:43 +07:00
ivan-sim
f3b69c4540 Update data 2024-01-25 10:47:03 +07:00
Linksehat Staging Server
b7847bf7aa Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-25 09:43:15 +07:00
ivan-sim
d76865f336 Update query 2024-01-25 09:42:31 +07:00
Linksehat Staging Server
9a4fefc91a Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-25 09:28:23 +07:00
ivan-sim
08bdea979b Update get final LOG 2024-01-25 09:25:31 +07:00
Linksehat Staging Server
5934e95ae3 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-24 15:47:24 +07:00
667c08dc0c update navigate after edit 2024-01-24 14:00:16 +07:00
9b74bbcb5c update 2024-01-24 13:59:37 +07:00
e2e3cfd5ff update auditrail request log 2024-01-24 13:59:18 +07:00
ffa3c21972 update navigate edit final log 2024-01-24 13:47:28 +07:00
bd3d817955 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-24 12:59:23 +07:00
9274f86bb8 Import request LOG 2024-01-24 12:59:16 +07:00
Linksehat Staging Server
73ae4a99a0 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-24 10:37:00 +07:00
ivan-sim
b2a6cd873a Update 2024-01-24 10:36:15 +07:00
Linksehat Staging Server
53d9e6aaeb Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-24 10:30:46 +07:00
ivan-sim
5c941f768e Update 2024-01-24 10:29:48 +07:00
Linksehat Staging Server
fb87a39ff2 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-24 09:38:51 +07:00
ivan-sim
f027970987 Update 2024-01-24 09:37:55 +07:00
e83bfedee1 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-23 17:00:05 +07:00
d8fed82bcf Fitur edit di final LOG 2024-01-23 16:59:57 +07:00
Linksehat Staging Server
6bbb0e7ad8 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-23 13:40:50 +07:00
ivan-sim
60c6550565 Update 2024-01-23 13:39:54 +07:00
12102f4757 update 2024-01-23 12:34:38 +07:00
741f44f2a4 add kolom keterangan dan catatan 2024-01-23 12:31:14 +07:00
612cb3c1cb update penjagaan no identitas 2024-01-23 11:27:00 +07:00
46bb594080 penjagaan ketika update request log 2024-01-23 11:20:50 +07:00
38bc838083 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-23 11:05:16 +07:00
286ccf64e3 add fitur edit hak kamar, penempatan dan submission date 2024-01-23 11:05:08 +07:00
Linksehat Staging Server
08b5b6ea20 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-23 09:38:44 +07:00
ivan-sim
0d23184935 Update status export excel alarm center 2024-01-23 09:37:25 +07:00
Linksehat Staging Server
784d5808fb Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-23 09:19:24 +07:00
ivan-sim
2a6440dd1a Update ExportAlarmCenter 2024-01-23 09:17:02 +07:00
Linksehat Staging Server
32638eef56 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-22 13:47:21 +07:00
4e0e801e95 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-22 13:45:23 +07:00
7b37a06e20 Bug fix update alamat hospital 2024-01-22 13:45:16 +07:00
Linksehat Staging Server
1d0f2fa0fd Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-22 11:53:36 +07:00
ivan-sim
a0e560631a Update Discharge Date Di Final LOG 2024-01-22 11:52:49 +07:00
Linksehat Staging Server
0fa6850852 update where 2024-01-22 11:10:33 +07:00
Linksehat Staging Server
ae83980255 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-22 11:06:27 +07:00
ivan-sim
d4c6bfcc09 Update Address 2024-01-22 11:05:28 +07:00
Linksehat Staging Server
9776cb3d45 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-22 09:50:47 +07:00
ivan-sim
a54d9107f8 Request untuk Tanggal Pengajuan LOG bisa dipilih 2024-01-22 09:46:09 +07:00
Linksehat Staging Server
a770136b10 Merge branch 'origin/production' of https://dev.sismedika.online/febio/aso into origin/production 2024-01-22 08:31:21 +07:00
R
31fb5694ac Add Seeder UpdateTarifLMSSeeder 2024-01-22 08:21:26 +07:00
R
3f1c620742 UpdateTarifLMSSeeder add adm_rajal 2024-01-19 16:42:07 +07:00
R
b182272de3 Add Seeder UpdateTarifLMSSeeder 2024-01-19 14:25:15 +07:00
Linksehat Staging Server
a9296f5c01 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-19 14:12:57 +07:00
R
1c8240b43e Merge branch 'staging' of ssh://dev.sismedika.online:2222/febio/aso into staging 2024-01-19 14:11:10 +07:00
R
543a1cb715 Add Seeder UpdateTarifLMSSeeder 2024-01-19 14:10:49 +07:00
ivan-sim
efe0d86169 Update 2024-01-19 14:09:21 +07:00
R
b74ef82239 Add Seeder UpdateTarifLMSSeeder 2024-01-19 14:06:18 +07:00
R
fd1a8cffac Add Seeder UpdateTarifLMSSeeder 2024-01-19 14:03:11 +07:00
R
1d1392c2d0 Add Seeder UpdateTarifLMSSeeder 2024-01-19 11:19:54 +07:00
R
7695650739 Add Seeder UpdateTarifLMSSeeder 2024-01-19 10:58:58 +07:00
Linksehat Staging Server
2ded7b8b0a Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-19 09:59:29 +07:00
abc6c33717 update 2024-01-19 09:57:22 +07:00
ce3257e9cb update division 2024-01-19 09:55:05 +07:00
c82e3063c5 add division recode mode 2 2024-01-19 09:49:21 +07:00
Linksehat Staging Server
675e352869 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-19 09:22:02 +07:00
430c1a5ad5 update 2024-01-19 09:18:06 +07:00
Linksehat Staging Server
081eaf6356 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-19 08:49:56 +07:00
e331c692bb update 2024-01-19 08:48:08 +07:00
6d47a7723d Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-18 11:24:36 +07:00
8ac9bc78a7 update discharge date 2024-01-18 11:24:25 +07:00
Linksehat Staging Server
4a61537f50 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-18 10:14:56 +07:00
ivan-sim
d6185c014d Update Rename Export PDF 2024-01-18 10:14:19 +07:00
Linksehat Staging Server
ba03ca350e update template 2024-01-18 09:50:36 +07:00
Linksehat Staging Server
b9f89ad36b update template 2024-01-18 09:46:34 +07:00
Linksehat Staging Server
6fcb1e71a7 update incurred 2024-01-18 09:42:52 +07:00
f170745521 update 2024-01-18 09:14:58 +07:00
04f63cc0ec Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-18 08:59:52 +07:00
7648a7b16e bugs fix discharge date 2024-01-18 08:59:42 +07:00
Linksehat Staging Server
2b083c01bc Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-18 08:33:06 +07:00
ivan-sim
13eb8df193 Update 2024-01-18 08:32:26 +07:00
Linksehat Staging Server
6b2455fc5b Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-17 18:11:56 +07:00
ivan-sim
df24b4fd89 Update 2024-01-17 18:11:09 +07:00
Linksehat Staging Server
beaea79224 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-17 17:33:10 +07:00
ivan-sim
f413a2a3d1 Update 2024-01-17 17:32:42 +07:00
Linksehat Staging Server
7c51aba819 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-17 16:59:07 +07:00
ivan-sim
259096f90b Update 2024-01-17 16:57:42 +07:00
Linksehat Staging Server
ff7e87f770 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-17 16:55:26 +07:00
ivan-sim
94204781a7 Center 2024-01-17 16:54:34 +07:00
Linksehat Staging Server
8173ae03cc Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-17 16:25:41 +07:00
Linksehat Staging Server
ddf3b0eeff Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-17 16:18:18 +07:00
ivan-sim
8c8b7e71a7 Update 2024-01-17 16:15:31 +07:00
Linksehat Staging Server
1260c1240e Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-17 16:03:10 +07:00
ivan-sim
e0709184b4 Update 2024-01-17 16:01:45 +07:00
Linksehat Staging Server
0bd28f19a5 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-17 15:50:08 +07:00
ivan-sim
3f6a41cbb1 Update 2024-01-17 15:44:40 +07:00
Linksehat Staging Server
9a7ffce2ee Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-17 15:42:14 +07:00
d0277a9c4a Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-17 15:31:32 +07:00
0a85653a20 bugs fix search 2024-01-17 15:31:24 +07:00
Linksehat Staging Server
4ee29d78f8 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-17 15:05:40 +07:00
ivan-sim
5c514a0bbc Update 2024-01-17 15:03:28 +07:00
Linksehat Staging Server
d0a85abd1b Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-17 14:57:50 +07:00
ivan-sim
a3285aed02 Update 2024-01-17 14:56:39 +07:00
1d791a2643 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-17 14:49:58 +07:00
df0ebe5c82 tambah loading export 2024-01-17 14:49:46 +07:00
Linksehat Staging Server
98ae27a306 update 2024-01-17 14:48:25 +07:00
Linksehat Staging Server
fc7d2fe809 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-17 13:56:13 +07:00
ivan-sim
9a721de5ab Update Test 2024-01-17 13:54:02 +07:00
c140a3bbe2 update 2024-01-17 13:04:53 +07:00
06f4f97e33 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-17 13:02:10 +07:00
ivan-sim
4298c2b869 Update Hospital Portal 2024-01-17 13:39:08 +07:00
dc1eb8769b tambahan date submission dan date discharge 2024-01-17 13:02:02 +07:00
45d3641539 update order by submission 2024-01-17 12:40:30 +07:00
844a098226 add code 6 angka 2024-01-17 10:47:32 +07:00
Linksehat Staging Server
4977ef8666 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-17 10:24:06 +07:00
Linksehat Staging Server
6718f6ea83 update pdf final log dan request log 2024-01-17 10:23:11 +07:00
Linksehat Staging Server
000da0acf4 setting upload 2024-01-17 10:20:52 +07:00
51960c62c9 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-17 10:17:02 +07:00
3e383dffcf tambah status cancel 2024-01-17 10:16:50 +07:00
ivan-sim
01da7593c3 Update Hospital 2024-01-17 09:59:46 +07:00
726058067e Update Header 2024-01-17 09:48:43 +07:00
Linksehat Staging Server
e62f5f14d6 Merge branch 'origin/production' of https://dev.sismedika.online/febio/aso into origin/production 2024-01-16 22:07:08 +07:00
Linksehat Staging Server
26ca75bf79 bugs fix ttd final log 2024-01-16 22:06:59 +07:00
4ec126de89 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-16 16:50:08 +07:00
ivan-sim
96381e4a82 Update Export 2024-01-16 17:20:38 +07:00
12ef4c167f validasi tanggal 2024-01-16 16:48:57 +07:00
9169c06897 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-16 16:07:25 +07:00
ivan-sim
bbe055bd8d Update 2024-01-16 16:22:09 +07:00
ivan-sim
d90abffedf Update Export Excel Alrm Center 2024-01-16 16:21:39 +07:00
d88dce5b9e update 2024-01-16 16:07:17 +07:00
9c3e44f625 update 2024-01-16 11:55:19 +07:00
cb6a98607a update improvement 2024-01-16 11:13:36 +07:00
439daf4e2e Update import request log 2024-01-16 10:33:07 +07:00
c4d2a32cf8 Merge remote-tracking branch 'origin/origin/production' into staging 2024-01-16 09:12:32 +07:00
ivan-sim
a3927d3770 Update TTD 2024-01-15 14:36:54 +07:00
1089 changed files with 89310 additions and 28120 deletions

View File

@@ -80,4 +80,9 @@ DUITKU_MERCHANT_CODE=
DUITKU_IS_SANDBOX=TRUE
WKHTML_PDF_BINARY=/var/www/aso/vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64
WKHTML_IMG_BINARY=
WKHTML_IMG_BINARY=
EMAIL = helpdesk@linksehat.com
PW_EMAIL = vsfcvwxcgldhhkdm
NAME_EMAIL = "LinkSehat"
PROVIDER_ONLINE_NOTIFICATION_EMAIL=helpdesk@linksehat.com

15
.gitignore vendored
View File

@@ -15,3 +15,18 @@ yarn-error.log
/public/dashboard
/public/dashboard-staging
/public/dashboard-copy
/public/dashboard-copy2
/public/client-portal
/public/client-portal-staging
/public/hospital-portal
/public/hospital-portal-staging
/public/files
/Modules/Internal/vendor
composer.lock
/frontend/dashboard/.env.*
/frontend/hospital-portal/.env.*

182
AGENTS.md Normal file
View File

@@ -0,0 +1,182 @@
# AGENTS.md
File ini berisi instruksi untuk AI coding agent yang bekerja di repository ini.
## Project Overview
Project name: ASO (Laravel + Modules)
Purpose: Platform operasional health insurance/managed care untuk pengelolaan member, corporate policy, claim, monitoring, livechat, dan pelaporan.
Main users: Tim internal operasional, portal client corporate, portal hospital.
Business domain: Healthtech / asuransi kesehatan / manajemen klaim dan layanan kesehatan.
## Tech Stack
Backend: PHP 8+, Laravel 9, `nwidart/laravel-modules`.
Frontend: React + TypeScript + Vite (utama di `frontend/dashboard` dan `frontend/client-portal`), plus aset root Laravel (`resources/`, Vite/Mix).
Database: MySQL/MariaDB (via Eloquent ORM + Laravel migrations).
Queue/background jobs: Laravel Queue (`jobs` table tersedia; default testing `sync`).
Cache: Laravel cache (driver mengikuti `.env`, testing pakai `array`).
Auth: Laravel Sanctum, Spatie Permission (`role`/`permission` middleware), sebagian flow JWT untuk integrasi tertentu.
Deployment: Build frontend ke `public/dashboard` dan `public/client-portal`; backend Laravel standar.
Package manager: Composer (PHP), npm/yarn/pnpm (frontend, mixed antar subproject).
## Local Setup
Install dependencies:
```bash
composer install
npm install
cd frontend/dashboard && yarn install
cd ../client-portal && yarn install
```
Run app:
```bash
php artisan serve
npm run dev
cd frontend/dashboard && yarn start
cd ../client-portal && yarn start
```
Run tests:
```bash
php artisan test
```
Run lint:
```bash
cd frontend/dashboard && yarn lint
cd ../client-portal && yarn lint
```
Run typecheck:
```bash
# Belum ada script typecheck standar di root/subproject.
# Jika diperlukan, gunakan tsc manual per frontend setelah konfirmasi tim.
```
Run build:
```bash
npm run production
cd frontend/dashboard && yarn build
cd ../client-portal && yarn build
```
Run migrations:
```bash
php artisan migrate
```
## Repository Structure
```text
app/ # Core Laravel app (models, services, middleware, controllers)
routes/ # Root web/api routes
Modules/ # Domain/module-based backend (Client, Internal, Linksehat, Primaya, HospitalPortal)
Modules/*/Routes/ # Route entry point tiap module
Modules/*/Http/Controllers/Api/
database/migrations/ # Root migrations
frontend/dashboard/ # React TS admin/internal dashboard
frontend/client-portal/ # React TS client portal
resources/ # Blade/views/assets untuk app Laravel utama
public/ # Public assets + output build frontend
tests/ # PHPUnit tests (Feature/Unit)
```
## Architecture Rules
- Tempatkan business logic di layer service/domain yang sudah ada (`app/Services`, `Modules/*/Services`) dan jaga controller tetap tipis.
- API layer mengikuti pemisahan module: endpoint module didefinisikan di `Modules/<ModuleName>/Routes/api.php` dengan controller module terkait.
- Untuk perubahan schema, gunakan migration baru; jangan ubah migration lama kecuali ada instruksi eksplisit.
- Untuk frontend, ikuti pattern existing per app (`src/pages`, `src/components`, `src/hooks`, `src/sections`) dan hindari cross-import antar app dashboard/client-portal.
- Testing backend utama menggunakan PHPUnit (`tests/Feature`, `tests/Unit`); tambah regression test untuk perubahan behavior penting.
## Coding Standards
- Ikuti pattern existing project sebelum membuat pattern baru.
- Buat perubahan kecil dan fokus.
- Jangan lakukan refactor yang tidak berhubungan.
- Jangan hardcode secrets.
- Jangan bypass validation.
- Jangan bypass auth/permission checks.
- Pilih code yang eksplisit dan mudah dibaca dibanding code yang terlalu clever.
- Tambahkan atau update test jika behavior berubah.
## Git Rules
- Jangan commit kecuali user secara eksplisit meminta.
- Jangan push kecuali user secara eksplisit meminta.
- Jangan rewrite git history kecuali user secara eksplisit meminta.
- Tampilkan file yang berubah di final response.
## Security Rules
- Jangan pernah print secrets.
- Jangan ubah nilai `.env` asli kecuali diminta secara eksplisit.
- Gunakan `.env-example`/`.env.example` untuk dokumentasi environment variables.
- Validasi auth, permissions, dan scoping corporate/member untuk protected data.
- Untuk endpoint API, pertahankan middleware auth yang ada (`auth:sanctum`, role/permission, middleware khusus module).
- Minta konfirmasi sebelum destructive data changes.
## Database Rules
- Gunakan migration system project ini.
- Jangan edit historical migrations kecuali project ini memang mengizinkan.
- Sertakan rollback/safety notes untuk schema changes.
- Pertimbangkan existing production data.
- Perhatikan migrasi dapat berasal dari root `database/migrations` dan modul tertentu.
## Testing Rules
Sebelum selesai, jalankan command yang relevan:
```bash
php artisan test
cd frontend/dashboard && yarn lint
cd frontend/client-portal && yarn lint
```
Jika command tidak bisa dijalankan, jelaskan alasannya dan command apa yang harus dijalankan manual.
## AI Agent Workflow
Untuk feature work:
1. Baca file ini.
2. Inspect pattern yang sudah ada.
3. Tulis plan singkat untuk pekerjaan non-trivial.
4. Tanya klarifikasi jika requirement kurang jelas.
5. Implement perubahan kecil dan fokus.
6. Jalankan test/lint/typecheck/build yang relevan.
7. Rangkum file yang berubah, command yang dijalankan, dan risiko.
Untuk debugging:
1. Reproduce atau inspect issue.
2. Identifikasi root cause sebelum mengubah code.
3. Buat fix minimal yang aman.
4. Tambahkan regression test jika memungkinkan.
5. Jalankan verification.
## Final Response Format
```text
Summary:
- ...
Files changed:
- ...
Commands run:
- ...
Risks / notes:
- ...
```

0
Modules/Client/Config/.gitkeep Normal file → Executable file
View File

0
Modules/Client/Config/config.php Normal file → Executable file
View File

0
Modules/Client/Console/.gitkeep Normal file → Executable file
View File

0
Modules/Client/Database/Migrations/.gitkeep Normal file → Executable file
View File

0
Modules/Client/Database/Seeders/.gitkeep Normal file → Executable file
View File

View File

0
Modules/Client/Database/factories/.gitkeep Normal file → Executable file
View File

0
Modules/Client/Entities/.gitkeep Normal file → Executable file
View File

0
Modules/Client/Http/Controllers/.gitkeep Normal file → Executable file
View File

75
Modules/Client/Http/Controllers/Api/AuthController.php Normal file → Executable file
View File

@@ -8,14 +8,17 @@ use App\Models\User;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Symfony\Component\HttpFoundation\Response;
use Illuminate\Support\Facades\View;
class AuthController extends Controller
{
public function login(Request $request)
{
$request->validate([
'phoneOrEmail' => 'required'
'phoneOrEmail' => 'required',
'password' => 'required'
]);
$user = User::query()
@@ -32,28 +35,60 @@ class AuthController extends Controller
return Helper::responseJson(statusCode: Response::HTTP_NOT_FOUND, message: $message);
}
if (filter_var($request->phoneOrEmail, FILTER_VALIDATE_EMAIL)) {
User::query()->find($user->id)->update([
'email' => $request->phoneOrEmail,
'otp' => 4444, //rand(1000, 9999),
'otp_created_at' => now()
]);
} else {
User::query()->find($user->id)->update([
'phone' => $request->phoneOrEmail,
'otp' => 4444,//rand(1000, 9999),
'otp_created_at' => now()
]);
// $token = rand(1000, 9999); // Menghasilkan angka acak antara 100000 dan 999999
// if($request->phoneOrEmail == 'manager+one@gmail.com' || $request->phoneOrEmail == 'manager+two@gmail.com')
// {
// $token = 4444;
// }
// if (filter_var($request->phoneOrEmail, FILTER_VALIDATE_EMAIL)) {
// User::query()->find($user->id)->update([
// 'email' => $request->phoneOrEmail,
// 'otp' => $token,
// 'otp_created_at' => now()
// ]);
// } else {
// User::query()->find($user->id)->update([
// 'phone' => $request->phoneOrEmail,
// 'otp' => $token,
// 'otp_created_at' => now()
// ]);
// }
// // TODO Send the OTP
// if (filter_var($request->phoneOrEmail, FILTER_VALIDATE_EMAIL)) {
// // Send Email
// //send to alarm
// if($request->phoneOrEmail != 'manager+one@gmail.com' && $request->phoneOrEmail != 'manager+two@gmail.com')
// {
// $nameTo = 'User';
// $dataEmail = [
// 'email' => $request->phoneOrEmail,
// 'name' => $nameTo,
// 'subject' => 'OTP Login Client Portal Tanggal '. date('Y-m-d H:i:s'),
// 'body' => View::make('email/forgot_password', ['token' => $token])->render(),
// ];
// Helper::sendEmail($dataEmail);
// }
// } else {
// // Send Whatsapp
// }
// return Helper::responseJson(message: 'OTP Terkirim');
if (!Hash::check($request->password, $user->password)) {
return response(['message' => 'Password Salah'], 403);
}
// TODO Send the OTP
if (filter_var($request->phoneOrEmail, FILTER_VALIDATE_EMAIL)) {
// Send Email
} else {
// Send Whatsapp
}
return Helper::responseJson(
data: [
'token' => $user->createToken('app')->plainTextToken,
'user' => $user,
],
message: 'Selamat Datang'
);
return Helper::responseJson(message: 'OTP Terkirim');
}
public function validateOtp(Request $request)

View File

@@ -0,0 +1,286 @@
<?php
namespace Modules\Client\Http\Controllers\Api;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\DB;
class BillingSummaryController extends Controller
{
public function index(Request $request, $corporate_id)
{
$year = $request->year ?? now()->year;
$status = $request->status;
$bn = $request->bn;
$payorId = $request->payorId;
$service = $request->service;
$billing = $request->billing;
$search = $request->search;
$rows = DB::table('invoice_payments')
->join('invoice_payment_details', 'invoice_payment_details.invoice_payment_id', '=', 'invoice_payments.id')
->join('claim_requests', 'claim_requests.id', '=', 'invoice_payment_details.claim_request_id')
->join('request_logs', 'request_logs.id', '=', 'claim_requests.request_log_id')
->join('corporate_employees', 'corporate_employees.member_id', '=', 'request_logs.member_id')
->join('organizations', 'organizations.id', '=', 'request_logs.organization_id')
->leftJoin('members', 'members.id', '=', 'request_logs.member_id')
->whereYear('invoice_payments.created_at', $year)
->where('corporate_employees.corporate_id', '=', $corporate_id)
// FILTERS
->when($status, fn ($q) =>
$q->where('invoice_payments.status', $status)
)
->when($bn, fn ($q) =>
$q->where('members.member_id', $bn)
)
->when($payorId, fn ($q) =>
$q->where('members.payor_id', $payorId)
)
->when($service, fn ($q) =>
$q->where('claim_requests.service_code', $service)
)
->when($billing, fn ($q) =>
$q->where('invoice_payments.invoice_number', $billing)
)
// 🔍 SEARCH PROVIDER (LIKE)
->when($search, fn ($q) =>
$q->where('organizations.name', 'like', '%' . $search . '%')
)
->selectRaw("
MONTH(invoice_payments.created_at) as month_number,
organizations.name as provider,
SUM(request_logs.nominal) as total
")
->groupBy('month_number', 'organizations.name')
->orderBy('month_number')
->get();
return response()->json(
$this->formatMonthly($rows)
);
}
protected function formatMonthly($rows): array
{
$months = [
1 => 'Januari', 2 => 'Februari', 3 => 'Maret',
4 => 'April', 5 => 'Mei', 6 => 'Juni',
7 => 'Juli', 8 => 'Agustus', 9 => 'September',
10 => 'Oktober', 11 => 'November', 12 => 'Desember',
];
return collect($rows)
->groupBy('month_number')
->map(function ($items, $monthNumber) use ($months) {
return [
'month' => $months[$monthNumber],
'total' => $items->sum('total'),
'items' => $items->map(fn ($item) => [
'provider' => $item->provider,
'total' => (float) $item->total,
])->values(),
];
})
->values()
->toArray();
}
public function providerSummary(Request $request, $corporate_id)
{
$year = $request->year ?? now()->year;
$status = $request->status;
$bn = $request->bn;
$payorId = $request->payorId;
$service = $request->service;
$billing = $request->billing;
$search = $request->search;
$query = DB::table('invoice_payments')
->join('invoice_payment_details', 'invoice_payment_details.invoice_payment_id', '=', 'invoice_payments.id')
->join('claim_requests', 'claim_requests.id', '=', 'invoice_payment_details.claim_request_id')
->join('request_logs', 'request_logs.id', '=', 'claim_requests.request_log_id')
->join('corporate_employees', 'corporate_employees.member_id', '=', 'request_logs.member_id')
->join('organizations', 'organizations.id', '=', 'request_logs.organization_id')
->leftJoin('members', 'members.id', '=', 'request_logs.member_id')
->whereYear('invoice_payments.created_at', $year)
->where('corporate_employees.corporate_id', '=', $corporate_id)
// FILTER
->when($status, fn ($q) =>
$q->where('invoice_payments.status', $status)
)
->when($bn, fn ($q) =>
$q->where('members.member_id', $bn)
)
->when($payorId, fn ($q) =>
$q->where('members.payor_id', $payorId)
)
->when($service, fn ($q) =>
$q->where('claim_requests.service_code', $service)
)
->when($billing, fn ($q) =>
$q->where('invoice_payments.invoice_number', $billing)
)
->when($search, fn ($q) =>
$q->where('organizations.name', 'like', '%' . $search . '%')
);
$items = $query
->selectRaw("
organizations.name as provider,
SUM(request_logs.nominal) as total
")
->groupBy('organizations.name')
->orderByDesc('total')
->get()
->map(fn ($row) => [
'provider' => $row->provider,
'total' => (float) $row->total,
]);
return response()->json([
'total' => $items->sum('total'),
'items' => $items,
]);
}
public function topDiagnosis(Request $request, $corporate_id)
{
$year = $request->year ?? now()->year;
$status = $request->status;
$bn = $request->bn;
$payorId = $request->payorId;
$service = $request->service;
$billing = $request->billing;
$search = $request->search;
$rows = DB::table('invoice_payments')
->join('invoice_payment_details', 'invoice_payment_details.invoice_payment_id', '=', 'invoice_payments.id')
->join('claim_requests', 'claim_requests.id', '=', 'invoice_payment_details.claim_request_id')
->join('request_logs', 'request_logs.id', '=', 'claim_requests.request_log_id')
->join('corporate_employees', 'corporate_employees.member_id', '=', 'request_logs.member_id')
// 🔥 ICD JOIN
->leftJoin(
'icd',
DB::raw("icd.code"),
'=',
DB::raw("SUBSTRING_INDEX(request_logs.diagnosis, ',', 1)")
)
->leftJoin('members', 'members.id', '=', 'request_logs.member_id')
->where('corporate_employees.corporate_id', '=', $corporate_id)
->whereYear('invoice_payments.created_at', $year)
// FILTER
->when($status, fn ($q) =>
$q->where('invoice_payments.status', $status)
)
->when($bn, fn ($q) =>
$q->where('members.member_id', $bn)
)
->when($payorId, fn ($q) =>
$q->where('members.payor_id', $payorId)
)
->when($service, fn ($q) =>
$q->where('claim_requests.service_code', $service)
)
->when($billing, fn ($q) =>
$q->where('invoice_payments.invoice_number', $billing)
)
->selectRaw("
SUBSTRING_INDEX(request_logs.diagnosis, ',', 1) as code_diagnosis,
icd.name as diagnosis,
COUNT(request_logs.id) as total_case,
SUM(request_logs.nominal) as total_billing
")
->groupBy('code_diagnosis', 'icd.name')
->orderByDesc('total_case')
->limit(10)
->get();
return response()->json(
$rows->map(fn ($row) => [
'code' => $row->code_diagnosis,
'diagnosis' => $row->diagnosis ?? '-',
'total_case' => (int) $row->total_case,
'total_billing' => (float) $row->total_billing,
])
);
}
/**
* Display a listing of the resource.
* @return Renderable
*/
// public function index()
// {
// return view('client::index');
// }
/**
* Show the form for creating a new resource.
* @return Renderable
*/
public function create()
{
return view('client::create');
}
/**
* Store a newly created resource in storage.
* @param Request $request
* @return Renderable
*/
public function store(Request $request)
{
//
}
/**
* Show the specified resource.
* @param int $id
* @return Renderable
*/
public function show($id)
{
return view('client::show');
}
/**
* Show the form for editing the specified resource.
* @param int $id
* @return Renderable
*/
public function edit($id)
{
return view('client::edit');
}
/**
* Update the specified resource in storage.
* @param Request $request
* @param int $id
* @return Renderable
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
* @param int $id
* @return Renderable
*/
public function destroy($id)
{
//
}
}

394
Modules/Client/Http/Controllers/Api/ClaimController.php Normal file → Executable file
View File

@@ -17,6 +17,11 @@ use Modules\Client\Transformers\ClaimShowResource;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use Illuminate\Support\Facades\Storage;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
use Box\Spout\Writer\Common\Creator\Style\StyleBuilder;
use Box\Spout\Common\Entity\Style\CellAlignment;
use Box\Spout\Common\Entity\Style\Color;
use Carbon\Carbon;
class ClaimController extends Controller
{
@@ -194,19 +199,19 @@ class ClaimController extends Controller
['value' => 'Amt Not Approved', 'cell' => 'J1', 'mergeCell' => false, 'mergeToCell' => ''],
['value' => 'Excess Paid', 'cell' => 'K1', 'mergeCell' => false, 'mergeToCell' => ''],
['value' => 'Diagnosis', 'cell' => 'L1', 'mergeCell' => false, 'mergeToCell' => 'J2'],
];
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
foreach ($headers as $header) {
$sheet->setCellValue($header['cell'], $header['value']);
if ($header['mergeCell'] === true) {
$sheet->mergeCells($header['cell'] . ':' . $header['mergeToCell']);
}
$sheet->getStyle($header['cell'])->getFont()->setBold(true);
$sheet->getStyle($header['cell'])->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER)->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
}
@@ -226,7 +231,7 @@ class ClaimController extends Controller
$sheet->setCellValue('J' . $startFrom, $d['amount_not_approved'] ?? '-');
$sheet->setCellValue('K' . $startFrom, $d['excess_paid'] ?? '-');
$sheet->setCellValue('L' . $startFrom, $d['diganosis'] ?? '-');
$startFrom++;
}
@@ -244,21 +249,392 @@ class ClaimController extends Controller
$sheet->getDefaultRowDimension()->setRowHeight(-1);
$sheet->setTitle('Alarm Center Report');
$writer = new Xlsx($spreadsheet);
ob_start();
$writer->save('php://output');
$content = ob_get_contents();
ob_end_clean();
$fileName = 'result-' . now()->getPreciseTimestamp(3) . '-alarm-center-report.xlsx';
Storage::disk('public')->put('temp/' . $fileName, $content);
$fileUrl = url('storage/temp/' . $fileName);
return Helper::responseJson([
"file_url" => $fileUrl
]);
}
}
public function exportAlrmCenter($corporate_id, $start, $end)
{
$writer = WriterEntityFactory::createXLSXWriter();
$writer->openToFile(public_path('files/Report-Data-Alarm-Center-'.$start.'-'.$end.'.xlsx'));
$header = [
'No',
'Code',
'Date Submission',
'Date Admission',
'Date Discharge',
'Provider',
'Member ID (BN)',
'Member Name',
'Member Name Principal',
'Plan Code',
'Service',
'Payor ID',
'Corporate name',
'Policy Number',
'Total Billing',
'Benefit Code',
'Benefit Desc',
'Amt Incurred',
'Amt Approved',
'Amt Not Approved',
'Excess Paid',
'Diagnosis',
'Keterangan',
'Catatan',
'Invoice No',
'Billing No',
'Type Of Member',
'Deskripsi Diagnosis'
];
$style = (new StyleBuilder())
->setFontBold()
// ->setFontSize(15)
// ->setFontColor(Color::BLUE)
// ->setShouldWrapText()
->setCellAlignment(CellAlignment::LEFT)
// ->setBackgroundColor(Color::YELLOW)
->build();
$headerRow = WriterEntityFactory::createRowFromArray($header, $style);
$writer->addRow($headerRow);
$data = DB::table('request_logs')
->leftJoin('members', 'members.id', '=', 'request_logs.member_id')
->leftJoin('corporate_employees','corporate_employees.member_id','=','members.id')
->where('corporate_employees.corporate_id', '=', $corporate_id)
// ->where('request_logs.status_final_log', '=', 'approved')
->where('request_logs.deleted_at', '=', null)
->when($start != 'all' && $end != 'all', function ($query) use ($start, $end) {
$query->where('request_logs.submission_date', '>=',$start. ' 00:00:00')
->where('request_logs.submission_date', '<=',$end. ' 23:59:59');
})
->select(
DB::raw('1 AS no'),
'request_logs.submission_date',
'request_logs.created_at',
'request_logs.discharge_date',
'request_logs.organization_id',
'request_logs.id',
'request_logs.member_id',
'request_logs.service_code',
'request_logs.code',
'request_logs.diagnosis',
'request_logs.keterangan',
'request_logs.catatan',
DB::raw('
(Select SUM(request_log_benefits.amount_approved) as tot_bill FROM request_log_benefits
WHERE request_log_benefits.request_log_id = request_logs.id AND request_log_benefits.deleted_at IS NULL LIMIT 1) AS tot_bill
'),
'request_logs.invoice_no',
'request_logs.billing_no',
'request_logs.type_of_member',
)
->groupBy(
'request_logs.submission_date',
'request_logs.created_at',
'request_logs.discharge_date',
'request_logs.organization_id',
'request_logs.id',
'request_logs.member_id',
'request_logs.service_code',
'request_logs.code',
'request_logs.diagnosis',
'request_logs.keterangan',
'request_logs.catatan',
'tot_bill'
)
->orderBy('request_logs.submission_date', 'desc')
->get();
if (isset($data) && count($data) > 0)
{
$dataRow = array();
$no = 0;
foreach ($data as $item)
{
//Provider
$dataRumahSakit = DB::table('organizations')
->leftJoin('addresses', 'addresses.addressable_id', '=', 'organizations.id')
->where('organizations.id', '=', $item->organization_id)
->where('addresses.addressable_type', '=', 'App\Models\Organization')
->select('organizations.name AS nama_rumahsakit', 'addresses.text AS alamat_rumahsakit', 'organizations.corporate_id_partner')
->first();
//Data Member
$dataMember = DB::table('members')
->where('members.id', '=', $item->member_id)
->select(
'members.nric',
'members.id',
'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('
// "LinkSehat" AS penjamin
// '),
DB::raw('
(Select corporates.name FROM corporates
LEFT 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 corporates.id FROM corporates
LEFT JOIN corporate_employees ON corporate_employees.corporate_id = corporates.id
WHERE corporate_employees.member_id = members.id LIMIT 1) AS id_perusahaan
'),
DB::raw('
(Select corporates.code FROM corporates
LEFT JOIN corporate_employees ON corporate_employees.corporate_id = corporates.id
WHERE corporate_employees.member_id = members.id LIMIT 1) AS code_perusahaan
'),
DB::raw('
(Select services.name FROM services
WHERE services.code = "'.$item->service_code.'" LIMIT 1) AS jenis_perawatan
'),
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
LEFT JOIN plans ON plans.id = member_plans.plan_id
WHERE member_plans.member_id = members.id AND plans.service_code = "'.$item->service_code.'" LIMIT 1) AS code_plan
'),
DB::raw('
(Select plans.limit_rules FROM member_plans
LEFT 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();
//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)
{
$dataNamaKaryawan = DB::table('members')
->where('members.principal_id', '=', $dataMember->principal_id)
->select('members.name')
->first();
$data['namaKaryawan'] = $dataNamaKaryawan->name;
}
else{
$data['namaKaryawan'] = $dataMember->name;
}
//Data Benefit
$dataClaimLog = DB::table('request_log_benefits')
->where('request_log_benefits.request_log_id', '=', $item->id)
->where('request_log_benefits.deleted_at', null)
->select(
'*',
DB::raw('
(Select benefits.description FROM benefits
WHERE benefits.id = request_log_benefits.benefit_id LIMIT 1) AS benfit
'),
DB::raw('
(Select benefits.code FROM benefits
WHERE benefits.id = request_log_benefits.benefit_id LIMIT 1) AS code
')
)
->get();
// Description Diagnosi
$diagnosis = explode(",", $item->diagnosis);
$descriptionDiagnosis = '-';
if ($diagnosis){
$dataDiagnosises = DB::table('icd')->whereIn('code',$diagnosis)->get();
$descriptionDiagnosis = "";
foreach($dataDiagnosises as $dataDiagnosis){
$descriptionDiagnosis .= $dataDiagnosis->name ." ";
}
}
$check_first_id = 0;
if($check_first_id != $item->id)
{
$no += $item->no;
}
$total_billing = 0;
$lastIndex = count($dataClaimLog) - 1;
$firtIndex = 0;
if (isset($dataClaimLog) && count($dataClaimLog) > 0)
{
foreach ($dataClaimLog as $index => $item_benefit)
{
$total_billing += !empty($item_benefit->amount_approved) ? $item_benefit->amount_approved : 0;
$rowData = [
$check_first_id != $item->id ? $no : $no,
!empty($item->code) ? $item->code : '',
!empty($item->created_at) ? $item->created_at : '',
!empty($item->submission_date) ? $item->submission_date : '',
!empty($item->discharge_date) ? $item->discharge_date : '',
!empty($dataRumahSakit->nama_rumahsakit) ? $dataRumahSakit->nama_rumahsakit : '',
!empty($dataMember->member_id) ? $dataMember->member_id : '',
!empty($dataMember->name) ? $dataMember->name : '',
$data['namaKaryawan'],
($firtIndex == $index ? (!empty($dataMember->code_plan) ? $dataMember->code_plan : '') : ''),
!empty($dataMember->jenis_perawatan) ? $dataMember->jenis_perawatan : '',
$penjamin,
!empty($dataMember->nama_perusahaan) ? $dataMember->nama_perusahaan : '',
!empty($dataMember->no_polis) ? $dataMember->no_polis : '',
($firtIndex == $index ? $item->tot_bill : ''),
!empty($item_benefit->code) ? $item_benefit->code : '',
!empty($item_benefit->benfit) ? $item_benefit->benfit : '',
!empty($item_benefit->amount_incurred) ? $item_benefit->amount_incurred : '',
!empty($item_benefit->amount_approved) ? $item_benefit->amount_approved : '',
!empty($item_benefit->amount_not_approved) ? $item_benefit->amount_not_approved : '',
!empty($item_benefit->excess_paid) ? $item_benefit->excess_paid : '',
!empty($item->diagnosis) ? $item->diagnosis : '',
!empty($item->keterangan) ? $item->keterangan : '',
!empty($item->catatan) ? $item->catatan : '',
!empty($item->invoice_no) ? $item->invoice_no : '',
!empty($item->billing_no) ? $item->billing_no : '',
!empty($item->type_of_member) ? $item->type_of_member : '',
$descriptionDiagnosis,
];
array_push($dataRow,$rowData);
$check_first_id = $item->id;
}
}
else
{
$rowData = [
$check_first_id != $item->id ? $no : '',
!empty($item->code) ? $item->code : '',
!empty($item->created_at) ? $item->created_at : '',
!empty($item->submission_date) ? $item->submission_date : '',
!empty($item->discharge_date) ? $item->discharge_date : '',
!empty($dataRumahSakit->nama_rumahsakit) ? $dataRumahSakit->nama_rumahsakit : '',
!empty($dataMember->member_id) ? $dataMember->member_id : '',
!empty($dataMember->name) ? $dataMember->name : '',
$data['namaKaryawan'],
!empty($dataMember->code_plan) ? $dataMember->code_plan : '',
!empty($dataMember->jenis_perawatan) ? $dataMember->jenis_perawatan : '',
$penjamin,
!empty($dataMember->nama_perusahaan) ? $dataMember->nama_perusahaan : '',
!empty($dataMember->no_polis) ? $dataMember->no_polis : '',
'0',
'',
'',
'',
'',
'',
'',
'',
'',
'',
!empty($item->invoice_no) ? $item->invoice_no : '',
!empty($item->billing_no) ? $item->billing_no : '',
!empty($item->type_of_member) ? $item->type_of_member : '',
$descriptionDiagnosis,
];
array_push($dataRow,$rowData);
}
}
$style = (new StyleBuilder())
//->setFontBold()
// ->setFontSize(15)
// ->setFontColor(Color::BLUE)
// ->setShouldWrapText()
->setCellAlignment(CellAlignment::LEFT)
// ->setBackgroundColor(Color::YELLOW)
->build();
$grand_total_billing = 0;
foreach ($dataRow as $rowData) {
if (is_numeric($rowData[14])) {
// Jumlahkan nilai angka ke total
$grand_total_billing += $rowData[14];
}
$row = WriterEntityFactory::createRowFromArray($rowData, $style);
$writer->addRow($row);
}
//Footer
$footer = [
'Total',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
$grand_total_billing,
'',
'',
'',
'',
'',
'',
'',
'',
''
];
$style = (new StyleBuilder())
->setFontBold()
// ->setFontSize(15)
// ->setFontColor(Color::BLUE)
// ->setShouldWrapText()
->setCellAlignment(CellAlignment::LEFT)
// ->setBackgroundColor(Color::YELLOW)
->build();
$footerRow = WriterEntityFactory::createRowFromArray($footer, $style);
$writer->addRow($footerRow);
}
$writer->close();
return Helper::responseJson([
'file_name' => 'Report-Data-Alarm-Center-'. $start.'-'.$end,
"file_url" => url('files/Report-Data-Alarm-Center-'. $start.'-'.$end.'.xlsx')
]);
}
}

View File

@@ -133,12 +133,46 @@ class ClaimReportController extends Controller
)
->get();
$results['request_files'] = $request_files;
// Jika path kosong, kembalikan null
if (!$row->path) {
return null;
}
// $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();
$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();
->where('fileable_type', 'App\Models\ClaimRequest')
->where('fileable_id', $claimRequestId)
->select('id', 'original_name', 'path', 'source', 'type')
->orderBy('id', 'desc')
->get()
->map(function ($row) {
// default null kalau tidak ada path
if (!$row->path) {
$row->path = null; // atau bisa $row->url = null
return $row;
}
if ($row->source === 's3') {
try {
$row->path = Storage::disk('s3')->temporaryUrl(
$row->path,
now()->addMinutes(60)
);
} catch (\Exception $e) {
$row->path = Storage::disk('s3')->url($row->path);
}
} else {
$row->path = Storage::disk('public')->url($row->path);
}
return $row;
});
$results['documents'] = $documents;
return Helper::responseJson($results);
@@ -149,15 +183,16 @@ class ClaimReportController extends Controller
$claim_id = Crypt::decrypt($claim_id);
if ($request->hasFile('fileDiagnosis')) {
foreach ($request->fileDiagnosis as $file) {
$pathFile = File::storeFile('claim-diagnosis', $claim_id, $file);
$fileData = File::storeFile('claim-diagnosis', $claim_id, $file);
File::updateOrCreate([
'fileable_type'=>'App\Models\ClaimRequest',
'fileable_id' => $claim_id,
'type' => 'claim-diagnosis',
'name' => File::getFileName('claim-diagnosis', $claim_id, $file),
'name' => $fileData['name'],
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => $pathFile,
'source' => env('FILESYSTEM_DISK'),
'path' => $fileData['path'],
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
@@ -166,15 +201,16 @@ class ClaimReportController extends Controller
if ($request->hasFile('fileKondisis')) {
foreach ($request->fileKondisis as $file) {
$pathFile = File::storeFile('claim-kondisi', $claim_id, $file);
$fileData = File::storeFile('claim-kondisi', $claim_id, $file);
File::updateOrCreate([
'fileable_type'=>'App\Models\ClaimRequest',
'fileable_id' => $claim_id,
'type' => 'claim-kondisi',
'name' => File::getFileName('claim-kondisi', $claim_id, $file),
'name' => $fileData['name'],
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => $pathFile,
'source' => env('FILESYSTEM_DISK'),
'path' => $fileData['path'],
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
@@ -188,10 +224,11 @@ class ClaimReportController extends Controller
'fileable_type'=>'App\Models\ClaimRequest',
'fileable_id' => $claim_id,
'type' => 'claim-result',
'name' => File::getFileName('claim-result', $claim_id, $file),
'name' => $fileData['name'],
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => $pathFile,
'source' => env('FILESYSTEM_DISK'),
'path' => $fileData['path'],
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);

View File

@@ -19,7 +19,7 @@ class ClaimRequestController extends Controller
* Display a listing of the resource.
* @return Renderable
*/
private static $code_prefix = 'CP';
private static $code_prefix = 'CLAIM';
public function index()
{
return view('client::index');
@@ -109,6 +109,7 @@ class ClaimRequestController extends Controller
'name' => $new_file_name,
'original_name' => $full_path,
'extension' => $ekstension,
'source' => env('FILESYSTEM_DISK'),
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
@@ -134,6 +135,7 @@ class ClaimRequestController extends Controller
'name' => $new_file_name,
'original_name' => $full_path,
'extension' => $ekstension,
'source' => env('FILESYSTEM_DISK'),
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
@@ -159,6 +161,7 @@ class ClaimRequestController extends Controller
'name' => $new_file_name,
'original_name' => $full_path,
'extension' => $ekstension,
'source' => env('FILESYSTEM_DISK'),
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
@@ -224,10 +227,6 @@ class ClaimRequestController extends Controller
public static function getNextCode()
{
// $last_number = ClaimRequest::max('code');
// $next_number = empty($last_number) ? 1 : ((int) explode('-', $last_number)[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');
@@ -247,8 +246,14 @@ class ClaimRequestController extends Controller
{
// 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, 6, '0', STR_PAD_LEFT);
}
}

View File

@@ -70,6 +70,7 @@ class CorporateCurrentController extends Controller
'type' => 'avatar',
'name' => File::getFileName('avatar', $corporate->id, $request->file('logo')),
'extension' => $request->file('logo')->getClientOriginalExtension(),
'source' => env('FILESYSTEM_DISK'),
'path' => $pathFileAvatar,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,

View File

View File

View File

@@ -21,6 +21,10 @@ use Modules\Client\Transformers\Dashboard\MemberEmployeeDataResources as Dashboa
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
use Modules\Client\Transformers\EmployeeData\UserProfile\DataMemberResource as EmployeeDataProfileMemberResource;
use Modules\Internal\Services\MemberEnrollmentService;
use Illuminate\Support\Facades\DB;
use Dompdf\Dompdf;
use Dompdf\Options;
use PDF;
class CorporateMemberController extends Controller
{
@@ -188,15 +192,50 @@ class CorporateMemberController extends Controller
public function showPerMember(Request $request, $corporate_id, $member_id)
{
$per_page = $request->has('per_page') ? $request->input('per_page') : 10;
$data = Member::query()
->with(['requestLogs'])
$member = Member::query()
->whereHas('currentCorporate', function ($query) use ($corporate_id) {
$query->where('corporate_id', $corporate_id);
})
->find($member_id);
return response()->json(['full_name' => $data->full_name ?? null, 'paginations' => Helper::paginateResources(DataListClaimMemberResource::collection($data->requestLogs()->paginate($per_page)))]);
$data = RequestLog::where([
'member_id' => $member->id,
'deleted_at' => null
])
->when($request->has('orderBy'), function ($query) use ($request) {
$orderBy = match ($request->input('orderBy')) {
'admission_date' => 'request_logs.submission_date',
'discharge_date' => 'request_logs.discharge_date',
'code' => 'request_logs.code',
default => ''
};
$query->getQuery()->orderBy($orderBy, $request->order);
})
->when($request->search, function ($q, $search) {
$q->where('code', 'LIKE', "%".$search."%");
$q->orWhereHas('member', function ($subQuery) use ($search) {
$subQuery->where('name', 'LIKE', "%".$search."%");
});
})
->when($request->status, function ($q, $search) {
if ($search == 'kondisi') {
$q->whereHas('files', function ($subQuery) {
$subQuery->where('type', 'final-log-kondisi');
});
} elseif ($search == 'diagnosa') {
$q->whereHas('files', function ($subQuery) {
$subQuery->where('type', 'final-log-diagnosis');
});
} elseif ($search == 'result') {
$q->whereHas('files', function ($subQuery) {
$subQuery->where('type', 'final-log-result');
});
} elseif ($search == 'none') {
$q->doesntHave('files');
}
})
->with(['member','files'])
->paginate($per_page);
return response()->json(['full_name' => $member->full_name?? null, 'paginations' => Helper::paginateResources(DataListClaimMemberResource::collection($data))]);
}
public function serviceMonitoring(int $corporate_id, int $request_log_id)
@@ -211,12 +250,14 @@ class CorporateMemberController extends Controller
'requestLogBenefits:id,request_log_id,benefit_id,amount_incurred,amount_approved,amount_not_approved,excess_paid,keterangan' => [
'benefit'
],
'requestLogDailyMonitorings:id,request_log_id,created_at,subject,body_temperature,sistole,diastole,respiration_rate,analysis,lab_date,provider,examination' => [
'requestLogMedicalPlans:request_log_daily_monitoring_id,plan,type'
'requestLogDailyMonitorings:id,request_log_id,submission_date,subject,object,body_temperature,sistole,diastole,respiration_rate,analysis,lab_date,provider,examination' => [
'requestLogMedicalPlans:request_log_daily_monitoring_id,plan,type',
// 'document'
],
'service:code,name',
'files',
])
->find($request_log_id, ['id', 'submission_date', 'discharge_date', 'member_id', 'service_code', 'organization_id']);
->find($request_log_id, ['id', 'submission_date', 'discharge_date', 'member_id', 'service_code', 'organization_id', 'diagnosis', 'keterangan', 'catatan']);
$dataBenefit = [];
if (count($data->requestLogBenefits) > 0) {
@@ -242,4 +283,167 @@ class CorporateMemberController extends Controller
return Helper::responseJson(DataServiceMonitoring::make($data));
}
public function getDeposit($corporate_id)
{
$deposit = DB::table('corporate_policies')
->select('total_premi',
'minimal_deposit_percentage',
'minimal_deposit_net',
'minimal_alert_percentage',
'minimal_alert_net',
'minimal_stop_service_net',
'minimal_stop_service_percentage')
->where('corporate_id','=', $corporate_id)
->first();
$usage = DB::table('corporate_employees')
->join('request_logs', 'request_logs.member_id', '=', 'corporate_employees.member_id')
->join('request_log_benefits', 'request_log_benefits.request_log_id', '=', 'request_logs.id')
->where('corporate_employees.corporate_id', '=', $corporate_id)
->whereNull('request_log_benefits.deleted_at')
->sum('request_log_benefits.amount_approved');
// Ganti dengan logika Anda untuk mendapatkan data deposit
$deposit = [
'deposit' => $deposit->total_premi,
'limit' => $deposit->total_premi - $usage,
'usage' => $usage,
'minimal_deposit_percentage' => $deposit->minimal_deposit_percentage,
'minimal_deposit_net' => $deposit->minimal_deposit_net,
'minimal_alert_percentage' => $deposit->minimal_alert_percentage,
'minimal_alert_net' => $deposit->minimal_alert_net,
'minimal_stop_service_net' => $deposit->minimal_stop_service_net,
'minimal_stop_service_percentage' => $deposit->minimal_stop_service_percentage
];
return response()->json($deposit);
}
public function getLimits($corporate_id, $member_id)
{
$deposit = DB::table('corporate_policies')
->select('total_premi')
->where('corporate_id','=', $corporate_id)
->first();
$usage = DB::table('corporate_employees')
->join('request_logs', 'request_logs.member_id', '=', 'corporate_employees.member_id')
->join('request_log_benefits', 'request_log_benefits.request_log_id', '=', 'request_logs.id')
->where('corporate_employees.corporate_id', '=', $corporate_id)
->where('request_logs.member_id', '=', $member_id)
->whereNull('request_logs.deleted_at')
->whereNull('request_log_benefits.deleted_at')
->sum('request_log_benefits.amount_approved');
$services = DB::table('member_plans')
->leftJoin('plans', 'plans.id', '=', 'member_plans.plan_id')
->leftJoin('services', 'services.code', '=', 'plans.service_code')
->where('member_plans.member_id', '=', $member_id)
->whereNull('member_plans.deleted_at')
->select(
'plans.service_code',
'services.name as title',
'plans.limit_rules as total',
DB::raw("
(
IFNULL(
(
SELECT SUM(request_log_benefits.amount_approved)
FROM request_logs
INNER JOIN request_log_benefits
ON request_log_benefits.request_log_id = request_logs.id
WHERE request_logs.member_id = $member_id
AND request_logs.service_code = plans.service_code
AND request_log_benefits.deleted_at IS NULL
), 0
)
) as current
")
)
->get();
$total_premi = 0;
foreach ($services as $value)
{
if($value->total > 0 && $value->total != 999999999)
{
$total_premi += $value->total;
}
else if($value->total == 999999999)
{
$total_premi = 999999999;
}
}
// Ganti dengan logika Anda untuk mendapatkan data deposit
$deposit = [
'deposit' => $total_premi,
'usage' => $usage,
'services' => $services
];
return response()->json($deposit);
}
public function downloadEcard($corporate_id, $member_id)
{
$member = Member::with([
'currentPlan',
'currentPolicy',
'currentCorporate',
'currentCorporate.files',
// 'currentPlan.corporateBenefits.benefit'
])->find($member_id);
$dataMember['member'] = $member;
$pdf = new Dompdf();
$options = new Options();
$options->set('isHtml5ParserEnabled', true);
$options->set('isPhpEnabled', true);
$options->set(['isRemoteEnabled' => true]);
$pdf->setOptions($options);
$pdf->setPaper('A5', 'portrait');
if ($member->currentCorporate->id == 5){ // Vale
$html1 = view('pdf.ecard', $dataMember);
} else {
$html1 = view('pdf.ecard-lms', $dataMember);
}
// Halaman 2
// $html2 = view('pdf.req_log_page_2', $data);
// Gabung konten HTML dari dua tampilan
// $htmlCombined = $html1 . $html2;
$htmlCombined = $html1;
$pdf->loadHtml($htmlCombined);
$pdf->render();
$headers = [
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'inline; filename="file.pdf"',
];
return response($pdf->output(), 200, $headers);
}
public function viewECard($corporate_id, $member_id){
$member = Member::with([
'currentPlan',
'currentPolicy',
'currentCorporate',
'currentCorporate.files',
// 'currentPlan.corporateBenefits.benefit'
])->find($member_id);
if ($member->currentCorporate->id == 5){ // Vale
$pdf = PDF::loadView('pdf.ecard', compact('member'))->setPaper('A5', 'portrait');
} else {
$pdf = PDF::loadView('pdf.ecard-lms', compact('member'))->setPaper('A5', 'portrait');
}
return $pdf->download('Ecard - '.$member->full_name.'.pdf');
}
}

View File

View File

@@ -0,0 +1,905 @@
<?php
namespace Modules\Client\Http\Controllers\Api;
use App\Helpers\Helper;
use App\Models\DailyMonitoring;
use App\Models\RequestDailyMonitoring;
use App\Models\MedicalPlan;
use App\Models\File;
use DB;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\File as Files;
use Modules\Internal\Transformers\DailyMonitoringResource;
use Carbon\Carbon;
/**
* Bagaskoro BSD 27-10-2023
*
* Controller untuk daily monitoring
*/
class DailyMonitoringController extends Controller
{
protected $path_for_store = 'public/lab_result';
protected function messages()
{
return [
'required' => ':attribute harus diisi',
'integer' => ':attribute harus angka',
'unique' => ':attribute (:input) sudah ada',
'max' => ':attribute maximal :max karakter',
'exists' => ':attribute (:input) tidak ditemukan',
'numeric' => ':attribute harus angka',
'digits_between'=> ':attribute maximal :max digit minimal :min digit'
];
}
public function GetMemberList(Request $request)
{
$startDate = $request->start_date ? Carbon::parse($request->start_date) : Carbon::today();
$endDate = $request->end_date ? Carbon::parse($request->end_date)->addDay() : Carbon::today()->addDay();
$memberList = DB::table('request_log_daily_monitorings')
->leftJoin('request_logs', 'request_log_daily_monitorings.request_log_id', '=', 'request_logs.id')
->leftJoin('members', 'request_logs.member_id', '=', 'members.id')
->leftJoin('organizations', 'organizations.id', '=', 'request_logs.organization_id')
->select(
'members.member_id',
'members.name',
'members.birth_date',
'request_logs.type_of_member as member_type',
'members.members_effective_date AS startdate',
'members.members_expire_date AS enddate',
'request_logs.submission_date as addmision_date',
'organizations.name as provider',
'request_logs.organization_id',
'request_logs.code',
// Using a subquery to fetch medical_plan
DB::raw('(SELECT plan FROM request_log_medical_plan rdm WHERE rdm.request_log_daily_monitoring_id = request_log_daily_monitorings.id AND type = 1 LIMIT 1) as medical_plan'),
DB::raw('(SELECT plan FROM request_log_medical_plan rdm WHERE rdm.request_log_daily_monitoring_id = request_log_daily_monitorings.id AND type = 2 LIMIT 1) as non_medical_plan'),
'request_log_daily_monitorings.*'
)
->whereNull('request_logs.deleted_at') // Use whereNull() for checking NULL
->when($request->search, function ($q, $search) {
$q->where(function ($subQ) use ($search) {
$subQ->where('members.member_id', 'LIKE', "%{$search}%");
$subQ->orWhere('members.name', 'LIKE', "%{$search}%");
});
})
->when($startDate, function ($q) use ($startDate) {
$q->where('request_log_daily_monitorings.submission_date', '>=', $startDate);
})
->when($endDate, function ($q) use ($endDate) {
$q->where('request_log_daily_monitorings.submission_date', '<=', Carbon::parse($endDate)->addDay());
})
->orderBy('request_logs.created_at', 'desc')
->paginate();
return Helper::paginateResources(DailyMonitoringResource::collection($memberList));
}
/**
* Claim List - by member id
*/
public function GetClaimList(Request $request, $member_id)
{
$memberDetail = DB::table('members')
->select('id','member_id','name')
->where('member_id', $member_id)
->first();
$claimList = DB::table('request_logs')
->leftJoin('services', 'services.code', '=', 'request_logs.service_code')
->leftJoin('members', 'members.id', '=', 'request_logs.member_id')
->select('request_logs.id','request_logs.submission_date AS admission_date','request_logs.discharge_date','request_logs.code','services.name as service_name','request_logs.status','members.name', 'members.member_id')
->where('request_logs.service_code', 'IP')
->where('request_logs.deleted_at', null)
// ->where('request_logs.status_final_log', 'approved')
->where("request_logs.member_id", "=", $memberDetail->id)
->where("request_logs.organization_id", "=", $request->organization_id)
->when($request->search, function ($q, $search) {
$q->where('request_logs.code', 'LIKE', "%".$search."%");
})
->orderBy("request_logs.created_at", "desc")
// ->get()
->paginate();
return response()->json([
'error' => false,
'message' => "success",
'data' => [
'member_detail'=> $memberDetail,
'claim_list' => $claimList,
]
],200);
}
/**
* Detail Monitoring List - by claim_code
*/
public function GetDetailMonitoringList(Request $request, $request_code)
{
// get id request log
$request_logs = DB::table('request_logs')
->select('id','organization_id')
->where('code', $request_code)
->first();
$detail_list = RequestDailyMonitoring::where('request_log_id', empty($request_logs) == false ? $request_logs->id : '')
->orderBy("submission_date", "desc")
->get();
return response()->json([
'error' => false,
'message' => "success",
'data' => [
'detail_list'=> $detail_list,
'organization_id' => $request_logs ? $request_logs->organization_id : 0
]
],200);
}
public function GetDetailMonitoringListbyID(Request $request, $id)
{
$detail = RequestDailyMonitoring::where('id', $id)
->orderBy("created_at", "desc")
->first();
if ($detail) {
// Ubah menjadi array agar bisa dimodifikasi
$detailArray = $detail->toArray();
// Ubah nama key dari request_log_id menjadi log_id
$detailArray['log_code'] = $detailArray['request_log_id'];
unset($detailArray['request_log_id']);
} else {
$detailArray = null;
}
return response()->json([
'error' => false,
'message' => "success",
'data' => $detailArray,
], 200);
}
public function UpdateDetailMonitoringbyID(Request $request)
{
// validation rule
$validator = Validator::make($request->all(),[
'log_code' => 'required',
'reason' => 'required',
],$this->messages());
// validation error
if ($validator->fails()) {
return response()->json([
'error' => true,
'message' => $validator->getMessageBag()
],400);
}
try {
// insert claim daily monitoring
$db_response = RequestDailyMonitoring::where('id', $request->id)
->update([
'request_log_id' => $request->log_code,
'submission_date' => $request->submission_date,
'subject' => $request->subject,
'object' => $request->objective,
'sistole' => $request->sistole,
'diastole' => $request->diastole,
'body_temperature' => $request->body_temperature,
'respiration_rate' => $request->respiration_rate,
'analysis' => $request->analysis,
'lab_date' => $request->lab_date,
'provider' => $request->provider,
'examination' => $request->examination,
'doctor_1' => $request->doctor_1,
'doctor_2' => $request->doctor_2,
'temp_diagnosis' => $request->temp_diagnosis,
'final_diagnosis' => $request->final_diagnosis,
'approval_pendamping' => $request->approval_pendamping,
'description' => $request->keterangan,
'note' => $request->catatan,
'reason' => $request->reason,
'created_by' => auth()->user()->id,
]);
// cek medical plan
$num_medical_plan = 0;
foreach ($request->medical_plan as $row) {
if ($row['medical_plan_str']) {
$num_medical_plan++;
}
}
if ($num_medical_plan == 0) {
DB::rollBack();
return response()->json([
'error' => true,
'message' => [
'medical_plan' => ['medical plan harus diisi']
],
'data' => []
],400);
}
if ($request->medical_plan){
// delete medical plan
DB::table('request_log_medical_plan')
->where([
'request_log_daily_monitoring_id' => $request->id,
'type' => 1
])
->delete();
// insert medical plan
foreach ($request->medical_plan as $row) {
DB::table('request_log_medical_plan')->insert([
'request_log_daily_monitoring_id' => $request->id,
'plan' => $row['medical_plan_str'],
'type' => 1,
'created_at' => date('Y-m-d'),
]);
}
}
if ($request->non_medikamentosa_plan){
// delete medical plan
DB::table('request_log_medical_plan')
->where([
'request_log_daily_monitoring_id' => $request->id,
'type' => 2
])
->delete();
// insert non medical plan
foreach ($request->non_medikamentosa_plan as $row) {
DB::table('request_log_medical_plan')->insert([
'request_log_daily_monitoring_id' => $request->id,
'plan' => $row['non_medikamentosa_plan_str'],
'type' => 2,
'created_at' => date('Y-m-d'),
]);
}
}
// insert file result
if ($request->confirmation_medical_leter){
// $fileCurrents = File::where([
// 'fileable_id' => $request->id,
// 'type' => 'confirmation-medical-letter',
// ])->get();
// if ($fileCurrents){
// foreach($fileCurrents as $fileCurrent){
// if (Files::exists($fileCurrent->path)) {
// Files::delete();
// }
// File::find($fileCurrent->id)->delete();
// }
// }
foreach ($request->confirmation_medical_leter as $file) {
$fileData = File::storeFile('confirmation-medical-letter', $request->id, $file);
File::create([
'fileable_type' => 'App\Models\LaboratoriumResult',
'fileable_id' => $request->id,
'type' => 'confirmation-medical-letter',
'name' => $fileData['name'],
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'source' => env('FILESYSTEM_DISK'),
'path' => $fileData['path'],
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
}
}
if ($request->medical_action_letter){
// $fileCurrents = File::where([
// 'fileable_id' => $request->id,
// 'type' => 'medical-action-letter',
// ])->get();
// if ($fileCurrents){
// foreach($fileCurrents as $fileCurrent){
// if (Files::exists($fileCurrent->path)) {
// Files::delete();
// }
// File::find($fileCurrent->id)->delete();
// }
// }
foreach ($request->medical_action_letter as $file) {
$fileData = File::storeFile('medical-action-letter', $request->id, $file);
File::create([
'fileable_type' => 'App\Models\LaboratoriumResult',
'fileable_id' => $request->id,
'type' => 'medical-action-letter',
'name' => $fileData['name'],
'original_name' => $orignalName,
'extension' => $file->getClientOriginalName(),
'source' => env('FILESYSTEM_DISK'),
'path' => $fileData['path'],
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
// $file->storeAs($this->path_for_store, $fileName);
}
}
if ($request->result){
// $fileCurrents = File::where([
// 'fileable_id' => $request->id,
// 'type' => 'laboratorium-result',
// ])->get();
// if ($fileCurrents){
// foreach($fileCurrents as $fileCurrent){
// if (Files::exists($fileCurrent->path)) {
// Files::delete();
// }
// File::find($fileCurrent->id)->delete();
// }
// }
foreach ($request->result as $file) {
$fileData = File::storeFile('laboratorium-result', $request->id, $file);
File::create([
'fileable_type' => 'App\Models\LaboratoriumResult',
'fileable_id' => $request->id,
'type' => 'laboratorium-result',
'name' => $fileData['name'],
'original_name' => $orignalName,
'extension' => $file->getClientOriginalName(),
'source' => env('FILESYSTEM_DISK'),
'path' => $fileData['path'],
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
// $file->storeAs($this->path_for_store, $fileName);
}
}
DB::commit();
return response()->json([
'error' => false,
'message' => "success",
'data' => []
],200);
}
catch (Exception $e) {
DB::rollBack();
return response()->json([
'error' => true,
'message' => $e->getMessage(),
'data' => []
],500);
}
}
/**
* Add Detail Monitoring List
*/
public function AddDetailMonitoringList(Request $request, $claim_code)
{
$request->merge(['claim_code' => $claim_code]);
// validation rule
$validator = Validator::make($request->all(),[
'claim_code' => 'required|exists:claim_requests,code',
'subject' => 'required',
'sistole' => 'required|numeric',
'diastole' => 'required|numeric',
'body_temperature' => 'required|numeric',
'respiration_rate' => 'required|numeric',
'analysis' => 'required',
'complaints' => 'required',
'medical_plan' => 'required',
],$this->messages());
// validation error
if ($validator->fails()) {
return response()->json([
'error' => true,
'message' => $validator->getMessageBag()
],400);
}
// get claim request
$claim_request = DB::table('claim_requests')
->select('id')
->where('code', $claim_code)
->first();
// get claim
$claim = DB::table('claims')
->select('id')
->where('claim_request_id', $claim_request->id)
->first();
DB::beginTransaction();
try {
// insert claim daily monitoring
$db_response = DailyMonitoring::create([
'claim_id' => $claim->id,
'subject' => $request->subject,
'objective' => $request->objective,
'sistole' => $request->sistole,
'diastole' => $request->diastole,
'body_temperature' => $request->body_temperature,
'respiration_rate' => $request->respiration_rate,
'analysis' => $request->analysis,
'complaints' => $request->complaints,
]);
// cek medical plan
$num_medical_plan = 0;
foreach ($request->medical_plan as $row) {
if ($row['medical_plan_str']) {
$num_medical_plan++;
}
}
if ($num_medical_plan == 0) {
DB::rollBack();
return response()->json([
'error' => true,
'message' => [
'medical_plan' => ['medical plan harus diisi']
],
'data' => []
],400);
}
// insert medical plan
foreach ($request->medical_plan as $row) {
MedicalPlan::create([
'claim_daily_monitoring_id' => $db_response->id,
'plan' => $row['medical_plan_str'],
]);
}
DB::commit();
return response()->json([
'error' => false,
'message' => "success",
'data' => []
],200);
}
catch (Exception $e) {
DB::rollBack();
return response()->json([
'error' => true,
'message' => $e->getMessage(),
'data' => []
],500);
}
}
/**
* Add Detail Request LOG LIST
*/
public function AddDetailMonitoringListRequestLog(Request $request, $request_code)
{
$request->merge(['request_code' => $request_code]);
// validation rule
$validator = Validator::make($request->all(),[
'request_code' => 'required|exists:request_logs,code',
'subject' => 'required',
'submission_date' => 'required',
'body_temperature' => 'required',
'sistole' => 'required',
'diastole' => 'required',
'respiration_rate' => 'required',
'analysis' => 'required',
'medical_plan' => 'required',
'non_medikamentosa_plan' => 'required',
],$this->messages());
// validation error
if ($validator->fails()) {
return response()->json([
'error' => true,
'message' => $validator->getMessageBag()
],400);
}
// get claim request
$request_log = DB::table('request_logs')
->select('id')
->where('code', $request_code)
->first();
DB::beginTransaction();
try {
// insert claim daily monitoring
$db_response = RequestDailyMonitoring::create([
'request_log_id' => $request_log->id,
'submission_date' => $request->submission_date,
'subject' => $request->subject,
'object' => $request->objective,
'sistole' => $request->sistole,
'diastole' => $request->diastole,
'body_temperature' => $request->body_temperature,
'respiration_rate' => $request->respiration_rate,
'analysis' => $request->analysis,
'lab_date' => $request->lab_date,
'provider' => $request->provider,
'examination' => $request->examination,
'created_by' => auth()->user()->id,
]);
// cek medical plan
$num_medical_plan = 0;
foreach ($request->medical_plan as $row) {
if ($row['medical_plan_str']) {
$num_medical_plan++;
}
}
if ($num_medical_plan == 0) {
DB::rollBack();
return response()->json([
'error' => true,
'message' => [
'medical_plan' => ['medical plan harus diisi']
],
'data' => []
],400);
}
// insert medical plan
foreach ($request->medical_plan as $row) {
DB::table('request_log_medical_plan')->insert([
'request_log_daily_monitoring_id' => $db_response->id,
'plan' => $row['medical_plan_str'],
'type' => 1,
'created_at' => date('Y-m-d'),
]);
}
// insert non medical plan
foreach ($request->non_medikamentosa_plan as $row) {
DB::table('request_log_medical_plan')->insert([
'request_log_daily_monitoring_id' => $db_response->id,
'plan' => $row['non_medikamentosa_plan_str'],
'type' => 2,
'created_at' => date('Y-m-d'),
]);
}
// insert file result
if ($request->confirmation_medical_leter){
foreach ($request->confirmation_medical_leter as $file) {
$fileData = File::storeFile('confirmation-medical-letter', $db_response->id, $file);
File::create([
'fileable_type' => 'App\Models\LaboratoriumResult',
'fileable_id' => $db_response->id,
'type' => 'confirmation-medical-letter',
'name' => $fileData['name'],
'original_name' => $orignalName,
'extension' => $file->getClientOriginalName(),
'source' => env('FILESYSTEM_DISK'),
'path' => $fileData['path'],
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
}
}
if ($request->medical_action_letter){
foreach ($request->medical_action_letter as $file) {
$fileData = File::storeFile('medical-action-letter', $db_response->id, $file);
File::create([
'fileable_type' => 'App\Models\LaboratoriumResult',
'fileable_id' => $db_response->id,
'type' => 'medical-action-letter',
'name' => $fileData['name'],
'original_name' => $orignalName,
'extension' => $file->getClientOriginalName(),
'source' => env('FILESYSTEM_DISK'),
'path' => $fileData['path'],
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
// $file->storeAs($this->path_for_store, $fileName);
}
}
if ($request->result){
foreach ($request->result as $file) {
$fileData = File::storeFile('laboratorium-result', $db_response->id, $file);
File::create([
'fileable_type' => 'App\Models\LaboratoriumResult',
'fileable_id' => $db_response->id,
'type' => 'laboratorium-result',
'name' => $fileData['name'],
'original_name' => $orignalName,
'extension' => $file->getClientOriginalName(),
'source' => env('FILESYSTEM_DISK'),
'path' => $fileData['path'],
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
// $file->storeAs($this->path_for_store, $fileName);
}
}
DB::commit();
return response()->json([
'error' => false,
'message' => "success",
'data' => []
],200);
}
catch (Exception $e) {
DB::rollBack();
return response()->json([
'error' => true,
'message' => $e->getMessage(),
'data' => []
],500);
}
}
public function AddListRequestLog(Request $request)
{
// validation rule
$validator = Validator::make($request->all(),[
'log_code' => 'required|exists:request_logs,id',
'subject' => 'required',
'submission_date' => 'required',
'body_temperature' => 'required',
'sistole' => 'required',
'diastole' => 'required',
'respiration_rate' => 'required',
'analysis' => 'required',
'medical_plan' => 'required',
'non_medikamentosa_plan' => 'required',
],$this->messages());
// validation error
if ($validator->fails()) {
return response()->json([
'error' => true,
'message' => $validator->getMessageBag()
],400);
}
// get claim request
$request_log = DB::table('request_logs')
->select('id')
->where('id', $request->log_code)
->first();
DB::beginTransaction();
try {
// insert claim daily monitoring
$db_response = RequestDailyMonitoring::create([
'request_log_id' => $request->log_code,
'submission_date' => $request->submission_date,
'doctor_1' => $request->doctor_1,
'doctor_2' => $request->doctor_2,
'temp_diagnosis' => $request->temp_diagnosis,
'final_diagnosis' => $request->final_diagnosis,
'approval_pendamping' => $request->approval_pendamping,
'description' => $request->keterangan,
'note' => $request->catatan,
'subject' => $request->subject,
'object' => $request->objective,
'sistole' => $request->sistole,
'diastole' => $request->diastole,
'body_temperature' => $request->body_temperature,
'respiration_rate' => $request->respiration_rate,
'analysis' => $request->analysis,
'lab_date' => $request->lab_date,
'provider' => $request->provider,
'examination' => $request->examination,
'created_by' => auth()->user()->id,
]);
// cek medical plan
$num_medical_plan = 0;
foreach ($request->medical_plan as $row) {
if ($row['medical_plan_str']) {
$num_medical_plan++;
}
}
if ($num_medical_plan == 0) {
DB::rollBack();
return response()->json([
'error' => true,
'message' => [
'medical_plan' => ['medical plan harus diisi']
],
'data' => []
],400);
}
// insert medical plan
foreach ($request->medical_plan as $row) {
DB::table('request_log_medical_plan')->insert([
'request_log_daily_monitoring_id' => $db_response->id,
'plan' => $row['medical_plan_str'],
'type' => 1,
'created_at' => date('Y-m-d'),
]);
}
// insert non medical plan
foreach ($request->non_medikamentosa_plan as $row) {
DB::table('request_log_medical_plan')->insert([
'request_log_daily_monitoring_id' => $db_response->id,
'plan' => $row['non_medikamentosa_plan_str'],
'type' => 2,
'created_at' => date('Y-m-d'),
]);
}
// insert file result
if ($request->confirmation_medical_leter){
foreach ($request->confirmation_medical_leter as $file) {
$fileData = File::storeFile('confirmation-medical-letter', $db_response->id, $file);
File::create([
'fileable_type' => 'App\Models\LaboratoriumResult',
'fileable_id' => $db_response->id,
'type' => 'confirmation-medical-letter',
'name' => $fileData['name'],
'original_name' => $orignalName,
'extension' => $file->getClientOriginalName(),
'source' => env('FILESYSTEM_DISK'),
'path' => $fileData['path'],
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
}
}
if ($request->medical_action_letter){
foreach ($request->medical_action_letter as $file) {
$fileData = File::storeFile('medical-action-letter', $db_response->id, $file);
File::create([
'fileable_type' => 'App\Models\LaboratoriumResult',
'fileable_id' => $db_response->id,
'type' => 'medical-action-letter',
'name' => $fileData['name'],
'original_name' => $orignalName,
'extension' => $file->getClientOriginalName(),
'source' => env('FILESYSTEM_DISK'),
'path' => $fileData['path'],
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
// $file->storeAs($this->path_for_store, $fileName);
}
}
if ($request->result){
foreach ($request->result as $file) {
$fileData = File::storeFile('laboratorium-result', $db_response->id, $file);
File::create([
'fileable_type' => 'App\Models\LaboratoriumResult',
'fileable_id' => $db_response->id,
'type' => 'laboratorium-result',
'name' => $fileData['name'],
'original_name' => $orignalName,
'extension' => $file->getClientOriginalName(),
'source' => env('FILESYSTEM_DISK'),
'path' => $fileData['path'],
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
// $file->storeAs($this->path_for_store, $fileName);
}
}
DB::commit();
return response()->json([
'error' => false,
'message' => "success",
'data' => []
],200);
}
catch (Exception $e) {
DB::rollBack();
return response()->json([
'error' => true,
'message' => $e->getMessage(),
'data' => []
],500);
}
}
/**
* 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);
}
/**
* Delete File Daily Monitoring
*/
public function deleteFileDetailMonitoringListRequestLog(Request $request, $id){
$fileCurrent = File::where([
'id' => $id,
])->first();
if ($fileCurrent){
if (Files::exists($fileCurrent->path)) {
Files::delete();
}
$fileCurrent->deleted_at = now();
$fileCurrent->reason = $request->reason;
$fileCurrent->deleted_by = auth()->user()->id;
$fileCurrent->save();
return response()->json([
'error' => false,
'message' => "Delete success",
'data' => $fileCurrent
], 200);
} else {
return response()->json([
'error' => true,
'message' => "Data not found.",
], 404);
}
}
/**
* Update Status Request LOG
*/
public function UpdateListRequestLog(Request $request, $request_code)
{
// get claim request
$request_log = DB::table('request_logs')
->where('code', $request_code)
->update([
'discharge_date' => now(),
'updated_by' => auth()->user()->id,
'updated_at' => now()
]);
if ($request_log) {
return response()->json([
'error' => false,
'message' => "success",
'data' => []
], 200);
} else {
return response()->json([
'error' => true,
'message' => $e->getMessage(),
'data' => []
],500);
}
}
}

0
Modules/Client/Http/Controllers/Api/DataController.php Normal file → Executable file
View File

View File

View File

0
Modules/Client/Http/Controllers/Api/UserController.php Normal file → Executable file
View File

0
Modules/Client/Http/Controllers/ClientController.php Normal file → Executable file
View File

0
Modules/Client/Http/Middleware/.gitkeep Normal file → Executable file
View File

0
Modules/Client/Http/Requests/.gitkeep Normal file → Executable file
View File

0
Modules/Client/Providers/.gitkeep Normal file → Executable file
View File

0
Modules/Client/Providers/ClientServiceProvider.php Normal file → Executable file
View File

0
Modules/Client/Providers/RouteServiceProvider.php Normal file → Executable file
View File

0
Modules/Client/Resources/assets/.gitkeep Normal file → Executable file
View File

0
Modules/Client/Resources/assets/js/app.js Normal file → Executable file
View File

0
Modules/Client/Resources/assets/sass/app.scss Normal file → Executable file
View File

0
Modules/Client/Resources/lang/.gitkeep Normal file → Executable file
View File

0
Modules/Client/Resources/views/.gitkeep Normal file → Executable file
View File

0
Modules/Client/Resources/views/index.blade.php Normal file → Executable file
View File

View File

0
Modules/Client/Routes/.gitkeep Normal file → Executable file
View File

63
Modules/Client/Routes/api.php Normal file → Executable file
View File

@@ -1,6 +1,7 @@
<?php
use Modules\Client\Http\Controllers\Api\AuthController;
use Modules\Client\Http\Controllers\Api\BillingSummaryController;
use Modules\Client\Http\Controllers\Api\CorporateDivisionController;
use Modules\Client\Http\Controllers\Api\CorporateManageController;
use Modules\Client\Http\Controllers\Api\CorporateMemberController;
@@ -14,6 +15,15 @@ use Modules\Internal\Http\Controllers\ClaimEncounterController;
use Modules\Client\Http\Controllers\Api\ClaimReportController;
use Modules\Client\Http\Controllers\Api\ClaimRequestController;
use Modules\Client\Http\Controllers\Api\DataController;
use Modules\Internal\Http\Controllers\Api\FormulariumController;
use Modules\Internal\Http\Controllers\Api\FormulariumTemplateController;
use Modules\Internal\Http\Controllers\Api\AuditTrailController;
use Modules\Internal\Http\Controllers\Api\CorporateController;
use Modules\Internal\Http\Controllers\Api\NavigationController;
use Modules\Client\Http\Controllers\Api\DailyMonitoringController;
use Modules\Internal\Http\Controllers\Api\RequestLogController;
use Modules\Internal\Http\Controllers\Api\UserManagementController;
/*
|--------------------------------------------------------------------------
@@ -28,6 +38,8 @@ use Modules\Client\Http\Controllers\Api\DataController;
Route::prefix('client')->group(function () {
Route::get('codeLog', [RequestLogController::class, 'codeLog']);
Route::controller(AuthController::class)->group(function () {
Route::post('login', 'login');
Route::post('verify-code', 'validateOtp');
@@ -54,6 +66,7 @@ Route::prefix('client')->group(function () {
Route::get('claims/status', [ClaimController::class, 'status']);
Route::get('claims', [ClaimController::class, 'index']);
Route::get('claims/export', [ClaimController::class, 'export']);
Route::get('claims/exportAlrmCenter/{start}/{end}', [ClaimController::class, 'exportAlrmCenter']);
Route::get('claims/{claim_id}/encounters', [ClaimEncounterController::class, 'getEncounterData']);
Route::get('topup', [TopUpController::class, 'index']);
// Route::get('topup', [TopUpController::class, 'get']);
@@ -65,10 +78,60 @@ Route::prefix('client')->group(function () {
Route::get('corporate', [CorporateCurrentController::class, 'index']);
Route::put('corporate-update', [CorporateCurrentController::class, 'update']);
Route::get('get-deposits', [CorporateMemberController::class, 'getDeposit']);
Route::get('billing/summary', [BillingSummaryController::class, 'index']);
Route::get('/billing/provider-summary', [BillingSummaryController::class, 'providerSummary']);
Route::get('/billing/top-diagnosis', [BillingSummaryController::class, 'topDiagnosis']);
Route::get('get-limits/{member_id}', [CorporateMemberController::class, 'getLimits']);
Route::get('download-ecard/{member_id}', [CorporateMemberController::class, 'downloadEcard']);
Route::get('view_card/{member_id}', [CorporateMemberController::class, 'viewECard']);
});
Route::get('memberlist', [DailyMonitoringController::class, 'GetMemberList']);
// Daily Monitoring
Route::prefix('daily_monitoring')->group(function () {
Route::get('detail/{claim_code}/list', [DailyMonitoringController::class, 'GetDetailMonitoringList']);
Route::get('detail/{id}/edit', [DailyMonitoringController::class, 'GetDetailMonitoringListbyID']);
});
Route::get('claims/{id}', [ClaimController::class, 'show']);
Route::post('claim-requests', [ClaimRequestController::class, 'store'])->name('claim-requests.store');
Route::post('claim-requests/{id}', [ClaimRequestController::class, 'show'])->name('claim-requests.show');
Route::get('master/formulariums/{formulariums_template_id}', [FormulariumController::class, 'index']);
Route::post('master/formulariums/{formulariums_template_id}', [FormulariumController::class, 'store']);
Route::post('master/formulariums/{formulariums_template_id}/import', [FormulariumController::class, 'import']);
Route::get('master/formulariums/{formulariums_template_id}/list', [FormulariumController::class, 'generateFormulariumList']);
Route::get('master/formularium-template', [FormulariumTemplateController::class, 'index']);
Route::get('master/formularium-template/search', [FormulariumTemplateController::class, 'search']);
Route::post('master/formularium-template/store', [FormulariumTemplateController::class, 'store']);
Route::put('master/formularium-template/{id}/activation', [FormulariumTemplateController::class, 'activation']);
Route::get('master/formularium-template/{id}/edit', [FormulariumTemplateController::class, 'edit']);
Route::put('master/formularium-template/{id}/update', [FormulariumTemplateController::class, 'update']);
Route::get('audittrail/{corporate_id}', [AuditTrailController::class, 'index']);
Route::get('corporates/import-document-example/{document_type}', [CorporateController::class, 'importDocumentExample']);
// Navigation
Route::get('navigations', [NavigationController::class, 'index']);
// User Management Role
Route::get('user/role', [UserManagementController::class, 'index']);
Route::post('user/role', [UserManagementController::class, 'store']);
Route::get('user/role/{id}', [UserManagementController::class, 'edit']);
Route::put('user/role/{id}', [UserManagementController::class, 'update']);
Route::get('permission_list', [UserManagementController::class, 'permission_list']);
// User Role Access
Route::get('user/access', [UserManagementController::class, 'list_access']);
Route::post('user/access', [UserManagementController::class, 'store_access']);
Route::get('user/access/{id}', [UserManagementController::class, 'edit_access']);
Route::put('user/access/{id}', [UserManagementController::class, 'update_access']);
Route::get('role-list', [UserManagementController::class, 'list_role']);
});
});

0
Modules/Client/Routes/web.php Normal file → Executable file
View File

0
Modules/Client/Tests/Feature/.gitkeep Normal file → Executable file
View File

0
Modules/Client/Tests/Unit/.gitkeep Normal file → Executable file
View File

View File

@@ -4,6 +4,9 @@ namespace Modules\Client\Transformers\AlarmCenter;
use Illuminate\Http\Resources\Json\JsonResource;
use App\Models\Service;
use App\Models\Organization;
use Illuminate\Support\Str;
class DataListClaimMemberResource extends JsonResource
{
@@ -15,11 +18,19 @@ class DataListClaimMemberResource extends JsonResource
*/
public function toArray($request)
{
$filesGroupByType = $this->files->mapToGroups(function($file) {
return [Str::slug($file->type, '_') => $file];
});
$serviceData = Service::where('code', $this->service_code)->first();
$organization = Organization::where('id', $this->organization_id)->first();
$organizationName = '-';
if ($organization){
$organizationName = $organization->name;
}
if ($serviceData) {
$serviceName = $serviceData->name;
} else {
$serviceName = $this->service_cod;
$serviceName = $this->service_code;
}
if ($this->status == 'approved' && $this->status_final_log ){
@@ -34,8 +45,10 @@ class DataListClaimMemberResource extends JsonResource
'admission_date' => $this->submission_date ?? null,
'discharge_date' => $this->discharge_date ?? null,
'code' => $this->code ?? null,
'provider_name' => $organizationName ?? null,
'service_type' => $serviceName,
'status' => $status,
'files_by_type' => $filesGroupByType
];
}
}

View File

@@ -4,6 +4,8 @@ namespace Modules\Client\Transformers\AlarmCenter;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\Carbon;
use App\Models\Icd;
use DB;
class DataServiceMonitoring extends JsonResource
{
@@ -15,15 +17,85 @@ class DataServiceMonitoring extends JsonResource
*/
public function toArray($request)
{
$files = [];
$filesFinalLogResult = [];
$filesFinalLogDiagnosis = [];
$filesFinalLogKondisi = [];
if (count($this->files)>0){
foreach ($this->files as $key => $value) {
/*
Sementara di buat satu dulu, jangan di hapus..
karena suka labil client nya, tiba2 hide tiba2 munculin fitur :D
*/
// if($value->type == 'final-log-result'){
array_push($filesFinalLogResult, $value);
// };
// if($value->type == 'final-log-diagnosis'){
// array_push($filesFinalLogDiagnosis, $value);
// }
// if($value->type == 'final-log-kondisi'){
// array_push($filesFinalLogKondisi, $value);
// }
}
$files = [
'result' => $filesFinalLogResult,
'diagnosis' => $filesFinalLogDiagnosis,
'kondisi' => $filesFinalLogKondisi,
];
} else {
$files = [
'result' => [],
'diagnosis' => [],
'kondisi' => [],
];
}
$diagnosis = '-';
$main_diagnosis = '-';
if ($this->diagnosis){
$diagnosis = explode(',', $this->diagnosis);
if (count($diagnosis)>0){
foreach($diagnosis as $key => $d){
$icd = Icd::where('code', $d)->first('name');
if($key == 0){
if ($icd){
$main_diagnosis = $icd->name;
} else {
$main_diagnosis = $d;
}
$diagnosis = '-';
}
if ($key > 0){
if ($icd) {
$diagnosis .= $icd->name . ', ';
} else {
$diagnosis .= $d .', ';
}
}
}
}
}
return [
'companyName' => $this->member->currentCorporate->name ?? null,
'serviceCode' => $this->service_code ?? null,
'member_id' => $this->member->id ?? null,
'memberId' => $this->member->member_id ?? null,
'fullName' => $this->member->full_name ?? null,
'dateOfBirth' => $this->member->birth_date ?? null,
'phoneNumber' => $this->person->phone ?? null,
'email' => $this->member->email ?? ($this->member->person->email ?? null),
'serviceName' => $this->service->name ?? ($this->service_code ?? null),
'files' => $files,
'mainDiagnose' => $main_diagnosis,
'comparativeDiagnosis' => $diagnosis,
'benefits' => collect($this->requestLogBenefits)->map(function ($requestLogBenefit) {
return [
'amountIncurred' => $requestLogBenefit->amount_incurred,
@@ -34,25 +106,68 @@ class DataServiceMonitoring extends JsonResource
'name' => $requestLogBenefit->benefit->description,
];
})->all() ?? null,
'keterangan' => $this->keterangan ?? null,
'catatan' => $this->catatan ?? null,
'benefitTotal' => $this->benefitTotal ?? null,
'hospital' => $this->organization->name ?? null,
'admissionDate' => $this->submission_date ?? null,
'dischargeDate' => $this->discharge_date ?? null,
'dailyMonitorings' => $this->when($this->service_code === 'IP', collect($this->requestLogDailyMonitorings)
->groupBy(function ($requestLogDailyMonitoring) {
return $requestLogDailyMonitoring->created_at->format('d M Y');
return Carbon::parse($requestLogDailyMonitoring->submission_date)->format('d M Y');
})
->map(function ($groupedItems) {
return collect($groupedItems)
->map(function ($requestLogDailyMonitoring) {
$arr_document = [];
$document = DB::table('files')
->where([
'fileable_type' => 'App\Models\LaboratoriumResult',
'fileable_id' => $requestLogDailyMonitoring->id,
'deleted_at' => null
])
->whereIn('type', ['medical-action-letter', 'confirmation-medical-letter'])
->get();
if ($document){
foreach($document as $d){
// Jika path kosong, kembalikan null
if (!$row->path) {
return null;
}
// Cek nilai 'source'. Jika 's3', gunakan disk S3.
// Selain itu (termasuk null atau 'local'), gunakan disk 'public'.
if ($row->source === 's3') {
try {
$path = Storage::disk('s3')->temporaryUrl(
$row->path,
now()->addMinutes(60) // expired 1 jam
);
} catch (\Exception $e) {
$path = Storage::disk('s3')->url($row->path); // fallback kalau public
}
} else {
$path = Storage::disk('public')->url($row->path);
}
$arr_document[]= [
'path' => $path,
'type' => $d->type,
'original_name' => $d->original_name,
'name' => $d->name,
];
}
}
return [
'time' => $requestLogDailyMonitoring->created_at->format('H:i') ?? null,
'time' => Carbon::parse($requestLogDailyMonitoring->submission_date)->format('H:i') ?? null,
'status' => 'Done' ?? null,
'subject' => $requestLogDailyMonitoring->subject ?? null,
'object' => $requestLogDailyMonitoring->object ?? null,
'bodyTemperature' => $requestLogDailyMonitoring->body_temperature ?? null,
'sistole' => $requestLogDailyMonitoring->sistole . 'mm[Hg]' ?? null,
'diastole' => $requestLogDailyMonitoring->diastole . 'mm[Hg]' ?? null,
'respirationRate' => $requestLogDailyMonitoring->respiration_rate . '/min' ?? null,
'sistole' => $requestLogDailyMonitoring->sistole ?? null,
'diastole' => $requestLogDailyMonitoring->diastole ?? null,
'respirationRate' => $requestLogDailyMonitoring->respiration_rate ?? null,
'analysis' => $requestLogDailyMonitoring->analysis ?? null,
'complaints' => $requestLogDailyMonitoring->complaints ?? null,
'plans' => $this->when($requestLogDailyMonitoring->requestLogMedicalPlans, collect($requestLogDailyMonitoring->requestLogMedicalPlans)
@@ -64,6 +179,7 @@ class DataServiceMonitoring extends JsonResource
})
->sortBy('type')
->all()) ?? null,
'files' => $arr_document
];
})
->sortByDesc(function ($item) {
@@ -75,18 +191,63 @@ class DataServiceMonitoring extends JsonResource
return Carbon::createFromFormat('d M Y', $date)->format('Y-m-d');
})
->all()) ?? null,
'laboratoriumResults' => $this->whenLoaded('requestLogDailyMonitorings', collect($this->requestLogDailyMonitorings)
'laboratoriumResults' => $this->when($this->service_code === 'IP', collect($this->requestLogDailyMonitorings)
->groupBy(function ($requestLogDailyMonitoring) {
return Carbon::parse($requestLogDailyMonitoring->lab_date)->format('d M Y');
})
->filter(function ($groupedItems) {
return !is_null($groupedItems->first()->lab_date);
})
->map(function ($groupedItems) {
return collect($groupedItems)
->map(function ($requestLogDailyMonitoring) {
->map(function ($test) {
$arr_document = [];
$document = DB::table('files')
->where([
'fileable_type' => 'App\Models\LaboratoriumResult',
'fileable_id' => $test->id,
'deleted_at' => null
])
->whereIn('type', ['laboratorium-result'])
->get();
if ($document){
foreach($document as $d){
// Jika path kosong, kembalikan null
if (!$row->path) {
return null;
}
// Cek nilai 'source'. Jika 's3', gunakan disk S3.
// Selain itu (termasuk null atau 'local'), gunakan disk 'public'.
if ($row->source === 's3') {
try {
$path = Storage::disk('s3')->temporaryUrl(
$row->path,
now()->addMinutes(60) // expired 1 jam
);
} catch (\Exception $e) {
$path = Storage::disk('s3')->url($row->path); // fallback kalau public
}
} else {
$path = Storage::disk('public')->url($row->path);
}
$arr_document[]= [
'path' => $path,
'type' => $d->type,
'original_name' => $d->original_name,
'name' => $d->name,
];
}
}
return [
'code' => $requestLogDailyMonitoring->code,
'date' => Carbon::parse($requestLogDailyMonitoring->lab_date)->format('d M Y') ?? null,
'examination' => $requestLogDailyMonitoring->examination ?? null,
'location' => $requestLogDailyMonitoring->provider ?? null,
'code' => $test->code,
'date' => Carbon::parse($test->lab_date)->format('d M Y') ?? null,
'examination' => $test->examination ?? null,
'location' => $test->provider ?? null,
'files' => $arr_document
];
})
->sortByDesc(function ($item) {

View File

View File

0
Modules/Client/Transformers/ClaimShowResource.php Normal file → Executable file
View File

View File

View File

@@ -17,6 +17,7 @@ class MemberAlarmCenterResources extends JsonResource
'id' => $this->id,
'personId' => $this->person_id,
'memberId' => $this->member_id,
'link_document' => $this->link_document,
'fullName' => $this->full_name,
'service' => $this->service_code,
'start_date' => $this->members_effective_date,

View File

View File

View File

0
Modules/Client/Transformers/DataMemberResource.php Normal file → Executable file
View File

0
Modules/Client/composer.json Normal file → Executable file
View File

0
Modules/Client/module.json Normal file → Executable file
View File

0
Modules/Client/package.json Normal file → Executable file
View File

0
Modules/Client/webpack.mix.js Normal file → Executable file
View File

0
Modules/HospitalPortal/Config/.gitkeep Normal file → Executable file
View File

0
Modules/HospitalPortal/Config/config.php Normal file → Executable file
View File

0
Modules/HospitalPortal/Console/.gitkeep Normal file → Executable file
View File

0
Modules/HospitalPortal/Database/Migrations/.gitkeep Normal file → Executable file
View File

0
Modules/HospitalPortal/Database/Seeders/.gitkeep Normal file → Executable file
View File

0
Modules/HospitalPortal/Database/factories/.gitkeep Normal file → Executable file
View File

0
Modules/HospitalPortal/Entities/.gitkeep Normal file → Executable file
View File

0
Modules/HospitalPortal/Helpers/ApiResponse.php Normal file → Executable file
View File

View File

@@ -0,0 +1,93 @@
<?php
namespace Modules\HospitalPortal\Helpers;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;
use DateTime;
use DateTimeZone;
class GrabHelper
{
protected $client;
public function __construct()
{
$this->client = new Client();
}
public function getToken()
{
$url = env('TOKEN_URL_GRAB');
$headers = [
'Content-Type' => 'application/json',
];
$body = json_encode([
'client_id' => env('CLIENT_ID_GRAB'),
'client_secret' => env('CLIENT_SECRET_GRAB'),
'grant_type' => 'client_credentials',
'scope' => 'grab_express.partner_deliveries',
]);
$request = new Request('POST', $url, $headers, $body);
$response = $this->client->send($request);
$data = json_decode($response->getBody()->getContents(), true);
return $data['access_token'] ?? null;
}
public function createDelivery($token,$body)
{
$url = env('BASE_URL_GRAB').'/v1/deliveries';
$headers = [
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $token,
];
$request = new Request('POST', $url, $headers, $body);
$response = $this->client->send($request);
return $response->getBody()->getContents();
}
public function normalizePhoneNumber($phoneNumber) {
// Remove any non-digit characters (e.g., '+', '-', spaces)
$phoneNumber = preg_replace('/\D/', '', $phoneNumber);
// Check if the cleaned phone number is numeric
if (!is_numeric($phoneNumber)) {
return null; // Return false or handle the error as needed
}
// Handle phone numbers starting with '62' or '+62'
if (substr($phoneNumber, 0, 2) === '62') {
$phoneNumber = '0' . substr($phoneNumber, 2);
}
// Handle phone numbers that already start with '8'
if (substr($phoneNumber, 0, 1) === '8') {
$phoneNumber = '0' . $phoneNumber;
}
return $phoneNumber;
}
public function getScheduleTimes()
{
// Create a DateTime object for the current time in Jakarta timezone
$pickupTimeFrom = new DateTime('now', new DateTimeZone('Asia/Jakarta'));
// Add 30 minutes to the current time for pickupTimeFrom
$pickupTimeFrom->modify('+30 minutes');
// Clone the pickupTimeFrom to calculate pickupTimeTo
$pickupTimeTo = clone $pickupTimeFrom;
// Add 1 hour to pickupTimeFrom for pickupTimeTo
$pickupTimeTo->modify('+1 hour');
// Format the times to ISO 8601 format (e.g., 2024-10-02T12:37:28+07:00)
return [
"pickupTimeFrom" => $pickupTimeFrom->format(DateTime::ATOM),
"pickupTimeTo" => $pickupTimeTo->format(DateTime::ATOM),
];
}
}

0
Modules/HospitalPortal/Http/Controllers/.gitkeep Normal file → Executable file
View File

View File

@@ -14,6 +14,9 @@ use Modules\Internal\Emails\SendVerifyEmail;
use Modules\Internal\Events\ForgetPassword;
use Illuminate\Support\Facades\Validator;
use Modules\HospitalPortal\Helpers\ApiResponse;
use Illuminate\Support\Facades\DB;
use App\Helpers\Helper;
use Illuminate\Support\Facades\View;
class AuthController extends Controller
{
@@ -27,9 +30,9 @@ class AuthController extends Controller
'email' => 'required|email',
'password' => 'required'
], [
'email.required' => trans('validation.required',['attribute' => 'Email']),
'email.email' => trans('validation.email'),
'password.required' => trans('validation.required',['attribute' => 'Password']),
'email.required' => trans('Validation.required',['attribute' => 'Email']),
'email.email' => trans('Validation.email'),
'password.required' => trans('Validation.required',['attribute' => 'Password']),
]);
if ($validator->fails())
@@ -40,11 +43,11 @@ class AuthController extends Controller
{
$user = User::where('email', $request->email)->first();
if (!$user) {
return ApiResponse::apiResponse('Not Found', $data, trans('message.not_found'), 404);
return ApiResponse::apiResponse('Not Found', $data, trans('Message.not_found'), 404);
}
if (!Hash::check($request->password, $user->password)) {
return ApiResponse::apiResponse('Bad Request', $data, trans('message.password'), 400);
return ApiResponse::apiResponse('Bad Request', $data, trans('Message.password'), 400);
}
$res_data = [
@@ -52,16 +55,15 @@ class AuthController extends Controller
'token' => $user->createToken('app')->plainTextToken
];
return ApiResponse::apiResponse("Success", $res_data, trans('message.success'), 200);
return ApiResponse::apiResponse("Success", $res_data, trans('Message.success'), 200);
}
}
public function logout(Request $request)
{
$token = $request->bearerToken();
Auth::user()->tokens()->where('id', $token)->delete();
$request->user()->tokens()->delete();
return response(['message' => 'Berhasil Logout.']);
return ApiResponse::apiResponse('Success', [], trans('Message.logout'), 200);
}
public function resetPassword(Request $request)
@@ -75,12 +77,12 @@ class AuthController extends Controller
]);
if (!Hash::check($request['old_password'], $user->password)) {
return response(['message' => 'Password Salah'], 403);
return response(['Message' => 'Password Salah'], 403);
}
if ($request["new_password"] != $request["confirm_new_password"]) {
return response([
'message' => "Password Tidak Sama"
'Message' => "Password Tidak Sama"
]);
}
@@ -92,52 +94,202 @@ class AuthController extends Controller
public function verifyEmail(Request $request)
{
$request->validate([
$data = [
'email' => $request->email,
];
$validator = Validator::make($request->all(), [
'email' => 'required|email',
], [
'email.required' => trans('Validation.required',['attribute' => 'Email']),
'email.email' => trans('Validation.email'),
]);
$user = User::query()
->where('email', $request->email)
if ($validator->fails())
{
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
}
else
{
$user = User::where('email', $request->email)->first();
if (!$user) {
return ApiResponse::apiResponse('Not Found', $data, trans('Message.not_found'), 404);
}
//send email
// Insert data notifications
$emailTo = $request->email;
$dataNotif = [
'user_id' => $user->id,
'email' => $emailTo,
'title' => 'Forgot Password',
'description' => 'Request forgot password from Hospital Portal',
'type' => 1,
'isUnRead' => true,
'created_by' => auth()->check() ? auth()->user()->id : null,
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
];
$sendNotif = Helper::insertNotification($dataNotif);
//Insert data password reset
$token = mt_rand(100000, 999999); // Menghasilkan angka acak antara 100000 dan 999999
$p_resets = DB::table('password_resets')
->insert([
'email' => $request->email,
'token' => $token,
'created_at' => date('Y-m-d H:i:s'),
]);
// Send Email after insert notifications
if($sendNotif && $p_resets)
{
//send to alarm
$nameTo = 'User';
$dataEmail = [
'email' => $emailTo,
'name' => $nameTo,
'subject' => 'Request Forgot Password from Hospital Portal Date '. date('Y-m-d H:i:s'),
'body' => View::make('email/forgot_password', ['token' => $token])->render(),
];
Helper::sendEmail($dataEmail);
$res = DB::table('password_resets')
->where('email', '=', $request->email)
->where('token', '=', $token)
->first();
return ApiResponse::apiResponse("Success", $res, trans('Message.success'), 200);
}
else
{
return ApiResponse::apiResponse("Internal Server Error", $data, trans('Message.server_error'), 500);
}
}
}
public function verifCode(Request $request)
{
$data = [
'email' => $request->email,
'token' => $request->token,
];
$validator = Validator::make($request->all(), [
'email' => 'required|email',
'token' => 'required|numeric',
], [
'email.required' => trans('Validation.required',['attribute' => 'Email']),
'email.email' => trans('Validation.email'),
'token.required' => trans('Validation.required',['attribute' => 'Token']),
'token.numeric' => trans('Validation.required',['attribute' => 'Code Numeric']),
]);
if ($validator->fails())
{
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
}
else
{
//Check Time
$check = DB::table('password_resets')
->where('email', '=', $request->email)
->where('token', '=', $request->token)
->select('created_at')
->first();
if (!$user) {
return response(['message' => 'User Tidak Ditemukan'], 404);
if($check)
{
$created_at = strtotime($check->created_at); // Konversi string waktu ke UNIX timestamp
$now = time(); // Waktu sekarang dalam UNIX timestamp
// Hitung selisih waktu dalam menit
$diffInMinutes = ($now - $created_at) / 60;
if ($diffInMinutes > 60) {
return ApiResponse::apiResponse('Not Found', $data, trans('Message.token_expired'), 404);
} else {
// Lanjutkan dengan proses pemulihan kata sandi
return ApiResponse::apiResponse("Success", $data, trans('Message.success'), 200);
}
}
else
{
return ApiResponse::apiResponse('Not Found', $data, trans('Message.not_found'), 404);
}
}
Event(new ForgetPassword($user));
// Mail::to($user->email)->send(new SendVerifyEmail($user));
return response()->json($user);
}
public function forgetPassword(Request $request)
{
$request->validate([
'new_password' => 'required',
'confirm_new_password' => 'required'
$data = [
'email' => $request->email,
'token' => $request->token,
'new_password' => $request->new_password
];
$validator = Validator::make($request->all(), [
'email' => 'required|email',
'token' => 'required|numeric',
'new_password' => [
'required',
'min:8',
'regex:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/'
]
], [
'email.required' => trans('Validation.required',['attribute' => 'Email']),
'email.email' => trans('Validation.email'),
'token.required' => trans('Validation.required',['attribute' => 'Token']),
'new_password.required' => trans('Validation.required',['attribute' => 'New Password']),
'new_password.min' => trans('Validation.min',['attribute' => 'New Password']),
'new_password.regex' => trans('Validation.regex',['attribute' => 'New Password']),
]);
$token = Crypt::decryptString($request->token);
$email = explode('|', $token)[0];
$user = User::query()
->where('email', $email)
if($request->new_password != $request->confirm_new_password)
{
return ApiResponse::apiResponse('Bad Request', $data, 'Confirm password is not the same', 400);
}
else if ($validator->fails())
{
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
}
else
{
//Check Time
$check = DB::table('password_resets')
->where('email', '=', $request->email)
->where('token', '=', $request->token)
->select('created_at')
->first();
if (!$user) {
return response(['message' => 'User Tidak Ditemukan'], 404);
}
if($check)
{
$created_at = strtotime($check->created_at); // Konversi string waktu ke UNIX timestamp
$now = time(); // Waktu sekarang dalam UNIX timestamp
if ($request["new_password"] != $request["confirm_new_password"]) {
return response([
'message' => "Password Tidak Sama"
], 404);
}
// Hitung selisih waktu dalam menit
$diffInMinutes = ($now - $created_at) / 60;
$user->update([
'password' => Hash::make($request->confirm_new_password),
]);
return response()->json($user);
if ($diffInMinutes > 60) {
return ApiResponse::apiResponse('Not Found', $data, trans('Message.token_expired'), 404);
} else {
// Lanjutkan dengan proses pemulihan kata sandi
$user = User::where('email', $request->email)->first();
if ($user)
{
$newPassword = Hash::make($request->new_password);
$user->password = $newPassword;
$user->save();
return ApiResponse::apiResponse("Success", $data, trans('Message.success'), 200);
}
else
{
return ApiResponse::apiResponse('Not Found', $data, trans('Message.token_expired'), 404);
}
}
}
else
{
return ApiResponse::apiResponse('Not Found', $data, trans('Message.not_found'), 404);
}
}
}
}

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([
@@ -125,13 +133,25 @@ 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([
$fileData = 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' => $fileData['name'],
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => $pathFile,
'source' => env('FILESYSTEM_DISK'),
'path' => $fileData['path'],
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
@@ -228,21 +248,35 @@ 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);
}
public function get_claim_requests(Request $request)
@@ -411,15 +445,16 @@ class ClaimRequestController extends Controller
if ($request->hasFile('fileDiagnosis')) {
foreach ($request->fileDiagnosis as $file) {
$pathFile = File::storeFile('claim-diagnosis', $claim_id, $file);
$fileData = File::storeFile('claim-diagnosis', $claim_id, $file);
File::updateOrCreate([
'fileable_type'=>'App\Models\ClaimRequest',
'fileable_id' => $claim_id,
'type' => 'claim-diagnosis',
'name' => File::getFileName('claim-diagnosis', $claim_id, $file),
'name' => $fileData['name'],
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => $pathFile,
'source' => env('FILESYSTEM_DISK'),
'path' => $fileData['path'],
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
@@ -428,12 +463,12 @@ class ClaimRequestController extends Controller
if ($request->hasFile('fileKondisis')) {
foreach ($request->fileKondisis as $file) {
$pathFile = File::storeFile('claim-kondisi', $claim_id, $file);
$fileData = File::storeFile('claim-kondisi', $claim_id, $file);
File::updateOrCreate([
'fileable_type'=>'App\Models\ClaimRequest',
'fileable_id' => $claim_id,
'type' => 'claim-kondisi',
'name' => File::getFileName('claim-kondisi', $claim_id, $file),
'name' => $fileData['name'],
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => $pathFile,
@@ -445,15 +480,16 @@ class ClaimRequestController extends Controller
if ($request->hasFile('fileResults')) {
foreach ($request->fileResults as $file) {
$pathFile = File::storeFile('claim-result', $claim_id, $file);
$fileData = File::storeFile('claim-result', $claim_id, $file);
File::updateOrCreate([
'fileable_type'=>'App\Models\ClaimRequest',
'fileable_id' => $claim_id,
'type' => 'claim-result',
'name' => File::getFileName('claim-result', $claim_id, $file),
'name' => $fileData['name'],
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => $pathFile,
'source' => env('FILESYSTEM_DISK'),
'path' => $fileData['path'],
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);

View File

@@ -10,6 +10,9 @@ use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Validator;
use Modules\HospitalPortal\Helpers\ApiResponse;
use Illuminate\Support\Facades\DB;
use App\Models\CorporateBenefit;
use App\Models\MemberPlan;
use App\Models\Plan;
class MemberController extends Controller
{
@@ -44,12 +47,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',
@@ -100,6 +103,10 @@ class MemberController extends Controller
// Provider
$providers = DB::table('organizations')
->where('organizations.type', '=', 'hospital')
->where('organizations.corporate_id_partner', '!=', 8)
->orWhere('organizations.corporate_id_partner', NULL)
->where('status', '=', 'active')
->orderBy('organizations.name','asc')
->select(
'organizations.id',
'organizations.name'
@@ -108,14 +115,115 @@ class MemberController extends Controller
$res_data['providers'] = $providers;
//company
$companies = DB::table('corporates')
->where('corporates.active', '=', 1)
->select(
'corporates.id',
'corporates.name'
)
->get();
$res_data['companies'] = $companies;
//company
$companies = DB::table('corporates')
->where('corporates.active', '=', 1)
->select(
'corporates.id',
'corporates.name'
)
->get();
$res_data['companies'] = $companies;
$corporateEmployee = DB::table('corporate_employees')
->leftJoin('corporates', 'corporates.id', '=', 'corporate_employees.corporate_id')
->leftJoin('corporate_policies', 'corporate_policies.corporate_id', '=', 'corporates.id')
// ->where('corporate_employees.status', 'ACTIVE')
->where('corporates.active', 1)
->where('corporate_policies.active', 1)
->where('corporate_employees.member_id', $members->id)
->select(
'corporate_policies.total_premi',
'corporate_employees.corporate_id'
)
->first();
$res_data['total_premi'] = $corporateEmployee ?? 0;
$limitRules = DB::table('member_plans')
->leftJoin('plans', 'plans.id', '=', 'member_plans.plan_id')
->where('member_plans.member_id', $members->id)
->where('member_plans.status', 'active')
->where('plans.active', 1)
->value('plans.limit_rules');
$res_data['limit_rules'] = $limitRules ?? 0;
$planMember = MemberPlan::where('member_id', $members->id)->get('plan_id');
$planId = Plan::whereIn('id', $planMember)->where('service_code', 'OP')->first();
$benefit = CorporateBenefit::with(['benefit', 'plan'])->where('plan_id', $planId->id)->get()->toArray();
$benefitData = [];
if (count($benefit)){
foreach($benefit as $data){
$data['benefit']['plan_id'] = $data['plan_id'];
$data['benefit']['limit_amount'] = $data['limit_amount'];
$data['benefit']['family_plan'] = $planId->family_plan;
$data['benefit']['max_frequency_period'] = $data['max_frequency_period'];
$data['benefit']['limit_amount_plan'] = $data['plan']['limit_rules'];
$data['benefit']['family_plan_plans'] = $data['plan']['family_plan'];
array_push($benefitData, $data['benefit']);
}
}
$memberUsage = Helper::getUsageMember($corporateEmployee->corporate_id, $members->id, $benefitData);;
$res_data['used_limit'] = json_decode($memberUsage);
$usedLimit = json_decode($memberUsage, true); // jadi array
$totalUsed = 0;
if (is_array($usedLimit)) {
foreach ($usedLimit as $value) {
$totalUsed += (int) $value;
}
}
$limitRules = (int) $limitRules;
// hitung sisa
$remainingLimit = $limitRules - $totalUsed;
// biar gak minus
if ($remainingLimit < 0) {
$remainingLimit = 0;
}
// set ke response
$res_data['remaining_limit'] = $remainingLimit;
$res_data['total_used_limit'] = $totalUsed;
// 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);
}
}
}
}

View File

View File

@@ -13,6 +13,11 @@ use App\Models\File;
use Dompdf\Dompdf;
use Dompdf\Options;
use Illuminate\Support\Facades\View;
use App\Models\Member;
use App\Models\RequestLog;
use App\Models\Organization;
use App\Services\ClaimRequestService;
use App\Models\ClaimRequest;
class RequestLogController extends Controller
{
@@ -20,32 +25,49 @@ class RequestLogController extends Controller
* Display a listing of the resource.
* @return Renderable
*/
private static $code_prefix = 'CLAIM';
public function requestLog(Request $request)
{
$data = [
'member_id' => $request->member_id,
'service_code' => $request->service_code,
'organization_id' => $request->organization_id,
'organization_name' => $request->organization_name,
'address_provider' => $request->address_provider
'organization_name' => !empty($request->organization_name) ? $request->organization_name : null,
'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',
'service_code' => 'required'
'service_code' => 'required',
'submission_date' => 'required',
'specialities_id' => 'required',
'dppj' => 'required',
], [
'member_id.required' => trans('Validation.required',['attribute' => 'Member ID']),
'service_code.required' => trans('Validation.required',['attribute' => 'Service Code']),
'submission_date.required' => trans('Validation.required',['attribute' => 'Submission Date']),
'specialities_id.required' => trans('Validation.required',['attribute' => 'Specialities']),
'dppj.required' => trans('Validation.required',['attribute' => 'DPJP']),
]);
if($request->organization_id)
if(!empty($request->organization_id))
{
$validator = Validator::make($request->all(), [
'organization_id' => 'required',
'member_id' => 'required',
'service_code' => 'required'
'service_code' => 'required',
'submission_date' => 'required',
'specialities_id' => 'required',
'dppj' => 'required',
], [
'organization_id.required' => trans('Validation.required',['attribute' => 'Provider ID']),
'member_id.required' => trans('Validation.required',['attribute' => 'Member ID']),
'service_code.required' => trans('Validation.required',['attribute' => 'Service Code']),
'submission_date.required' => trans('Validation.required',['attribute' => 'Submission Date']),
'specialities_id.required' => trans('Validation.required',['attribute' => 'Specialities']),
'dppj.required' => trans('Validation.required',['attribute' => 'DPJP']),
]);
}
if ($validator->fails())
@@ -56,7 +78,7 @@ class RequestLogController extends Controller
{
//insert data to organization
try {
if(!$request->organization_id)
if (!empty($request->organization_name) && !empty($request->address_provider))
{
// Memulai transaksi
DB::beginTransaction();
@@ -66,7 +88,7 @@ class RequestLogController extends Controller
$words = explode(' ', $request->organization_name);
foreach ($words as $word) {
$singkatan .= strtoupper(substr($word, 0, 1));
$singkatan .= strtoupper(substr($word, 0, 2));
}
// Membuat kode organisasi
@@ -78,6 +100,7 @@ class RequestLogController extends Controller
'name' => $request->organization_name,
'code' => $kodeOrganisasi,
'type' => 'hospital',
'corporate_id_partner' => $request->corporate_id_partner ? implode(',', $request->corporate_id_partner) : null,
'created_at' => now(),
'created_by' => auth()->user()->id
]);
@@ -104,49 +127,54 @@ class RequestLogController extends Controller
}
$requestLogControllerInstance = new PrimeCenterRequestLog();
$response = $requestLogControllerInstance->createNew($request);
try {
$response = $requestLogControllerInstance->createNew($request);
if($response->original['statusCode'] == 200)
{
//send email
// Insert data notifications
$emailTo = 'alarm.center@linksehat.com';
$dataNotif = [
'email' => $emailTo,
'title' => 'Request LOG',
'description' => 'Request LOG from Hospital Portal',
'type' => 1,
'isUnRead' => true,
'created_by' => auth()->user()->id,
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
];
$sendNotif = Helper::insertNotification($dataNotif);
// Send Email after insert notifications
if($sendNotif)
if($response->original['statusCode'] == 200)
{
//send to alarm
$nameTo = 'Admin LinkSehat';
$dataEmail = [
//send email
// Insert data notifications
$emailTo = 'alarm.center@linksehat.com';
$dataNotif = [
'email' => $emailTo,
'name' => $nameTo,
'subject' => 'Request LOG from Hospital Portal'. ' '.date('Y-m-d H:i:s'),
'body' => View::make('email/notif_email', ['name' => $nameTo, 'link' => 'https://primecenter.linksehat.com/'])->render(),
'title' => 'Request LOG',
'description' => 'Request LOG from Hospital Portal',
'type' => 1,
'isUnRead' => true,
'created_by' => auth()->user()->id,
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
];
Helper::sendEmail($dataEmail);
$sendNotif = Helper::insertNotification($dataNotif);
// Send Email after insert notifications
if($sendNotif)
{
//send to alarm
$nameTo = 'Admin LinkSehat';
$dataEmail = [
'email' => $emailTo,
'name' => $nameTo,
'subject' => 'Request LOG from Hospital Portal'. ' '.date('Y-m-d H:i:s'),
'body' => View::make('email/notif_email', ['name' => $nameTo, 'link' => 'https://primecenter.linksehat.com/'])->render(),
];
Helper::sendEmail($dataEmail);
}
return ApiResponse::apiResponse("Success", $data, trans('Message.success'), 200);
}
return ApiResponse::apiResponse("Success", $data, trans('Message.success'), 200);
}
else
{
return ApiResponse::apiResponse('Server Error', $data, trans('Message.server_error'), 500);
else
{
return ApiResponse::apiResponse('Server Error 1', $data, trans('Message.server_error'), 500);
}
} catch (\Exception $e) {
// Tangani kesalahan di sini
return ApiResponse::apiResponse('Server Error 2', $data, $e->getMessage(), 500);
}
} catch (\Exception $e) {
// Rollback transaksi jika terjadi kesalahan
DB::rollBack();
// Handle error, bisa di-log atau dikembalikan sebagai response
return ApiResponse::apiResponse('Server Error', $data, $e->getMessage(), 500);
return ApiResponse::apiResponse('Server Error 3', $data, $e->getMessage(), 500);
}
}
}
@@ -158,6 +186,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 . "%")
@@ -205,6 +234,10 @@ class RequestLogController extends Controller
'members.name as full_name',
'members.member_id as no_polis',
'members.birth_date',
'request_logs.service_code',
'request_logs.specialities_id',
'request_logs.dppj',
'request_logs.log_type',
DB::raw('
CASE
WHEN request_logs.status = "requested" THEN "requested"
@@ -217,8 +250,11 @@ class RequestLogController extends Controller
DB::raw('
(SELECT organizations.name FROM organizations WHERE organizations.id = request_logs.organization_id LIMIT 1) AS provider
'),
'request_logs.submission_date')
'request_logs.submission_date',
'request_logs.approved_at')
->paginate($limit);
return response()->json(Helper::paginateResources($results));
}
@@ -229,12 +265,14 @@ 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 . "%")
->orWhere('members.name', 'like', "%" . $search . "%")
->orWhere('request_logs.submission_date', 'like', "%" . $search . "%")
->orWhere('request_logs.service_code', 'like', "%" . ($search == 'outpatient' || $search == 'Outpatient' ? 'OP' : 'IP') . "%");
->orWhere('request_logs.discharge_date', 'like', "%" . $search . "%")
->orWhereRaw('(SELECT services.name FROM services WHERE services.code = request_logs.service_code LIMIT 1) LIKE ?', ["%" . $search . "%"]);
});
})
->when($request->has('orderBy'), function ($query) use ($request) {
@@ -279,6 +317,7 @@ class RequestLogController extends Controller
'members.id AS member_id',
'request_logs.service_code',
'members.birth_date',
'request_logs.log_type',
DB::raw('
CASE
WHEN request_logs.status_final_log = "requested" THEN "requested"
@@ -289,12 +328,10 @@ class RequestLogController extends Controller
END AS status
'),
'request_logs.submission_date',
'request_logs.approved_final_log_at',
'request_logs.discharge_date',
DB::raw('
CASE
WHEN service_code = "OP" THEN "Outpatient"
WHEN service_code = "IP" THEN "Inpatient"
ELSE ""
END AS service_type
(SELECT services.name FROM services WHERE services.code = request_logs.service_code LIMIT 1) AS service_type
'),
DB::raw('
(SELECT organizations.name FROM organizations WHERE organizations.id = request_logs.organization_id LIMIT 1) AS provider
@@ -309,13 +346,25 @@ class RequestLogController extends Controller
public function requestFinalLog(Request $request)
{
Helper::setCustomPHPIniSettings();
$data = [
'request_logs_id' => $request->request_logs_id
'request_logs_id' => $request->request_logs_id,
'discharge_date' => $request->discharge_date,
];
$validator = Validator::make($request->all(), [
'request_logs_id' => 'required'
'request_logs_id' => 'required',
'discharge_date' => 'required',
'service_code' => 'required',
'result_files.*' => 'sometimes|file|max:10000',
'diagnosa_files.*' => 'sometimes|file|max:10000',
'kondisi_files.*' => 'sometimes|file|max:10000',
], [
'request_logs_id.required' => trans('Validation.required',['attribute' => 'Request Logs ID'])
'request_logs_id.required' => trans('Validation.required',['attribute' => 'Request Logs ID']),
'discharge_date.required' => trans('Validation.required',['attribute' => 'Discharge Date']),
'service_code.required' => trans('Validation.required',['attribute' => 'Service Code']),
'result_files.*.max' => trans('Validation.max.file', ['attribute' => 'Result Files', 'max' => '10 MB' ]),
'diagnosa_files.*.max' => trans('Validation.max.file', ['attribute' => 'Diagnosis Files', 'max' => '10 MB' ]),
'kondisi_files.*.max' => trans('Validation.max.file', ['attribute' => 'Condition Files', 'max' => '10 MB' ]),
]);
if ($validator->fails())
{
@@ -328,20 +377,27 @@ class RequestLogController extends Controller
DB::table('request_logs')
->where('request_logs.id', '=', $request->request_logs_id)
->update([
'status_final_log' => 'requested',
'final_log' => 1
'status_final_log' => $request->edit ? null : 'requested',
'final_log' => $request->edit ? 0 : 1,
'service_code' =>$request->service_code,
'discharge_date' => $request->discharge_date,
'dppj' => $request->dppj,
'specialities_id' => $request->spescialis_id,
'created_final_by'=> $request->edit ? null : auth()->user()->id,
'created_final_at'=> $request->edit ? null : date('Y-m-d H:i:s'),
]);
if ($request->hasFile('result_files')) {
foreach ($request->result_files as $file) {
$pathFile = File::storeFile('final-log-result', $request->request_logs_id, $file);
$fileData = File::storeFile('final-log-result', $request->request_logs_id, $file);
File::updateOrCreate([
'fileable_type' => 'App\Models\RequestLog',
'fileable_id' => $request->request_logs_id,
'type' => 'final-log-result',
'name' => File::getFileName('final-log-result', $request->request_logs_id, $file),
'name' => $fileData['name'],
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => $pathFile,
'source' => env('FILESYSTEM_DISK'),
'path' => $fileData['path'],
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
@@ -349,15 +405,16 @@ class RequestLogController extends Controller
}
if ($request->hasFile('diagnosa_files')) {
foreach ($request->diagnosa_files as $file) {
$pathFile = File::storeFile('final-log-diagnosis', $request->request_logs_id, $file);
$fileData = File::storeFile('final-log-diagnosis', $request->request_logs_id, $file);
File::updateOrCreate([
'fileable_type' => 'App\Models\RequestLog',
'fileable_id' => $request->request_logs_id,
'type' => 'final-log-diagnosis',
'name' => File::getFileName('final-log-diagnosis', $request->request_logs_id, $file),
'name' => $fileData['name'],
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => $pathFile,
'source' => env('FILESYSTEM_DISK'),
'path' => $fileData['path'],
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
@@ -365,7 +422,7 @@ class RequestLogController extends Controller
}
if ($request->hasFile('kondisi_files')) {
foreach ($request->kondisi_files as $file) {
$pathFile = File::storeFile('final-log-kondisi', $request->request_logs_id, $file);
$fileData = File::storeFile('final-log-kondisi', $request->request_logs_id, $file);
File::updateOrCreate([
'fileable_type' => 'App\Models\RequestLog',
'fileable_id' => $request->request_logs_id,
@@ -373,7 +430,8 @@ class RequestLogController extends Controller
'name' => File::getFileName('final-log-kondisi', $request->request_logs_id, $file),
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => $pathFile,
'source' => env('FILESYSTEM_DISK'),
'path' => $fileData['path'],
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
@@ -432,12 +490,13 @@ class RequestLogController extends Controller
'members.birth_date',
'members.member_id',
'members.gender',
'corporate_employees.branch_code',
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
@@ -479,6 +538,7 @@ class RequestLogController extends Controller
'members.members_effective_date AS mulai',
'members.members_expire_date AS akhir'
)
->leftJoin('corporate_employees', 'corporate_employees.member_id', '=', 'members.id')
->first();
$data['namaKaryawan'] = '';
if($dataMember->principal_id)
@@ -501,11 +561,23 @@ class RequestLogController extends Controller
->leftJoin('addresses', 'addresses.addressable_id', '=', 'organizations.id')
->where('organizations.id', '=', $dataRequestLog->organization_id)
->where('addresses.addressable_type', '=', 'App\Models\Organization')
->select('organizations.name AS nama_rumahsakit', 'addresses.text AS alamat_rumahsakit')
->select('organizations.name AS nama_rumahsakit', 'addresses.text AS alamat_rumahsakit', 'organizations.corporate_id_partner')
->first();
$data['rumahSakit'] = $dataRumahSakit;
//get penjamin
$data['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)) {
$data['penjamin'] = $dataMember->nama_perusahaan;
}
}
$logoPerusahaan = DB::table('files')
->leftJoin('corporate_employees', 'corporate_employees.corporate_id', '=', 'files.fileable_id')
->leftJoin('corporates', 'corporate_employees.corporate_id', '=', 'corporates.id')
@@ -545,6 +617,49 @@ class RequestLogController extends Controller
$data['signatureAd'] = $signatureAd;
$namaPenjaminTtd = $dataMember->nama_perusahaan;
$isVale = ($logoPerusahaan->code ?? null) === "VALEIND";
$ttdNama = '';
$ttdJabatan = '';
$ttdImage = null;
if ($isVale) {
if (trim($data['penjamin']) === 'LinkSehat') {
$ttdNama = 'Fariz Ariyadi';
$ttdJabatan = 'Chief Executive Officer';
$ttdImage = public_path('images/ttd_fariz.png');
$namaPenjaminTtd = 'PT Link Medis Sehat';
} else {
if ($dataRequestLog->submission_date <= '2025-05-12') {
$ttdNama = 'Dr. Hery Hermas, M.Kes';
$ttdImage = public_path('images/ttd_dr_vale.png');
} else {
$ttdNama = 'dr. Irmawati Baso, S. Ked., MM';
$ttdImage = public_path('images/ttd_dr_irma_2.png');
}
$ttdJabatan = 'Offsite Medical Treatment';
}
} else {
$ttdNama = 'Fariz Ariyadi';
$ttdJabatan = 'Chief Executive Officer';
$ttdImage = public_path('images/ttd_fariz.png');
}
$data['ttdNama'] = $ttdNama;
$data['ttdJabatan'] = $ttdJabatan;
$data['ttdImage'] = $ttdImage;
if (!$isVale) {
$namaPenjaminTtd = 'Primayan Medicare';
}
$data['namaPenjaminTtd'] = $namaPenjaminTtd;
if (!$isVale) {
$data['penjamin'] = 'Primayan Medicare';
}
$pdf = new Dompdf();
$options = new Options();
@@ -555,25 +670,47 @@ class RequestLogController extends Controller
$pdf->setPaper('A4', 'portrait');
// Halaman 1
$html1 = view('pdf.req_log_page_1', $data);
if (!$isVale) {
// Halaman 1
$html1 = view('pdf.req_log_page_1_primayan', $data);
// Halaman 2
// $html2 = view('pdf.req_log_page_2', $data);
// Halaman 2
// $html2 = view('pdf.req_log_page_2', $data);
// Gabung konten HTML dari dua tampilan
// $htmlCombined = $html1 . $html2;
$htmlCombined = $html1;
// Gabung konten HTML dari dua tampilan
// $htmlCombined = $html1 . $html2;
$htmlCombined = $html1;
$pdf->loadHtml($htmlCombined);
$pdf->render();
$pdf->loadHtml($htmlCombined);
$pdf->render();
$headers = [
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'inline; filename="file.pdf"',
];
$headers = [
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'inline; filename="file.pdf"',
];
return response($pdf->output(), 200, $headers);
return response($pdf->output(), 200, $headers);
} else {
// 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;
$htmlCombined = $html1;
$pdf->loadHtml($htmlCombined);
$pdf->render();
$headers = [
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'inline; filename="file.pdf"',
];
return response($pdf->output(), 200, $headers);
}
}
public function downlodFinalLog($request_log_id)
@@ -592,12 +729,13 @@ class RequestLogController extends Controller
'members.birth_date',
'members.member_id',
'members.gender',
'corporate_employees.branch_code',
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
@@ -639,6 +777,7 @@ class RequestLogController extends Controller
'members.members_effective_date AS mulai',
'members.members_expire_date AS akhir'
)
->leftJoin('corporate_employees', 'corporate_employees.member_id', '=', 'members.id')
->first();
$data['namaKaryawan'] = '';
if($dataMember->principal_id)
@@ -648,7 +787,11 @@ class RequestLogController extends Controller
->select('members.name')
->limit(1)
->first();
$data['namaKaryawan'] = $dataNamaKaryawan->name;
if ($dataNamaKaryawan){
$data['namaKaryawan'] = $dataNamaKaryawan->name;
} else {
$data['namaKaryawan'] = $dataMember->name;
}
}
else{
$data['namaKaryawan'] = $dataMember->name;
@@ -660,6 +803,7 @@ class RequestLogController extends Controller
$dataClaimLog = DB::table('request_log_benefits')
->where('request_log_benefits.request_log_id', '=', $request_log_id)
->where('request_log_benefits.deleted_at', null)
->select(
'*',
DB::raw('
@@ -680,11 +824,23 @@ class RequestLogController extends Controller
->leftJoin('addresses', 'addresses.addressable_id', '=', 'organizations.id')
->where('organizations.id', '=', $dataRequestLog->organization_id)
->where('addresses.addressable_type', '=', 'App\Models\Organization')
->select('organizations.name AS nama_rumahsakit', 'addresses.text AS alamat_rumahsakit')
->select('organizations.name AS nama_rumahsakit', 'addresses.text AS alamat_rumahsakit', 'organizations.corporate_id_partner')
->first();
$data['rumahSakit'] = $dataRumahSakit;
//get penjamin
$data['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)) {
$data['penjamin'] = $dataMember->nama_perusahaan;
}
}
$logoPerusahaan = DB::table('files')
->leftJoin('corporate_employees', 'corporate_employees.corporate_id', '=', 'files.fileable_id')
->leftJoin('corporates', 'corporate_employees.corporate_id', '=', 'corporates.id')
@@ -711,19 +867,82 @@ class RequestLogController extends Controller
->leftJoin('files', 'files.fileable_id', '=', 'signatures.id')
->where('files.fileable_type', '=', 'App\Models\Signature')
->where('signatures.type', '=', 2)
->where('signatures.user_id', '=', $dataRequestLog->approved_by)
->where('signatures.user_id', '=', $dataRequestLog->approved_final_log_by)
->select(
'files.path',
DB::raw('
(Select persons.name FROM users
LEFT JOIN persons ON users.person_id = persons.id
WHERE users.id = "'.$dataRequestLog->approved_by.'" LIMIT 1) AS name_approve
WHERE users.id = "'.$dataRequestLog->approved_final_log_by.'" LIMIT 1) AS name_approve
')
)
->first();
$data['signatureAd'] = $signatureAd;
$namaPenjaminTtd = $dataMember->nama_perusahaan;
$isVale = ($logoPerusahaan->code ?? null) === "VALEIND";
$ttdNama = '';
$ttdJabatan = '';
$ttdImage = null;
if ($isVale) {
if (trim($data['penjamin']) === 'LinkSehat') {
$ttdNama = 'Fariz Ariyadi';
$ttdJabatan = 'Chief Executive Officer';
$ttdImage = public_path('images/ttd_fariz.png');
$namaPenjaminTtd = 'PT Link Medis Sehat';
} else {
if ($dataRequestLog->submission_date <= '2025-05-12') {
$ttdNama = 'Dr. Hery Hermas, M.Kes';
$ttdImage = public_path('images/ttd_dr_vale.png');
} else {
$ttdNama = 'dr. Irmawati Baso, S. Ked., MM';
$ttdImage = public_path('images/ttd_dr_irma_2.png');
}
$ttdJabatan = 'Offsite Medical Treatment';
}
} else {
$ttdNama = 'Fariz Ariyadi';
$ttdJabatan = 'Chief Executive Officer';
$ttdImage = public_path('images/ttd_fariz.png');
}
$data['ttdNama'] = $ttdNama;
$data['ttdJabatan'] = $ttdJabatan;
$data['ttdImage'] = $ttdImage;
if (!$isVale) {
$namaPenjaminTtd = 'Primayan Medicare';
}
$data['namaPenjaminTtd'] = $namaPenjaminTtd;
if (!$isVale) {
$data['penjamin'] = 'Primayan Medicare';
}
$dataDiagnosis = [];
if($dataRequestLog->diagnosis)
{
$dataDiagnosiCodes = explode(',', $dataRequestLog->diagnosis);
foreach ($dataDiagnosiCodes as $diagnosisCode)
{
$diagnoisis = DB::table('icd')
->where('icd.code', '=', $diagnosisCode)
->select('icd.name', 'icd.code')
->first();
array_push($dataDiagnosis, $diagnoisis);
}
}
$data['dataDiagnosis'] = $dataDiagnosis;
if (($logoPerusahaan->code ?? null) !== "VALEIND") {
$data['penjamin'] = 'Primayan Medicare';
}
$pdf = new Dompdf();
$options = new Options();
@@ -732,23 +951,150 @@ class RequestLogController extends Controller
$options->set(['isRemoteEnabled' => true]);
$pdf->setOptions($options);
// Halaman 1
$html1 = view('pdf.final_log_page_1', $data);
if (!$isVale) {
// Halaman 1
$html1 = view('pdf.final_log_page_1_primayan', $data);
// Halaman 2
$html2 = view('pdf.final_log_page_2', $data);
// Halaman 2
$html2 = view('pdf.final_log_page_2_primayan', $data);
// Gabung konten HTML dari dua tampilan
$htmlCombined = $html1 . $html2;
// Gabung konten HTML dari dua tampilan
$htmlCombined = $html1 . $html2;
$pdf->loadHtml($htmlCombined);
$pdf->render();
$pdf->loadHtml($htmlCombined);
$pdf->render();
$headers = [
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'inline; filename="file.pdf"',
$headers = [
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'inline; filename="file.pdf"',
];
return response($pdf->output(), 200, $headers);
} else {
// Halaman 1
$html1 = view('pdf.final_log_page_1', $data);
// Halaman 2
$html2 = view('pdf.final_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);
}
}
public function submitClaims(Request $request)
{
$data = [
'selectedRows' => $request->selectedRows,
];
$validator = Validator::make($request->all(), [
'selectedRows' => 'required'
], [
'selectedRows.required' => trans('Validation.required',['attribute' => 'Request Logs ID']),
]);
if ($validator->fails())
{
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
}
else
{
foreach ($request->selectedRows as $request_logs_id) {
$data_req_logs = DB::table('request_logs')
->where('id', '=', $request_logs_id)
->select('id', 'member_id', 'service_code')
->first();
return response($pdf->output(), 200, $headers);
$check_claim_requests = DB::table('claim_requests')
->where('claim_requests.request_log_id', '=', $request_logs_id)
->first();
if(!$check_claim_requests) {
try {
DB::beginTransaction();
$code = $this->getNextCode($request_logs_id);
$member = Member::find($data_req_logs->member_id);
$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',
serviceCode: $data_req_logs->service_code,
requestLogID: $request_logs_id,
organization_code: $provideCode,
);
// Log History
$newClaimRequest->histories()->create([
'title' => 'New Claim Requested',
'description' => "Claim Requested for Member : {$member->member_id} - ({$member->full_name})",
'type' => 'info',
'system_origin' => 'hospital-portal'
]);
// Claim Log
DB::table('claim_logs')
->insert([
'claim_request_id' => $newClaimRequest->id,
'status' => 'requested',
'date' => date('Y-m-d H:i:s'),
'description' => "Claim Requested for Member : {$member->member_id} - ({$member->full_name})",
'system_origin' => 'hospital-portal',
'created_by' => auth()->user()->id,
'created_at' => date('Y-m-d H:i:s'),
'updated_at'=> date('Y-m-d H:i:s'),
]);
DB::commit();
} catch (\Exception $e) {
DB::rollback();
return ApiResponse::apiResponse("Error", $data, $e->getMessage(), 500);
}
}
}
return ApiResponse::apiResponse('Success', $data, trans('Message.success'), 200);
}
}
public static function getNextCode($request_log_id = 0)
{
$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, $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 . $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);
}
}

View File

@@ -0,0 +1,721 @@
<?php
namespace Modules\HospitalPortal\Http\Controllers;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use App\Helpers\Helper;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use Modules\HospitalPortal\Helpers\ApiResponse;
use Modules\HospitalPortal\Helpers\GrabHelper;
use Ramsey\Uuid\Uuid;
use Ramsey\Uuid\Exception\UnsatisfiedDependencyException;
class ApotekController extends Controller
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index(Request $request)
{
$limit = $request->has('per_page') ? $request->input('per_page') : 10;
$results = DB::connection('oldlms')->table('tx_prescriptions')
->join('tx_prescription_orders', 'tx_prescription_orders.nIDPrescription', '=', 'tx_prescriptions.nID')
->join('tm_users', 'tm_users.nID', '=', 'tx_prescriptions.nIDUser')
->when(auth()->user()->organization_id, function ($query, $organizationId) {
$query->where('tx_prescription_orders.nIDApotek', '=', $organizationId);
})
->when($request->input('search'), function ($query, $search) {
$query->where(function ($query) use ($search) {
$query->orWhere('tx_prescriptions.sKodeResep', 'like', "%" . $search . "%")
->orWhere('tm_users.sFirstName', 'like', "%" . $search . "%");
});
})
->when($request->has('orderBy'), function ($query) use ($request) {
$orderBy = $request->orderBy;
$direction = $request->order ?? 'asc';
if($orderBy == 'apotek')
{
$orderBy = 'nIDApotek';
}
$query->orderBy($orderBy, $direction);
})
->when($request->input('start_date') && !$request->input('end_date'), function ($query, $start_date) {
$query->where(function ($query) use ($start_date) {
$query->where('tx_prescriptions.dTanggalresep', '<', $start_date);
});
})
->when($request->input('status'), function ($query, $status) {
// Apply the filter if 'status' has a value
if ($status !== 'all') {
$query->where(function ($query) use ($status) {
$query->where('tx_prescription_orders.sStatus', '=', $status);
});
}
})
->select(
'tx_prescriptions.nID as id',
'tx_prescription_orders.nID as nID_orders',
'tx_prescriptions.nIDUser',
'tx_prescriptions.sKodeResep as no_resep',
'tx_prescriptions.dTanggalResep as tanggal',
'tx_prescription_orders.nIDApotek',
'tx_prescription_orders.sStatus as status',
'tx_prescription_orders.sStatus',
DB::raw('
CASE
WHEN TIMESTAMPDIFF(HOUR, tx_prescriptions.dTanggalResep, NOW()) > 72 THEN ""
WHEN TIMESTAMPDIFF(HOUR, tx_prescriptions.dTanggalResep, NOW()) > 1 AND tx_prescription_orders.sStatus = "waiting_pharmacy" THEN "1"
WHEN TIMESTAMPDIFF(HOUR, tx_prescriptions.dTanggalResep, NOW()) > 2 AND tx_prescription_orders.sStatus = "order_prepared" THEN "2"
WHEN TIMESTAMPDIFF(HOUR, tx_prescriptions.dTanggalResep, NOW()) > 3 AND tx_prescription_orders.sStatus = "ready" THEN "3"
ELSE ""
END AS alert
'),
DB::raw('
CASE
WHEN tx_prescription_orders.sStatus = "waiting_pharmacy" THEN "Diterima"
WHEN tx_prescription_orders.sStatus = "order_prepared" THEN "Siap Diambil"
WHEN tx_prescription_orders.sStatus = "ready" THEN "Cari Kurir"
WHEN tx_prescription_orders.sStatus = "failed" THEN "Cari Kurir"
WHEN tx_prescription_orders.sStatus = "waiting_for_courir" THEN "Pesanan Diambil"
WHEN tx_prescription_orders.sStatus = "package_picked_up" THEN "Sedang Diantar"
WHEN tx_prescription_orders.sStatus = "package_on_delivery" THEN "Selesai"
ELSE ""
END AS button_accept'),
DB::raw('CONCAT(
COALESCE(tm_users.sFirstName, ""),
" ",
COALESCE(tm_users.sMiddleName, ""),
" ",
COALESCE(tm_users.sLastName, "")
) as pasien'),
DB::raw('
(SELECT CONCAT(
COALESCE(u.sFirstName, ""),
" ",
COALESCE(u.sMiddleName, ""),
" ",
COALESCE(u.sLastName, "")
)
FROM tm_dokter d
LEFT JOIN tm_users u ON u.nID = d.nIDUser
WHERE d.nID = tx_prescriptions.nIDDokter LIMIT 1) AS nama_dokter
'),
DB::raw('
(SELECT s.sSpesialis
FROM tm_dokter d
LEFT JOIN tm_spesialis s ON s.nID = d.nIDSpesialis
WHERE d.nID = tx_prescriptions.nIDDokter LIMIT 1) AS spesialis
'),
DB::raw('
(SELECT t.sSIP
FROM tm_dokter d
LEFT JOIN tx_jadwal_dokter t ON t.nIDDokter = d.nID
WHERE d.nID = tx_prescriptions.nIDDokter LIMIT 1) AS sip
'),
DB::raw('
(SELECT u.sPhone
FROM tm_dokter d
LEFT JOIN tm_users u ON u.nID = d.nIDUser
WHERE d.nID = tx_prescriptions.nIDDokter LIMIT 1) AS no_ponsel_dokter
'),
DB::raw('
(SELECT tm_users_detail.dTanggalLahir
FROM tm_users_detail
WHERE tm_users_detail.nIDUser = tm_users.nID LIMIT 1) AS tgl_lahir_pasien
'),
DB::raw('
(SELECT CASE
WHEN tm_users_detail.nIDJenisKelamin = 1 THEN "Male"
ELSE "Female"
END
FROM tm_users_detail
WHERE tm_users_detail.nIDUser = tm_users.nID LIMIT 1) AS jenis_kelamin_pasien
'),
DB::raw('
(SELECT CONCAT(tm_users_detail.sHeight, "/", tm_users_detail.sWeight)
FROM tm_users_detail
WHERE tm_users_detail.nIDUser = tm_users.nID LIMIT 1) AS tinggi_berat
'),
DB::raw('
(SELECT tm_users_insurance.sNoPolis
FROM tm_users_insurance
LEFT JOIN tm_insurance ON tm_users_insurance.nIDInsurance = tm_insurance.nID
WHERE tm_users_insurance.nIDUser = tx_prescriptions.nIDUser LIMIT 1) AS no_polis
'),
DB::raw('
(SELECT tm_insurance.sInsurance
FROM tm_users_insurance
LEFT JOIN tm_insurance ON tm_users_insurance.nIDInsurance = tm_insurance.nID
WHERE tm_users_insurance.nIDUser = tx_prescriptions.nIDUser LIMIT 1) AS perusahaan_asuransi
'),
DB::raw('
(SELECT tm_users_insurance.sCorporateName
FROM tm_users_insurance
LEFT JOIN tm_insurance ON tm_users_insurance.nIDInsurance = tm_insurance.nID
WHERE tm_users_insurance.nIDUser = tx_prescriptions.nIDUser LIMIT 1) AS nama_perusahaan
'),
DB::raw('
(SELECT tm_users_insurance.sProductCode
FROM tm_users_insurance
LEFT JOIN tm_insurance ON tm_users_insurance.nIDInsurance = tm_insurance.nID
WHERE tm_users_insurance.nIDUser = tx_prescriptions.nIDUser LIMIT 1) AS kode_produk
'),
DB::raw('
(
SELECT
CASE
WHEN tm_users_insurance.sPlanCode = "A" THEN "Alba"
WHEN tm_users_insurance.sPlanCode = "B" THEN "Blue"
WHEN tm_users_insurance.sPlanCode = "S" THEN "Silver"
WHEN tm_users_insurance.sPlanCode = "G" THEN "Gold"
WHEN tm_users_insurance.sPlanCode = "P" THEN "Platinum"
WHEN tm_users_insurance.sPlanCode = "D" THEN "Diamond"
ELSE ""
END AS kelas_asuransi
FROM tm_users_insurance
LEFT JOIN tm_insurance ON tm_users_insurance.nIDInsurance = tm_insurance.nID
WHERE tm_users_insurance.nIDUser = tx_prescriptions.nIDUser
LIMIT 1
) AS kelas_asuransi
'),
DB::raw('
(
SELECT
CASE
WHEN tm_hubungan_keluarga.sHubunganKeluarga = "Husband" THEN "S"
WHEN tm_hubungan_keluarga.sHubunganKeluarga = "Wife" THEN "I"
WHEN tm_hubungan_keluarga.sHubunganKeluarga = "Child" THEN "A"
ELSE "P"
END AS tipe_member
FROM tm_hubungan_keluarga
WHERE tm_hubungan_keluarga.nID = tm_users.nIDHubunganKeluarga
LIMIT 1
) AS tipe_member
'),
'tx_prescription_orders.sAddress AS alamat_penerima',
'tx_prescription_orders.sDeliveryMethod AS pengiriman',
'tx_prescription_orders.nTotalPrice AS total_kirim',
'tx_prescriptions.sNoRefProvider AS noref_dokter',
DB::raw('DATE_ADD(tx_prescriptions.dTanggalResep, INTERVAL 1 DAY) as valid_tanggal'),
'tx_prescriptions.sNomorPenjamin AS nomor_penjamin',
DB::raw('
(SELECT tx_livechat.dCreateOn
FROM tx_livechat
WHERE tx_livechat.nID = tx_prescriptions.nIDLivechat LIMIT 1) AS tgl_livechat
'),
'tx_prescriptions.sDiagnose as diagnosa',
'tx_prescription_orders.nDeliveryID',
'tx_prescription_orders.sDeliveryStatus'
)
->paginate($limit);
// Secret key for generating the token
$secret_key = env('SECRET_KEY_LMS');
// Transform the results to include the download link
$results->getCollection()->transform(function ($item) use ($secret_key) {
// Generate the token with the timestamp
$expiry_time = time() + 86400; // Token expiry time (1 day)
$token = hash_hmac('sha256', $item->id . $expiry_time, $secret_key);
// Construct the download link
$path = 'prescription/barcode-print-pdf/' . $item->id . '?token=' . urlencode($token) . '&expiry=' . $expiry_time;
$host = $_SERVER['HTTP_HOST']; // This will give you the host like 'linksehat.dev' or 'linksehat.com'
$base_url = "https://m.linksehat.dev/";
// Check if the host contains '.dev'
if (strpos($host, '.com') !== false) {
$base_url = "https://m.linksehat.com/";
}
$item->link_download = $base_url.$path;
return $item;
});
$apotekIds = $results->pluck(value: 'nIDApotek')->unique()->filter();
$organizations = DB::connection('mysql')->table('organizations')
->whereIn('id', $apotekIds)
->pluck('name', 'id');
$results->getCollection()->transform(function ($item) use ($organizations) {
$item->apotek = $organizations->get($item->nIDApotek, '-'); // Default to 'Unknown' if not found
return $item;
});
$apotek_phone = DB::connection('mysql')->table('organizations')
// ->leftJoin('addresses', 'addresses.id','=', 'organizations.main_address_id')
->whereIn('organizations.id', $apotekIds)
->pluck('organizations.phone', 'organizations.id');
$results->getCollection()->transform(function ($item) use ($apotek_phone) {
$item->phone_apotek = $apotek_phone->get($item->nIDApotek, '-'); // Default to 'Unknown' if not found
return $item;
});
// Transform results to include allergies
$results->getCollection()->transform(function ($item) use ($organizations) {
// Get the allergies for each user
$allergies = $this->getAllergies($item->nIDUser);
// Concatenate the allergy description
$alergi_desc = '';
foreach ($allergies as $row) {
$alergi_desc .= $row->sAlergi . ' - ' . $row->sKeterangan . ', ';
}
// Set apotek and allergies data
$item->apotek = $organizations->get($item->nIDApotek, '-'); // Default to 'Unknown' if not found
$item->alergi_desc = rtrim($alergi_desc, ', '); // Remove the trailing comma
return $item;
});
// Extract unique Prescription IDs from the results
$prescriptionIDs = $results->pluck('id')->unique()->filter();
// Fetch prescription items based on Prescription IDs
$items = DB::connection('oldlms')->table('tx_prescription_items')
->whereIn('nIDPrescription', $prescriptionIDs)
->select('nIDPrescription', 'sItemName', 'sSigna', 'sTiming', 'sDuration', 'nQty', 'sNote')
->get()
->groupBy('nIDPrescription'); // Group items by their Prescription ID
// Final transformation: Attach prescription items to each prescription
$results->getCollection()->transform(function ($item) use ($items) {
$item->prescription_items = $items->get($item->id, collect())->map(function ($prescriptionItem) {
return [
'sItemName' => $prescriptionItem->sItemName,
'sSigna' => $prescriptionItem->sSigna,
'sTiming' => $prescriptionItem->sTiming,
'sDuration' => $prescriptionItem->sDuration,
'nQty' => $prescriptionItem->nQty,
'sNote' => $prescriptionItem->sNote,
];
});
return $item;
});
return response()->json(Helper::paginateResources($results));
}
public function getAllergies($nIDUser) {
return DB::connection('oldlms')
->table('tx_alergi_users as txa')
->join('tm_alergi as ta', 'ta.nID', '=', 'txa.nIDAlergi')
->select('ta.sAlergi', 'ta.sKeterangan')
->where('txa.nIDUser', $nIDUser)
->get();
}
/**
* Show the form for creating a new resource.
* @return Renderable
*/
public function create()
{
return view('hospitalportal::create');
}
/**
* Store a newly created resource in storage.
* @param Request $request
* @return Renderable
*/
public function store(Request $request)
{
//
}
/**
* Show the specified resource.
* @param int $id
* @return Renderable
*/
public function show($id)
{
return view('hospitalportal::show');
}
/**
* Show the form for editing the specified resource.
* @param int $id
* @return Renderable
*/
public function edit($id)
{
return view('hospitalportal::edit');
}
/**
* Update the specified resource in storage.
* @param Request $request
* @param int $id
* @return Renderable
*/
public function update(Request $request, $id)
{
$data = ['sStatus' => $request->sStatus];
$validator = Validator::make($request->all(), [
'sStatus' => 'required|string|max:255',
], [
'sStatus.required' => trans('Validation.required',['attribute' => 'Status']),
]);
if ($validator->fails())
{
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
}
else
{
try {
// Define the valid transitions
$valid_transitions = [
'waiting_for_payment' => 'waiting_pharmacy',
'waiting_pharmacy' => 'order_prepared',
'order_prepared' => 'ready',
'ready' => 'waiting_for_courir',
'waiting_for_courir' => 'package_picked_up',
'package_picked_up' => 'package_on_delivery',
'package_on_delivery' => 'package_delivered'
];
// Get the current status from the request
$inputStatus = $request->sStatus;
// Check if the input status has a valid next status in the map
if (isset($valid_transitions[$inputStatus])) {
// Get the next status
$status = $valid_transitions[$inputStatus];
// Start the transaction
DB::connection('oldlms')->beginTransaction();
// Update the status in the database
DB::connection('oldlms')->table('tx_prescription_orders')
->where('tx_prescription_orders.nID', '=', $id)
->update([
'sStatus' => $status,
'sUpdateBy' => auth()->user()->id,
'dUpdateOn' => date('Y-m-d H:i:s'),
]);
// Insert the log
$prescriptionOrder = DB::connection('oldlms')
->table('tx_prescription_orders')
->where('tx_prescription_orders.nID', '=', $id)
->join('tx_delivery_orders', 'tx_delivery_orders.nIDPrescriptionOrder', '=', 'tx_prescription_orders.nID')
->select('tx_prescription_orders.*', 'tx_delivery_orders.*', 'tx_delivery_orders.nID as nIDDelivery') // Add specific columns you want to select
->first();
if ($prescriptionOrder) {
$createdBy = $prescriptionOrder->sCreateBy;
$nIDPrescription = $prescriptionOrder->nIDPrescription;
$nIDDeliveryOrder = $prescriptionOrder->nIDDelivery;
// Insert data into the tx_delivery_log table
DB::connection('oldlms')->table('tx_delivery_log')->insert([
'sStatus' => $prescriptionOrder->sDeliveryStatus,
'sStatusPrescription' => $status,
'nIDDeliveryOrder' => $nIDDeliveryOrder,
'nIDPrescription' => $nIDPrescription,
'dCreatedOn' => now(),
]);
}
// Commit the transaction
DB::connection('oldlms')->commit();
// Return success response
return ApiResponse::apiResponse("Success", $data, trans('Message.success'), 200);
} else {
// If the input status is not valid, return an error
return ApiResponse::apiResponse('Invalid Status', $data, 'The input status is not valid.', 400);
}
} catch (\Exception $e) {
// Rollback the transaction if an error occurs
DB::connection('oldlms')->rollBack();
// Handle error, could log or return as response
return ApiResponse::apiResponse('Server Error', $data, $e->getMessage(), 500);
}
}
}
public function getDriver(Request $request, $id)
{
$data = ['sStatus' => $request->sStatus];
// Validation
$validator = Validator::make($request->all(), [
'sStatus' => 'required|string|max:255',
], [
'sStatus.required' => trans('Validation.required', ['attribute' => 'Status']),
]);
if ($validator->fails()) {
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
}
try {
// Fetch prescription data
$prescriptions = DB::connection('oldlms')->table('tx_prescription_orders')
->leftJoin('tx_prescriptions', 'tx_prescriptions.nID', '=', 'tx_prescription_orders.nIDPrescription')
->where('tx_prescription_orders.nID', '=', $id)
->select(
'tx_prescriptions.nIDUser',
'tx_prescriptions.nID as id_prescription',
'tx_prescriptions.sKodeResep as merchantOrderID',
'tx_prescription_orders.nIDApotek'
)
->first();
if (!$prescriptions) {
return ApiResponse::apiResponse('Not Found', [], 'Prescription not found', 404);
}
// Fetch prescription items (medicine data)
$items = DB::connection('oldlms')->table('tx_prescription_items')
->where('nIDPrescription', $prescriptions->id_prescription)
->select('nIDPrescription', 'sItemName', 'nQty', 'nHarga')
->get();
$packages = [];
foreach ($items as $item) {
$packages[] = [
'name' => $item->sItemName,
'description' => $item->sItemName,
'quantity' => (float)$item->nQty,
'price' => (float)$item->nHarga,
'dimensions' => [
'height' => 0,
'width' => 0,
'depth' => 0,
'weight' => 0,
]
];
}
// Fetch pharmacy (apotek) data
$apotek = DB::connection('mysql')->table('organizations')
->leftJoin('addresses', 'addresses.id', '=', 'organizations.main_address_id')
->where('organizations.id', '=', $prescriptions->nIDApotek)
->select('organizations.name as nama_apotek',
'addresses.text as alamat_apotek',
'addresses.lat',
'addresses.lng',
'organizations.phone',
'organizations.email')
->first();
// Fetch patient (pasien) data
$pasien = DB::connection('oldlms')->table('tm_users')
->leftJoin('tm_users_detail', 'tm_users_detail.nIDuser', '=', 'tm_users.nID')
->where('tm_users.nID', '=', $prescriptions->nIDUser)
->select(
DB::raw('CONCAT(
COALESCE(tm_users.sFirstName, ""),
" ",
COALESCE(tm_users.sMiddleName, ""),
" ",
COALESCE(tm_users.sLastName, "")
) as nama_pasien'),
'tm_users.sFirstName as firstname',
'tm_users.sLastName as lastname',
'tm_users.sEmail as email',
'tm_users.sPhone as phone',
'tm_users_detail.sLatitude as latitude',
'tm_users_detail.sLongitude as longitude',
'tm_users_detail.sAlamatMap',
DB::raw('(SELECT tm_provinsi.sProvinsi FROM tm_provinsi WHERE tm_provinsi.nID = tm_users_detail.nIDProvinsi LIMIT 1) AS provinsi'),
DB::raw('(SELECT tm_kota.sKota FROM tm_kota WHERE tm_kota.nID = tm_users_detail.nIDKota LIMIT 1) AS kota'),
DB::raw('(SELECT tm_kecamatan.sKecamatan FROM tm_kecamatan WHERE tm_kecamatan.nID = tm_users_detail.nIDKecamatan LIMIT 1) AS kecamatan'),
DB::raw('(SELECT tm_kelurahan.sKelurahan FROM tm_kelurahan WHERE tm_kelurahan.nID = tm_users_detail.nIDKelurahan LIMIT 1) AS kelurahan'),
DB::raw('(SELECT tm_kelurahan.nKodePos FROM tm_kelurahan WHERE tm_kelurahan.nID = tm_users_detail.nIDKelurahan LIMIT 1) AS kode_pos')
)
->first();
if (!$pasien) {
return ApiResponse::apiResponse('Not Found', [], 'Patient not found', 404);
}
if(!$pasien->email)
{
return ApiResponse::apiResponse('Not Found', [], 'Email Patient not found', 404);
}
if(!$pasien->phone)
{
return ApiResponse::apiResponse('Not Found', [], 'Phone Patient not found', 404);
}
// Use GrabHelper to handle the API calls
$grabHelper = new GrabHelper();
$token = $grabHelper->getToken();
$serviceType = 'INSTANT';
$body = json_encode([
"merchantOrderID" => $prescriptions->merchantOrderID,
"serviceType" => $serviceType,
"vehicleType" => "BIKE",
"codType" => "REGULAR",
"paymentMethod" => "CASHLESS",
"highValue" => false,
"packages" => $packages,
"origin" => [
"address" => $apotek->alamat_apotek,
"coordinates" => [
"latitude" => (float)$apotek->lat,
"longitude" => (float)$apotek->lng
]
],
"destination" => [
"address" => $pasien->sAlamatMap,
"coordinates" => [
"latitude" => (float)$pasien->latitude,
"longitude" => (float)$pasien->longitude
]
],
"recipient" => [
"firstName" => $pasien->firstname,
"lastName" => $pasien->lastname,
"email" => $pasien->email,
"phone" => $grabHelper->normalizePhoneNumber($pasien->phone),
"smsEnabled" => true
],
"sender" => [
"firstName" => $apotek->nama_apotek,
"companyName" => $apotek->nama_apotek,
"email" => $apotek->email,
"phone" => $apotek->phone,
"smsEnabled" => true
],
"schedule" => $grabHelper->getScheduleTimes()
]);
// Create the delivery request
$response = $grabHelper->createDelivery($token, $body);
$data_grab = json_decode($response, true);
// Transaction to update status
DB::connection('oldlms')->beginTransaction();
//insert to api logs
$data_logs = [
'sType' => 'out',
'sContext' => 'grab',
'sTarget' => 'deliveries/create-grab',
'sRequest' => $body,
'sResponse' => $response,
'sCreateBy' => auth()->user()->id,
'dCreateOn' => now(),
];
DB::connection('oldlms')->table('api_logs')
->insert($data_logs);
DB::connection('oldlms')->table('tx_prescription_orders')
->where('tx_prescription_orders.nID', '=', $id)
->update([
'nDeliveryID' => $data_grab['deliveryID'],
'sDeliveryStatus' => $data_grab['status'],
'sStatus' => 'waiting_for_courir',
'sUpdateBy' => auth()->user()->id,
'dUpdateOn' => now(),
]);
//insert to delivery order
$tm_delivery_statuses = DB::connection('oldlms')->table('tm_delivery_statuses')
->where('tm_delivery_statuses.sStatus', 'LIKE', '%' . $data_grab['status'] . '%')
->where('tm_delivery_statuses.nIDDelivery', '=', 3)
->select('tm_delivery_statuses.sStatusDescription')
->first();
$data_delivery_orders = [
'nIDPrescriptionOrder' => $id,
'sUUID' => $this->generateUuid($id),
'nIDDelivery' => 3, //grab
'sType' => $serviceType,
'nOrderID' => $data_grab['deliveryID'],
'nVehicleTypeID' => null,
'sCreatedDateTime' => $data_grab['schedule']['pickupTimeFrom'],
'sFinishDateTime' => $data_grab['schedule']['pickupTimeTo'],
'sStatus' => $data_grab['status'],
'sStatusDescription' => $tm_delivery_statuses->sStatusDescription,
'sMatter' => 'medicine',
'nTotalWeightKg' => 0,
'nPaymentAmount' => $data_grab['quote']['amount'],
'nDeliveryFeeAmount' => $data_grab['quote']['amount'],
'sPaymentMethod' => 'cash',
'sCreateBy' => auth()->user()->id,
'dCreateOn' => now(),
];
// Use insertGetId to insert the data and get the last inserted ID
$lastInsertId = DB::connection('oldlms')->table('tx_delivery_orders')->insertGetId($data_delivery_orders);
$data_points = [
'origin' => [
'nIDDeliveryOrder' => $lastInsertId,
'sUUID' => $this->generateUuid($lastInsertId),
'nDeliveryID' => $data_grab['deliveryID'],
'nPointID' => 1,
'nType' => 1,
'sAddress' => $data_grab['quote']['origin']['address'],
'nLatitude' => $data_grab['quote']['origin']['coordinates']['latitude'] ?? null,
'nLongitude' => $data_grab['quote']['origin']['coordinates']['longitude'] ?? null,
'sName' => $data_grab['sender']['companyName'],
'sPhone' => $data_grab['sender']['phone'],
'sTrackingUrl' => null,
'sCreateBy' => auth()->user()->id,
'dCreateOn' => now(),
],
'destination' => [
'nIDDeliveryOrder' => $lastInsertId,
'sUUID' => $this->generateUuid($lastInsertId),
'nDeliveryID' => $data_grab['deliveryID'],
'nPointID' => 2,
'nType' => 2,
'sAddress' => $data_grab['quote']['destination']['address'],
'nLatitude' => $data_grab['quote']['destination']['coordinates']['latitude'] ?? null,
'nLongitude' => $data_grab['quote']['destination']['coordinates']['longitude'] ?? null,
'sName' => $data_grab['recipient']['firstName'] . " " . $data_grab['recipient']['lastName'],
'sPhone' => $data_grab['recipient']['phone'],
'sTrackingUrl' => null,
'sCreateBy' => auth()->user()->id,
'dCreateOn' => now(),
]
];
foreach ($data_points as $value_point) {
DB::connection('oldlms')->table('tx_delivery_order_points')->insert($value_point);
}
DB::connection('oldlms')->commit();
// Return success response
return ApiResponse::apiResponse("Success", $data_grab, trans('Message.success'), 200);
} catch (\Exception $e) {
// Rollback transaction on error
DB::connection('oldlms')->rollBack();
return ApiResponse::apiResponse('Server Error', [], $e->getMessage(), 500);
}
}
/**
* Remove the specified resource from storage.
* @param int $id
* @return Renderable
*/
public function destroy($id)
{
//
}
public function generateUuid($id_prescription_order)
{
// Define the namespace (using DNS in this example)
$namespace = Uuid::NAMESPACE_DNS;
$uuidV5 = Uuid::uuid5($namespace, $id_prescription_order);
return $uuidV5->toString();
}
}

View File

View File

0
Modules/HospitalPortal/Http/Middleware/.gitkeep Normal file → Executable file
View File

View File

View File

0
Modules/HospitalPortal/Http/Requests/.gitkeep Normal file → Executable file
View File

0
Modules/HospitalPortal/Providers/.gitkeep Normal file → Executable file
View File

View File

View File

0
Modules/HospitalPortal/Resources/assets/.gitkeep Normal file → Executable file
View File

0
Modules/HospitalPortal/Resources/assets/js/app.js Normal file → Executable file
View File

0
Modules/HospitalPortal/Resources/assets/sass/app.scss Normal file → Executable file
View File

0
Modules/HospitalPortal/Resources/lang/.gitkeep Normal file → Executable file
View File

0
Modules/HospitalPortal/Resources/views/.gitkeep Normal file → Executable file
View File

0
Modules/HospitalPortal/Resources/views/index.blade.php Normal file → Executable file
View File

View File

0
Modules/HospitalPortal/Routes/.gitkeep Normal file → Executable file
View File

59
Modules/HospitalPortal/Routes/api.php Normal file → Executable file
View File

@@ -7,8 +7,16 @@ use Modules\HospitalPortal\Http\Controllers\Api\MemberController;
use Modules\HospitalPortal\Http\Controllers\ClaimController;
use Modules\HospitalPortal\Http\Controllers\Api\NotificationController;
use Modules\HospitalPortal\Http\Controllers\Api\RequestLogController;
use Modules\Internal\Http\Controllers\Api\RequestLogController as RequestLogControllerInternal;
use Modules\Internal\Http\Controllers\Api\RequestLogBenefitController;
use Modules\Internal\Http\Controllers\Api\RequestLogMedicineController;
use Modules\HospitalPortal\Http\Controllers\ApotekController;
use Modules\HospitalPortal\Http\Middleware\Authentication;
use Modules\HospitalPortal\Http\Middleware\Authorization;
use Modules\Internal\Http\Controllers\Api\NavigationController;
use Modules\Linksehat\Http\Controllers\Api\AutocompleteController;
use Modules\Primaya\Http\Controllers\Api\MasterController;
/*
|--------------------------------------------------------------------------
@@ -28,13 +36,50 @@ Route::prefix('v1')->group(function() {
Route::post('login', 'login');
});
});
//Route::post('forget-password', [AuthController::class, 'forgetPassword'])->name('forget-password');
//Route::post('verify-email', [AuthController::class, 'verifyEmail'])->name('verify-email');
Route::post('forget-password', [AuthController::class, 'forgetPassword']);
Route::post('verify-email', [AuthController::class, 'verifyEmail'])->name('verify-email');
Route::post('verify-code', [AuthController::class, 'verifCode']);
Route::get('service-member/{id}', [AutocompleteController::class, 'serviceCode']);
Route::get('specialis', [AutocompleteController::class, 'specialisList']);
Route::get('diagnosis', [RequestLogControllerInternal::class, 'diagnosis']);
Route::middleware('auth:sanctum')->group(function () {
//dari Internal Prime center
Route::get('customer-service/request', [RequestLogControllerInternal::class, 'index']);
Route::post('customer-service/request', [RequestLogControllerInternal::class, 'createNew']);
Route::put('customer-service/request/{id}', [RequestLogControllerInternal::class, 'update']);
Route::get('customer-service/request/{id}', [RequestLogControllerInternal::class, 'show']);
Route::put('customer-service/request/delete/{id}', [RequestLogControllerInternal::class, 'destroy']);
Route::put('customer-service/request/final_log/{id}', [RequestLogControllerInternal::class, 'deleteFinalLog']);
Route::get('customer-service/request/{id}/download', [RequestLogControllerInternal::class, 'generateRequestLog']);
Route::post('customer-service/request/import', [RequestLogControllerInternal::class, 'importRequestLog']);
Route::post('customer-service/request/import-invoice', [RequestLogControllerInternal::class, 'importInvoice']);
Route::post('customer-service/request/exportFiledInvoice', [RequestLogControllerInternal::class, 'exportFiledInvoice']);
Route::get('customer-service/request/data', [RequestLogControllerInternal::class, 'generateDataRequestLogExcel']);
Route::post('customer-service/request/{id}/add_file', [RequestLogControllerInternal::class, 'requestFiles']);
Route::post('customer-service/request/{id}/approval_files', [RequestLogControllerInternal::class, 'approvalFiles']);
Route::post('customer-service/request/{id}/delete_file', [RequestLogControllerInternal::class, 'deleteFiles']);
Route::post('customer-service/request/final-log', [RequestLogControllerInternal::class, 'updateFinalLog']);
// insert benefit
Route::post('customer-service/request/insert-benefit', [RequestLogBenefitController::class, 'store']);
Route::post('customer-service/request/benefit_data/{id}', [RequestLogBenefitController::class, 'destroy']);
Route::put('customer-service/request/benefit_data/{id}', [RequestLogBenefitController::class, 'update']);
// insert medicine
Route::post('customer-service/request/medicine-data', [RequestLogMedicineController::class, 'store']);
Route::delete('customer-service/request/medicine-data/{id}', [RequestLogMedicineController::class, 'destroy']);
Route::put('customer-service/request/medicine-data/{id}', [RequestLogMedicineController::class, 'update']);
// end prime center
// Navigation
Route::get('navigations', [NavigationController::class, 'index']);
Route::post('logout', [AuthController::class, 'logout'])->name('logout');
Route::get('/user', function (Request $request) {
return $request->user();
@@ -56,6 +101,7 @@ Route::prefix('v1')->group(function() {
Route::post('request-final-log', 'requestFinalLog');
Route::get('download-log/{request_log_id}', 'downlodLog');
Route::get('download-final-log/{request_log_id}', 'downlodFinalLog');
Route::post('submit-claims', 'submitClaims');
});
//Notification
Route::controller(NotificationController::class)->group(function() {
@@ -64,6 +110,9 @@ Route::prefix('v1')->group(function() {
//Set read notification
Route::post('set-read-notification', 'setReadNotification');
});
Route::get('get-prescription-orders',[ApotekController::class, 'index']);
Route::put('put-prescription-orders/{id}',[ApotekController::class, 'update']);
Route::put('put-driver-prescription-orders/{id}',[ApotekController::class, 'getDriver']);
});
// Request Final LOG
Route::controller(RequestLogController::class)->group(function () {
@@ -80,6 +129,10 @@ Route::prefix('v1')->group(function() {
Route::get('get-claim-requests', [ClaimRequestController::class, 'get_claim_requests'])->name('claim-requests.get_claim_requests');
Route::get('detail-claim-requests/{id}', [ClaimRequestController::class, 'detail_claim_requests'])->name('claim-requests.detail_claim_requests');
Route::post('claim-requests/{id}/request-files', [ClaimRequestController::class, 'requestFiles']);
Route::get('organizations', [MasterController::class, 'organizations']);
});
});
});

1
Modules/HospitalPortal/Routes/web.php Normal file → Executable file
View File

@@ -13,4 +13,5 @@
Route::prefix('hospitalportal')->group(function() {
Route::get('/', 'HospitalPortalController@index');
Route::get('download-log/{id}', 'HospitalPortalController@downloadLog');
});

0
Modules/HospitalPortal/Tests/Feature/.gitkeep Normal file → Executable file
View File

Some files were not shown because too many files have changed in this diff Show More