Files
edueasy/curriculum/sebastian/etapa-8.ts
T
renato97 a3360ec6e4 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
2026-07-25 22:07:28 -03:00

65 lines
3.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { Stage } from "../types"
const decimalExercises = [
// Read/identify decimals
{ q: "¿0.5 es lo mismo que?", correct: "0.50", wrong1: "0.05", wrong2: "5.0", emoji: "🔢" },
{ q: "¿Cuánto es 1.25 + 0.25?", correct: "1.50", wrong1: "1.00", wrong2: "1.75", emoji: "" },
{ q: "¿Cuánto es 2.5 - 1.3?", correct: "1.2", wrong1: "1.0", wrong2: "1.8", emoji: "" },
{ q: "¿0.75 es igual a qué fracción?", correct: "3/4", wrong1: "1/4", wrong2: "1/2", emoji: "🥧" },
{ q: "¿0.5 es igual a qué fracción?", correct: "1/2", wrong1: "1/3", wrong2: "1/4", emoji: "🥧" },
{ q: "¿Cuál número es mayor: 1.5 o 1.25?", correct: "1.5", wrong1: "1.25", wrong2: "Son iguales", emoji: "📏" },
{ q: "¿Cuánto es 3.2 + 1.8?", correct: "5.0", wrong1: "4.0", wrong2: "5.5", emoji: "" },
{ q: "¿Cuánto es 4.75 - 2.25?", correct: "2.50", wrong1: "2.00", wrong2: "2.75", emoji: "" },
{ q: "¿Cuántos decimales tiene 3.14?", correct: "2", wrong1: "1", wrong2: "3", emoji: "🔢" },
{ q: "¿0.25 es igual a qué fracción?", correct: "1/4", wrong1: "1/2", wrong2: "3/4", emoji: "🥧" },
{ q: "¿Cuál es mayor: 0.8 o 0.75?", correct: "0.8", wrong1: "0.75", wrong2: "Son iguales", emoji: "📏" },
{ q: "¿Cuánto es 1.2 × 2?", correct: "2.4", wrong1: "2.2", wrong2: "2.8", emoji: "✖️" },
{ q: "¿Cuánto es 3.0 ÷ 2?", correct: "1.5", wrong1: "1.0", wrong2: "2.0", emoji: "➗" },
{ q: "¿0.20 es lo mismo que?", correct: "0.2", wrong1: "0.02", wrong2: "2.0", emoji: "🔢" },
{ q: "Ordená de menor a mayor: 1.2, 1.02, 1.20", correct: "1.02, 1.2, 1.20", wrong1: "1.2, 1.02, 1.20", wrong2: "1.20, 1.2, 1.02", emoji: "📊" },
{ q: "¿0.1 + 0.2 = ?", correct: "0.3", wrong1: "0.12", wrong2: "0.03", emoji: "" },
{ q: "¿0.5 × 10 = ?", correct: "5", wrong1: "0.05", wrong2: "50", emoji: "✖️" },
{ q: "¿0.25 + 0.75 = ?", correct: "1.0", wrong1: "0.50", wrong2: "1.5", emoji: "" },
{ q: "¿Cómo se escribe cinco centésimos?", correct: "0.05", wrong1: "0.5", wrong2: "0.005", emoji: "✏️" },
{ q: "¿1 ÷ 4 = ?", correct: "0.25", wrong1: "0.5", wrong2: "0.75", emoji: "➗" },
{ q: "¿0.9 + 0.1 = ?", correct: "1.0", wrong1: "0.10", wrong2: "1.10", emoji: "" },
{ q: "¿Cuánto es 2.5 × 2?", correct: "5.0", wrong1: "4.5", wrong2: "5.5", emoji: "✖️" },
{ q: "¿0.75 - 0.25 = ?", correct: "0.50", wrong1: "0.25", wrong2: "0.75", emoji: "" },
{ q: "¿1/2 escrito como decimal es?", correct: "0.5", wrong1: "0.25", wrong2: "0.75", emoji: "🔢" },
{ q: "¿0.3 es mayor, menor o igual a 0.30?", correct: "Igual", wrong1: "Mayor", wrong2: "Menor", emoji: "📏" },
]
const exercises: any[] = []
for (let i = 0; i < decimalExercises.length; i++) {
const e = decimalExercises[i]
exercises.push({
id: `seb8-dec-${i}`,
stage: 8,
skillCode: `decimal-${i}`,
type: "conciencia",
prerequisites: i === 0 ? [] : [exercises[i - 1].id],
content: {
instruction: e.q,
text: e.q,
audioText: e.q,
emoji: e.emoji,
options: [
{ label: e.correct, correct: true, id: `c-${i}` },
{ label: e.wrong1, correct: false, id: `w1-${i}` },
{ label: e.wrong2, correct: false, id: `w2-${i}` },
].sort(() => Math.random() - 0.5),
},
functionalContext: "Leer, comparar y operar con decimales usando material base-10 Montessori.",
errorType: "confusion-letra",
})
}
const stage: Stage = {
id: 8,
name: "Decimales",
description: "Leer, comparar y operar con decimales usando bloques base-10 como material concreto.",
exercises,
}
export default stage