236 lines
8.4 KiB
TypeScript
236 lines
8.4 KiB
TypeScript
import type { Stage } from '../types'
|
|
|
|
type ConInfo = {
|
|
letra: string
|
|
palabra: string
|
|
emoji: string
|
|
silabas: string[]
|
|
gesto: string
|
|
}
|
|
|
|
const consonantes: ConInfo[] = [
|
|
{ letra: 'M', palabra: 'MAMÁ', emoji: '👩', silabas: ['MA', 'ME', 'MI', 'MO', 'MU'], gesto: 'Manos en la boca como mmm' },
|
|
{ letra: 'P', palabra: 'PAPÁ', emoji: '👨', silabas: ['PA', 'PE', 'PI', 'PO', 'PU'], gesto: 'Manos que abren y cierran como pompa' },
|
|
{ letra: 'L', palabra: 'LUNA', emoji: '🌙', silabas: ['LA', 'LE', 'LI', 'LO', 'LU'], gesto: 'Lengua arriba como lámpara' },
|
|
{ letra: 'S', palabra: 'SOL', emoji: '☀️', silabas: ['SA', 'SE', 'SI', 'SO', 'SU'], gesto: 'Dedos como serpiente sss' },
|
|
{ letra: 'T', palabra: 'TASA', emoji: '☕', silabas: ['TA', 'TE', 'TI', 'TO', 'TU'], gesto: 'Golpecito con la mano' },
|
|
{ letra: 'N', palabra: 'NIDO', emoji: '🪺', silabas: ['NA', 'NE', 'NI', 'NO', 'NU'], gesto: 'Nariz como nido' },
|
|
{ letra: 'D', palabra: 'DEDO', emoji: '👉', silabas: ['DA', 'DE', 'DI', 'DO', 'DU'], gesto: 'Dedo señalando' },
|
|
{ letra: 'R', palabra: 'RATÓN', emoji: '🐭', silabas: ['RA', 'RE', 'RI', 'RO', 'RU'], gesto: 'Lengua que vibra como rrr' },
|
|
]
|
|
|
|
const exercises: any[] = []
|
|
|
|
for (const con of consonantes) {
|
|
// 1. Presentación con gesto
|
|
exercises.push({
|
|
id: `lec4-${con.letra.toLowerCase()}-gesto`,
|
|
stage: 4,
|
|
skillCode: `consonante-${con.letra.toLowerCase()}`,
|
|
type: 'sensibilizacion',
|
|
prerequisites: con.letra === 'M' ? ['lec3-u-completa'] : [`lec4-${consonantes[consonantes.indexOf(con) - 1].letra.toLowerCase()}-completa`],
|
|
content: {
|
|
instruction: `Hacé así para la ${con.letra}: ${con.gesto}`,
|
|
audioText: `Esta es la letra ${con.letra}. ${con.palabra}. ${con.silabas[0].toLowerCase()}`,
|
|
emoji: con.emoji,
|
|
},
|
|
functionalContext: `Conocer el gesto asociado a la consonante ${con.letra}.`,
|
|
})
|
|
|
|
// 2. Reconocer la consonante
|
|
exercises.push({
|
|
id: `lec4-${con.letra.toLowerCase()}-reconocer`,
|
|
stage: 4,
|
|
skillCode: `consonante-${con.letra.toLowerCase()}`,
|
|
type: 'eleccion',
|
|
prerequisites: [`lec4-${con.letra.toLowerCase()}-gesto`],
|
|
content: {
|
|
instruction: `Señalá la letra ${con.letra}`,
|
|
text: `Buscá la ${con.letra}`,
|
|
audioText: `¿Dónde está la ${con.letra}?`,
|
|
options: [
|
|
{ label: con.letra, correct: true, id: con.letra.toLowerCase() },
|
|
...consonantes.filter(c => c.letra !== con.letra).slice(0, 3).map(c => ({ label: c.letra, correct: false, id: c.letra.toLowerCase() })),
|
|
],
|
|
emoji: con.emoji,
|
|
},
|
|
functionalContext: `Reconocer visualmente la consonante ${con.letra}.`,
|
|
errorType: 'confusion-letra',
|
|
})
|
|
|
|
// 3. Discriminación auditiva de la sílaba
|
|
exercises.push({
|
|
id: `lec4-${con.letra.toLowerCase()}-auditiva`,
|
|
stage: 4,
|
|
skillCode: `consonante-${con.letra.toLowerCase()}`,
|
|
type: 'conciencia',
|
|
prerequisites: [`lec4-${con.letra.toLowerCase()}-reconocer`],
|
|
content: {
|
|
instruction: `Escuchá. ¿Cuál suena como ${con.silabas[0]}?`,
|
|
audioText: `${con.silabas[0]}... ${con.silabas[0]}... como ${con.palabra}`,
|
|
options: [
|
|
{ label: con.silabas[0], correct: true, id: con.silabas[0].toLowerCase() },
|
|
...consonantes.filter(c => c.letra !== con.letra).slice(0, 2).map(c => ({ label: c.silabas[0], correct: false, id: c.silabas[0].toLowerCase() })),
|
|
],
|
|
emoji: '👂',
|
|
},
|
|
functionalContext: `Discriminar auditivamente la sílaba ${con.silabas[0]}.`,
|
|
errorType: 'discriminacion-auditiva',
|
|
})
|
|
|
|
// 4. Emparejar sílaba con vocal
|
|
for (let vi = 1; vi < con.silabas.length; vi++) {
|
|
const sil = con.silabas[vi]
|
|
const vocal = sil[1]
|
|
const vocales = ['A', 'E', 'I', 'O', 'U'].filter(v => v !== vocal)
|
|
exercises.push({
|
|
id: `lec4-${con.letra.toLowerCase()}-silaba-${sil.toLowerCase()}`,
|
|
stage: 4,
|
|
skillCode: `consonante-${con.letra.toLowerCase()}-silabas`,
|
|
type: 'eleccion',
|
|
prerequisites: [`lec4-${con.letra.toLowerCase()}-auditiva`, `lec4-${con.letra.toLowerCase()}-silaba-${con.silabas[vi - 1].toLowerCase()}`],
|
|
content: {
|
|
instruction: `¿Cuál es ${sil}?`,
|
|
text: sil,
|
|
audioText: `${sil}... como ${con.palabra.toLowerCase()}`,
|
|
options: [
|
|
{ label: sil, correct: true, id: sil.toLowerCase() },
|
|
{ label: `${con.letra}${vocales[0]}`, correct: false, id: `${con.letra}${vocales[0]}`.toLowerCase() },
|
|
{ label: `${con.letra}${vocales[1]}`, correct: false, id: `${con.letra}${vocales[1]}`.toLowerCase() },
|
|
],
|
|
emoji: con.emoji,
|
|
},
|
|
functionalContext: `Leer la sílaba ${sil}.`,
|
|
errorType: 'confusion-letra',
|
|
})
|
|
}
|
|
|
|
// 5. Palabra con la consonante
|
|
exercises.push({
|
|
id: `lec4-${con.letra.toLowerCase()}-palabra`,
|
|
stage: 4,
|
|
skillCode: `consonante-${con.letra.toLowerCase()}`,
|
|
type: 'palabra',
|
|
prerequisites: [`lec4-${con.letra.toLowerCase()}-silaba-${con.silabas[con.silabas.length - 1].toLowerCase()}`],
|
|
content: {
|
|
instruction: `¿Cuál palabra empieza con ${con.letra}?`,
|
|
audioText: `${con.palabra} empieza con ${con.letra}`,
|
|
imageEmoji: con.emoji,
|
|
options: [
|
|
{ label: con.palabra, correct: true, id: con.palabra.toLowerCase() },
|
|
{ label: 'CASA', correct: false, id: 'casa' },
|
|
{ label: 'GATO', correct: false, id: 'gato' },
|
|
{ label: 'Escuchar 👂', correct: false, id: 'escuchar' },
|
|
],
|
|
},
|
|
functionalContext: `Asociar la consonante ${con.letra} con una palabra significativa.`,
|
|
errorType: 'discriminacion-auditiva',
|
|
})
|
|
|
|
// 6. Final: repaso completo
|
|
exercises.push({
|
|
id: `lec4-${con.letra.toLowerCase()}-completa`,
|
|
stage: 4,
|
|
skillCode: `consonante-${con.letra.toLowerCase()}`,
|
|
type: 'eleccion',
|
|
prerequisites: [`lec4-${con.letra.toLowerCase()}-palabra`],
|
|
content: {
|
|
instruction: `¡Repaso! Señalá la letra ${con.letra}`,
|
|
audioText: `Buscá la ${con.letra}`,
|
|
options: [
|
|
{ label: con.letra, correct: true, id: con.letra.toLowerCase() },
|
|
...consonantes.filter(c => c.letra !== con.letra).slice(0, 3).map(c => ({ label: c.letra, correct: false, id: c.letra.toLowerCase() })),
|
|
],
|
|
emoji: con.emoji,
|
|
},
|
|
functionalContext: `Consolidar reconocimiento de la consonante ${con.letra}.`,
|
|
errorType: 'confusion-letra',
|
|
})
|
|
}
|
|
|
|
// Cross-consonant discrimination exercises
|
|
exercises.push({
|
|
id: 'lec4-mix-mp',
|
|
stage: 4,
|
|
skillCode: 'consonante-discriminacion',
|
|
type: 'eleccion',
|
|
prerequisites: ['lec4-m-completa', 'lec4-p-completa'],
|
|
content: {
|
|
instruction: 'Señalá la M',
|
|
options: [
|
|
{ label: 'M', correct: true, id: 'm' },
|
|
{ label: 'P', correct: false, id: 'p' },
|
|
{ label: 'L', correct: false, id: 'l' },
|
|
],
|
|
emoji: '🔤',
|
|
},
|
|
functionalContext: 'Discriminar entre M y P.',
|
|
errorType: 'confusion-letra',
|
|
})
|
|
|
|
exercises.push({
|
|
id: 'lec4-mix-st',
|
|
stage: 4,
|
|
skillCode: 'consonante-discriminacion',
|
|
type: 'eleccion',
|
|
prerequisites: ['lec4-s-completa', 'lec4-t-completa'],
|
|
content: {
|
|
instruction: 'Señalá la T',
|
|
options: [
|
|
{ label: 'S', correct: false, id: 's' },
|
|
{ label: 'T', correct: true, id: 't' },
|
|
{ label: 'N', correct: false, id: 'n' },
|
|
],
|
|
emoji: '🔤',
|
|
},
|
|
functionalContext: 'Discriminar entre S y T.',
|
|
errorType: 'confusion-letra',
|
|
})
|
|
|
|
exercises.push({
|
|
id: 'lec4-mix-ld',
|
|
stage: 4,
|
|
skillCode: 'consonante-discriminacion',
|
|
type: 'eleccion',
|
|
prerequisites: ['lec4-l-completa', 'lec4-d-completa'],
|
|
content: {
|
|
instruction: 'Señalá la D',
|
|
options: [
|
|
{ label: 'L', correct: false, id: 'l' },
|
|
{ label: 'D', correct: true, id: 'd' },
|
|
{ label: 'R', correct: false, id: 'r' },
|
|
],
|
|
emoji: '🔤',
|
|
},
|
|
functionalContext: 'Discriminar entre L y D.',
|
|
errorType: 'confusion-letra',
|
|
})
|
|
|
|
exercises.push({
|
|
id: 'lec4-mix-nr',
|
|
stage: 4,
|
|
skillCode: 'consonante-discriminacion',
|
|
type: 'eleccion',
|
|
prerequisites: ['lec4-n-completa', 'lec4-r-completa'],
|
|
content: {
|
|
instruction: 'Señalá la R',
|
|
options: [
|
|
{ label: 'N', correct: false, id: 'n' },
|
|
{ label: 'R', correct: true, id: 'r' },
|
|
{ label: 'M', correct: false, id: 'm' },
|
|
],
|
|
emoji: '🔤',
|
|
},
|
|
functionalContext: 'Discriminar entre N y R.',
|
|
errorType: 'confusion-letra',
|
|
})
|
|
|
|
const stage: Stage = {
|
|
id: 4,
|
|
name: 'Consonantes M-P-L-S-T-N-D-R',
|
|
description: 'Aprender las consonantes M, P, L, S, T, N, D, R con gestos, sílabas, y palabras significativas.',
|
|
exercises,
|
|
}
|
|
|
|
export default stage
|