import { type CommonReservedFields, type NoReservedFields, defaultGqlPermission, defaultPermission, } from "@tailor-platform/erp-kit/core"; import { db, type TailorAnyDBField } from "@tailor-platform/sdk"; import { assignment } from "./assignment"; const builtins = { // Intra-module FK: WorkSchedule belongs to exactly one Assignment assignmentId: db .uuid() .relation({ type: "n-1", toward: { type: assignment, as: "assignment" }, backward: "workSchedules", }) .description("Foreign key to the Assignment that owns this contractual work schedule"), scheduledDailyMinutes: db .int() .description( "Contractual scheduled minutes per day (non-negative); the planned baseline, not actual worked time", ), scheduledWeeklyMinutes: db .int() .description( "Contractual scheduled minutes per week (non-negative); the planned baseline, not actual worked time", ), // Effective-dating standard (ADR-013): generation series effectiveStart: db.date().description("Date this generation becomes effective"), effectiveEnd: db .date({ optional: true }) .description("Date this generation stops being effective; null means the current generation"), versionOf: db .uuid() .description( "Stable key binding together all generations of one continuous contractual work schedule for an Assignment", ), }; type ReservedFields = keyof typeof builtins | CommonReservedFields; export interface CreateWorkScheduleTypeParams> { fields?: NoReservedFields; } export function createWorkScheduleType>( params: CreateWorkScheduleTypeParams, ) { return db .table("WorkSchedule", { ...builtins, ...((params.fields ?? {}) as F), ...db.fields.timestamps(), }) .permission(defaultPermission) .gqlPermission(defaultGqlPermission); } // Codegen instance; the Assignment FK is always injected directly export const workSchedule = createWorkScheduleType({});