@outbuild-company/schedule-core 1.19.0 → 1.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -17,393 +17,90 @@ declare const LINK_TYPE: {
17
17
  /** Canonical stored dependency relationship. */
18
18
  type LinkType = (typeof LINK_TYPE)[keyof typeof LINK_TYPE];
19
19
 
20
- /** Canonical activity identifier inside a schedule. */
21
- type ActivityId = string;
22
- /** Canonical dependency-link identifier inside a schedule. */
23
- type LinkId = string;
24
- /** Canonical calendar identifier inside a schedule. */
25
- type CalendarId = string;
20
+ interface WorkTimeQuery {
21
+ readonly direction: WorkTimeDirection;
22
+ readonly date: Date;
23
+ readonly unit: CalendarUnit;
24
+ }
25
+ interface CalendarAPI {
26
+ readonly getClosestWorkTime: (query: WorkTimeQuery) => Date;
27
+ readonly calculateEndDate: (start: Date, durationHours: number) => Date;
28
+ readonly calculateDuration: (start: Date, end: Date) => number;
29
+ readonly isWorkTime: (date: Date, unit: CalendarUnit) => boolean;
30
+ readonly getWorkHours: (date: Date) => string[];
31
+ }
26
32
 
27
- /** Named work-time traversal directions. */
28
- declare const WORK_TIME_DIRECTION: {
29
- readonly FUTURE: "future";
30
- readonly PAST: "past";
31
- };
32
- /** Direction used for calendar-aware work-time traversal. */
33
- type WorkTimeDirection = (typeof WORK_TIME_DIRECTION)[keyof typeof WORK_TIME_DIRECTION];
34
- /** Named units accepted by calendar duration operations. */
35
- declare const CALENDAR_UNIT: {
36
- readonly HOUR: "hour";
37
- readonly DAY: "day";
38
- };
39
- /** Unit accepted by calendar duration operations. */
40
- type CalendarUnit = (typeof CALENDAR_UNIT)[keyof typeof CALENDAR_UNIT];
41
- /** Criteria available for schedule-wide activity weighting. */
42
- declare const ACTIVITY_PONDERATOR_CRITERION: {
43
- readonly DURATION: "DURATION";
44
- readonly COST: "COST";
45
- readonly WORK_HOURS: "HH";
33
+ /** Canonical reasons why an activity field edit may be blocked. */
34
+ declare const EDIT_DENIAL_REASON: {
35
+ readonly COMPLETED: "completed";
36
+ readonly SUMMARY: "summary";
37
+ readonly HAS_PROGRESS: "has_progress";
38
+ readonly HAS_LOOKAHEAD_TASKS: "has_lookahead_tasks";
39
+ readonly SIR_START_AFTER_PROGRESS: "sir_start_after_progress";
40
+ readonly DATA_DATE_UNAVAILABLE: "data_date_unavailable";
41
+ readonly DATA_DATE_ACTUAL_START_LOCKED: "data_date_actual_start_locked";
42
+ readonly DATA_DATE_ACTIVITY_COMPLETED: "data_date_activity_completed";
43
+ readonly DATA_DATE_UNITS_PERCENT_READ_ONLY: "data_date_units_percent_read_only";
44
+ readonly SECONDARY_CONSTRAINT_TYPE_REQUIRED: "secondary_constraint_type_required";
46
45
  };
47
- /** Schedule-wide activity weighting criterion. */
48
- type ActivityCreter = (typeof ACTIVITY_PONDERATOR_CRITERION)[keyof typeof ACTIVITY_PONDERATOR_CRITERION];
49
- /** Modes used to derive activity status from actual or baseline progress. */
50
- declare const STATUS_CRITERIA: {
51
- readonly BASELINE: "Baseline";
52
- readonly ACTUAL: "Actual";
46
+ /** Reason code returned when an activity field edit is blocked. */
47
+ type EditDenialReason = (typeof EDIT_DENIAL_REASON)[keyof typeof EDIT_DENIAL_REASON];
48
+ /** Canonical presentation keys associated with blocked activity edits. */
49
+ declare const EDIT_ALERT_KEY: {
50
+ readonly CANT_EDIT_COMPLETED: "cant_edit_completed_activity";
51
+ readonly SUMMARY_COLUMN_VALUE: "summary_column_value";
52
+ readonly CANT_EDIT_WITH_PROGRESS: "cant_edit_activity_with_progress";
53
+ readonly SIR_CANT_MOVE_START_AFTER_PROGRESS: "sir_cant_move_start_after_progress";
54
+ readonly CANT_EDIT_WITH_TASK: "cant_edit_actvity_with_task";
55
+ readonly DATA_DATE_EDIT_REJECTED: "data_date_edit_rejected";
56
+ readonly DATA_DATE_UNITS_PERCENT_READ_ONLY: "data_date_units_percent_read_only";
53
57
  };
54
- /** Mode used to derive activity status. */
55
- type StatusCriteria = (typeof STATUS_CRITERIA)[keyof typeof STATUS_CRITERIA];
56
- /** Backend baseline-version metadata retained during normalization. */
57
- interface BaselineVersion {
58
- id?: number;
59
- name?: string | null;
60
- active?: boolean;
61
- visible?: boolean;
62
- [key: string]: unknown;
63
- }
64
- /** Backend baseline point accepted at the package boundary. */
65
- interface BaselinePoint {
66
- start_date: string | null;
67
- end_date: string | null;
68
- /** Baseline duration in working days. */
69
- duration: number;
70
- cost: number | string;
71
- /** Baseline work in hours. */
72
- hh_work: number | string;
73
- sectorbaselineversion?: BaselineVersion;
74
- sectorbaselineversionId?: number;
75
- baseCalendarId?: number;
76
- hoursPerDay?: number;
77
- hoursPerWeek?: number;
78
- [key: string]: unknown;
79
- }
80
- /** Minimal pending impact-request identity consumed by schedule effects. */
81
- interface PendingRequest {
82
- id: string;
83
- }
84
- /** Derived activity statuses exposed to consumers. */
85
- declare const STATUS: {
86
- readonly DONE: "Done";
87
- readonly OVERDUE: "Overdue";
88
- readonly ADVANCEMENT: "Advancement";
89
- readonly WAITING: "Waiting";
90
- readonly DOING: "Doing";
58
+ /** Presentation key optionally returned with a blocked activity edit. */
59
+ type EditAlertKey = (typeof EDIT_ALERT_KEY)[keyof typeof EDIT_ALERT_KEY];
60
+
61
+ /** Data Date edits that need an explicit user confirmation before they are applied. */
62
+ declare const CONFIRMATION_KIND: {
63
+ readonly UNSTART: "unstart";
64
+ readonly UNCOMPLETE: "uncomplete";
65
+ readonly START_ON_PROGRESS: "start_on_progress";
66
+ readonly COMPLETE_ON_PROGRESS: "complete_on_progress";
67
+ readonly KEEP_IN_PROGRESS: "keep_in_progress";
68
+ readonly CLEAR_SECONDARY_CONSTRAINT: "clear_secondary_constraint";
91
69
  };
92
- /** Derived activity status exposed on normalized activities. */
93
- type ActivityStatus = (typeof STATUS)[keyof typeof STATUS];
94
- /** Critical-path dates and slack for one activity. */
95
- interface CriticalPathResult {
96
- /** Earliest feasible start, or `null` when not calculated. */
97
- earlyStart: Date | null;
98
- /** Earliest feasible finish, or `null` when not calculated. */
99
- earlyFinish: Date | null;
100
- /** Latest feasible start, or `null` when not calculated. */
101
- lateStart: Date | null;
102
- /** Latest feasible finish, or `null` when not calculated. */
103
- lateFinish: Date | null;
104
- /** Total working-hour slack, or `null` when not calculated. */
105
- totalSlackHours: number | null;
106
- }
107
- /** Active baseline values copied onto an activity for projection. */
108
- interface ActivityBaselineSnapshot {
109
- /** Baseline start, or `null` when unavailable. */
110
- startDate: Date | null;
111
- /** Baseline end, or `null` when unavailable. */
112
- endDate: Date | null;
113
- /** Baseline duration in working days. */
114
- durationDays: number;
115
- cost: number;
116
- /** Baseline work in hours. */
117
- workHours: number;
118
- }
119
- /** Normalized baseline point retained on a core activity. */
120
- interface CoreBaselinePoint {
121
- /** Baseline start, or `null` when the wire value is unavailable. */
122
- startDate: Date | null;
123
- /** Baseline end, or `null` when the wire value is unavailable. */
124
- endDate: Date | null;
125
- /** Duration in working days. */
126
- durationDays: number;
127
- cost: number;
128
- workHours: number;
129
- versionId: number | null;
130
- isActiveVersion: boolean;
131
- isVisibleVersion: boolean;
132
- baseCalendarId: CalendarId | null;
133
- /** Calendar hours per working day, or `null` when unspecified. */
134
- hoursPerDay: number | null;
135
- /** Calendar hours per working week, or `null` when unspecified. */
136
- hoursPerWeek: number | null;
70
+ /** One of the `CONFIRMATION_KIND` values. */
71
+ type ConfirmationKind = (typeof CONFIRMATION_KIND)[keyof typeof CONFIRMATION_KIND];
72
+ /** A second way to resolve a confirmation, applied when its `kind` is confirmed instead. */
73
+ interface ConfirmationAlternative {
74
+ readonly kind: ConfirmationKind;
75
+ readonly effects: Readonly<P6ActivityInputPatch>;
137
76
  }
138
77
  /**
139
- * Complete normalized activity snapshot owned by Schedule Core.
140
- *
141
- * Read APIs return defensive copies. Stored duration and slack fields use
142
- * working hours; façade inputs use working days where documented.
78
+ * Returned with `reason: 'confirmation_required'` when an edit needs consent;
79
+ * `effects` is the P6 patch that will be applied once the same intent is
80
+ * re-dispatched with `confirmations: [kind]`. When `alternative` is present,
81
+ * re-dispatching with its kind applies `alternative.effects` instead.
143
82
  */
144
- interface CoreActivity {
145
- id: ActivityId;
146
- proplannerId: number | null;
147
- parentId: ActivityId | null;
148
- name: string;
149
- description: string;
150
- type: ActivityType;
151
- startDate: Date;
152
- endDate: Date;
153
- /** Stored duration in working hours. */
154
- durationHours: number;
155
- /** Scheduling constraint, or `null` when unconstrained. */
156
- constraintType: ConstraintType | null;
157
- /** Constraint date, or `null` when the constraint has no date. */
158
- constraintDate: Date | null;
159
- autoScheduling: boolean;
160
- /** Assigned calendar ID, or `null` when no known source/default calendar resolves. */
161
- calendarId: CalendarId | null;
162
- assignedDefaultCalendar: boolean;
163
- /** Consumer-origin date, or `null` when absent. */
164
- dateOrigin: Date | null;
165
- progress: number;
166
- cost: number;
167
- usedCost: number;
168
- realCost: number;
169
- workHours: number;
170
- realWorkHours: number;
171
- ponderator: number;
172
- hasCustomPonderator: boolean;
173
- correlativeId: number;
174
- uniqueCorrelativeId: string;
175
- customId: string | null;
176
- subcontractId: number | null;
177
- isLookahead: boolean;
178
- hasLookaheadTasks: boolean;
179
- newActivityIds: ActivityId[];
180
- hasNewActivities: boolean;
181
- isNewActivity?: true | null;
182
- pendingRequestIds: string[];
183
- responsableIds: string[];
184
- tagIds: string[];
185
- baselinePoints: CoreBaselinePoint[];
186
- baselineSnapshot: ActivityBaselineSnapshot | null;
187
- /** Summary roll-up duration in working hours. */
188
- recursiveDurationHours: number;
189
- isCritical: boolean;
190
- /** Free slack in working hours, or `null` when not calculated. */
191
- freeSlackHours: number | null;
192
- /** Inclusive calendar-day span, or `null` when unavailable. */
193
- calendarDuration?: number | null;
194
- /**
195
- * Signed working days between the activity end and its visible baseline end,
196
- * or `null` when no visible baseline applies. Positive means finishing late.
197
- */
198
- baselineVarianceDays: number | null;
199
- /** Expected progress percentage, or `null` when unavailable. */
200
- expectedProgress: number | null;
201
- /** Baseline expected progress percentage, or `null` when unavailable. */
202
- expectedProgressBaseline: number | null;
203
- status: ActivityStatus | null;
204
- criticalPath: CriticalPathResult | null;
205
- }
206
- /** Normalized dependency-link snapshot. */
207
- interface Link {
208
- id: LinkId;
209
- source: ActivityId;
210
- target: ActivityId;
211
- type: LinkType;
212
- /** Stored dependency lag in working hours. */
213
- lag: number;
214
- /** Free slack in working hours, or `null` when not calculated. */
215
- freeSlackHours: number | null;
216
- isCritical: boolean;
217
- ganttId?: number;
218
- sectorId?: number;
219
- proplannerId?: number;
220
- }
221
- /** Persisted identity retained after an activity is deleted. */
222
- interface DeletedActivitySnapshot {
223
- readonly id: ActivityId;
224
- readonly proplannerId: number;
225
- readonly parentId: ActivityId | null;
226
- readonly hadBaseline: boolean;
227
- }
228
- /** Persisted link identity and endpoints retained after deletion. */
229
- interface DeletedLinkSnapshot {
230
- readonly id: LinkId;
231
- readonly proplannerId: number;
232
- readonly source: ActivityId;
233
- readonly target: ActivityId;
234
- readonly type: LinkType;
235
- /** Stored lag in working hours. */
236
- readonly lag: number;
237
- }
238
- /** Normalized calendar work-week, exception, and custom-week rules. */
239
- interface CalendarWorktime {
240
- days: Array<false | string[]>;
241
- hours: string[];
242
- dates?: Record<string, false | string[]>;
243
- customWeeks?: Record<string, unknown>;
244
- }
245
- /** Normalized schedule or base calendar snapshot. */
246
- interface Calendar {
247
- id: CalendarId;
248
- name: string;
249
- worktime: CalendarWorktime;
250
- is_default: boolean;
251
- baseDefault?: boolean;
252
- exceptions?: Record<string, {
253
- working: boolean;
254
- hours?: string[];
255
- }>;
83
+ interface ConfirmationRequest {
84
+ readonly kind: ConfirmationKind;
85
+ readonly activityId: string;
86
+ readonly effects: Readonly<P6ActivityInputPatch>;
87
+ readonly alternative?: ConfirmationAlternative;
256
88
  }
257
- /** Normalized schedule metadata derived from the backend `sector` field. */
258
- interface SectorMetadata {
259
- id: string;
260
- name: string;
261
- /** Working hours per day used for day/hour conversion. */
262
- hoursPerDay: number;
263
- /** Working hours per week. */
264
- hoursPerWeek: number;
265
- dateFormat: string;
266
- projectId: number;
267
- companyId: number;
268
- customIdPrefix?: string;
269
- customIdIncrement?: string;
270
- updateDurationForPrimaveraEndDate?: boolean;
271
- activityCreter?: ActivityCreter;
272
- statusCriteria: StatusCriteria;
273
- ganttId: number | null;
274
- }
275
- /** Canonical entity-change operations in consumer projections. */
276
- declare const ENTITY_CHANGE_KIND: {
277
- readonly CREATED: "created";
278
- readonly UPDATED: "updated";
279
- readonly DELETED: "deleted";
280
- };
281
- type EntityChangeKind = (typeof ENTITY_CHANGE_KIND)[keyof typeof ENTITY_CHANGE_KIND];
282
- /** One created, updated, or deleted entity in a consumer projection. */
283
- interface EntityChange<T> {
284
- id: string;
285
- kind: EntityChangeKind;
286
- fields?: Record<string, {
287
- before: unknown;
288
- after: unknown;
289
- }> | undefined;
290
- /** Complete post-change snapshot, or `null` for deletion. */
291
- after: Readonly<T> | null;
292
- }
293
-
294
- /** Named normalized activity scheduling constraints. */
295
- declare const CONSTRAINT_TYPE: {
296
- readonly ASAP: "asap";
297
- readonly ALAP: "alap";
298
- readonly SNET: "snet";
299
- readonly SNLT: "snlt";
300
- readonly FNET: "fnet";
301
- readonly FNLT: "fnlt";
302
- readonly MSO: "mso";
303
- readonly MFO: "mfo";
304
- };
305
- /** Normalized activity scheduling constraint. */
306
- type ConstraintType = (typeof CONSTRAINT_TYPE)[keyof typeof CONSTRAINT_TYPE];
307
-
308
- declare const SAVE_FIELD_POLICY: {
309
- readonly TRACKED: "tracked";
310
- readonly IGNORED: "ignored";
311
- };
312
-
313
- declare const ACTIVITY_SAVE_FIELD_POLICY: {
314
- readonly id: "ignored";
315
- readonly proplannerId: "ignored";
316
- readonly parentId: "tracked";
317
- readonly name: "tracked";
318
- readonly description: "tracked";
319
- readonly type: "tracked";
320
- readonly startDate: "tracked";
321
- readonly endDate: "tracked";
322
- readonly durationHours: "tracked";
323
- readonly constraintType: "tracked";
324
- readonly constraintDate: "tracked";
325
- readonly autoScheduling: "tracked";
326
- readonly calendarId: "tracked";
327
- readonly assignedDefaultCalendar: "ignored";
328
- readonly dateOrigin: "tracked";
329
- readonly progress: "tracked";
330
- readonly cost: "tracked";
331
- readonly usedCost: "tracked";
332
- readonly realCost: "tracked";
333
- readonly workHours: "tracked";
334
- readonly realWorkHours: "tracked";
335
- readonly ponderator: "tracked";
336
- readonly hasCustomPonderator: "tracked";
337
- readonly correlativeId: "tracked";
338
- readonly uniqueCorrelativeId: "tracked";
339
- readonly customId: "tracked";
340
- readonly subcontractId: "tracked";
341
- readonly isLookahead: "tracked";
342
- readonly hasLookaheadTasks: "ignored";
343
- readonly newActivityIds: "tracked";
344
- readonly hasNewActivities: "tracked";
345
- readonly isNewActivity: "ignored";
346
- readonly pendingRequestIds: "ignored";
347
- readonly responsableIds: "tracked";
348
- readonly tagIds: "tracked";
349
- readonly baselinePoints: "ignored";
350
- readonly baselineSnapshot: "ignored";
351
- readonly recursiveDurationHours: "ignored";
352
- readonly isCritical: "ignored";
353
- readonly freeSlackHours: "ignored";
354
- readonly calendarDuration: "ignored";
355
- readonly baselineVarianceDays: "ignored";
356
- readonly expectedProgress: "ignored";
357
- readonly expectedProgressBaseline: "ignored";
358
- readonly status: "ignored";
359
- readonly criticalPath: "ignored";
360
- };
361
- /**
362
- * Activity field included in consumer persistence comparisons.
363
- *
364
- * Derived scheduling, baseline, selection, and backend identity fields are
365
- * intentionally excluded.
366
- */
367
- type PersistableActivityField = {
368
- [Field in keyof typeof ACTIVITY_SAVE_FIELD_POLICY]: (typeof ACTIVITY_SAVE_FIELD_POLICY)[Field] extends typeof SAVE_FIELD_POLICY.TRACKED ? Field : never;
369
- }[keyof typeof ACTIVITY_SAVE_FIELD_POLICY];
370
-
371
- /** Progress percentage representing a not-started activity. */
372
- declare const NOT_STARTED_PROGRESS = 0;
373
- /** Progress percentage representing a completed activity. */
374
- declare const COMPLETED_PROGRESS = 100;
375
-
376
- /** Canonical reasons why an activity field edit may be blocked. */
377
- declare const EDIT_DENIAL_REASON: {
378
- readonly COMPLETED: "completed";
379
- readonly SUMMARY: "summary";
380
- readonly HAS_PROGRESS: "has_progress";
381
- readonly HAS_LOOKAHEAD_TASKS: "has_lookahead_tasks";
382
- readonly SIR_START_AFTER_PROGRESS: "sir_start_after_progress";
383
- };
384
- /** Reason code returned when an activity field edit is blocked. */
385
- type EditDenialReason = (typeof EDIT_DENIAL_REASON)[keyof typeof EDIT_DENIAL_REASON];
386
- /** Canonical presentation keys associated with blocked activity edits. */
387
- declare const EDIT_ALERT_KEY: {
388
- readonly CANT_EDIT_COMPLETED: "cant_edit_completed_activity";
389
- readonly SUMMARY_COLUMN_VALUE: "summary_column_value";
390
- readonly CANT_EDIT_WITH_PROGRESS: "cant_edit_activity_with_progress";
391
- readonly SIR_CANT_MOVE_START_AFTER_PROGRESS: "sir_cant_move_start_after_progress";
392
- readonly CANT_EDIT_WITH_TASK: "cant_edit_actvity_with_task";
393
- };
394
- /** Presentation key optionally returned with a blocked activity edit. */
395
- type EditAlertKey = (typeof EDIT_ALERT_KEY)[keyof typeof EDIT_ALERT_KEY];
396
-
397
- /** Describes whether a column value can be edited and why it may be blocked. */
398
- type EditResult = {
399
- readonly allowed: true;
400
- } | {
401
- readonly allowed: false;
402
- readonly reason: EditDenialReason;
403
- readonly alertKey?: EditAlertKey;
404
- };
405
89
 
406
90
  declare const EDITABLE: {
91
+ readonly ACTUAL_START: "actualStart";
92
+ readonly ACTUAL_FINISH: "actualFinish";
93
+ readonly PLANNED_START: "plannedStart";
94
+ readonly PLANNED_FINISH: "plannedFinish";
95
+ readonly REMAINING_DURATION_HOURS: "remainingDurationHours";
96
+ readonly EXECUTION_STATUS: "executionStatus";
97
+ readonly EXPECTED_FINISH: "expectedFinish";
98
+ readonly SUSPEND_DATE: "suspendDate";
99
+ readonly RESUME_DATE: "resumeDate";
100
+ readonly SECONDARY_CONSTRAINT_TYPE: "secondaryConstraintType";
101
+ readonly SECONDARY_CONSTRAINT_DATE: "secondaryConstraintDate";
102
+ readonly PERCENT_COMPLETE_TYPE: "percentCompleteType";
103
+ readonly PHYSICAL_PERCENT_COMPLETE: "physicalPercentComplete";
407
104
  readonly TEXT: "text";
408
105
  readonly DESCRIPTION: "description";
409
106
  readonly DURATION: "duration";
@@ -447,6 +144,19 @@ declare const COLUMN: {
447
144
  readonly UNIQUE_CORRELATIVE_ID: "unique_correlative_id";
448
145
  readonly PONDERATOR: "ponderator";
449
146
  readonly STATUS: "status";
147
+ readonly ACTUAL_START: "actualStart";
148
+ readonly ACTUAL_FINISH: "actualFinish";
149
+ readonly PLANNED_START: "plannedStart";
150
+ readonly PLANNED_FINISH: "plannedFinish";
151
+ readonly REMAINING_DURATION_HOURS: "remainingDurationHours";
152
+ readonly EXECUTION_STATUS: "executionStatus";
153
+ readonly EXPECTED_FINISH: "expectedFinish";
154
+ readonly SUSPEND_DATE: "suspendDate";
155
+ readonly RESUME_DATE: "resumeDate";
156
+ readonly SECONDARY_CONSTRAINT_TYPE: "secondaryConstraintType";
157
+ readonly SECONDARY_CONSTRAINT_DATE: "secondaryConstraintDate";
158
+ readonly PERCENT_COMPLETE_TYPE: "percentCompleteType";
159
+ readonly PHYSICAL_PERCENT_COMPLETE: "physicalPercentComplete";
450
160
  readonly TEXT: "text";
451
161
  readonly DESCRIPTION: "description";
452
162
  readonly DURATION: "duration";
@@ -471,9 +181,23 @@ type EditableColumnName = (typeof EDITABLE)[keyof typeof EDITABLE];
471
181
  /** Canonical editable or read-only column name. */
472
182
  type ColumnName = (typeof COLUMN)[keyof typeof COLUMN];
473
183
 
184
+ /** Describes whether a column value can be edited and why it may be blocked. */
185
+ type EditResult = {
186
+ readonly allowed: true;
187
+ } | {
188
+ readonly allowed: false;
189
+ readonly reason: EditDenialReason;
190
+ readonly alertKey?: EditAlertKey;
191
+ };
192
+
474
193
  /** Editable column handled by the canonical field-mutation pipeline. */
475
194
  type PipelineColumnName = Exclude<(typeof EDITABLE)[keyof typeof EDITABLE], typeof COLUMN.CUSTOM_PREDECESSORS | typeof COLUMN.CUSTOM_SUCESSORS>;
476
195
 
196
+ /** Progress percentage representing a not-started activity. */
197
+ declare const NOT_STARTED_PROGRESS = 0;
198
+ /** Progress percentage representing a completed activity. */
199
+ declare const COMPLETED_PROGRESS = 100;
200
+
477
201
  declare const CREATION_OVERRIDE_FIELD_LIST: readonly ["name", "description", "type", "startDate", "durationHours", "constraintType", "constraintDate", "calendarId", "assignedDefaultCalendar", "autoScheduling", "progress", "cost", "usedCost", "realCost", "workHours", "realWorkHours", "ponderator", "hasCustomPonderator", "customId", "subcontractId", "responsableIds", "tagIds", "isLookahead"];
478
202
  type CreationOverrideField = (typeof CREATION_OVERRIDE_FIELD_LIST)[number];
479
203
  type CreationOverrides = Partial<Pick<CoreActivity, CreationOverrideField>>;
@@ -583,6 +307,8 @@ declare const FILTER_FIELD: {
583
307
  readonly CALENDAR_ID: "calendarId";
584
308
  readonly SUBCONTRACT_ID: "subcontractId";
585
309
  readonly IS_CRITICAL: "isCritical";
310
+ readonly FLOAT_PATH: "floatPath";
311
+ readonly FLOAT_PATH_ORDER: "floatPathOrder";
586
312
  };
587
313
  /** Operators accepted by typed filter criteria. */
588
314
  declare const FILTER_OPERATOR: {
@@ -609,7 +335,7 @@ type MembershipOperator = typeof FILTER_OPERATOR.SOME_OF | typeof FILTER_OPERATO
609
335
  /** Operator accepted by at least one public filter field. */
610
336
  type FilterOperator = StringOperator | NumberOperator | DateOperator | typeof FILTER_OPERATOR.BETWEEN | MembershipOperator;
611
337
  type StringFilterField = typeof FILTER_FIELD.NAME | typeof FILTER_FIELD.DESCRIPTION | typeof FILTER_FIELD.CUSTOM_ID;
612
- type NumberFilterField = typeof FILTER_FIELD.CORRELATIVE_ID | typeof FILTER_FIELD.UNIQUE_CORRELATIVE_ID | typeof FILTER_FIELD.PROGRESS | typeof FILTER_FIELD.DURATION_DAYS | typeof FILTER_FIELD.CALENDAR_DURATION | typeof FILTER_FIELD.COST | typeof FILTER_FIELD.USED_COST | typeof FILTER_FIELD.REAL_COST | typeof FILTER_FIELD.WORK_HOURS | typeof FILTER_FIELD.REAL_WORK_HOURS | typeof FILTER_FIELD.PONDERATOR | typeof FILTER_FIELD.FREE_SLACK_DAYS | typeof FILTER_FIELD.TOTAL_SLACK_DAYS | typeof FILTER_FIELD.EXPECTED_PROGRESS_BASELINE | typeof FILTER_FIELD.BASELINE_DURATION_DAYS | typeof FILTER_FIELD.BASELINE_VARIANCE_DAYS | typeof FILTER_FIELD.BASELINE_COST | typeof FILTER_FIELD.BASELINE_WORK_HOURS | typeof FILTER_FIELD.EXPECTED_PROGRESS;
338
+ type NumberFilterField = typeof FILTER_FIELD.CORRELATIVE_ID | typeof FILTER_FIELD.UNIQUE_CORRELATIVE_ID | typeof FILTER_FIELD.PROGRESS | typeof FILTER_FIELD.DURATION_DAYS | typeof FILTER_FIELD.CALENDAR_DURATION | typeof FILTER_FIELD.COST | typeof FILTER_FIELD.USED_COST | typeof FILTER_FIELD.REAL_COST | typeof FILTER_FIELD.WORK_HOURS | typeof FILTER_FIELD.REAL_WORK_HOURS | typeof FILTER_FIELD.PONDERATOR | typeof FILTER_FIELD.FREE_SLACK_DAYS | typeof FILTER_FIELD.TOTAL_SLACK_DAYS | typeof FILTER_FIELD.EXPECTED_PROGRESS_BASELINE | typeof FILTER_FIELD.BASELINE_DURATION_DAYS | typeof FILTER_FIELD.BASELINE_VARIANCE_DAYS | typeof FILTER_FIELD.BASELINE_COST | typeof FILTER_FIELD.BASELINE_WORK_HOURS | typeof FILTER_FIELD.EXPECTED_PROGRESS | typeof FILTER_FIELD.FLOAT_PATH | typeof FILTER_FIELD.FLOAT_PATH_ORDER;
613
339
  type DateFilterField = typeof FILTER_FIELD.START_DATE | typeof FILTER_FIELD.END_DATE | typeof FILTER_FIELD.CONSTRAINT_DATE | typeof FILTER_FIELD.BASELINE_START_DATE | typeof FILTER_FIELD.BASELINE_END_DATE | typeof FILTER_FIELD.EARLY_START | typeof FILTER_FIELD.EARLY_FINISH | typeof FILTER_FIELD.LATE_START | typeof FILTER_FIELD.LATE_FINISH;
614
340
  type IdArrayFilterField = typeof FILTER_FIELD.RESPONSABLE_IDS | typeof FILTER_FIELD.TAG_IDS;
615
341
  type EnumFilterField = typeof FILTER_FIELD.STATUS | typeof FILTER_FIELD.CONSTRAINT_TYPE;
@@ -916,6 +642,9 @@ interface PersistedEntityIdentity {
916
642
  interface PersistenceCheckpoint {
917
643
  readonly activities: ReadonlyArray<Readonly<CoreActivity>>;
918
644
  readonly links: ReadonlyArray<Readonly<Link>>;
645
+ readonly p6Settings?: Readonly<P6ScheduleSettings> | null;
646
+ readonly p6ProjectState?: Readonly<P6ProjectState> | null;
647
+ readonly p6LatestRunLog?: Readonly<P6ScheduleRunLog> | null;
919
648
  readonly historyBoundary: number;
920
649
  }
921
650
  /** Available activity-batch replacement policies. */
@@ -1153,6 +882,7 @@ interface DispatchOptions {
1153
882
  skipCriticalPath?: boolean;
1154
883
  /** Rejects create/update commands that touch an activity with children. */
1155
884
  rejectParentLinkMutations?: boolean;
885
+ confirmations?: readonly ConfirmationKind[];
1156
886
  }
1157
887
  /**
1158
888
  * Complete accepted or rejected command result returned unchanged by public APIs.
@@ -1171,6 +901,7 @@ type DispatchResult = {
1171
901
  ok: false;
1172
902
  reason: string;
1173
903
  alertKey?: string | undefined;
904
+ confirmation?: ConfirmationRequest;
1174
905
  };
1175
906
  /** Ordered per-command results plus the single deferred finalization payload. */
1176
907
  interface DispatchManyResult {
@@ -1196,6 +927,7 @@ type DatesBatchVerdict = {
1196
927
  ok: false;
1197
928
  reason: string;
1198
929
  alertKey?: string | undefined;
930
+ confirmation?: ConfirmationRequest;
1199
931
  };
1200
932
  /** Per-operation acceptance result for a dependency batch. */
1201
933
  type LinkBatchVerdict = {
@@ -1244,59 +976,664 @@ interface ConstraintWarning {
1244
976
  projectedDate: Date;
1245
977
  messageKey: string;
1246
978
  }
1247
- /** Boolean value before and after a view-state mutation. */
1248
- interface ViewStatePropChange {
1249
- readonly before: boolean;
1250
- readonly after: boolean;
979
+ /** Boolean value before and after a view-state mutation. */
980
+ interface ViewStatePropChange {
981
+ readonly before: boolean;
982
+ readonly after: boolean;
983
+ }
984
+ /** Selection and/or visibility projection change for one activity. */
985
+ interface ViewStateChange {
986
+ readonly activityId: ActivityId;
987
+ readonly checked?: ViewStatePropChange;
988
+ readonly visible?: ViewStatePropChange;
989
+ }
990
+ /** Aggregate and lifecycle change-set source kinds. */
991
+ declare const CHANGE_SET_SOURCE_KIND: {
992
+ readonly DISPATCH_MANY: "dispatch-many";
993
+ readonly INIT: "init";
994
+ readonly UNDO: "undo";
995
+ readonly REDO: "redo";
996
+ readonly P6_SETTINGS_UPDATE: "p6-settings-update";
997
+ readonly P6_ACTIVITY_UPDATE: "p6-activity-update";
998
+ readonly P6_SCHEDULE: "p6-schedule";
999
+ };
1000
+ /** Truthful source for one partial ordered public dispatch batch. */
1001
+ interface DispatchManyChangeSetSource {
1002
+ readonly kind: typeof CHANGE_SET_SOURCE_KIND.DISPATCH_MANY;
1003
+ readonly actions: readonly DispatchManyAction[];
1004
+ }
1005
+ /** Public command, activity batch, or lifecycle operation that produced changes. */
1006
+ type ChangeSetSource = DispatchManyAction | DispatchManyChangeSetSource | {
1007
+ kind: typeof CHANGE_SET_SOURCE_KIND.INIT | typeof CHANGE_SET_SOURCE_KIND.UNDO | typeof CHANGE_SET_SOURCE_KIND.REDO;
1008
+ } | {
1009
+ kind: typeof CHANGE_SET_SOURCE_KIND.P6_SETTINGS_UPDATE | typeof CHANGE_SET_SOURCE_KIND.P6_ACTIVITY_UPDATE | typeof CHANGE_SET_SOURCE_KIND.P6_SCHEDULE;
1010
+ };
1011
+ /** Before/after images of the P6 schedule settings when an operation changed them. */
1012
+ interface P6SettingsChange {
1013
+ readonly before: P6ScheduleSettings | null;
1014
+ readonly after: P6ScheduleSettings | null;
1015
+ }
1016
+ /** Before/after images of the project planned start when an operation changed it. */
1017
+ interface P6ProjectPlannedStartChange {
1018
+ readonly before: Date | null;
1019
+ readonly after: Date | null;
1020
+ }
1021
+ /**
1022
+ * Complete ordered projection payload produced by an accepted operation.
1023
+ *
1024
+ * Consumers apply every populated collection in result order. Applying a change
1025
+ * set updates external projection only; persistence remains consumer-owned.
1026
+ */
1027
+ interface ChangeSet {
1028
+ /** Command, ordered dispatch batch, or lifecycle operation that produced it. */
1029
+ source: ChangeSetSource;
1030
+ /** Activity create, update, and delete records. */
1031
+ activities: ReadonlyArray<EntityChange<CoreActivity>>;
1032
+ /** Link create, update, and delete records; lag fields use stored hours. */
1033
+ links: ReadonlyArray<EntityChange<Link>>;
1034
+ /** Calendar create, update, and delete records. */
1035
+ calendars: ReadonlyArray<EntityChange<Calendar>>;
1036
+ /** Consumer-owned analytics events. */
1037
+ trackingEvents: ReadonlyArray<TrackingEvent>;
1038
+ /** Optional checked/visible projection updates. */
1039
+ viewState?: ReadonlyArray<ViewStateChange>;
1040
+ /** Optional visual child order grouped by parent. */
1041
+ order?: ReadonlyArray<BranchOrderChange>;
1042
+ /** Optional integration effects for consumer handling. */
1043
+ effects?: ReadonlyArray<ScheduleEffect>;
1044
+ /** Optional non-fatal warnings for consumer presentation. */
1045
+ warnings?: ReadonlyArray<ConstraintWarning>;
1046
+ p6Settings?: P6SettingsChange;
1047
+ p6ProjectPlannedStart?: P6ProjectPlannedStartChange;
1048
+ }
1049
+
1050
+ declare const P6_CRITICAL_ACTIVITY_METHOD: {
1051
+ readonly TOTAL_FLOAT: "total_float";
1052
+ readonly LONGEST_PATH: "longest_path";
1053
+ };
1054
+ declare const P6_PERCENT_COMPLETE_TYPE: {
1055
+ readonly DURATION: "duration";
1056
+ readonly UNITS: "units";
1057
+ readonly PHYSICAL: "physical";
1058
+ };
1059
+ declare const P6_ACTIVITY_TYPE: {
1060
+ readonly TASK: "task";
1061
+ readonly LEVEL_OF_EFFORT: "level_of_effort";
1062
+ readonly START_MILESTONE: "start_milestone";
1063
+ readonly FINISH_MILESTONE: "finish_milestone";
1064
+ readonly WBS_SUMMARY: "wbs_summary";
1065
+ readonly RESOURCE_DEPENDENT: "resource_dependent";
1066
+ };
1067
+ /** P6 scheduling option deciding how progressed successors with unsatisfied logic are scheduled. */
1068
+ type P6OutOfSequencePolicy = 'retained_logic' | 'progress_override' | 'actual_dates';
1069
+ /** Activity identifier column used when P6 relationships reference other activities. */
1070
+ type P6DependencyReference = 'correlative_id' | 'custom_id';
1071
+ /** Project-level Data Date state persisted alongside the schedule settings. */
1072
+ interface P6ProjectState {
1073
+ readonly plannedStart: Date | null;
1074
+ }
1075
+ /**
1076
+ * Persisted P6 schedule options (F9 dialog and project defaults). `dataDate`
1077
+ * `null` means the Data Date regime is inactive and normal Outbuild rules apply.
1078
+ * Durations and thresholds are expressed in working hours.
1079
+ */
1080
+ interface P6ScheduleSettings {
1081
+ readonly dataDate: Date | null;
1082
+ readonly outOfSequencePolicy: P6OutOfSequencePolicy;
1083
+ readonly dependencyReference: P6DependencyReference;
1084
+ readonly useExpectedFinishDates: boolean;
1085
+ readonly startToStartLagBasis: 'actual_start' | 'early_start';
1086
+ readonly relationshipLagCalendar: 'predecessor' | 'successor' | 'project_default' | 'twenty_four_hour';
1087
+ readonly totalFloatMethod: 'start_float' | 'finish_float' | 'smallest';
1088
+ readonly criticalActivityMethod: (typeof P6_CRITICAL_ACTIVITY_METHOD)[keyof typeof P6_CRITICAL_ACTIVITY_METHOD];
1089
+ readonly criticalFloatThresholdHours: number;
1090
+ readonly makeOpenEndedActivitiesCritical: boolean;
1091
+ readonly externalRelationshipPolicy: string;
1092
+ readonly calculateFloatBasedOn: 'each_project' | 'opened_projects';
1093
+ readonly setDataDateAndPlannedStartToForecastStart: boolean;
1094
+ readonly projectMustFinishBy: Date | null;
1095
+ readonly projectForecastStart: Date | null;
1096
+ readonly multipleFloatPaths: {
1097
+ readonly enabled: boolean;
1098
+ readonly limitEnabled: boolean;
1099
+ readonly maximum: number;
1100
+ readonly useTotalFloat: boolean;
1101
+ readonly endingActivityId: ActivityId | null;
1102
+ };
1103
+ }
1104
+ /** P6 activity subtype (`task`, milestones, level of effort, WBS summary, resource dependent). */
1105
+ type P6ActivityType = (typeof P6_ACTIVITY_TYPE)[keyof typeof P6_ACTIVITY_TYPE];
1106
+ declare const P6_DURATION_TYPE: {
1107
+ readonly FIXED_DURATION_AND_UNITS: "fixed_duration_and_units";
1108
+ readonly FIXED_DURATION_AND_UNITS_PER_TIME: "fixed_duration_and_units_per_time";
1109
+ };
1110
+ /** P6 duration type governing how units and duration interact on an activity. */
1111
+ type P6DurationType = (typeof P6_DURATION_TYPE)[keyof typeof P6_DURATION_TYPE];
1112
+ type P6PrimaryConstraintType = ConstraintType | 'start_on' | 'finish_on' | 'mandatory_start' | 'mandatory_finish';
1113
+ /** Minimal scheduling contract for a P6 resource assignment. */
1114
+ interface P6ResourceAssignment {
1115
+ readonly id: string;
1116
+ readonly resourceId: string;
1117
+ readonly calendarId: CalendarId;
1118
+ readonly actualStart: Date | null;
1119
+ readonly actualFinish: Date | null;
1120
+ readonly actualUnits: number;
1121
+ readonly remainingUnits: number;
1122
+ readonly unitsPerHour: number;
1123
+ }
1124
+ /**
1125
+ * Persisted and calculated P6 properties of one activity. Dates are UTC
1126
+ * instants, durations and floats are working hours, percentages are 0–100.
1127
+ */
1128
+ interface P6ActivityData {
1129
+ /** P6 scheduling subtype needed when its date endpoints have distinct logic. */
1130
+ readonly activityType?: P6ActivityType;
1131
+ /** P6 duration behavior, preserved when a certified calculation depends on it. */
1132
+ readonly durationType?: P6DurationType;
1133
+ /** Exact imported P6 token retained when canonical types have different scheduling semantics. */
1134
+ readonly sourcePrimaryConstraintToken?: string | null;
1135
+ readonly resourceAssignments?: readonly P6ResourceAssignment[];
1136
+ readonly actualStart: Date | null;
1137
+ readonly actualFinish: Date | null;
1138
+ readonly plannedStart: Date | null;
1139
+ readonly plannedFinish: Date | null;
1140
+ readonly remainingDurationHours: number;
1141
+ readonly executionStatus: 'not_started' | 'in_progress' | 'completed';
1142
+ readonly expectedFinish: Date | null;
1143
+ readonly suspendDate: Date | null;
1144
+ readonly resumeDate: Date | null;
1145
+ /** Raw primary constraint retained from P6 before activity-date normalization. */
1146
+ readonly primaryConstraintType?: P6PrimaryConstraintType | null;
1147
+ readonly primaryConstraintDate?: Date | null;
1148
+ readonly secondaryConstraintType: ConstraintType | null;
1149
+ readonly secondaryConstraintDate: Date | null;
1150
+ readonly percentCompleteType: (typeof P6_PERCENT_COMPLETE_TYPE)[keyof typeof P6_PERCENT_COMPLETE_TYPE];
1151
+ readonly physicalPercentComplete: number;
1152
+ readonly actualDurationHours: number;
1153
+ readonly atCompletionDurationHours: number;
1154
+ readonly durationPercentComplete: number;
1155
+ readonly unitsPercentComplete: number;
1156
+ readonly schedulePercentComplete: number | null;
1157
+ readonly remainingFloatHours: number | null;
1158
+ readonly remainingEarlyStart: Date | null;
1159
+ readonly remainingEarlyFinish: Date | null;
1160
+ readonly remainingLateStart: Date | null;
1161
+ readonly remainingLateFinish: Date | null;
1162
+ readonly earlyStart: Date | null;
1163
+ readonly earlyFinish: Date | null;
1164
+ readonly lateStart: Date | null;
1165
+ readonly lateFinish: Date | null;
1166
+ readonly floatPath: number | null;
1167
+ readonly floatPathOrder: number | null;
1168
+ readonly longestPath: boolean;
1169
+ }
1170
+ /** The closed set of activity properties exposed as P6 Data Date columns. */
1171
+ type P6ActivityColumnKey = Exclude<keyof P6ActivityData, 'activityType' | 'durationType' | 'sourcePrimaryConstraintToken' | 'resourceAssignments' | 'primaryConstraintType' | 'primaryConstraintDate'>;
1172
+ /** Imported inputs the P6 calculations read but never derive (original duration, units, baseline, free float). */
1173
+ interface P6ActivityCalculationInputs {
1174
+ readonly originalDurationHours: number;
1175
+ readonly actualLaborUnits: number;
1176
+ readonly remainingLaborUnits: number;
1177
+ readonly actualNonlaborUnits: number;
1178
+ readonly remainingNonlaborUnits: number;
1179
+ readonly primaryBaselineStart: Date | null;
1180
+ readonly primaryBaselineFinish: Date | null;
1181
+ readonly freeFloatHours: number | null;
1182
+ }
1183
+ /** Complete P6 state of an activity, ready to be scheduled. */
1184
+ type P6ActivityState = P6ActivityData & P6ActivityCalculationInputs;
1185
+ /**
1186
+ * P6 state stored on `CoreActivity.p6`. `remainingDurationHours` is `null`
1187
+ * until the activity has been imported or edited into a schedulable state.
1188
+ */
1189
+ type P6ActivityDraftState = Omit<P6ActivityState, 'remainingDurationHours'> & {
1190
+ readonly remainingDurationHours: number | null;
1191
+ };
1192
+ /** Activity field the F9 readiness check requires before a schedule run. */
1193
+ type P6RequiredHistoricalField = 'actualStart' | 'actualFinish' | 'remainingDurationHours';
1194
+ /** One activity blocking a schedule run and the fields it still lacks. */
1195
+ interface P6MissingActivityInput {
1196
+ readonly activityId: ActivityId;
1197
+ readonly fields: readonly P6RequiredHistoricalField[];
1198
+ }
1199
+ /** Editable subset of the P6 activity state accepted by `dataDates.updateActivity`. */
1200
+ type P6ActivityInputPatch = Partial<Pick<P6ActivityState, 'actualStart' | 'actualFinish' | 'plannedStart' | 'plannedFinish' | 'remainingDurationHours' | 'originalDurationHours' | 'executionStatus' | 'expectedFinish' | 'suspendDate' | 'resumeDate' | 'secondaryConstraintType' | 'secondaryConstraintDate' | 'percentCompleteType' | 'physicalPercentComplete'>> & {
1201
+ /**
1202
+ * Generic Activity % Complete input, routed by the activity's
1203
+ * Percent Complete Type: physical writes Physical %, duration
1204
+ * normalizes Remaining Duration, units is read-only (P6 24.12).
1205
+ */
1206
+ readonly activityPercentComplete?: number;
1207
+ };
1208
+ /** Data Date payload accepted by the core at load time (`input.p6`). */
1209
+ interface P6ScheduleInput {
1210
+ readonly settings: P6ScheduleSettings;
1211
+ readonly projectPlannedStart: Date | null;
1212
+ readonly activities: Readonly<Record<ActivityId, P6ActivityDraftState>>;
1213
+ readonly externalRelationshipIds?: readonly string[];
1214
+ readonly latestRunLog?: P6ScheduleRunLog | null;
1215
+ }
1216
+ /** Stable code identifying a schedule-run warning category. */
1217
+ type P6ScheduleDiagnosticCode = 'P6_NO_PREDECESSOR' | 'P6_NO_SUCCESSOR' | 'P6_OUT_OF_SEQUENCE' | 'P6_ACTUAL_AFTER_DATA_DATE' | 'P6_INVALID_MILESTONE_RELATIONSHIP' | 'P6_UNSATISFIED_CONSTRAINT';
1218
+ /** Project and schedule identity stamped on every diagnostic and run log. */
1219
+ interface P6DiagnosticProjectIdentity {
1220
+ readonly projectId: string;
1221
+ readonly scheduleId: string;
1222
+ readonly scheduleCode: string;
1223
+ readonly scheduleName: string;
1224
+ }
1225
+ /** Relationship type as reported in P6 diagnostics (long form of `fs`/`ss`/`ff`/`sf`). */
1226
+ type P6DiagnosticRelationshipType = 'finish_to_start' | 'start_to_start' | 'finish_to_finish' | 'start_to_finish';
1227
+ /** Relationship involved in a diagnostic; `lagHours` is in working hours. */
1228
+ interface P6DiagnosticRelationship {
1229
+ readonly id: string;
1230
+ readonly predecessorActivityId: ActivityId;
1231
+ readonly predecessorActivityCode: string | null;
1232
+ readonly successorActivityId: ActivityId;
1233
+ readonly successorActivityCode: string | null;
1234
+ readonly type: P6DiagnosticRelationshipType;
1235
+ readonly lagHours: number;
1236
+ }
1237
+ /** One schedule-run warning with the activity, relationship and rule that produced it. */
1238
+ interface P6ScheduleDiagnostic {
1239
+ readonly kind: 'diagnostic';
1240
+ readonly code: P6ScheduleDiagnosticCode;
1241
+ readonly category: 'open_ended' | 'out_of_sequence' | 'actual_after_data_date' | 'milestone_relationship' | 'unsatisfied_constraint';
1242
+ readonly severity: 'warning';
1243
+ readonly project: P6DiagnosticProjectIdentity;
1244
+ readonly activityId: ActivityId;
1245
+ readonly activityCode: string | null;
1246
+ readonly activityName: string;
1247
+ readonly activityStatus: P6ActivityState['executionStatus'];
1248
+ readonly dataDate: Date;
1249
+ readonly dates: {
1250
+ readonly actualStart: Date | null;
1251
+ readonly actualFinish: Date | null;
1252
+ };
1253
+ readonly relationship: P6DiagnosticRelationship | null;
1254
+ readonly explanation: {
1255
+ readonly rule: 'activity_has_no_predecessor' | 'activity_has_no_successor' | 'successor_progress_precedes_required_logic' | 'actual_date_is_after_data_date' | 'milestone_endpoint_is_not_available' | 'constraint_could_not_be_satisfied';
1256
+ };
1257
+ }
1258
+ /** Read-only diagnostic as surfaced in `P6ScheduleResult.warnings` and the run log. */
1259
+ type P6ScheduleWarning = Readonly<P6ScheduleDiagnostic>;
1260
+ /** Persisted summary of the latest schedule run (settings, statistics, warnings, digest). */
1261
+ interface P6ScheduleRunLog {
1262
+ readonly schemaVersion: 1;
1263
+ readonly calculatedAt: Date | null;
1264
+ readonly dataDate: Date;
1265
+ readonly project: P6DiagnosticProjectIdentity;
1266
+ readonly settings: P6ScheduleSettings;
1267
+ readonly statistics: {
1268
+ readonly calculatedActivityCount: number;
1269
+ readonly criticalActivityCount: number;
1270
+ readonly warningCount: number;
1271
+ };
1272
+ readonly warnings: ReadonlyArray<P6ScheduleWarning>;
1273
+ readonly scheduleDigest: string;
1274
+ }
1275
+ /** Outcome of `dataDates.schedule()`: the applied ChangeSet plus calculated activities, critical path, warnings and log. */
1276
+ interface P6ScheduleResult {
1277
+ readonly changes: ChangeSet;
1278
+ readonly calculatedActivities: ReadonlyArray<Readonly<CoreActivity>>;
1279
+ readonly criticalPath: ReadonlyArray<ActivityId>;
1280
+ readonly warnings: ReadonlyArray<P6ScheduleWarning>;
1281
+ readonly log: Readonly<P6ScheduleRunLog>;
1282
+ }
1283
+
1284
+ /** Canonical activity identifier inside a schedule. */
1285
+ type ActivityId = string;
1286
+ /** Canonical dependency-link identifier inside a schedule. */
1287
+ type LinkId = string;
1288
+ /** Canonical calendar identifier inside a schedule. */
1289
+ type CalendarId = string;
1290
+
1291
+ /** Named work-time traversal directions. */
1292
+ declare const WORK_TIME_DIRECTION: {
1293
+ readonly FUTURE: "future";
1294
+ readonly PAST: "past";
1295
+ };
1296
+ /** Direction used for calendar-aware work-time traversal. */
1297
+ type WorkTimeDirection = (typeof WORK_TIME_DIRECTION)[keyof typeof WORK_TIME_DIRECTION];
1298
+ /** Named units accepted by calendar duration operations. */
1299
+ declare const CALENDAR_UNIT: {
1300
+ readonly MINUTE: "minute";
1301
+ readonly HOUR: "hour";
1302
+ readonly DAY: "day";
1303
+ };
1304
+ /** Unit accepted by calendar duration operations. */
1305
+ type CalendarUnit = (typeof CALENDAR_UNIT)[keyof typeof CALENDAR_UNIT];
1306
+ /** Criteria available for schedule-wide activity weighting. */
1307
+ declare const ACTIVITY_PONDERATOR_CRITERION: {
1308
+ readonly DURATION: "DURATION";
1309
+ readonly COST: "COST";
1310
+ readonly WORK_HOURS: "HH";
1311
+ };
1312
+ /** Schedule-wide activity weighting criterion. */
1313
+ type ActivityCreter = (typeof ACTIVITY_PONDERATOR_CRITERION)[keyof typeof ACTIVITY_PONDERATOR_CRITERION];
1314
+ /** Modes used to derive activity status from actual or baseline progress. */
1315
+ declare const STATUS_CRITERIA: {
1316
+ readonly BASELINE: "Baseline";
1317
+ readonly ACTUAL: "Actual";
1318
+ };
1319
+ /** Mode used to derive activity status. */
1320
+ type StatusCriteria = (typeof STATUS_CRITERIA)[keyof typeof STATUS_CRITERIA];
1321
+ /** Backend baseline-version metadata retained during normalization. */
1322
+ interface BaselineVersion {
1323
+ id?: number;
1324
+ name?: string | null;
1325
+ active?: boolean;
1326
+ visible?: boolean;
1327
+ [key: string]: unknown;
1328
+ }
1329
+ /** Backend baseline point accepted at the package boundary. */
1330
+ interface BaselinePoint {
1331
+ start_date: string | null;
1332
+ end_date: string | null;
1333
+ /** Baseline duration in working days. */
1334
+ duration: number;
1335
+ cost: number | string;
1336
+ /** Baseline work in hours. */
1337
+ hh_work: number | string;
1338
+ sectorbaselineversion?: BaselineVersion;
1339
+ sectorbaselineversionId?: number;
1340
+ baseCalendarId?: number;
1341
+ hoursPerDay?: number;
1342
+ hoursPerWeek?: number;
1343
+ [key: string]: unknown;
1344
+ }
1345
+ /** Minimal pending impact-request identity consumed by schedule effects. */
1346
+ interface PendingRequest {
1347
+ id: string;
1348
+ }
1349
+ /** Derived activity statuses exposed to consumers. */
1350
+ declare const STATUS: {
1351
+ readonly DONE: "Done";
1352
+ readonly OVERDUE: "Overdue";
1353
+ readonly ADVANCEMENT: "Advancement";
1354
+ readonly WAITING: "Waiting";
1355
+ readonly DOING: "Doing";
1356
+ };
1357
+ /** Derived activity status exposed on normalized activities. */
1358
+ type ActivityStatus = (typeof STATUS)[keyof typeof STATUS];
1359
+ /** Critical-path dates and slack for one activity. */
1360
+ interface CriticalPathResult {
1361
+ /** Earliest feasible start, or `null` when not calculated. */
1362
+ earlyStart: Date | null;
1363
+ /** Earliest feasible finish, or `null` when not calculated. */
1364
+ earlyFinish: Date | null;
1365
+ /** Latest feasible start, or `null` when not calculated. */
1366
+ lateStart: Date | null;
1367
+ /** Latest feasible finish, or `null` when not calculated. */
1368
+ lateFinish: Date | null;
1369
+ /** Total working-hour slack, or `null` when not calculated. */
1370
+ totalSlackHours: number | null;
1371
+ }
1372
+ /** Active baseline values copied onto an activity for projection. */
1373
+ interface ActivityBaselineSnapshot {
1374
+ /** Baseline start, or `null` when unavailable. */
1375
+ startDate: Date | null;
1376
+ /** Baseline end, or `null` when unavailable. */
1377
+ endDate: Date | null;
1378
+ /** Baseline duration in working days. */
1379
+ durationDays: number;
1380
+ cost: number;
1381
+ /** Baseline work in hours. */
1382
+ workHours: number;
1383
+ }
1384
+ /** Normalized baseline point retained on a core activity. */
1385
+ interface CoreBaselinePoint {
1386
+ /** Baseline start, or `null` when the wire value is unavailable. */
1387
+ startDate: Date | null;
1388
+ /** Baseline end, or `null` when the wire value is unavailable. */
1389
+ endDate: Date | null;
1390
+ /** Duration in working days. */
1391
+ durationDays: number;
1392
+ cost: number;
1393
+ workHours: number;
1394
+ versionId: number | null;
1395
+ isActiveVersion: boolean;
1396
+ isVisibleVersion: boolean;
1397
+ baseCalendarId: CalendarId | null;
1398
+ /** Calendar hours per working day, or `null` when unspecified. */
1399
+ hoursPerDay: number | null;
1400
+ /** Calendar hours per working week, or `null` when unspecified. */
1401
+ hoursPerWeek: number | null;
1402
+ }
1403
+ /**
1404
+ * Complete normalized activity snapshot owned by Schedule Core.
1405
+ *
1406
+ * Read APIs return defensive copies. Stored duration and slack fields use
1407
+ * working hours; façade inputs use working days where documented.
1408
+ */
1409
+ interface CoreActivity {
1410
+ id: ActivityId;
1411
+ proplannerId: number | null;
1412
+ parentId: ActivityId | null;
1413
+ name: string;
1414
+ description: string;
1415
+ type: ActivityType;
1416
+ startDate: Date;
1417
+ endDate: Date;
1418
+ /** Stored duration in working hours. */
1419
+ durationHours: number;
1420
+ /** Scheduling constraint, or `null` when unconstrained. */
1421
+ constraintType: ConstraintType | null;
1422
+ /** Constraint date, or `null` when the constraint has no date. */
1423
+ constraintDate: Date | null;
1424
+ autoScheduling: boolean;
1425
+ /** Assigned calendar ID, or `null` when no known source/default calendar resolves. */
1426
+ calendarId: CalendarId | null;
1427
+ assignedDefaultCalendar: boolean;
1428
+ /** Consumer-origin date, or `null` when absent. */
1429
+ dateOrigin: Date | null;
1430
+ progress: number;
1431
+ cost: number;
1432
+ usedCost: number;
1433
+ realCost: number;
1434
+ workHours: number;
1435
+ realWorkHours: number;
1436
+ ponderator: number;
1437
+ hasCustomPonderator: boolean;
1438
+ correlativeId: number;
1439
+ uniqueCorrelativeId: string;
1440
+ customId: string | null;
1441
+ subcontractId: number | null;
1442
+ isLookahead: boolean;
1443
+ hasLookaheadTasks: boolean;
1444
+ newActivityIds: ActivityId[];
1445
+ hasNewActivities: boolean;
1446
+ isNewActivity?: true | null;
1447
+ pendingRequestIds: string[];
1448
+ responsableIds: string[];
1449
+ tagIds: string[];
1450
+ baselinePoints: CoreBaselinePoint[];
1451
+ baselineSnapshot: ActivityBaselineSnapshot | null;
1452
+ /** Summary roll-up duration in working hours. */
1453
+ recursiveDurationHours: number;
1454
+ isCritical: boolean;
1455
+ /** Free slack in working hours, or `null` when not calculated. */
1456
+ freeSlackHours: number | null;
1457
+ /** Inclusive calendar-day span, or `null` when unavailable. */
1458
+ calendarDuration?: number | null;
1459
+ /**
1460
+ * Signed working days between the activity end and its visible baseline end,
1461
+ * or `null` when no visible baseline applies. Positive means finishing late.
1462
+ */
1463
+ baselineVarianceDays: number | null;
1464
+ /** Expected progress percentage, or `null` when unavailable. */
1465
+ expectedProgress: number | null;
1466
+ /** Baseline expected progress percentage, or `null` when unavailable. */
1467
+ expectedProgressBaseline: number | null;
1468
+ status: ActivityStatus | null;
1469
+ criticalPath: CriticalPathResult | null;
1470
+ p6?: P6ActivityDraftState;
1471
+ }
1472
+ /** Normalized dependency-link snapshot. */
1473
+ interface Link {
1474
+ id: LinkId;
1475
+ source: ActivityId;
1476
+ target: ActivityId;
1477
+ type: LinkType;
1478
+ /** Stored dependency lag in working hours. */
1479
+ lag: number;
1480
+ /** Free slack in working hours, or `null` when not calculated. */
1481
+ freeSlackHours: number | null;
1482
+ isCritical: boolean;
1483
+ ganttId?: number;
1484
+ sectorId?: number;
1485
+ proplannerId?: number;
1486
+ }
1487
+ /** Persisted identity retained after an activity is deleted. */
1488
+ interface DeletedActivitySnapshot {
1489
+ readonly id: ActivityId;
1490
+ readonly proplannerId: number;
1491
+ readonly parentId: ActivityId | null;
1492
+ readonly hadBaseline: boolean;
1251
1493
  }
1252
- /** Selection and/or visibility projection change for one activity. */
1253
- interface ViewStateChange {
1254
- readonly activityId: ActivityId;
1255
- readonly checked?: ViewStatePropChange;
1256
- readonly visible?: ViewStatePropChange;
1494
+ /** Persisted link identity and endpoints retained after deletion. */
1495
+ interface DeletedLinkSnapshot {
1496
+ readonly id: LinkId;
1497
+ readonly proplannerId: number;
1498
+ readonly source: ActivityId;
1499
+ readonly target: ActivityId;
1500
+ readonly type: LinkType;
1501
+ /** Stored lag in working hours. */
1502
+ readonly lag: number;
1257
1503
  }
1258
- /** Aggregate and lifecycle change-set source kinds. */
1259
- declare const CHANGE_SET_SOURCE_KIND: {
1260
- readonly DISPATCH_MANY: "dispatch-many";
1261
- readonly INIT: "init";
1262
- readonly UNDO: "undo";
1263
- readonly REDO: "redo";
1504
+ /** Normalized calendar work-week, exception, and custom-week rules. */
1505
+ interface CalendarWorktime {
1506
+ days: Array<false | string[]>;
1507
+ hours: string[];
1508
+ dates?: Record<string, false | string[]>;
1509
+ customWeeks?: Record<string, unknown>;
1510
+ }
1511
+ /** Normalized schedule or base calendar snapshot. */
1512
+ interface Calendar {
1513
+ id: CalendarId;
1514
+ name: string;
1515
+ worktime: CalendarWorktime;
1516
+ is_default: boolean;
1517
+ baseDefault?: boolean;
1518
+ exceptions?: Record<string, {
1519
+ working: boolean;
1520
+ hours?: string[];
1521
+ }>;
1522
+ }
1523
+ /** Normalized schedule metadata derived from the backend `sector` field. */
1524
+ interface SectorMetadata {
1525
+ id: string;
1526
+ name: string;
1527
+ /** Working hours per day used for day/hour conversion. */
1528
+ hoursPerDay: number;
1529
+ /** Working hours per week. */
1530
+ hoursPerWeek: number;
1531
+ dateFormat: string;
1532
+ projectId: number;
1533
+ companyId: number;
1534
+ customIdPrefix?: string;
1535
+ customIdIncrement?: string;
1536
+ updateDurationForPrimaveraEndDate?: boolean;
1537
+ activityCreter?: ActivityCreter;
1538
+ statusCriteria: StatusCriteria;
1539
+ ganttId: number | null;
1540
+ }
1541
+ /** Canonical entity-change operations in consumer projections. */
1542
+ declare const ENTITY_CHANGE_KIND: {
1543
+ readonly CREATED: "created";
1544
+ readonly UPDATED: "updated";
1545
+ readonly DELETED: "deleted";
1264
1546
  };
1265
- /** Truthful source for one partial ordered public dispatch batch. */
1266
- interface DispatchManyChangeSetSource {
1267
- readonly kind: typeof CHANGE_SET_SOURCE_KIND.DISPATCH_MANY;
1268
- readonly actions: readonly DispatchManyAction[];
1547
+ type EntityChangeKind = (typeof ENTITY_CHANGE_KIND)[keyof typeof ENTITY_CHANGE_KIND];
1548
+ /** One created, updated, or deleted entity in a consumer projection. */
1549
+ interface EntityChange<T> {
1550
+ id: string;
1551
+ kind: EntityChangeKind;
1552
+ fields?: Record<string, {
1553
+ before: unknown;
1554
+ after: unknown;
1555
+ }> | undefined;
1556
+ /** Complete post-change snapshot, or `null` for deletion. */
1557
+ after: Readonly<T> | null;
1269
1558
  }
1270
- /** Public command, activity batch, or lifecycle operation that produced changes. */
1271
- type ChangeSetSource = DispatchManyAction | DispatchManyChangeSetSource | {
1272
- kind: typeof CHANGE_SET_SOURCE_KIND.INIT | typeof CHANGE_SET_SOURCE_KIND.UNDO | typeof CHANGE_SET_SOURCE_KIND.REDO;
1559
+
1560
+ /** Named normalized activity scheduling constraints. */
1561
+ declare const CONSTRAINT_TYPE: {
1562
+ readonly ASAP: "asap";
1563
+ readonly ALAP: "alap";
1564
+ readonly SNET: "snet";
1565
+ readonly SNLT: "snlt";
1566
+ readonly FNET: "fnet";
1567
+ readonly FNLT: "fnlt";
1568
+ readonly MSO: "mso";
1569
+ readonly MFO: "mfo";
1570
+ };
1571
+ /** Normalized activity scheduling constraint. */
1572
+ type ConstraintType = (typeof CONSTRAINT_TYPE)[keyof typeof CONSTRAINT_TYPE];
1573
+
1574
+ declare const SAVE_FIELD_POLICY: {
1575
+ readonly TRACKED: "tracked";
1576
+ readonly IGNORED: "ignored";
1577
+ };
1578
+
1579
+ declare const ACTIVITY_SAVE_FIELD_POLICY: {
1580
+ readonly id: "ignored";
1581
+ readonly proplannerId: "ignored";
1582
+ readonly parentId: "tracked";
1583
+ readonly name: "tracked";
1584
+ readonly description: "tracked";
1585
+ readonly type: "tracked";
1586
+ readonly startDate: "tracked";
1587
+ readonly endDate: "tracked";
1588
+ readonly durationHours: "tracked";
1589
+ readonly constraintType: "tracked";
1590
+ readonly constraintDate: "tracked";
1591
+ readonly autoScheduling: "tracked";
1592
+ readonly calendarId: "tracked";
1593
+ readonly assignedDefaultCalendar: "ignored";
1594
+ readonly dateOrigin: "tracked";
1595
+ readonly progress: "tracked";
1596
+ readonly cost: "tracked";
1597
+ readonly usedCost: "tracked";
1598
+ readonly realCost: "tracked";
1599
+ readonly workHours: "tracked";
1600
+ readonly realWorkHours: "tracked";
1601
+ readonly ponderator: "tracked";
1602
+ readonly hasCustomPonderator: "tracked";
1603
+ readonly correlativeId: "tracked";
1604
+ readonly uniqueCorrelativeId: "tracked";
1605
+ readonly customId: "tracked";
1606
+ readonly subcontractId: "tracked";
1607
+ readonly isLookahead: "tracked";
1608
+ readonly hasLookaheadTasks: "ignored";
1609
+ readonly newActivityIds: "tracked";
1610
+ readonly hasNewActivities: "tracked";
1611
+ readonly isNewActivity: "ignored";
1612
+ readonly pendingRequestIds: "ignored";
1613
+ readonly responsableIds: "tracked";
1614
+ readonly tagIds: "tracked";
1615
+ readonly baselinePoints: "ignored";
1616
+ readonly baselineSnapshot: "ignored";
1617
+ readonly recursiveDurationHours: "ignored";
1618
+ readonly isCritical: "ignored";
1619
+ readonly freeSlackHours: "ignored";
1620
+ readonly calendarDuration: "ignored";
1621
+ readonly baselineVarianceDays: "ignored";
1622
+ readonly expectedProgress: "ignored";
1623
+ readonly expectedProgressBaseline: "ignored";
1624
+ readonly status: "ignored";
1625
+ readonly criticalPath: "ignored";
1626
+ readonly p6: "ignored";
1273
1627
  };
1274
1628
  /**
1275
- * Complete ordered projection payload produced by an accepted operation.
1629
+ * Activity field included in consumer persistence comparisons.
1276
1630
  *
1277
- * Consumers apply every populated collection in result order. Applying a change
1278
- * set updates external projection only; persistence remains consumer-owned.
1631
+ * Derived scheduling, baseline, selection, and backend identity fields are
1632
+ * intentionally excluded.
1279
1633
  */
1280
- interface ChangeSet {
1281
- /** Command, ordered dispatch batch, or lifecycle operation that produced it. */
1282
- source: ChangeSetSource;
1283
- /** Activity create, update, and delete records. */
1284
- activities: ReadonlyArray<EntityChange<CoreActivity>>;
1285
- /** Link create, update, and delete records; lag fields use stored hours. */
1286
- links: ReadonlyArray<EntityChange<Link>>;
1287
- /** Calendar create, update, and delete records. */
1288
- calendars: ReadonlyArray<EntityChange<Calendar>>;
1289
- /** Consumer-owned analytics events. */
1290
- trackingEvents: ReadonlyArray<TrackingEvent>;
1291
- /** Optional checked/visible projection updates. */
1292
- viewState?: ReadonlyArray<ViewStateChange>;
1293
- /** Optional visual child order grouped by parent. */
1294
- order?: ReadonlyArray<BranchOrderChange>;
1295
- /** Optional integration effects for consumer handling. */
1296
- effects?: ReadonlyArray<ScheduleEffect>;
1297
- /** Optional non-fatal warnings for consumer presentation. */
1298
- warnings?: ReadonlyArray<ConstraintWarning>;
1299
- }
1634
+ type PersistableActivityField = {
1635
+ [Field in keyof typeof ACTIVITY_SAVE_FIELD_POLICY]: (typeof ACTIVITY_SAVE_FIELD_POLICY)[Field] extends typeof SAVE_FIELD_POLICY.TRACKED ? Field : never;
1636
+ }[keyof typeof ACTIVITY_SAVE_FIELD_POLICY];
1300
1637
 
1301
1638
  /** Earliest start and latest end from the default calendar's work ranges. */
1302
1639
  interface ProjectWorkHours {
@@ -2031,6 +2368,8 @@ interface ScheduleDiagnosticsApi {
2031
2368
  stateRevision(): number;
2032
2369
  /** @returns A deterministic serialization digest of canonical schedule state. */
2033
2370
  canonicalDigest(): string;
2371
+ /** @returns A fixed-size deterministic fingerprint of canonical schedule state. */
2372
+ canonicalFingerprint(): string;
2034
2373
  }
2035
2374
  /** Namespaced façade attached to each {@link ScheduleCore} instance. */
2036
2375
  interface ScheduleApiNamespaces {
@@ -2221,6 +2560,81 @@ interface LoadDiagnostic {
2221
2560
  }
2222
2561
  type LoadDiagnosticRecorder = (code: LoadDiagnosticCode, sampleId: string) => void;
2223
2562
 
2563
+ /** Reason a Data Date operation is refused before any state is written. */
2564
+ type P6CapabilityErrorCode = 'capability_not_enabled' | 'data_date_required' | 'activity_scheduling_state_required' | 'P6_ACTIVITY_STATE_INVARIANT' | 'EXTERNAL_RELATIONSHIP_F9_NOT_CERTIFIED';
2565
+ /**
2566
+ * Whether `dataDates.schedule()` can run. When not ready it carries the
2567
+ * blocking code, how many activities block it, a bounded sample of their ids
2568
+ * and the exact fields each one lacks.
2569
+ */
2570
+ type P6ScheduleReadiness = {
2571
+ readonly ready: true;
2572
+ } | {
2573
+ readonly ready: false;
2574
+ readonly code: P6CapabilityErrorCode;
2575
+ readonly count: number;
2576
+ readonly sampleActivityIds: readonly ActivityId[];
2577
+ readonly missingInputs: readonly P6MissingActivityInput[];
2578
+ };
2579
+ /** Selectable candidate for the multiple-float-paths ending activity. */
2580
+ interface P6EndingActivityOption {
2581
+ readonly id: ActivityId;
2582
+ readonly label: string;
2583
+ }
2584
+ /** Case-insensitive label search over the visual order, paginated by `offset`/`limit`. */
2585
+ interface P6EndingActivitySearch {
2586
+ readonly query: string;
2587
+ readonly offset: number;
2588
+ readonly limit: number;
2589
+ }
2590
+ /** One page of ending-activity candidates; `hasMore` signals a further page exists. */
2591
+ interface P6EndingActivityPage {
2592
+ readonly items: readonly P6EndingActivityOption[];
2593
+ readonly hasMore: boolean;
2594
+ }
2595
+ declare class P6CapabilityError extends Error {
2596
+ readonly code: P6CapabilityErrorCode;
2597
+ readonly relationshipIds: readonly string[];
2598
+ readonly count: number;
2599
+ readonly sampleActivityIds: readonly ActivityId[];
2600
+ constructor(code: P6CapabilityErrorCode, message: string, relationshipIds?: readonly string[], count?: number, sampleActivityIds?: readonly ActivityId[]);
2601
+ }
2602
+ /**
2603
+ * Data Date namespace exposed as `core.dataDates`. Reads are synchronous and
2604
+ * never throw for an inactive capability; writes go through `dispatch` and
2605
+ * reject with a `P6CapabilityError` when the capability is not enabled.
2606
+ */
2607
+ interface ScheduleP6Api {
2608
+ /** Persisted P6 schedule settings, or `null` when the schedule carries none. */
2609
+ getSettings(): Readonly<P6ScheduleSettings> | null;
2610
+ /** Project-level Data Date state, or `null` when the schedule carries none. */
2611
+ getProjectState(): Readonly<P6ProjectState> | null;
2612
+ /** Log of the latest schedule run, or `null` before the first run. */
2613
+ getLatestRunLog(): Readonly<P6ScheduleRunLog> | null;
2614
+ /** Digest of the inputs a schedule run reads; stable while the state revision is unchanged. */
2615
+ getScheduleStateFingerprint(): string;
2616
+ /** Outbuild defaults applied when a schedule has no persisted P6 settings. */
2617
+ getDefaultSettings(): Readonly<P6ScheduleSettings>;
2618
+ /** Readiness of a schedule run under the current settings merged with `patch`. */
2619
+ getScheduleReadiness(patch?: Readonly<Partial<P6ScheduleSettings>>): P6ScheduleReadiness;
2620
+ /** Pages ending-activity candidates matching `input.query` in visual order. */
2621
+ searchEndingActivities(input: P6EndingActivitySearch): P6EndingActivityPage;
2622
+ /** Candidate for one activity id, or `null` when it is not selectable. */
2623
+ getEndingActivityOption(activityId: ActivityId): P6EndingActivityOption | null;
2624
+ /** Instant a first-time Must Finish By takes for a `YYYY-MM-DD` day: the project default calendar's shift start, as P6 assigns it; `null` when no calendar can resolve it. */
2625
+ resolveMustFinishByDefault(day: string): Date | null;
2626
+ /** Dispatches a settings update and returns the resulting ChangeSet. */
2627
+ updateSettings(patch: Readonly<Partial<P6ScheduleSettings>>): Promise<{
2628
+ changes: ChangeSet;
2629
+ }>;
2630
+ /** Dispatches a P6 activity update and returns the resulting ChangeSet. */
2631
+ updateActivity(activityId: ActivityId, patch: Readonly<P6ActivityInputPatch>): Promise<{
2632
+ changes: ChangeSet;
2633
+ }>;
2634
+ /** Runs F9 with the current settings merged with `patch` and applies the projection. */
2635
+ schedule(patch?: Readonly<Partial<P6ScheduleSettings>>): Promise<P6ScheduleResult>;
2636
+ }
2637
+
2224
2638
  /**
2225
2639
  * Lifecycle health states observable without awaiting initialization.
2226
2640
  * `ready` means alive, not initialized; await {@link ScheduleCore.ready} before
@@ -2257,6 +2671,7 @@ interface ScheduleCoreInput extends BackendScheduleInput {
2257
2671
  ganttId?: number;
2258
2672
  /** Optional normalization and background-error diagnostics sink. */
2259
2673
  reporter?: ScheduleCoreReporter;
2674
+ p6?: P6ScheduleInput;
2260
2675
  }
2261
2676
 
2262
2677
  /** Summary of logical links and projected effective dependency edges. */
@@ -2313,6 +2728,7 @@ declare class ScheduleCore {
2313
2728
  readonly criticalPath: ScheduleApiNamespaces['criticalPath'];
2314
2729
  /** Effective-graph, revision, and digest diagnostics. */
2315
2730
  readonly diagnostics: ScheduleApiNamespaces['diagnostics'];
2731
+ readonly dataDates: ScheduleP6Api;
2316
2732
  private readonly _activityClipboard;
2317
2733
  private _status;
2318
2734
  private readonly coreRuntime;
@@ -2321,6 +2737,8 @@ declare class ScheduleCore {
2321
2737
  private _opQueue;
2322
2738
  private _scheduleRevision;
2323
2739
  private _stateRevision;
2740
+ private _canonicalFingerprintCache;
2741
+ private _p6ScheduleStateFingerprintCache;
2324
2742
  private _pendingScheduleRevision;
2325
2743
  private _criticalPathRevision;
2326
2744
  private _activeCriticalPath;
@@ -2413,6 +2831,21 @@ declare class ScheduleCore {
2413
2831
  }): Date | null;
2414
2832
  /** Returns the canonical progress editability decision without mutation. */
2415
2833
  getProgressEditability(id: ActivityId): EditResult | null;
2834
+ /**
2835
+ * Whether a move or resize gesture may start on an activity under an active
2836
+ * Data Date (a started activity locks its start, a completed one its end).
2837
+ *
2838
+ * @returns The edit verdict, or `null` when the activity does not exist.
2839
+ */
2840
+ getDateGestureEditability(id: ActivityId, gesture: DateGestureKind): EditResult | null;
2841
+ /**
2842
+ * Composes the verdict an inline edit of `column` would receive before any
2843
+ * value is parsed: the column policy, with progress-based denials replaced
2844
+ * by the execution-status verdict while a Data Date is active.
2845
+ *
2846
+ * @returns The edit verdict, or `null` when the activity or column is unknown.
2847
+ */
2848
+ getColumnEditability(id: ActivityId, column: string): EditResult | null;
2416
2849
  /**
2417
2850
  * Creates a read-only date prediction bound to the current revision.
2418
2851
  *
@@ -2528,14 +2961,24 @@ declare class ScheduleCore {
2528
2961
  getNewActivities(): ReadonlyArray<Readonly<CoreActivity>>;
2529
2962
  /** @returns Whether tracked state differs from the acknowledged save baseline. */
2530
2963
  hasUnsavedChanges(): boolean;
2964
+ /** @returns The P6 schedule settings pending persistence, or `null` when unchanged since the last acknowledge. */
2965
+ getModifiedDataDateSettings(): Readonly<P6ScheduleSettings> | null;
2966
+ /** @returns The P6 state of every activity whose Data Date fields changed since the last acknowledge, keyed by activity id. */
2967
+ getModifiedDataDateActivities(): ReadonlyMap<string, Readonly<P6ActivityDraftState>>;
2531
2968
  /** @returns The monotonic scheduling revision without a readiness guard. */
2532
2969
  getScheduleRevision(): number;
2533
2970
  /** @returns The monotonic canonical-state revision without a readiness guard. */
2534
2971
  getStateRevision(): number;
2535
2972
  /** @returns The undo-history boundary for an external save checkpoint. */
2536
2973
  capturePersistenceHistoryBoundary(): number;
2974
+ /** @returns A defensive checkpoint for consumer-owned persistence. */
2975
+ readPersistenceCheckpoint(): PersistenceCheckpoint;
2537
2976
  /** @returns A deterministic serialization digest of canonical schedule state. */
2538
2977
  getCanonicalDigest(): string;
2978
+ /** @returns A fixed-size deterministic fingerprint of canonical schedule state. */
2979
+ getCanonicalFingerprint(): string;
2980
+ private _getP6ScheduleStateFingerprint;
2981
+ private _computeP6ScheduleStateFingerprint;
2539
2982
  /**
2540
2983
  * Produces changes that transform a projection of `source` into this schedule.
2541
2984
  *
@@ -2550,6 +2993,25 @@ declare class ScheduleCore {
2550
2993
  /** @returns Deleted persisted link identities since the last save. */
2551
2994
  getDeletedLinksSinceLastSave(): ReadonlyArray<Readonly<DeletedLinkSnapshot>>;
2552
2995
  private _enqueue;
2996
+ private _getP6Settings;
2997
+ private _getP6ProjectState;
2998
+ private _getP6LatestRunLog;
2999
+ private _resolveP6MustFinishByDefault;
3000
+ private _searchP6EndingActivities;
3001
+ private _getP6EndingActivityOption;
3002
+ private _getP6ScheduleReadiness;
3003
+ private _updateP6Settings;
3004
+ private _updateP6Activity;
3005
+ private _scheduleP6;
3006
+ private _runP6Schedule;
3007
+ private _requireDataDateCapability;
3008
+ private _changeSetIsSubstantive;
3009
+ private _hasDataDateChanges;
3010
+ private _applyDataDateChangeSet;
3011
+ private _applyDataDateActivationProjection;
3012
+ private _assembleDataDateActivationProjection;
3013
+ private _snapshotActivities;
3014
+ private _setP6ProjectPlannedStart;
2553
3015
  private _beginScheduleMutation;
2554
3016
  private _admitScheduleMutation;
2555
3017
  private _settleScheduleMutation;
@@ -2605,6 +3067,7 @@ declare class ScheduleCore {
2605
3067
  private _reapplyActiveOrder;
2606
3068
  private _reapplyActiveFilter;
2607
3069
  private _recordScheduleMutation;
3070
+ private _recordDirectScheduleMutation;
2608
3071
  private _startCriticalPathForCurrentRevision;
2609
3072
  /**
2610
3073
  * Applies the latest inverse operation through the serialized queue.
@@ -2778,6 +3241,227 @@ declare function yieldToBrowser(): Promise<void>;
2778
3241
  */
2779
3242
  declare function willRunCriticalPath(action: DispatchAction): boolean;
2780
3243
 
3244
+ /**
3245
+ * Combines the `YYYY-MM-DD` day picked for Expected Finish with the UTC time
3246
+ * of day of the current expected finish, or of the displayed finish when none
3247
+ * is set. Throws `LookaheadActualTransitionError` on an invalid day.
3248
+ */
3249
+ declare function resolveExpectedFinishDateSelection(input: {
3250
+ readonly selectedDay: string;
3251
+ readonly expectedFinish: Date | null;
3252
+ readonly displayedFinish: Date;
3253
+ }): Date;
3254
+
3255
+ /** Validation failure raised while planning or preparing Lookahead actual dates. */
3256
+ type LookaheadActualTransitionErrorCode = 'ACTUAL_FINISH_BEFORE_START' | 'ACTUAL_FINISH_REMOVAL_NOT_APPLICABLE' | 'ACTUAL_FINISH_REMOVAL_REQUIRED' | 'ACTUAL_FINISH_REQUIRES_100' | 'ACTUAL_START_REQUIRED' | 'DATA_DATE_INACTIVE' | 'INVALID_ACTUAL_DAY' | 'INVALID_ACTUAL_TIME_SOURCE' | 'INVALID_DATA_DATE' | 'INVALID_DISPLAYED_FINISH' | 'INVALID_PROGRESS';
3257
+ declare class LookaheadActualTransitionError extends Error {
3258
+ readonly code: LookaheadActualTransitionErrorCode;
3259
+ constructor(code: LookaheadActualTransitionErrorCode);
3260
+ }
3261
+ /**
3262
+ * Actual dates the user confirmed in the Lookahead progress dialog.
3263
+ * `actualFinish: null` is the confirmed removal of the Actual Finish when
3264
+ * progress drops below 100 on a completed activity.
3265
+ */
3266
+ interface LookaheadActualIntent {
3267
+ readonly actualStart?: Date;
3268
+ readonly actualFinish?: Date | null;
3269
+ }
3270
+ /** Slice of the P6 activity state the Lookahead progress transition reads. */
3271
+ type LookaheadProgressActualActivityState = Pick<P6ActivityDraftState, 'actualStart' | 'actualFinish' | 'remainingDurationHours' | 'executionStatus' | 'suspendDate' | 'resumeDate' | 'physicalPercentComplete' | 'originalDurationHours' | 'percentCompleteType'>;
3272
+ /**
3273
+ * Input of a Lookahead progress change under a Data Date: the active
3274
+ * `dataDate` (`null` when inactive), the activity's P6 slice, the target
3275
+ * progress (0–100) and the finish currently displayed to the user.
3276
+ */
3277
+ interface LookaheadProgressActualInput {
3278
+ readonly dataDate: Date | null;
3279
+ readonly activity: Readonly<LookaheadProgressActualActivityState>;
3280
+ readonly nextProgress: number;
3281
+ readonly displayedFinish?: Date | null;
3282
+ }
3283
+ /**
3284
+ * Which actual dates the transition needs: `start` is required when a
3285
+ * not-started activity gains progress, `finish` is optional when progress
3286
+ * reaches 100, `uncomplete` is required when a completed activity drops
3287
+ * below 100 (the Actual Finish must be removed; the Actual Start stays).
3288
+ * All are `null` when the Data Date is inactive.
3289
+ */
3290
+ interface LookaheadProgressActualPlan {
3291
+ readonly start: {
3292
+ readonly required: true;
3293
+ readonly suggestedAt: Date;
3294
+ } | null;
3295
+ readonly finish: {
3296
+ readonly optional: true;
3297
+ readonly suggestedAt: Date | null;
3298
+ } | null;
3299
+ readonly uncomplete: {
3300
+ readonly required: true;
3301
+ readonly removes: Date;
3302
+ } | null;
3303
+ }
3304
+ /**
3305
+ * Combines a `YYYY-MM-DD` day picked by the user with the UTC time of day of
3306
+ * `timeSource`. Throws `LookaheadActualTransitionError` on an invalid day or
3307
+ * time source.
3308
+ */
3309
+ declare function resolveLookaheadActualDateSelection(input: {
3310
+ readonly selectedDay: string;
3311
+ readonly timeSource: Date;
3312
+ }): Date;
3313
+ /**
3314
+ * Decides which actual dates a progress change requires and suggests default
3315
+ * values (the Data Date for the start, the displayed finish for the finish).
3316
+ * Throws `LookaheadActualTransitionError` on invalid input.
3317
+ */
3318
+ declare function planLookaheadProgressActuals(input: LookaheadProgressActualInput): LookaheadProgressActualPlan;
3319
+ /**
3320
+ * Validates the confirmed `intent` against the plan and returns the P6
3321
+ * activity patch to dispatch: the actual-date transition plus, while the
3322
+ * activity is in progress, `nextProgress` mirrored into the percent field
3323
+ * selected by `percentCompleteType` (Physical %, or the Remaining Duration
3324
+ * for the duration type; the units type is read-only). Throws
3325
+ * `LookaheadActualTransitionError` when a required actual start is missing,
3326
+ * a finish is given below 100 %, a completed activity drops below 100 %
3327
+ * without the confirmed removal of its Actual Finish, or an intent arrives
3328
+ * while the Data Date is inactive.
3329
+ */
3330
+ declare function prepareLookaheadProgressActuals(input: LookaheadProgressActualInput & {
3331
+ readonly intent?: LookaheadActualIntent;
3332
+ }): Readonly<Partial<P6ActivityDraftState>>;
3333
+
3334
+ /** Calendars of the schedule that owns the activities being re-derived. */
3335
+ interface LookaheadDerivedCalendars {
3336
+ readonly calendars: readonly BackendCalendarInput[];
3337
+ readonly baseCalendars?: readonly BackendCalendarInput[];
3338
+ }
3339
+ /**
3340
+ * One actual-date transition confirmed from the Lookahead: the stored P6
3341
+ * state before it, the state after applying the normalized patch, the
3342
+ * activity calendar and the active Data Date.
3343
+ */
3344
+ interface LookaheadDerivedInput {
3345
+ readonly previous: Readonly<P6ActivityDraftState>;
3346
+ readonly next: Readonly<P6ActivityDraftState>;
3347
+ readonly calendarId: CalendarId | null;
3348
+ readonly dataDate: Date;
3349
+ readonly totalFloatMethod?: P6ScheduleSettings['totalFloatMethod'];
3350
+ }
3351
+ /** Derived fields P6 refreshes as soon as an actual date is written. */
3352
+ type LookaheadDerivedFields = Pick<P6ActivityData, 'actualDurationHours' | 'atCompletionDurationHours' | 'durationPercentComplete' | 'unitsPercentComplete' | 'schedulePercentComplete'>;
3353
+ /**
3354
+ * Backend-side resolver bound to one schedule's calendars; re-derives the
3355
+ * P6 fields for each confirmed Lookahead actual-date transition.
3356
+ */
3357
+ interface LookaheadDerivedFieldsResolver {
3358
+ /**
3359
+ * Derives the refreshed P6 fields for one transition, or `null` when the
3360
+ * next state is not yet a schedulable P6 activity or its calendar is
3361
+ * unknown.
3362
+ */
3363
+ derive(input: LookaheadDerivedInput): LookaheadDerivedFields | null;
3364
+ }
3365
+ /**
3366
+ * Re-derives an activity after a Lookahead actual-date transition with the
3367
+ * same live projection the Schedule card uses, so both write paths leave the
3368
+ * stored derived fields identical. Returns `null` while the activity has no
3369
+ * schedulable Remaining Duration yet.
3370
+ */
3371
+ declare function createLookaheadDerivedFields(input: LookaheadDerivedCalendars): LookaheadDerivedFieldsResolver;
3372
+
3373
+ /** Human-readable behaviour of a Data Date property in each documented edge case. */
3374
+ interface P6PropertyEdgeCases {
3375
+ readonly notStarted: string;
3376
+ readonly inProgress: string;
3377
+ readonly completed: string;
3378
+ readonly zeroDuration: string;
3379
+ readonly zeroDenominator: string;
3380
+ readonly suspendResume: string;
3381
+ readonly calendarException: string;
3382
+ readonly signedValues: string;
3383
+ readonly nullValue: string;
3384
+ readonly milestone: string;
3385
+ }
3386
+ /** Documented contract of one Data Date column: source fields, classification, editability, lifecycle and edge cases. */
3387
+ interface P6PropertyContractRow {
3388
+ readonly uiName: string;
3389
+ readonly property: P6ActivityColumnKey;
3390
+ readonly xerField: string;
3391
+ readonly xmlField: string;
3392
+ readonly classification: 'reality' | 'editable_input' | 'f9_output' | 'derived';
3393
+ readonly typeAndUnit: string;
3394
+ readonly editability: 'controlled' | 'editable' | 'readonly';
3395
+ readonly authority: string;
3396
+ readonly lifecycle: P6PropertyLifecycle;
3397
+ readonly changesWhen: string;
3398
+ readonly f9Behavior: string;
3399
+ readonly persistence: string;
3400
+ readonly nullAndZero: string;
3401
+ readonly calendarRule: string;
3402
+ readonly algorithm: string;
3403
+ readonly interactions: string;
3404
+ readonly unitTest: string;
3405
+ readonly p6Golden: string;
3406
+ readonly status: 'VERIFIED' | 'PARTIAL';
3407
+ readonly phase: 'input' | 'forward' | 'backward' | 'float_path' | 'derived';
3408
+ readonly edgeCases: Readonly<Partial<P6PropertyEdgeCases>>;
3409
+ }
3410
+ type P6PropertyLifecycle = 'explicit_edit' | 'dependency_change' | 'f9' | 'open';
3411
+ /** Frozen catalog of every Data Date column, one `P6PropertyContractRow` per `P6ActivityColumnKey`. */
3412
+ declare const P6_PROPERTY_CONTRACT: readonly P6PropertyContractRow[];
3413
+
3414
+ /** Raw `PROJECT` row fields of a P6 export (XER wall-clock strings) read to derive schedule settings. */
3415
+ interface P6RawProjectOptions {
3416
+ readonly last_recalc_date: string;
3417
+ readonly plan_start_date: string;
3418
+ readonly plan_end_date?: string;
3419
+ readonly scd_end_date: string;
3420
+ readonly fcst_start_date: string;
3421
+ readonly critical_path_type: string;
3422
+ readonly critical_drtn_hr_cnt: string;
3423
+ }
3424
+ /** Raw `SCHEDOPTIONS` row fields of a P6 export (`Y`/`N` flags and P6 tokens). */
3425
+ interface P6RawScheduleOptions {
3426
+ readonly sched_retained_logic: string;
3427
+ readonly sched_progress_override: string;
3428
+ readonly sched_lag_early_start_flag: string;
3429
+ readonly sched_float_type: string;
3430
+ readonly sched_calendar_on_relationship_lag: string;
3431
+ readonly sched_use_expect_end_flag: string;
3432
+ readonly sched_open_critical_flag: string;
3433
+ readonly sched_outer_depend_type: string;
3434
+ readonly sched_setplantoforecast: string;
3435
+ readonly sched_use_project_end_date_for_float: string;
3436
+ readonly enable_multiple_longest_path_calc: string;
3437
+ readonly limit_multiple_longest_path_calc: string;
3438
+ readonly max_multiple_longest_path: string;
3439
+ readonly use_total_float_multiple_longest_paths: string;
3440
+ readonly key_activity_for_multiple_longest_paths: string;
3441
+ readonly level_all_rsrc_flag?: string;
3442
+ readonly LevelPriorityList?: string;
3443
+ }
3444
+ /** Schedule settings and project planned start derived from raw P6 options. */
3445
+ interface P6MappedScheduleOptions {
3446
+ readonly settings: P6ScheduleSettings;
3447
+ readonly projectPlannedStart: Date | null;
3448
+ }
3449
+ /**
3450
+ * Maps raw P6 `PROJECT` and `SCHEDOPTIONS` rows to `P6ScheduleSettings`.
3451
+ * Dates are parsed as UTC wall dates; `resolveActivityId` maps the raw
3452
+ * ending-activity id of multiple float paths. Throws on an unknown token.
3453
+ */
3454
+ declare function mapP6ScheduleOptions(project: P6RawProjectOptions, schedule: P6RawScheduleOptions, resolveActivityId?: (rawActivityId: string) => ActivityId | null): P6MappedScheduleOptions;
3455
+ /** Outbuild default P6 settings for a schedule without imported options (`dataDate` inactive). */
3456
+ declare function createOutbuildP6ScheduleSettings(): P6ScheduleSettings;
3457
+
3458
+ /** Parses a P6 wall date `YYYY-MM-DD HH:MM` as a UTC instant; `null` passes through, malformed input throws. */
3459
+ declare function parseP6WallDateAsUtc(value: string | null): Date | null;
3460
+ /** Formats a UTC instant as the P6 wall date `YYYY-MM-DD HH:MM`; `null` passes through, an invalid Date throws. */
3461
+ declare function formatUtcAsP6WallDate(value: Date | null): string | null;
3462
+ /** Parses a `YYYY-MM-DD` day and snaps it forward to the calendar's shift start (`shiftStart`); `null` passes through. */
3463
+ declare function parseP6DayAsCalendarStart(value: string | null, calendar: CalendarAPI): Date | null;
3464
+
2781
3465
  /** Stable reasons returned when filter input cannot be normalized. */
2782
3466
  declare const FILTER_REJECTION_REASON: {
2783
3467
  readonly UNKNOWN_FIELD: "unknown_field";
@@ -2817,6 +3501,9 @@ declare const CONSTRAINT_TYPE_TO_LABEL: Record<ConstraintType, string>;
2817
3501
  /** Fallback working hours per day when schedule metadata is unavailable. */
2818
3502
  declare const DEFAULT_HOURS_PER_DAY = 8;
2819
3503
 
3504
+ /** Secondary constraint types P6 allows for a given primary constraint; empty when there is no primary. */
3505
+ declare function allowedSecondaryConstraintTypes(primary: ConstraintType | null): readonly ConstraintType[];
3506
+
2820
3507
  /** Consumer creation contexts recognized by schedule integrations. */
2821
3508
  declare const CREATION_KIND: {
2822
3509
  readonly CHILD: "child";
@@ -2836,6 +3523,9 @@ declare const REJECTION_REASON: {
2836
3523
  readonly INVALID_LINK_TYPE: "invalid_link_type";
2837
3524
  readonly INVALID_LINK_LAG: "invalid_link_lag";
2838
3525
  readonly INVALID_VALUE: "invalid_value";
3526
+ readonly CONFIRMATION_REQUIRED: "confirmation_required";
3527
+ readonly DATA_DATE_ACTUAL_START_LOCKED: "data_date_actual_start_locked";
3528
+ readonly DATA_DATE_ACTIVITY_COMPLETED: "data_date_activity_completed";
2839
3529
  readonly NO_PIPELINE_FOR_COLUMN: "no_pipeline_for_column";
2840
3530
  readonly ACTIVITY_NOT_FOUND: "activity_not_found";
2841
3531
  readonly PARENT_NOT_FOUND: "parent_not_found";
@@ -2851,6 +3541,7 @@ declare const REJECTION_REASON: {
2851
3541
  readonly INDENT_NO_ELIGIBLE_SIBLING: "indent_no_eligible_sibling";
2852
3542
  readonly OUTDENT_ROOT_LEVEL_NOT_EDITABLE: "outdent_root_level_not_editable";
2853
3543
  readonly HIERARCHY_CYCLE: "hierarchy_cycle";
3544
+ readonly MANUAL_SCHEDULING_ACTIVE: "manual_scheduling_active";
2854
3545
  readonly SANDBOX_PERSISTENCE_FORBIDDEN: "sandbox_persistence_forbidden";
2855
3546
  readonly STALE_STATE_REVISION: "stale-state-revision";
2856
3547
  readonly INVALID_PROGRESS_VALUE: "invalid_progress_value_must_be_0_or_100";
@@ -2869,4 +3560,4 @@ declare const DISPATCH_TRACK_EVENT: {
2869
3560
  /** Consumer analytics event name emitted by a schedule mutation. */
2870
3561
  type DispatchTrackEvent = (typeof DISPATCH_TRACK_EVENT)[keyof typeof DISPATCH_TRACK_EVENT];
2871
3562
 
2872
- export { ACTIVITY_BATCH_ACTION_KIND, ACTIVITY_BATCH_MODE, ACTIVITY_DATE_EDGE, ACTIVITY_FIELD, ACTIVITY_PONDERATOR_CRITERION, ACTIVITY_PROGRESS_ORIGIN, ACTIVITY_TYPE, type ActivityBaselineSnapshot, type ActivityBatchAction, type ActivityBatchInput, type ActivityBatchItem, type ActivityBatchItemInput, type ActivityBatchLinkInput$1 as ActivityBatchLinkInput, type ActivityBatchMode, type ActivityBatchParentReference, type ActivityBatchReference, type ActivityBulkEdit, type ActivityCreateInput, type ActivityCreationOverrides, type ActivityCreter, type ActivityDateEdge, type ActivityDateEdit, type ActivityField, type ActivityFieldEdit, type ActivityFieldValue, type ActivityId, type ActivityLookaheadSyncInput, type ActivityMoveInput, type ActivityStatus, type ActivityType, type ApplyLookaheadConversionInput, type BackendActivityInput, type BackendCalendarExceptionInput, type BackendCalendarInput, type BackendLinkInput, type BackendScheduleInput, type BackendSectorInput, type BackendShiftInput, type BaselinePoint, type BaselineVersion, type BranchOrderChange, CALENDAR_UNIT, CHANGE_SET_SOURCE_KIND, COLUMN, COMPLETED_PROGRESS, CONSTRAINT_TYPE, CONSTRAINT_TYPE_TO_LABEL, CONSTRAINT_WARNING_KIND, CREATION_KIND, type Calendar, type CalendarId, type CalendarLike, type CalendarUnit, type CalendarWorktime, type ChangeSet, type ChangeSetSource, type ColumnName, type ConstraintType, type ConstraintWarning, type CoreActivity, type CoreBaselinePoint, type CreationKind, type CriticalPathResult, DATE_GESTURE_KIND, DEFAULT_HOURS_PER_DAY, DISPATCH_ACTION_KIND, DISPATCH_ACTION_KINDS, DISPATCH_LINK_OPERATION_KIND, DISPATCH_TRACK_EVENT, type DateGesture, type DateGestureKind, type DateGesturePreview, type DatesBatchVerdict, type DeletedActivitySnapshot, type DeletedLinkSnapshot, type DispatchAction, type DispatchActionKind, type DispatchManyAction, type DispatchManyChangeSetSource, type DispatchManyResult, type DispatchOptions, type DispatchRejectReason, type DispatchResult, type DispatchTrackEvent, EDIT_ALERT_KEY, EDIT_DENIAL_REASON, ENTITY_CHANGE_KIND, type EditAlertKey, type EditDenialReason, type EditResult, type EditableColumnName, type EffectiveGraphAudit, type EntityChange, type ActivityBatchLinkInput as ErgonomicActivityBatchLinkInput, type ExpectedProgressAdapter, FILTER_FIELD, FILTER_LOGIC, FILTER_OPERATOR, FILTER_REJECTION_REASON, FILTER_VALUE_KIND, FLAT_WBS_DEPTH, type FilterCriterion, type FilterCriterionGroup, type FilterCriterionValue, type FilterDateRange, type FilterField, type FilterLogic, type FilterOperator, type FilterRejection, type FilterState, type FilterValueKind, GROUP_ID_PREFIX, GROUP_ID_SEPARATOR, type GroupCriterion, type GroupCriterionInput, type GroupLevelWindow, type GroupState, type GroupStateInput, type ImpactRequestSyncInput, LINK_BATCH_OPERATION_KIND, LINK_CODE, LINK_CODE_TO_TYPE, LINK_REJECTION_REASON, LINK_RELATIONSHIP, LINK_TYPE, LINK_TYPE_CODE, type Link, type LinkBatchOperationKind, type LinkBatchRequest, type LinkBatchVerdict, type LinkCreateRequest, type LinkId, type LinkPatchRequest, type LinkRejection, type LinkRelationship, type LinkType, type LinkTypeCode, type LinkUpdateAction, type LinksBatchOperation, type LoadDiagnostic, type LoadDiagnosticCode, type LookaheadConversionFormerParent, type LookaheadConversionGroup, type LookaheadConversionInput, type LookaheadConversionMilestoneMove, type LookaheadConversionPlan, type LookaheadConversionResult, MINIMUM_GROUP_DEPTH, MINIMUM_GROUP_LEVEL, type MutationContext, NEW_ACTIVITY_DEFAULTS, NOT_STARTED_PROGRESS, ORDER_DIRECTION, ORDER_MODE, type OrderDirection, type OrderMode, type OrderRule, type OrderState, type ParsedInput, type PendingRequest, type PersistableActivityField, type PersistedEntityIdentity, type PersistenceCheckpoint, type PipelineColumnName, type ProjectWorkHours, REJECTION_REASON, ROOT_PARENT_ID, SCHEDULE_CORE_STATUS, SCHEDULE_EFFECT_KIND, SIR_AUTO_REJECT_REASON, STATUS, STATUS_CRITERIA, type ScheduleActivitiesApi, type ScheduleApiNamespaces, type ScheduleAutoScheduleAction, type ScheduleBaselinesApi, type ScheduleCalendarsApi, ScheduleCore, type ScheduleCoreInput, type ScheduleCoreReporter, type ScheduleCoreStatus, type ScheduleCriticalPathApi, type ScheduleDiagnosticsApi, type ScheduleEffect, type ScheduleHistoryApi, type ScheduleImpactRequestsApi, type ScheduleLinksApi, type SchedulePersistenceApi, type ScheduleProjectionApi, type ScheduleSelectionApi, type ScheduleViewApi, type SectorMetadata, type SelectionToggleInput, type StaticActivityDefaults, type StatusCriteria, type TrackingEvent, UNASSIGNED_GROUP_LABEL, UNASSIGNED_VALUE_ID, type UndoOptions, VIEW_ATTRIBUTE_KIND, VISUAL_ROW_KIND, type ViewAttributeAssignmentInput, type ViewAttributeCatalogInput, type ViewAttributeFilterCriterion, type ViewAttributeOrderRule, type ViewAttributeValueInput, type ViewFilterInput, type ViewStateChange, type ViewStatePropChange, type VisualRow, WORK_TIME_DIRECTION, type WbsDepth, type WithProplannerId, type WorkTimeDirection, appendGroupRowId, buildGroupRowId, checkNoUpdatedLinks, computeExpectedProgress, createSchedule, expectedProgressFromBaseline, getActiveBaseline, getUnsavedActivities, isRootParent, isViewAttributeCriterion, isViewAttributeOrderRule, normalizeParentKey, parseFromBackend, willRunCriticalPath, yieldToBrowser };
3563
+ export { ACTIVITY_BATCH_ACTION_KIND, ACTIVITY_BATCH_MODE, ACTIVITY_DATE_EDGE, ACTIVITY_FIELD, ACTIVITY_PONDERATOR_CRITERION, ACTIVITY_PROGRESS_ORIGIN, ACTIVITY_TYPE, type ActivityBaselineSnapshot, type ActivityBatchAction, type ActivityBatchInput, type ActivityBatchItem, type ActivityBatchItemInput, type ActivityBatchLinkInput$1 as ActivityBatchLinkInput, type ActivityBatchMode, type ActivityBatchParentReference, type ActivityBatchReference, type ActivityBulkEdit, type ActivityCreateInput, type ActivityCreationOverrides, type ActivityCreter, type ActivityDateEdge, type ActivityDateEdit, type ActivityField, type ActivityFieldEdit, type ActivityFieldValue, type ActivityId, type ActivityLookaheadSyncInput, type ActivityMoveInput, type ActivityStatus, type ActivityType, type ApplyLookaheadConversionInput, type BackendActivityInput, type BackendCalendarExceptionInput, type BackendCalendarInput, type BackendLinkInput, type BackendScheduleInput, type BackendSectorInput, type BackendShiftInput, type BaselinePoint, type BaselineVersion, type BranchOrderChange, CALENDAR_UNIT, CHANGE_SET_SOURCE_KIND, COLUMN, COMPLETED_PROGRESS, CONFIRMATION_KIND, CONSTRAINT_TYPE, CONSTRAINT_TYPE_TO_LABEL, CONSTRAINT_WARNING_KIND, CREATION_KIND, type Calendar, type CalendarId, type CalendarLike, type CalendarUnit, type CalendarWorktime, type ChangeSet, type ChangeSetSource, type ColumnName, type ConfirmationAlternative, type ConfirmationKind, type ConfirmationRequest, type ConstraintType, type ConstraintWarning, type CoreActivity, type CoreBaselinePoint, type CreationKind, type CriticalPathResult, P6_PROPERTY_CONTRACT as DATA_DATE_PROPERTY_CONTRACT, DATE_GESTURE_KIND, DEFAULT_HOURS_PER_DAY, DISPATCH_ACTION_KIND, DISPATCH_ACTION_KINDS, DISPATCH_LINK_OPERATION_KIND, DISPATCH_TRACK_EVENT, type P6ActivityCalculationInputs as DataDateActivityCalculationInputs, type P6ActivityColumnKey as DataDateActivityColumnKey, type P6ActivityData as DataDateActivityData, type P6ActivityDraftState as DataDateActivityDraftState, type P6ActivityInputPatch as DataDateActivityInputPatch, type P6ActivityState as DataDateActivityState, type P6ActivityType as DataDateActivityType, P6CapabilityError as DataDateCapabilityError, type P6CapabilityErrorCode as DataDateCapabilityErrorCode, type P6DependencyReference as DataDateDependencyReference, type P6DiagnosticProjectIdentity as DataDateDiagnosticProjectIdentity, type P6DiagnosticRelationship as DataDateDiagnosticRelationship, type P6DiagnosticRelationshipType as DataDateDiagnosticRelationshipType, type P6DurationType as DataDateDurationType, type P6EndingActivityOption as DataDateEndingActivityOption, type P6EndingActivityPage as DataDateEndingActivityPage, type P6EndingActivitySearch as DataDateEndingActivitySearch, type P6MappedScheduleOptions as DataDateMappedScheduleOptions, type P6MissingActivityInput as DataDateMissingActivityInput, type P6OutOfSequencePolicy as DataDateOutOfSequencePolicy, type P6ProjectPlannedStartChange as DataDateProjectPlannedStartChange, type P6ProjectState as DataDateProjectState, type P6PropertyContractRow as DataDatePropertyContractRow, type P6PropertyEdgeCases as DataDatePropertyEdgeCases, type P6RawProjectOptions as DataDateRawProjectOptions, type P6RawScheduleOptions as DataDateRawScheduleOptions, type P6RequiredHistoricalField as DataDateRequiredHistoricalField, type P6ResourceAssignment as DataDateResourceAssignment, type P6ScheduleDiagnostic as DataDateScheduleDiagnostic, type P6ScheduleDiagnosticCode as DataDateScheduleDiagnosticCode, type P6ScheduleInput as DataDateScheduleInput, type P6ScheduleReadiness as DataDateScheduleReadiness, type P6ScheduleResult as DataDateScheduleResult, type P6ScheduleRunLog as DataDateScheduleRunLog, type P6ScheduleSettings as DataDateScheduleSettings, type P6ScheduleWarning as DataDateScheduleWarning, type P6SettingsChange as DataDateSettingsChange, type DateGesture, type DateGestureKind, type DateGesturePreview, type DatesBatchVerdict, type DeletedActivitySnapshot, type DeletedLinkSnapshot, type DispatchAction, type DispatchActionKind, type DispatchManyAction, type DispatchManyChangeSetSource, type DispatchManyResult, type DispatchOptions, type DispatchRejectReason, type DispatchResult, type DispatchTrackEvent, EDIT_ALERT_KEY, EDIT_DENIAL_REASON, ENTITY_CHANGE_KIND, type EditAlertKey, type EditDenialReason, type EditResult, type EditableColumnName, type EffectiveGraphAudit, type EntityChange, type ActivityBatchLinkInput as ErgonomicActivityBatchLinkInput, type ExpectedProgressAdapter, FILTER_FIELD, FILTER_LOGIC, FILTER_OPERATOR, FILTER_REJECTION_REASON, FILTER_VALUE_KIND, FLAT_WBS_DEPTH, type FilterCriterion, type FilterCriterionGroup, type FilterCriterionValue, type FilterDateRange, type FilterField, type FilterLogic, type FilterOperator, type FilterRejection, type FilterState, type FilterValueKind, GROUP_ID_PREFIX, GROUP_ID_SEPARATOR, type GroupCriterion, type GroupCriterionInput, type GroupLevelWindow, type GroupState, type GroupStateInput, type ImpactRequestSyncInput, LINK_BATCH_OPERATION_KIND, LINK_CODE, LINK_CODE_TO_TYPE, LINK_REJECTION_REASON, LINK_RELATIONSHIP, LINK_TYPE, LINK_TYPE_CODE, type Link, type LinkBatchOperationKind, type LinkBatchRequest, type LinkBatchVerdict, type LinkCreateRequest, type LinkId, type LinkPatchRequest, type LinkRejection, type LinkRelationship, type LinkType, type LinkTypeCode, type LinkUpdateAction, type LinksBatchOperation, type LoadDiagnostic, type LoadDiagnosticCode, type LookaheadActualIntent, LookaheadActualTransitionError, type LookaheadActualTransitionErrorCode, type LookaheadConversionFormerParent, type LookaheadConversionGroup, type LookaheadConversionInput, type LookaheadConversionMilestoneMove, type LookaheadConversionPlan, type LookaheadConversionResult, type LookaheadDerivedCalendars, type LookaheadDerivedFields, type LookaheadDerivedFieldsResolver, type LookaheadDerivedInput, type LookaheadProgressActualActivityState, type LookaheadProgressActualInput, type LookaheadProgressActualPlan, MINIMUM_GROUP_DEPTH, MINIMUM_GROUP_LEVEL, type MutationContext, NEW_ACTIVITY_DEFAULTS, NOT_STARTED_PROGRESS, ORDER_DIRECTION, ORDER_MODE, type OrderDirection, type OrderMode, type OrderRule, type OrderState, type ParsedInput, type PendingRequest, type PersistableActivityField, type PersistedEntityIdentity, type PersistenceCheckpoint, type PipelineColumnName, type ProjectWorkHours, REJECTION_REASON, ROOT_PARENT_ID, SCHEDULE_CORE_STATUS, SCHEDULE_EFFECT_KIND, SIR_AUTO_REJECT_REASON, STATUS, STATUS_CRITERIA, type ScheduleActivitiesApi, type ScheduleApiNamespaces, type ScheduleAutoScheduleAction, type ScheduleBaselinesApi, type ScheduleCalendarsApi, ScheduleCore, type ScheduleCoreInput, type ScheduleCoreReporter, type ScheduleCoreStatus, type ScheduleCriticalPathApi, type ScheduleP6Api as ScheduleDataDatesApi, type ScheduleDiagnosticsApi, type ScheduleEffect, type ScheduleHistoryApi, type ScheduleImpactRequestsApi, type ScheduleLinksApi, type SchedulePersistenceApi, type ScheduleProjectionApi, type ScheduleSelectionApi, type ScheduleViewApi, type SectorMetadata, type SelectionToggleInput, type StaticActivityDefaults, type StatusCriteria, type TrackingEvent, UNASSIGNED_GROUP_LABEL, UNASSIGNED_VALUE_ID, type UndoOptions, VIEW_ATTRIBUTE_KIND, VISUAL_ROW_KIND, type ViewAttributeAssignmentInput, type ViewAttributeCatalogInput, type ViewAttributeFilterCriterion, type ViewAttributeOrderRule, type ViewAttributeValueInput, type ViewFilterInput, type ViewStateChange, type ViewStatePropChange, type VisualRow, WORK_TIME_DIRECTION, type WbsDepth, type WithProplannerId, type WorkTimeDirection, allowedSecondaryConstraintTypes, appendGroupRowId, buildGroupRowId, checkNoUpdatedLinks, computeExpectedProgress, createLookaheadDerivedFields, createOutbuildP6ScheduleSettings as createOutbuildDataDateScheduleSettings, createSchedule, expectedProgressFromBaseline, formatUtcAsP6WallDate, getActiveBaseline, getUnsavedActivities, isRootParent, isViewAttributeCriterion, isViewAttributeOrderRule, mapP6ScheduleOptions as mapDataDateScheduleOptions, normalizeParentKey, parseFromBackend, parseP6DayAsCalendarStart, parseP6WallDateAsUtc, planLookaheadProgressActuals, prepareLookaheadProgressActuals, resolveExpectedFinishDateSelection, resolveLookaheadActualDateSelection, willRunCriticalPath, yieldToBrowser };