+
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..a2f68104
--- /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",