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); }