{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://francisco-martin-performance.tom-123.chatgpt.site/routine-library.schema.json","title":"Biblioteca de plantillas de Francisco Martin","description":"Plantillas proporcionadas por Francisco Martin, con valores iniciales editables en los controles nativos. Los rangos usan su extremo inferior y explican el máximo en comments. sourcePrescription y sourceExerciseText conservan el texto exacto; sourceDocument conserva el documento original y sus correcciones. Las dosis mixtas identifican su etapa o escala sin multiplicar el volumen. Null se reserva a cantidades no especificadas o condicionadas por fallo, con motivo auditado.","oneOf":[{"$ref":"#/$defs/library"},{"$ref":"#/$defs/template"}],"$defs":{"library":{"type":"object","required":["schemaVersion","status","notice","sources","templates","additionalExercises"],"properties":{"schemaVersion":{"const":2},"status":{"const":"francisco-reference"},"notice":{"type":"string"},"sources":{"type":"array","items":{"type":"object","required":["id","title","url","scope"]}},"templates":{"type":"array","items":{"$ref":"#/$defs/template"}},"additionalExercises":{"type":"array"}}},"template":{"type":"object","required":["schemaVersion","id","code","name","discipline","experience","sport","status","review","purpose","eligibility","equipment","cycleWeeks","weeks","progression","adaptationRules","limitations","sourceIds","weeklySummary","sourceDocument","editorialCorrections","periodization","scheduling","reviewChecklist","exerciseAlternatives","displayTitle"],"properties":{"schemaVersion":{"const":2},"id":{"type":"string","pattern":"^[hfxrgme][0-9]{2}$"},"code":{"type":"string"},"name":{"type":"string"},"discipline":{"enum":["hipertrofia","fuerza","hyrox","running","functional","modelaje","especifico"]},"experience":{"enum":[null,"beginner","amateur","competitive","professional","elite"]},"sport":{"type":["string","null"]},"status":{"const":"francisco-reference"},"review":{"type":"object","required":["state","reviewedBy","authoredBy","date"],"properties":{"state":{"const":"source-provided"},"reviewedBy":{"type":"null"},"authoredBy":{"const":"Francisco Martin"},"date":{"type":"string","format":"date"}}},"purpose":{"type":"string"},"eligibility":{"type":"string"},"equipment":{"type":"array","items":{"type":"string"}},"cycleWeeks":{"enum":[1,2,4]},"weeks":{"type":"array","minItems":1,"maxItems":4,"items":{"$ref":"#/$defs/week"}},"progression":{"type":"object","required":["entry","advance","deload","stop"],"additionalProperties":{"type":"string"}},"adaptationRules":{"type":"object","required":["automatic","manual","forbidden"],"additionalProperties":{"type":"array","items":{"type":"string"}}},"limitations":{"type":"array","minItems":1,"items":{"type":"string"}},"sourceIds":{"type":"array","items":{"type":"string"}},"weeklySummary":{"type":"array"},"sourceDocument":{"type":"object","required":["filename","text"],"properties":{"filename":{"type":"string","pattern":"^[^/\\\\]+\\.txt$"},"text":{"type":"string","minLength":1},"correctedText":{"type":"string","minLength":1}}},"editorialCorrections":{"type":"array","items":{"type":"object","required":["before","after","reason"],"properties":{"before":{"type":"string","minLength":1},"after":{"type":"string"},"reason":{"type":"string","minLength":1}}}},"sourceURL":{"type":"string","format":"uri-reference"},"periodization":{"type":"string"},"scheduling":{"type":"object","required":["minimumRestDays"],"properties":{"minimumRestDays":{"type":"integer","minimum":0,"maximum":6},"constraints":{"type":"string"}}},"reviewChecklist":{"type":"array","items":{"type":"string"}},"exerciseAlternatives":{"type":"array"},"displayTitle":{"type":"string","minLength":1}}},"week":{"type":"object","required":["number","theme","sessions","restDays","totalMinutes"],"properties":{"number":{"type":"integer","minimum":1,"maximum":4},"theme":{"type":"string"},"sessions":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/session"}},"restDays":{"type":"array","uniqueItems":true,"items":{"type":"integer","minimum":0,"maximum":6}},"totalMinutes":{"type":"number","exclusiveMinimum":0}}},"session":{"type":"object","required":["id","title","day","slot","minutes","priority","intensity","instructions","groups","minimumMinutes","sourceTitle","sourceInstructions","description"],"properties":{"id":{"type":"string"},"title":{"type":"string"},"day":{"type":"integer","minimum":0,"maximum":6},"slot":{"enum":["am","midday","pm","night"]},"minutes":{"type":"number","exclusiveMinimum":0,"maximum":180},"priority":{"enum":["core","optional"]},"intensity":{"type":"string"},"instructions":{"type":"string"},"groups":{"type":"array","minItems":1,"items":{"$ref":"#/$defs/group"}},"minimumMinutes":{"type":"number","exclusiveMinimum":0,"maximum":180},"sourceTitle":{"type":"string"},"sourceInstructions":{"type":"string"},"description":{"type":"string"}}},"group":{"type":"object","required":["id","title","rounds","restSeconds","estimatedMinutes","exercises","instructions"],"properties":{"id":{"type":"string"},"title":{"type":"string"},"rounds":{"type":"integer","minimum":1},"restSeconds":{"type":["integer","null"],"minimum":0},"estimatedMinutes":{"type":"number","exclusiveMinimum":0},"exercises":{"type":"array","minItems":0,"items":{"$ref":"#/$defs/exercise"}},"instructions":{"type":"string"}}},"exercise":{"type":"object","required":["id","catalogId","name","mode","sets","restSeconds","intensity","comments","reps","durationMinutes","distanceKm","prescription","sourcePrescription","sourceExerciseText","sourceComments","sourceDose","nativeNormalization"],"properties":{"id":{"type":"string"},"catalogId":{"type":"string"},"name":{"type":"string"},"mode":{"enum":["reps","distance","time"]},"sets":{"type":["integer","null"],"minimum":1},"reps":{"type":["integer","null"],"minimum":1},"durationMinutes":{"type":["number","null"],"exclusiveMinimum":0},"distanceKm":{"type":["number","null"],"exclusiveMinimum":0},"restSeconds":{"type":["integer","null"],"minimum":0},"intensity":{"type":"string"},"comments":{"type":"string"},"prescription":{"type":"string","description":"Campo de compatibilidad vacío para las filas importadas. La prescripción original se conserva en sourcePrescription."},"sourceExerciseName":{"type":"string"},"trainHeroicName":{"type":["string","null"]},"sourcePrescription":{"type":"string","minLength":1},"sourceExerciseText":{"type":"string","minLength":1},"sourceComments":{"type":"string"},"sourceDose":{"type":"object"},"nativeNormalization":{"type":"object","required":["version","rule","scope"],"properties":{"version":{"const":1},"rule":{"type":"string"},"scope":{"type":"string"},"unresolvedReason":{"type":"string"}}},"timeUnit":{"enum":["s","min"]},"distanceUnit":{"enum":["m","km"]},"rpe":{"type":["integer","null"],"minimum":1,"maximum":10,"description":"Esfuerzo percibido de 1 a 10; opcional."}}}}}
