From 44863c200afc2cb20e5f2328cdefff465abf5eae Mon Sep 17 00:00:00 2001 From: Hasyim Kai Date: Thu, 4 Dec 2025 09:46:11 +0700 Subject: [PATCH 1/4] Squashed commit of the following: commit 1a5cf194cd0d6eec85bbb8bf1c199df82aa79d4f Author: hasyim_kai Date: Tue Dec 2 10:30:51 2025 +0700 Squashed commit of the following: commit ec24dd8383e3a9c7cb7190b7ed9864ae7225805f Merge: 17cd42e 7319cbc Author: Muhammad Hasyim Chaidir Ali <68959522+Hasyim-Kai@users.noreply.github.com> Date: Tue Dec 2 10:18:33 2025 +0700 Merge branch 'dev' into feat/data-vaksin-192 commit 17cd42ef03d1cda15a8f85831e747723fbb2c0a5 Author: hasyim_kai Date: Mon Dec 1 16:41:06 2025 +0700 Feat: UI Data Vaksin commit 1ced91229792420daca732256d535d100570d5bc Author: hasyim_kai Date: Mon Dec 1 14:10:27 2025 +0700 Squashed commit of the following: commit 8e6a6b3fd1a8ed6c19099b52f5d7fc38f6a1a39a Author: hasyim_kai Date: Fri Nov 28 14:32:47 2025 +0700 Feat: UI PRB commit 4f2da6cd1e077598fb7f3cdede8d771e9b39b2d7 Author: hasyim_kai Date: Thu Nov 27 19:41:18 2025 +0700 Squashed commit of the following: commit 4a465f399269037f9b0e19e06a2d9b2eae0f924e Author: hasyim_kai Date: Mon Nov 24 13:40:22 2025 +0700 progress commit 7811f051a53bb58cded920fa51b957f989b13a2e Merge: f060ed3 8aac6c4 Author: Muhammad Hasyim Chaidir Ali <68959522+Hasyim-Kai@users.noreply.github.com> Date: Mon Nov 24 10:25:15 2025 +0700 Merge branch 'dev' into feat/kfr-kemoterapi-174 commit f060ed33d204800e70304271849d6dd5d9714bd9 Author: hasyim_kai Date: Mon Nov 24 10:21:20 2025 +0700 Feat: UI KFR commit 399c3cbaee160cddfe7750de378c71ea6455a42c Author: hasyim_kai Date: Thu Nov 20 11:19:03 2025 +0700 Squashed commit of the following: commit 72ce2260c50597f782f07d29db3985607ecc2f34 Author: hasyim_kai Date: Mon Nov 17 15:19:36 2025 +0700 Feat: add doc preview in Therpay protocol List commit 7032cd2409a660d40899ffd421137e4158cfde4a Author: hasyim_kai Date: Wed Nov 12 15:34:30 2025 +0700 Fix: prepare API integration protokol terapi verification commit dbf6f78d00afc818baf2b34d128ee2153814cc88 Author: hasyim_kai Date: Wed Nov 12 14:09:28 2025 +0700 Feat: add basic CRUD therapy protocol commit 46a44e90fe4d4097b5460d2d4e5689b2a5389467 Author: hasyim_kai Date: Tue Nov 11 15:57:54 2025 +0700 Fix: Prepare protokol terapi API Integration commit 4674090566727cebd947e50e2c06c44e8c7afa7e Author: hasyim_kai Date: Mon Nov 10 15:33:22 2025 +0700 Fix: hotfix style add protokol terapi commit 919c91abd8ef8b4cd193012eed7f5e8cf635cda2 Author: hasyim_kai Date: Mon Nov 10 15:17:14 2025 +0700 Fix: Typo drpodown-action-p in protokol-terapi commit e21d30eacf1a08118e289d4bb64889e708d5023a Author: hasyim_kai Date: Mon Nov 10 15:14:33 2025 +0700 Fix: add diagnose & procedure dialog picker in add protokol terapi commit 9a3d73b72b0dceea778d83e7630c5ead110a6a4c Author: hasyim_kai Date: Tue Nov 4 10:21:24 2025 +0700 Fix: Add Schema therapy protocol rehab medik commit 4d8d2d633bbbd78038b1cc607558c1ceb31c5986 Author: hasyim_kai Date: Tue Nov 4 09:30:55 2025 +0700 Fix: refactor Actions Btn ba-dr-su commit 5f290a6e4bd1559c0e5864a508c5ab650cfae6e8 Author: hasyim_kai Date: Mon Nov 3 17:08:20 2025 +0700 Feat: UI protokol terapi in Rehab medik commit 63010f69ff30532bb8ac91443112f31d4942b221 Author: Khafid Prayoga Date: Tue Oct 21 09:54:13 2025 +0700 wip: list protokol terapi commit 44eedc298680a5255fee0ee8feee3e24beda93dd Author: Khafid Prayoga Date: Mon Oct 20 12:54:01 2025 +0700 feat(therapy-protocol): init form entry feat(therapy-protocol): init page routes wip: init entry form wip: form entry protokol terapi todo: table procedure, and diagnose picker wip: schema form new entry todo: picker/modal yang relateds ke form entry commit b2a6cdee0b7beb775830c4dceb69ff12c01d3ca4 Author: hasyim_kai Date: Wed Nov 26 14:44:57 2025 +0700 Squashed commit of the following: commit 39b778ab7874cbb53a3f4b4284b1ddbe87621c74 Author: hasyim_kai Date: Tue Nov 25 14:39:41 2025 +0700 Feat: UI Laporan Operasi commit f6ae61849d4e714b8d7a888178b0382a358c3eab Author: hasyim_kai Date: Tue Nov 25 14:09:25 2025 +0700 Squashed commit of the following: commit 8e3ea9e8d1d7e3b06bc6e53e0b97f62222276171 Author: hasyim_kai Date: Thu Nov 20 16:14:03 2025 +0700 Feat: UI control letter history commit f11f97f936447bdb225918abb43313f8db540d67 Author: hasyim_kai Date: Thu Nov 20 15:18:25 2025 +0700 Squashed commit of the following: commit dab6adc4a98820d8686c5a336172af586b883c24 Author: hasyim_kai Date: Tue Nov 18 11:19:48 2025 +0700 Fix: add role authorization in Resume commit c28fc8f7aa54048472b535ac7ccd916d5b0769c2 Merge: 7ed1cc8 bcfb4c1 Author: Muhammad Hasyim Chaidir Ali <68959522+Hasyim-Kai@users.noreply.github.com> Date: Tue Nov 18 09:02:16 2025 +0700 Merge branch 'dev' into feat/resume-81 commit 7ed1cc83bfa62d8c9660ff1ee61b1f96661ef45a Author: hasyim_kai Date: Mon Nov 17 15:04:01 2025 +0700 Feat: add doc preview in Resume List commit bcfb4c1456b7b58c63d4969985200ceca72aee16 Merge: 1cbde57 975c87d Author: Munawwirul Jamal <57973347+munaja@users.noreply.github.com> Date: Mon Nov 17 11:15:14 2025 +0700 Merge pull request #147 from dikstub-rssa/feat/surat-kontrol-135 Feat: Integration Rehab Medik - Surat Kontrol commit 15ab43c1b143627892df2a9f82f418091b55ed7f Author: hasyim_kai Date: Mon Nov 17 10:38:21 2025 +0700 Feat: add verification capthca and form adjustment commit 53bd8e7f6e2b22b03690947f52b42744a17703ee Author: hasyim_kai Date: Fri Nov 7 08:55:23 2025 +0700 Fix: refactor rehab medik - Resume UI commit fc308809b848512a664659a51475e634e08f06f4 Author: hasyim_kai Date: Wed Oct 29 14:57:19 2025 +0700 Feat: add UI Rehab Medik > Proses > Resume commit 9b383a543703f9331a7ff90d81abe16717a39884 Merge: a4dc7d7 831749a Author: Muhammad Hasyim Chaidir Ali <68959522+Hasyim-Kai@users.noreply.github.com> Date: Wed Oct 29 13:32:47 2025 +0700 Merge pull request #139 from dikstub-rssa/dev Update branch feat/resume-81 commit 2b7bea70d66e8472220a2a2406889fc489cc1ebd Author: hasyim_kai Date: Tue Nov 18 11:20:51 2025 +0700 Fix: Typo in Control Letter commit 808e91527cf95de2a47387bb792a3af2e16d907b Author: hasyim_kai Date: Tue Nov 18 10:59:50 2025 +0700 Fix: add role authorization in Control Letter commit 1dd8e8e7b3bdd8bf9f5734e5f0c561f64f804cfa Author: hasyim_kai Date: Tue Nov 25 09:23:57 2025 +0700 Squashed commit of the following: commit 72ce2260c50597f782f07d29db3985607ecc2f34 Author: hasyim_kai Date: Mon Nov 17 15:19:36 2025 +0700 Feat: add doc preview in Therpay protocol List commit 7032cd2409a660d40899ffd421137e4158cfde4a Author: hasyim_kai Date: Wed Nov 12 15:34:30 2025 +0700 Fix: prepare API integration protokol terapi verification commit dbf6f78d00afc818baf2b34d128ee2153814cc88 Author: hasyim_kai Date: Wed Nov 12 14:09:28 2025 +0700 Feat: add basic CRUD therapy protocol commit 46a44e90fe4d4097b5460d2d4e5689b2a5389467 Author: hasyim_kai Date: Tue Nov 11 15:57:54 2025 +0700 Fix: Prepare protokol terapi API Integration commit 4674090566727cebd947e50e2c06c44e8c7afa7e Author: hasyim_kai Date: Mon Nov 10 15:33:22 2025 +0700 Fix: hotfix style add protokol terapi commit 919c91abd8ef8b4cd193012eed7f5e8cf635cda2 Author: hasyim_kai Date: Mon Nov 10 15:17:14 2025 +0700 Fix: Typo drpodown-action-p in protokol-terapi commit e21d30eacf1a08118e289d4bb64889e708d5023a Author: hasyim_kai Date: Mon Nov 10 15:14:33 2025 +0700 Fix: add diagnose & procedure dialog picker in add protokol terapi commit 9a3d73b72b0dceea778d83e7630c5ead110a6a4c Author: hasyim_kai Date: Tue Nov 4 10:21:24 2025 +0700 Fix: Add Schema therapy protocol rehab medik commit 4d8d2d633bbbd78038b1cc607558c1ceb31c5986 Author: hasyim_kai Date: Tue Nov 4 09:30:55 2025 +0700 Fix: refactor Actions Btn ba-dr-su commit 5f290a6e4bd1559c0e5864a508c5ab650cfae6e8 Author: hasyim_kai Date: Mon Nov 3 17:08:20 2025 +0700 Feat: UI protokol terapi in Rehab medik commit 63010f69ff30532bb8ac91443112f31d4942b221 Author: Khafid Prayoga Date: Tue Oct 21 09:54:13 2025 +0700 wip: list protokol terapi commit 44eedc298680a5255fee0ee8feee3e24beda93dd Author: Khafid Prayoga Date: Mon Oct 20 12:54:01 2025 +0700 feat(therapy-protocol): init form entry feat(therapy-protocol): init page routes wip: init entry form wip: form entry protokol terapi todo: table procedure, and diagnose picker wip: schema form new entry todo: picker/modal yang relateds ke form entry commit 3e5c03148b8fe03ca0fafeaf652f2cc95992be83 Author: hasyim_kai Date: Tue Nov 25 09:17:11 2025 +0700 progress commit a89c480474c025fb683383693e6a6808baa1d0d6 Merge: 8e6a6b3 7319cbc Author: Muhammad Hasyim Chaidir Ali <68959522+Hasyim-Kai@users.noreply.github.com> Date: Tue Dec 2 10:27:07 2025 +0700 Merge branch 'dev' into feat/prb-189 commit 8e6a6b3fd1a8ed6c19099b52f5d7fc38f6a1a39a Author: hasyim_kai Date: Fri Nov 28 14:32:47 2025 +0700 Feat: UI PRB commit 4f2da6cd1e077598fb7f3cdede8d771e9b39b2d7 Author: hasyim_kai Date: Thu Nov 27 19:41:18 2025 +0700 Squashed commit of the following: commit 4a465f399269037f9b0e19e06a2d9b2eae0f924e Author: hasyim_kai Date: Mon Nov 24 13:40:22 2025 +0700 progress commit 7811f051a53bb58cded920fa51b957f989b13a2e Merge: f060ed3 8aac6c4 Author: Muhammad Hasyim Chaidir Ali <68959522+Hasyim-Kai@users.noreply.github.com> Date: Mon Nov 24 10:25:15 2025 +0700 Merge branch 'dev' into feat/kfr-kemoterapi-174 commit f060ed33d204800e70304271849d6dd5d9714bd9 Author: hasyim_kai Date: Mon Nov 24 10:21:20 2025 +0700 Feat: UI KFR commit 399c3cbaee160cddfe7750de378c71ea6455a42c Author: hasyim_kai Date: Thu Nov 20 11:19:03 2025 +0700 Squashed commit of the following: commit 72ce2260c50597f782f07d29db3985607ecc2f34 Author: hasyim_kai Date: Mon Nov 17 15:19:36 2025 +0700 Feat: add doc preview in Therpay protocol List commit 7032cd2409a660d40899ffd421137e4158cfde4a Author: hasyim_kai Date: Wed Nov 12 15:34:30 2025 +0700 Fix: prepare API integration protokol terapi verification commit dbf6f78d00afc818baf2b34d128ee2153814cc88 Author: hasyim_kai Date: Wed Nov 12 14:09:28 2025 +0700 Feat: add basic CRUD therapy protocol commit 46a44e90fe4d4097b5460d2d4e5689b2a5389467 Author: hasyim_kai Date: Tue Nov 11 15:57:54 2025 +0700 Fix: Prepare protokol terapi API Integration commit 4674090566727cebd947e50e2c06c44e8c7afa7e Author: hasyim_kai Date: Mon Nov 10 15:33:22 2025 +0700 Fix: hotfix style add protokol terapi commit 919c91abd8ef8b4cd193012eed7f5e8cf635cda2 Author: hasyim_kai Date: Mon Nov 10 15:17:14 2025 +0700 Fix: Typo drpodown-action-p in protokol-terapi commit e21d30eacf1a08118e289d4bb64889e708d5023a Author: hasyim_kai Date: Mon Nov 10 15:14:33 2025 +0700 Fix: add diagnose & procedure dialog picker in add protokol terapi commit 9a3d73b72b0dceea778d83e7630c5ead110a6a4c Author: hasyim_kai Date: Tue Nov 4 10:21:24 2025 +0700 Fix: Add Schema therapy protocol rehab medik commit 4d8d2d633bbbd78038b1cc607558c1ceb31c5986 Author: hasyim_kai Date: Tue Nov 4 09:30:55 2025 +0700 Fix: refactor Actions Btn ba-dr-su commit 5f290a6e4bd1559c0e5864a508c5ab650cfae6e8 Author: hasyim_kai Date: Mon Nov 3 17:08:20 2025 +0700 Feat: UI protokol terapi in Rehab medik commit 63010f69ff30532bb8ac91443112f31d4942b221 Author: Khafid Prayoga Date: Tue Oct 21 09:54:13 2025 +0700 wip: list protokol terapi commit 44eedc298680a5255fee0ee8feee3e24beda93dd Author: Khafid Prayoga Date: Mon Oct 20 12:54:01 2025 +0700 feat(therapy-protocol): init form entry feat(therapy-protocol): init page routes wip: init entry form wip: form entry protokol terapi todo: table procedure, and diagnose picker wip: schema form new entry todo: picker/modal yang relateds ke form entry commit b2a6cdee0b7beb775830c4dceb69ff12c01d3ca4 Author: hasyim_kai Date: Wed Nov 26 14:44:57 2025 +0700 Squashed commit of the following: commit 39b778ab7874cbb53a3f4b4284b1ddbe87621c74 Author: hasyim_kai Date: Tue Nov 25 14:39:41 2025 +0700 Feat: UI Laporan Operasi commit f6ae61849d4e714b8d7a888178b0382a358c3eab Author: hasyim_kai Date: Tue Nov 25 14:09:25 2025 +0700 Squashed commit of the following: commit 8e3ea9e8d1d7e3b06bc6e53e0b97f62222276171 Author: hasyim_kai Date: Thu Nov 20 16:14:03 2025 +0700 Feat: UI control letter history commit f11f97f936447bdb225918abb43313f8db540d67 Author: hasyim_kai Date: Thu Nov 20 15:18:25 2025 +0700 Squashed commit of the following: commit dab6adc4a98820d8686c5a336172af586b883c24 Author: hasyim_kai Date: Tue Nov 18 11:19:48 2025 +0700 Fix: add role authorization in Resume commit c28fc8f7aa54048472b535ac7ccd916d5b0769c2 Merge: 7ed1cc8 bcfb4c1 Author: Muhammad Hasyim Chaidir Ali <68959522+Hasyim-Kai@users.noreply.github.com> Date: Tue Nov 18 09:02:16 2025 +0700 Merge branch 'dev' into feat/resume-81 commit 7ed1cc83bfa62d8c9660ff1ee61b1f96661ef45a Author: hasyim_kai Date: Mon Nov 17 15:04:01 2025 +0700 Feat: add doc preview in Resume List commit bcfb4c1456b7b58c63d4969985200ceca72aee16 Merge: 1cbde57 975c87d Author: Munawwirul Jamal <57973347+munaja@users.noreply.github.com> Date: Mon Nov 17 11:15:14 2025 +0700 Merge pull request #147 from dikstub-rssa/feat/surat-kontrol-135 Feat: Integration Rehab Medik - Surat Kontrol commit 15ab43c1b143627892df2a9f82f418091b55ed7f Author: hasyim_kai Date: Mon Nov 17 10:38:21 2025 +0700 Feat: add verification capthca and form adjustment commit 53bd8e7f6e2b22b03690947f52b42744a17703ee Author: hasyim_kai Date: Fri Nov 7 08:55:23 2025 +0700 Fix: refactor rehab medik - Resume UI commit fc308809b848512a664659a51475e634e08f06f4 Author: hasyim_kai Date: Wed Oct 29 14:57:19 2025 +0700 Feat: add UI Rehab Medik > Proses > Resume commit 9b383a543703f9331a7ff90d81abe16717a39884 Merge: a4dc7d7 831749a Author: Muhammad Hasyim Chaidir Ali <68959522+Hasyim-Kai@users.noreply.github.com> Date: Wed Oct 29 13:32:47 2025 +0700 Merge pull request #139 from dikstub-rssa/dev Update branch feat/resume-81 commit 2b7bea70d66e8472220a2a2406889fc489cc1ebd Author: hasyim_kai Date: Tue Nov 18 11:20:51 2025 +0700 Fix: Typo in Control Letter commit 808e91527cf95de2a47387bb792a3af2e16d907b Author: hasyim_kai Date: Tue Nov 18 10:59:50 2025 +0700 Fix: add role authorization in Control Letter commit 1dd8e8e7b3bdd8bf9f5734e5f0c561f64f804cfa Author: hasyim_kai Date: Tue Nov 25 09:23:57 2025 +0700 Squashed commit of the following: commit 72ce2260c50597f782f07d29db3985607ecc2f34 Author: hasyim_kai Date: Mon Nov 17 15:19:36 2025 +0700 Feat: add doc preview in Therpay protocol List commit 7032cd2409a660d40899ffd421137e4158cfde4a Author: hasyim_kai Date: Wed Nov 12 15:34:30 2025 +0700 Fix: prepare API integration protokol terapi verification commit dbf6f78d00afc818baf2b34d128ee2153814cc88 Author: hasyim_kai Date: Wed Nov 12 14:09:28 2025 +0700 Feat: add basic CRUD therapy protocol commit 46a44e90fe4d4097b5460d2d4e5689b2a5389467 Author: hasyim_kai Date: Tue Nov 11 15:57:54 2025 +0700 Fix: Prepare protokol terapi API Integration commit 4674090566727cebd947e50e2c06c44e8c7afa7e Author: hasyim_kai Date: Mon Nov 10 15:33:22 2025 +0700 Fix: hotfix style add protokol terapi commit 919c91abd8ef8b4cd193012eed7f5e8cf635cda2 Author: hasyim_kai Date: Mon Nov 10 15:17:14 2025 +0700 Fix: Typo drpodown-action-p in protokol-terapi commit e21d30eacf1a08118e289d4bb64889e708d5023a Author: hasyim_kai Date: Mon Nov 10 15:14:33 2025 +0700 Fix: add diagnose & procedure dialog picker in add protokol terapi commit 9a3d73b72b0dceea778d83e7630c5ead110a6a4c Author: hasyim_kai Date: Tue Nov 4 10:21:24 2025 +0700 Fix: Add Schema therapy protocol rehab medik commit 4d8d2d633bbbd78038b1cc607558c1ceb31c5986 Author: hasyim_kai Date: Tue Nov 4 09:30:55 2025 +0700 Fix: refactor Actions Btn ba-dr-su commit 5f290a6e4bd1559c0e5864a508c5ab650cfae6e8 Author: hasyim_kai Date: Mon Nov 3 17:08:20 2025 +0700 Feat: UI protokol terapi in Rehab medik commit 63010f69ff30532bb8ac91443112f31d4942b221 Author: Khafid Prayoga Date: Tue Oct 21 09:54:13 2025 +0700 wip: list protokol terapi commit 44eedc298680a5255fee0ee8feee3e24beda93dd Author: Khafid Prayoga Date: Mon Oct 20 12:54:01 2025 +0700 feat(therapy-protocol): init form entry feat(therapy-protocol): init page routes wip: init entry form wip: form entry protokol terapi todo: table procedure, and diagnose picker wip: schema form new entry todo: picker/modal yang relateds ke form entry commit 3e5c03148b8fe03ca0fafeaf652f2cc95992be83 Author: hasyim_kai Date: Tue Nov 25 09:17:11 2025 +0700 progress --- .../app/prb/_common/btn-history.vue | 21 ++ app/components/app/prb/_common/filter.vue | 73 ++++++ .../app/prb/_common/select-date.vue | 119 +++++++++ .../app/prb/_common/select-dpjp.vue | 86 +++++++ .../app/prb/_common/select-medicine-form.vue | 86 +++++++ .../app/prb/_common/select-medicine.vue | 86 +++++++ .../app/prb/_common/select-program.vue | 77 ++++++ app/components/app/prb/bpjs-list.cfg.ts | 60 +++++ app/components/app/prb/detail.vue | 62 +++++ app/components/app/prb/entry.vue | 102 ++++++++ app/components/app/prb/history-list.cfg.ts | 62 +++++ app/components/app/prb/history-list.vue | 35 +++ app/components/app/prb/list.cfg.ts | 56 +++++ app/components/app/prb/list.vue | 34 +++ app/components/app/prb/obat-picker/form.vue | 114 +++++++++ .../app/prb/obat-picker/picker-dialog.vue | 140 +++++++++++ app/components/app/prb/sep-picker/list.cfg.ts | 83 +++++++ app/components/app/prb/sep-picker/list.vue | 53 +++++ .../app/prb/sep-picker/picker-dialog.vue | 141 +++++++++++ .../app/vaccine-data/_common/select-date.vue | 119 +++++++++ .../_common/select-vaccine-type.vue | 77 ++++++ app/components/app/vaccine-data/detail.vue | 68 ++++++ app/components/app/vaccine-data/entry.vue | 82 +++++++ .../app/vaccine-data/list-doctor.cfg.ts | 53 +++++ .../app/vaccine-data/list-nurse-physio.cfg.ts | 53 +++++ app/components/app/vaccine-data/list.vue | 41 ++++ .../content/encounter/process-bu.vue | 2 + app/components/content/encounter/process.vue | 2 +- app/components/content/prb/bpjs-list.vue | 225 ++++++++++++++++++ app/components/content/prb/detail.vue | 65 +++++ app/components/content/prb/entry.vue | 160 +++++++++++++ app/components/content/prb/list.vue | 202 ++++++++++++++++ .../content/vaccine-data/detail.vue | 65 +++++ app/components/content/vaccine-data/entry.vue | 159 +++++++++++++ app/components/content/vaccine-data/list.vue | 165 +++++++++++++ .../pub/my-ui/data/dropdown-action-choose.vue | 30 +++ .../pub/my-ui/data/dropdown-action-detail.vue | 30 +++ .../pub/my-ui/data/dropdown-action-print.vue | 31 +++ .../pub/my-ui/data/dropdown-action-upd.vue | 94 ++++++++ app/handlers/prb.handler.ts | 24 ++ app/handlers/vaccine-data.handler.ts | 24 ++ app/lib/constants.ts | 12 + app/lib/utils.ts | 6 + app/models/prb.ts | 37 +++ app/models/vaccine-data.ts | 37 +++ .../integration/bpjs/prb/[prb_id]/edit.vue | 41 ++++ .../integration/bpjs/prb/[prb_id]/index.vue | 41 ++++ .../(features)/integration/bpjs/prb/add.vue | 41 ++++ .../(features)/integration/bpjs/prb/index.vue | 41 ++++ .../encounter/[id]/prb/[prb_id]/edit.vue | 41 ++++ .../encounter/[id]/prb/[prb_id]/index.vue | 41 ++++ .../rehab/encounter/[id]/prb/add.vue | 41 ++++ .../rehab/encounter/[id]/process.vue | 2 +- .../vaccine-data/[vaccine_data_id]/index.vue | 41 ++++ .../rehab/encounter/[id]/vaccine-data/add.vue | 41 ++++ app/schemas/prb-medicine.schema.ts | 27 +++ app/schemas/prb.schema.ts | 47 ++++ app/schemas/vaccine-data.schema.ts | 47 ++++ app/services/medicine.service.ts | 14 ++ app/services/prb.service.ts | 28 +++ app/services/vaccine-data.service.ts | 28 +++ public/side-menu-items/system.json | 5 + 62 files changed, 3918 insertions(+), 2 deletions(-) create mode 100644 app/components/app/prb/_common/btn-history.vue create mode 100644 app/components/app/prb/_common/filter.vue create mode 100644 app/components/app/prb/_common/select-date.vue create mode 100644 app/components/app/prb/_common/select-dpjp.vue create mode 100644 app/components/app/prb/_common/select-medicine-form.vue create mode 100644 app/components/app/prb/_common/select-medicine.vue create mode 100644 app/components/app/prb/_common/select-program.vue create mode 100644 app/components/app/prb/bpjs-list.cfg.ts create mode 100644 app/components/app/prb/detail.vue create mode 100644 app/components/app/prb/entry.vue create mode 100644 app/components/app/prb/history-list.cfg.ts create mode 100644 app/components/app/prb/history-list.vue create mode 100644 app/components/app/prb/list.cfg.ts create mode 100644 app/components/app/prb/list.vue create mode 100644 app/components/app/prb/obat-picker/form.vue create mode 100644 app/components/app/prb/obat-picker/picker-dialog.vue create mode 100644 app/components/app/prb/sep-picker/list.cfg.ts create mode 100644 app/components/app/prb/sep-picker/list.vue create mode 100644 app/components/app/prb/sep-picker/picker-dialog.vue create mode 100644 app/components/app/vaccine-data/_common/select-date.vue create mode 100644 app/components/app/vaccine-data/_common/select-vaccine-type.vue create mode 100644 app/components/app/vaccine-data/detail.vue create mode 100644 app/components/app/vaccine-data/entry.vue create mode 100644 app/components/app/vaccine-data/list-doctor.cfg.ts create mode 100644 app/components/app/vaccine-data/list-nurse-physio.cfg.ts create mode 100644 app/components/app/vaccine-data/list.vue create mode 100644 app/components/content/prb/bpjs-list.vue create mode 100644 app/components/content/prb/detail.vue create mode 100644 app/components/content/prb/entry.vue create mode 100644 app/components/content/prb/list.vue create mode 100644 app/components/content/vaccine-data/detail.vue create mode 100644 app/components/content/vaccine-data/entry.vue create mode 100644 app/components/content/vaccine-data/list.vue create mode 100644 app/components/pub/my-ui/data/dropdown-action-choose.vue create mode 100644 app/components/pub/my-ui/data/dropdown-action-detail.vue create mode 100644 app/components/pub/my-ui/data/dropdown-action-print.vue create mode 100644 app/components/pub/my-ui/data/dropdown-action-upd.vue create mode 100644 app/handlers/prb.handler.ts create mode 100644 app/handlers/vaccine-data.handler.ts create mode 100644 app/models/prb.ts create mode 100644 app/models/vaccine-data.ts create mode 100644 app/pages/(features)/integration/bpjs/prb/[prb_id]/edit.vue create mode 100644 app/pages/(features)/integration/bpjs/prb/[prb_id]/index.vue create mode 100644 app/pages/(features)/integration/bpjs/prb/add.vue create mode 100644 app/pages/(features)/integration/bpjs/prb/index.vue create mode 100644 app/pages/(features)/rehab/encounter/[id]/prb/[prb_id]/edit.vue create mode 100644 app/pages/(features)/rehab/encounter/[id]/prb/[prb_id]/index.vue create mode 100644 app/pages/(features)/rehab/encounter/[id]/prb/add.vue create mode 100644 app/pages/(features)/rehab/encounter/[id]/vaccine-data/[vaccine_data_id]/index.vue create mode 100644 app/pages/(features)/rehab/encounter/[id]/vaccine-data/add.vue create mode 100644 app/schemas/prb-medicine.schema.ts create mode 100644 app/schemas/prb.schema.ts create mode 100644 app/schemas/vaccine-data.schema.ts create mode 100644 app/services/prb.service.ts create mode 100644 app/services/vaccine-data.service.ts diff --git a/app/components/app/prb/_common/btn-history.vue b/app/components/app/prb/_common/btn-history.vue new file mode 100644 index 00000000..972eab8e --- /dev/null +++ b/app/components/app/prb/_common/btn-history.vue @@ -0,0 +1,21 @@ + + + \ No newline at end of file diff --git a/app/components/app/prb/_common/filter.vue b/app/components/app/prb/_common/filter.vue new file mode 100644 index 00000000..d5e99b30 --- /dev/null +++ b/app/components/app/prb/_common/filter.vue @@ -0,0 +1,73 @@ + + + diff --git a/app/components/app/prb/_common/select-date.vue b/app/components/app/prb/_common/select-date.vue new file mode 100644 index 00000000..d94d04eb --- /dev/null +++ b/app/components/app/prb/_common/select-date.vue @@ -0,0 +1,119 @@ + + + diff --git a/app/components/app/prb/_common/select-dpjp.vue b/app/components/app/prb/_common/select-dpjp.vue new file mode 100644 index 00000000..9e83e64f --- /dev/null +++ b/app/components/app/prb/_common/select-dpjp.vue @@ -0,0 +1,86 @@ + + + diff --git a/app/components/app/prb/_common/select-medicine-form.vue b/app/components/app/prb/_common/select-medicine-form.vue new file mode 100644 index 00000000..9e83e64f --- /dev/null +++ b/app/components/app/prb/_common/select-medicine-form.vue @@ -0,0 +1,86 @@ + + + diff --git a/app/components/app/prb/_common/select-medicine.vue b/app/components/app/prb/_common/select-medicine.vue new file mode 100644 index 00000000..9e83e64f --- /dev/null +++ b/app/components/app/prb/_common/select-medicine.vue @@ -0,0 +1,86 @@ + + + diff --git a/app/components/app/prb/_common/select-program.vue b/app/components/app/prb/_common/select-program.vue new file mode 100644 index 00000000..cde3fb66 --- /dev/null +++ b/app/components/app/prb/_common/select-program.vue @@ -0,0 +1,77 @@ + + + diff --git a/app/components/app/prb/bpjs-list.cfg.ts b/app/components/app/prb/bpjs-list.cfg.ts new file mode 100644 index 00000000..92d68f73 --- /dev/null +++ b/app/components/app/prb/bpjs-list.cfg.ts @@ -0,0 +1,60 @@ +import type { Config } from '~/components/pub/my-ui/data-table' +import type { Patient } from '~/models/patient' +import { defineAsyncComponent } from 'vue' +import { educationCodes, genderCodes } from '~/lib/constants' +import { calculateAge } from '~/lib/utils' + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-upd.vue')) + +export const config: Config = { + cols: [{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {width: 50}, ], + + headers: [ + [ + { label: 'No. PRB' }, + { label: 'No. RM' }, + { label: 'Nama Pasien' }, + { label: 'Jenis Kelamin' }, + { label: 'Alamat' }, + { label: 'Klinik' }, + { label: 'Nama Dokter' }, + { label: 'Tanggal' }, + { label: 'Program PRB' }, + { label: 'No. SEP' }, + { label: 'Action' }, + ], + ], + + keys: ['date', 'name1', 'name2', 'name3', 'name4', 'name5', 'name6', 'name7', 'name8', 'name9', 'action'], + + delKeyNames: [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, + ], + + parses: { + date: (rec: unknown): unknown => { + const date = (rec as any).date + if (typeof date == 'object' && date) { + return (date as Date).toLocaleDateString('id-ID') + } else if (typeof date == 'string') { + return (date as string).substring(0, 10) + } + return date + }, + }, + + components: { + action(rec, idx) { + return { + idx, + rec: rec as object, + component: action, + } + }, + }, + + htmls: { + + }, +} diff --git a/app/components/app/prb/detail.vue b/app/components/app/prb/detail.vue new file mode 100644 index 00000000..7e40366d --- /dev/null +++ b/app/components/app/prb/detail.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/app/components/app/prb/entry.vue b/app/components/app/prb/entry.vue new file mode 100644 index 00000000..4658578a --- /dev/null +++ b/app/components/app/prb/entry.vue @@ -0,0 +1,102 @@ + + + diff --git a/app/components/app/prb/history-list.cfg.ts b/app/components/app/prb/history-list.cfg.ts new file mode 100644 index 00000000..6f571af3 --- /dev/null +++ b/app/components/app/prb/history-list.cfg.ts @@ -0,0 +1,62 @@ +import type { Config } from '~/components/pub/my-ui/data-table' +import { defineAsyncComponent } from 'vue' + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-print.vue')) +const statusBadge = defineAsyncComponent(() => import('~/components/pub/my-ui/badge/status-badge.vue')) + +export const config: Config = { + cols: [{}, {}, {}, {}, {}, {}, {width: 100}, {width: 50}, ], + + headers: [ + [ + { label: 'Tgl Diterbitkan' }, + { label: 'Kode Obat' }, + { label: 'Nama Obat' }, + { label: 'Signa' }, + { label: 'Jumlah' }, + { label: 'Durasi Pemberian' }, + { label: 'status' }, + { label: 'Action' }, + ], + ], + + keys: ['date', 'name1', 'name2', 'name3', 'name4', 'name5', 'status', 'action'], + + delKeyNames: [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, + ], + + parses: { + date: (rec: unknown): unknown => { + const date = (rec as any).date + if (typeof date == 'object' && date) { + return (date as Date).toLocaleDateString('id-ID') + } else if (typeof date == 'string') { + return (date as string).substring(0, 10) + } + return date + }, + }, + + components: { + action(rec, idx) { + return { + idx, + rec: rec as object, + component: action, + } + }, + status(rec, idx) { + return { + idx, + rec: rec as object, + component: statusBadge, + } + }, + }, + + htmls: { + + }, +} diff --git a/app/components/app/prb/history-list.vue b/app/components/app/prb/history-list.vue new file mode 100644 index 00000000..20cc7eaf --- /dev/null +++ b/app/components/app/prb/history-list.vue @@ -0,0 +1,35 @@ + + + \ No newline at end of file diff --git a/app/components/app/prb/list.cfg.ts b/app/components/app/prb/list.cfg.ts new file mode 100644 index 00000000..4da07cdd --- /dev/null +++ b/app/components/app/prb/list.cfg.ts @@ -0,0 +1,56 @@ +import type { Config } from '~/components/pub/my-ui/data-table' +import type { Patient } from '~/models/patient' +import { defineAsyncComponent } from 'vue' +import { educationCodes, genderCodes } from '~/lib/constants' +import { calculateAge } from '~/lib/utils' + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-upd.vue')) + +export const config: Config = { + cols: [{}, {}, {}, {}, {}, {}, {width: 50}, ], + + headers: [ + [ + { label: 'Tgl Diterbitkan' }, + { label: 'Kode Obat' }, + { label: 'Nama Obat' }, + { label: 'Signa' }, + { label: 'Jumlah' }, + { label: 'Durasi Pemberian' }, + { label: 'Action' }, + ], + ], + + keys: ['date', 'name1', 'name2', 'name3', 'name4', 'name5', 'action'], + + delKeyNames: [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, + ], + + parses: { + date: (rec: unknown): unknown => { + const date = (rec as any).date + if (typeof date == 'object' && date) { + return (date as Date).toLocaleDateString('id-ID') + } else if (typeof date == 'string') { + return (date as string).substring(0, 10) + } + return date + }, + }, + + components: { + action(rec, idx) { + return { + idx, + rec: rec as object, + component: action, + } + }, + }, + + htmls: { + + }, +} diff --git a/app/components/app/prb/list.vue b/app/components/app/prb/list.vue new file mode 100644 index 00000000..5e51b50f --- /dev/null +++ b/app/components/app/prb/list.vue @@ -0,0 +1,34 @@ + + + diff --git a/app/components/app/prb/obat-picker/form.vue b/app/components/app/prb/obat-picker/form.vue new file mode 100644 index 00000000..510cae69 --- /dev/null +++ b/app/components/app/prb/obat-picker/form.vue @@ -0,0 +1,114 @@ + + + \ No newline at end of file diff --git a/app/components/app/prb/obat-picker/picker-dialog.vue b/app/components/app/prb/obat-picker/picker-dialog.vue new file mode 100644 index 00000000..69ea3b90 --- /dev/null +++ b/app/components/app/prb/obat-picker/picker-dialog.vue @@ -0,0 +1,140 @@ + + + diff --git a/app/components/app/prb/sep-picker/list.cfg.ts b/app/components/app/prb/sep-picker/list.cfg.ts new file mode 100644 index 00000000..5a928e2d --- /dev/null +++ b/app/components/app/prb/sep-picker/list.cfg.ts @@ -0,0 +1,83 @@ +import type { Config } from '~/components/pub/my-ui/data-table' +import { defineAsyncComponent } from 'vue' + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-choose.vue')) +const statusBadge = defineAsyncComponent(() => import('~/components/pub/my-ui/badge/status-badge.vue')) + +export const config: Config = { + cols: [ + { width: 120 }, // TGL. SEP + { width: 150 }, // NO. SEP + { width: 120 }, // PELAYANAN + { width: 100 }, // JALUR + { width: 150 }, // NO. RM + { width: 200 }, // NAMA PASIEN + { width: 150 }, // NO. KARTU BPJS + { width: 150 }, // NO. SURAT KONTROL + { width: 150 }, // TGL SURAT KONTROL + { width: 150 }, // KLINIK TUJUAN + { width: 200 }, // DPJP + { width: 200 }, // DIAGNOSIS AWAL + { width: 100 }, // AKSI + ], + + headers: [ + [ + { label: 'TGL. SEP' }, + { label: 'NO. SEP' }, + { label: 'PELAYANAN' }, + { label: 'JALUR' }, + { label: 'NO. RM' }, + { label: 'NAMA PASIEN' }, + { label: 'NO. KARTU BPJS' }, + { label: 'NO. SURAT KONTROL' }, + { label: 'TGL SURAT KONTROL' }, + { label: 'KLINIK TUJUAN' }, + { label: 'DPJP' }, + { label: 'DIAGNOSIS AWAL' }, + { label: 'AKSI' }, + ], + ], + + keys: [ + 'letterDate', + 'letterNumber', + 'serviceType', + 'flow', + 'medicalRecordNumber', + 'patientName', + 'cardNumber', + 'controlLetterNumber', + 'controlLetterDate', + 'clinicDestination', + 'attendingDoctor', + 'diagnosis', + 'action', + ], + + delKeyNames: [ + { key: 'letterNumber', label: 'NO. SEP' }, + { key: 'patientName', label: 'Nama Pasien' }, + ], + + parses: {}, + + components: { + action(rec, idx) { + return { + idx, + rec: rec as object, + component: action, + } + }, + status(rec, idx) { + return { + idx, + rec: rec as object, + component: statusBadge, + } + }, + }, + + htmls: {}, +} \ No newline at end of file diff --git a/app/components/app/prb/sep-picker/list.vue b/app/components/app/prb/sep-picker/list.vue new file mode 100644 index 00000000..9c8aa593 --- /dev/null +++ b/app/components/app/prb/sep-picker/list.vue @@ -0,0 +1,53 @@ + + + diff --git a/app/components/app/prb/sep-picker/picker-dialog.vue b/app/components/app/prb/sep-picker/picker-dialog.vue new file mode 100644 index 00000000..efb32023 --- /dev/null +++ b/app/components/app/prb/sep-picker/picker-dialog.vue @@ -0,0 +1,141 @@ + + + diff --git a/app/components/app/vaccine-data/_common/select-date.vue b/app/components/app/vaccine-data/_common/select-date.vue new file mode 100644 index 00000000..d94d04eb --- /dev/null +++ b/app/components/app/vaccine-data/_common/select-date.vue @@ -0,0 +1,119 @@ + + + diff --git a/app/components/app/vaccine-data/_common/select-vaccine-type.vue b/app/components/app/vaccine-data/_common/select-vaccine-type.vue new file mode 100644 index 00000000..cde3fb66 --- /dev/null +++ b/app/components/app/vaccine-data/_common/select-vaccine-type.vue @@ -0,0 +1,77 @@ + + + diff --git a/app/components/app/vaccine-data/detail.vue b/app/components/app/vaccine-data/detail.vue new file mode 100644 index 00000000..2c79e461 --- /dev/null +++ b/app/components/app/vaccine-data/detail.vue @@ -0,0 +1,68 @@ + + + + + diff --git a/app/components/app/vaccine-data/entry.vue b/app/components/app/vaccine-data/entry.vue new file mode 100644 index 00000000..4b8f291b --- /dev/null +++ b/app/components/app/vaccine-data/entry.vue @@ -0,0 +1,82 @@ + + + diff --git a/app/components/app/vaccine-data/list-doctor.cfg.ts b/app/components/app/vaccine-data/list-doctor.cfg.ts new file mode 100644 index 00000000..be938aa5 --- /dev/null +++ b/app/components/app/vaccine-data/list-doctor.cfg.ts @@ -0,0 +1,53 @@ +import type { Config } from '~/components/pub/my-ui/data-table' +import { defineAsyncComponent } from 'vue' +import actionDoctor from '~/components/pub/my-ui/data/dropdown-action-dd.vue' +import actionNursePhysio from '~/components/pub/my-ui/data/dropdown-action-detail.vue' + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dd.vue')) + +export const config: Config = { + cols: [{}, {}, {}, {}, {width: 50}, ], + + headers: [ + [ + { label: 'Jenis Vaksin' }, + { label: 'Tanggal Pemberian Vaksin' }, + { label: 'Tanggal Kedaluwarsa Vaksin' }, + { label: 'Dosis Ke' }, + { label: 'Action' }, + ], + ], + + keys: ['name1', 'date', 'date', 'name2', 'action'], + + delKeyNames: [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, + ], + + parses: { + date: (rec: unknown): unknown => { + const date = (rec as any).date + if (typeof date == 'object' && date) { + return (date as Date).toLocaleDateString('id-ID') + } else if (typeof date == 'string') { + return (date as string).substring(0, 10) + } + return date + }, + }, + + components: { + action(rec, idx) { + return { + idx, + rec: rec as object, + component: action, + } + }, + }, + + htmls: { + + }, +} diff --git a/app/components/app/vaccine-data/list-nurse-physio.cfg.ts b/app/components/app/vaccine-data/list-nurse-physio.cfg.ts new file mode 100644 index 00000000..acfc698c --- /dev/null +++ b/app/components/app/vaccine-data/list-nurse-physio.cfg.ts @@ -0,0 +1,53 @@ +import type { Config } from '~/components/pub/my-ui/data-table' +import { defineAsyncComponent } from 'vue' +import actionDoctor from '~/components/pub/my-ui/data/dropdown-action-dd.vue' +import actionNursePhysio from '~/components/pub/my-ui/data/dropdown-action-detail.vue' + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-detail.vue')) + +export const config: Config = { + cols: [{}, {}, {}, {}, {width: 50}, ], + + headers: [ + [ + { label: 'Jenis Vaksin' }, + { label: 'Tanggal Pemberian Vaksin' }, + { label: 'Tanggal Kedaluwarsa Vaksin' }, + { label: 'Dosis Ke' }, + { label: 'Action' }, + ], + ], + + keys: ['name1', 'date', 'date', 'name2', 'action'], + + delKeyNames: [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, + ], + + parses: { + date: (rec: unknown): unknown => { + const date = (rec as any).date + if (typeof date == 'object' && date) { + return (date as Date).toLocaleDateString('id-ID') + } else if (typeof date == 'string') { + return (date as string).substring(0, 10) + } + return date + }, + }, + + components: { + action(rec, idx) { + return { + idx, + rec: rec as object, + component: action, + } + }, + }, + + htmls: { + + }, +} diff --git a/app/components/app/vaccine-data/list.vue b/app/components/app/vaccine-data/list.vue new file mode 100644 index 00000000..7960112b --- /dev/null +++ b/app/components/app/vaccine-data/list.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/components/content/encounter/process-bu.vue b/app/components/content/encounter/process-bu.vue index 02fc7495..8285d5e6 100644 --- a/app/components/content/encounter/process-bu.vue +++ b/app/components/content/encounter/process-bu.vue @@ -26,6 +26,7 @@ import DocUploadList from '~/components/content/document-upload/list.vue' import GeneralConsentList from '~/components/content/general-consent/entry.vue' import ResumeList from '~/components/content/resume/list.vue' import ControlLetterList from '~/components/content/control-letter/list.vue' +import VaccineDataList from '~/components/content/vaccine-data/list.vue' const route = useRoute() const router = useRouter() @@ -96,6 +97,7 @@ const tabs: TabItem[] = [ component: DocUploadList, props: { encounter: data }, }, + { value: 'vaccine-data', label: 'Data Vaksin', component: VaccineDataList, props: { encounter: data } }, ] diff --git a/app/components/content/encounter/process.vue b/app/components/content/encounter/process.vue index b9e8355f..52698dd9 100644 --- a/app/components/content/encounter/process.vue +++ b/app/components/content/encounter/process.vue @@ -139,4 +139,4 @@ async function getData() { - + \ No newline at end of file diff --git a/app/components/content/prb/bpjs-list.vue b/app/components/content/prb/bpjs-list.vue new file mode 100644 index 00000000..8ce0d050 --- /dev/null +++ b/app/components/content/prb/bpjs-list.vue @@ -0,0 +1,225 @@ + + + diff --git a/app/components/content/prb/detail.vue b/app/components/content/prb/detail.vue new file mode 100644 index 00000000..4de8f260 --- /dev/null +++ b/app/components/content/prb/detail.vue @@ -0,0 +1,65 @@ + + + diff --git a/app/components/content/prb/entry.vue b/app/components/content/prb/entry.vue new file mode 100644 index 00000000..244c49b0 --- /dev/null +++ b/app/components/content/prb/entry.vue @@ -0,0 +1,160 @@ + + + + + diff --git a/app/components/content/prb/list.vue b/app/components/content/prb/list.vue new file mode 100644 index 00000000..a1c09696 --- /dev/null +++ b/app/components/content/prb/list.vue @@ -0,0 +1,202 @@ + + + diff --git a/app/components/content/vaccine-data/detail.vue b/app/components/content/vaccine-data/detail.vue new file mode 100644 index 00000000..fd977b39 --- /dev/null +++ b/app/components/content/vaccine-data/detail.vue @@ -0,0 +1,65 @@ + + + diff --git a/app/components/content/vaccine-data/entry.vue b/app/components/content/vaccine-data/entry.vue new file mode 100644 index 00000000..60fe3775 --- /dev/null +++ b/app/components/content/vaccine-data/entry.vue @@ -0,0 +1,159 @@ + + + + + diff --git a/app/components/content/vaccine-data/list.vue b/app/components/content/vaccine-data/list.vue new file mode 100644 index 00000000..a701271e --- /dev/null +++ b/app/components/content/vaccine-data/list.vue @@ -0,0 +1,165 @@ + + + diff --git a/app/components/pub/my-ui/data/dropdown-action-choose.vue b/app/components/pub/my-ui/data/dropdown-action-choose.vue new file mode 100644 index 00000000..8fb63f33 --- /dev/null +++ b/app/components/pub/my-ui/data/dropdown-action-choose.vue @@ -0,0 +1,30 @@ + + + diff --git a/app/components/pub/my-ui/data/dropdown-action-detail.vue b/app/components/pub/my-ui/data/dropdown-action-detail.vue new file mode 100644 index 00000000..b695fb5c --- /dev/null +++ b/app/components/pub/my-ui/data/dropdown-action-detail.vue @@ -0,0 +1,30 @@ + + + diff --git a/app/components/pub/my-ui/data/dropdown-action-print.vue b/app/components/pub/my-ui/data/dropdown-action-print.vue new file mode 100644 index 00000000..99a7da03 --- /dev/null +++ b/app/components/pub/my-ui/data/dropdown-action-print.vue @@ -0,0 +1,31 @@ + + + diff --git a/app/components/pub/my-ui/data/dropdown-action-upd.vue b/app/components/pub/my-ui/data/dropdown-action-upd.vue new file mode 100644 index 00000000..611e53d2 --- /dev/null +++ b/app/components/pub/my-ui/data/dropdown-action-upd.vue @@ -0,0 +1,94 @@ + + + diff --git a/app/handlers/prb.handler.ts b/app/handlers/prb.handler.ts new file mode 100644 index 00000000..bfff163b --- /dev/null +++ b/app/handlers/prb.handler.ts @@ -0,0 +1,24 @@ +// Handlers +import { genCrudHandler } from '~/handlers/_handler' + +// Services +import { create, update, remove } from '~/services/prb.service' + +export const { + recId, + recAction, + recItem, + isReadonly, + isProcessing, + isFormEntryDialogOpen, + isRecordConfirmationOpen, + onResetState, + handleActionSave, + handleActionEdit, + handleActionRemove, + handleCancelForm, +} = genCrudHandler({ + create, + update, + remove, +}) diff --git a/app/handlers/vaccine-data.handler.ts b/app/handlers/vaccine-data.handler.ts new file mode 100644 index 00000000..7f5fa1b6 --- /dev/null +++ b/app/handlers/vaccine-data.handler.ts @@ -0,0 +1,24 @@ +// Handlers +import { genCrudHandler } from '~/handlers/_handler' + +// Services +import { create, update, remove } from '~/services/vaccine-data.service' + +export const { + recId, + recAction, + recItem, + isReadonly, + isProcessing, + isFormEntryDialogOpen, + isRecordConfirmationOpen, + onResetState, + handleActionSave, + handleActionEdit, + handleActionRemove, + handleCancelForm, +} = genCrudHandler({ + create, + update, + remove, +}) diff --git a/app/lib/constants.ts b/app/lib/constants.ts index c7daf608..a1b0ff01 100644 --- a/app/lib/constants.ts +++ b/app/lib/constants.ts @@ -486,4 +486,16 @@ export const SpecimenTypeOptList: { label: string; value: SpecimenType }[] = [ { label: 'Mikrobiologi', value: 'mikrobiologi' }, { label: 'Laborat', value: 'laborat' }, { label: 'Tidak perlu', value: 'tidak perlu' }, +] + +export type PrbProgramType = "ashma" | "diabetes mellitus" | "hipertensi" | "penyakit jantung" | "ppok" | "schizopherenia" | "stroke" | "systemic lupus erythematosus" +export const PrbProgramTypeOptList: { label: string; value: PrbProgramType }[] = [ + { label: 'ASHMA', value: 'ashma' }, + { label: 'Diabetes Mellitus', value: 'diabetes mellitus' }, + { label: 'Hipertensi', value: 'hipertensi' }, + { label: 'Penyakit Jantung', value: 'penyakit jantung' }, + { label: 'PPOK (Penyakit Paru Obstruktif Kronik)', value: 'ppok' }, + { label: 'Schizopherenia', value: 'schizopherenia' }, + { label: 'Stroke', value: 'stroke' }, + { label: 'Systemic Lupus Erythematosus', value: 'systemic lupus erythematosus' }, ] \ No newline at end of file diff --git a/app/lib/utils.ts b/app/lib/utils.ts index e201a439..180320ae 100644 --- a/app/lib/utils.ts +++ b/app/lib/utils.ts @@ -1,5 +1,6 @@ import type { ClassValue } from 'clsx' import { clsx } from 'clsx' +import { format } from 'date-fns' import { twMerge } from 'tailwind-merge' import { toast } from '~/components/pub/ui/toast' @@ -106,6 +107,11 @@ export function calculateAge(birthDate: Date | string | null | undefined): strin } } +export function formatDateToDatetimeLocal(inputDate: Date) { + const formattedString = format(inputDate, "yyyy-MM-dd'T'HH:mm") + return formattedString +} + /** * Converts a plain JavaScript object (including File objects) into a FormData instance. diff --git a/app/models/prb.ts b/app/models/prb.ts new file mode 100644 index 00000000..2997b5b3 --- /dev/null +++ b/app/models/prb.ts @@ -0,0 +1,37 @@ +import { type Base, genBase } from "./_base" +import { genDoctor, type Doctor } from "./doctor" +import { genEncounter, type Encounter } from "./encounter" +import { genSpecialist, type Specialist } from "./specialist" +import { genSubspecialist, type Subspecialist } from "./subspecialist" +import { genUnit, type Unit } from "./unit" + +export interface Prb extends Base { + encounter_id: number + encounter: Encounter + unit_id: number + unit: Unit + specialist_id: number + specialist: Specialist + subspecialist_id: number + subspecialist: Subspecialist + doctor_id: number + doctor: Doctor + date: '' +} + +export function genPrb(): Prb { + return { + ...genBase(), + encounter_id: 0, + encounter: genEncounter(), + unit_id: 0, + unit: genUnit(), + specialist_id: 0, + specialist: genSpecialist(), + subspecialist_id: 0, + subspecialist: genSubspecialist(), + doctor_id: 0, + doctor: genDoctor(), + date: '' + } +} diff --git a/app/models/vaccine-data.ts b/app/models/vaccine-data.ts new file mode 100644 index 00000000..86032b2a --- /dev/null +++ b/app/models/vaccine-data.ts @@ -0,0 +1,37 @@ +import { type Base, genBase } from "./_base" +import { genDoctor, type Doctor } from "./doctor" +import { genEncounter, type Encounter } from "./encounter" +import { genSpecialist, type Specialist } from "./specialist" +import { genSubspecialist, type Subspecialist } from "./subspecialist" +import { genUnit, type Unit } from "./unit" + +export interface VaccineData extends Base { + encounter_id: number + encounter: Encounter + unit_id: number + unit: Unit + specialist_id: number + specialist: Specialist + subspecialist_id: number + subspecialist: Subspecialist + doctor_id: number + doctor: Doctor + date: '' +} + +export function genVaccineData(): VaccineData { + return { + ...genBase(), + encounter_id: 0, + encounter: genEncounter(), + unit_id: 0, + unit: genUnit(), + specialist_id: 0, + specialist: genSpecialist(), + subspecialist_id: 0, + subspecialist: genSubspecialist(), + doctor_id: 0, + doctor: genDoctor(), + date: '' + } +} diff --git a/app/pages/(features)/integration/bpjs/prb/[prb_id]/edit.vue b/app/pages/(features)/integration/bpjs/prb/[prb_id]/edit.vue new file mode 100644 index 00000000..abf741bf --- /dev/null +++ b/app/pages/(features)/integration/bpjs/prb/[prb_id]/edit.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/pages/(features)/integration/bpjs/prb/[prb_id]/index.vue b/app/pages/(features)/integration/bpjs/prb/[prb_id]/index.vue new file mode 100644 index 00000000..1d66b563 --- /dev/null +++ b/app/pages/(features)/integration/bpjs/prb/[prb_id]/index.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/pages/(features)/integration/bpjs/prb/add.vue b/app/pages/(features)/integration/bpjs/prb/add.vue new file mode 100644 index 00000000..19b029f9 --- /dev/null +++ b/app/pages/(features)/integration/bpjs/prb/add.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/pages/(features)/integration/bpjs/prb/index.vue b/app/pages/(features)/integration/bpjs/prb/index.vue new file mode 100644 index 00000000..7a6ca683 --- /dev/null +++ b/app/pages/(features)/integration/bpjs/prb/index.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/pages/(features)/rehab/encounter/[id]/prb/[prb_id]/edit.vue b/app/pages/(features)/rehab/encounter/[id]/prb/[prb_id]/edit.vue new file mode 100644 index 00000000..e1059769 --- /dev/null +++ b/app/pages/(features)/rehab/encounter/[id]/prb/[prb_id]/edit.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/pages/(features)/rehab/encounter/[id]/prb/[prb_id]/index.vue b/app/pages/(features)/rehab/encounter/[id]/prb/[prb_id]/index.vue new file mode 100644 index 00000000..1d66b563 --- /dev/null +++ b/app/pages/(features)/rehab/encounter/[id]/prb/[prb_id]/index.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/pages/(features)/rehab/encounter/[id]/prb/add.vue b/app/pages/(features)/rehab/encounter/[id]/prb/add.vue new file mode 100644 index 00000000..b168fcb5 --- /dev/null +++ b/app/pages/(features)/rehab/encounter/[id]/prb/add.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/pages/(features)/rehab/encounter/[id]/process.vue b/app/pages/(features)/rehab/encounter/[id]/process.vue index 68cc7c02..02246607 100644 --- a/app/pages/(features)/rehab/encounter/[id]/process.vue +++ b/app/pages/(features)/rehab/encounter/[id]/process.vue @@ -2,7 +2,7 @@ import type { PagePermission } from '~/models/role' import Error from '~/components/pub/my-ui/error/error.vue' import { PAGE_PERMISSIONS } from '~/lib/page-permission' -import EncounterProcess from '~/components/content/encounter/process.vue' +import EncounterProcess from '~/components/content/encounter/process-bu.vue' definePageMeta({ middleware: ['rbac'], diff --git a/app/pages/(features)/rehab/encounter/[id]/vaccine-data/[vaccine_data_id]/index.vue b/app/pages/(features)/rehab/encounter/[id]/vaccine-data/[vaccine_data_id]/index.vue new file mode 100644 index 00000000..322d0ad8 --- /dev/null +++ b/app/pages/(features)/rehab/encounter/[id]/vaccine-data/[vaccine_data_id]/index.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/pages/(features)/rehab/encounter/[id]/vaccine-data/add.vue b/app/pages/(features)/rehab/encounter/[id]/vaccine-data/add.vue new file mode 100644 index 00000000..df4c33b9 --- /dev/null +++ b/app/pages/(features)/rehab/encounter/[id]/vaccine-data/add.vue @@ -0,0 +1,41 @@ + + + diff --git a/app/schemas/prb-medicine.schema.ts b/app/schemas/prb-medicine.schema.ts new file mode 100644 index 00000000..32b7b9c5 --- /dev/null +++ b/app/schemas/prb-medicine.schema.ts @@ -0,0 +1,27 @@ +import { z } from 'zod' + +const PrbMedicineSchema = z.object({ + a1: z.string({ + required_error: 'Mohon isi', + }).optional(), + a2: z.string({ + required_error: 'Mohon isi', + }), + a3: z.string({ + required_error: 'Mohon isi', + }), + a4: z.string({ + required_error: 'Mohon isi', + }).optional(), + a5: z.string({ + required_error: 'Mohon isi', + }), + a6: z.string({ + required_error: 'Mohon isi', + }), +}) + +type PrbMedicineFormData = z.infer + +export { PrbMedicineSchema } +export type { PrbMedicineFormData } diff --git a/app/schemas/prb.schema.ts b/app/schemas/prb.schema.ts new file mode 100644 index 00000000..2cbb88a8 --- /dev/null +++ b/app/schemas/prb.schema.ts @@ -0,0 +1,47 @@ +import { z } from 'zod' + +const PrbSchema = z.object({ + sepStatus: z.string({ + required_error: 'Mohon isi status SEP', + }).default('SEP Internal'), + unit_code: z.string({ + required_error: 'Mohon isi Unit', + }), + specialist_code: z.string({ + required_error: 'Mohon isi Spesialis', + }), + subspecialist_code: z.string({ + required_error: 'Mohon isi Sub Spesialis', + }), + doctor_code: z.string({ + required_error: 'Mohon isi DPJP', + }), + encounter_code: z.string().optional(), + date: z.string({ + required_error: 'Mohon lengkapi Tanggal Kontrol', + }) + .refine( + (date) => { + // Jika kosong, return false untuk required validation + if (!date || date.trim() === '') return false + + // Jika ada isi, validasi format tanggal + try { + const dateObj = new Date(date) + // Cek apakah tanggal valid dan tahun >= 1900 + return !isNaN(dateObj.getTime()) && dateObj.getFullYear() >= 1900 + } catch { + return false + } + }, + { + message: 'Mohon lengkapi Tanggal Kontrol dengan format yang valid', + }, + ) + .transform((dateStr) => new Date(dateStr).toISOString()), +}) + +type PrbFormData = z.infer + +export { PrbSchema } +export type { PrbFormData } diff --git a/app/schemas/vaccine-data.schema.ts b/app/schemas/vaccine-data.schema.ts new file mode 100644 index 00000000..0a31dae8 --- /dev/null +++ b/app/schemas/vaccine-data.schema.ts @@ -0,0 +1,47 @@ +import { z } from 'zod' + +const VaccineDataSchema = z.object({ + sepStatus: z.string({ + required_error: 'Mohon isi status SEP', + }).default('SEP Internal'), + unit_code: z.string({ + required_error: 'Mohon isi Unit', + }), + specialist_code: z.string({ + required_error: 'Mohon isi Spesialis', + }), + subspecialist_code: z.string({ + required_error: 'Mohon isi Sub Spesialis', + }), + doctor_code: z.string({ + required_error: 'Mohon isi DPJP', + }), + encounter_code: z.string().optional(), + date: z.string({ + required_error: 'Mohon lengkapi Tanggal Kontrol', + }) + .refine( + (date) => { + // Jika kosong, return false untuk required validation + if (!date || date.trim() === '') return false + + // Jika ada isi, validasi format tanggal + try { + const dateObj = new Date(date) + // Cek apakah tanggal valid dan tahun >= 1900 + return !isNaN(dateObj.getTime()) && dateObj.getFullYear() >= 1900 + } catch { + return false + } + }, + { + message: 'Mohon lengkapi Tanggal Kontrol dengan format yang valid', + }, + ) + .transform((dateStr) => new Date(dateStr).toISOString()), +}) + +type VaccineDataFormData = z.infer + +export { VaccineDataSchema } +export type { VaccineDataFormData } diff --git a/app/services/medicine.service.ts b/app/services/medicine.service.ts index 57a52103..00ea34e3 100644 --- a/app/services/medicine.service.ts +++ b/app/services/medicine.service.ts @@ -1,4 +1,5 @@ // Base +import type { Medicine } from '~/models/medicine' import * as base from './_crud-base' const path = '/api/v1/medicine' @@ -23,3 +24,16 @@ export function update(id: number | string, data: any) { export function remove(id: number | string) { return base.remove(path, id, name) } + +export async function getValueLabelList(params: any = null): Promise<{ value: string; label: string }[]> { + let data: { value: string; label: string }[] = [] + const result = await getList(params) + if (result.success) { + const resultData = result.body?.data || [] + data = resultData.map((item: Medicine) => ({ + value: item.code, + label: item.name, + })) + } + return data +} \ No newline at end of file diff --git a/app/services/prb.service.ts b/app/services/prb.service.ts new file mode 100644 index 00000000..865a0b99 --- /dev/null +++ b/app/services/prb.service.ts @@ -0,0 +1,28 @@ +// Base +import * as base from './_crud-base' + +// Constants +import { encounterClassCodes } from '~/lib/constants' + +const path = '/api/v1/prb' +const name = 'prb' + +export function create(data: any) { + return base.create(path, data, name) +} + +export function getList(params: any = null) { + return base.getList(path, params, name) +} + +export function getDetail(id: number | string, params?: any) { + return base.getDetail(path, id, name, params) +} + +export function update(id: number | string, data: any) { + return base.update(path, id, data, name) +} + +export function remove(id: number | string) { + return base.remove(path, id, name) +} \ No newline at end of file diff --git a/app/services/vaccine-data.service.ts b/app/services/vaccine-data.service.ts new file mode 100644 index 00000000..6e8aaa89 --- /dev/null +++ b/app/services/vaccine-data.service.ts @@ -0,0 +1,28 @@ +// Base +import * as base from './_crud-base' + +// Constants +import { encounterClassCodes } from '~/lib/constants' + +const path = '/api/v1/vaccine-data' +const name = 'vaccine-data' + +export function create(data: any) { + return base.create(path, data, name) +} + +export function getList(params: any = null) { + return base.getList(path, params, name) +} + +export function getDetail(id: number | string, params?: any) { + return base.getDetail(path, id, name, params) +} + +export function update(id: number | string, data: any) { + return base.update(path, id, data, name) +} + +export function remove(id: number | string) { + return base.remove(path, id, name) +} \ No newline at end of file diff --git a/public/side-menu-items/system.json b/public/side-menu-items/system.json index c46775aa..19d20336 100644 --- a/public/side-menu-items/system.json +++ b/public/side-menu-items/system.json @@ -200,6 +200,11 @@ "icon": "i-lucide-circuit-board", "link": "/integration/bpjs-vclaim/member" }, + { + "title": "PRB", + "icon": "i-lucide-circuit-board", + "link": "/integration/bpjs/prb" + }, { "title": "Surat Kontrol", "icon": "i-lucide-circuit-board", From 32972bd9dbb92404255cc79ff74478a57420afe9 Mon Sep 17 00:00:00 2001 From: Hasyim Kai Date: Thu, 4 Dec 2025 09:57:18 +0700 Subject: [PATCH 2/4] Squashed commit of the following: commit 8e3ea9e8d1d7e3b06bc6e53e0b97f62222276171 Author: hasyim_kai Date: Thu Nov 20 16:14:03 2025 +0700 Feat: UI control letter history commit f11f97f936447bdb225918abb43313f8db540d67 Author: hasyim_kai Date: Thu Nov 20 15:18:25 2025 +0700 Squashed commit of the following: commit dab6adc4a98820d8686c5a336172af586b883c24 Author: hasyim_kai Date: Tue Nov 18 11:19:48 2025 +0700 Fix: add role authorization in Resume commit c28fc8f7aa54048472b535ac7ccd916d5b0769c2 Merge: 7ed1cc8 bcfb4c1 Author: Muhammad Hasyim Chaidir Ali <68959522+Hasyim-Kai@users.noreply.github.com> Date: Tue Nov 18 09:02:16 2025 +0700 Merge branch 'dev' into feat/resume-81 commit 7ed1cc83bfa62d8c9660ff1ee61b1f96661ef45a Author: hasyim_kai Date: Mon Nov 17 15:04:01 2025 +0700 Feat: add doc preview in Resume List commit bcfb4c1456b7b58c63d4969985200ceca72aee16 Merge: 1cbde57 975c87d Author: Munawwirul Jamal <57973347+munaja@users.noreply.github.com> Date: Mon Nov 17 11:15:14 2025 +0700 Merge pull request #147 from dikstub-rssa/feat/surat-kontrol-135 Feat: Integration Rehab Medik - Surat Kontrol commit 15ab43c1b143627892df2a9f82f418091b55ed7f Author: hasyim_kai Date: Mon Nov 17 10:38:21 2025 +0700 Feat: add verification capthca and form adjustment commit 53bd8e7f6e2b22b03690947f52b42744a17703ee Author: hasyim_kai Date: Fri Nov 7 08:55:23 2025 +0700 Fix: refactor rehab medik - Resume UI commit fc308809b848512a664659a51475e634e08f06f4 Author: hasyim_kai Date: Wed Oct 29 14:57:19 2025 +0700 Feat: add UI Rehab Medik > Proses > Resume commit 9b383a543703f9331a7ff90d81abe16717a39884 Merge: a4dc7d7 831749a Author: Muhammad Hasyim Chaidir Ali <68959522+Hasyim-Kai@users.noreply.github.com> Date: Wed Oct 29 13:32:47 2025 +0700 Merge pull request #139 from dikstub-rssa/dev Update branch feat/resume-81 commit 2b7bea70d66e8472220a2a2406889fc489cc1ebd Author: hasyim_kai Date: Tue Nov 18 11:20:51 2025 +0700 Fix: Typo in Control Letter commit 808e91527cf95de2a47387bb792a3af2e16d907b Author: hasyim_kai Date: Tue Nov 18 10:59:50 2025 +0700 Fix: add role authorization in Control Letter --- app/components/content/control-letter/list.vue | 6 +++--- app/lib/utils.ts | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/components/content/control-letter/list.vue b/app/components/content/control-letter/list.vue index 9be22012..5a879eb4 100644 --- a/app/components/content/control-letter/list.vue +++ b/app/components/content/control-letter/list.vue @@ -143,7 +143,7 @@ watch([recId, recAction, timestamp], () => { break case ActionEvents.showEdit: - if(pagePermission.canUpdate){ + if(pagePermission.canUpdate){ navigateTo({ name: 'rehab-encounter-id-control-letter-control_letter_id-edit', params: { id: encounterId, "control_letter_id": recId.value }, @@ -186,7 +186,7 @@ watch([recId, recAction, timestamp], () => { @click="isHistoryDialogOpen = true"> Riwayat Program Nasional - + @@ -212,7 +212,7 @@ watch([recId, recAction, timestamp], () => { - + { value: string From 3413e882dee5bb15c6e10071d86d5576df38c0e3 Mon Sep 17 00:00:00 2001 From: Hasyim Kai Date: Thu, 4 Dec 2025 11:41:43 +0700 Subject: [PATCH 3/4] Feat: add UIs to sidebar --- app/handlers/encounter-init.handler.ts | 37 +++++++++++++--- app/lib/utils.ts | 1 - .../document-upload/[document_id]/edit.vue | 41 ++++++++++++++++++ .../encounter/[id]/document-upload/add.vue | 42 +++++++++++++++++++ .../vaccine-data/[vaccine_data_id]/index.vue | 2 +- 5 files changed, 115 insertions(+), 8 deletions(-) create mode 100644 app/pages/(features)/rehab/encounter/[id]/document-upload/[document_id]/edit.vue create mode 100644 app/pages/(features)/rehab/encounter/[id]/document-upload/add.vue diff --git a/app/handlers/encounter-init.handler.ts b/app/handlers/encounter-init.handler.ts index 3e1e85f3..a7f5712d 100644 --- a/app/handlers/encounter-init.handler.ts +++ b/app/handlers/encounter-init.handler.ts @@ -47,6 +47,10 @@ const DocUploadListAsync = defineAsyncComponent(() => import('~/components/conte const GeneralConsentListAsync = defineAsyncComponent(() => import('~/components/content/general-consent/entry.vue')) const ResumeListAsync = defineAsyncComponent(() => import('~/components/content/resume/list.vue')) const ControlLetterListAsync = defineAsyncComponent(() => import('~/components/content/control-letter/list.vue')) +const KfrListAsync = defineAsyncComponent(() => import('~/components/content/kfr/list.vue')) +const PrbListAsync = defineAsyncComponent(() => import('~/components/content/prb/list.vue')) +const SurgeryReportListAsync = defineAsyncComponent(() => import('~/components/content/surgery-report/list.vue')) +const VaccineDataListAsync = defineAsyncComponent(() => import('~/components/content/vaccine-data/list.vue')) const defaultKeys: Record = { status: { @@ -186,8 +190,8 @@ const defaultKeys: Record = { classCode: ['ambulatory', 'emergency', 'inpatient'], unit: 'all', }, - vacsinData: { - id: 'vacsin-data', + vaccineData: { + id: 'vaccine-data', title: 'Data Vaksin', classCode: ['ambulatory', 'emergency', 'inpatient'], unit: 'all', @@ -210,6 +214,12 @@ const defaultKeys: Record = { classCode: ['ambulatory', 'emergency'], unit: 'all', }, + kfr: { + id: 'kfr', + title: 'KFR', + classCode: ['ambulatory', 'emergency', 'inpatient'], + unit: 'all', + }, refBack: { id: 'reference-back', title: 'PRB', @@ -387,15 +397,31 @@ export function injectComponents(id: string | number, data: EncounterListData, m currentKeys.resume['component'] = ResumeListAsync currentKeys.resume['props'] = { encounter_id: id } } - if (currentKeys?.control) { - currentKeys.control['component'] = ControlLetterListAsync - currentKeys.control['props'] = { encounter: data?.encounter } + if (currentKeys?.controlLetter) { + currentKeys.controlLetter['component'] = ControlLetterListAsync + currentKeys.controlLetter['props'] = { encounter: data?.encounter } + } + if (currentKeys?.refBack) { + currentKeys.refBack['component'] = PrbListAsync + currentKeys.refBack['props'] = { encounter: data?.encounter } + } + if (currentKeys?.kfr) { + currentKeys.kfr['component'] = KfrListAsync + currentKeys.kfr['props'] = { encounter: data?.encounter } } if (currentKeys?.screening) { // TODO: add component for screening currentKeys.screening['component'] = null currentKeys.screening['props'] = { encounter_id: id } } + if (currentKeys?.surgeryReport) { + currentKeys.surgeryReport['component'] = SurgeryReportListAsync + currentKeys.surgeryReport['props'] = { encounter: data?.encounter } + } + if (currentKeys?.vaccineData) { + currentKeys.vaccineData['component'] = VaccineDataListAsync + currentKeys.vaccineData['props'] = { encounter: data?.encounter } + } if (currentKeys?.supportingDocument) { currentKeys.supportingDocument['component'] = DocUploadListAsync currentKeys.supportingDocument['props'] = { encounter_id: id } @@ -492,7 +518,6 @@ export function getMenuItems( data: EncounterListData, meta: any, ) { - console.log(props) // const normalClassCode = props.classCode === 'ambulatory' ? 'outpatient' : props.classCode const normalClassCode = props.classCode === 'ambulatory' ? 'ambulatory' : props.classCode const currentKeys = injectComponents(id, data, meta) diff --git a/app/lib/utils.ts b/app/lib/utils.ts index d6fa4c95..180320ae 100644 --- a/app/lib/utils.ts +++ b/app/lib/utils.ts @@ -3,7 +3,6 @@ import { clsx } from 'clsx' import { format } from 'date-fns' import { twMerge } from 'tailwind-merge' import { toast } from '~/components/pub/ui/toast' -import { toast } from '~/components/pub/ui/toast' export interface SelectOptionType<_T = string> { value: string diff --git a/app/pages/(features)/rehab/encounter/[id]/document-upload/[document_id]/edit.vue b/app/pages/(features)/rehab/encounter/[id]/document-upload/[document_id]/edit.vue new file mode 100644 index 00000000..e06920ba --- /dev/null +++ b/app/pages/(features)/rehab/encounter/[id]/document-upload/[document_id]/edit.vue @@ -0,0 +1,41 @@ + + + \ No newline at end of file diff --git a/app/pages/(features)/rehab/encounter/[id]/document-upload/add.vue b/app/pages/(features)/rehab/encounter/[id]/document-upload/add.vue new file mode 100644 index 00000000..fcc7432e --- /dev/null +++ b/app/pages/(features)/rehab/encounter/[id]/document-upload/add.vue @@ -0,0 +1,42 @@ + + + \ No newline at end of file diff --git a/app/pages/(features)/rehab/encounter/[id]/vaccine-data/[vaccine_data_id]/index.vue b/app/pages/(features)/rehab/encounter/[id]/vaccine-data/[vaccine_data_id]/index.vue index 322d0ad8..a2f68104 100644 --- a/app/pages/(features)/rehab/encounter/[id]/vaccine-data/[vaccine_data_id]/index.vue +++ b/app/pages/(features)/rehab/encounter/[id]/vaccine-data/[vaccine_data_id]/index.vue @@ -16,7 +16,7 @@ useHead({ title: () => route.meta.title as string, }) -const roleAccess: PagePermission = PAGE_PERMISSIONS['/patient'] +const roleAccess: PagePermission = PAGE_PERMISSIONS[`/rehab/encounter`] const { checkRole, hasReadAccess } = useRBAC() From d743d31607d2310bba2fe6de4d16f403d3f75c41 Mon Sep 17 00:00:00 2001 From: Hasyim Kai Date: Thu, 4 Dec 2025 11:51:52 +0700 Subject: [PATCH 4/4] Fix: debug process pages import bug --- app/pages/(features)/rehab/encounter/[id]/process.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/pages/(features)/rehab/encounter/[id]/process.vue b/app/pages/(features)/rehab/encounter/[id]/process.vue index 02246607..49a5dd6d 100644 --- a/app/pages/(features)/rehab/encounter/[id]/process.vue +++ b/app/pages/(features)/rehab/encounter/[id]/process.vue @@ -2,7 +2,7 @@ import type { PagePermission } from '~/models/role' import Error from '~/components/pub/my-ui/error/error.vue' import { PAGE_PERMISSIONS } from '~/lib/page-permission' -import EncounterProcess from '~/components/content/encounter/process-bu.vue' +import EncounterProcess from '~/components/content/encounter/process.vue' definePageMeta({ middleware: ['rbac'], @@ -35,7 +35,7 @@ const pagePermission = getPagePermissions(roleAccess)