UNPKG

@damourlabs/euro-clinical-trials

Version:

A Nuxt 3 application for visualizing and managing clinical trials data in Europe, built with modern web technologies.

87 lines (69 loc) 5.09 kB
import { z } from "zod"; function createZodEnumWithMessage<T extends [string, ...string[]]>(values: T): z.ZodEnum<T> { return z.enum(values, { invalid_type_error: "Invalid value provided", required_error: "This field is required", message: `Must be one of ${values.join(', ')}.`, description: `Valid values are: ${values.join(', ')}` }); } //---- Trials export const TrialPhaseEnum = createZodEnumWithMessage(["I", "II", "III", "IV"]) export const TrialStatusEnum = createZodEnumWithMessage(["Planning", "Active", "Paused", "Completed", "Terminated"]); export type TrialPhase = z.infer<typeof TrialPhaseEnum>; export type TrialStatus = z.infer<typeof TrialStatusEnum>; //---- Patients export const PatientStatusEnum = createZodEnumWithMessage(['Screening', 'Enrolled', 'Active', 'Completed', 'Withdrawn', 'Discontinued']) export const AEOutcomeEnum = createZodEnumWithMessage(['Resolved', 'Ongoing', 'Fatal']); export const AESeverityEnum = createZodEnumWithMessage(['Mild', 'Moderate', 'Severe']); export type PatientStatus = z.infer<typeof PatientStatusEnum>; export type AEOutcome = z.infer<typeof AEOutcomeEnum>; export type AESeverity = z.infer<typeof AESeverityEnum>; //---- Study Design export const BlindingEnum = createZodEnumWithMessage(["Single", "Double", "Triple", "OpenLabel"]); export const RandomizationStrategyEnum = createZodEnumWithMessage(["Simple", "Stratified", "Block", "Adaptive"]); export type Blinding = z.infer<typeof BlindingEnum>; export type RandomizationStrategy = z.infer<typeof RandomizationStrategyEnum>; //---- Admin export const SiteStatusEnum = createZodEnumWithMessage(['Active', 'Inactive', 'Pending', 'Closed']); export const UserRoleEnum = createZodEnumWithMessage(['Sponsor', 'Investigator', 'Coordinator', 'Monitor', 'Patient', 'Nurse']); export const DocumentTypeEnum = createZodEnumWithMessage(['Protocol', 'InformedConsent', 'RegulatoryApproval', 'Other']); export const DataSubmissionStatus = createZodEnumWithMessage(['OnTime', 'Delayed', 'NotSubmitted']); export const VisitStatus = createZodEnumWithMessage(['OnTime', 'Delayed', 'NotSubmitted']); export const VisitType = createZodEnumWithMessage(['Screening', 'FollowUp', 'EndOfTrial']); export type SiteStatus = z.infer<typeof SiteStatusEnum>; export type UserRole = z.infer<typeof UserRoleEnum>; export type DocumentType = z.infer<typeof DocumentTypeEnum>; export type DataSubmissionStatusType = z.infer<typeof DataSubmissionStatus>; export type VisitStatusType = z.infer<typeof VisitStatus>; //---- Audit export const AuditAction = createZodEnumWithMessage(['Create', 'Update', 'Delete', 'View']) export const AuditEntityType = createZodEnumWithMessage(['Trial', 'Patient', 'Visit', 'AdverseEvent']) export type AuditActionType = z.infer<typeof AuditAction>; export type AuditEntityTypeType = z.infer<typeof AuditEntityType>; //---- Regulation export const ApprovalStatusEnum = createZodEnumWithMessage(['Approved', 'Pending', 'Rejected']); export const ApprovalTypeEnum = createZodEnumWithMessage(['ClinicalTrial', 'MarketingAuthorization', 'DeviceApproval', 'Other']); export const ConsentStatusEnum = createZodEnumWithMessage(['Consented', 'NotConsented', 'Withdrawn']); export const ConsentTypeEnum = createZodEnumWithMessage(['Data_processing', 'Data_transfer', 'Marketing']); // Type of criteria category for inclusion or exclusion in a trial export const CriteriaTypeEnum = createZodEnumWithMessage(['Inclusion', 'Exclusion', 'Eligibility']); export const DataCategoriesEnum = createZodEnumWithMessage(['Health_data', 'Identification_data', 'Contact_data', 'Demographic_data', 'Genetic_data']); export const LegalBasisEnum = createZodEnumWithMessage(['Consent', 'Contract', 'Legal_obligation', 'Vital_interests', 'Public_task']); export const PurposeEnum = createZodEnumWithMessage(['Clinical_trial_management', 'Data_analysis', 'Marketing_communication', 'Regulatory_compliance']); export const ProtocolDeviationSeverityEnum = createZodEnumWithMessage(['Minor', 'Major', 'Critical']); export const SexEnum = createZodEnumWithMessage(['All', 'Female', 'Male']) export const WithdrawalMethodEnum = createZodEnumWithMessage(['Patient_portal', 'Email', 'Phone']); export const WithdrawalReasonEnum = createZodEnumWithMessage(['Personal', 'Data_breach', 'Other']); export type ApprovalStatus = z.infer<typeof ApprovalStatusEnum>; export type ApprovalType = z.infer<typeof ApprovalTypeEnum>; export type ConsentStatus = z.infer<typeof ConsentStatusEnum>; export type ConsentType = z.infer<typeof ConsentTypeEnum>; export type CriteriaType = z.infer<typeof CriteriaTypeEnum>; export type DataCategories = z.infer<typeof DataCategoriesEnum>; export type LegalBasis = z.infer<typeof LegalBasisEnum>; export type Purpose = z.infer<typeof PurposeEnum>; export type ProtocolDeviationSeverity = z.infer<typeof ProtocolDeviationSeverityEnum>; export type SexEnumType = z.infer<typeof SexEnum>; export type WithdrawalMethod = z.infer<typeof WithdrawalMethodEnum>; export type WithdrawalReason = z.infer<typeof WithdrawalReasonEnum>;