Files
renato97 07929b6c60 feat: fase 4 — overhaul, docker, seguridad, métodos europeos
- Eliminada ruta duplicada /sebastian/sumas (código muerto)
- Removido topic 'sumas' del engine (reemplazado por 'matematicas')
- Creado docker-compose.yml (PostgreSQL + app, 1 comando install)
- Dockerfile: copiado prisma CLI al runner stage para db push
- APIs debug protegidas: 403 en producción (reset, state, seed)
- Audit métodos europeos: 24 archivos corregidos al 100%
  - Montessori: matemática Francesca + Sebastián
  - Decroly: lectura, ortografía, historia, geografía, banderas
  - Borel-Maisonny: lectura inicial Isabella (ya existía)
  - Freinet: expresión escrita Sebastián (ya existía)
- Validación prerequisitos: 0 rotos en contenido nuevo (157 ejercicios)
- INSTALL.md: guía completa de instalación
- fase4.md: documentación del overhaul
- E2E: 2 tests corregidos, 61/61 pasan
- TypeScript: exit 0, Build: exit 0
2026-07-25 22:34:05 -03:00

69 lines
6.1 KiB
TypeScript

import type { Stage } from "../types"
const problems = [
{ q: "Compré 3 lápices a $15 cada uno y pagué con $100. ¿Cuánto vuelto recibí?", correct: "$55", wrong1: "$45", wrong2: "$85", emoji: "✏️" },
{ q: "Tenía 45 figuritas. Regalé 18. Mi hermano me dio 12 más. ¿Cuántas tengo ahora?", correct: "39", wrong1: "35", wrong2: "42", emoji: "🃏" },
{ q: "En una granja hay 24 vacas y el doble de gallinas. ¿Cuántos animales hay?", correct: "72", wrong1: "48", wrong2: "96", emoji: "🐄" },
{ q: "Una caja tiene 12 bombones. Compré 5 cajas. Repartí 18 bombones en la fiesta. ¿Cuántos me quedan?", correct: "42", wrong1: "38", wrong2: "48", emoji: "🍫" },
{ q: "Lucas ahorra $25 por semana. ¿Cuánto ahorra en 4 semanas? Si gasta $30 en un juguete, ¿cuánto le queda?", correct: "$70", wrong1: "$60", wrong2: "$80", emoji: "🏦" },
{ q: "En una biblioteca hay 5 estantes con 30 libros cada uno. Se prestaron 42 libros. ¿Cuántos quedan?", correct: "108", wrong1: "98", wrong2: "112", emoji: "📚" },
{ q: "Un autobús lleva 45 pasajeros. En la primera parada bajan 12 y suben 8. ¿Cuántos pasajeros hay ahora?", correct: "41", wrong1: "39", wrong2: "43", emoji: "🚌" },
{ q: "María tiene 8 años. Su mamá tiene el triple de años que ella. ¿Cuántos años tiene la mamá?", correct: "24", wrong1: "22", wrong2: "26", emoji: "👩‍👧" },
{ q: "Había 36 galletitas en un frasco. Comí 9. Después mamá puso 15 más. ¿Cuántas hay ahora?", correct: "42", wrong1: "38", wrong2: "45", emoji: "🍪" },
{ q: "Un equipo anotó 12 puntos en el primer tiempo y 18 en el segundo. El otro equipo anotó 21 en total. ¿Quién ganó?", correct: "El primero", wrong1: "El segundo", wrong2: "EMPATE", emoji: "🏀" },
{ q: "Compré 2 paquetes de figuritas a $8 cada uno y 3 caramelos a $2 cada uno. ¿Cuánto gasté?", correct: "$22", wrong1: "$20", wrong2: "$24", emoji: "🛍️" },
{ q: "Un rectángulo mide 8 cm de largo y 5 cm de ancho. ¿Cuál es su perímetro?", correct: "26 cm", wrong1: "24 cm", wrong2: "28 cm", emoji: "📐" },
{ q: "En un kiosco vendieron 35 helados el sábado y 28 el domingo. Cada helado cuesta $4. ¿Cuánto recaudaron?", correct: "$252", wrong1: "$240", wrong2: "$260", emoji: "🍦" },
{ q: "Tres amigos juntan su dinero: Juan $50, Ana $75 y Pedro $25. Quieren comprar un juego de $180. ¿Cuánto les falta?", correct: "$30", wrong1: "$20", wrong2: "$40", emoji: "🎮" },
{ q: "Un paquete de 6 facturas cuesta $18. ¿Cuánto cuesta cada factura? ¿Cuánto cuestan 10 facturas?", correct: "$30", wrong1: "$28", wrong2: "$32", emoji: "🥐" },
{ q: "Un avión viaja a 800 km/h. ¿Cuántos kilómetros recorre en 3 horas?", correct: "2400 km", wrong1: "2200 km", wrong2: "2600 km", emoji: "✈️" },
{ q: "En un cine hay 20 filas de 15 butacas cada una. Se vendieron 240 entradas. ¿Cuántas butacas quedaron libres?", correct: "60", wrong1: "50", wrong2: "70", emoji: "🎬" },
{ q: "Valentina tiene $500. Gasta $180 en un libro y $95 en una remera. ¿Cuánto le queda?", correct: "$225", wrong1: "$215", wrong2: "$235", emoji: "👚" },
{ q: "Un tanque tiene 250 litros de agua. Se usaron 75 litros para regar y 120 para limpiar. ¿Cuántos litros quedan?", correct: "55 L", wrong1: "45 L", wrong2: "65 L", emoji: "💧" },
{ q: "En una carrera, el primero llegó en 45 minutos. El segundo llegó 12 minutos después. ¿En qué tiempo llegó el segundo?", correct: "57 min", wrong1: "55 min", wrong2: "59 min", emoji: "🏃" },
{ q: "Un productor tiene 350 manzanas. Vende 125 el lunes y 98 el martes. ¿Cuántas le quedan?", correct: "127", wrong1: "117", wrong2: "137", emoji: "🍎" },
{ q: "Hay 4 bolsas con 15 pelotitas cada una. Se caen 8 pelotitas. ¿Cuántas quedan?", correct: "52", wrong1: "48", wrong2: "55", emoji: "⚾" },
{ q: "Una receta usa 2 huevos. Si hacés 5 recetas, ¿cuántos huevos necesitás? Si tenés 15, ¿cuántos sobran?", correct: "5", wrong1: "3", wrong2: "7", emoji: "🥚" },
{ q: "Un jardín tiene 28 flores blancas y 14 rojas. La mitad de las blancas se marchitaron. ¿Cuántas flores quedan?", correct: "28", wrong1: "21", wrong2: "35", emoji: "🌸" },
{ q: "Ahorré $8 por mes durante 9 meses. Gasté la cuarta parte en un regalo. ¿Cuánto gasté?", correct: "$18", wrong1: "$16", wrong2: "$20", emoji: "🎁" },
{ q: "En un estacionamiento hay 4 filas de 12 autos cada una. Salen 15 autos. ¿Cuántos quedan?", correct: "33", wrong1: "30", wrong2: "36", emoji: "🚗" },
{ q: "Un álbum tiene 200 espacios. Tengo 85 figuritas. Mi amigo me da 30 más. ¿Cuántas me faltan?", correct: "85", wrong1: "75", wrong2: "95", emoji: "📖" },
{ q: "Un saco de papas pesa 25 kg. Si vendo 3 sacos y sobran 12 kg para mi casa, ¿cuántos kg vendí?", correct: "63 kg", wrong1: "58 kg", wrong2: "68 kg", emoji: "🥔" },
{ q: "Hay 120 libros en una biblioteca. El 50% son de cuentos. ¿Cuántos cuentos hay?", correct: "60", wrong1: "50", wrong2: "70", emoji: "📚" },
{ q: "Un termómetro marca 15°C. Sube 8°C y luego baja 12°C. ¿Cuánto marca ahora?", correct: "11°C", wrong1: "10°C", wrong2: "12°C", emoji: "🌡️" },
]
const exercises: any[] = []
for (let i = 0; i < problems.length; i++) {
const e = problems[i]
exercises.push({
id: `seb10-prob-${i}`,
stage: 10,
skillCode: `problema-multistep-${i}`,
type: "problema",
prerequisites: i === 0 ? [] : [exercises[i - 1].id],
content: {
instruction: "Resolvé el problema:",
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: "Resolver problemas de varios pasos que requieren 2-3 operaciones combinadas.. Método Montessori.",
errorType: "discriminacion-auditiva",
})
}
const stage: Stage = {
id: 10,
name: "Problemas de varios pasos",
description: "Resolver problemas que requieren 2-3 operaciones combinadas en contexto cotidiano.",
exercises,
}
export default stage