ScheduleResult#
The plain object returned by schedule, Project#solve, Project#preview and Project#analyze. It lists the tasks whose dates changed, plus the conflicts, cycles and notes found in the plan. Analytics, overallocations and a load profile are added when requested or relevant.
Each call returns a fresh object with keys in sorted order. It shares nothing with the input or the project. Date fields are "YYYY-MM-DD HH:MM" strings, or local Date objects when the project was created with dates: "date".
Fields#
| Field | Type | Description |
|---|---|---|
baselineId |
string |
Opaque token naming the accepted baseline. Present after solve and level (the baseline they accepted), after preview (the baseline it read), and after analyze(null) on a solved project with no pending edits. Absent otherwise, never null. |
updates |
Mutation[] |
Tasks whose fields changed, in planning order, each with the changed fields only. With includeUnchanged it also holds unchanged tasks with their dates and duration. |
cycles |
Cycle[] |
One entry per dependency cycle. [] when there are none. |
conflicts |
Conflict[] |
Constraint and calendar conflicts. Cycles aren't repeated here. |
notes |
Note[] |
Records left out of the plan, and fixes made in "repair" validation mode. |
converged |
boolean |
false when the planner didn't settle on stable dates. |
analytics |
Analytics |
Present only when the call's options request analytics. |
overallocations |
Overallocation[] |
Present only when the project has assignments. |
profile |
LoadProfile |
Present only on a preview called with the profile option. |
A cycle, a conflict or converged: false isn't an error: the call still returns a result.
The leveling result is a ScheduleResult with an added rounds field; read updates on it. See Project#level.
Mutation#
One entry of updates. It uses the TaskData field names, so it can be passed back as a TaskUpdate; kind and reason are ignored there.
| Field | Type | Description |
|---|---|---|
id |
Id |
Task id. |
kind |
"task" | "summary" | "milestone" |
Task type as scheduled. |
start_date |
DateValue |
New start. Present when changed. |
end_date |
DateValue |
New end. Present when changed. |
duration |
number |
New duration in the task's duration_unit. Present when changed. |
leveling_delay |
number |
New leveling delay, elapsed time in the task's duration_unit. Present when changed. |
pauses |
Pause[] |
The complete new list of pauses. Present when changed. |
reason |
Reason |
Why the task moved. Present only with reasons: true. |
A missing field means the value didn't change, not that it was cleared.
Reason#
Selected by kind:
kind |
Fields | Meaning |
|---|---|---|
"asap" |
linkId, sourceId |
Pushed by the predecessor sourceId through link linkId. |
"alap" |
linkId, targetId |
Pulled by the successor targetId through link linkId. |
"summary-translation" |
summaryId |
Moved as a block with its summary summaryId. |
"constraint" |
none | Placed by its own hard constraint. |
"preferred" |
none | Kept at, or snapped to, its own date. |
Cycle#
Conflict#
Selected by kind:
kind |
Fields | Meaning |
|---|---|---|
"constraint-violation" |
task, constraint, violation, required, actual |
The task breaks its constraint (ConstraintType). violation is "earliest-start", "latest-start", "earliest-end" or "latest-end". required is the date the constraint asks for, actual the scheduled one. |
"calendar-non-working" |
task, proposed, snapped |
The task's proposed date fell in non-working time and was moved to snapped. |
required, actual, proposed and snapped are DateValues.
Note#
Selected by kind:
kind |
Fields | Meaning |
|---|---|---|
"dropped-link" |
link, reason |
The link was left out of the plan; reason is a message. |
"dropped-task" |
task, reason |
The task was left out of the plan. |
"dropped-assignment" |
assignment, reason |
The assignment was left out of the plan. |
"repaired" |
path, message |
A fix made in "repair" validation mode; path points at the fixed input field. |
Analytics#
| Field | Type | Description |
|---|---|---|
status |
"available" | "invalid" |
"invalid" when cycles prevent the analysis; the other fields are then absent. |
criticalPath |
{ tasks: Id[]; links: Id[] } |
Critical task ids in planning order, and the links that drive them with zero slack. Present when criticalPath was requested. |
slack |
{ task: Id; total: number; free: number }[] |
Total and free slack per task, in config.duration_unit. Present when slack was requested. |
For how slack and the critical path are computed, see Critical path and slack.
Used by#
schedule: returns it, always with string datesProject#solve: returns it for the newly accepted baselineProject#preview: returns it for the previewed changes, relative to the baselineProject#analyze: returns it without updates or planner conflictsProject#level: returns it with an addedroundsfield
Example#
A solve result with reasons: true on a project with one link and two assigned tasks:
Related#
Project#solve- the main call that returns itTaskUpdate- feeding an update entry backOverallocation- theoverallocationsentries- Reading results - applying
updatesto an application model - Critical path and slack - requesting and reading
analytics