Fase 2 (expansion): - Francesca: +6 etapas matematicas (5-10), +7 etapas lectura (3-9), +2 ortografia - Sebastian: +8 etapas matematicas (4-11), +6 lectura, +3 historia, +3 geografia, +1 banderas - Nuevas paginas: ortografia, lectura, geografia, matematicas - ~900 ejercicios nuevos, paridad ~500 por perfil Fase 3 (bug fixes + hardening): - Fix: SessionLog auto-create en grade route - Fix: engine cache (no borrar antes de revisar) - Fix: FSRS cards actualizadas en flujo curriculum - Fix: responseMs real (no hardcodeado 3000) - Fix: options dentro de content en sebastian etapa-1 - Fix: trazo-letra consonantes crash - Security: execFileSync anti-command-injection en TTS - DB: 18 cascade deletes + indices + unique constraints - APIs debug: reset, state, seed - Docker: espeak-ng + prisma + user/group - E2E: 23 tests nuevos (curriculum-flow.spec.ts) - Code review: tailwind colors, middleware dev mode, eslint config Verificado: tsc exit 0, build exit 0, 61 E2E tests pass
132 lines
6.7 KiB
TypeScript
132 lines
6.7 KiB
TypeScript
import type { Stage } from "../types"
|
|
|
|
const lecturas = [
|
|
{
|
|
text: "La escuela de Martín abre a las 8 de la mañana. Los alumnos saludan a la maestra y se sientan en sus lugares. Empiezan con matemáticas.",
|
|
preguntas: [
|
|
{ q: "¿A qué hora abre la escuela?", op: ["A las 8", "A las 7", "A las 9"], correcta: "A las 8" },
|
|
{ q: "¿Con qué materia empiezan?", op: ["Matemáticas", "Lengua", "Plástica"], correcta: "Matemáticas" },
|
|
{ q: "¿A quién saludan los alumnos?", op: ["A la maestra", "Al director", "Al portero"], correcta: "A la maestra" },
|
|
],
|
|
emoji: "🏫",
|
|
},
|
|
{
|
|
text: "En el recreo los niños juegan al fútbol y a la mancha. Comen la merienda que trajeron de casa. Tienen 20 minutos para jugar.",
|
|
preguntas: [
|
|
{ q: "¿Cuánto dura el recreo?", op: ["20 minutos", "10 minutos", "30 minutos"], correcta: "20 minutos" },
|
|
{ q: "¿Qué comen en el recreo?", op: ["La merienda de casa", "Comida de la escuela", "Nada"], correcta: "La merienda de casa" },
|
|
{ q: "¿A qué juegan?", op: ["Al fútbol y la mancha", "A las cartas", "Videojuegos"], correcta: "Al fútbol y la mancha" },
|
|
],
|
|
emoji: "⚽",
|
|
},
|
|
{
|
|
text: "La maestra de Valeria lee un cuento cada viernes. Los niños se sientan en ronda para escuchar. Después dibujan lo que más les gustó.",
|
|
preguntas: [
|
|
{ q: "¿Cuándo lee la maestra un cuento?", op: ["Los viernes", "Los lunes", "Todos los días"], correcta: "Los viernes" },
|
|
{ q: "¿Cómo se sientan los niños?", op: ["En ronda", "En fila", "En sus pupitres"], correcta: "En ronda" },
|
|
{ q: "¿Qué hacen después de escuchar?", op: ["Dibujan lo que les gustó", "Vuelven a casa", "Juegan"], correcta: "Dibujan lo que les gustó" },
|
|
],
|
|
emoji: "📖",
|
|
},
|
|
{
|
|
text: "En la clase de Educación Física los niños corren, saltan y hacen ejercicios. Usan ropa cómoda y zapatillas. Es la clase favorita de muchos.",
|
|
preguntas: [
|
|
{ q: "¿Qué es la clase favorita de muchos?", op: ["Educación Física", "Matemáticas", "Lengua"], correcta: "Educación Física" },
|
|
{ q: "¿Qué usan los niños para Educación Física?", op: ["Ropa cómoda y zapatillas", "Uniforme", "Traje de baño"], correcta: "Ropa cómoda y zapatillas" },
|
|
{ q: "¿Qué ejercicios hacen?", op: ["Corren, saltan y hacen ejercicios", "Leen y escriben", "Cantan y bailan"], correcta: "Corren, saltan y hacen ejercicios" },
|
|
],
|
|
emoji: "🏃",
|
|
},
|
|
{
|
|
text: "Los amigos de Sofía la invitan a jugar en la plaza. Todos llevan sus juguetes. Comparten el tobogán y el subibaja.",
|
|
preguntas: [
|
|
{ q: "¿Adónde van a jugar?", op: ["A la plaza", "A la escuela", "Al cine"], correcta: "A la plaza" },
|
|
{ q: "¿Qué llevan los niños?", op: ["Juguetes", "Cuadernos", "Merienda"], correcta: "Juguetes" },
|
|
{ q: "¿A qué juegan en la plaza?", op: ["Tobogán y subibaja", "Fútbol", "Escondidas"], correcta: "Tobogán y subibaja" },
|
|
],
|
|
emoji: "🎠",
|
|
},
|
|
{
|
|
text: "Tomás y su amigo Juan hacen la tarea juntos. Se ayudan con las cuentas. Cuando terminan, juegan un rato con la tablet.",
|
|
preguntas: [
|
|
{ q: "¿En qué se ayudan Tomás y Juan?", op: ["Con las cuentas", "Con la lectura", "Con el dibujo"], correcta: "Con las cuentas" },
|
|
{ q: "¿Qué hacen cuando terminan la tarea?", op: ["Juegan con la tablet", "Ven televisión", "Salen a jugar"], correcta: "Juegan con la tablet" },
|
|
{ q: "¿Con quién hace la tarea Tomás?", op: ["Con su amigo Juan", "Solo", "Con su mamá"], correcta: "Con su amigo Juan" },
|
|
],
|
|
emoji: "📝",
|
|
},
|
|
{
|
|
text: "En el comedor escolar los niños almuerzan todos juntos. Hoy hay milanesas con puré. De postre dan manzana.",
|
|
preguntas: [
|
|
{ q: "¿Qué hay de postre?", op: ["Manzana", "Helado", "Flan"], correcta: "Manzana" },
|
|
{ q: "¿Qué hay de plato principal?", op: ["Milanesas con puré", "Pasta", "Ensalada"], correcta: "Milanesas con puré" },
|
|
{ q: "¿Con quiénes almuerzan los niños?", op: ["Todos juntos", "Cada uno solo", "Con sus maestras"], correcta: "Todos juntos" },
|
|
],
|
|
emoji: "🍎",
|
|
},
|
|
{
|
|
text: "Las reglas del salón: levantar la mano para hablar, no gritar, cuidar los libros y respetar a los compañeros.",
|
|
preguntas: [
|
|
{ q: "¿Qué hay que hacer para hablar en clase?", op: ["Levantar la mano", "Gritar", "Pararse"], correcta: "Levantar la mano" },
|
|
{ q: "¿Qué NO hay que hacer en clase?", op: ["Gritar", "Leer", "Escribir"], correcta: "Gritar" },
|
|
{ q: "¿A quién hay que respetar?", op: ["A los compañeros", "Al director", "Al portero"], correcta: "A los compañeros" },
|
|
],
|
|
emoji: "🤚",
|
|
},
|
|
{
|
|
text: "En la biblioteca de la escuela hay muchos libros. Los niños pueden llevarse un libro a casa por una semana. Después tienen que devolverlo.",
|
|
preguntas: [
|
|
{ q: "¿Por cuántos días pueden llevarse un libro?", op: ["Una semana", "Un día", "Un mes"], correcta: "Una semana" },
|
|
{ q: "¿Qué tienen que hacer después?", op: ["Devolverlo", "Comprarlo", "Renovarlo"], correcta: "Devolverlo" },
|
|
{ q: "¿Dónde queda la biblioteca?", op: ["En la escuela", "En la plaza", "En la casa"], correcta: "En la escuela" },
|
|
],
|
|
emoji: "📚",
|
|
},
|
|
{
|
|
text: "El último día de clases hay una fiesta. Los niños traen golosinas para compartir. La maestra les da un diploma.",
|
|
preguntas: [
|
|
{ q: "¿Qué reciben los niños el último día?", op: ["Un diploma", "Un juguete", "Un libro"], correcta: "Un diploma" },
|
|
{ q: "¿Qué traen los niños para compartir?", op: ["Golosinas", "Juguetes", "Libros"], correcta: "Golosinas" },
|
|
{ q: "¿Qué hay el último día de clases?", op: ["Una fiesta", "Un examen", "Una reunión"], correcta: "Una fiesta" },
|
|
],
|
|
emoji: "🎉",
|
|
},
|
|
]
|
|
|
|
const exercises: any[] = []
|
|
let idx = 0
|
|
for (const l of lecturas) {
|
|
for (const p of l.preguntas) {
|
|
exercises.push({
|
|
id: `fra6-escuela-${idx}`,
|
|
stage: 6,
|
|
skillCode: `lectura-escuela-${idx}`,
|
|
type: "lectura",
|
|
prerequisites: idx === 0 ? [`fra5-estaciones-29`] : [`fra6-escuela-${idx - 1}`],
|
|
content: {
|
|
instruction: p.q,
|
|
text: l.text,
|
|
audioText: l.text,
|
|
emoji: l.emoji,
|
|
options: p.op.map((o) => ({
|
|
label: o,
|
|
correct: o === p.correcta,
|
|
id: o.toLowerCase().slice(0, 12),
|
|
})),
|
|
},
|
|
functionalContext: "Centro de interés Decroly: la escuela y los amigos. Rutina escolar, convivencia y reglas.",
|
|
errorType: "omision-letra",
|
|
})
|
|
idx++
|
|
}
|
|
}
|
|
|
|
const stage: Stage = {
|
|
id: 6,
|
|
name: 'Centro de interés: "La escuela y los amigos"',
|
|
description: "Textos sobre la rutina escolar, convivencia y amistad (método Decroly).",
|
|
exercises,
|
|
}
|
|
|
|
export default stage
|