feat: Puente Mayúscula-Minúscula + TTS SpeechSynthesis + E2E fixes

This commit is contained in:
renato97
2026-07-21 15:31:46 -03:00
commit fa8e0c58ce
120 changed files with 16013 additions and 0 deletions
+103
View File
@@ -0,0 +1,103 @@
import type { Stage } from '../types'
const numeros2d = [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 30, 33, 40, 44, 50]
const exercises: any[] = []
for (const n of numeros2d) {
const dec = Math.floor(n / 10)
const uni = n % 10
const decStr = '🔟'.repeat(dec)
const uniStr = '●'.repeat(uni)
exercises.push({
id: `num7-componer-${n}`,
stage: 7,
skillCode: 'valor-posicional',
type: 'eleccion',
prerequisites: n <= 15 ? ['num6-resta-visual-3-1'] : [`num7-componer-${numeros2d[numeros2d.indexOf(n) - 1]}`],
content: {
instruction: `${dec} decenas + ${uni} unidades = ?`,
text: `${dec}×10 + ${uni}×1 = ?`,
audioText: `${n}: ${dec} decenas y ${uni} unidades`,
options: [
...Array.from({ length: 4 }, (_, i) => n - 2 + i + (i >= 2 ? 2 : 0))
.filter(j => j >= 10 && j <= 55 && 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: decStr,
},
functionalContext: 'Componer números de 2 dígitos en decenas y unidades.',
errorType: 'confusion-letra',
})
}
// Write the number of tens and units
for (const n of [15, 23, 30, 47, 50]) {
const dec = Math.floor(n / 10)
const uni = n % 10
exercises.push({
id: `num7-descomponer-${n}`,
stage: 7,
skillCode: 'valor-posicional',
type: 'conciencia',
prerequisites: [`num7-componer-${n}`],
content: {
instruction: `¿Cuántas decenas y unidades tiene ${n}?`,
text: `${n} = ? decenas + ? unidades`,
audioText: `${n} tiene ${dec} decenas y ${uni} unidades`,
options: [
{ label: `${dec} dec, ${uni} uni`, correct: true, id: `d${dec}u${uni}` },
{ label: `${uni} dec, ${dec} uni`, correct: false, id: `d${uni}u${dec}` },
{ label: `${dec + 1} dec, ${Math.max(0, uni - 1)} uni`, correct: false, id: `d${dec + 1}u${Math.max(0, uni - 1)}` },
],
emoji: '🔟',
},
functionalContext: 'Descomponer números en decenas y unidades.',
errorType: 'inversion-letra',
})
}
// Compare 2-digit numbers
const comparaciones = [
{ a: 15, b: 20 },
{ a: 23, b: 18 },
{ a: 30, b: 25 },
{ a: 42, b: 39 },
{ a: 50, b: 49 },
]
for (const { a, b } of comparaciones) {
const mayor = a > b ? a : b
const menor = a < b ? a : b
exercises.push({
id: `num7-comparar-${a}-${b}`,
stage: 7,
skillCode: 'comparacion-2d',
type: 'eleccion',
prerequisites: [`num7-descomponer-${mayor}`],
content: {
instruction: `¿Cuál número es más grande?`,
text: `${a} vs ${b}`,
audioText: `¿Cuál es más grande?`,
options: [
{ label: String(a), correct: a === mayor, id: String(a) },
{ label: String(b), correct: b === mayor, id: String(b) },
],
emoji: '📏',
},
functionalContext: 'Comparar números de 2 dígitos.',
errorType: 'confusion-letra',
})
}
const stage: Stage = {
id: 7,
name: 'Decenas y unidades',
description: 'Componer y descomponer números de 2 dígitos en decenas y unidades. Comparar números.',
exercises,
}
export default stage