import type { IfcDataStore } from './columnar-parser.js'; export type SequenceTypeEnum = 'START_START' | 'START_FINISH' | 'FINISH_START' | 'FINISH_FINISH' | 'USERDEFINED' | 'NOTDEFINED'; export type TaskDurationType = 'WORKTIME' | 'ELAPSEDTIME' | 'NOTDEFINED'; export interface ScheduleTaskTimeInfo { scheduleStart?: string; scheduleFinish?: string; scheduleDuration?: string; actualStart?: string; actualFinish?: string; actualDuration?: string; earlyStart?: string; earlyFinish?: string; lateStart?: string; lateFinish?: string; freeFloat?: string; totalFloat?: string; remainingTime?: string; durationType?: TaskDurationType; statusTime?: string; isCritical?: boolean; completion?: number; } export interface ScheduleTaskInfo { expressId: number; globalId: string; name: string; description?: string; objectType?: string; identification?: string; longDescription?: string; status?: string; workMethod?: string; isMilestone: boolean; priority?: number; predefinedType?: string; taskTime?: ScheduleTaskTimeInfo; /** Parent task globalId (from IfcRelNests where this task is in RelatedObjects). */ parentGlobalId?: string; /** Child task globalIds (from IfcRelNests where this task is RelatingObject). */ childGlobalIds: string[]; /** expressIds of products assigned to this task via IfcRelAssignsToProcess. */ productExpressIds: number[]; /** globalIds of the same products (aligned with productExpressIds by index). */ productGlobalIds: string[]; /** WorkSchedule globalIds that control this task via IfcRelAssignsToControl. */ controllingScheduleGlobalIds: string[]; } export interface ScheduleSequenceInfo { globalId: string; relatingTaskGlobalId: string; relatedTaskGlobalId: string; sequenceType: SequenceTypeEnum; userDefinedSequenceType?: string; /** Lag value expressed in seconds if it resolves to an IfcDuration; otherwise undefined. */ timeLagSeconds?: number; /** Original lag duration string (ISO 8601 like 'P1D'), if available. */ timeLagDuration?: string; } export interface WorkScheduleInfo { expressId: number; globalId: string; kind: 'WorkSchedule' | 'WorkPlan'; name: string; description?: string; identification?: string; creationDate?: string; purpose?: string; duration?: string; startTime?: string; finishTime?: string; predefinedType?: string; /** Root task globalIds directly assigned via IfcRelAssignsToControl. */ taskGlobalIds: string[]; } export interface ScheduleExtraction { workSchedules: WorkScheduleInfo[]; tasks: ScheduleTaskInfo[]; sequences: ScheduleSequenceInfo[]; /** True if we encountered any scheduling entity (useful for empty-state UI). */ hasSchedule: boolean; } /** * Parse an ISO-8601 duration string (e.g. "P1D", "PT2H30M", "P1Y2M3DT4H5M6S") * into a number of seconds. Returns undefined on invalid input. */ export declare function parseIso8601Duration(value: string | undefined): number | undefined; /** * Extract all scheduling data from a parsed IFC store. * * Walks every IfcTask / IfcTaskTime / IfcRelSequence / IfcRelAssignsToProcess / * IfcRelAssignsToControl / IfcRelNests / IfcWorkSchedule / IfcWorkPlan entity * and assembles a connected ScheduleExtraction. */ export declare function extractScheduleOnDemand(store: IfcDataStore): ScheduleExtraction; //# sourceMappingURL=schedule-extractor.d.ts.map