Packages

Reference Elixir validator for WPL (Wellness Plan Language) — JSON Schema + semantic invariants

Current section

Files

Jump to
wpl_validator priv conformance valid cardio-zone-model.json
Raw

priv/conformance/valid/cardio-zone-model.json

{
"$schema": "https://wpl.dev/schemas/wpl/v1.schema.json",
"version": "1.6.0",
"plan": {
"id": "plan_polarized_threshold",
"name": "Polarized Endurance Week",
"description": "Three-zone Seiler distribution: easy run (Z1), threshold (Z2), VO2max intervals (Z3). Plan-level athlete_thresholds let consumers convert zones to absolute HR/power.",
"type": "workout",
"visibility": "template",
"metadata": {
"tags": [
"polarized",
"endurance",
"running"
],
"difficulty": "advanced",
"estimated_duration_days": 7,
"language": "en"
},
"goals": [
{
"id": "goal_vo2",
"type": "primary",
"category": "endurance",
"name": "Improve VO2max and threshold"
}
],
"athlete_thresholds": {
"hr_max_bpm": 188,
"lthr_bpm": 168,
"resting_hr_bpm": 48,
"ftp_watts": 285,
"vo2max_ml_kg_min": 58,
"critical_pace_seconds_per_km": 215,
"body_weight_kg": 72
},
"phases": [
{
"id": "phase_1",
"name": "Polarized week",
"order": 1,
"type": "build",
"duration": {
"value": 1,
"unit": "weeks"
},
"weeks": [
{
"id": "wk_1",
"name": "Week 1",
"order": 1,
"days": [
{
"id": "d_easy",
"day_of_week": 1,
"name": "Easy run",
"type": "training",
"blocks": [
{
"id": "main",
"type": "main",
"order": 1,
"activities": [
{
"id": "run_easy",
"type": "cardio",
"name": "Easy aerobic",
"modality": "running",
"prescription": {
"type": "continuous",
"duration": {
"value": 60,
"unit": "minutes"
},
"intensity": {
"type": "heart_rate_zone",
"zone_model": "hr_3_zone_seiler",
"target": {
"zone": 1
}
}
}
}
]
}
]
},
{
"id": "d_threshold",
"day_of_week": 3,
"name": "Threshold",
"type": "training",
"blocks": [
{
"id": "main",
"type": "main",
"order": 1,
"activities": [
{
"id": "run_thr",
"type": "cardio",
"name": "Threshold tempo",
"modality": "running",
"prescription": {
"type": "continuous",
"duration": {
"value": 30,
"unit": "minutes"
},
"intensity": {
"type": "heart_rate_zone",
"zone_model": "hr_3_zone_seiler",
"target": {
"zone": 2
}
}
}
}
]
}
]
},
{
"id": "d_vo2",
"day_of_week": 5,
"name": "VO2max intervals",
"type": "training",
"blocks": [
{
"id": "main",
"type": "main",
"order": 1,
"activities": [
{
"id": "run_int",
"type": "cardio",
"name": "5x4 min @ 95% LTHR",
"modality": "running",
"prescription": {
"type": "intervals",
"intensity": {
"type": "heart_rate_zone",
"zone_model": "hr_3_zone_seiler",
"target": {
"zone": 3
}
},
"intervals": {
"work": {
"duration": 240
},
"rest": {
"duration": 180
},
"repeat": 5
}
}
}
]
}
]
},
{
"id": "d_long",
"day_of_week": 7,
"name": "Long run",
"type": "training",
"blocks": [
{
"id": "main",
"type": "main",
"order": 1,
"activities": [
{
"id": "run_long",
"type": "cardio",
"name": "Long Z1",
"modality": "running",
"prescription": {
"type": "continuous",
"duration": {
"value": 90,
"unit": "minutes"
},
"intensity": {
"type": "pace",
"zone_model": "pace_critical_speed",
"target": {
"percent_of_critical": 75
}
}
}
}
]
}
]
}
]
}
]
}
]
}
}