Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | 1x 1x 2x | import { type TFunction } from 'i18next';
import { z } from 'zod';
const nullableString = z.string().max(255).nullish();
// Stock item details
export const createStockItemDetailsSchema = (t: TFunction) =>
z
.object({
isDrug: z.boolean({ required_error: t('selectItemType', 'Please select an item type') }),
drugUuid: z.string().nullish(),
drugName: z.string().nullish(),
commonName: nullableString,
acronym: nullableString,
hasExpiration: z.boolean({
required_error: t('indicateWhetherItemExpires', 'Please indicate whether the item expires'),
}),
expiryNotice: z.coerce.number().nullish(),
uuid: z.string().nullish(),
conceptUuid: z.string().nullish(),
conceptName: z.string().nullish(),
preferredVendorUuid: z.string().nullish(),
preferredVendorName: z.string().nullish(),
purchasePrice: z.coerce.number().nullish(),
purchasePriceUoMUuid: z.string().nullish(),
purchasePriceUoMName: z.string().nullish(),
categoryUuid: z.string().nullish(),
categoryName: z.string().nullish(),
dispensingUnitUuid: z.string().nullish(),
dispensingUnitName: z.string().nullish(),
dispensingUnitPackagingUoMUuid: z.string().nullish(),
dispensingUnitPackagingUoMName: z.string().nullish(),
defaultStockOperationsUoMUuid: z.string().nullish(),
defaultStockOperationsUoMName: z.string().nullish(),
reorderLevel: z.coerce.number().nullish(),
reorderLevelUoMUuid: z.string().nullish(),
reorderLevelUoMName: z.string().nullish(),
dateCreated: z.coerce.date().nullish(),
creatorGivenName: z.string().nullish(),
creatorFamilyName: z.string().nullish(),
voided: z.boolean().nullish(),
})
.refine(
({ isDrug, drugUuid }) => {
return isDrug ? !!drugUuid : true;
},
{
message: t('drugRequired', 'Drug required'),
path: ['drugUuid'],
},
)
.refine(
({ isDrug, dispensingUnitUuid }) => {
return isDrug ? !!dispensingUnitUuid : true;
},
{
message: t('dispensingUnitRequired', 'Dispensing unit required'),
path: ['dispensingUnitUuid'],
},
)
.refine(
({ hasExpiration, expiryNotice }) => {
return hasExpiration ? expiryNotice != null : true;
},
{
message: t('expiryNoticeRequired', 'Expiry notice required'),
path: ['expiryNotice'],
},
)
.refine(
({ purchasePrice, purchasePriceUoMUuid }) => {
return purchasePrice != null && purchasePrice > 0 ? !!purchasePriceUoMUuid : true;
},
{
message: t('purchasePriceUoMRequired', 'Purchase price packaging unit is required when purchase price is set'),
path: ['purchasePriceUoMUuid'],
},
);
export type StockItemFormData = z.infer<ReturnType<typeof createStockItemDetailsSchema>>;
|