JSON Reference
Technická dokumentace formátu CustomTemplate pro IronPen. Pro AI generování, pokročilé uživatele a vývojáře.
Úvod
Custom šablona v IronPen je JSON dokument popisující kompletní tréninkový program — cviky, série, váhy, rozvrh a progresi. Aplikace z něj generuje konkrétní tréninky na základě uživatelových 1RM maxim.
Tento dokument popisuje každé pole, validační pravidla a obsahuje kompletní příklady. JSON můžete vytvořit ručně, nechat vygenerovat AI, nebo exportovat z editoru v aplikaci.
.json soubor a použijte 📁 Import ze souboru.Rychlý start
Minimální funkční šablona — 1 den, 1 cvik, 1 série:
{
"version": 1,
"meta": {
"id": "muj-prvni-program",
"nameCs": "Můj první program",
"nameEn": "My First Program",
"icon": "💪",
"tags": ["beginner", "strength"]
},
"config": {
"daysPerWeek": [3],
"weeksPerCycle": 4,
"maxCycles": 4,
"trainingMaxPercent": 0.9,
"requiredInputs": [{
"key": "bench1RM",
"labelCs": "Bench Press 1RM",
"labelEn": "Bench Press 1RM",
"type": "WEIGHT_INPUT",
"defaultValue": 60.0,
"linkedExerciseId": "bench-press",
"suffix": "kg"
}]
},
"schedule": {
"type": "WEEKLY_FIXED",
"fixedDays": [{
"dayIndex": 0,
"labelCs": "Trénink",
"labelEn": "Workout",
"exercises": [{
"exerciseId": "bench-press",
"exerciseName": "Bench Press",
"orderIndex": 0,
"exerciseType": "MAIN",
"sets": [{
"reps": "5",
"setType": "MAIN",
"weightSource": {
"type": "PERCENT_TM",
"value": 0.85,
"linkedExerciseId": "bench-press"
},
"copies": 5
}]
}]
}]
},
"progressionRules": []
}
Prompt pro AI
Zkopírujte celou tuto stránku (nebo její URL) do kontextu AI a přidejte svůj požadavek. Příklad promptu:
Vytvoř IronPen custom šablonu (JSON) pro tento program:
- 4 dny/týden (Upper/Lower split)
- 6 týdnů v cyklu
- Hlavní cviky: Squat, Bench, Deadlift, OHP
- Procenta z Training Max (90% z 1RM)
- Wendler-style progrese: +2.5 kg upper, +5 kg lower per cyklus
- Warmup série + 3 pracovní série + BBB 5×10
Použij formát popsaný v JSON Reference dokumentu.
Výsledek musí být validní JSON importovatelný do IronPen.
Kořenový objekt — CustomTemplate
| Pole | Typ | Popis |
|---|---|---|
| version | Int | Schema verze. Vždy 1. |
| meta | Object | Metadata šablony (název, ikona, tagy). |
| config | Object | Generační konfigurace (dny/týden, cykly, TM%). |
| schedule | Object | Struktura rozvrhu (1 z 5 typů). |
| progressionRules | Array | Pravidla automatické progrese. Prázdné pole = žádná progrese. |
meta — TemplateMeta
| Pole | Typ | Popis |
|---|---|---|
| id | String | Unikátní ID. Formát: username_slug nebo libovolný. Bez mezer a speciálních znaků. |
| nameCs | String | Název česky. Alespoň jedno z nameCs/nameEn musí být neprázdné. |
| nameEn | String | Název anglicky. Pokud prázdné, použije se nameCs. |
| descriptionCs | String | Popis česky. |
| descriptionEn | String | Popis anglicky. |
| icon | String | Emoji ikona. Default: 💪 |
| tags | Array<String> | Kategorie: beginner, intermediate, advanced, strength, hypertrophy, endurance |
| createdAt | Long | Timestamp vytvoření (ms). Auto-generované při importu. |
| updatedAt | Long | Timestamp poslední úpravy (ms). |
config — TemplateGenerationConfig
| Pole | Typ | Popis |
|---|---|---|
| daysPerWeek | Array<Int> | Podporované varianty dnů. Např. [3, 4] = šablona funguje pro 3 i 4 dny/týden. |
| weeksPerCycle | Int | Počet týdnů v cyklu. Default: 4. Rozsah: 1–52. |
| maxCycles | Int | Maximální počet cyklů. Default: 6. |
| trainingMaxPercent | Float | TM = 1RM × toto číslo. Default: 0.9 (90%). Rozsah: 0.5–1.0. |
| weightIncrement | Float | Zaokrouhlení vah. Default: 2.5 kg. |
| supportsMultipleCycles | Bool | Povolit více cyklů. Default: true. |
| requiredInputs | Array | Vstupy požadované od uživatele při generování. Viz detail. |
| deloadConfig | Object | Konfigurace deload týdne. Viz detail. |
| weeklyProgression | Object | Intra-cycle progrese vah. Viz detail. |
requiredInputs — RequiredInput
Definují jaké hodnoty uživatel zadává při generování programu (1RM, KB váha apod.).
| Pole | Typ | Popis |
|---|---|---|
| key | String | Unikátní klíč. Bez mezer. Např. bench1RM, kbWeight. |
| labelCs | String | Popisek česky zobrazený uživateli. |
| labelEn | String | Popisek anglicky. |
| type | Enum | WEIGHT_INPUT = volný číselný vstup. WEIGHT_CHOICES = výběr z předdefinovaných hodnot. |
| defaultValue | Float | Výchozí hodnota. |
| choices | Array<Float> | Jen pro WEIGHT_CHOICES. Např. [8, 12, 16, 20, 24, 32] pro KB. |
| linkedExerciseId | String | ID cviku pro auto-fill z uživatelových maxim. Např. "bench-press". |
| suffix | String | Jednotka. Default: "kg". |
Příklady
// 1RM vstup propojený s cvikem { "key": "squat1RM", "labelCs": "Dřep 1RM", "labelEn": "Squat 1RM", "type": "WEIGHT_INPUT", "defaultValue": 80.0, "linkedExerciseId": "back-squat", "suffix": "kg" } // KB výběr bez propojení s cvikem { "key": "tguWeight", "labelCs": "TGU kettlebell", "labelEn": "TGU kettlebell", "type": "WEIGHT_CHOICES", "defaultValue": 16.0, "choices": [4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48], "suffix": "kg" }
deloadConfig — DeloadConfig
Volitelné. Definuje automatický deload týden v rámci cyklu.
| Pole | Typ | Popis |
|---|---|---|
| deloadWeek | Int | Číslo deload týdne (1-based). 0 = žádný deload. |
| deloadMultiplier | Float | Násobitel vah. 0.6 = 60% normální váhy. Default: 0.6. |
| assistanceSetReduction | Int | O kolik sérií snížit asistenční cviky. Default: 0. |
{ "deloadWeek": 4, "deloadMultiplier": 0.6, "assistanceSetReduction": 1 }
weeklyProgression — WeeklyWeightProgression
Volitelné. Intra-cycle progrese — váhy rostou v rámci cyklu (ne jen mezi cykly).
| Pole | Typ | Popis |
|---|---|---|
| type | Enum | NONE | LINEAR_PER_WEEK | LINEAR_PER_N_WEEKS |
| incrementPerInterval | Float | Přídavek váhy per interval (kg). Default: 2.5. |
| intervalWeeks | Int | Interval v týdnech (jen pro LINEAR_PER_N_WEEKS). Default: 2. |
// +2.5 kg každé 2 týdny { "type": "LINEAR_PER_N_WEEKS", "incrementPerInterval": 2.5, "intervalWeeks": 2 }
ExerciseDefinition
| Pole | Typ | Popis |
|---|---|---|
| exerciseId | String | ID cviku z IronPen databáze. Viz seznam. |
| exerciseName | String | Název pro offline zobrazení. Pokud prázdný, doplní se z DB. |
| orderIndex | Int | Pořadí cviku v dnu (0-based). |
| exerciseType | Enum | MAIN | ASSISTANCE |
| supersetGroupId | Int? | Číslo superset skupiny. Cviky se stejným číslem tvoří superset. null = žádný superset. |
| isUnilateral | Bool | Jednostranný cvik (repy = per strana, tonnage ×2). Default: false. |
| emomEnabled | Bool | EMOM režim. Default: false. |
| emomIntervalSeconds | Int | EMOM interval. Default: 60. |
| sets | Array | Seznam definic sérií. Viz SetDefinition. |
| wavePattern | Object? | Wave progrese pro tento cvik. Viz detail. |
| deloadReps | String? | Alternativní repy pro deload týden. Např. "5" místo "max". |
| deloadIsAmrap | Bool? | AMRAP override pro deload. Např. false pro pull-upy na deload. |
SetDefinition
| Pole | Typ | Popis |
|---|---|---|
| reps | String | Počet opakování. Formáty: "5", "5+", "1+1", "8-12", "max". |
| setType | String | MAIN | WARMUP | FSL. Default: "MAIN". |
| weightSource | Object | Odkud se bere váha. Viz WeightSource. |
| isAmrap | Bool | AMRAP série. Default: false. |
| copies | Int | Kolikrát opakovat tuto sérii. Default: 1. Rozsah: 1–20. |
copies je shorthand. {"reps": "5", "copies": 5} je ekvivalentní pěti samostatným sériím s repy "5". Výhodné pro 5×5, 3×10 atd.WeightSourceDefinition
| Pole | Typ | Popis |
|---|---|---|
| type | Enum | Typ zdroje váhy. Viz tabulka níže. |
| value | Float | Hodnota. Pro PERCENT_TM/1RM: procento (0.85 = 85%). Pro FIXED: váha v kg. |
| key | String? | Jen pro CUSTOM_INPUT: klíč z requiredInputs. |
| linkedExerciseId | String? | Jen pro PERCENT_TM/1RM: exerciseId pro lookup 1RM. |
| fromIntensity | String? | Jen pro DERIVED: "HEAVY", "MEDIUM", "LIGHT". |
| multiplier | Float | Násobitel. Default: 1.0. |
WeightSourceType enum
| Typ | Popis | Povinná pole |
|---|---|---|
PERCENT_TM | % z Training Max (1RM × trainingMaxPercent) | value, linkedExerciseId |
PERCENT_1RM | % přímo z 1RM | value, linkedExerciseId |
PERCENT_TOP_SET | % z top setu (ramp sets) | value |
FIXED | Pevná váha v kg | value |
CUSTOM_INPUT | Z uživatelského vstupu | key |
DERIVED | Odvozená z jiného dne (HLM) | fromIntensity, multiplier |
BODYWEIGHT | Vlastní váha | žádná |
Příklady
// 85% z Training Max pro bench press { "type": "PERCENT_TM", "value": 0.85, "linkedExerciseId": "bench-press" } // Fixní 24 kg { "type": "FIXED", "value": 24.0 } // Bodyweight (shyby, kliky) { "type": "BODYWEIGHT" } // Z uživatelského vstupu "kbWeight" { "type": "CUSTOM_INPUT", "key": "kbWeight" }
WavePatternDefinition
Volitelné na ExerciseDefinition. Postupné zavádění nové váhy přes N týdnů.
| Pole | Typ | Popis |
|---|---|---|
| startWeightKey | String | Klíč z requiredInputs pro startovní váhu. |
| targetWeightKey | String | Klíč z requiredInputs pro cílovou váhu. |
| spreadType | Enum | CENTER_OUT | LEFT_TO_RIGHT | RIGHT_TO_LEFT |
| transitionWeeks | Int | Počet týdnů přechodu. Default: 6. |
// TGU: 5 sérií, z 16 kg na 20 kg, od středu ven, za 6 týdnů { "startWeightKey": "tguStartWeight", "targetWeightKey": "tguTargetWeight", "spreadType": "CENTER_OUT", "transitionWeeks": 6 }
WEEKLY_FIXED
Každý týden stejné dny. Nejjednodušší typ.
"schedule": { "type": "WEEKLY_FIXED", "fixedDays": [ { "dayIndex": 0, "labelCs": "Push", "labelEn": "Push", "exercises": [/* ... */] }, { "dayIndex": 1, "labelCs": "Pull", "labelEn": "Pull", "exercises": [/* ... */] } ] }
ALTERNATING
Střídání variant. Pattern definuje pořadí.
"schedule": { "type": "ALTERNATING", "alternatingPattern": { "pattern": ["A", "B"], "templates": { "A": { "dayIndex": 0, "labelCs": "Trénink A", "exercises": [/* ... */] }, "B": { "dayIndex": 1, "labelCs": "Trénink B", "exercises": [/* ... */] } } } }
["B", "C", "A"] = pořadí B→C→A→B→C→A... Vhodné když chcete těžký den před nejdelší pauzou.WEEKLY_VARYING
Každý týden jiný. Pro periodizované programy (Wendler, TB Operator).
"schedule": { "type": "WEEKLY_VARYING", "varyingWeeks": [ { "weekIndex": 0, "labelCs": "Týden 1 (3×5)", "labelEn": "Week 1 (3×5)", "isDeload": false, "deloadMultiplier": 1.0, "days": [ { "dayIndex": 0, "labelCs": "OHP", "exercises": [/* 65/75/85% */] }, { "dayIndex": 1, "labelCs": "Deadlift", "exercises": [/* ... */] } ] }, { "weekIndex": 3, "labelCs": "Deload", "isDeload": true, "deloadMultiplier": 0.6, "days": [/* ... */] } ] }
HLM
Heavy/Medium/Light. Definujete těžký den, střední a lehký se odvodí automaticky nebo ručně.
"schedule": { "type": "HLM", "hlmDefinition": { "intensityPattern": ["HEAVY", "LIGHT", "MEDIUM"], "heavyDay": { "dayIndex": 0, "labelCs": "Těžký", "exercises": [/* plné váhy */] }, "mediumDayConfig": { "intensityMultiplier": 0.85, // váhy = 85% heavy "volumeMultiplier": 0.75, // série = 75% heavy (4 místo 5) "useCustomDay": false }, "lightDayConfig": { "intensityMultiplier": 0.70, "volumeMultiplier": 0.50, "useCustomDay": false }, "customMediumDay": null, // nebo DayDefinition pokud useCustomDay=true "customLightDay": null } }
LADDER_PROGRESSION
Žebříkový systém s týdenní progresí počtu příček a žebříků.
"schedule": { "type": "LADDER_PROGRESSION", "ladderDefinition": { "exercises": [ { "exerciseId": "kb-clean-press", "exerciseName": "KB Clean & Press", "useLadders": true, "weightSource": { "type": "CUSTOM_INPUT", "key": "kbWeight" } }, { "exerciseId": "pull-ups", "useLadders": true, "mirrorLaddersOf": "kb-clean-press", "weightSource": { "type": "BODYWEIGHT" } }, { "exerciseId": "kb-swing", "useLadders": false, "fixedSets": [{ "reps": "10", "copies": 10, "weightSource": { "type": "CUSTOM_INPUT", "key": "kbWeight" } }], "fixedSetsMatchLadderCount": false, "weightSource": { "type": "CUSTOM_INPUT", "key": "kbWeight" } } ], "weeklyProgression": [ { "weekIndex": 0, "maxRung": 3, "ladderCount": 3 }, { "weekIndex": 1, "maxRung": 4, "ladderCount": 4 }, { "weekIndex": 2, "maxRung": 5, "ladderCount": 5 }, { "weekIndex": 3, "maxRung": 5, "ladderCount": 5 } ], "dayIntensity": ["HEAVY", "LIGHT", "MEDIUM"], "heavyMediumLightRungOffset": { "medium": -1, "light": -2 } } }
progressionRules — ProgressionRuleDefinition
Pole na kořenovém objektu. Array pravidel pro automatickou progresi vah.
| Pole | Typ | Popis |
|---|---|---|
| exerciseScope | Enum | ALL_MAIN = všechny hlavní cviky. SPECIFIC = jen vybrané (viz exerciseIds). |
| exerciseIds | Array<String> | Jen pro SPECIFIC: seznam exerciseId. |
| evaluationType | Enum | PER_WORKOUT = po každém tréninku. PER_CYCLE = po dokončení cyklu. |
| successCondition | Object | {"type": "ALL_MAIN_SETS_COMPLETED", "value": 0} |
| onSuccess | Object | Akce při splnění. {"type": "INCREMENT_WEIGHT", "value": 2.5} |
| onFailure | Object | Akce při nesplnění. {"type": "REPEAT_WEIGHT", "value": 0} |
| onRepeatedFailure | Object? | Akce po N neúspěších. {"failCount": 3, "action": {"type": "DELOAD_PERCENT", "value": 10}} |
// StrongLifts: +2.5 kg per workout, deload po 3 failech { "exerciseScope": "SPECIFIC", "exerciseIds": ["bench-press", "overhead-press", "barbell-rows"], "evaluationType": "PER_WORKOUT", "successCondition": { "type": "ALL_MAIN_SETS_COMPLETED", "value": 0 }, "onSuccess": { "type": "INCREMENT_WEIGHT", "value": 2.5 }, "onFailure": { "type": "REPEAT_WEIGHT", "value": 0 }, "onRepeatedFailure": { "failCount": 3, "action": { "type": "DELOAD_PERCENT", "value": 10 } } }
ActionType enum
| Typ | Popis | value |
|---|---|---|
NO_CHANGE | Nic nedělat | ignorováno |
INCREMENT_WEIGHT | Přidat fixní váhu (kg) | kg přídavek (2.5, 5.0) |
REPEAT_WEIGHT | Opakovat stejnou váhu | ignorováno |
DELOAD_PERCENT | Snížit váhu o % | procento snížení (10 = -10%) |
INCREMENT_TM | Zvýšit Training Max (per cyklus) | kg přídavek na TM |
GENERATE_NEXT_CYCLE | Vygenerovat další cyklus | ignorováno |
SuccessCondition types
| Typ | Popis |
|---|---|
ALL_MAIN_SETS_COMPLETED | Všechny MAIN série dokončeny |
ALL_REPS_HIT | Všechny plánované repy splněny |
AMRAP_MINIMUM | AMRAP série ≥ value repů |
Příklad: StrongLifts 5×5
Kompletní šablona. ALTERNATING A/B, per-workout progrese.
{
"version": 1,
"meta": {
"id": "stronglifts-5x5",
"nameCs": "StrongLifts 5×5", "nameEn": "StrongLifts 5×5",
"descriptionCs": "Začátečnický program 3× týdně. Střídání A/B.",
"icon": "🏋️", "tags": ["beginner", "strength"]
},
"config": {
"daysPerWeek": [3], "weeksPerCycle": 4, "maxCycles": 6,
"trainingMaxPercent": 1.0,
"requiredInputs": [
{ "key": "squat1RM", "labelCs": "Dřep 1RM", "labelEn": "Squat 1RM",
"type": "WEIGHT_INPUT", "defaultValue": 60, "linkedExerciseId": "back-squat" },
{ "key": "bench1RM", "labelCs": "Bench 1RM", "labelEn": "Bench 1RM",
"type": "WEIGHT_INPUT", "defaultValue": 40, "linkedExerciseId": "bench-press" },
{ "key": "row1RM", "labelCs": "Row 1RM", "labelEn": "Row 1RM",
"type": "WEIGHT_INPUT", "defaultValue": 40, "linkedExerciseId": "barbell-rows" },
{ "key": "ohp1RM", "labelCs": "OHP 1RM", "labelEn": "OHP 1RM",
"type": "WEIGHT_INPUT", "defaultValue": 30, "linkedExerciseId": "overhead-press" },
{ "key": "dl1RM", "labelCs": "Deadlift 1RM", "labelEn": "Deadlift 1RM",
"type": "WEIGHT_INPUT", "defaultValue": 80, "linkedExerciseId": "deadlift" }
]
},
"schedule": {
"type": "ALTERNATING",
"alternatingPattern": {
"pattern": ["A", "B"],
"templates": {
"A": {
"dayIndex": 0, "labelCs": "Trénink A", "labelEn": "Workout A",
"exercises": [
{ "exerciseId": "back-squat", "orderIndex": 0, "exerciseType": "MAIN",
"sets": [{ "reps": "5", "weightSource": { "type": "PERCENT_1RM", "value": 0.80, "linkedExerciseId": "back-squat" }, "copies": 5 }] },
{ "exerciseId": "bench-press", "orderIndex": 1, "exerciseType": "MAIN",
"sets": [{ "reps": "5", "weightSource": { "type": "PERCENT_1RM", "value": 0.80, "linkedExerciseId": "bench-press" }, "copies": 5 }] },
{ "exerciseId": "barbell-rows", "orderIndex": 2, "exerciseType": "MAIN",
"sets": [{ "reps": "5", "weightSource": { "type": "PERCENT_1RM", "value": 0.80, "linkedExerciseId": "barbell-rows" }, "copies": 5 }] }
]
},
"B": {
"dayIndex": 1, "labelCs": "Trénink B", "labelEn": "Workout B",
"exercises": [
{ "exerciseId": "back-squat", "orderIndex": 0, "exerciseType": "MAIN",
"sets": [{ "reps": "5", "weightSource": { "type": "PERCENT_1RM", "value": 0.80, "linkedExerciseId": "back-squat" }, "copies": 5 }] },
{ "exerciseId": "overhead-press", "orderIndex": 1, "exerciseType": "MAIN",
"sets": [{ "reps": "5", "weightSource": { "type": "PERCENT_1RM", "value": 0.80, "linkedExerciseId": "overhead-press" }, "copies": 5 }] },
{ "exerciseId": "deadlift", "orderIndex": 2, "exerciseType": "MAIN",
"sets": [{ "reps": "5", "weightSource": { "type": "PERCENT_1RM", "value": 0.85, "linkedExerciseId": "deadlift" }, "copies": 1 }] }
]
}
}
}
},
"progressionRules": [
{ "exerciseScope": "SPECIFIC",
"exerciseIds": ["back-squat", "bench-press", "barbell-rows", "overhead-press"],
"evaluationType": "PER_WORKOUT",
"successCondition": { "type": "ALL_MAIN_SETS_COMPLETED" },
"onSuccess": { "type": "INCREMENT_WEIGHT", "value": 2.5 },
"onFailure": { "type": "REPEAT_WEIGHT" },
"onRepeatedFailure": { "failCount": 3, "action": { "type": "DELOAD_PERCENT", "value": 10 } } },
{ "exerciseScope": "SPECIFIC",
"exerciseIds": ["deadlift"],
"evaluationType": "PER_WORKOUT",
"successCondition": { "type": "ALL_MAIN_SETS_COMPLETED" },
"onSuccess": { "type": "INCREMENT_WEIGHT", "value": 5.0 },
"onFailure": { "type": "REPEAT_WEIGHT" },
"onRepeatedFailure": { "failCount": 3, "action": { "type": "DELOAD_PERCENT", "value": 10 } } }
]
}
Příklad: Wendler 5/3/1 (zkrácený)
WEEKLY_VARYING, 4 týdny, jen OHP den pro ukázku. Ostatní dny mají stejnou strukturu s jinými cviky.
Příklad: Texas Method (zkrácený)
Modelováno jako WEEKLY_VARYING (2 unikátní týdny × 3 dny). Lichý týden má Bench na Volume, sudý OHP.
Seznam exerciseId
Kompletní seznam 163 exercise ID podporovaných v IronPen. Použijte přesný string v poli exerciseId.
Hlavní compound cviky
| ID | Název EN | Název CS |
|---|---|---|
back-squat | Back Squat | Dřep s činkou |
bench-press | Bench Press | Bench press |
deadlift | Deadlift | Mrtvý tah |
overhead-press | Overhead Press | Tlak nad hlavu |
power-clean | Power Clean | Power Clean |
front-squat | Front Squat | Přední dřep |
barbell-rows | Barbell Rows | Přítahy s činkou |
hip-thrust | Hip Thrust | Hip Thrust |
sumo-deadlift | Sumo Deadlift | Sumo mrtvý tah |
romanian-deadlift | Romanian Deadlift | Rumunský mrtvý tah |
Bodyweight cviky
| ID | Název EN |
|---|---|
pull-ups | Pull-ups |
chin-ups | Chin-ups |
push-ups | Push-ups |
dips | Dips |
ring-rows | Ring Rows |
inverted-rows | Inverted Rows |
plank | Plank |
leg-raises | Leg Raises |
Kettlebell cviky
| ID | Název EN |
|---|---|
kb-swing | KB Swing |
kb-clean-press | KB Clean & Press |
tgu | Turkish Get-Up |
kb-snatch | KB Snatch |
goblet-squat | Goblet Squat |
kb-front-squat | KB Front Squat |
exercises.json exportovatelném z aplikace, nebo v databázi cviků v sekci „Seznam cviků".Validační pravidla
Aplikace validuje JSON při importu. Nejčastější chyby:
| Pravidlo | Chybová hláška |
|---|---|
| Alespoň jedno z nameCs/nameEn neprázdné | Template name is required |
| meta.id neprázdné, bez mezer | Template ID is required |
| daysPerWeek: alespoň 1 hodnota, 1-7 | daysPerWeek must be 1-7 |
| weeksPerCycle: 1-52 | weeksPerCycle must be 1-52 |
| trainingMaxPercent: 0.5-1.0 | trainingMaxPercent must be 0.5-1.0 |
| Každý cvik musí mít alespoň 1 sérii | Exercise has no sets |
| Max 30 sérií per cvik | Exercise has >30 sets |
| Max 15 cviků per den | Day has >15 exercises |
| PERCENT_TM/1RM: value 0.05-1.5 | Weight percentage out of range |
| CUSTOM_INPUT: key existuje v requiredInputs | CUSTOM_INPUT key not in requiredInputs |
| copies: 1-20 | Set copies must be 1-20 |
| Schedule type odpovídá vyplněným polím | WEEKLY_FIXED requires fixedDays |