@critical-path/core 0.44.0 → 0.46.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/README.md +1 -1
- package/dist/domain/cpm.d.ts +43 -1
- package/dist/domain/cpm.d.ts.map +1 -1
- package/dist/domain/cpm.js +152 -41
- package/dist/domain/cpm.js.map +1 -1
- package/dist/engine/index.d.ts +29 -1
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +97 -26
- package/dist/engine/index.js.map +1 -1
- package/dist/types/index.d.ts +18 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -355,7 +355,7 @@ const leveled = await engine.calculateCriticalPath('proj_123', { calendars: 'ass
|
|
|
355
355
|
console.log(leveled.unleveledProjectEndDate, '->', leveled.projectEndDate);
|
|
356
356
|
```
|
|
357
357
|
|
|
358
|
-
With `calendars: 'assignee'` (or `criticalPathCalendars: 'assignee'` on the engine), each task uses its assignee's schedule, then its team's, then the project calendar. Passes run on dates, slack is measured in each task's calendar, and each calendar is evaluated in its own `timezone` (IANA name; default UTC), including daylight-saving changes. `levelResources: true` additionally delays tasks so nobody works on two at once (priority rule `levelingPriority`, default least slack), reporting `levelingDelayHours` and `waitingOn` per task. Tasks with `allocation` below 1 take that share of their assignee (a 16h task at 0.5 spans 32 working hours); levelling fits them within 100% per person, and `overallocations` lists who is booked above 100% and when. Teams act as pools of `headcount` people (default: member count) shared by team-only tasks and members' own tasks.
|
|
358
|
+
With `calendars: 'assignee'` (or `criticalPathCalendars: 'assignee'` on the engine), each task uses its assignee's schedule, then its team's, then the project calendar. Passes run on dates, slack is measured in each task's calendar, and each calendar is evaluated in its own `timezone` (IANA name; default UTC), including daylight-saving changes. `levelResources: true` additionally delays tasks so nobody works on two at once (priority rule `levelingPriority`, default least slack), reporting `levelingDelayHours` and `waitingOn` per task. Tasks with `allocation` below 1 take that share of their assignee (a 16h task at 0.5 spans 32 working hours); levelling fits them within 100% per person, and `overallocations` lists who is booked above 100% and when. Teams act as pools of `headcount` people (default: member count) shared by team-only tasks and members' own tasks. Finished tasks take no time. `calculatePortfolioCriticalPath({ projectIds })` levels several projects together, sharing people and teams across them; `includeHiddenWork` also counts unreadable projects' work as `'hidden'`. `effort: 'remaining'` schedules only what is left on in-progress tasks.
|
|
359
359
|
|
|
360
360
|
### 9. Fractional Lexical Indexing (Kanban Reordering)
|
|
361
361
|
|
package/dist/domain/cpm.d.ts
CHANGED
|
@@ -1,9 +1,19 @@
|
|
|
1
|
-
import type { Task, TaskDependency, CriticalPathAnalysis, WorkSchedule, User, Team } from '../types/index.js';
|
|
1
|
+
import type { Task, TaskDependency, CriticalPathAnalysis, WorkSchedule, User, Team, PortfolioCriticalPathAnalysis } from '../types/index.js';
|
|
2
2
|
export declare function getTaskDurationHours(task: Task): number;
|
|
3
3
|
/** The task's `allocation`, clamped to (0, 1]; 1 when unset or invalid. */
|
|
4
4
|
export declare function getTaskAllocation(task: Task): number;
|
|
5
5
|
/** Working hours a task spans: its effort divided by its allocation. */
|
|
6
6
|
export declare function getTaskElapsedHours(task: Task): number;
|
|
7
|
+
/** True for completed or canceled tasks (by `semanticStatus`, else the default `done`/`canceled` statuses). */
|
|
8
|
+
export declare function isTaskFinished(task: Task): boolean;
|
|
9
|
+
/** What effort critical path analysis schedules: the full estimate, or what remains on in-progress tasks. */
|
|
10
|
+
export type EffortBasis = 'estimate' | 'remaining';
|
|
11
|
+
/**
|
|
12
|
+
* Working hours critical path analysis schedules for a task: 0 when it is finished (it needs no
|
|
13
|
+
* more time and occupies nobody), otherwise its effort divided by its allocation. With
|
|
14
|
+
* `effort: 'remaining'`, an in-progress task's effort is `max(0, estimate - loggedHours)`.
|
|
15
|
+
*/
|
|
16
|
+
export declare function getTaskScheduledHours(task: Task, effort?: EffortBasis): number;
|
|
7
17
|
export interface CPMOptions {
|
|
8
18
|
projectStartDate?: string | Date;
|
|
9
19
|
/** The project calendar. Default: `DEFAULT_WORK_SCHEDULE`. */
|
|
@@ -31,6 +41,12 @@ export interface CPMOptions {
|
|
|
31
41
|
* due date, then slack) or `'order'` (creation order).
|
|
32
42
|
*/
|
|
33
43
|
levelingPriority?: LevelingPriority;
|
|
44
|
+
/**
|
|
45
|
+
* `'estimate'` (default) schedules each unfinished task's full estimate. `'remaining'` schedules
|
|
46
|
+
* only what is left on in-progress tasks: `max(0, estimate - loggedHours)`. Finished tasks take
|
|
47
|
+
* no time either way.
|
|
48
|
+
*/
|
|
49
|
+
effort?: EffortBasis;
|
|
34
50
|
}
|
|
35
51
|
export type LevelingPriority = 'slack' | 'priority' | 'dueDate' | 'order';
|
|
36
52
|
/** The calendar a task runs on in assignee mode: assignee, then task team, then project. */
|
|
@@ -39,6 +55,32 @@ export declare function resolveTaskSchedule(task: Task, context: {
|
|
|
39
55
|
teams?: Team[];
|
|
40
56
|
schedule?: WorkSchedule;
|
|
41
57
|
}): WorkSchedule;
|
|
58
|
+
export interface PortfolioProjectInput {
|
|
59
|
+
projectId: string;
|
|
60
|
+
tasks: Task[];
|
|
61
|
+
/** The project's start. Default: today (UTC midnight). */
|
|
62
|
+
projectStartDate?: string | Date;
|
|
63
|
+
/** The project calendar. Default: `DEFAULT_WORK_SCHEDULE`. */
|
|
64
|
+
schedule?: WorkSchedule;
|
|
65
|
+
/**
|
|
66
|
+
* Background work: the project's tasks take up people and team capacity but the project is
|
|
67
|
+
* left out of the results. `'hidden'` also replaces its task ids with `'hidden'` wherever they
|
|
68
|
+
* would appear (`waitingOn`, over-allocations); `'visible'` keeps them.
|
|
69
|
+
*/
|
|
70
|
+
background?: 'visible' | 'hidden';
|
|
71
|
+
}
|
|
72
|
+
export interface PortfolioCPMOptions extends Omit<CPMOptions, 'projectStartDate' | 'schedule'> {
|
|
73
|
+
/** Project ids in priority order; when levelling, their tasks get people first. Unlisted projects come last. */
|
|
74
|
+
projectOrder?: string[];
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Critical path analysis over several projects at once. Always date-based. Each task starts no
|
|
78
|
+
* earlier than its own project's start and is due by its project's end. Dependencies between tasks
|
|
79
|
+
* in different projects are honoured. With `levelResources` (requires `calendars: 'assignee'`),
|
|
80
|
+
* assignees and team pools are shared across all projects, so nobody is booked above capacity in
|
|
81
|
+
* total. Returns one analysis per project, the latest end, and the combined over-allocation report.
|
|
82
|
+
*/
|
|
83
|
+
export declare function calculatePortfolioCPM(projects: PortfolioProjectInput[], dependencies: TaskDependency[], options?: PortfolioCPMOptions): PortfolioCriticalPathAnalysis;
|
|
42
84
|
/**
|
|
43
85
|
* Calculates the Critical Path Method (CPM) schedule for a set of tasks and their dependencies.
|
|
44
86
|
* - Forward Pass: computes earlyStart and earlyFinish (in working hours and calendar dates)
|
package/dist/domain/cpm.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cpm.d.ts","sourceRoot":"","sources":["../../src/domain/cpm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,IAAI,EACJ,cAAc,EAEd,oBAAoB,EACpB,YAAY,EACZ,IAAI,EACJ,IAAI,
|
|
1
|
+
{"version":3,"file":"cpm.d.ts","sourceRoot":"","sources":["../../src/domain/cpm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,IAAI,EACJ,cAAc,EAEd,oBAAoB,EACpB,YAAY,EACZ,IAAI,EACJ,IAAI,EAEJ,6BAA6B,EAC9B,MAAM,mBAAmB,CAAC;AAY3B,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAYvD;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAGpD;AAED,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAEtD;AAED,+GAA+G;AAC/G,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAGlD;AAED,6GAA6G;AAC7G,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,WAAW,CAAC;AAEnD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,GAAE,WAAwB,GAAG,MAAM,CAM1F;AAED,MAAM,WAAW,UAAU;IACzB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IACnC,iFAAiF;IACjF,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf,kFAAkF;IAClF,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC;;;;OAIG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;AAE1E,4FAA4F;AAC5F,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,YAAY,CAAA;CAAE,GACnE,YAAY,CAOd;AAmjBD,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,0DAA0D;IAC1D,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB;;;;OAIG;IACH,UAAU,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;CACnC;AAED,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,UAAU,EAAE,kBAAkB,GAAG,UAAU,CAAC;IAC5F,gHAAgH;IAChH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,qBAAqB,EAAE,EACjC,YAAY,EAAE,cAAc,EAAE,EAC9B,OAAO,GAAE,mBAAwB,GAChC,6BAA6B,CAsC/B;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,IAAI,EAAE,EACb,YAAY,EAAE,cAAc,EAAE,EAC9B,OAAO,GAAE,UAAe,GACvB,oBAAoB,CA4JtB"}
|
package/dist/domain/cpm.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { DEFAULT_WORK_SCHEDULE, addWorkingHours, subtractWorkingHours, getWorkingHoursBetween, nextWorkingTime, previousWorkingTime, parseDate } from './calendar.js';
|
|
2
|
+
import { isTaskInProgress } from '../utils/status.js';
|
|
2
3
|
export function getTaskDurationHours(task) {
|
|
3
4
|
if (typeof task.estimatedHours === 'number' && task.estimatedHours >= 0) {
|
|
4
5
|
return task.estimatedHours;
|
|
@@ -21,6 +22,25 @@ export function getTaskAllocation(task) {
|
|
|
21
22
|
export function getTaskElapsedHours(task) {
|
|
22
23
|
return getTaskDurationHours(task) / getTaskAllocation(task);
|
|
23
24
|
}
|
|
25
|
+
/** True for completed or canceled tasks (by `semanticStatus`, else the default `done`/`canceled` statuses). */
|
|
26
|
+
export function isTaskFinished(task) {
|
|
27
|
+
if (task.semanticStatus)
|
|
28
|
+
return task.semanticStatus === 'completed' || task.semanticStatus === 'canceled';
|
|
29
|
+
return task.status === 'done' || task.status === 'canceled';
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Working hours critical path analysis schedules for a task: 0 when it is finished (it needs no
|
|
33
|
+
* more time and occupies nobody), otherwise its effort divided by its allocation. With
|
|
34
|
+
* `effort: 'remaining'`, an in-progress task's effort is `max(0, estimate - loggedHours)`.
|
|
35
|
+
*/
|
|
36
|
+
export function getTaskScheduledHours(task, effort = 'estimate') {
|
|
37
|
+
if (isTaskFinished(task))
|
|
38
|
+
return 0;
|
|
39
|
+
if (effort === 'remaining' && isTaskInProgress({ status: task.status, semanticStatus: task.semanticStatus })) {
|
|
40
|
+
return Math.max(0, getTaskDurationHours(task) - (task.loggedHours ?? 0)) / getTaskAllocation(task);
|
|
41
|
+
}
|
|
42
|
+
return getTaskElapsedHours(task);
|
|
43
|
+
}
|
|
24
44
|
/** The calendar a task runs on in assignee mode: assignee, then task team, then project. */
|
|
25
45
|
export function resolveTaskSchedule(task, context) {
|
|
26
46
|
return ((task.assigneeId && context.users?.find((u) => u.id === task.assigneeId)?.schedule) ||
|
|
@@ -105,40 +125,80 @@ function buildGraph(tasks, dependencies) {
|
|
|
105
125
|
* the project start. With `levelResources`, see `levelSchedule`.
|
|
106
126
|
*/
|
|
107
127
|
function calculateCalendarCPM(projectId, calculatedAt, graph, options) {
|
|
108
|
-
const
|
|
109
|
-
|
|
128
|
+
const segment = {
|
|
129
|
+
projectId,
|
|
130
|
+
start: startOrToday(options.projectStartDate),
|
|
131
|
+
schedule: options.schedule || DEFAULT_WORK_SCHEDULE,
|
|
132
|
+
taskIds: graph.taskIds
|
|
133
|
+
};
|
|
134
|
+
const result = scheduleOnDates(graph, [segment], options, calculatedAt);
|
|
135
|
+
return result.projects[0];
|
|
136
|
+
}
|
|
137
|
+
function startOrToday(input) {
|
|
138
|
+
if (input)
|
|
139
|
+
return parseDate(input);
|
|
110
140
|
const today = new Date();
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
141
|
+
return new Date(Date.UTC(today.getUTCFullYear(), today.getUTCMonth(), today.getUTCDate()));
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Date-based passes over one or more projects at once. Each task starts no earlier than its
|
|
145
|
+
* project's start and is due by its project's end; dependencies, assignees and team pools may span
|
|
146
|
+
* projects. Returns one analysis per project plus the combined over-allocation report.
|
|
147
|
+
*/
|
|
148
|
+
function scheduleOnDates(graph, segments, options, calculatedAt) {
|
|
149
|
+
const { taskMap, taskIds, prerequisites, successors, topoOrder } = graph;
|
|
150
|
+
const segmentOf = new Map(segments.flatMap((seg) => seg.taskIds.map((id) => [id, seg])));
|
|
151
|
+
const calendarOf = new Map(taskIds.map((id) => {
|
|
152
|
+
const seg = segmentOf.get(id);
|
|
153
|
+
const task = taskMap.get(id);
|
|
154
|
+
return [id, options.calendars === 'assignee' ? resolveTaskSchedule(task, { ...options, schedule: seg.schedule }) : seg.schedule];
|
|
155
|
+
}));
|
|
156
|
+
const durationOf = new Map(taskIds.map((id) => [id, getTaskScheduledHours(taskMap.get(id), options.effort)]));
|
|
157
|
+
const ctx = { taskMap, calendarOf, durationOf, startOf: (id) => segmentOf.get(id).start };
|
|
158
|
+
const endOfProjects = (dates) => {
|
|
159
|
+
const ends = new Map(segments.map((seg) => [seg.projectId, latest(seg.taskIds.map((id) => dates.finish.get(id)), seg.start)]));
|
|
160
|
+
return (id) => ends.get(segmentOf.get(id).projectId);
|
|
161
|
+
};
|
|
119
162
|
const resourcesOf = resourceModel(options.teams);
|
|
163
|
+
const early = forwardPass(topoOrder, prerequisites, ctx);
|
|
164
|
+
const late = backwardPass([...topoOrder].reverse(), (id) => successors.get(id), endOfProjects(early), ctx);
|
|
165
|
+
const analyse = (seg, e, l, extra) => buildAnalysis(seg, calculatedAt, e, l, ctx, extra);
|
|
120
166
|
if (!options.levelResources) {
|
|
121
|
-
const
|
|
122
|
-
return {
|
|
167
|
+
const overallocations = findOverallocations(taskMap, early, resourcesOf);
|
|
168
|
+
return {
|
|
169
|
+
projects: segments.map((seg) => ({ ...analyse(seg, early, late), overallocations: involving(overallocations, seg) })),
|
|
170
|
+
overallocations
|
|
171
|
+
};
|
|
123
172
|
}
|
|
124
173
|
const unleveledSlack = new Map(taskIds.map((id) => [id, slackHours(early.finish.get(id), late.finish.get(id), calendarOf.get(id))]));
|
|
125
|
-
const
|
|
126
|
-
const
|
|
127
|
-
const
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
});
|
|
174
|
+
const projectRank = new Map((options.projectOrder ?? []).map((pid, i) => [pid, i]));
|
|
175
|
+
const rankOf = (id) => projectRank.get(segmentOf.get(id).projectId) ?? projectRank.size;
|
|
176
|
+
const leveled = levelSchedule(graph, ctx, unleveledSlack, options.levelingPriority ?? 'slack', resourcesOf, rankOf);
|
|
177
|
+
const leveledLate = backwardPass(leveled.backwardOrder, (id) => [...successors.get(id), ...(leveled.resourceSuccessors.get(id) ?? [])], endOfProjects(leveled.early), ctx);
|
|
178
|
+
const overallocations = findOverallocations(taskMap, leveled.early, resourcesOf);
|
|
179
|
+
const unleveledEnd = endOfProjects(early);
|
|
132
180
|
return {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
181
|
+
projects: segments.map((seg) => ({
|
|
182
|
+
...analyse(seg, leveled.early, leveledLate, (id) => {
|
|
183
|
+
const delay = round2(getWorkingHoursBetween(early.start.get(id), leveled.early.start.get(id), calendarOf.get(id)));
|
|
184
|
+
const waitingOn = leveled.waitingOn.get(id);
|
|
185
|
+
return { levelingDelayHours: delay, ...(waitingOn ? { waitingOn } : {}) };
|
|
186
|
+
}),
|
|
187
|
+
leveled: true,
|
|
188
|
+
unleveledProjectEndDate: (seg.taskIds.length ? unleveledEnd(seg.taskIds[0]) : seg.start).toISOString(),
|
|
189
|
+
overallocations: involving(overallocations, seg)
|
|
190
|
+
})),
|
|
191
|
+
overallocations
|
|
137
192
|
};
|
|
138
193
|
}
|
|
194
|
+
/** Over-allocation entries that include at least one of the project's tasks. */
|
|
195
|
+
function involving(overallocations, seg) {
|
|
196
|
+
const ids = new Set(seg.taskIds);
|
|
197
|
+
return overallocations.filter((o) => o.taskIds.some((id) => ids.has(id)));
|
|
198
|
+
}
|
|
139
199
|
function latest(dates, floor) {
|
|
140
200
|
let max = floor;
|
|
141
|
-
for (const d of dates
|
|
201
|
+
for (const d of dates)
|
|
142
202
|
if (d > max)
|
|
143
203
|
max = d;
|
|
144
204
|
return max;
|
|
@@ -153,7 +213,7 @@ function forwardPass(order, prerequisites, ctx) {
|
|
|
153
213
|
const start = new Map();
|
|
154
214
|
const finish = new Map();
|
|
155
215
|
for (const id of order) {
|
|
156
|
-
let ready = ctx.
|
|
216
|
+
let ready = ctx.startOf(id);
|
|
157
217
|
for (const p of prerequisites.get(id)) {
|
|
158
218
|
const f = finish.get(p);
|
|
159
219
|
if (f && f > ready)
|
|
@@ -167,11 +227,11 @@ function forwardPass(order, prerequisites, ctx) {
|
|
|
167
227
|
return { start, finish };
|
|
168
228
|
}
|
|
169
229
|
/** Latest dates; `order` must list every successor before its predecessors. */
|
|
170
|
-
function backwardPass(order, successorsOf,
|
|
230
|
+
function backwardPass(order, successorsOf, endOf, ctx) {
|
|
171
231
|
const start = new Map();
|
|
172
232
|
const finish = new Map();
|
|
173
233
|
for (const id of order) {
|
|
174
|
-
let due =
|
|
234
|
+
let due = endOf(id);
|
|
175
235
|
for (const s of successorsOf(id)) {
|
|
176
236
|
const ls = start.get(s);
|
|
177
237
|
if (ls && ls < due)
|
|
@@ -197,7 +257,7 @@ const PRIORITY_RANK = { urgent: 0, high: 1, medium: 2, low: 3, none: 4 };
|
|
|
197
257
|
* resource whose allocations exceed its capacity the earlier precedes the later, and each delayed
|
|
198
258
|
* task follows the task whose finish freed its capacity.
|
|
199
259
|
*/
|
|
200
|
-
function levelSchedule({ taskMap, taskIds, prerequisites, successors, topoOrder }, ctx, unleveledSlack, rule, resourcesOf) {
|
|
260
|
+
function levelSchedule({ taskMap, taskIds, prerequisites, successors, topoOrder }, ctx, unleveledSlack, rule, resourcesOf, projectRankOf = () => 0) {
|
|
201
261
|
const creation = new Map([...taskIds]
|
|
202
262
|
.sort((a, b) => (taskMap.get(a).createdAt ?? '').localeCompare(taskMap.get(b).createdAt ?? '') || a.localeCompare(b))
|
|
203
263
|
.map((id, i) => [id, i]));
|
|
@@ -212,13 +272,21 @@ function levelSchedule({ taskMap, taskIds, prerequisites, successors, topoOrder
|
|
|
212
272
|
dueDate: (id) => [due(id), unleveledSlack.get(id), creation.get(id)],
|
|
213
273
|
order: (id) => [creation.get(id)]
|
|
214
274
|
};
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
275
|
+
// Keys never change, so compute them once; picking the next task is then a linear scan.
|
|
276
|
+
const keyOf = new Map(taskIds.map((id) => [id, [projectRankOf(id), ...keys[rule](id)]]));
|
|
277
|
+
const before = (a, b) => {
|
|
278
|
+
const [ka, kb] = [keyOf.get(a), keyOf.get(b)];
|
|
218
279
|
for (let i = 0; i < ka.length; i++)
|
|
219
280
|
if (ka[i] !== kb[i])
|
|
220
|
-
return ka[i]
|
|
221
|
-
return
|
|
281
|
+
return ka[i] < kb[i];
|
|
282
|
+
return false;
|
|
283
|
+
};
|
|
284
|
+
const first = (ids) => {
|
|
285
|
+
let best;
|
|
286
|
+
for (const id of ids)
|
|
287
|
+
if (best === undefined || before(id, best))
|
|
288
|
+
best = id;
|
|
289
|
+
return best;
|
|
222
290
|
};
|
|
223
291
|
const start = new Map();
|
|
224
292
|
const finish = new Map();
|
|
@@ -232,9 +300,9 @@ function levelSchedule({ taskMap, taskIds, prerequisites, successors, topoOrder
|
|
|
232
300
|
// A dependency cycle leaves tasks that never become eligible; take them in topological order.
|
|
233
301
|
if (eligible.size === 0)
|
|
234
302
|
eligible.add(topoOrder.find((id) => !start.has(id)));
|
|
235
|
-
const id =
|
|
303
|
+
const id = first(eligible);
|
|
236
304
|
eligible.delete(id);
|
|
237
|
-
let ready = ctx.
|
|
305
|
+
let ready = ctx.startOf(id);
|
|
238
306
|
for (const p of prerequisites.get(id)) {
|
|
239
307
|
const f = finish.get(p);
|
|
240
308
|
if (f && f > ready)
|
|
@@ -391,8 +459,8 @@ function findOverallocations(taskMap, dates, resourcesOf) {
|
|
|
391
459
|
}
|
|
392
460
|
return result;
|
|
393
461
|
}
|
|
394
|
-
function buildAnalysis(projectId,
|
|
395
|
-
const {
|
|
462
|
+
function buildAnalysis({ projectId, start: projectStart, schedule: projectSchedule, taskIds }, calculatedAt, early, late, ctx, extra = () => ({})) {
|
|
463
|
+
const { calendarOf, durationOf, taskMap } = ctx;
|
|
396
464
|
const offset = (date) => date >= projectStart
|
|
397
465
|
? getWorkingHoursBetween(projectStart, date, projectSchedule)
|
|
398
466
|
: -getWorkingHoursBetween(date, projectStart, projectSchedule);
|
|
@@ -425,7 +493,7 @@ function buildAnalysis(projectId, calculatedAt, taskIds, early, late, projectSch
|
|
|
425
493
|
...extra(id)
|
|
426
494
|
});
|
|
427
495
|
}
|
|
428
|
-
const projectEnd = latest(early.finish, projectStart);
|
|
496
|
+
const projectEnd = latest(taskIds.map((id) => early.finish.get(id)), projectStart);
|
|
429
497
|
const totalHours = round2(offset(projectEnd));
|
|
430
498
|
return {
|
|
431
499
|
projectId,
|
|
@@ -438,6 +506,49 @@ function buildAnalysis(projectId, calculatedAt, taskIds, early, late, projectSch
|
|
|
438
506
|
tasks: schedules
|
|
439
507
|
};
|
|
440
508
|
}
|
|
509
|
+
/**
|
|
510
|
+
* Critical path analysis over several projects at once. Always date-based. Each task starts no
|
|
511
|
+
* earlier than its own project's start and is due by its project's end. Dependencies between tasks
|
|
512
|
+
* in different projects are honoured. With `levelResources` (requires `calendars: 'assignee'`),
|
|
513
|
+
* assignees and team pools are shared across all projects, so nobody is booked above capacity in
|
|
514
|
+
* total. Returns one analysis per project, the latest end, and the combined over-allocation report.
|
|
515
|
+
*/
|
|
516
|
+
export function calculatePortfolioCPM(projects, dependencies, options = {}) {
|
|
517
|
+
if (options.levelResources && options.calendars !== 'assignee') {
|
|
518
|
+
throw new Error("levelResources requires calendars: 'assignee'.");
|
|
519
|
+
}
|
|
520
|
+
const calculatedAt = new Date().toISOString();
|
|
521
|
+
const graph = buildGraph(projects.flatMap((p) => p.tasks), dependencies);
|
|
522
|
+
const segments = projects.map((p) => ({
|
|
523
|
+
projectId: p.projectId,
|
|
524
|
+
start: startOrToday(p.projectStartDate),
|
|
525
|
+
schedule: p.schedule || DEFAULT_WORK_SCHEDULE,
|
|
526
|
+
taskIds: p.tasks.map((t) => t.id)
|
|
527
|
+
}));
|
|
528
|
+
const result = scheduleOnDates(graph, segments, options, calculatedAt);
|
|
529
|
+
// Background projects are dropped from the results; hidden ones also have their task ids redacted.
|
|
530
|
+
const background = new Set(projects.filter((p) => p.background).map((p) => p.projectId));
|
|
531
|
+
const hiddenTasks = new Set(projects.filter((p) => p.background === 'hidden').flatMap((p) => p.tasks.map((t) => t.id)));
|
|
532
|
+
const backgroundTask = new Set(projects.filter((p) => p.background).flatMap((p) => p.tasks.map((t) => t.id)));
|
|
533
|
+
const redact = (id) => (hiddenTasks.has(id) ? 'hidden' : id);
|
|
534
|
+
const redactAll = (list) => list.map((o) => ({ ...o, taskIds: [...new Set(o.taskIds.map(redact))] }));
|
|
535
|
+
const shown = result.projects
|
|
536
|
+
.filter((a) => !background.has(a.projectId))
|
|
537
|
+
.map((a) => ({
|
|
538
|
+
...a,
|
|
539
|
+
tasks: a.tasks.map((t) => (t.waitingOn ? { ...t, waitingOn: redact(t.waitingOn) } : t)),
|
|
540
|
+
...(a.overallocations ? { overallocations: redactAll(a.overallocations) } : {})
|
|
541
|
+
}));
|
|
542
|
+
const ends = shown.map((a) => a.projectEndDate).filter(Boolean).sort();
|
|
543
|
+
return {
|
|
544
|
+
calculatedAt,
|
|
545
|
+
projects: shown,
|
|
546
|
+
...(ends.length ? { projectEndDate: ends[ends.length - 1] } : {}),
|
|
547
|
+
...(options.levelResources ? { leveled: true } : {}),
|
|
548
|
+
// Only periods that involve a task in the results; other projects' own clashes are not reported.
|
|
549
|
+
overallocations: redactAll(result.overallocations.filter((o) => o.taskIds.some((id) => !backgroundTask.has(id))))
|
|
550
|
+
};
|
|
551
|
+
}
|
|
441
552
|
/**
|
|
442
553
|
* Calculates the Critical Path Method (CPM) schedule for a set of tasks and their dependencies.
|
|
443
554
|
* - Forward Pass: computes earlyStart and earlyFinish (in working hours and calendar dates)
|
|
@@ -473,7 +584,7 @@ export function calculateCPM(projectId, tasks, dependencies, options = {}) {
|
|
|
473
584
|
const earlyFinish = new Map();
|
|
474
585
|
for (const id of topoOrder) {
|
|
475
586
|
const task = taskMap.get(id);
|
|
476
|
-
const duration =
|
|
587
|
+
const duration = getTaskScheduledHours(task, options.effort);
|
|
477
588
|
const prereqs = prerequisites.get(id) || new Set();
|
|
478
589
|
let maxPrereqFinish = 0;
|
|
479
590
|
for (const p of prereqs) {
|
|
@@ -501,7 +612,7 @@ export function calculateCPM(projectId, tasks, dependencies, options = {}) {
|
|
|
501
612
|
for (let i = topoOrder.length - 1; i >= 0; i--) {
|
|
502
613
|
const id = topoOrder[i];
|
|
503
614
|
const task = taskMap.get(id);
|
|
504
|
-
const duration =
|
|
615
|
+
const duration = getTaskScheduledHours(task, options.effort);
|
|
505
616
|
const succs = successors.get(id) || new Set();
|
|
506
617
|
let minSuccLateStart = totalDurationHours;
|
|
507
618
|
if (succs.size > 0) {
|
|
@@ -536,7 +647,7 @@ export function calculateCPM(projectId, tasks, dependencies, options = {}) {
|
|
|
536
647
|
criticalTaskIds.push(id);
|
|
537
648
|
}
|
|
538
649
|
const task = taskMap.get(id);
|
|
539
|
-
const duration =
|
|
650
|
+
const duration = getTaskScheduledHours(task, options.effort);
|
|
540
651
|
const earlyStartDate = projectStartDate
|
|
541
652
|
? addWorkingHours(projectStartDate, es, schedule).toISOString()
|
|
542
653
|
: undefined;
|
package/dist/domain/cpm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cpm.js","sourceRoot":"","sources":["../../src/domain/cpm.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cpm.js","sourceRoot":"","sources":["../../src/domain/cpm.ts"],"names":[],"mappings":"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"}
|
package/dist/engine/index.d.ts
CHANGED
|
@@ -1,9 +1,22 @@
|
|
|
1
|
-
import type { Activity, User, Actor, CriticalPathConfig, Project, Task, TaskDependency, TaskDependencyGraph, Team, TaskContainer, Iteration, Comment, Attachment, FileStorageAdapter, UploadFileInput, PresignedUploadResult, TimeEntry, Webhook, PublicWebhook, Workflow, CreateTaskInput, Deliverable, DeliverableSummary, CreateDeliverableInput, TaskLifecycleState, CriticalPathAnalysis, TimelineLadder, TimelineLadderOptions, TaskLadderView, TaskMetrics, TaskProgressHistory, WorkloadDistribution, WorkloadDistributionOptions } from '../types/index.js';
|
|
1
|
+
import type { Activity, User, Actor, CriticalPathConfig, Project, Task, TaskDependency, TaskDependencyGraph, Team, TaskContainer, Iteration, Comment, Attachment, FileStorageAdapter, UploadFileInput, PresignedUploadResult, TimeEntry, Webhook, PublicWebhook, Workflow, CreateTaskInput, Deliverable, DeliverableSummary, CreateDeliverableInput, TaskLifecycleState, CriticalPathAnalysis, PortfolioCriticalPathAnalysis, TimelineLadder, TimelineLadderOptions, TaskLadderView, TaskMetrics, TaskProgressHistory, WorkloadDistribution, WorkloadDistributionOptions } from '../types/index.js';
|
|
2
2
|
import { StorageAdapter, type ActivityQuery, type Page, type TaskQuery } from '../store/index.js';
|
|
3
3
|
import { PluginRegistry } from '../plugins/index.js';
|
|
4
4
|
import { DomainEventBus } from '../domain/events.js';
|
|
5
5
|
import { WebhookDispatcher } from '../webhooks/dispatcher.js';
|
|
6
6
|
import { type CPMOptions } from '../domain/cpm.js';
|
|
7
|
+
/** Options for `calculatePortfolioCriticalPath`. */
|
|
8
|
+
export interface PortfolioCriticalPathOptions extends CPMOptions {
|
|
9
|
+
/** Projects to include. Default: every project the caller can read. */
|
|
10
|
+
projectIds?: string[];
|
|
11
|
+
/** Project ids in priority order for levelling; unlisted projects come last. */
|
|
12
|
+
projectOrder?: string[];
|
|
13
|
+
/**
|
|
14
|
+
* Also count work from every other project in the caller's tenant (including ones they cannot
|
|
15
|
+
* read) toward people's and teams' capacity, without including those projects in the results.
|
|
16
|
+
* Tasks from unreadable projects appear only as `'hidden'`. Requires `workspace.manage`.
|
|
17
|
+
*/
|
|
18
|
+
includeHiddenWork?: boolean;
|
|
19
|
+
}
|
|
7
20
|
import { type MetricOptions } from '../domain/metrics.js';
|
|
8
21
|
export declare class CriticalPathEngine {
|
|
9
22
|
readonly config: CriticalPathConfig;
|
|
@@ -232,6 +245,21 @@ export declare class CriticalPathEngine {
|
|
|
232
245
|
deleteIteration(id: string): Promise<boolean>;
|
|
233
246
|
private deleteIterationNow;
|
|
234
247
|
calculateCriticalPath(projectId: string, options?: CPMOptions): Promise<CriticalPathAnalysis>;
|
|
248
|
+
/**
|
|
249
|
+
* Critical path analysis across several projects at once: `projectIds`, or every project the
|
|
250
|
+
* caller can read. Projects the caller cannot read are left out entirely. Dependencies between the
|
|
251
|
+
* included projects are honoured and, with `levelResources`, people and team pools are shared, so
|
|
252
|
+
* nobody is booked above capacity across projects. `projectOrder` ranks projects for levelling.
|
|
253
|
+
* Each project uses its own start and calendar (`projectStartDate` / `schedule` are fallbacks).
|
|
254
|
+
* Rejects runs above `portfolioTaskLimit` tasks (default 5000).
|
|
255
|
+
*/
|
|
256
|
+
calculatePortfolioCriticalPath(options?: PortfolioCriticalPathOptions): Promise<PortfolioCriticalPathAnalysis>;
|
|
257
|
+
/** Validated calendar and levelling modes, with engine defaults applied. */
|
|
258
|
+
private resolveCpmModes;
|
|
259
|
+
/** Every dependency touching `tasks`, once each. */
|
|
260
|
+
private loadDependencies;
|
|
261
|
+
/** Users and the teams of the given tenants (team pools match members by user id). */
|
|
262
|
+
private loadPeople;
|
|
235
263
|
getTimelineLadder(projectId: string, options?: TimelineLadderOptions): Promise<TimelineLadder>;
|
|
236
264
|
getTaskLadder(taskId: string): Promise<TaskLadderView | null>;
|
|
237
265
|
getTaskMetrics(taskId: string, options?: MetricOptions): Promise<TaskMetrics | null>;
|