Skip to content

Instantly share code, notes, and snippets.

@guillaumegarcia13
Last active March 20, 2026 16:47
Show Gist options
  • Select an option

  • Save guillaumegarcia13/a80b812ed82df6cdd10a90e9026e57a8 to your computer and use it in GitHub Desktop.

Select an option

Save guillaumegarcia13/a80b812ed82df6cdd10a90e9026e57a8 to your computer and use it in GitHub Desktop.
Zod experiment for Neptune
// Idea is to generate the Zod schema from ABAP declaration
// and then ensures is it respected in our UI5 application
const { z } = await import("https://cdn.jsdelivr.net/npm/zod/+esm");
const physicalSchema = z.object({
// -- Bin / Section / Type
STORAGE_BIN: z.string(),
STORAGE_SECTION: z.string(),
STORAGE_SECTION_TXT: z.string(),
STORAGE_SECTION_TYPE: z.string(),
STORAGE_TYPE: z.string(),
// -- Resource / Process
RESOURCE: z.string(),
STORAGE_PROCESS: z.string(),
EXTERNAL_STORAGE_PROCESS_STEP: z.string(),
CONSOLIDATION_GROUP: z.string(),
// -- Business Flags
IS_BATCH_NEUTRAL: z.boolean(),
IS_BULK: z.boolean(),
IS_QTY_STORAGE_LEVEL: z.boolean(),
IS_PUTAWAY_COMPLETED: z.boolean(),
// -- Stock GUIDs / Type
STOCK_IDX: z.string(),
STOCK_PARENT_GUID: z.string(),
STOCK_GUID: z.string(),
STOCK_GUID0: z.string(),
STOCK_TYPE: z.string(),
STOCK_TYPE_STATE: z.string(),
VIRTUAL_STOCK_INDICATOR: z.string(),
AVAILABLE_STOCK_PARENT_GUID: z.string(),
AVAILABLE_STOCK_GUID: z.string(),
// -- Handling Unit
HANDLING_UNIT_GUID: z.string(),
HANDLING_UNIT_ID: z.string(),
LEVEL: z.number().int().nonnegative(),
TOP_HU_GUID: z.string(),
TOP_HU_ID: z.string(),
PARENT_HU_GUID: z.string(),
PARENT_HU_ID: z.string(),
// -- Node / Grouping
TYPE: z.enum(["UNPACKED_STOCK", "STORAGE", "STORAGE_ITEM", "HANDLING_UNIT", "HANDLING_UNIT_ITEM", ]),
GROUPING: z.string(),
NODE_ID: z.string(),
LINE_POSITION: z.string(),
// -- Counters
NB_OPEN_WT: z.number().int().nonnegative(),
NB_OPEN_HU_WT: z.number().int().nonnegative(),
NB_OPEN_PROD_WT: z.number().int().nonnegative(),
NB_STOCK_ITEMS: z.number().int().nonnegative(),
// -- Warehouse Task / Bins source-dest
WAREHOUSE_TASK: z.string(),
SOURCE_STORAGE_SECTION: z.string(),
SOURCE_STORAGE_BIN: z.string(),
DEST_STORAGE_SECTION: z.string(),
DEST_STORAGE_BIN: z.string(),
WAREHOUSE_ID: z.string(),
// -- Ownership
ENTITLED_ID: z.string(),
ENTITLED_ROLE: z.string(),
OWNER_ID: z.string(),
OWNER_ROLE: z.string(),
// -- Packaging
PACKAGING_MATERIAL_GUID: z.string(),
PACKAGING_MATERIAL_ID: z.string(),
PACKAGING_MATERIAL_TXT: z.string(),
// -- Material
MATERIAL_GUID: z.string(),
MATERIAL_ID: z.string(),
MATERIAL_TXT: z.string(),
// -- Batch / SLED
BATCH_GUID: z.string(),
BATCH_ID: z.string(),
SLED: z.string(),
// -- Stock doc lié
RELATED_STOCK_DOC_CAT: z.string(),
RELATED_STOCK_DOC_GUID: z.string(),
RELATED_STOCK_ITEM_GUID: z.string(),
// -- Special stock
SPECIAL_STOCK_DOC_CAT: z.string(),
SPECIAL_STOCK_DOC_ID: z.string(),
SPECIAL_STOCK_DOC_CAT_TXT: z.string(),
SPECIAL_STOCK_DOC_ID_EXT: z.string(),
SPECIAL_STOCK_ITEM_ID: z.string(),
// -- Quantities
QUANTITY_BASE: z.number(),
UNIT_INT_BASE: z.string(),
UNIT_EXT_BASE: z.string(),
UNIT_SHORT_TXT_BASE: z.string(),
UNIT_LONG_TXT_BASE: z.string(),
QUANTITY_ALT: z.number(),
UNIT_INT_ALT: z.string(),
UNIT_EXT_ALT: z.string(),
UNIT_SHORT_TXT_ALT: z.string(),
UNIT_LONG_TXT_ALT: z.string(),
QUANTITY_AVAIL: z.number(),
UNIT_INT_AVAIL: z.string(),
UNIT_EXT_AVAIL: z.string(),
UNIT_SHORT_TXT_AVAIL: z.string(),
UNIT_LONG_TXT_AVAIL: z.string(),
QUANTITY_RES: z.number(),
UNIT_INT_RES: z.string(),
UNIT_EXT_RES: z.string(),
UNIT_SHORT_TXT_RES: z.string(),
UNIT_LONG_TXT_RES: z.string(),
// -- Business Flags
IS_SIMPLE: z.boolean(),
IS_SERIALIZED: z.boolean(),
IS_COMPLETE_HU_ALLOWED: z.boolean(),
IS_HU_COMPLETED: z.boolean(),
IS_TOP_HU: z.boolean(),
HAS_INSPECTION_LOT: z.boolean(),
// -- Flags frontend
IS_VISIBLE: z.boolean(),
ARE_ITEMS_VISIBLE: z.boolean(),
IS_SELECTED: z.boolean(),
IS_NEW_HU: z.boolean(),
});
console.log(physicalSchema.safeParse(sample));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment