mirror of
https://github.com/faiztyanirh/clqms-shadcn-v1.git
synced 2026-04-24 01:58:07 +07:00
211 lines
6.3 KiB
JavaScript
211 lines
6.3 KiB
JavaScript
import { API } from "$lib/config/api";
|
|
import EraserIcon from "@lucide/svelte/icons/eraser";
|
|
import { z } from "zod";
|
|
import { cleanEmptyStrings } from "$lib/utils/cleanEmptyStrings";
|
|
|
|
export const testSchema = z.object({});
|
|
|
|
export const admissionInitialForm = {
|
|
InternalPVID: "",
|
|
InternalPID: "",
|
|
PVID: "",
|
|
EpisodeID: "",
|
|
DiagCode: "",
|
|
Diagnosis: "",
|
|
ADTCode: "",
|
|
LocationID: "",
|
|
AttDoc: "",
|
|
RefDoc: "",
|
|
AdmDoc: "",
|
|
CnsDoc: "",
|
|
isDischarge: false
|
|
};
|
|
|
|
export const admissionDefaultErrors = {};
|
|
|
|
export const admissionFormFields = [
|
|
{
|
|
title: "Visit Information",
|
|
rows: [
|
|
{
|
|
type: "row",
|
|
columns: [
|
|
// {
|
|
// key: "PVID",
|
|
// label: "Visit ID",
|
|
// required: false,
|
|
// type: "text",
|
|
// },
|
|
{
|
|
key: "EpisodeID",
|
|
label: "Episode ID",
|
|
required: false,
|
|
type: "text",
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
title: "Medical Team",
|
|
rows: [
|
|
{
|
|
type: "row",
|
|
columns: [
|
|
{
|
|
key: "AttDoc",
|
|
label: "Attended Doctor",
|
|
required: false,
|
|
type: "select",
|
|
optionsEndpoint: `${API.BASE_URL}${API.CONTACT}`,
|
|
valueKey: "ContactID",
|
|
labelKey: (item) => `${item.Initial} - ${item.NameFirst} ${item.NameLast}`,
|
|
},
|
|
{
|
|
key: "RefDoc",
|
|
label: "Reference Doctor",
|
|
required: false,
|
|
type: "select",
|
|
optionsEndpoint: `${API.BASE_URL}${API.CONTACT}`,
|
|
valueKey: "ContactID",
|
|
labelKey: (item) => `${item.Initial} - ${item.NameFirst} ${item.NameLast}`,
|
|
}
|
|
]
|
|
},
|
|
{
|
|
type: "row",
|
|
columns: [
|
|
{
|
|
key: "AdmDoc",
|
|
label: "Admitted Doctor",
|
|
required: false,
|
|
type: "select",
|
|
optionsEndpoint: `${API.BASE_URL}${API.CONTACT}`,
|
|
valueKey: "ContactID",
|
|
labelKey: (item) => `${item.Initial} - ${item.NameFirst} ${item.NameLast}`,
|
|
},
|
|
{
|
|
key: "CnsDoc",
|
|
label: "Consulte Doctor",
|
|
required: false,
|
|
type: "select",
|
|
optionsEndpoint: `${API.BASE_URL}${API.CONTACT}`,
|
|
valueKey: "ContactID",
|
|
labelKey: (item) => `${item.Initial} - ${item.NameFirst} ${item.NameLast}`,
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
title: "Visit Classification",
|
|
rows: [
|
|
{
|
|
type: "row",
|
|
columns: [
|
|
{
|
|
key: "LocationID",
|
|
label: "Location",
|
|
required: false,
|
|
type: "select",
|
|
optionsEndpoint: `${API.BASE_URL}${API.LOCATION}`,
|
|
valueKey: "LocationID",
|
|
labelKey: (item) => `${item.LocCode} - ${item.LocFull}`,
|
|
},
|
|
{
|
|
key: "VisitClass",
|
|
label: "Visit Class",
|
|
required: false,
|
|
type: "select",
|
|
// optionsEndpoint: `${API.BASE_URL}${API.VALUESET}/visit_classes`,
|
|
}
|
|
]
|
|
},
|
|
{
|
|
type: "row",
|
|
columns: [
|
|
{
|
|
key: "ServiceClass",
|
|
label: "Service Class",
|
|
required: false,
|
|
type: "select",
|
|
// optionsEndpoint: `${API.BASE_URL}${API.VALUESET}/service_classes`,
|
|
},
|
|
{
|
|
key: "isDischarge",
|
|
label: "Admission Status",
|
|
required: false,
|
|
type: "toggle",
|
|
defaultValue: false,
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
title: "Clinical Information",
|
|
rows: [
|
|
{
|
|
type: "row",
|
|
columns: [
|
|
{
|
|
key: "Diagnosis",
|
|
label: "Diagnosis",
|
|
required: false,
|
|
type: "textarea",
|
|
rows: 4,
|
|
maxLength: 1000,
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
];
|
|
|
|
export function getAdmissionFormActions(handlers) {
|
|
return [
|
|
{
|
|
Icon: EraserIcon,
|
|
label: 'Clear Form',
|
|
onClick: handlers.clearForm,
|
|
},
|
|
];
|
|
}
|
|
|
|
const admissionTemplate = {
|
|
PVID: 'PVID',
|
|
InternalPID: 'InternalPID',
|
|
EpisodeID: 'EpisodeID',
|
|
PatDiag: {
|
|
DiagCode: 'DiagCode',
|
|
Diagnosis: 'Diagnosis',
|
|
},
|
|
PatVisitADT: {
|
|
ADTCode: () => 'A04',
|
|
LocationID: 'LocationID',
|
|
AttDoc: 'AttDoc',
|
|
RefDoc: 'RefDoc',
|
|
AdmDoc: 'AdmDoc',
|
|
CnsDoc: 'CnsDoc',
|
|
},
|
|
};
|
|
|
|
export function buildPayload(form, schema = admissionTemplate) {
|
|
const payload = {};
|
|
|
|
for (const [key, config] of Object.entries(schema)) {
|
|
if (typeof config === 'string') {
|
|
// Kirim nilai dari form, atau null jika tidak ada (agar key tetap ada)
|
|
payload[key] = form[config] ?? null;
|
|
}
|
|
else if (typeof config === 'function') {
|
|
payload[key] = config(form);
|
|
}
|
|
else if (typeof config === 'object' && config !== null) {
|
|
// Rekursif tanpa pengecekan panjang keys, agar objek nested selalu dibuat
|
|
payload[key] = buildPayload(form, config);
|
|
}
|
|
}
|
|
|
|
return cleanEmptyStrings(payload);
|
|
} |