feat: Puente Mayúscula-Minúscula + TTS SpeechSynthesis + E2E fixes
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
import type { Stage } from '../types'
|
||||
|
||||
const exercises: any[] = []
|
||||
|
||||
for (let n = 11; n <= 20; n++) {
|
||||
exercises.push({
|
||||
id: `num4-contar-${n}`,
|
||||
stage: 4,
|
||||
skillCode: `contar-${n}`,
|
||||
type: 'conciencia',
|
||||
prerequisites: n === 11 ? ['num3-cantidad-10'] : [`num4-contar-${n - 1}`],
|
||||
content: {
|
||||
instruction: `Contá. ¿Cuántos hay? (${n})`,
|
||||
audioText: `Son ${n}`,
|
||||
text: `🔵🔵🔵🔵🔵 🟣🟣🟣🟣🟣 ${n > 10 ? `+${n - 10}` : ''}`,
|
||||
options: [
|
||||
...Array.from({ length: 5 }, (_, i) => n - 2 + i)
|
||||
.filter(j => j >= 10 && j <= 20 && j !== n)
|
||||
.slice(0, 2)
|
||||
.map(j => ({ label: String(j), correct: false, id: String(j) })),
|
||||
{ label: String(n), correct: true, id: String(n) },
|
||||
].sort(() => Math.random() - 0.5),
|
||||
emoji: String(n),
|
||||
},
|
||||
functionalContext: `Reconocer el número ${n}.`,
|
||||
errorType: 'confusion-letra',
|
||||
})
|
||||
}
|
||||
|
||||
// Decenas y unidades visual
|
||||
for (let n = 10; n <= 20; n++) {
|
||||
const decenas = Math.floor(n / 10)
|
||||
const unidades = n % 10
|
||||
exercises.push({
|
||||
id: `num4-descomponer-${n}`,
|
||||
stage: 4,
|
||||
skillCode: 'decenas-unidades',
|
||||
type: 'eleccion',
|
||||
prerequisites: [`num4-contar-${n}`],
|
||||
content: {
|
||||
instruction: `${n} son ${decenas} decena${decenas > 1 ? 's' : ''} y ${unidades} unidades`,
|
||||
text: `🔟🔟${'●'.repeat(unidades)} = ${n}`,
|
||||
audioText: `${n} es ${decenas} decenas y ${unidades} unidades`,
|
||||
options: [
|
||||
{ label: '🔟 Decenas', correct: false, id: `decenas-${n}` },
|
||||
{ label: String(n), correct: true, id: String(n) },
|
||||
...Array.from({ length: 3 }, (_, i) => n + i - 1)
|
||||
.filter(j => j >= 10 && j <= 20 && j !== n)
|
||||
.slice(0, 1)
|
||||
.map(j => ({ label: String(j), correct: false, id: String(j) })),
|
||||
].sort(() => Math.random() - 0.5),
|
||||
emoji: '🔟',
|
||||
},
|
||||
functionalContext: 'Introducir decenas y unidades.',
|
||||
errorType: 'confusion-letra',
|
||||
})
|
||||
}
|
||||
|
||||
// Secuencia 11-20
|
||||
exercises.push({
|
||||
id: 'num4-secuencia-11-20',
|
||||
stage: 4,
|
||||
skillCode: 'secuencia-11-20',
|
||||
type: 'secuencia',
|
||||
prerequisites: ['num4-descomponer-20'],
|
||||
content: {
|
||||
instruction: 'Ordená los números del 11 al 20',
|
||||
audioText: 'Ordená del 11 al 20',
|
||||
sequence: ['11', '12', '13', '14', '15', '16', '17', '18', '19', '20'],
|
||||
emoji: '🔢',
|
||||
},
|
||||
functionalContext: 'Conocer la secuencia del 11 al 20.',
|
||||
errorType: 'inversion-letra',
|
||||
})
|
||||
|
||||
const stage: Stage = {
|
||||
id: 4,
|
||||
name: 'Números del 11 al 20',
|
||||
description: 'Aprender los números del 11 al 20. Introducir decenas y unidades.',
|
||||
exercises,
|
||||
}
|
||||
|
||||
export default stage
|
||||
Reference in New Issue
Block a user