@aneuhold/core-ts-db-lib 4.1.15 → 5.0.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/CHANGELOG.md +13 -1
- package/lib/ctos/workout/WorkoutExerciseCTO.d.ts +2 -2
- package/lib/ctos/workout/WorkoutExerciseCTO.d.ts.map +1 -1
- package/lib/ctos/workout/WorkoutExerciseCTO.js +5 -6
- package/lib/ctos/workout/WorkoutExerciseCTO.js.map +1 -1
- package/lib/ctos/workout/WorkoutExerciseCTO.ts +5 -6
- package/lib/services/workout/Exercise/WorkoutExerciseService.d.ts +14 -8
- package/lib/services/workout/Exercise/WorkoutExerciseService.d.ts.map +1 -1
- package/lib/services/workout/Exercise/WorkoutExerciseService.js +38 -15
- package/lib/services/workout/Exercise/WorkoutExerciseService.js.map +1 -1
- package/lib/services/workout/Exercise/WorkoutExerciseService.ts +45 -22
- package/lib/services/workout/Mesocycle/WorkoutMesocycleService.d.ts.map +1 -1
- package/lib/services/workout/Mesocycle/WorkoutMesocycleService.js +6 -8
- package/lib/services/workout/Mesocycle/WorkoutMesocycleService.js.map +1 -1
- package/lib/services/workout/Mesocycle/WorkoutMesocycleService.ts +7 -17
- package/lib/services/workout/SessionExercise/WorkoutSessionExerciseService.d.ts +13 -8
- package/lib/services/workout/SessionExercise/WorkoutSessionExerciseService.d.ts.map +1 -1
- package/lib/services/workout/SessionExercise/WorkoutSessionExerciseService.js +30 -9
- package/lib/services/workout/SessionExercise/WorkoutSessionExerciseService.js.map +1 -1
- package/lib/services/workout/SessionExercise/WorkoutSessionExerciseService.ts +42 -14
- package/lib/services/workout/Set/WorkoutSetService.d.ts +4 -3
- package/lib/services/workout/Set/WorkoutSetService.d.ts.map +1 -1
- package/lib/services/workout/Set/WorkoutSetService.js +24 -18
- package/lib/services/workout/Set/WorkoutSetService.js.map +1 -1
- package/lib/services/workout/Set/WorkoutSetService.ts +25 -19
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## 🔖 [5.0.0] (2026-03-13)
|
|
9
|
+
|
|
10
|
+
### 🏗️ Changed
|
|
11
|
+
|
|
12
|
+
- _Breaking Change:_ `WorkoutExerciseCTO.lastFirstSet` (nullable `WorkoutSet`) replaced by `lastSessionSets` (array of `WorkoutSet`).
|
|
13
|
+
- _Breaking Change:_ `WorkoutExerciseService.calculateTargetRepsAndWeightForFirstSet` parameter `previousFirstSet?: WorkoutSet` replaced by `previousSets: WorkoutSet[]`.
|
|
14
|
+
- Autoregulation now averages surplus across all sets in a session exercise instead of using only the first set, providing a more representative performance signal.
|
|
15
|
+
- `WorkoutSessionExerciseService.calculateSetSurplus` is now private; the new public `calculateAverageSurplus(sets)` method handles multi-set aggregation.
|
|
16
|
+
- `WorkoutMesocycleService` performance-drop detection now averages surplus across all sets rather than using only the first set.
|
|
17
|
+
- `WorkoutSetService` now retrieves all sets from the previous microcycle for autoregulation instead of only the first set.
|
|
18
|
+
- Rep progression severe underperformance (average surplus < -3) now also reduces weight by one equipment increment.
|
|
19
|
+
|
|
8
20
|
## 🔖 [4.1.15] (2026-03-12)
|
|
9
21
|
|
|
10
22
|
### 🏗️ Changed
|
|
@@ -384,7 +396,7 @@ Updated dependency: now requires `@aneuhold/core-ts-lib@^2.3.11`.
|
|
|
384
396
|
- Updated workflow permissions to allow repository write access
|
|
385
397
|
|
|
386
398
|
<!-- Link References -->
|
|
387
|
-
|
|
399
|
+
[5.0.0]: https://github.com/aneuhold/ts-libs/compare/core-ts-db-lib-v4.1.15...core-ts-db-lib-v5.0.0
|
|
388
400
|
[4.1.15]: https://github.com/aneuhold/ts-libs/compare/core-ts-db-lib-v4.1.14...core-ts-db-lib-v4.1.15
|
|
389
401
|
[4.1.14]: https://github.com/aneuhold/ts-libs/compare/core-ts-db-lib-v4.1.13...core-ts-db-lib-v4.1.14
|
|
390
402
|
[4.1.13]: https://github.com/aneuhold/ts-libs/compare/core-ts-db-lib-v4.1.12...core-ts-db-lib-v4.1.13
|
|
@@ -71,7 +71,7 @@ export declare const WorkoutExerciseCTOSchema: z.ZodObject<{
|
|
|
71
71
|
_id: z.ZodPipe<z.ZodDefault<z.ZodUUID>, z.ZodTransform<`${string}-${string}-${string}-${string}-${string}`, string>>;
|
|
72
72
|
userId: z.ZodPipe<z.ZodUUID, z.ZodTransform<`${string}-${string}-${string}-${string}-${string}`, string>>;
|
|
73
73
|
}, z.core.$strip>>;
|
|
74
|
-
|
|
74
|
+
lastSessionSets: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
75
75
|
docType: z.ZodDefault<z.ZodLiteral<"workoutSet">>;
|
|
76
76
|
workoutExerciseId: z.ZodPipe<z.ZodUUID, z.ZodTransform<`${string}-${string}-${string}-${string}-${string}`, string>>;
|
|
77
77
|
workoutSessionId: z.ZodPipe<z.ZodUUID, z.ZodTransform<`${string}-${string}-${string}-${string}-${string}`, string>>;
|
|
@@ -87,7 +87,7 @@ export declare const WorkoutExerciseCTOSchema: z.ZodObject<{
|
|
|
87
87
|
lastUpdatedDate: z.ZodDefault<z.ZodDate>;
|
|
88
88
|
_id: z.ZodPipe<z.ZodDefault<z.ZodUUID>, z.ZodTransform<`${string}-${string}-${string}-${string}-${string}`, string>>;
|
|
89
89
|
userId: z.ZodPipe<z.ZodUUID, z.ZodTransform<`${string}-${string}-${string}-${string}-${string}`, string>>;
|
|
90
|
-
}, z.core.$strip
|
|
90
|
+
}, z.core.$strip>>>;
|
|
91
91
|
docType: z.ZodDefault<z.ZodLiteral<"workoutExercise">>;
|
|
92
92
|
exerciseName: z.ZodString;
|
|
93
93
|
workoutEquipmentTypeId: z.ZodPipe<z.ZodUUID, z.ZodTransform<`${string}-${string}-${string}-${string}-${string}`, string>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkoutExerciseCTO.d.ts","sourceRoot":"","sources":["../../../src/ctos/workout/WorkoutExerciseCTO.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"WorkoutExerciseCTO.d.ts","sourceRoot":"","sources":["../../../src/ctos/workout/WorkoutExerciseCTO.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8CnC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
|
|
@@ -46,13 +46,12 @@ export const WorkoutExerciseCTOSchema = z.object({
|
|
|
46
46
|
*/
|
|
47
47
|
lastSessionExercise: WorkoutSessionExerciseSchema.nullable(),
|
|
48
48
|
/**
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* drops.
|
|
49
|
+
* All WorkoutSets from the lastSessionExercise's setOrder. Surplus is
|
|
50
|
+
* averaged across all sets for a holistic performance signal during
|
|
51
|
+
* autoregulation (the first set alone can mask poor later-set performance).
|
|
53
52
|
*
|
|
54
|
-
*
|
|
53
|
+
* Empty array if no previous accumulation performance exists.
|
|
55
54
|
*/
|
|
56
|
-
|
|
55
|
+
lastSessionSets: z.array(WorkoutSetSchema).default([])
|
|
57
56
|
});
|
|
58
57
|
//# sourceMappingURL=WorkoutExerciseCTO.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkoutExerciseCTO.js","sourceRoot":"","sources":["../../../src/ctos/workout/WorkoutExerciseCTO.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,0BAA0B,EAAE,MAAM,iDAAiD,CAAC;AAC7F,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAAE,gCAAgC,EAAE,MAAM,uDAAuD,CAAC;AACzG,OAAO,EAAE,4BAA4B,EAAE,MAAM,mDAAmD,CAAC;AACjG,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAEzE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,GAAG,qBAAqB,CAAC,KAAK;IAE9B;;;OAGG;IACH,aAAa,EAAE,0BAA0B;IAEzC;;;;OAIG;IACH,eAAe,EAAE,gCAAgC,CAAC,QAAQ,EAAE;IAE5D;;;;;;;OAOG;IACH,OAAO,EAAE,gBAAgB,CAAC,QAAQ,EAAE;IAEpC;;;;;;;;;OASG;IACH,mBAAmB,EAAE,4BAA4B,CAAC,QAAQ,EAAE;IAE5D
|
|
1
|
+
{"version":3,"file":"WorkoutExerciseCTO.js","sourceRoot":"","sources":["../../../src/ctos/workout/WorkoutExerciseCTO.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,0BAA0B,EAAE,MAAM,iDAAiD,CAAC;AAC7F,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAAE,gCAAgC,EAAE,MAAM,uDAAuD,CAAC;AACzG,OAAO,EAAE,4BAA4B,EAAE,MAAM,mDAAmD,CAAC;AACjG,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAEzE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,GAAG,qBAAqB,CAAC,KAAK;IAE9B;;;OAGG;IACH,aAAa,EAAE,0BAA0B;IAEzC;;;;OAIG;IACH,eAAe,EAAE,gCAAgC,CAAC,QAAQ,EAAE;IAE5D;;;;;;;OAOG;IACH,OAAO,EAAE,gBAAgB,CAAC,QAAQ,EAAE;IAEpC;;;;;;;;;OASG;IACH,mBAAmB,EAAE,4BAA4B,CAAC,QAAQ,EAAE;IAE5D;;;;;;OAMG;IACH,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACvD,CAAC,CAAC"}
|
|
@@ -52,14 +52,13 @@ export const WorkoutExerciseCTOSchema = z.object({
|
|
|
52
52
|
lastSessionExercise: WorkoutSessionExerciseSchema.nullable(),
|
|
53
53
|
|
|
54
54
|
/**
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
* drops.
|
|
55
|
+
* All WorkoutSets from the lastSessionExercise's setOrder. Surplus is
|
|
56
|
+
* averaged across all sets for a holistic performance signal during
|
|
57
|
+
* autoregulation (the first set alone can mask poor later-set performance).
|
|
59
58
|
*
|
|
60
|
-
*
|
|
59
|
+
* Empty array if no previous accumulation performance exists.
|
|
61
60
|
*/
|
|
62
|
-
|
|
61
|
+
lastSessionSets: z.array(WorkoutSetSchema).default([])
|
|
63
62
|
});
|
|
64
63
|
|
|
65
64
|
/**
|
|
@@ -29,11 +29,12 @@ export default class WorkoutExerciseService {
|
|
|
29
29
|
/**
|
|
30
30
|
* Calculates the target weight and reps for the FIRST set of an exercise.
|
|
31
31
|
*
|
|
32
|
-
* When
|
|
33
|
-
* computes
|
|
34
|
-
* surplus = 0 so the plan progresses smoothly without
|
|
32
|
+
* When `previousSets` are provided (completed or planned-only), autoregulation
|
|
33
|
+
* computes an average surplus across all sets and applies progression. Planned-only
|
|
34
|
+
* sets are forecasted with surplus = 0 so the plan progresses smoothly without
|
|
35
|
+
* falling back to calibration.
|
|
35
36
|
*
|
|
36
|
-
* When no previous
|
|
37
|
+
* When no previous sets exist (first mesocycle or new exercise), the calibration-based
|
|
37
38
|
* formula computes initial targets from the exercise's 1RM and rep range.
|
|
38
39
|
*/
|
|
39
40
|
static calculateTargetRepsAndWeightForFirstSet(params: {
|
|
@@ -41,24 +42,29 @@ export default class WorkoutExerciseService {
|
|
|
41
42
|
calibration: WorkoutExerciseCalibration;
|
|
42
43
|
equipment: WorkoutEquipmentType;
|
|
43
44
|
firstMicrocycleRir: number;
|
|
44
|
-
|
|
45
|
+
previousSets: WorkoutSet[];
|
|
45
46
|
}): {
|
|
46
47
|
targetWeight: number;
|
|
47
48
|
targetReps: number;
|
|
48
49
|
};
|
|
49
50
|
/**
|
|
50
|
-
* Calculates targets using auto-regulation based on actual performance from
|
|
51
|
+
* Calculates targets using auto-regulation based on actual performance from previous sets.
|
|
52
|
+
* Surplus is averaged across all sets for a more representative performance signal.
|
|
53
|
+
* Previously only the first set's surplus was used, which masked poor performance
|
|
54
|
+
* on later sets (e.g., first set hits target but second set falls far short).
|
|
51
55
|
*/
|
|
52
56
|
private static calculateAutoRegulatedTargets;
|
|
53
57
|
/**
|
|
54
|
-
* Auto-regulated rep progression.
|
|
58
|
+
* Auto-regulated rep progression. Attempts to increase reps until hitting rep range max,
|
|
59
|
+
* then resets reps and increases weight.
|
|
55
60
|
*
|
|
56
61
|
* | Surplus | Action |
|
|
57
62
|
* |---:|---|
|
|
58
63
|
* | >= 3 | Accelerate: actualReps + 2 (progress from actual, not planned) |
|
|
59
64
|
* | 0 to 2 | Normal: plannedReps + 2 |
|
|
60
65
|
* | -1 to -2 | Hold: plannedReps (don't add reps) |
|
|
61
|
-
* |
|
|
66
|
+
* | -3 | Regress: actualReps (use actual as new baseline) |
|
|
67
|
+
* | < -3 | Severe regress: actualReps + reduce weight (weight is too heavy for rep range) |
|
|
62
68
|
*/
|
|
63
69
|
private static calculateAutoRegulatedRepTargets;
|
|
64
70
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkoutExerciseService.d.ts","sourceRoot":"","sources":["../../../../src/services/workout/Exercise/WorkoutExerciseService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAC;AAC/F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+CAA+C,CAAC;AACrF,OAAO,EAEL,gBAAgB,EACjB,MAAM,+CAA+C,CAAC;AACvD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0DAA0D,CAAC;AAC3G,OAAO,KAAK,EAAuB,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAMhG;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,sBAAsB;IACzC;;;;;;;;OAQG;IACH,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE;IAWlF;;;;OAIG;IACH,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM;IAIzD
|
|
1
|
+
{"version":3,"file":"WorkoutExerciseService.d.ts","sourceRoot":"","sources":["../../../../src/services/workout/Exercise/WorkoutExerciseService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAC;AAC/F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+CAA+C,CAAC;AACrF,OAAO,EAEL,gBAAgB,EACjB,MAAM,+CAA+C,CAAC;AACvD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,0DAA0D,CAAC;AAC3G,OAAO,KAAK,EAAuB,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAMhG;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,sBAAsB;IACzC;;;;;;;;OAQG;IACH,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE;IAWlF;;;;OAIG;IACH,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM;IAIzD;;;;;;;;;;OAUG;IACH,MAAM,CAAC,uCAAuC,CAAC,MAAM,EAAE;QACrD,QAAQ,EAAE,eAAe,CAAC;QAC1B,WAAW,EAAE,0BAA0B,CAAC;QACxC,SAAS,EAAE,oBAAoB,CAAC;QAChC,kBAAkB,EAAE,MAAM,CAAC;QAC3B,YAAY,EAAE,UAAU,EAAE,CAAC;KAC5B,GAAG;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;IA0ChD;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,6BAA6B;IAuB5C;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,MAAM,CAAC,gCAAgC;IAyD/C;;;;;;;;;OASG;IACH,OAAO,CAAC,MAAM,CAAC,iCAAiC;IA2ChD;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAmB7B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,gCAAgC;IA2C/C,OAAO,CAAC,MAAM,CAAC,wBAAwB;CAgBxC"}
|
|
@@ -37,15 +37,16 @@ export default class WorkoutExerciseService {
|
|
|
37
37
|
/**
|
|
38
38
|
* Calculates the target weight and reps for the FIRST set of an exercise.
|
|
39
39
|
*
|
|
40
|
-
* When
|
|
41
|
-
* computes
|
|
42
|
-
* surplus = 0 so the plan progresses smoothly without
|
|
40
|
+
* When `previousSets` are provided (completed or planned-only), autoregulation
|
|
41
|
+
* computes an average surplus across all sets and applies progression. Planned-only
|
|
42
|
+
* sets are forecasted with surplus = 0 so the plan progresses smoothly without
|
|
43
|
+
* falling back to calibration.
|
|
43
44
|
*
|
|
44
|
-
* When no previous
|
|
45
|
+
* When no previous sets exist (first mesocycle or new exercise), the calibration-based
|
|
45
46
|
* formula computes initial targets from the exercise's 1RM and rep range.
|
|
46
47
|
*/
|
|
47
48
|
static calculateTargetRepsAndWeightForFirstSet(params) {
|
|
48
|
-
const { exercise, calibration, equipment, firstMicrocycleRir,
|
|
49
|
+
const { exercise, calibration, equipment, firstMicrocycleRir, previousSets } = params;
|
|
49
50
|
// Validate equipment has weight options
|
|
50
51
|
if (!equipment.weightOptions || equipment.weightOptions.length === 0) {
|
|
51
52
|
throw new Error(`No weight options defined for equipment type ${equipment._id}, ${equipment.title}`);
|
|
@@ -53,16 +54,18 @@ export default class WorkoutExerciseService {
|
|
|
53
54
|
// Get rep range for this exercise
|
|
54
55
|
const repRange = this.getRepRangeValues(exercise.repRange);
|
|
55
56
|
const repRangeMidpoint = Math.floor((repRange.min + repRange.max) / 2);
|
|
56
|
-
//
|
|
57
|
+
// Convert all previous sets to completed sets (forecasting planned → actual if needed).
|
|
57
58
|
// toCompletedSet returns the real data when actual performance exists, or
|
|
58
59
|
// forecasts by copying planned values into actuals (surplus = 0) so the
|
|
59
60
|
// plan progresses smoothly from the planned baseline.
|
|
60
|
-
const
|
|
61
|
-
|
|
61
|
+
const completedSets = previousSets
|
|
62
|
+
.map((set) => this.toCompletedSet(set))
|
|
63
|
+
.filter((set) => set !== null);
|
|
64
|
+
if (completedSets.length > 0) {
|
|
62
65
|
return this.calculateAutoRegulatedTargets({
|
|
63
66
|
exercise,
|
|
64
67
|
equipment,
|
|
65
|
-
|
|
68
|
+
previousSets: completedSets,
|
|
66
69
|
repRange
|
|
67
70
|
});
|
|
68
71
|
}
|
|
@@ -77,25 +80,35 @@ export default class WorkoutExerciseService {
|
|
|
77
80
|
});
|
|
78
81
|
}
|
|
79
82
|
/**
|
|
80
|
-
* Calculates targets using auto-regulation based on actual performance from
|
|
83
|
+
* Calculates targets using auto-regulation based on actual performance from previous sets.
|
|
84
|
+
* Surplus is averaged across all sets for a more representative performance signal.
|
|
85
|
+
* Previously only the first set's surplus was used, which masked poor performance
|
|
86
|
+
* on later sets (e.g., first set hits target but second set falls far short).
|
|
81
87
|
*/
|
|
82
88
|
static calculateAutoRegulatedTargets(params) {
|
|
83
|
-
const { exercise, equipment,
|
|
84
|
-
|
|
89
|
+
const { exercise, equipment, previousSets, repRange } = params;
|
|
90
|
+
// The first set is the reference for rep/weight targets (subsequent sets are
|
|
91
|
+
// derived from the first via intra-session fatigue drops).
|
|
92
|
+
const previousFirstSet = previousSets[0];
|
|
93
|
+
// Average surplus across all sets for a holistic performance signal.
|
|
94
|
+
// previousSets are CompletedWorkoutSets (all fields non-null), so this always returns a number.
|
|
95
|
+
const surplus = WorkoutSessionExerciseService.calculateAverageSurplus(previousSets) ?? 0;
|
|
85
96
|
if (exercise.preferredProgressionType === ExerciseProgressionType.Rep) {
|
|
86
97
|
return this.calculateAutoRegulatedRepTargets(previousFirstSet, surplus, repRange, equipment);
|
|
87
98
|
}
|
|
88
99
|
return this.calculateAutoRegulatedLoadTargets(previousFirstSet, surplus, repRange, equipment);
|
|
89
100
|
}
|
|
90
101
|
/**
|
|
91
|
-
* Auto-regulated rep progression.
|
|
102
|
+
* Auto-regulated rep progression. Attempts to increase reps until hitting rep range max,
|
|
103
|
+
* then resets reps and increases weight.
|
|
92
104
|
*
|
|
93
105
|
* | Surplus | Action |
|
|
94
106
|
* |---:|---|
|
|
95
107
|
* | >= 3 | Accelerate: actualReps + 2 (progress from actual, not planned) |
|
|
96
108
|
* | 0 to 2 | Normal: plannedReps + 2 |
|
|
97
109
|
* | -1 to -2 | Hold: plannedReps (don't add reps) |
|
|
98
|
-
* |
|
|
110
|
+
* | -3 | Regress: actualReps (use actual as new baseline) |
|
|
111
|
+
* | < -3 | Severe regress: actualReps + reduce weight (weight is too heavy for rep range) |
|
|
99
112
|
*/
|
|
100
113
|
static calculateAutoRegulatedRepTargets(previousSet, surplus, repRange, equipment) {
|
|
101
114
|
let targetReps;
|
|
@@ -109,14 +122,24 @@ export default class WorkoutExerciseService {
|
|
|
109
122
|
else if (surplus >= -2) {
|
|
110
123
|
targetReps = previousSet.plannedReps;
|
|
111
124
|
}
|
|
125
|
+
else if (surplus >= -3) {
|
|
126
|
+
targetReps = previousSet.actualReps;
|
|
127
|
+
}
|
|
112
128
|
else {
|
|
129
|
+
// Severe underperformance: the weight is too heavy for this rep range.
|
|
130
|
+
// Reduce weight by one equipment increment so the user can actually
|
|
131
|
+
// train in the target rep range.
|
|
113
132
|
targetReps = previousSet.actualReps;
|
|
133
|
+
const reducedWeight = WorkoutEquipmentTypeService.findNearestWeight(equipment, targetWeight - 0.01, 'down');
|
|
134
|
+
if (reducedWeight !== null) {
|
|
135
|
+
targetWeight = reducedWeight;
|
|
136
|
+
}
|
|
114
137
|
}
|
|
115
138
|
// Clamp to rep range floor (never target below min, even if actual was 0)
|
|
116
139
|
targetReps = Math.max(targetReps, repRange.min);
|
|
117
140
|
// Handle rep range ceiling: if target exceeds max, reset and bump weight
|
|
118
141
|
if (targetReps > repRange.max) {
|
|
119
|
-
targetReps = repRange.max;
|
|
142
|
+
targetReps = Math.floor((repRange.min + repRange.max) / 2);
|
|
120
143
|
const nextWeight = this.findNextTwoPercentWeight(targetWeight, equipment);
|
|
121
144
|
if (nextWeight !== null) {
|
|
122
145
|
targetWeight = nextWeight;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkoutExerciseService.js","sourceRoot":"","sources":["../../../../src/services/workout/Exercise/WorkoutExerciseService.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EACjB,MAAM,+CAA+C,CAAC;AAGvD,OAAO,2BAA2B,MAAM,iDAAiD,CAAC;AAC1F,OAAO,iCAAiC,MAAM,6DAA6D,CAAC;AAC5G,OAAO,6BAA6B,MAAM,qDAAqD,CAAC;AAChG,OAAO,iBAAiB,MAAM,kCAAkC,CAAC;AAEjE;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,sBAAsB;IACzC;;;;;;;;OAQG;IACH,MAAM,CAAC,iBAAiB,CAAC,QAA0B;QACjD,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,gBAAgB,CAAC,KAAK;gBACzB,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;YAC7B,KAAK,gBAAgB,CAAC,MAAM;gBAC1B,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;YAC9B,KAAK,gBAAgB,CAAC,KAAK;gBACzB,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,eAAe,CAAC,QAAyB;QAC9C,OAAO,iBAAiB,CAAC,eAAe,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC9E,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"WorkoutExerciseService.js","sourceRoot":"","sources":["../../../../src/services/workout/Exercise/WorkoutExerciseService.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,11 +47,12 @@ export default class WorkoutExerciseService {
|
|
|
47
47
|
/**
|
|
48
48
|
* Calculates the target weight and reps for the FIRST set of an exercise.
|
|
49
49
|
*
|
|
50
|
-
* When
|
|
51
|
-
* computes
|
|
52
|
-
* surplus = 0 so the plan progresses smoothly without
|
|
50
|
+
* When `previousSets` are provided (completed or planned-only), autoregulation
|
|
51
|
+
* computes an average surplus across all sets and applies progression. Planned-only
|
|
52
|
+
* sets are forecasted with surplus = 0 so the plan progresses smoothly without
|
|
53
|
+
* falling back to calibration.
|
|
53
54
|
*
|
|
54
|
-
* When no previous
|
|
55
|
+
* When no previous sets exist (first mesocycle or new exercise), the calibration-based
|
|
55
56
|
* formula computes initial targets from the exercise's 1RM and rep range.
|
|
56
57
|
*/
|
|
57
58
|
static calculateTargetRepsAndWeightForFirstSet(params: {
|
|
@@ -59,9 +60,9 @@ export default class WorkoutExerciseService {
|
|
|
59
60
|
calibration: WorkoutExerciseCalibration;
|
|
60
61
|
equipment: WorkoutEquipmentType;
|
|
61
62
|
firstMicrocycleRir: number;
|
|
62
|
-
|
|
63
|
+
previousSets: WorkoutSet[];
|
|
63
64
|
}): { targetWeight: number; targetReps: number } {
|
|
64
|
-
const { exercise, calibration, equipment, firstMicrocycleRir,
|
|
65
|
+
const { exercise, calibration, equipment, firstMicrocycleRir, previousSets } = params;
|
|
65
66
|
|
|
66
67
|
// Validate equipment has weight options
|
|
67
68
|
if (!equipment.weightOptions || equipment.weightOptions.length === 0) {
|
|
@@ -74,16 +75,19 @@ export default class WorkoutExerciseService {
|
|
|
74
75
|
const repRange = this.getRepRangeValues(exercise.repRange);
|
|
75
76
|
const repRangeMidpoint = Math.floor((repRange.min + repRange.max) / 2);
|
|
76
77
|
|
|
77
|
-
//
|
|
78
|
+
// Convert all previous sets to completed sets (forecasting planned → actual if needed).
|
|
78
79
|
// toCompletedSet returns the real data when actual performance exists, or
|
|
79
80
|
// forecasts by copying planned values into actuals (surplus = 0) so the
|
|
80
81
|
// plan progresses smoothly from the planned baseline.
|
|
81
|
-
const
|
|
82
|
-
|
|
82
|
+
const completedSets = previousSets
|
|
83
|
+
.map((set) => this.toCompletedSet(set))
|
|
84
|
+
.filter((set): set is CompletedWorkoutSet => set !== null);
|
|
85
|
+
|
|
86
|
+
if (completedSets.length > 0) {
|
|
83
87
|
return this.calculateAutoRegulatedTargets({
|
|
84
88
|
exercise,
|
|
85
89
|
equipment,
|
|
86
|
-
|
|
90
|
+
previousSets: completedSets,
|
|
87
91
|
repRange
|
|
88
92
|
});
|
|
89
93
|
}
|
|
@@ -100,22 +104,26 @@ export default class WorkoutExerciseService {
|
|
|
100
104
|
}
|
|
101
105
|
|
|
102
106
|
/**
|
|
103
|
-
* Calculates targets using auto-regulation based on actual performance from
|
|
107
|
+
* Calculates targets using auto-regulation based on actual performance from previous sets.
|
|
108
|
+
* Surplus is averaged across all sets for a more representative performance signal.
|
|
109
|
+
* Previously only the first set's surplus was used, which masked poor performance
|
|
110
|
+
* on later sets (e.g., first set hits target but second set falls far short).
|
|
104
111
|
*/
|
|
105
112
|
private static calculateAutoRegulatedTargets(params: {
|
|
106
113
|
exercise: WorkoutExercise;
|
|
107
114
|
equipment: WorkoutEquipmentType;
|
|
108
|
-
|
|
115
|
+
previousSets: CompletedWorkoutSet[];
|
|
109
116
|
repRange: { min: number; max: number };
|
|
110
117
|
}): { targetWeight: number; targetReps: number } {
|
|
111
|
-
const { exercise, equipment,
|
|
118
|
+
const { exercise, equipment, previousSets, repRange } = params;
|
|
112
119
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
)
|
|
120
|
+
// The first set is the reference for rep/weight targets (subsequent sets are
|
|
121
|
+
// derived from the first via intra-session fatigue drops).
|
|
122
|
+
const previousFirstSet = previousSets[0];
|
|
123
|
+
|
|
124
|
+
// Average surplus across all sets for a holistic performance signal.
|
|
125
|
+
// previousSets are CompletedWorkoutSets (all fields non-null), so this always returns a number.
|
|
126
|
+
const surplus = WorkoutSessionExerciseService.calculateAverageSurplus(previousSets) ?? 0;
|
|
119
127
|
|
|
120
128
|
if (exercise.preferredProgressionType === ExerciseProgressionType.Rep) {
|
|
121
129
|
return this.calculateAutoRegulatedRepTargets(previousFirstSet, surplus, repRange, equipment);
|
|
@@ -125,14 +133,16 @@ export default class WorkoutExerciseService {
|
|
|
125
133
|
}
|
|
126
134
|
|
|
127
135
|
/**
|
|
128
|
-
* Auto-regulated rep progression.
|
|
136
|
+
* Auto-regulated rep progression. Attempts to increase reps until hitting rep range max,
|
|
137
|
+
* then resets reps and increases weight.
|
|
129
138
|
*
|
|
130
139
|
* | Surplus | Action |
|
|
131
140
|
* |---:|---|
|
|
132
141
|
* | >= 3 | Accelerate: actualReps + 2 (progress from actual, not planned) |
|
|
133
142
|
* | 0 to 2 | Normal: plannedReps + 2 |
|
|
134
143
|
* | -1 to -2 | Hold: plannedReps (don't add reps) |
|
|
135
|
-
* |
|
|
144
|
+
* | -3 | Regress: actualReps (use actual as new baseline) |
|
|
145
|
+
* | < -3 | Severe regress: actualReps + reduce weight (weight is too heavy for rep range) |
|
|
136
146
|
*/
|
|
137
147
|
private static calculateAutoRegulatedRepTargets(
|
|
138
148
|
previousSet: CompletedWorkoutSet,
|
|
@@ -149,8 +159,21 @@ export default class WorkoutExerciseService {
|
|
|
149
159
|
targetReps = previousSet.plannedReps + 2;
|
|
150
160
|
} else if (surplus >= -2) {
|
|
151
161
|
targetReps = previousSet.plannedReps;
|
|
162
|
+
} else if (surplus >= -3) {
|
|
163
|
+
targetReps = previousSet.actualReps;
|
|
152
164
|
} else {
|
|
165
|
+
// Severe underperformance: the weight is too heavy for this rep range.
|
|
166
|
+
// Reduce weight by one equipment increment so the user can actually
|
|
167
|
+
// train in the target rep range.
|
|
153
168
|
targetReps = previousSet.actualReps;
|
|
169
|
+
const reducedWeight = WorkoutEquipmentTypeService.findNearestWeight(
|
|
170
|
+
equipment,
|
|
171
|
+
targetWeight - 0.01,
|
|
172
|
+
'down'
|
|
173
|
+
);
|
|
174
|
+
if (reducedWeight !== null) {
|
|
175
|
+
targetWeight = reducedWeight;
|
|
176
|
+
}
|
|
154
177
|
}
|
|
155
178
|
|
|
156
179
|
// Clamp to rep range floor (never target below min, even if actual was 0)
|
|
@@ -158,7 +181,7 @@ export default class WorkoutExerciseService {
|
|
|
158
181
|
|
|
159
182
|
// Handle rep range ceiling: if target exceeds max, reset and bump weight
|
|
160
183
|
if (targetReps > repRange.max) {
|
|
161
|
-
targetReps = repRange.max;
|
|
184
|
+
targetReps = Math.floor((repRange.min + repRange.max) / 2);
|
|
162
185
|
const nextWeight = this.findNextTwoPercentWeight(targetWeight, equipment);
|
|
163
186
|
if (nextWeight !== null) {
|
|
164
187
|
targetWeight = nextWeight;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkoutMesocycleService.d.ts","sourceRoot":"","sources":["../../../../src/services/workout/Mesocycle/WorkoutMesocycleService.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"WorkoutMesocycleService.d.ts","sourceRoot":"","sources":["../../../../src/services/workout/Mesocycle/WorkoutMesocycleService.ts"],"names":[],"mappings":"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"}
|
|
@@ -379,17 +379,15 @@ export default class WorkoutMesocycleService {
|
|
|
379
379
|
consecutiveDrops = 0;
|
|
380
380
|
continue;
|
|
381
381
|
}
|
|
382
|
-
|
|
383
|
-
const
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
firstSet.plannedRir == null) {
|
|
382
|
+
// Average surplus across all completed sets for a holistic performance signal.
|
|
383
|
+
const sets = se.setOrder
|
|
384
|
+
.map((setId) => setMap.get(setId))
|
|
385
|
+
.filter((s) => s != null);
|
|
386
|
+
const surplus = WorkoutSessionExerciseService.calculateAverageSurplus(sets);
|
|
387
|
+
if (surplus == null) {
|
|
389
388
|
consecutiveDrops = 0;
|
|
390
389
|
continue;
|
|
391
390
|
}
|
|
392
|
-
const surplus = WorkoutSessionExerciseService.calculateSetSurplus(firstSet.actualReps, firstSet.plannedReps, firstSet.rir, firstSet.plannedRir);
|
|
393
391
|
if (surplus <= this.PERFORMANCE_DROP_SURPLUS_THRESHOLD) {
|
|
394
392
|
consecutiveDrops++;
|
|
395
393
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkoutMesocycleService.js","sourceRoot":"","sources":["../../../../src/services/workout/Mesocycle/WorkoutMesocycleService.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WorkoutMesocycleService.js","sourceRoot":"","sources":["../../../../src/services/workout/Mesocycle/WorkoutMesocycleService.ts"],"names":[],"mappings":"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"}
|
|
@@ -550,27 +550,17 @@ export default class WorkoutMesocycleService {
|
|
|
550
550
|
continue;
|
|
551
551
|
}
|
|
552
552
|
|
|
553
|
-
|
|
554
|
-
const
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
firstSet.rir == null ||
|
|
561
|
-
firstSet.plannedRir == null
|
|
562
|
-
) {
|
|
553
|
+
// Average surplus across all completed sets for a holistic performance signal.
|
|
554
|
+
const sets = se.setOrder
|
|
555
|
+
.map((setId) => setMap.get(setId))
|
|
556
|
+
.filter((s): s is WorkoutSet => s != null);
|
|
557
|
+
const surplus = WorkoutSessionExerciseService.calculateAverageSurplus(sets);
|
|
558
|
+
|
|
559
|
+
if (surplus == null) {
|
|
563
560
|
consecutiveDrops = 0;
|
|
564
561
|
continue;
|
|
565
562
|
}
|
|
566
563
|
|
|
567
|
-
const surplus = WorkoutSessionExerciseService.calculateSetSurplus(
|
|
568
|
-
firstSet.actualReps,
|
|
569
|
-
firstSet.plannedReps,
|
|
570
|
-
firstSet.rir,
|
|
571
|
-
firstSet.plannedRir
|
|
572
|
-
);
|
|
573
|
-
|
|
574
564
|
if (surplus <= this.PERFORMANCE_DROP_SURPLUS_THRESHOLD) {
|
|
575
565
|
consecutiveDrops++;
|
|
576
566
|
} else {
|
|
@@ -37,17 +37,15 @@ export default class WorkoutSessionExerciseService {
|
|
|
37
37
|
*/
|
|
38
38
|
static getPerformanceScore(sets: WorkoutSet[]): number | null;
|
|
39
39
|
/**
|
|
40
|
-
* Calculates the surplus
|
|
41
|
-
*
|
|
40
|
+
* Calculates the average surplus across an array of sets. Sets missing
|
|
41
|
+
* required planned/actual data are skipped. Returns null if no sets
|
|
42
|
+
* have complete data.
|
|
42
43
|
*
|
|
43
|
-
*
|
|
44
|
+
* Surplus formula per set: `(actualReps - plannedReps) + (rir - plannedRir)`
|
|
44
45
|
*
|
|
45
|
-
* @param
|
|
46
|
-
* @param plannedReps The planned reps.
|
|
47
|
-
* @param rir The actual RIR (reps in reserve).
|
|
48
|
-
* @param plannedRir The planned RIR.
|
|
46
|
+
* @param sets The sets to calculate average surplus for.
|
|
49
47
|
*/
|
|
50
|
-
static
|
|
48
|
+
static calculateAverageSurplus(sets: WorkoutSet[]): number | null;
|
|
51
49
|
/**
|
|
52
50
|
* Uses the soreness/performance table from the workout model notes to recommend whether to add
|
|
53
51
|
* sets next microcycle or employ recovery sessions.
|
|
@@ -85,5 +83,12 @@ export default class WorkoutSessionExerciseService {
|
|
|
85
83
|
* and sorenessScore. Deload exercises are always considered filled.
|
|
86
84
|
*/
|
|
87
85
|
static hasAllSessionMetricsFilled(sessionExercise: WorkoutSessionExercise, exerciseSets: WorkoutSet[]): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Calculates the surplus for a single set: how much the user exceeded or
|
|
88
|
+
* fell short of the plan. Positive means exceeded, negative means fell short.
|
|
89
|
+
*
|
|
90
|
+
* Formula: `(actualReps - plannedReps) + (rir - plannedRir)`
|
|
91
|
+
*/
|
|
92
|
+
private static calculateSetSurplus;
|
|
88
93
|
}
|
|
89
94
|
//# sourceMappingURL=WorkoutSessionExerciseService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkoutSessionExerciseService.d.ts","sourceRoot":"","sources":["../../../../src/services/workout/SessionExercise/WorkoutSessionExerciseService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sDAAsD,CAAC;AACnG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAG3E;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,6BAA6B;IAChD;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,eAAe,EAAE,sBAAsB,GAAG,MAAM,GAAG,IAAI;IAI1E;;;;OAIG;IACH,MAAM,CAAC,eAAe,CAAC,eAAe,EAAE,sBAAsB,GAAG,MAAM,GAAG,IAAI;IAI9E;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,sBAAsB,GAAG,MAAM,GAAG,IAAI;IAIrE;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,GAAG,IAAI;IA0C7D
|
|
1
|
+
{"version":3,"file":"WorkoutSessionExerciseService.d.ts","sourceRoot":"","sources":["../../../../src/services/workout/SessionExercise/WorkoutSessionExerciseService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sDAAsD,CAAC;AACnG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAG3E;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,6BAA6B;IAChD;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,eAAe,EAAE,sBAAsB,GAAG,MAAM,GAAG,IAAI;IAI1E;;;;OAIG;IACH,MAAM,CAAC,eAAe,CAAC,eAAe,EAAE,sBAAsB,GAAG,MAAM,GAAG,IAAI;IAI9E;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,sBAAsB,GAAG,MAAM,GAAG,IAAI;IAIrE;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,GAAG,IAAI;IA0C7D;;;;;;;;OAQG;IACH,MAAM,CAAC,uBAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,GAAG,IAAI;IAwBjE;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,oCAAoC,CACzC,sBAAsB,EAAE,sBAAsB,GAC7C,MAAM,GAAG,IAAI;IAsBhB;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,UAAU,EAAE,GAAG,OAAO;IAI5D;;;;;OAKG;IACH,MAAM,CAAC,0BAA0B,CAC/B,eAAe,EAAE,sBAAsB,EACvC,YAAY,EAAE,UAAU,EAAE,GACzB,OAAO;IAUV;;;;OAIG;IACH,MAAM,CAAC,0BAA0B,CAC/B,eAAe,EAAE,sBAAsB,EACvC,YAAY,EAAE,UAAU,EAAE,GACzB,OAAO;IAaV;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;CAQnC"}
|
|
@@ -71,18 +71,30 @@ export default class WorkoutSessionExerciseService {
|
|
|
71
71
|
return Math.round(average);
|
|
72
72
|
}
|
|
73
73
|
/**
|
|
74
|
-
* Calculates the surplus
|
|
75
|
-
*
|
|
74
|
+
* Calculates the average surplus across an array of sets. Sets missing
|
|
75
|
+
* required planned/actual data are skipped. Returns null if no sets
|
|
76
|
+
* have complete data.
|
|
76
77
|
*
|
|
77
|
-
*
|
|
78
|
+
* Surplus formula per set: `(actualReps - plannedReps) + (rir - plannedRir)`
|
|
78
79
|
*
|
|
79
|
-
* @param
|
|
80
|
-
* @param plannedReps The planned reps.
|
|
81
|
-
* @param rir The actual RIR (reps in reserve).
|
|
82
|
-
* @param plannedRir The planned RIR.
|
|
80
|
+
* @param sets The sets to calculate average surplus for.
|
|
83
81
|
*/
|
|
84
|
-
static
|
|
85
|
-
|
|
82
|
+
static calculateAverageSurplus(sets) {
|
|
83
|
+
let totalSurplus = 0;
|
|
84
|
+
let completedCount = 0;
|
|
85
|
+
for (const set of sets) {
|
|
86
|
+
if (set.actualReps == null ||
|
|
87
|
+
set.plannedReps == null ||
|
|
88
|
+
set.rir == null ||
|
|
89
|
+
set.plannedRir == null) {
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
totalSurplus += this.calculateSetSurplus(set.actualReps, set.plannedReps, set.rir, set.plannedRir);
|
|
93
|
+
completedCount++;
|
|
94
|
+
}
|
|
95
|
+
if (completedCount === 0)
|
|
96
|
+
return null;
|
|
97
|
+
return totalSurplus / completedCount;
|
|
86
98
|
}
|
|
87
99
|
/**
|
|
88
100
|
* Uses the soreness/performance table from the workout model notes to recommend whether to add
|
|
@@ -158,5 +170,14 @@ export default class WorkoutSessionExerciseService {
|
|
|
158
170
|
sessionExercise.fatigue.perceivedEffort != null &&
|
|
159
171
|
sessionExercise.sorenessScore != null);
|
|
160
172
|
}
|
|
173
|
+
/**
|
|
174
|
+
* Calculates the surplus for a single set: how much the user exceeded or
|
|
175
|
+
* fell short of the plan. Positive means exceeded, negative means fell short.
|
|
176
|
+
*
|
|
177
|
+
* Formula: `(actualReps - plannedReps) + (rir - plannedRir)`
|
|
178
|
+
*/
|
|
179
|
+
static calculateSetSurplus(actualReps, plannedReps, rir, plannedRir) {
|
|
180
|
+
return actualReps - plannedReps + (rir - plannedRir);
|
|
181
|
+
}
|
|
161
182
|
}
|
|
162
183
|
//# sourceMappingURL=WorkoutSessionExerciseService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkoutSessionExerciseService.js","sourceRoot":"","sources":["../../../../src/services/workout/SessionExercise/WorkoutSessionExerciseService.ts"],"names":[],"mappings":"AAEA,OAAO,iBAAiB,MAAM,kCAAkC,CAAC;AAEjE;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,6BAA6B;IAChD;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,eAAuC;QACxD,OAAO,iBAAiB,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IAC5D,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,eAAe,CAAC,eAAuC;QAC5D,OAAO,iBAAiB,CAAC,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACpE,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,eAAuC;QACnD,OAAO,iBAAiB,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAChF,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,mBAAmB,CAAC,IAAkB;QAC3C,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IACE,GAAG,CAAC,WAAW,IAAI,IAAI;gBACvB,GAAG,CAAC,UAAU,IAAI,IAAI;gBACtB,GAAG,CAAC,UAAU,IAAI,IAAI;gBACtB,GAAG,CAAC,GAAG,IAAI,IAAI,EACf,CAAC;gBACD,SAAS;YACX,CAAC;YAED,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;gBACrC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,SAAS;YACX,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CACtC,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,GAAG,EACP,GAAG,CAAC,UAAU,CACf,CAAC;YAEF,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;gBACjB,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;iBAAM,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;gBACxB,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;QACpF,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"WorkoutSessionExerciseService.js","sourceRoot":"","sources":["../../../../src/services/workout/SessionExercise/WorkoutSessionExerciseService.ts"],"names":[],"mappings":"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"}
|
|
@@ -89,23 +89,36 @@ export default class WorkoutSessionExerciseService {
|
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
/**
|
|
92
|
-
* Calculates the surplus
|
|
93
|
-
*
|
|
92
|
+
* Calculates the average surplus across an array of sets. Sets missing
|
|
93
|
+
* required planned/actual data are skipped. Returns null if no sets
|
|
94
|
+
* have complete data.
|
|
94
95
|
*
|
|
95
|
-
*
|
|
96
|
+
* Surplus formula per set: `(actualReps - plannedReps) + (rir - plannedRir)`
|
|
96
97
|
*
|
|
97
|
-
* @param
|
|
98
|
-
* @param plannedReps The planned reps.
|
|
99
|
-
* @param rir The actual RIR (reps in reserve).
|
|
100
|
-
* @param plannedRir The planned RIR.
|
|
98
|
+
* @param sets The sets to calculate average surplus for.
|
|
101
99
|
*/
|
|
102
|
-
static
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
100
|
+
static calculateAverageSurplus(sets: WorkoutSet[]): number | null {
|
|
101
|
+
let totalSurplus = 0;
|
|
102
|
+
let completedCount = 0;
|
|
103
|
+
for (const set of sets) {
|
|
104
|
+
if (
|
|
105
|
+
set.actualReps == null ||
|
|
106
|
+
set.plannedReps == null ||
|
|
107
|
+
set.rir == null ||
|
|
108
|
+
set.plannedRir == null
|
|
109
|
+
) {
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
totalSurplus += this.calculateSetSurplus(
|
|
113
|
+
set.actualReps,
|
|
114
|
+
set.plannedReps,
|
|
115
|
+
set.rir,
|
|
116
|
+
set.plannedRir
|
|
117
|
+
);
|
|
118
|
+
completedCount++;
|
|
119
|
+
}
|
|
120
|
+
if (completedCount === 0) return null;
|
|
121
|
+
return totalSurplus / completedCount;
|
|
109
122
|
}
|
|
110
123
|
|
|
111
124
|
/**
|
|
@@ -197,4 +210,19 @@ export default class WorkoutSessionExerciseService {
|
|
|
197
210
|
sessionExercise.sorenessScore != null
|
|
198
211
|
);
|
|
199
212
|
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Calculates the surplus for a single set: how much the user exceeded or
|
|
216
|
+
* fell short of the plan. Positive means exceeded, negative means fell short.
|
|
217
|
+
*
|
|
218
|
+
* Formula: `(actualReps - plannedReps) + (rir - plannedRir)`
|
|
219
|
+
*/
|
|
220
|
+
private static calculateSetSurplus(
|
|
221
|
+
actualReps: number,
|
|
222
|
+
plannedReps: number,
|
|
223
|
+
rir: number,
|
|
224
|
+
plannedRir: number
|
|
225
|
+
): number {
|
|
226
|
+
return actualReps - plannedReps + (rir - plannedRir);
|
|
227
|
+
}
|
|
200
228
|
}
|
|
@@ -31,18 +31,19 @@ export default class WorkoutSetService {
|
|
|
31
31
|
*/
|
|
32
32
|
static isCompleted(set: WorkoutSet): boolean;
|
|
33
33
|
/**
|
|
34
|
-
* Finds the previous microcycle's
|
|
34
|
+
* Finds all sets from the previous microcycle's session exercise to use for autoregulation.
|
|
35
|
+
* Returns all sets in order so surplus can be averaged across the full exercise performance.
|
|
35
36
|
*
|
|
36
37
|
* Uses the mesocycle's fixed exercise-to-session mapping to go directly to the
|
|
37
38
|
* correct session and exercise position rather than iterating all sessions.
|
|
38
39
|
*
|
|
39
|
-
* Returns
|
|
40
|
+
* Returns an empty array if the previous microcycle doesn't exist or has no sessions
|
|
40
41
|
* (the context may not have full history). Throws if the structure is present but
|
|
41
42
|
* inconsistent with the mesocycle plan.
|
|
42
43
|
*
|
|
43
44
|
* @throws {Error} If the session/exercise structure doesn't match the plan.
|
|
44
45
|
*/
|
|
45
|
-
private static
|
|
46
|
+
private static findPreviousSets;
|
|
46
47
|
/**
|
|
47
48
|
* Generates the planned reps and weight for a specific set within a session exercise, only
|
|
48
49
|
* taking into account simple -2 reps drop per set logic, and deload modifications.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkoutSetService.d.ts","sourceRoot":"","sources":["../../../../src/services/workout/Set/WorkoutSetService.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AAGtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AACnF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sDAAsD,CAAC;AACnG,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAG7F,OAAO,KAAK,2BAA2B,MAAM,6CAA6C,CAAC;AAE3F,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC;;;;;;;;OAQG;IACH,MAAM,CAAC,8BAA8B,CAAC,EACpC,OAAO,EACP,WAAW,EACX,OAAO,EACP,eAAe,EACf,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,kBAAkB,EACnB,EAAE;QACD,OAAO,EAAE,2BAA2B,CAAC;QACrC,WAAW,EAAE,kBAAkB,CAAC;QAChC,OAAO,EAAE,cAAc,CAAC;QACxB,eAAe,EAAE,sBAAsB,CAAC;QACxC,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,kBAAkB,EAAE,OAAO,CAAC;KAC7B,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"WorkoutSetService.d.ts","sourceRoot":"","sources":["../../../../src/services/workout/Set/WorkoutSetService.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AAGtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AACnF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sDAAsD,CAAC;AACnG,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAG7F,OAAO,KAAK,2BAA2B,MAAM,6CAA6C,CAAC;AAE3F,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC;;;;;;;;OAQG;IACH,MAAM,CAAC,8BAA8B,CAAC,EACpC,OAAO,EACP,WAAW,EACX,OAAO,EACP,eAAe,EACf,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,kBAAkB,EACnB,EAAE;QACD,OAAO,EAAE,2BAA2B,CAAC;QACrC,WAAW,EAAE,kBAAkB,CAAC;QAChC,OAAO,EAAE,cAAc,CAAC;QACxB,eAAe,EAAE,sBAAsB,CAAC;QACxC,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,kBAAkB,EAAE,OAAO,CAAC;KAC7B,GAAG,IAAI;IA6DR;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO;IAQ5C;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAuE/B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,wBAAwB;CAuDxC"}
|
|
@@ -18,19 +18,20 @@ export default class WorkoutSetService {
|
|
|
18
18
|
}
|
|
19
19
|
const sets = [];
|
|
20
20
|
// For the first microcycle, use the CTO's previous performance data.
|
|
21
|
-
// For subsequent microcycles, look up
|
|
22
|
-
const
|
|
23
|
-
?
|
|
24
|
-
: this.
|
|
21
|
+
// For subsequent microcycles, look up all previous sets from the context.
|
|
22
|
+
const previousSets = microcycleIndex === 0
|
|
23
|
+
? exerciseCTO.lastSessionSets
|
|
24
|
+
: this.findPreviousSets(context, exerciseCTO._id, microcycleIndex);
|
|
25
25
|
// Calculate progressed targets for the first set.
|
|
26
|
-
// Autoregulation/forecasting handles progression from the previous
|
|
26
|
+
// Autoregulation/forecasting handles progression from the previous sets' data.
|
|
27
|
+
// Surplus is averaged across all sets for a holistic performance signal.
|
|
27
28
|
// Calibration is only used when no previous set exists (first microcycle ever).
|
|
28
29
|
const { targetReps: firstSetReps, targetWeight: firstSetWeight } = WorkoutExerciseService.calculateTargetRepsAndWeightForFirstSet({
|
|
29
30
|
exercise: exerciseCTO,
|
|
30
31
|
calibration: bestCalibration,
|
|
31
32
|
equipment: equipmentType,
|
|
32
33
|
firstMicrocycleRir: context.firstMicrocycleRir,
|
|
33
|
-
|
|
34
|
+
previousSets
|
|
34
35
|
});
|
|
35
36
|
for (let setIndex = 0; setIndex < setCount; setIndex++) {
|
|
36
37
|
const { plannedReps, plannedWeight } = this.generateSetRepsAndWeight(sets[setIndex - 1]?.plannedReps || firstSetReps, sets[setIndex - 1]?.plannedWeight || firstSetWeight, setIndex, exerciseCTO.repRange, equipmentType, {
|
|
@@ -63,24 +64,25 @@ export default class WorkoutSetService {
|
|
|
63
64
|
(set.rir != null || set.plannedRir == null));
|
|
64
65
|
}
|
|
65
66
|
/**
|
|
66
|
-
* Finds the previous microcycle's
|
|
67
|
+
* Finds all sets from the previous microcycle's session exercise to use for autoregulation.
|
|
68
|
+
* Returns all sets in order so surplus can be averaged across the full exercise performance.
|
|
67
69
|
*
|
|
68
70
|
* Uses the mesocycle's fixed exercise-to-session mapping to go directly to the
|
|
69
71
|
* correct session and exercise position rather than iterating all sessions.
|
|
70
72
|
*
|
|
71
|
-
* Returns
|
|
73
|
+
* Returns an empty array if the previous microcycle doesn't exist or has no sessions
|
|
72
74
|
* (the context may not have full history). Throws if the structure is present but
|
|
73
75
|
* inconsistent with the mesocycle plan.
|
|
74
76
|
*
|
|
75
77
|
* @throws {Error} If the session/exercise structure doesn't match the plan.
|
|
76
78
|
*/
|
|
77
|
-
static
|
|
79
|
+
static findPreviousSets(context, exerciseId, microcycleIndex) {
|
|
78
80
|
if (microcycleIndex <= 0) {
|
|
79
|
-
return
|
|
81
|
+
return [];
|
|
80
82
|
}
|
|
81
83
|
const previousMicrocycle = context.microcyclesInOrder[microcycleIndex - 1];
|
|
82
84
|
if (!previousMicrocycle || previousMicrocycle.sessionOrder.length === 0) {
|
|
83
|
-
return
|
|
85
|
+
return [];
|
|
84
86
|
}
|
|
85
87
|
// Exercise-to-session mapping is fixed for the mesocycle — look up directly
|
|
86
88
|
const sessionIndex = context.exerciseIdToSessionIndex?.get(exerciseId);
|
|
@@ -91,7 +93,7 @@ export default class WorkoutSetService {
|
|
|
91
93
|
if (!sessionId) {
|
|
92
94
|
// The previous microcycle may have fewer sessions than the plan (e.g. pruned
|
|
93
95
|
// during early deload). Treat as missing history rather than a structural error.
|
|
94
|
-
return
|
|
96
|
+
return [];
|
|
95
97
|
}
|
|
96
98
|
const session = context.sessionMap.get(sessionId);
|
|
97
99
|
if (!session) {
|
|
@@ -114,15 +116,19 @@ export default class WorkoutSetService {
|
|
|
114
116
|
if (!sessionExercise) {
|
|
115
117
|
throw new Error(`Session exercise ${seId} not found in context`);
|
|
116
118
|
}
|
|
117
|
-
|
|
118
|
-
if (!firstSetId) {
|
|
119
|
+
if (sessionExercise.setOrder.length === 0) {
|
|
119
120
|
throw new Error(`Session exercise ${seId} for exercise ${exerciseId} has no sets`);
|
|
120
121
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
122
|
+
// Return all sets in order
|
|
123
|
+
const sets = [];
|
|
124
|
+
for (const setId of sessionExercise.setOrder) {
|
|
125
|
+
const set = context.setMap.get(setId);
|
|
126
|
+
if (!set) {
|
|
127
|
+
throw new Error(`Set ${setId} not found in context`);
|
|
128
|
+
}
|
|
129
|
+
sets.push(set);
|
|
124
130
|
}
|
|
125
|
-
return
|
|
131
|
+
return sets;
|
|
126
132
|
}
|
|
127
133
|
/**
|
|
128
134
|
* Generates the planned reps and weight for a specific set within a session exercise, only
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkoutSetService.js","sourceRoot":"","sources":["../../../../src/services/workout/Set/WorkoutSetService.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,gBAAgB,EAAmB,MAAM,0CAA0C,CAAC;AAC7F,OAAO,2BAA2B,MAAM,iDAAiD,CAAC;AAC1F,OAAO,sBAAsB,MAAM,uCAAuC,CAAC;AAG3E,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC;;;;;;;;OAQG;IACH,MAAM,CAAC,8BAA8B,CAAC,EACpC,OAAO,EACP,WAAW,EACX,OAAO,EACP,eAAe,EACf,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,kBAAkB,EAWnB;QACC,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,GAAG,WAAW,CAAC;QACvD,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,qCAAqC,WAAW,CAAC,GAAG,KAAK,WAAW,CAAC,YAAY,EAAE,CACpF,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAiB,EAAE,CAAC;QAE9B,qEAAqE;QACrE,
|
|
1
|
+
{"version":3,"file":"WorkoutSetService.js","sourceRoot":"","sources":["../../../../src/services/workout/Set/WorkoutSetService.ts"],"names":[],"mappings":"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"}
|
|
@@ -50,14 +50,15 @@ export default class WorkoutSetService {
|
|
|
50
50
|
const sets: WorkoutSet[] = [];
|
|
51
51
|
|
|
52
52
|
// For the first microcycle, use the CTO's previous performance data.
|
|
53
|
-
// For subsequent microcycles, look up
|
|
54
|
-
const
|
|
53
|
+
// For subsequent microcycles, look up all previous sets from the context.
|
|
54
|
+
const previousSets =
|
|
55
55
|
microcycleIndex === 0
|
|
56
|
-
?
|
|
57
|
-
: this.
|
|
56
|
+
? exerciseCTO.lastSessionSets
|
|
57
|
+
: this.findPreviousSets(context, exerciseCTO._id, microcycleIndex);
|
|
58
58
|
|
|
59
59
|
// Calculate progressed targets for the first set.
|
|
60
|
-
// Autoregulation/forecasting handles progression from the previous
|
|
60
|
+
// Autoregulation/forecasting handles progression from the previous sets' data.
|
|
61
|
+
// Surplus is averaged across all sets for a holistic performance signal.
|
|
61
62
|
// Calibration is only used when no previous set exists (first microcycle ever).
|
|
62
63
|
const { targetReps: firstSetReps, targetWeight: firstSetWeight } =
|
|
63
64
|
WorkoutExerciseService.calculateTargetRepsAndWeightForFirstSet({
|
|
@@ -65,7 +66,7 @@ export default class WorkoutSetService {
|
|
|
65
66
|
calibration: bestCalibration,
|
|
66
67
|
equipment: equipmentType,
|
|
67
68
|
firstMicrocycleRir: context.firstMicrocycleRir,
|
|
68
|
-
|
|
69
|
+
previousSets
|
|
69
70
|
});
|
|
70
71
|
|
|
71
72
|
for (let setIndex = 0; setIndex < setCount; setIndex++) {
|
|
@@ -113,29 +114,30 @@ export default class WorkoutSetService {
|
|
|
113
114
|
}
|
|
114
115
|
|
|
115
116
|
/**
|
|
116
|
-
* Finds the previous microcycle's
|
|
117
|
+
* Finds all sets from the previous microcycle's session exercise to use for autoregulation.
|
|
118
|
+
* Returns all sets in order so surplus can be averaged across the full exercise performance.
|
|
117
119
|
*
|
|
118
120
|
* Uses the mesocycle's fixed exercise-to-session mapping to go directly to the
|
|
119
121
|
* correct session and exercise position rather than iterating all sessions.
|
|
120
122
|
*
|
|
121
|
-
* Returns
|
|
123
|
+
* Returns an empty array if the previous microcycle doesn't exist or has no sessions
|
|
122
124
|
* (the context may not have full history). Throws if the structure is present but
|
|
123
125
|
* inconsistent with the mesocycle plan.
|
|
124
126
|
*
|
|
125
127
|
* @throws {Error} If the session/exercise structure doesn't match the plan.
|
|
126
128
|
*/
|
|
127
|
-
private static
|
|
129
|
+
private static findPreviousSets(
|
|
128
130
|
context: WorkoutMesocyclePlanContext,
|
|
129
131
|
exerciseId: UUID,
|
|
130
132
|
microcycleIndex: number
|
|
131
|
-
): WorkoutSet
|
|
133
|
+
): WorkoutSet[] {
|
|
132
134
|
if (microcycleIndex <= 0) {
|
|
133
|
-
return
|
|
135
|
+
return [];
|
|
134
136
|
}
|
|
135
137
|
|
|
136
138
|
const previousMicrocycle = context.microcyclesInOrder[microcycleIndex - 1];
|
|
137
139
|
if (!previousMicrocycle || previousMicrocycle.sessionOrder.length === 0) {
|
|
138
|
-
return
|
|
140
|
+
return [];
|
|
139
141
|
}
|
|
140
142
|
|
|
141
143
|
// Exercise-to-session mapping is fixed for the mesocycle — look up directly
|
|
@@ -148,7 +150,7 @@ export default class WorkoutSetService {
|
|
|
148
150
|
if (!sessionId) {
|
|
149
151
|
// The previous microcycle may have fewer sessions than the plan (e.g. pruned
|
|
150
152
|
// during early deload). Treat as missing history rather than a structural error.
|
|
151
|
-
return
|
|
153
|
+
return [];
|
|
152
154
|
}
|
|
153
155
|
|
|
154
156
|
const session = context.sessionMap.get(sessionId);
|
|
@@ -179,16 +181,20 @@ export default class WorkoutSetService {
|
|
|
179
181
|
throw new Error(`Session exercise ${seId} not found in context`);
|
|
180
182
|
}
|
|
181
183
|
|
|
182
|
-
|
|
183
|
-
if (!firstSetId) {
|
|
184
|
+
if (sessionExercise.setOrder.length === 0) {
|
|
184
185
|
throw new Error(`Session exercise ${seId} for exercise ${exerciseId} has no sets`);
|
|
185
186
|
}
|
|
186
187
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
188
|
+
// Return all sets in order
|
|
189
|
+
const sets: WorkoutSet[] = [];
|
|
190
|
+
for (const setId of sessionExercise.setOrder) {
|
|
191
|
+
const set = context.setMap.get(setId);
|
|
192
|
+
if (!set) {
|
|
193
|
+
throw new Error(`Set ${setId} not found in context`);
|
|
194
|
+
}
|
|
195
|
+
sets.push(set);
|
|
190
196
|
}
|
|
191
|
-
return
|
|
197
|
+
return sets;
|
|
192
198
|
}
|
|
193
199
|
|
|
194
200
|
/**
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@aneuhold/core-ts-db-lib",
|
|
3
3
|
"author": "Anton G. Neuhold Jr.",
|
|
4
4
|
"license": "MIT",
|
|
5
|
-
"version": "
|
|
5
|
+
"version": "5.0.0",
|
|
6
6
|
"description": "A core database library used for personal projects",
|
|
7
7
|
"packageManager": "pnpm@10.25.0",
|
|
8
8
|
"type": "module",
|
|
@@ -72,12 +72,12 @@
|
|
|
72
72
|
"Node.js"
|
|
73
73
|
],
|
|
74
74
|
"dependencies": {
|
|
75
|
-
"@aneuhold/core-ts-lib": "^2.4.
|
|
75
|
+
"@aneuhold/core-ts-lib": "^2.4.2",
|
|
76
76
|
"uuid": "^13.0.0",
|
|
77
77
|
"zod": "^4.1.13"
|
|
78
78
|
},
|
|
79
79
|
"devDependencies": {
|
|
80
|
-
"@aneuhold/local-npm-registry": "^0.2.
|
|
80
|
+
"@aneuhold/local-npm-registry": "^0.2.29",
|
|
81
81
|
"@aneuhold/main-scripts": "^2.8.3",
|
|
82
82
|
"@types/node": "^25.0.2",
|
|
83
83
|
"eslint": "^9.39.2",
|
|
@@ -88,4 +88,4 @@
|
|
|
88
88
|
"typescript": "^5.9.3",
|
|
89
89
|
"vitest": "^4.0.15"
|
|
90
90
|
}
|
|
91
|
-
}
|
|
91
|
+
}
|