feat: fase 2+3 — expansion masiva multi-perfil + bug fixes + hardening
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
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
import type { Stage } from "../types"
|
||||
|
||||
const lecturas = [
|
||||
{
|
||||
text: "La familia de Ana tiene 4 personas. Mamá, papá, Ana y su hermano Tomás. Viven en una casa con jardín. Ana juega con su perro en el jardín.",
|
||||
preguntas: [
|
||||
{ q: "¿Cuántas personas tiene la familia de Ana?", op: ["4", "3", "5"], correcta: "4" },
|
||||
{ q: "¿Cómo se llama el hermano de Ana?", op: ["Tomás", "Juan", "Pedro"], correcta: "Tomás" },
|
||||
{ q: "¿Con quién juega Ana en el jardín?", op: ["Con su perro", "Con su hermano", "Con su mamá"], correcta: "Con su perro" },
|
||||
],
|
||||
emoji: "👨👩👧👦",
|
||||
},
|
||||
{
|
||||
text: "El abuelo de Lucía vive en el campo. Tiene muchas gallinas y un caballo. Lucía va a visitarlo los fines de semana. Le gusta darle de comer a las gallinas.",
|
||||
preguntas: [
|
||||
{ q: "¿Cuándo visita Lucía a su abuelo?", op: ["Los fines de semana", "Los lunes", "Todos los días"], correcta: "Los fines de semana" },
|
||||
{ q: "¿Qué animales tiene el abuelo?", op: ["Gallinas y un caballo", "Vacas y ovejas", "Perros y gatos"], correcta: "Gallinas y un caballo" },
|
||||
{ q: "¿Qué le gusta hacer a Lucía?", op: ["Darle de comer a las gallinas", "Pasear al caballo", "Cocinar"], correcta: "Darle de comer a las gallinas" },
|
||||
],
|
||||
emoji: "🐴",
|
||||
},
|
||||
{
|
||||
text: "La mamá de Pedro cocina empanadas. Pedro ayuda a ponerles el repollo. Papá pone la mesa. Todos preparan la cena juntos.",
|
||||
preguntas: [
|
||||
{ q: "¿Qué cocina la mamá de Pedro?", op: ["Empanadas", "Pasta", "Ensalada"], correcta: "Empanadas" },
|
||||
{ q: "¿Con qué ayuda Pedro?", op: ["Con el repollo", "Con la mesa", "Con los platos"], correcta: "Con el repollo" },
|
||||
{ q: "¿Quién pone la mesa?", op: ["Papá", "Pedro", "Mamá"], correcta: "Papá" },
|
||||
],
|
||||
emoji: "🥟",
|
||||
},
|
||||
{
|
||||
text: "Sofía tiene dos hermanos: Mateo y Juan. Mateo tiene 8 años y Juan tiene 5. Sofía tiene 6. Juntos juegan a la pelota en el patio.",
|
||||
preguntas: [
|
||||
{ q: "¿Cuántos años tiene Mateo?", op: ["8", "5", "6"], correcta: "8" },
|
||||
{ q: "¿Cuántos hermanos tiene Sofía?", op: ["Dos", "Uno", "Tres"], correcta: "Dos" },
|
||||
{ q: "¿Dónde juegan?", op: ["En el patio", "En la calle", "En la plaza"], correcta: "En el patio" },
|
||||
],
|
||||
emoji: "⚽",
|
||||
},
|
||||
{
|
||||
text: "La familia de Martín sale de paseo. Van al río. Mamá prepara sandwiches. Papá pesca. Los niños juegan en el agua.",
|
||||
preguntas: [
|
||||
{ q: "¿Adónde van de paseo?", op: ["Al río", "Al parque", "A la plaza"], correcta: "Al río" },
|
||||
{ q: "¿Qué prepara mamá?", op: ["Sandwiches", "Galletitas", "Fruta"], correcta: "Sandwiches" },
|
||||
{ q: "¿Qué hace papá?", op: ["Pesca", "Nada", "Duerme"], correcta: "Pesca" },
|
||||
],
|
||||
emoji: "🏞️",
|
||||
},
|
||||
{
|
||||
text: "Los tíos de Valentina viven en Mar del Plata. En verano Valentina va a la playa con ellos. Hace castillos de arena y junta caracoles.",
|
||||
preguntas: [
|
||||
{ q: "¿Dónde viven los tíos de Valentina?", op: ["Mar del Plata", "Buenos Aires", "Córdoba"], correcta: "Mar del Plata" },
|
||||
{ q: "¿Qué hace Valentina en la playa?", op: ["Castillos de arena", "Anda en bicicleta", "Juega en la nieve"], correcta: "Castillos de arena" },
|
||||
{ q: "¿Qué junta Valentina?", op: ["Caracoles", "Flores", "Piedras"], correcta: "Caracoles" },
|
||||
],
|
||||
emoji: "🏖️",
|
||||
},
|
||||
{
|
||||
text: "La abuela de Tomás teje bufandas. Le regaló una bufanda roja a Tomás. Él la usa todos los días porque hace frío.",
|
||||
preguntas: [
|
||||
{ q: "¿Por qué usa Tomás la bufanda todos los días?", op: ["Porque hace frío", "Porque es roja", "Porque su abuela la tejió"], correcta: "Porque hace frío" },
|
||||
{ q: "¿Qué teje la abuela de Tomás?", op: ["Bufandas", "Medias", "Pullóveres"], correcta: "Bufandas" },
|
||||
{ q: "¿De qué color es la bufanda?", op: ["Roja", "Azul", "Verde"], correcta: "Roja" },
|
||||
],
|
||||
emoji: "🧣",
|
||||
},
|
||||
{
|
||||
text: "La familia de Julia tiene una mascota. Es un perro llamado Lulo. Lulo es marrón y muy juguetón. Julia lo pasea todas las tardes.",
|
||||
preguntas: [
|
||||
{ q: "¿Cómo se llama el perro de Julia?", op: ["Lulo", "Julia", "Marrón"], correcta: "Lulo" },
|
||||
{ q: "¿De qué color es Lulo?", op: ["Marrón", "Negro", "Blanco"], correcta: "Marrón" },
|
||||
{ q: "¿Cuándo lo pasea Julia?", op: ["Todas las tardes", "Los fines de semana", "A la mañana"], correcta: "Todas las tardes" },
|
||||
],
|
||||
emoji: "🐕",
|
||||
},
|
||||
{
|
||||
text: "Los primos de Nico vienen a cenar. Son 6 primos más Nico. La mamá prepara pasta para todos. Ponen la mesa grande.",
|
||||
preguntas: [
|
||||
{ q: "¿Cuántos niños comen en total?", op: ["7", "6", "8"], correcta: "7" },
|
||||
{ q: "¿Qué prepara la mamá?", op: ["Pasta", "Milanesas", "Pizza"], correcta: "Pasta" },
|
||||
{ q: "¿Qué mesa ponen?", op: ["La grande", "La chica", "La de la cocina"], correcta: "La grande" },
|
||||
],
|
||||
emoji: "🍝",
|
||||
},
|
||||
{
|
||||
text: "El papá de Lara le lee un cuento cada noche. El cuento favorito de Lara es sobre un dragón amigable. Lara se duerme escuchando.",
|
||||
preguntas: [
|
||||
{ q: "¿Cuál es el cuento favorito de Lara?", op: ["Sobre un dragón amigable", "Sobre una princesa", "Sobre un caballo"], correcta: "Sobre un dragón amigable" },
|
||||
{ q: "¿Cuándo le lee papá?", op: ["Cada noche", "Por la mañana", "Los domingos"], correcta: "Cada noche" },
|
||||
{ q: "¿Qué hace Lara mientras escucha?", op: ["Se duerme", "Juega", "Come"], correcta: "Se duerme" },
|
||||
],
|
||||
emoji: "🐉",
|
||||
},
|
||||
]
|
||||
|
||||
const exercises: any[] = []
|
||||
let idx = 0
|
||||
for (const l of lecturas) {
|
||||
for (const p of l.preguntas) {
|
||||
exercises.push({
|
||||
id: `fra3-familia-${idx}`,
|
||||
stage: 3,
|
||||
skillCode: `lectura-familia-${idx}`,
|
||||
type: "lectura",
|
||||
prerequisites: idx === 0 ? [] : [`fra3-familia-${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 familia. Comprensión lectora de textos sobre el núcleo familiar.",
|
||||
errorType: "omision-letra",
|
||||
})
|
||||
idx++
|
||||
}
|
||||
}
|
||||
|
||||
const stage: Stage = {
|
||||
id: 3,
|
||||
name: 'Centro de interés: "La familia"',
|
||||
description: "Textos cortos sobre la familia con preguntas de comprensión (método Decroly).",
|
||||
exercises,
|
||||
}
|
||||
|
||||
export default stage
|
||||
@@ -0,0 +1,131 @@
|
||||
import type { Stage } from "../types"
|
||||
|
||||
const lecturas = [
|
||||
{
|
||||
text: "Los perros son mamíferos. Tienen cuatro patas y pelo. Les gusta jugar y salir a pasear. Son mascotas muy cariñosas.",
|
||||
preguntas: [
|
||||
{ q: "¿Cuántas patas tienen los perros?", op: ["Cuatro", "Dos", "Seis"], correcta: "Cuatro" },
|
||||
{ q: "¿Qué les gusta hacer a los perros?", op: ["Jugar y pasear", "Nadar", "Volar"], correcta: "Jugar y pasear" },
|
||||
{ q: "¿Cómo son los perros como mascotas?", op: ["Cariñosos", "Peligrosos", "Tímidos"], correcta: "Cariñosos" },
|
||||
],
|
||||
emoji: "🐕",
|
||||
},
|
||||
{
|
||||
text: "Los gatos son ágiles y sigilosos. Tienen ojos que ven en la oscuridad. Les gusta cazar ratones y dormir al sol.",
|
||||
preguntas: [
|
||||
{ q: "¿Qué tienen los gatos en sus ojos?", op: ["Ven en la oscuridad", "Son azules", "Son grandes"], correcta: "Ven en la oscuridad" },
|
||||
{ q: "¿Qué les gusta cazar?", op: ["Ratones", "Pájaros", "Peces"], correcta: "Ratones" },
|
||||
{ q: "¿Dónde les gusta dormir?", op: ["Al sol", "En el agua", "En los árboles"], correcta: "Al sol" },
|
||||
],
|
||||
emoji: "🐱",
|
||||
},
|
||||
{
|
||||
text: "Las aves tienen alas y plumas. La mayoría puede volar. Ponen huevos y construyen nidos en los árboles.",
|
||||
preguntas: [
|
||||
{ q: "¿Qué tienen las aves para volar?", op: ["Alas y plumas", "Aletas", "Patas largas"], correcta: "Alas y plumas" },
|
||||
{ q: "¿Qué ponen las aves?", op: ["Huevos", "Leche", "Flores"], correcta: "Huevos" },
|
||||
{ q: "¿Dónde construyen sus nidos?", op: ["En los árboles", "En el agua", "En las cuevas"], correcta: "En los árboles" },
|
||||
],
|
||||
emoji: "🐦",
|
||||
},
|
||||
{
|
||||
text: "Los peces viven en el agua. Tienen escamas y aletas para nadar. Respiran por branquias. Hay peces de muchos colores.",
|
||||
preguntas: [
|
||||
{ q: "¿Cómo respiran los peces?", op: ["Por branquias", "Por pulmones", "Por la piel"], correcta: "Por branquias" },
|
||||
{ q: "¿Qué tienen los peces para nadar?", op: ["Aletas", "Patas", "Alas"], correcta: "Aletas" },
|
||||
{ q: "¿Dónde viven los peces?", op: ["En el agua", "En la tierra", "En el aire"], correcta: "En el agua" },
|
||||
],
|
||||
emoji: "🐟",
|
||||
},
|
||||
{
|
||||
text: "Las mariposas son insectos. Tienen seis patas y dos alas de colores. Salen de una oruga después de hacer un capullo.",
|
||||
preguntas: [
|
||||
{ q: "¿Cuántas patas tienen las mariposas?", op: ["Seis", "Cuatro", "Ocho"], correcta: "Seis" },
|
||||
{ q: "¿De qué sale la mariposa?", op: ["De una oruga", "De un huevo", "Del agua"], correcta: "De una oruga" },
|
||||
{ q: "¿Qué hacen antes de ser mariposa?", op: ["Un capullo", "Un nido", "Un agujero"], correcta: "Un capullo" },
|
||||
],
|
||||
emoji: "🦋",
|
||||
},
|
||||
{
|
||||
text: "Los elefantes son los animales más grandes de la tierra. Tienen trompa larga y orejas grandes. Pueden pesar hasta 6.000 kilos.",
|
||||
preguntas: [
|
||||
{ q: "¿Cuál es el animal más grande de la tierra?", op: ["El elefante", "La jirafa", "El oso"], correcta: "El elefante" },
|
||||
{ q: "¿Cuánto puede pesar un elefante?", op: ["6.000 kilos", "1.000 kilos", "10.000 kilos"], correcta: "6.000 kilos" },
|
||||
{ q: "¿Qué tienen los elefantes en la cabeza?", op: ["Orejas grandes", "Cuernos", "Melena"], correcta: "Orejas grandes" },
|
||||
],
|
||||
emoji: "🐘",
|
||||
},
|
||||
{
|
||||
text: "Los delfines son mamíferos marinos. Son muy inteligentes y juguetones. Saltan fuera del agua y se comunican con silbidos.",
|
||||
preguntas: [
|
||||
{ q: "¿Cómo se comunican los delfines?", op: ["Con silbidos", "Con ladridos", "Con rugidos"], correcta: "Con silbidos" },
|
||||
{ q: "¿Qué hacen los delfines fuera del agua?", op: ["Saltan", "Vuelan", "Caminan"], correcta: "Saltan" },
|
||||
{ q: "¿Cómo son los delfines?", op: ["Inteligentes y juguetones", "Perezosos y dormilones", "Agresivos y solitarios"], correcta: "Inteligentes y juguetones" },
|
||||
],
|
||||
emoji: "🐬",
|
||||
},
|
||||
{
|
||||
text: "Las abejas hacen miel. Viven en colmenas y trabajan en equipo. Vuelan de flor en flor recogiendo néctar.",
|
||||
preguntas: [
|
||||
{ q: "¿Dónde viven las abejas?", op: ["En colmenas", "En nidos", "En cuevas"], correcta: "En colmenas" },
|
||||
{ q: "¿Qué hacen las abejas?", op: ["Miel", "Leche", "Pan"], correcta: "Miel" },
|
||||
{ q: "¿Qué recogen de las flores?", op: ["Néctar", "Polvo", "Agua"], correcta: "Néctar" },
|
||||
],
|
||||
emoji: "🐝",
|
||||
},
|
||||
{
|
||||
text: "Los leones son felinos salvajes. Viven en África. El macho tiene una melena grande. Son conocidos como los reyes de la selva.",
|
||||
preguntas: [
|
||||
{ q: "¿Dónde viven los leones?", op: ["En África", "En Asia", "En Europa"], correcta: "En África" },
|
||||
{ q: "¿Qué tiene el león macho?", op: ["Una melena grande", "Cuernos", "Rayas"], correcta: "Una melena grande" },
|
||||
{ q: "¿Cómo son conocidos los leones?", op: ["Reyes de la selva", "Reyes del mar", "Reyes del cielo"], correcta: "Reyes de la selva" },
|
||||
],
|
||||
emoji: "🦁",
|
||||
},
|
||||
{
|
||||
text: "Los pingüinos viven en el Polo Sur. No vuelan pero nadan muy bien. Tienen plumaje negro y blanco. Cuidan sus huevos en el hielo.",
|
||||
preguntas: [
|
||||
{ q: "¿Dónde viven los pingüinos?", op: ["En el Polo Sur", "En el Polo Norte", "En la selva"], correcta: "En el Polo Sur" },
|
||||
{ q: "¿Qué hacen muy bien los pingüinos?", op: ["Nadan", "Vuelan", "Corren"], correcta: "Nadan" },
|
||||
{ q: "¿De qué color son los pingüinos?", op: ["Negro y blanco", "Marrón y blanco", "Gris y blanco"], correcta: "Negro y blanco" },
|
||||
],
|
||||
emoji: "🐧",
|
||||
},
|
||||
]
|
||||
|
||||
const exercises: any[] = []
|
||||
let idx = 0
|
||||
for (const l of lecturas) {
|
||||
for (const p of l.preguntas) {
|
||||
exercises.push({
|
||||
id: `fra4-animales-${idx}`,
|
||||
stage: 4,
|
||||
skillCode: `lectura-animales-${idx}`,
|
||||
type: "lectura",
|
||||
prerequisites: idx === 0 ? [`fra3-familia-29`] : [`fra4-animales-${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: los animales. Clasificación y características de mamíferos, aves, peces e insectos.",
|
||||
errorType: "omision-letra",
|
||||
})
|
||||
idx++
|
||||
}
|
||||
}
|
||||
|
||||
const stage: Stage = {
|
||||
id: 4,
|
||||
name: 'Centro de interés: "Los animales"',
|
||||
description: "Textos sobre animales con preguntas de comprensión (método Decroly).",
|
||||
exercises,
|
||||
}
|
||||
|
||||
export default stage
|
||||
@@ -0,0 +1,131 @@
|
||||
import type { Stage } from "../types"
|
||||
|
||||
const lecturas = [
|
||||
{
|
||||
text: "En primavera los árboles se llenan de flores. Los pájaros hacen nidos. El clima es templado y los días son más largos.",
|
||||
preguntas: [
|
||||
{ q: "¿Qué pasa con los árboles en primavera?", op: ["Se llenan de flores", "Pierden las hojas", "Se cubren de nieve"], correcta: "Se llenan de flores" },
|
||||
{ q: "¿Qué animales hacen nidos en primavera?", op: ["Los pájaros", "Los gatos", "Los perros"], correcta: "Los pájaros" },
|
||||
{ q: "¿Cómo es el clima en primavera?", op: ["Templado", "Muy frío", "Muy caluroso"], correcta: "Templado" },
|
||||
],
|
||||
emoji: "🌸",
|
||||
},
|
||||
{
|
||||
text: "En verano hace mucho calor. Los niños van a la playa o a la pileta. Comen helado para refrescarse. Los días son muy largos.",
|
||||
preguntas: [
|
||||
{ q: "¿Cómo es el clima en verano?", op: ["Hace mucho calor", "Hace frío", "Está templado"], correcta: "Hace mucho calor" },
|
||||
{ q: "¿Qué comen los niños para refrescarse?", op: ["Helado", "Sopa", "Pan"], correcta: "Helado" },
|
||||
{ q: "¿Adónde van los niños en verano?", op: ["A la playa o pileta", "A la escuela", "Al parque de nieve"], correcta: "A la playa o pileta" },
|
||||
],
|
||||
emoji: "☀️",
|
||||
},
|
||||
{
|
||||
text: "En otoño las hojas de los árboles se ponen amarillas y marrones. El viento las hace caer. Hace más fresco y empieza el colegio.",
|
||||
preguntas: [
|
||||
{ q: "¿De qué color se ponen las hojas en otoño?", op: ["Amarillas y marrones", "Verdes y azules", "Rojas y naranjas"], correcta: "Amarillas y marrones" },
|
||||
{ q: "¿Qué hace caer las hojas?", op: ["El viento", "La lluvia", "El sol"], correcta: "El viento" },
|
||||
{ q: "¿Qué empieza en otoño?", op: ["El colegio", "Las vacaciones", "La navidad"], correcta: "El colegio" },
|
||||
],
|
||||
emoji: "🍂",
|
||||
},
|
||||
{
|
||||
text: "En invierno hace mucho frío y a veces nieva. Los niños usan abrigo, bufanda y guantes. Beben chocolate caliente.",
|
||||
preguntas: [
|
||||
{ q: "¿Qué usan los niños en invierno?", op: ["Abrigo, bufanda y guantes", "Camiseta y short", "Traje de baño"], correcta: "Abrigo, bufanda y guantes" },
|
||||
{ q: "¿Qué beben los niños?", op: ["Chocolate caliente", "Jugo frío", "Agua con hielo"], correcta: "Chocolate caliente" },
|
||||
{ q: "¿Qué pasa a veces en invierno?", op: ["Nieva", "Hay sol fuerte", "Huele a flores"], correcta: "Nieva" },
|
||||
],
|
||||
emoji: "❄️",
|
||||
},
|
||||
{
|
||||
text: "La lluvia es importante para las plantas. Cuando llueve, las flores crecen. Los animales beben agua de los charcos.",
|
||||
preguntas: [
|
||||
{ q: "¿Por qué es importante la lluvia?", op: ["Para las plantas", "Para jugar", "Para dormir"], correcta: "Para las plantas" },
|
||||
{ q: "¿Qué pasa con las flores cuando llueve?", op: ["Crecen", "Se marchitan", "Se cierran"], correcta: "Crecen" },
|
||||
{ q: "¿Qué hacen los animales con los charcos?", op: ["Beben agua", "Se bañan", "Saltan"], correcta: "Beben agua" },
|
||||
],
|
||||
emoji: "🌧️",
|
||||
},
|
||||
{
|
||||
text: "Cuando el viento sopla fuerte, los árboles se mueven. Las hojas vuelan por el aire. A veces el viento tira cosas al piso.",
|
||||
preguntas: [
|
||||
{ q: "¿Qué pasa con los árboles cuando hay viento?", op: ["Se mueven", "Se caen", "Crecen más rápido"], correcta: "Se mueven" },
|
||||
{ q: "¿Qué vuelan por el aire?", op: ["Las hojas", "Las piedras", "Los autos"], correcta: "Las hojas" },
|
||||
{ q: "¿Qué puede tirar el viento?", op: ["Cosas al piso", "La pintura", "Las puertas"], correcta: "Cosas al piso" },
|
||||
],
|
||||
emoji: "💨",
|
||||
},
|
||||
{
|
||||
text: "El arcoíris aparece después de la lluvia cuando sale el sol. Tiene 7 colores: rojo, naranja, amarillo, verde, azul, índigo y violeta.",
|
||||
preguntas: [
|
||||
{ q: "¿Cuándo aparece el arcoíris?", op: ["Después de la lluvia", "En invierno", "De noche"], correcta: "Después de la lluvia" },
|
||||
{ q: "¿Cuántos colores tiene el arcoíris?", op: ["7", "5", "10"], correcta: "7" },
|
||||
{ q: "¿Qué tiene que pasar para que aparezca?", op: ["Salir el sol", "Nevar", "Hacer frío"], correcta: "Salir el sol" },
|
||||
],
|
||||
emoji: "🌈",
|
||||
},
|
||||
{
|
||||
text: "Las nubes están formadas por gotitas de agua. Cuando se juntan muchas, puede llover. Las nubes grises traen lluvia.",
|
||||
preguntas: [
|
||||
{ q: "¿De qué están hechas las nubes?", op: ["De gotitas de agua", "De algodón", "De humo"], correcta: "De gotitas de agua" },
|
||||
{ q: "¿Qué color tienen las nubes de lluvia?", op: ["Grises", "Blancas", "Negras"], correcta: "Grises" },
|
||||
{ q: "¿Qué pasa cuando se juntan muchas gotitas?", op: ["Puede llover", "Hace sol", "Sale el arcoíris"], correcta: "Puede llover" },
|
||||
],
|
||||
emoji: "☁️",
|
||||
},
|
||||
{
|
||||
text: "El sol nos da luz y calor. Las plantas necesitan sol para crecer. Sin sol no habría vida en la Tierra.",
|
||||
preguntas: [
|
||||
{ q: "¿Qué nos da el sol?", op: ["Luz y calor", "Agua y viento", "Nieve y frío"], correcta: "Luz y calor" },
|
||||
{ q: "¿Qué necesitan las plantas del sol?", op: ["Luz para crecer", "Agua para beber", "Sombra para dormir"], correcta: "Luz para crecer" },
|
||||
{ q: "¿Qué pasaría sin sol?", op: ["No habría vida", "Haría más calor", "Las plantas crecerían más"], correcta: "No habría vida" },
|
||||
],
|
||||
emoji: "🌞",
|
||||
},
|
||||
{
|
||||
text: "En las tormentas hay rayos y truenos. Primero vemos el relámpago y después escuchamos el trueno. La lluvia fuerte moja todo.",
|
||||
preguntas: [
|
||||
{ q: "¿Qué vemos primero en una tormenta?", op: ["El relámpago", "El trueno", "El viento"], correcta: "El relámpago" },
|
||||
{ q: "¿Qué escuchamos después?", op: ["El trueno", "La lluvia", "El relámpago"], correcta: "El trueno" },
|
||||
{ q: "¿Cómo es la lluvia en las tormentas?", op: ["Fuerte", "Suave", "Tibia"], correcta: "Fuerte" },
|
||||
],
|
||||
emoji: "⛈️",
|
||||
},
|
||||
]
|
||||
|
||||
const exercises: any[] = []
|
||||
let idx = 0
|
||||
for (const l of lecturas) {
|
||||
for (const p of l.preguntas) {
|
||||
exercises.push({
|
||||
id: `fra5-estaciones-${idx}`,
|
||||
stage: 5,
|
||||
skillCode: `lectura-estaciones-${idx}`,
|
||||
type: "lectura",
|
||||
prerequisites: idx === 0 ? [`fra4-animales-29`] : [`fra5-estaciones-${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: las estaciones. Vocabulario temporal y relaciones causa-efecto del clima.",
|
||||
errorType: "omision-letra",
|
||||
})
|
||||
idx++
|
||||
}
|
||||
}
|
||||
|
||||
const stage: Stage = {
|
||||
id: 5,
|
||||
name: 'Centro de interés: "Las estaciones"',
|
||||
description: "Textos sobre primavera, verano, otoño e invierno con preguntas de comprensión (método Decroly).",
|
||||
exercises,
|
||||
}
|
||||
|
||||
export default stage
|
||||
@@ -0,0 +1,131 @@
|
||||
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
|
||||
@@ -0,0 +1,131 @@
|
||||
import type { Stage } from "../types"
|
||||
|
||||
const lecturas = [
|
||||
{
|
||||
text: "Martín dejó la campera en el patio de la escuela. Cuando volvió a buscarla, ya no estaba. Lloró todo el camino a casa.",
|
||||
preguntas: [
|
||||
{ q: "¿Por qué lloró Martín?", op: ["Perdió su campera", "Se lastimó", "Terminó la escuela"], correcta: "Perdió su campera" },
|
||||
{ q: "¿Dónde dejó la campera?", op: ["En el patio de la escuela", "En el aula", "En su casa"], correcta: "En el patio de la escuela" },
|
||||
{ q: "¿Qué pasó cuando volvió a buscarla?", op: ["Ya no estaba", "Estaba ahí", "Se la habían lavado"], correcta: "Ya no estaba" },
|
||||
],
|
||||
emoji: "😢",
|
||||
},
|
||||
{
|
||||
text: "El lunes Lucía no fue a la escuela. El martes sus amigos le contaron que hubo una obra de teatro. Lucía se puso triste.",
|
||||
preguntas: [
|
||||
{ q: "¿Por qué se puso triste Lucía?", op: ["Se perdió la obra de teatro", "No le gusta el teatro", "Sus amigos no le hablaron"], correcta: "Se perdió la obra de teatro" },
|
||||
{ q: "¿Qué día no fue a la escuela?", op: ["El lunes", "El martes", "El viernes"], correcta: "El lunes" },
|
||||
{ q: "¿Cómo se enteró Lucía?", op: ["Sus amigos le contaron", "Vio un cartel", "Se lo dijo la maestra"], correcta: "Sus amigos le contaron" },
|
||||
],
|
||||
emoji: "🎭",
|
||||
},
|
||||
{
|
||||
text: "Había muchas nubes grises. La mamá de Pedro le dijo que llevara el paraguas. Pedro dijo que no. Cuando salió, se mojó todo.",
|
||||
preguntas: [
|
||||
{ q: "¿Qué pasó después de que Pedro salió sin paraguas?", op: ["Se mojó", "Hizo sol", "Encontró un paraguas"], correcta: "Se mojó" },
|
||||
{ q: "¿Qué le dijo la mamá a Pedro?", op: ["Que llevara el paraguas", "Que no saliera", "Que se abrigara"], correcta: "Que llevara el paraguas" },
|
||||
{ q: "¿Por qué la mamá le dijo que llevara el paraguas?", op: ["Porque había nubes grises", "Porque ella lo necesitaba", "Porque estaba lloviendo"], correcta: "Porque había nubes grises" },
|
||||
],
|
||||
emoji: "☔",
|
||||
},
|
||||
{
|
||||
text: "La maestra preguntó quién hizo la tarea. Todos levantaron la mano menos Tomás. Él había estado jugando a la pelota toda la tarde.",
|
||||
preguntas: [
|
||||
{ q: "¿Por qué Tomás no hizo la tarea?", op: ["Estuvo jugando a la pelota", "No entendió la tarea", "Estaba enfermo"], correcta: "Estuvo jugando a la pelota" },
|
||||
{ q: "¿Quiénes hicieron la tarea?", op: ["Todos menos Tomás", "Nadie", "Solo Tomás"], correcta: "Todos menos Tomás" },
|
||||
{ q: "¿Qué hizo la maestra?", op: ["Preguntó quién hizo la tarea", "Se enojó", "Los castigó"], correcta: "Preguntó quién hizo la tarea" },
|
||||
],
|
||||
emoji: "⚽",
|
||||
},
|
||||
{
|
||||
text: "Valentina encontró un pájaro en el jardín que no podía volar. Le dio agua y semillas. Al día siguiente el pájaro se fue volando.",
|
||||
preguntas: [
|
||||
{ q: "¿Qué hizo Valentina con el pájaro?", op: ["Le dio agua y semillas", "Lo guardó en una jaula", "Lo asustó"], correcta: "Le dio agua y semillas" },
|
||||
{ q: "¿Dónde encontró al pájaro?", op: ["En el jardín", "En la calle", "En la escuela"], correcta: "En el jardín" },
|
||||
{ q: "¿Qué pasó al día siguiente?", op: ["El pájaro se fue volando", "El pájaro se quedó", "El pájaro se enfermó"], correcta: "El pájaro se fue volando" },
|
||||
],
|
||||
emoji: "🐦",
|
||||
},
|
||||
{
|
||||
text: "Sofía estudió mucho para la prueba de matemáticas. Cuando la maestra dio los resultados, Sofía tenía un 10. Saltó de alegría.",
|
||||
preguntas: [
|
||||
{ q: "¿Cómo se sintió Sofía con su resultado?", op: ["Alegre", "Triste", "Enojada"], correcta: "Alegre" },
|
||||
{ q: "¿Qué nota sacó Sofía?", op: ["10", "5", "8"], correcta: "10" },
|
||||
{ q: "¿Por qué Sofía sacó esa nota?", op: ["Porque estudió mucho", "Porque tuvo suerte", "Porque la prueba era fácil"], correcta: "Porque estudió mucho" },
|
||||
],
|
||||
emoji: "🎉",
|
||||
},
|
||||
{
|
||||
text: "El perro de Juan se escapó por la puerta abierta. Juan lo buscó por todo el barrio. Finalmente lo encontró en la plaza.",
|
||||
preguntas: [
|
||||
{ q: "¿Dónde encontró Juan a su perro?", op: ["En la plaza", "En su casa", "En la escuela"], correcta: "En la plaza" },
|
||||
{ q: "¿Por qué se escapó el perro?", op: ["Por la puerta abierta", "Por la ventana", "Por el jardín"], correcta: "Por la puerta abierta" },
|
||||
{ q: "¿Dónde buscó Juan?", op: ["Por todo el barrio", "Solo en su casa", "En la veterinaria"], correcta: "Por todo el barrio" },
|
||||
],
|
||||
emoji: "🐕",
|
||||
},
|
||||
{
|
||||
text: "La mamá de Nico le pidió que ordenara su habitación. Nico puso los juguetes en el baúl y los libros en el estante. La mamá sonrió.",
|
||||
preguntas: [
|
||||
{ q: "¿Por qué sonrió la mamá de Nico?", op: ["Porque Nico ordenó su cuarto", "Porque Nico terminó la tarea", "Porque Nico se bañó"], correcta: "Porque Nico ordenó su cuarto" },
|
||||
{ q: "¿Dónde puso los juguetes Nico?", op: ["En el baúl", "En el estante", "En la cama"], correcta: "En el baúl" },
|
||||
{ q: "¿Dónde puso los libros?", op: ["En el estante", "En el baúl", "En el piso"], correcta: "En el estante" },
|
||||
],
|
||||
emoji: "🧹",
|
||||
},
|
||||
{
|
||||
text: "Había una fila para el tobogán. Lola llegó después que Mateo pero se quería colar. Mateo le dijo que esperara su turno.",
|
||||
preguntas: [
|
||||
{ q: "¿Qué quería hacer Lola?", op: ["Colarse en la fila", "Irse a su casa", "Jugar a otra cosa"], correcta: "Colarse en la fila" },
|
||||
{ q: "¿Quién llegó primero?", op: ["Mateo", "Lola", "Los dos igual"], correcta: "Mateo" },
|
||||
{ q: "¿Qué le dijo Mateo a Lola?", op: ["Que esperara su turno", "Que se colara", "Que se fuera"], correcta: "Que esperara su turno" },
|
||||
],
|
||||
emoji: "🛝",
|
||||
},
|
||||
{
|
||||
text: "El abuelo de Ana plantó una semilla en una maceta. Todos los días la regaba. Una mañana salió una planta verde. Ana aplaudió.",
|
||||
preguntas: [
|
||||
{ q: "¿Qué salió de la semilla?", op: ["Una planta verde", "Una flor roja", "Un árbol grande"], correcta: "Una planta verde" },
|
||||
{ q: "¿Qué hacía el abuelo todos los días?", op: ["Regaba la semilla", "Le cantaba", "La movía"], correcta: "Regaba la semilla" },
|
||||
{ q: "¿Cómo reaccionó Ana?", op: ["Aplaudió", "Se enojó", "Se fue"], correcta: "Aplaudió" },
|
||||
],
|
||||
emoji: "🌱",
|
||||
},
|
||||
]
|
||||
|
||||
const exercises: any[] = []
|
||||
let idx = 0
|
||||
for (const l of lecturas) {
|
||||
for (const p of l.preguntas) {
|
||||
exercises.push({
|
||||
id: `fra7-inferencia-${idx}`,
|
||||
stage: 7,
|
||||
skillCode: `lectura-inferencia-${idx}`,
|
||||
type: "lectura",
|
||||
prerequisites: idx === 0 ? [`fra6-escuela-29`] : [`fra7-inferencia-${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: "Comprensión inferencial Decroly: deducir información no explícita en textos narrativos cortos.",
|
||||
errorType: "omision-letra",
|
||||
})
|
||||
idx++
|
||||
}
|
||||
}
|
||||
|
||||
const stage: Stage = {
|
||||
id: 7,
|
||||
name: "Comprensión inferencial",
|
||||
description: "Deducir información no explícita en textos cortos con preguntas de inferencia (método Decroly).",
|
||||
exercises,
|
||||
}
|
||||
|
||||
export default stage
|
||||
@@ -0,0 +1,67 @@
|
||||
import type { Stage } from "../types"
|
||||
|
||||
const synonymPairs = [
|
||||
{ word: "contento", synonym: "alegre" },
|
||||
{ word: "grande", synonym: "enorme" },
|
||||
{ word: "bonito", synonym: "hermoso" },
|
||||
{ word: "rápido", synonym: "veloz" },
|
||||
{ word: "pequeño", synonym: "chico" },
|
||||
{ word: "difícil", synonym: "complicado" },
|
||||
{ word: "fácil", synonym: "sencillo" },
|
||||
{ word: "importante", synonym: "valioso" },
|
||||
{ word: "triste", synonym: "apenado" },
|
||||
{ word: "cansado", synonym: "agotado" },
|
||||
{ word: "inteligente", synonym: "listo" },
|
||||
{ word: "valiente", synonym: "audaz" },
|
||||
{ word: "curioso", synonym: "preguntón" },
|
||||
{ word: "famoso", synonym: "conocido" },
|
||||
{ word: "enojado", synonym: "furioso" },
|
||||
{ word: "cariñoso", synonym: "afectuoso" },
|
||||
{ word: "orgulloso", synonym: "satisfecho" },
|
||||
{ word: "tranquilo", synonym: "calmado" },
|
||||
{ word: "divertido", synonym: "entretenido" },
|
||||
{ word: "antiguo", synonym: "viejo" },
|
||||
{ word: "nuevo", synonym: "reciente" },
|
||||
{ word: "oscuro", synonym: "sombrío" },
|
||||
{ word: "brillante", synonym: "radiante" },
|
||||
{ word: "fuerte", synonym: "resistente" },
|
||||
{ word: "amable", synonym: "gentil" },
|
||||
]
|
||||
|
||||
const exercises: any[] = []
|
||||
let idx = 0
|
||||
|
||||
// Part 1: eleccion — choose the synonym
|
||||
for (let i = 0; i < synonymPairs.length; i++) {
|
||||
const p = synonymPairs[i]
|
||||
const wrong = synonymPairs[(i + 1) % synonymPairs.length].synonym
|
||||
exercises.push({
|
||||
id: `fra8-sinonimo-${i}`,
|
||||
stage: 8,
|
||||
skillCode: `sinonimo-${i}`,
|
||||
type: "eleccion",
|
||||
prerequisites: idx === 0 ? [`fra7-inferencia-9`] : [exercises[idx - 1].id],
|
||||
content: {
|
||||
instruction: `¿Cuál es un sinónimo de "${p.word}"?`,
|
||||
audioText: `Buscá un sinónimo de ${p.word}`,
|
||||
emoji: "📖",
|
||||
options: [
|
||||
{ label: p.synonym, correct: true, id: `c-${i}` },
|
||||
{ label: wrong, correct: false, id: `w1-${i}` },
|
||||
{ label: p.word, correct: false, id: `w2-${i}` },
|
||||
].sort(() => Math.random() - 0.5),
|
||||
},
|
||||
functionalContext: "Enriquecer léxico identificando sinónimos de palabras comunes.",
|
||||
errorType: "confusion-letra",
|
||||
})
|
||||
idx++
|
||||
}
|
||||
|
||||
const stage: Stage = {
|
||||
id: 8,
|
||||
name: "Vocabulario y sinónimos",
|
||||
description: "Enriquecer el léxico identificando sinónimos de palabras cotidianas.",
|
||||
exercises,
|
||||
}
|
||||
|
||||
export default stage
|
||||
@@ -0,0 +1,131 @@
|
||||
import type { Stage } from "../types"
|
||||
|
||||
const cuentos = [
|
||||
{
|
||||
titulo: "El patito feo",
|
||||
secuencia: [
|
||||
"Un patito nació diferente a sus hermanos.",
|
||||
"Todos se burlaban de él por ser distinto.",
|
||||
"El patito se fue triste a vivir solo.",
|
||||
"Creció y se convirtió en un hermoso cisne.",
|
||||
"Todos los patos lo admiraban por su belleza.",
|
||||
],
|
||||
orden: [0, 1, 2, 3, 4],
|
||||
emoji: "🦆",
|
||||
},
|
||||
{
|
||||
titulo: "La liebre y la tortuga",
|
||||
secuencia: [
|
||||
"La liebre se burlaba de la tortuga por lenta.",
|
||||
"La tortuga la desafió a una carrera.",
|
||||
"La liebre salió corriendo muy rápido.",
|
||||
"La liebre se confió y se durmió.",
|
||||
"La tortuga pasó a la liebre y ganó la carrera.",
|
||||
],
|
||||
orden: [0, 1, 2, 3, 4],
|
||||
emoji: "🐢",
|
||||
},
|
||||
{
|
||||
titulo: "Los tres chanchitos",
|
||||
secuencia: [
|
||||
"Tres chanchitos construyeron sus casas.",
|
||||
"Uno la hizo de paja, otro de madera y otro de ladrillos.",
|
||||
"El lobo sopló y derribó la casa de paja.",
|
||||
"El lobo sopló y derribó la casa de madera.",
|
||||
"El lobo no pudo derribar la casa de ladrillos.",
|
||||
],
|
||||
orden: [0, 1, 2, 3, 4],
|
||||
emoji: "🐷",
|
||||
},
|
||||
{
|
||||
titulo: "La cigarra y la hormiga",
|
||||
secuencia: [
|
||||
"La cigarra cantaba todo el verano sin trabajar.",
|
||||
"La hormiga juntaba comida para el invierno.",
|
||||
"Llegó el invierno y la cigarra no tenía comida.",
|
||||
"La cigarra fue a pedirle comida a la hormiga.",
|
||||
"La hormiga le dio comida pero le enseñó a trabajar.",
|
||||
],
|
||||
orden: [0, 1, 2, 3, 4],
|
||||
emoji: "🐜",
|
||||
},
|
||||
]
|
||||
|
||||
const exercises: any[] = []
|
||||
let idx = 0
|
||||
|
||||
for (const cuento of cuentos) {
|
||||
// Part 1: ordenar secuencia (secuencia type)
|
||||
const shuffled = [...cuento.orden].sort(() => Math.random() - 0.5)
|
||||
exercises.push({
|
||||
id: `fra9-secuencia-${idx}`,
|
||||
stage: 9,
|
||||
skillCode: `secuencia-cuento-${idx}`,
|
||||
type: "secuencia",
|
||||
prerequisites: idx === 0 ? [`fra8-sinonimo-24`] : [exercises[idx - 1].id],
|
||||
content: {
|
||||
instruction: `Ordená los eventos de "${cuento.titulo}"`,
|
||||
text: cuento.secuencia.join(". "),
|
||||
audioText: `Ordená los eventos del cuento ${cuento.titulo}`,
|
||||
emoji: cuento.emoji,
|
||||
sequence: shuffled.map((s) => cuento.secuencia[s]),
|
||||
},
|
||||
functionalContext: "Ordenar eventos de un cuento clásico en secuencia narrativa.",
|
||||
errorType: "omision-letra",
|
||||
})
|
||||
idx++
|
||||
|
||||
// Part 2: comprensión (lectura type) — 2 preguntas por cuento
|
||||
const preguntas = cuento.titulo === "El patito feo"
|
||||
? [
|
||||
{ q: "¿Cómo nació el patito?", op: ["Diferente", "Igual", "Más grande"], correcta: "Diferente" },
|
||||
{ q: "¿En qué se convirtió?", op: ["Cisne", "Pato", "Ganso"], correcta: "Cisne" },
|
||||
]
|
||||
: cuento.titulo === "La liebre y la tortuga"
|
||||
? [
|
||||
{ q: "¿Quién ganó la carrera?", op: ["La tortuga", "La liebre", "Las dos"], correcta: "La tortuga" },
|
||||
{ q: "¿Por qué perdió la liebre?", op: ["Se durmió", "Corrió lento", "Se perdió"], correcta: "Se durmió" },
|
||||
]
|
||||
: cuento.titulo === "Los tres chanchitos"
|
||||
? [
|
||||
{ q: "¿Qué casa no pudo derribar el lobo?", op: ["La de ladrillos", "La de paja", "La de madera"], correcta: "La de ladrillos" },
|
||||
{ q: "¿De qué hizo la casa el primer chanchito?", op: ["Paja", "Madera", "Ladrillos"], correcta: "Paja" },
|
||||
]
|
||||
: [
|
||||
{ q: "¿Qué hizo la cigarra en verano?", op: ["Cantar", "Trabajar", "Dormir"], correcta: "Cantar" },
|
||||
{ q: "¿Qué le enseñó la hormiga?", op: ["A trabajar", "A cantar", "A bailar"], correcta: "A trabajar" },
|
||||
]
|
||||
|
||||
for (const p of preguntas) {
|
||||
exercises.push({
|
||||
id: `fra9-cuento-p${idx}`,
|
||||
stage: 9,
|
||||
skillCode: `cuento-pregunta-${idx}`,
|
||||
type: "lectura",
|
||||
prerequisites: [exercises[idx - 1].id],
|
||||
content: {
|
||||
instruction: `Sobre "${cuento.titulo}":`,
|
||||
text: p.q,
|
||||
audioText: p.q,
|
||||
emoji: cuento.emoji,
|
||||
options: p.op.map((o) => ({
|
||||
label: o,
|
||||
correct: o === p.correcta,
|
||||
id: o.toLowerCase().slice(0, 12),
|
||||
})),
|
||||
},
|
||||
functionalContext: "Comprensión de cuentos clásicos: responder preguntas sobre la trama.",
|
||||
errorType: "omision-letra",
|
||||
})
|
||||
idx++
|
||||
}
|
||||
}
|
||||
|
||||
const stage: Stage = {
|
||||
id: 9,
|
||||
name: "Secuencia narrativa",
|
||||
description: "Ordenar eventos de cuentos clásicos y responder preguntas de comprensión.",
|
||||
exercises,
|
||||
}
|
||||
|
||||
export default stage
|
||||
Reference in New Issue
Block a user