import { type CommonReservedFields, type NoReservedFields, defaultGqlPermission, defaultPermission, } from "@tailor-platform/erp-kit/core"; import { db, type TailorAnyDBField } from "@tailor-platform/sdk"; import { outboundShipmentLifecycle } from "./outboundShipment.lifecycle.generated"; const builtins = { status: db .enum(outboundShipmentLifecycle.states) .description("Posting status. DRAFT does not affect stock; POSTED does."), effectiveDate: db .date() .description("Business effective date used for inventory reporting and period controls"), postedAt: db .datetime({ optional: true }) .description("System timestamp when stock effects were posted"), }; type ReservedFields = keyof typeof builtins | CommonReservedFields; export interface CreateOutboundShipmentTypeParams> { fields?: NoReservedFields; } export function createOutboundShipmentType>( params: CreateOutboundShipmentTypeParams, ) { return db .table("OutboundShipment", { ...builtins, ...((params.fields ?? {}) as F), ...db.fields.timestamps(), }) .indexes({ fields: ["status", "createdAt"], unique: false, name: "outbound_shipment_status_created_idx", }) .permission(defaultPermission) .gqlPermission(defaultGqlPermission); } export const outboundShipment = createOutboundShipmentType({});