{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://example.local/schemas/plans.json", "title": "Plan", "type": "object", "additionalProperties": false, "required": [ "id", "template_id", "title", "discipline", "age_group", "target_group", "total_minutes", "sections", "goals", "capability_summary", "created_by", "created_at", "source", "fingerprint" ], "properties": { "id": { "type": "string" }, "template_id": { "type": ["string", "null"] }, "title": { "type": "string", "minLength": 1 }, "discipline": { "type": "string" }, "age_group": { "type": "string" }, "target_group": { "type": "string" }, "total_minutes": { "type": "integer", "minimum": 0 }, "sections": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": ["name", "items", "minutes"], "properties": { "name": { "type": "string" }, "minutes": { "type": "integer", "minimum": 0 }, "items": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": ["exercise_external_id", "duration", "why"], "properties": { "exercise_external_id": { "type": "string" }, "duration": { "type": "integer", "minimum": 0 }, "why": { "type": "string" } } } } } } }, "goals": { "type": "array", "items": { "type": "string" } }, "capability_summary": { "type": "object", "additionalProperties": { "type": "integer" } }, "novelty_against_last_n": { "type": ["number", "null"] }, "fingerprint": { "type": "string" }, "created_by": { "type": "string" }, "created_at": { "type": "string", "format": "date-time" }, "source": { "type": "string" } } }