import { type CommonReservedFields, type NoReservedFields, defaultGqlPermission, defaultPermission, } from "@tailor-platform/erp-kit/core"; import { db, type TailorAnyDBField } from "@tailor-platform/sdk"; const builtins = { // Required string with unique constraint code: db.string().unique().description("Unique code identifying this JobProfile"), // Job family classification (e.g. Store Staff, Engineer) jobFamily: db.string().description("Job family this role belongs to"), // Grade reference — a reference only, no pay amounts in this phase (ADR-018) gradeReference: db.string().description("Reference to the grade classification for this role"), // Free-text role requirements requirements: db.string({ optional: true }).description("Requirements expected for this role"), }; type ReservedFields = keyof typeof builtins | CommonReservedFields; export interface CreateJobProfileTypeParams> { fields?: NoReservedFields; } export function createJobProfileType< const F extends Record = Record, >(params: CreateJobProfileTypeParams) { return db .table("JobProfile", { ...builtins, // Custom fields spread + timestamps ...((params.fields ?? {}) as F), ...db.fields.timestamps(), }) .permission(defaultPermission) .gqlPermission(defaultGqlPermission); } // Standalone model: no cross-module or intra-module foreign keys of its own export const jobProfile = createJobProfileType({});